Главная
>>
Каталог задач
>>
Разное
>>
Подсветка синтаксиса
Подсветка синтаксиса
реализации: perl, количество: 1
Aвтор: this
Дата: 19.12.2007
Просмотров: 7563
Рейтинг:
7/3,5.08(992)
+
реализации(исходники)
+добавить
Во многих приложениях, особенно технической программисткой направленности - часто возникает задача подсветки синтаксиса, как-то: html, код программы на каком-либо языке, какая-нибудь специализированная разметка.
Очевидно, что при реализации с основном задействуются строковые функции, регулярные выжения и т.д. - вопрос в том, чтобы как можно оптимальней и осторожней их использовать дабы не расходовать меньше ресурсов.
Реализации:
perl(1)
+добавить реализацию
1)
any2html с подсветкой синтаксиса, code #551[автор:-]
filename = "/tmp/xxx.html" #можно и имя текущего файла заюзать, пристегнув к нему ".html"
# заголовок файла, заодно включение переноса по словам (в логах строки бывают длинными)
write_file("<html><body><pre style=\"white-space: -moz-pre-wrap;"\
"white-space: -pre-wrap;white-space: -o-pre-wrap;"\
"white-space: pre-wrap;word-wrap: break-word;\">", filename)
b = 0
info = get_style_at_pos(b) # информация о стиле символа на данной позиции
while (info[])
{
# сначала стиль
str = "<font color=" info["rgb"] ">"
if (info["bold"]) str = str "<b>"
if (info["italic"]) str = str "<i>"
append_file(str, filename)
# теперь сам текст (плюс немножко необходимых преобразований для HTML)
e = b + info["extent"]
append_file(replace_in_string(replace_in_string(\
get_range(b,e), "&", "&", "copy"), "<", "<", "copy"), filename)
# ну и опять стиль
str = "</font>"
if (info["italic"]) str = "</i>" str
if (info["bold"]) str = "</b>" str
append_file(str, filename)
# следующая итерация
b = e
info = get_style_at_pos(b)
}
append_file("</pre></body></html>", filename)