Страница для индексации
Перейти на сайт
Для оживления документации я написал простенький раскрасчик исходного кода. Существуют полноценные семантические анализаторы, которые можно встроить в Сову . Если Вам это потребуется, showCode как пример может помочь.
Когда и как происходит раскраска:
Есть специальный тип поля 'rtf' , в котором может содержаться разметка в виде {_ ... _} .
Sova берет информацию из БД и отправляет клиенту вместе с URL формы. Но перед тем как отправить, Sova выполняет для этой формы функцию queryOpen (для каждой формы свою). Здесь и происходит для поля 'rtf' замена простого текста на текст+разметка .
rtfText = showCode(plainText)

Ниже показано, как showCode сам себя раскрасил.
CODE__
# *** *** ***

import re

def showCode(plain):
'''
Наипримитивнейший раскрасчик кода.
Заменяет строки, комментарии и ключевые слова на элементы дизайна "div".
Границами нового элемента служат сочетания "{_" и "_}" без пробела.
'''
code = re.search('CODE__([\\s\\S]+)__CODE', plain)
if not code:
return plain

s = code.group(1).replace('{_', '{ _').replace('_}', '_ }').replace('\\', '\\\\')

i = 0
ls = []
for c in set(re.findall("'''[\\s\\S]+?'''", s)): # убираем из кода многостроки в массив ls
ls.append('{_{"div": "%s", "style": {"color": "green", "display":"inline", "fontWeight": "bold"}}_}' % c.replace('\n', '\\n'))
s = s.replace(c, '___%d___' % i)
i += 1
for c in set(re.findall("'[\\s\\S]+?'", s)): # убираем из кода строки в массив ls
ls.append('{_{"div": "%s", "style": {"color": "green", "display":"inline", "fontWeight": "bold"}}_}' % c)
s = s.replace(c, '___%d___' % i)
i += 1
for c in set(re.findall('#[\\s\\S]+?\n', s)): # убираем из кода комментарии в массив ls (лучший цвет - красный)
ls.append('{_{"div": "%s", "style": {"color": "red", "display":"inline", "fontWeight": "bold"}}_}\n' % c[0:-1])
s = s.replace(c, '___%d___' % i)
i += 1

# теперь можно раскрасить синтаксис
for c in ['class', 'from', 'import', 'set', 'list', 'dict', 'def', 'for', 'in', 'if', 'elif', 'else', 'return', 'and', 'or', 'not']:
s = re.sub ('\\b%s\\b' % c, '{_{"div": "%s", "style": {"color": "blue", "display":"inline", "fontWeight": "bold"}}_}' % c, s)

for j in range(i): # восстанавливаем строки и комментарии с новым окрасом
s = s.replace('___%d___' % j, ls[j])

return plain.replace(code.group(0), s)
__CODE