xref: /aosp_15_r20/external/libxml2/tools/genEscape.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*7c568831SAndroid Build Coastguard Worker
3*7c568831SAndroid Build Coastguard Workerentities = [
4*7c568831SAndroid Build Coastguard Worker    [ '',   '�' ],
5*7c568831SAndroid Build Coastguard Worker    [ '\t', '	' ],
6*7c568831SAndroid Build Coastguard Worker    [ '\n', '
' ],
7*7c568831SAndroid Build Coastguard Worker    [ '\r', '
' ],
8*7c568831SAndroid Build Coastguard Worker    [ '"',  '"' ],
9*7c568831SAndroid Build Coastguard Worker    [ '&',  '&' ],
10*7c568831SAndroid Build Coastguard Worker    [ '<',  '&lt;' ],
11*7c568831SAndroid Build Coastguard Worker    [ '>',  '&gt;' ],
12*7c568831SAndroid Build Coastguard Worker]
13*7c568831SAndroid Build Coastguard Worker
14*7c568831SAndroid Build Coastguard Worker### xmlEscapeContent
15*7c568831SAndroid Build Coastguard Worker
16*7c568831SAndroid Build Coastguard Workeroffset = [ None ] * 128
17*7c568831SAndroid Build Coastguard Workerpos = 0
18*7c568831SAndroid Build Coastguard Workerr = ''
19*7c568831SAndroid Build Coastguard Worker
20*7c568831SAndroid Build Coastguard Workerfor rec in entities:
21*7c568831SAndroid Build Coastguard Worker    char, repl = rec
22*7c568831SAndroid Build Coastguard Worker
23*7c568831SAndroid Build Coastguard Worker    if char:
24*7c568831SAndroid Build Coastguard Worker        offset[ord(char)] = pos
25*7c568831SAndroid Build Coastguard Worker
26*7c568831SAndroid Build Coastguard Worker    if pos % 12 == 0: r += '\n    '
27*7c568831SAndroid Build Coastguard Worker    else: r += ' '
28*7c568831SAndroid Build Coastguard Worker    r += '%3d,' % len(repl)
29*7c568831SAndroid Build Coastguard Worker    pos += 1
30*7c568831SAndroid Build Coastguard Worker
31*7c568831SAndroid Build Coastguard Worker    for c in repl:
32*7c568831SAndroid Build Coastguard Worker        if pos % 12 == 0: r += '\n    '
33*7c568831SAndroid Build Coastguard Worker        else: r += ' '
34*7c568831SAndroid Build Coastguard Worker        r += "'%s'," % c
35*7c568831SAndroid Build Coastguard Worker        pos += 1
36*7c568831SAndroid Build Coastguard Worker
37*7c568831SAndroid Build Coastguard Workerprint('static const char xmlEscapeContent[] = {%s\n};\n' % r)
38*7c568831SAndroid Build Coastguard Worker
39*7c568831SAndroid Build Coastguard Worker### xmlEscapeTab
40*7c568831SAndroid Build Coastguard Worker
41*7c568831SAndroid Build Coastguard Workerescape = '\r&<>'
42*7c568831SAndroid Build Coastguard Workerr = ''
43*7c568831SAndroid Build Coastguard Worker
44*7c568831SAndroid Build Coastguard Workerfor i in range(0x80):
45*7c568831SAndroid Build Coastguard Worker
46*7c568831SAndroid Build Coastguard Worker    if chr(i) in escape:
47*7c568831SAndroid Build Coastguard Worker        v = offset[i]
48*7c568831SAndroid Build Coastguard Worker    elif i != 9 and i != 10 and i < 20:
49*7c568831SAndroid Build Coastguard Worker        v = 0
50*7c568831SAndroid Build Coastguard Worker    else:
51*7c568831SAndroid Build Coastguard Worker        v = -1
52*7c568831SAndroid Build Coastguard Worker
53*7c568831SAndroid Build Coastguard Worker    if i % 16 == 0: r += '\n    '
54*7c568831SAndroid Build Coastguard Worker    else: r += ' '
55*7c568831SAndroid Build Coastguard Worker    r += '%2d,' % v
56*7c568831SAndroid Build Coastguard Worker
57*7c568831SAndroid Build Coastguard Workerprint('static const char xmlEscapeTab[128] = {%s\n};\n' % r)
58*7c568831SAndroid Build Coastguard Worker
59*7c568831SAndroid Build Coastguard Worker### xmlEscapeTabAttr
60*7c568831SAndroid Build Coastguard Worker
61*7c568831SAndroid Build Coastguard Workerescape = '\t\n\r"&<>'
62*7c568831SAndroid Build Coastguard Workerr = ''
63*7c568831SAndroid Build Coastguard Worker
64*7c568831SAndroid Build Coastguard Workerfor i in range(0x80):
65*7c568831SAndroid Build Coastguard Worker
66*7c568831SAndroid Build Coastguard Worker    if chr(i) in escape:
67*7c568831SAndroid Build Coastguard Worker        v = offset[i]
68*7c568831SAndroid Build Coastguard Worker    elif i != 9 and i != 10 and i < 20:
69*7c568831SAndroid Build Coastguard Worker        v = 0
70*7c568831SAndroid Build Coastguard Worker    else:
71*7c568831SAndroid Build Coastguard Worker        v = -1
72*7c568831SAndroid Build Coastguard Worker
73*7c568831SAndroid Build Coastguard Worker    if i % 16 == 0: r += '\n    '
74*7c568831SAndroid Build Coastguard Worker    else: r += ' '
75*7c568831SAndroid Build Coastguard Worker    r += '%2d,' % v
76*7c568831SAndroid Build Coastguard Worker
77*7c568831SAndroid Build Coastguard Workerprint('static const char xmlEscapeTabAttr[128] = {%s\n};\n' % r)
78*7c568831SAndroid Build Coastguard Worker
79