Подсветка синтаксиса 1С на PHP (Highlight 1C on PHP)


Скрипт для компактной раскраски кода (в HTML) на 1С для PHP 5.3+ с поддержкой двуязычности, лексическим разбором и распознаванием идентификаторов глобального контекста и встроенных функций 1С.

Шаблон раскраски

Шаблон раскраски  

Демо: Перейти (Двойной щелчок по раскрашенному коду выделяет его)
Требования: PHP 5.3+, расширение Multibyte String.
Производительность: 2500 строк/сек. на Intel Pentium 4, 3.00 GHz, PHP 5.3.6, Windows XP.
Примеры раскраски: monokai, visual studio.
Идея реализации: cyberforum.ru.

Особенности:

  1. Работает с кодировкой Windows-1251. Может понадобиться обёртка для преобразования в/из Windows-1251 до раскраски и после.
    Полностью поддерживается двуязычность.
  2. Используется лексический анализатор, а не регулярные выражения.
  3. Подсветка следующих видов лексем: строка, комментарий, число, идентификатор, зарезервированное слово, имя новой функции, глобальный идентификатор, метка, директива компиляции, инструкция препроцессора, дата, оператор, неизвестный символ.
  4. Распознаются все идентификаторы глобального контекста языка 1С, а также встроенные функции и ряд типов данных. Различаются встроенные функции и пользовательские переменные с такими же именами.
  5. Настройка раскраски осуществляется средствами css.
  6. Код разметки очень компактный за счёт использования сокращённых имён классов: a0..z9. Возможно использование пользовательских имён классов.
  7. Есть возможность преобразования табов в фиксированное количество пробелов или использование умных отступов (smart indentation).
  8. Возможность не подсвечивать обычные идентификаторы снижает размер итогового HTML кода в ~2.5 раза.

Пример использования:

require_once('1c.php');
$H = new B2LibHighlighter1C();
echo($H->Highlight($Code));

Настройка раскраски:

  • У экземпляров класса B2LibHighlighter1C есть ряд настраиваемых параметров:
    • TabsToSpaces = true; // Заменять ли табы пробелами
    • TabSize = 4; // Количество пробелов в табе: 0..32
    • SmartIdent = false; // Умный отступ: динамический размер табов
    • MarkIdents = false; // Подсвечивать ли обычные идентификаторы
    • Styles = array(…); // Массив имени стиля => имени класса css
  • Доступные имена стилей: string, comment, number, ident, resword, function, global_ident, label, directive, preprocess, date, operator, char
  • Статические массивы (имя => true) $ResWords, $GlobalIdents и $GlobalFuncs доступны для пополнения новыми идентификаторами

Содержимое архива highlighter_1c.rar:

  • src — Содержит исходные коды модулей раскраски 
  • monokai.css — Пример шаблона раскраски
  • visual studio.css — Пример шаблона раскраски
  • example_monokai.html — Пример раскраски
  • example_visual_studio.html — Пример раскраски 
  • index.html — Форма для демонстрации
  • template.html — Шаблон странички, генерируемой демо-скриптом
  • 1c.php — Объединённые в один файл модули раскраски
  • highlight.php — Демонстрационный скрипт

 

2 Comments

  1. kirillkr

    Модуль 1С для GeSHi

    http://hg.kraeg.ru/geshi1c/

    Reply
  2. sikuda

    Что-то демка перестала работать…

    Ну и свой проект оставлю для ссылки — https://www-1c.ru/wp-content/plugins/codemirror1c/

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *