Code: Alles auswählen
import re
TOKENS = re.compile('''
(\\#[^\r\n]*) |
(and|as|assert|break|class|continue|def|del|elif|else|except|exec|finally|
for|from|global|if|import|in|is|lambda|not|or|pass|print|raise|return|
try|while|with|yield)\\b |
([rR]?[uU]?
(?:""".*?"""|"(?:\\\\"|[^"])*?"|\'\'\'.*?\'\'\'|'(?:\\\\'|[^'])*?')) |
(0[xX][0-9a-fA-F]+|\\d+(?:\\.\\d+)?(?:[eE][-+]?\\d+)?[lLjJ]?) |
((?:(?<=def)|(?<=class))(\\s+)(\\w+)) |
(\\s+|\\w+|.)''', re.DOTALL + re.VERBOSE)
def colorize(s):
tokens = []
for m in TOKENS.finditer(s):
if m.group(1): # comments
tokens.append("<i>%s</i>" % m.group())
elif m.group(2): # keywords
tokens.append("<b>%s</b>" % m.group())
elif m.group(3): # strings
tokens.append("<span class='str'>%s</span>" % m.group())
elif m.group(4): # numbers
tokens.append("<span class='num'>%s</span>" % m.group())
elif m.group(5): # defined names
tokens.append("%s<u>%s</u>" % (m.group(6), m.group(7)))
else:
tokens.append(m.group())
return "".join(tokens)