Скрипт для компактной раскраски кода (в 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.
Особенности:
- Работает с кодировкой Windows-1251. Может понадобиться обёртка для преобразования в/из Windows-1251 до раскраски и после.
Полностью поддерживается двуязычность. - Используется лексический анализатор, а не регулярные выражения.
- Подсветка следующих видов лексем: строка, комментарий, число, идентификатор, зарезервированное слово, имя новой функции, глобальный идентификатор, метка, директива компиляции, инструкция препроцессора, дата, оператор, неизвестный символ.
- Распознаются все идентификаторы глобального контекста языка 1С, а также встроенные функции и ряд типов данных. Различаются встроенные функции и пользовательские переменные с такими же именами.
- Настройка раскраски осуществляется средствами css.
- Код разметки очень компактный за счёт использования сокращённых имён классов: a0..z9. Возможно использование пользовательских имён классов.
- Есть возможность преобразования табов в фиксированное количество пробелов или использование умных отступов (smart indentation).
- Возможность не подсвечивать обычные идентификаторы снижает размер итогового 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 — Демонстрационный скрипт
Модуль 1С дляGeSHi
http://hg.kraeg.ru/geshi1c/
Что-то демка перестала работать…
https://www-1c.ru/wp-content/plugins/codemirror1c/
Ну и свой проект оставлю для ссылки —