| #!/usr/bin/env python3 | |
| 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') |