1{
2 **********************************************************************
3  This file is part of LazUtils.
4  It is copied and modified from a file in Free Component Library.
5
6  See the file COPYING.FPC, included in this distribution,
7  for details about the license.
8 **********************************************************************
9
10  XML naming character tables, built upon w3.org specifications
11
12}
13
14type
15  TSetOfByte = set of Byte;
16
17const
18// colon ($3a) is excluded, it is handled in the code
19  ns_ASCII = [{ $3A,} $41..$5A, $5F, $61..$7A, $C0..$D6, $D8..$F6, $F8..$FF];
20  ns_0200  = [0..$17, $50..$A8, $BB..$C1];
21  ns_0300  = [$86, $88..$8A, $8C, $8E..$A1,
22              $A3..$CE, $D0..$D6, $DA, $DC,
23              $DE, $E0, $E2..$F3];
24  ns_0400  = [$01..$0C, $0E..$4F, $51..$5C,
25              $5E..$81, $90..$C4, $C7..$C8,
26              $CB..$CC, $D0..$EB, $EE..$F5,
27              $F8..$F9];
28  ns_0500  = [$31..$56, $59, $61..$86, $D0..$EA, $F0..$F2];
29  ns_0600  = [$21..$3A, $41..$4A, $71..$B7,
30              $BA..$BE, $C0..$CE, $D0..$D3,
31              $D5, $E5..$E6];
32  ns_0900  = [$05..$39, $3D, $58..$61,
33              $85..$8C, $8F..$90, $93..$A8,
34              $AA..$B0, $B2, $B6..$B9,
35              $DC..$DD, $DF..$E1, $F0..$F1];
36  ns_0A00  = [$05..$0A, $0F..$10, $13..$28,
37              $2A..$30, $32..$33, $35..$36,
38              $38..$39, $59..$5C, $5E, $72..$74,
39              $85..$8B, $8D, $8F..$91, $93..$A8,
40              $AA..$B0, $B2..$B3, $B5..$B9, $BD, $E0];
41  ns_0B00  = [$05..$0C, $0F..$10, $13..$28,
42              $2A..$30, $32..$33, $36..$39,
43              $3D, $5C..$5D, $5F..$61, $85..$8A,
44              $8E..$90, $92..$95, $99..$9A,
45              $9C, $9E..$9F, $A3..$A4, $A8..$AA,
46              $AE..$B5, $B7..$B9];
47  ns_0C00  = [$05..$0C, $0E..$10, $12..$28,
48              $2A..$33, $35..$39, $60..$61,
49              $85..$8C, $8E..$90, $92..$A8,
50              $AA..$B3, $B5..$B9, $DE, $E0..$E1];
51  ns_0D00  = [$05..$0C, $0E..$10, $12..$28, $2A..$39, $60..$61];
52  ns_0E00  = [$01..$2E, $30, $32..$33, $40..$45,
53              $81..$82, $84, $87..$88, $8A, $8D,
54              $94..$97, $99..$9F, $A1..$A3,
55              $A5, $A7, $AA..$AB, $AD..$AE,
56              $B0, $B2..$B3, $BD, $C0..$C4];
57  ns_0F00  = [$40..$47, $49..$69];
58
59  ns_3000  = [$41..$94, $A1..$FA] + [$07, $21..$29];
60
61  namingBitmap: array[0..$30] of TSetOfByte = (
62
63  [],                              // 00 - nothing allowed
64  [0..255],                        // 01 - all allowed
65  ns_ASCII,                        // 02
66  [0..$31, $34..$3E, $41..$48,     // 03 - $0100, both Name and NameStart
67   $4A..$7E, $80..$C3, $CD..$F0,
68   $F4..$F5, $FA..$FF],
69
70  ns_0200,                  // 04
71  ns_0300,                  // 05
72  ns_0400,                  // 06
73  ns_0500,                  // 07
74  ns_0600,                  // 08
75  ns_0900,                  // 09
76  ns_0A00,                  // 0A
77  ns_0B00,                  // 0B
78  ns_0C00,                  // 0C
79  ns_0D00,                  // 0D
80  ns_0E00,                  // 0E
81  ns_0F00,                  // 0F
82  [$A0..$C5, $D0..$F6],            // 10 - $1000, both Name and NameStart
83  [0, $02..03, $05..$07, $09,      // 11 - $1100, both Name and NameStart
84   $0B..$0C, $0E..$12, $3C, $3E,
85   $40, $4C, $4E, $50, $54..$55,
86   $59, $5F..$61, $63, $65, $67,
87   $69, $6D..$6E, $72..$73, $75,
88   $9E, $A8, $AB, $AE..$AF,
89   $B7..$B8, $BA, $BC..$C2, $EB, $F0, $F9],
90  [0..$9B, $A0..$F9],              // 12 - $1E00, both Name and NameStart
91  [0..$15, $18..$1D, $20..$45,     // 13 - $1F00, both Name and NameStart
92   $48..$4D, $50..$57, $59, $5B, $5D,
93   $5F..$7D, $80..$B4, $B6..$BC, $BE,
94   $C2..$C4, $C6..$CC, $D0..$D3,
95   $D6..$DB, $E0..$EC, $F2..$F4, $F6..$FC],
96  [$26, $2A..$2B, $2E, $80..$82],  // 14 - $2100, NameStart
97  ns_3000,                         // 15
98  [$05..$2C],                      // 16 - $3100, NameStart
99  [0..$A5],                        // 17 - $9F00, NameStart (ideographs)
100  [0..$A3],                        // 18 - $D700, NameStart
101
102  ns_ASCII +                       // 19 - $0000, Names
103    [$2D..$2E, $30..$39, $B7],
104  ns_0200 +                        // 1A - $0200, Names
105    [$D0..$D1],
106  ns_0300 +                        // 1B - $0300, Names
107    [0..$45, $60..$61, $87],
108  ns_0400 +                        // 1C - $0400, Names
109    [$83..$86],
110  ns_0500 +                        // 1D - $0500, Names
111    [$91..$A1, $A3..$B9, $BB..$BD,         { combining }
112    $BF, $C1..$C2, $C4],
113  ns_0600 +                        // 1E - $0600, Names
114    [$4B..$52, $70, $D6..$DC, $DD..$DF,    { combining }
115     $E0..$E4, $E7..$E8, $EA..$ED] +
116    [$60..$69, $F0..$F9] + [$40],          { digits + ext }
117  ns_0900 +                        // 1F - $0900, Names
118    [$01..$03, $3C, $3E..$4C, $4D,         { combining }
119     $51..$54, $62..$63, $81..$83,
120     $BC, $BE, $BF, $C0..$C4, $C7..$C8,
121     $CB..$CD, $D7, $E2..$E3] +
122     [$66..$6F, $E6..$EF],                 { digits }
123  ns_0A00 +                        // 20 - $0A00, Names
124  [$02, $3C, $3E..$42, $47..$48, $4B..$4D, { combining }
125   $70..$71, $81..$83, $BC, $BE..$C5,
126   $C7..$C9, $CB..$CD] +
127  [$66..$6F, $E6..$EF],                    { digits }
128  ns_0B00 +                        // 21 - $0B00, Names
129  [$01..$03, $3C, $3E..$43, $47..$48,      { combining }
130   $4B..$4D, $56..$57, $82..$83, $BE..$C2,
131   $C6..$C8, $CA..$CD, $D7] +
132  [$66..$6F, $E7..$EF],                    { digits }
133  ns_0C00 +                        // 22 - $0C00, Names
134    [$01..$03, $3E..$44, $46..$48,        { combining }
135     $4A..$4D, $55..$56, $82..$83,
136     $BE..$C4, $C6..$C8, $CA..$CD, $D5..$D6] +
137    [$66..$6F, $E6..$EF],                { digits }
138  ns_0D00 +                        // 23 - $0D00, Names
139    [$02..$03, $3E..$43,                { combining }
140     $46..$48, $4A..$4D, $57] +
141    [$66..$6F],                         { digits }
142  ns_0E00 +                        // 24 - $0E00, Names
143    [$31, $34..$3A, $47..$4E,           { combining }
144     $B1, $B4..$B9, $BB..$BC,
145     $C8..$CD] +
146    [$50..$59, $D0..$D9] +              { digits }
147    [$46, $C6],                         { extenders }
148  ns_0F00 +                        // 25 - $0F00, Names
149    [$18..$19, $35, $37, $39,           { combining }
150     $3E, $3F, $71..$84, $86..$8B,
151     $90..$95, $97, $99..$AD,
152     $B1..$B7, $B9] +
153    [$20..$29],                         { digits }
154    [$D0..$DC, $E1],               // 26 - $2000, Names (combining)
155  ns_3000 +                        // 27 - $3000, Names
156    [$2A..$2F, $99, $9A] +               { combining }
157    [$05, $31..$35, $9D..$9E, $FC..$FE], { extenders }
158
159{ XML 1.1 additions }
160
161  [0..$CF, $F0..$FF],              // 28 $FD00 - NameStart
162  [0..$EF],                        // 29 $2F00 - NameStart
163  [$0C..$0D, $70..$FF],            // 2A $2000 - NameStart
164  [0..$8F],                        // 2B $2100 - NameStart
165  [$70..$7D, $7F..$FF],            // 2C $0300 - NameStart
166  [1..$FF],                        // 2D $3000 - NameStart
167  [0..$7D, $7F..$FF],              // 2E $0300 - Names
168  [$0C..$0D, $3F..$40, $70..$FF],  // 2F $2000 - Names
169  [$00..$FD]                       // 30 $FF00 - both Name and NameStart
170);
171
172  Xml11HighPages: TSetOfByte = [0..$21, $2C..$D7, $F9..$FE];
173
174  NamePages: array[0..511] of Byte = (
175$02, $03, $04, $05, $06, $07, $08, $00,
176$00, $09, $0A, $0B, $0C, $0D, $0E, $0F,
177$10, $11, $00, $00, $00, $00, $00, $00,
178$00, $00, $00, $00, $00, $00, $12, $13,
179$00, $14, $00, $00, $00, $00, $00, $00,
180$00, $00, $00, $00, $00, $00, $00, $00,
181$15, $16, $00, $00, $00, $00, $00, $00,
182$00, $00, $00, $00, $00, $00, $00, $00,
183$00, $00, $00, $00, $00, $00, $00, $00,
184$00, $00, $00, $00, $00, $00, $01, $01,
185$01, $01, $01, $01, $01, $01, $01, $01,
186$01, $01, $01, $01, $01, $01, $01, $01,
187$01, $01, $01, $01, $01, $01, $01, $01,
188$01, $01, $01, $01, $01, $01, $01, $01,
189$01, $01, $01, $01, $01, $01, $01, $01,
190$01, $01, $01, $01, $01, $01, $01, $01,
191$01, $01, $01, $01, $01, $01, $01, $01,
192$01, $01, $01, $01, $01, $01, $01, $01,
193$01, $01, $01, $01, $01, $01, $01, $01,
194$01, $01, $01, $01, $01, $01, $01, $17,
195$00, $00, $00, $00, $00, $00, $00, $00,
196$00, $00, $00, $00, $01, $01, $01, $01,
197$01, $01, $01, $01, $01, $01, $01, $01,
198$01, $01, $01, $01, $01, $01, $01, $01,
199$01, $01, $01, $01, $01, $01, $01, $01,
200$01, $01, $01, $01, $01, $01, $01, $01,
201$01, $01, $01, $01, $01, $01, $01, $18,
202$00, $00, $00, $00, $00, $00, $00, $00,
203$00, $00, $00, $00, $00, $00, $00, $00,
204$00, $00, $00, $00, $00, $00, $00, $00,
205$00, $00, $00, $00, $00, $00, $00, $00,
206$00, $00, $00, $00, $00, $00, $00, $00,
207// second half - NameChars
208$19, $03, $1A, $1B, $1C, $1D, $1E, $00,
209$00, $1F, $20, $21, $22, $23, $24, $25,
210$10, $11, $00, $00, $00, $00, $00, $00,
211$00, $00, $00, $00, $00, $00, $12, $13,
212$26, $14, $00, $00, $00, $00, $00, $00,
213$00, $00, $00, $00, $00, $00, $00, $00,
214$27, $16, $00, $00, $00, $00, $00, $00,
215$00, $00, $00, $00, $00, $00, $00, $00,
216$00, $00, $00, $00, $00, $00, $00, $00,
217$00, $00, $00, $00, $00, $00, $01, $01,
218$01, $01, $01, $01, $01, $01, $01, $01,
219$01, $01, $01, $01, $01, $01, $01, $01,
220$01, $01, $01, $01, $01, $01, $01, $01,
221$01, $01, $01, $01, $01, $01, $01, $01,
222$01, $01, $01, $01, $01, $01, $01, $01,
223$01, $01, $01, $01, $01, $01, $01, $01,
224$01, $01, $01, $01, $01, $01, $01, $01,
225$01, $01, $01, $01, $01, $01, $01, $01,
226$01, $01, $01, $01, $01, $01, $01, $01,
227$01, $01, $01, $01, $01, $01, $01, $17,
228$00, $00, $00, $00, $00, $00, $00, $00,
229$00, $00, $00, $00, $01, $01, $01, $01,
230$01, $01, $01, $01, $01, $01, $01, $01,
231$01, $01, $01, $01, $01, $01, $01, $01,
232$01, $01, $01, $01, $01, $01, $01, $01,
233$01, $01, $01, $01, $01, $01, $01, $01,
234$01, $01, $01, $01, $01, $01, $01, $18,
235$00, $00, $00, $00, $00, $00, $00, $00,
236$00, $00, $00, $00, $00, $00, $00, $00,
237$00, $00, $00, $00, $00, $00, $00, $00,
238$00, $00, $00, $00, $00, $00, $00, $00,
239$00, $00, $00, $00, $00, $00, $00, $00);
240
241