437 lines
9.0 KiB
Prolog
437 lines
9.0 KiB
Prolog
/* $Id$
|
|
|
|
Part of SWI-Prolog
|
|
|
|
Author: Jan Wielemaker
|
|
E-mail: wielemak@science.uva.nl
|
|
WWW: http://www.swi-prolog.org
|
|
Copyright (C): 1985-2006, University of Amsterdam
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
As a special exception, if you link this library with other files,
|
|
compiled with a Free Software compiler, to produce an executable, this
|
|
library does not by itself cause the resulting executable to be covered
|
|
by the GNU General Public License. This exception does not however
|
|
invalidate any other reasons why the executable file might be covered by
|
|
the GNU General Public License.
|
|
*/
|
|
|
|
:- module(xml_unicode,
|
|
[ mkclassify/0
|
|
]).
|
|
|
|
%% mkclassify
|
|
%
|
|
% Generate the core of xml_unicode.c.
|
|
|
|
mkclassify :-
|
|
forall(list(List, _),
|
|
mkfunc(List)).
|
|
|
|
mkfunc(Name) :-
|
|
format('int~n'),
|
|
format('wcis_~w(int c)~n', [Name]),
|
|
format('{ '),
|
|
list(Name, List),
|
|
mkswitch(List),
|
|
format('}~n~n').
|
|
|
|
mkswitch(List) :-
|
|
mkswitch(List, 2).
|
|
|
|
mkswitch([Low-High], Indent) :- !,
|
|
indent(Indent),
|
|
format('return (c >= 0x~|~`0t~16r~4+ && c <= 0x~|~`0t~16r~4+);~n', [Low, High]).
|
|
mkswitch([Value], Indent) :- !,
|
|
indent(Indent),
|
|
format('return (c == 0x~|~`0t~16r~4+);', [Value]).
|
|
mkswitch(List, Indent) :-
|
|
split(List, Low, High),
|
|
end(Low, MaxLow),
|
|
indent(Indent),
|
|
NextIndent is Indent + 2,
|
|
format('if ( c <= 0x~|~`0t~16r~4+ )~n', [MaxLow]),
|
|
indent(Indent),
|
|
format('{ '),
|
|
mkswitch(Low, NextIndent),
|
|
indent(Indent),
|
|
format('} else~n'),
|
|
indent(Indent),
|
|
format('{ '),
|
|
mkswitch(High, NextIndent),
|
|
indent(Indent),
|
|
format('}~n').
|
|
|
|
end(List, Max) :-
|
|
last(List, Last),
|
|
( Last = _-Max
|
|
-> true
|
|
; Max = Last
|
|
).
|
|
|
|
split(List, Low, High) :-
|
|
length(List, Len),
|
|
Mid is Len//2,
|
|
length(Low, Mid),
|
|
append(Low, High, List).
|
|
|
|
indent(N) :-
|
|
line_position(current_output, Pos),
|
|
Spaces is N - Pos,
|
|
format('~*c', [Spaces, 32]).
|
|
|
|
|
|
|
|
list(basechar,
|
|
[ 0x0041-0x005A,
|
|
0x0061-0x007A,
|
|
0x00C0-0x00D6,
|
|
0x00D8-0x00F6,
|
|
0x00F8-0x00FF,
|
|
0x0100-0x0131,
|
|
0x0134-0x013E,
|
|
0x0141-0x0148,
|
|
0x014A-0x017E,
|
|
0x0180-0x01C3,
|
|
0x01CD-0x01F0,
|
|
0x01F4-0x01F5,
|
|
0x01FA-0x0217,
|
|
0x0250-0x02A8,
|
|
0x02BB-0x02C1,
|
|
0x0386,
|
|
0x0388-0x038A,
|
|
0x038C,
|
|
0x038E-0x03A1,
|
|
0x03A3-0x03CE,
|
|
0x03D0-0x03D6,
|
|
0x03DA,
|
|
0x03DC,
|
|
0x03DE,
|
|
0x03E0,
|
|
0x03E2-0x03F3,
|
|
0x0401-0x040C,
|
|
0x040E-0x044F,
|
|
0x0451-0x045C,
|
|
0x045E-0x0481,
|
|
0x0490-0x04C4,
|
|
0x04C7-0x04C8,
|
|
0x04CB-0x04CC,
|
|
0x04D0-0x04EB,
|
|
0x04EE-0x04F5,
|
|
0x04F8-0x04F9,
|
|
0x0531-0x0556,
|
|
0x0559,
|
|
0x0561-0x0586,
|
|
0x05D0-0x05EA,
|
|
0x05F0-0x05F2,
|
|
0x0621-0x063A,
|
|
0x0641-0x064A,
|
|
0x0671-0x06B7,
|
|
0x06BA-0x06BE,
|
|
0x06C0-0x06CE,
|
|
0x06D0-0x06D3,
|
|
0x06D5,
|
|
0x06E5-0x06E6,
|
|
0x0905-0x0939,
|
|
0x093D,
|
|
0x0958-0x0961,
|
|
0x0985-0x098C,
|
|
0x098F-0x0990,
|
|
0x0993-0x09A8,
|
|
0x09AA-0x09B0,
|
|
0x09B2,
|
|
0x09B6-0x09B9,
|
|
0x09DC-0x09DD,
|
|
0x09DF-0x09E1,
|
|
0x09F0-0x09F1,
|
|
0x0A05-0x0A0A,
|
|
0x0A0F-0x0A10,
|
|
0x0A13-0x0A28,
|
|
0x0A2A-0x0A30,
|
|
0x0A32-0x0A33,
|
|
0x0A35-0x0A36,
|
|
0x0A38-0x0A39,
|
|
0x0A59-0x0A5C,
|
|
0x0A5E,
|
|
0x0A72-0x0A74,
|
|
0x0A85-0x0A8B,
|
|
0x0A8D,
|
|
0x0A8F-0x0A91,
|
|
0x0A93-0x0AA8,
|
|
0x0AAA-0x0AB0,
|
|
0x0AB2-0x0AB3,
|
|
0x0AB5-0x0AB9,
|
|
0x0ABD,
|
|
0x0AE0,
|
|
0x0B05-0x0B0C,
|
|
0x0B0F-0x0B10,
|
|
0x0B13-0x0B28,
|
|
0x0B2A-0x0B30,
|
|
0x0B32-0x0B33,
|
|
0x0B36-0x0B39,
|
|
0x0B3D,
|
|
0x0B5C-0x0B5D,
|
|
0x0B5F-0x0B61,
|
|
0x0B85-0x0B8A,
|
|
0x0B8E-0x0B90,
|
|
0x0B92-0x0B95,
|
|
0x0B99-0x0B9A,
|
|
0x0B9C,
|
|
0x0B9E-0x0B9F,
|
|
0x0BA3-0x0BA4,
|
|
0x0BA8-0x0BAA,
|
|
0x0BAE-0x0BB5,
|
|
0x0BB7-0x0BB9,
|
|
0x0C05-0x0C0C,
|
|
0x0C0E-0x0C10,
|
|
0x0C12-0x0C28,
|
|
0x0C2A-0x0C33,
|
|
0x0C35-0x0C39,
|
|
0x0C60-0x0C61,
|
|
0x0C85-0x0C8C,
|
|
0x0C8E-0x0C90,
|
|
0x0C92-0x0CA8,
|
|
0x0CAA-0x0CB3,
|
|
0x0CB5-0x0CB9,
|
|
0x0CDE,
|
|
0x0CE0-0x0CE1,
|
|
0x0D05-0x0D0C,
|
|
0x0D0E-0x0D10,
|
|
0x0D12-0x0D28,
|
|
0x0D2A-0x0D39,
|
|
0x0D60-0x0D61,
|
|
0x0E01-0x0E2E,
|
|
0x0E30,
|
|
0x0E32-0x0E33,
|
|
0x0E40-0x0E45,
|
|
0x0E81-0x0E82,
|
|
0x0E84,
|
|
0x0E87-0x0E88,
|
|
0x0E8A,
|
|
0x0E8D,
|
|
0x0E94-0x0E97,
|
|
0x0E99-0x0E9F,
|
|
0x0EA1-0x0EA3,
|
|
0x0EA5,
|
|
0x0EA7,
|
|
0x0EAA-0x0EAB,
|
|
0x0EAD-0x0EAE,
|
|
0x0EB0,
|
|
0x0EB2-0x0EB3,
|
|
0x0EBD,
|
|
0x0EC0-0x0EC4,
|
|
0x0F40-0x0F47,
|
|
0x0F49-0x0F69,
|
|
0x10A0-0x10C5,
|
|
0x10D0-0x10F6,
|
|
0x1100,
|
|
0x1102-0x1103,
|
|
0x1105-0x1107,
|
|
0x1109,
|
|
0x110B-0x110C,
|
|
0x110E-0x1112,
|
|
0x113C,
|
|
0x113E,
|
|
0x1140,
|
|
0x114C,
|
|
0x114E,
|
|
0x1150,
|
|
0x1154-0x1155,
|
|
0x1159,
|
|
0x115F-0x1161,
|
|
0x1163,
|
|
0x1165,
|
|
0x1167,
|
|
0x1169,
|
|
0x116D-0x116E,
|
|
0x1172-0x1173,
|
|
0x1175,
|
|
0x119E,
|
|
0x11A8,
|
|
0x11AB,
|
|
0x11AE-0x11AF,
|
|
0x11B7-0x11B8,
|
|
0x11BA,
|
|
0x11BC-0x11C2,
|
|
0x11EB,
|
|
0x11F0,
|
|
0x11F9,
|
|
0x1E00-0x1E9B,
|
|
0x1EA0-0x1EF9,
|
|
0x1F00-0x1F15,
|
|
0x1F18-0x1F1D,
|
|
0x1F20-0x1F45,
|
|
0x1F48-0x1F4D,
|
|
0x1F50-0x1F57,
|
|
0x1F59,
|
|
0x1F5B,
|
|
0x1F5D,
|
|
0x1F5F-0x1F7D,
|
|
0x1F80-0x1FB4,
|
|
0x1FB6-0x1FBC,
|
|
0x1FBE,
|
|
0x1FC2-0x1FC4,
|
|
0x1FC6-0x1FCC,
|
|
0x1FD0-0x1FD3,
|
|
0x1FD6-0x1FDB,
|
|
0x1FE0-0x1FEC,
|
|
0x1FF2-0x1FF4,
|
|
0x1FF6-0x1FFC,
|
|
0x2126,
|
|
0x212A-0x212B,
|
|
0x212E,
|
|
0x2180-0x2182,
|
|
0x3041-0x3094,
|
|
0x30A1-0x30FA,
|
|
0x3105-0x312C,
|
|
0xAC00-0xD7A3]).
|
|
|
|
list(ideographic,
|
|
[ 0x4E00-0x9FA5,
|
|
0x3007,
|
|
0x3021-0x3029
|
|
]).
|
|
|
|
list(combining_char,
|
|
[ 0x0300-0x0345,
|
|
0x0360-0x0361,
|
|
0x0483-0x0486,
|
|
0x0591-0x05A1,
|
|
0x05A3-0x05B9,
|
|
0x05BB-0x05BD,
|
|
0x05BF,
|
|
0x05C1-0x05C2,
|
|
0x05C4,
|
|
0x064B-0x0652,
|
|
0x0670,
|
|
0x06D6-0x06DC,
|
|
0x06DD-0x06DF,
|
|
0x06E0-0x06E4,
|
|
0x06E7-0x06E8,
|
|
0x06EA-0x06ED,
|
|
0x0901-0x0903,
|
|
0x093C,
|
|
0x093E-0x094C,
|
|
0x094D,
|
|
0x0951-0x0954,
|
|
0x0962-0x0963,
|
|
0x0981-0x0983,
|
|
0x09BC,
|
|
0x09BE,
|
|
0x09BF,
|
|
0x09C0-0x09C4,
|
|
0x09C7-0x09C8,
|
|
0x09CB-0x09CD,
|
|
0x09D7,
|
|
0x09E2-0x09E3,
|
|
0x0A02,
|
|
0x0A3C,
|
|
0x0A3E,
|
|
0x0A3F,
|
|
0x0A40-0x0A42,
|
|
0x0A47-0x0A48,
|
|
0x0A4B-0x0A4D,
|
|
0x0A70-0x0A71,
|
|
0x0A81-0x0A83,
|
|
0x0ABC,
|
|
0x0ABE-0x0AC5,
|
|
0x0AC7-0x0AC9,
|
|
0x0ACB-0x0ACD,
|
|
0x0B01-0x0B03,
|
|
0x0B3C,
|
|
0x0B3E-0x0B43,
|
|
0x0B47-0x0B48,
|
|
0x0B4B-0x0B4D,
|
|
0x0B56-0x0B57,
|
|
0x0B82-0x0B83,
|
|
0x0BBE-0x0BC2,
|
|
0x0BC6-0x0BC8,
|
|
0x0BCA-0x0BCD,
|
|
0x0BD7,
|
|
0x0C01-0x0C03,
|
|
0x0C3E-0x0C44,
|
|
0x0C46-0x0C48,
|
|
0x0C4A-0x0C4D,
|
|
0x0C55-0x0C56,
|
|
0x0C82-0x0C83,
|
|
0x0CBE-0x0CC4,
|
|
0x0CC6-0x0CC8,
|
|
0x0CCA-0x0CCD,
|
|
0x0CD5-0x0CD6,
|
|
0x0D02-0x0D03,
|
|
0x0D3E-0x0D43,
|
|
0x0D46-0x0D48,
|
|
0x0D4A-0x0D4D,
|
|
0x0D57,
|
|
0x0E31,
|
|
0x0E34-0x0E3A,
|
|
0x0E47-0x0E4E,
|
|
0x0EB1,
|
|
0x0EB4-0x0EB9,
|
|
0x0EBB-0x0EBC,
|
|
0x0EC8-0x0ECD,
|
|
0x0F18-0x0F19,
|
|
0x0F35,
|
|
0x0F37,
|
|
0x0F39,
|
|
0x0F3E,
|
|
0x0F3F,
|
|
0x0F71-0x0F84,
|
|
0x0F86-0x0F8B,
|
|
0x0F90-0x0F95,
|
|
0x0F97,
|
|
0x0F99-0x0FAD,
|
|
0x0FB1-0x0FB7,
|
|
0x0FB9,
|
|
0x20D0-0x20DC,
|
|
0x20E1,
|
|
0x302A-0x302F,
|
|
0x3099,
|
|
0x309A
|
|
]).
|
|
|
|
list(digit,
|
|
[ 0x0030-0x0039,
|
|
0x0660-0x0669,
|
|
0x06F0-0x06F9,
|
|
0x0966-0x096F,
|
|
0x09E6-0x09EF,
|
|
0x0A66-0x0A6F,
|
|
0x0AE6-0x0AEF,
|
|
0x0B66-0x0B6F,
|
|
0x0BE7-0x0BEF,
|
|
0x0C66-0x0C6F,
|
|
0x0CE6-0x0CEF,
|
|
0x0D66-0x0D6F,
|
|
0x0E50-0x0E59,
|
|
0x0ED0-0x0ED9,
|
|
0x0F20-0x0F29
|
|
]).
|
|
|
|
list(extender,
|
|
[ 0x00B7,
|
|
0x02D0,
|
|
0x02D1,
|
|
0x0387,
|
|
0x0640,
|
|
0x0E46,
|
|
0x0EC6,
|
|
0x3005,
|
|
0x3031-0x3035,
|
|
0x309D-0x309E,
|
|
0x30FC-0x30FE
|
|
]).
|