|
|
|
|
|
|
|
|
entities = [ |
|
|
[ '', '�' ], |
|
|
[ '\t', '	' ], |
|
|
[ '\n', ' ' ], |
|
|
[ '\r', ' ' ], |
|
|
[ '"', '"' ], |
|
|
[ '&', '&' ], |
|
|
[ '<', '<' ], |
|
|
[ '>', '>' ], |
|
|
] |
|
|
|
|
|
offset = [ None ] * 128 |
|
|
|
|
|
def gen_content(out): |
|
|
pos = 0 |
|
|
r = '' |
|
|
|
|
|
for rec in entities: |
|
|
char, repl = rec |
|
|
|
|
|
if char: |
|
|
offset[ord(char)] = pos |
|
|
|
|
|
if pos % 12 == 0: r += '\n ' |
|
|
else: r += ' ' |
|
|
r += '%3d,' % len(repl) |
|
|
pos += 1 |
|
|
|
|
|
for c in repl: |
|
|
if pos % 12 == 0: r += '\n ' |
|
|
else: r += ' ' |
|
|
r += "'%s'," % c |
|
|
pos += 1 |
|
|
|
|
|
out.write('static const char xmlEscapeContent[] = {%s\n};\n\n' % r) |
|
|
|
|
|
def gen_tab(out, name, escape, is_xml): |
|
|
r = '' |
|
|
|
|
|
for i in range(0x80): |
|
|
|
|
|
if chr(i) in escape: |
|
|
v = offset[i] |
|
|
elif i == 0: |
|
|
v = 0 |
|
|
elif is_xml and i < 32 and i != 9 and i != 10: |
|
|
v = 0 |
|
|
else: |
|
|
v = -1 |
|
|
|
|
|
if i % 16 == 0: r += '\n ' |
|
|
else: r += ' ' |
|
|
r += '%2d,' % v |
|
|
|
|
|
out.write('static const signed char %s[128] = {%s\n};\n\n' % (name, r)) |
|
|
|
|
|
with open('codegen/escape.inc', 'w') as out: |
|
|
gen_content(out) |
|
|
|
|
|
gen_tab(out, 'xmlEscapeTab', '\r&<>', True) |
|
|
gen_tab(out, 'xmlEscapeTabQuot', '\r"&<>', True) |
|
|
gen_tab(out, 'xmlEscapeTabAttr', '\t\n\r"&<>', True) |
|
|
|
|
|
out.write('#ifdef LIBXML_HTML_ENABLED\n\n') |
|
|
gen_tab(out, 'htmlEscapeTab', '&<>', False) |
|
|
gen_tab(out, 'htmlEscapeTabAttr', '"&<>', False) |
|
|
out.write('#endif /* LIBXML_HTML_ENABLED */\n') |
|
|
|