Задача: Подсветка синтаксиса
Исходник: any2html с подсветкой синтаксиса, язык: perl [code #551, hits: 7260]
автор: - [добавлен: 19.12.2007]
  1. filename = "/tmp/xxx.html" #можно и имя текущего файла заюзать, пристегнув к нему ".html"
  2.  
  3. # заголовок файла, заодно включение переноса по словам (в логах строки бывают длинными)
  4. write_file("<html><body><pre style=\"white-space: -moz-pre-wrap;"\
  5. "white-space: -pre-wrap;white-space: -o-pre-wrap;"\
  6. "white-space: pre-wrap;word-wrap: break-word;\">", filename)
  7. b = 0
  8. info = get_style_at_pos(b) # информация о стиле символа на данной позиции
  9. while (info[])
  10. {
  11. # сначала стиль
  12. str = "<font color=" info["rgb"] ">"
  13. if (info["bold"]) str = str "<b>"
  14. if (info["italic"]) str = str "<i>"
  15. append_file(str, filename)
  16.  
  17. # теперь сам текст (плюс немножко необходимых преобразований для HTML)
  18. e = b + info["extent"]
  19. append_file(replace_in_string(replace_in_string(\
  20. get_range(b,e), "&", "&amp;", "copy"), "<", "&lt;", "copy"), filename)
  21.  
  22. # ну и опять стиль
  23. str = "</font>"
  24. if (info["italic"]) str = "</i>" str
  25. if (info["bold"]) str = "</b>" str
  26. append_file(str, filename)
  27.  
  28. # следующая итерация
  29. b = e
  30. info = get_style_at_pos(b)
  31. }
  32. append_file("</pre></body></html>", filename)
Не секрет, что подсветка синтаксиса рулит, особенно если ее можно легко и быстро настроить для любого формата текста (например, для логов Вашей собственной программы, чтоб ошибки подсвечивались жирным красным).
В этом смысле лучше редактора NEdit я ничего не видел — он позволяет настроить раскраску практически любого текста (в том числе содержащую всякую бинарную нечисть типа символов с кодом 1 (FIX protocol) и т.д.) буквально за пару минут без рестарта, ковыряния в конфигах и т.д — достаточно знания регэкспов в объеме перла-5.

Так вот у NEdit-a еще есть такая приятность, как команды для получения информации о раскраске файла, что делает создания макроса по преобразованию файла в HTML (естественно, с полным сохранением всей раскраски) тривиальным.
Макрос этот можно написать по-разному, в зависимости от того, что Вам требуется.
Можно сделать простейший вариант (как это сделал я, потому что это проще всего, пример ниже) — он просто сохраняет файл, открытый в текущей активной вкладке, в файл на диске (с тем же успехом можно выводить результирующий html в новую вкладку или вообще заменять содержимое вкладки на месте, а также преобразовывать не весь файл, а только выделенный текст, и т.д.).
Можно сделать его функцией и упрятать в файл *.nm — тогда этот макрос можно будет звать прямо из консоли через аргумент -do.
В общем, вариантов множество.
Да, можно, в зависимости от целей, делать либо простейший html (задавая раскраску через "&lt;font color&gt;", &lt;b&gt; и &lt;i&gt;, как это сделано в примере ниже), этот вариант идеален для закидывания кусков текста во всякие ЖЖ, а можно генерить полноценный HTML со стилями и CSS (или складывать CSS в отдельный файл). А можно и вообще не HTML
В общем, простейший вариант этого скрипта, как он есть сейчас.

Думаю, что происходит, очевидно и в дальнейших комментариях не нуждается.

Если есть вопросы/комментарии — пишите.


P.S. Если хочется сделать решение с CSS, нужно звать info["style"] для получения имени стиля.

P.P.S. Кстати, эту возможность NEdit'а раскрашивать текст в одно движение по регэкспам любой сложности я использую для тестирования этих самых регэкспов, просто создавая новый "язык" с раскраской разными цветами интересующих меня частей регэкспа, и рассматривая, как он раскрасил интересующий меня текст.

Источник: http://rsdn.ru/forum/Message.aspx?mid=2469011&only=1

+добавить реализацию