annotate src/basic/LiteralParsing.d @ 207:e0551773a005

Added the correct version.
author Anders Johnsen <skabet@gmail.com>
date Tue, 12 Aug 2008 18:19:34 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
207
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
1 module basic.LiteralParsing;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
2
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
3 import basic.SourceLocation,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
4 basic.Message,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
5 basic.conv;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
6
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
7 import tango.io.Stdout,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
8 tango.core.BitManip,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
9 Integer = tango.text.convert.Integer,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
10 Utf = tango.text.convert.Utf,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
11 tango.text.Util;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
12
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
13 enum StringType
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
14 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
15 Char,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
16 WChar,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
17 DChar
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
18 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
19
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
20 enum NumberType
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
21 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
22 Int,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
23 UInt,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
24 Long,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
25 ULong,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
26 Float,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
27 Double,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
28 Real
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
29 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
30
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
31 struct String
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
32 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
33 StringType type;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
34 ubyte[] data;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
35 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
36
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
37 struct Number
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
38 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
39 NumberType type;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
40 ulong integer;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
41 real floating;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
42 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
43
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
44 private struct EscapeReturn
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
45 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
46 ubyte[] data;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
47 int length;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
48 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
49
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
50 private struct NumberReturn
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
51 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
52 char[] data;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
53 int length;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
54 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
55
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
56 Number parseNumber(char[] str, SourceLocation loc, MessageHandler messages)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
57 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
58 Number num;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
59
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
60 switch(str[0])
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
61 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
62 case '0':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
63 case '1':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
64 case '2':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
65 case '3':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
66 case '4':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
67 case '5':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
68 case '6':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
69 case '7':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
70 case '8':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
71 case '9':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
72 if(str.contains('.') || str.contains('e') || str.contains('E'))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
73 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
74 auto n = parseRealNumber(str, loc, messages);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
75
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
76 try
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
77 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
78 num.floating = toReal(n.data);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
79 num.type = NumberType.Double;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
80 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
81 catch(Exception e)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
82 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
83 num.floating = real.init;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
84 messages.report(FloatingToLarge, loc, loc + n.length - 1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
85 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
86
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
87 if(num.floating > double.max)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
88 num.type = NumberType.Real;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
89 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
90 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
91 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
92 auto n = parseDecimalDigits(str, loc, messages);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
93
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
94 try
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
95 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
96 num.integer = toUlong(n.data);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
97 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
98 catch(Exception e)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
99 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
100 num.integer = 0;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
101 messages.report(IntegerToLarge, loc, loc + n.length - 1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
102 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
103
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
104 if(num.integer > uint.max)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
105 num.type = NumberType.Long;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
106 if(num.integer > long.max)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
107 num.type = NumberType.ULong;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
108 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
109 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
110 default:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
111 messages.report(InvalidStartInteger, loc, loc+1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
112 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
113
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
114 // printNumber(str, num);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
115 return num;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
116 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
117
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
118 NumberReturn parseDecimalDigits(char[] str, SourceLocation loc, MessageHandler messages)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
119 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
120 int i = 0;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
121
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
122 char[] number;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
123
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
124 bool end;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
125 while(!end)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
126 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
127 switch(str[i])
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
128 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
129 case '0':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
130 case '1':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
131 case '2':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
132 case '3':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
133 case '4':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
134 case '5':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
135 case '6':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
136 case '7':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
137 case '8':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
138 case '9':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
139 number ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
140 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
141 case '_':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
142 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
143 default:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
144 end = true;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
145 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
146 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
147 if(str.length == i)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
148 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
149 end = true;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
150 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
151 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
152 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
153
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
154 NumberReturn res;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
155 res.length = i - 1;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
156 res.data = number;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
157
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
158 return res;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
159 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
160
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
161 NumberReturn parseRealNumber(char[] str, SourceLocation loc, MessageHandler messages)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
162 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
163 int i = 0;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
164
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
165 bool dot, e;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
166 char[] number;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
167
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
168 NumberReturn num;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
169
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
170 bool end;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
171 while(!end)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
172 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
173 switch(str[i])
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
174 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
175 case '0':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
176 case '1':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
177 case '2':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
178 case '3':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
179 case '4':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
180 case '5':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
181 case '6':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
182 case '7':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
183 case '8':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
184 case '9':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
185 case '_':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
186 auto n = parseDecimalDigits(str[i..$], loc, messages);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
187 number ~= n.data;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
188 i += n.length;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
189 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
190 case '.':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
191 if(e)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
192 messages.report(FloatingDotInE, loc + i, loc + i + 1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
193 else if(dot)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
194 messages.report(OnlyOneDotFloating, loc + i, loc + i + 1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
195 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
196 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
197 dot = true;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
198 number ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
199 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
200 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
201 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
202 case 'e':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
203 case 'E':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
204 if(e)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
205 messages.report(OnlyOneEFloating, loc + i, loc + i + 1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
206 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
207 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
208 e = true;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
209 number ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
210 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
211 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
212 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
213 case '+':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
214 case '-':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
215 if (number[$-1] != 'e' &&
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
216 number[$-1] != 'E')
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
217 messages.report(FloatingBadLocation, loc + i, loc + i + 1)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
218 .arg(str[i]);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
219 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
220 number ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
221 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
222 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
223 default:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
224 end = true;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
225 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
226 if(str.length == i)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
227 end = true;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
228 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
229
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
230 if (number[$-1] == '+' ||
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
231 number[$-1] == '-' ||
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
232 number[$-1] == 'e' ||
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
233 number[$-1] == 'E')
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
234 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
235 messages.report(FloatingInvalidEnd, loc + i - 1, loc + i);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
236 return num;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
237 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
238
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
239 num.data = number;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
240 num.length = i;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
241
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
242 return num;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
243 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
244
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
245
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
246 void printNumber(char[] str, Number num)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
247 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
248 Stdout(str)(" have become").newline;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
249 switch(num.type)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
250 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
251 case NumberType.Int:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
252 Stdout(num.integer)(" of type ")("int");
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
253 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
254 case NumberType.UInt:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
255 Stdout(num.integer)(" of type ")("uint");
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
256 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
257 case NumberType.Long:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
258 Stdout(num.integer)(" of type ")("long");
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
259 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
260 case NumberType.ULong:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
261 Stdout(num.integer)(" of type ")("ulong");
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
262 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
263 case NumberType.Float:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
264 Stdout(num.floating)(" of type ")("float");
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
265 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
266 case NumberType.Double:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
267 Stdout(num.floating)(" of type ")("double");
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
268 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
269 case NumberType.Real:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
270 Stdout(num.floating)(" of type ")("real");
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
271 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
272 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
273 Stdout().newline;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
274 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
275
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
276
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
277 String parseString(char[] str, SourceLocation loc, MessageHandler messages)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
278 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
279 String strBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
280 strBuf.data.length = str.length;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
281 strBuf.data.length = 0;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
282
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
283 switch(str[0])
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
284 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
285 case 'r':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
286 strBuf = parseWysiwygString(str[1..$], strBuf);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
287 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
288 case '`':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
289 strBuf = parseWysiwygString(str, strBuf);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
290 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
291 case '"':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
292 strBuf = parseDoubleQuotedString(str, strBuf, loc, messages);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
293 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
294 case 'x':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
295 strBuf = parseHexString(str[1..$], strBuf, loc + 1, messages);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
296 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
297 default:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
298 messages.report(InvalidStrPrefix, loc, loc + 1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
299
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
300 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
301
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
302 // printString(str, strBuf);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
303
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
304 return strBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
305 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
306
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
307 String parseHexString(char[] str, String strBuf,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
308 SourceLocation loc, MessageHandler messages)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
309 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
310 int i = 1; // first char is "
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
311 char[] hex = "0123456789abcdefABCDEF";
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
312 char[] whitespace = "\r\n ";
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
313 char[] hexBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
314
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
315 while(str[i] != '"')
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
316 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
317 if(hex.contains(str[i]))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
318 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
319 hexBuf ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
320 if(hexBuf.length == 2)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
321 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
322 strBuf.data ~= Integer.toInt(hexBuf, 16);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
323 hexBuf.length = 0;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
324 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
325 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
326 else if(!whitespace.contains(str[i]))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
327 messages.report(InvalidHexStrChar, loc + i, loc + i + 1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
328
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
329 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
330 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
331
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
332
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
333
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
334 return strBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
335 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
336 //
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
337
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
338 String parseDoubleQuotedString(char[] str, String strBuf,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
339 SourceLocation loc, MessageHandler messages)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
340 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
341 int i = 1; // first char is "
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
342
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
343 while(str[i] != '"')
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
344 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
345 switch(str[i])
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
346 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
347 case '\\': // EscapeSequence
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
348 EscapeReturn res = parseEscapeSequence(str[i..$], loc + i, messages);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
349 strBuf.data ~= res.data;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
350 i += res.length;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
351 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
352 default:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
353 strBuf.data ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
354 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
355 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
356 if(i >= str.length)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
357 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
358 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
359
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
360 if(str.length > i + 1) // Then we have a postfix. Lexer makes sure this is c, w or d.
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
361 switch(str[i+1])
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
362 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
363 case 'c':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
364 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
365 case 'w':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
366 strBuf.data = cast(ubyte[])Utf.toString16(cast(char[])strBuf.data);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
367 strBuf.type = StringType.WChar;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
368 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
369 case 'd':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
370 strBuf.data = cast(ubyte[])Utf.toString32(cast(char[])strBuf.data);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
371 strBuf.type = StringType.DChar;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
372 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
373 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
374
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
375
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
376 return strBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
377 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
378
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
379 EscapeReturn parseEscapeSequence(char[] str,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
380 SourceLocation loc, MessageHandler messages)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
381 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
382 EscapeReturn res;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
383
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
384 switch(str[1])
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
385 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
386 case '\'':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
387 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
388 res.data ~= '\'';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
389 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
390 case '"':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
391 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
392 res.data ~= '\"';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
393 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
394 case '?':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
395 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
396 res.data ~= '\?';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
397 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
398 case '\\':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
399 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
400 res.data ~= '\\';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
401 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
402 case 'a':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
403 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
404 res.data ~= '\a';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
405 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
406 case 'b':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
407 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
408 res.data ~= '\b';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
409 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
410 case 'f':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
411 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
412 res.data ~= '\f';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
413 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
414 case 'n':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
415 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
416 res.data ~= '\n';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
417 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
418 case 'r':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
419 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
420 res.data ~= '\r';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
421 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
422 case 't':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
423 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
424 res.data ~= '\t';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
425 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
426 case 'v':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
427 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
428 res.data ~= '\v';
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
429 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
430 case 'x':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
431 char[] hex = "0123456789abcdefABCDEF";
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
432 char[] hexBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
433 if(str.length - 1 >= 4)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
434 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
435 for(int i = 2; i < 4; i++)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
436 if(hex.contains(str[i]))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
437 hexBuf ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
438 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
439 messages.report(StringHexInvalid, loc + i, loc + i + 1)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
440 .arg(Integer.toString(i-1))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
441 .arg(Integer.toString(2));
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
442 res.length = 4;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
443 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
444 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
445 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
446 messages.report(StringShortEscape, loc, loc + str.length);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
447 res.length = str.length - 1;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
448 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
449 res.data ~= cast(ubyte)Integer.toInt(hexBuf, 16);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
450 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
451 case 'u':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
452 char[] hex = "0123456789abcdefABCDEF";
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
453 char[] hexBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
454 if(str.length - 1 >= 6)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
455 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
456 for(int i = 2; i < 6; i++)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
457 if(hex.contains(str[i]))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
458 hexBuf ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
459 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
460 messages.report(StringHexInvalid, loc + i, loc + i + 1)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
461 .arg(Integer.toString(i-1))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
462 .arg(Integer.toString(6));
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
463 res.length = 6;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
464 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
465 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
466 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
467 messages.report(StringShortEscape, loc, loc + str.length);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
468 res.length = str.length - 1;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
469 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
470 uint i = Integer.toLong(hexBuf, 16);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
471 if(!isValidUtf8(i))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
472 messages.report(InvalidUtf8Hex, loc, loc+6);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
473 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
474 res.data ~= parseToUtf8(i);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
475 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
476 case 'U':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
477 char[] hex = "0123456789abcdefABCDEF";
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
478 char[] hexBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
479 if(str.length - 1 >= 10)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
480 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
481 for(int i = 2; i < 10; i++)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
482 if(hex.contains(str[i]))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
483 hexBuf ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
484 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
485 messages.report(StringHexInvalid, loc + i, loc + i + 1)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
486 .arg(Integer.toString(i-1))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
487 .arg(Integer.toString(10));
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
488 res.length = 10;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
489 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
490 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
491 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
492 messages.report(StringShortEscape, loc, loc + str.length);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
493 res.length = str.length - 1;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
494 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
495 uint i = Integer.toLong(hexBuf, 16);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
496 if(!isValidUtf8(i))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
497 messages.report(InvalidUtf8Hex, loc, loc+10);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
498 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
499 res.data ~= parseToUtf8(i);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
500 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
501 case '0':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
502 case '1':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
503 case '2':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
504 case '3':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
505 case '4':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
506 case '5':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
507 case '6':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
508 case '7':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
509 char[] oct = "01234567";
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
510 char[] octBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
511 octBuf ~= str[1];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
512 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
513 for(int i = 2; i < 4; i++)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
514 if(oct.contains(str[i]))
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
515 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
516 octBuf ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
517 res.length += 1;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
518 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
519 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
520 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
521
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
522 uint i = Integer.toLong(octBuf, 8);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
523 res.data ~= i;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
524 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
525 case '&':
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
526 int i = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
527 char[] s;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
528 while(str[i] != ';')
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
529 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
530 if(str[i] == '"')
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
531 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
532 messages.report(NoCharEntityEnd, loc+i, loc+i+1);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
533 res.length = 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
534 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
535 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
536 s ~= str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
537 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
538 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
539
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
540 if ( s in characterEntities )
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
541 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
542 res.data ~= parseToUtf8(characterEntities[s]);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
543 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
544 else
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
545 messages.report(InvalidCharEntity, loc + 2, loc + i);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
546
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
547 res.length = i + 1; // remember the ;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
548
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
549 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
550 default:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
551 messages.report(InvalidStrEscape, loc, loc + 2);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
552 res.length += 2;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
553 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
554
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
555 return res;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
556 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
557
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
558 String parseWysiwygString(char[] str, String strBuf)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
559 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
560 char start = str[0];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
561
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
562 int i = 1;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
563
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
564 while(str[i] != start)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
565 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
566 strBuf.data ~= cast(ubyte)str[i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
567 i++;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
568 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
569 return strBuf;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
570 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
571
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
572 ubyte[] parseToUtf8(uint i)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
573 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
574 if(i <= 0x00007F)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
575 return [cast(ubyte)i];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
576 else if(i <= 0x0007FF)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
577 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
578 ubyte a = (i << 26) >> 26;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
579 bts(cast(uint*)&a, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
580 ubyte b = (i << 19) >> 25;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
581 bts(cast(uint*)&b, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
582 bts(cast(uint*)&b, 6);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
583 return [b,a];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
584 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
585 else if(i <= 0x00FFFF)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
586 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
587 ubyte a = (i << 26) >> 26;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
588 bts(cast(uint*)&a, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
589 ubyte b = (i << 20) >> 26;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
590 bts(cast(uint*)&b, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
591 ubyte c = (i << 16) >> 28;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
592 bts(cast(uint*)&c, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
593 bts(cast(uint*)&c, 6);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
594 bts(cast(uint*)&c, 5);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
595 return [c,b,a];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
596 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
597 else if(i <= 0x10FFFF)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
598 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
599 ubyte a = (i << 26) >> 26;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
600 bts(cast(uint*)&a, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
601 ubyte b = (i << 20) >> 26;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
602 bts(cast(uint*)&b, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
603 ubyte c = (i << 14) >> 26;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
604 bts(cast(uint*)&c, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
605 ubyte d = (i << 11) >> 29;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
606 bts(cast(uint*)&d, 7);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
607 bts(cast(uint*)&d, 6);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
608 bts(cast(uint*)&d, 5);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
609 bts(cast(uint*)&d, 4);
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
610 return [d,c,b,a];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
611 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
612 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
613
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
614 bool isValidUtf8(uint i)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
615 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
616 if(i <= 0x10FFFF)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
617 return true;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
618 return false;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
619 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
620
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
621 void printString(char[] str, String strBuf)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
622 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
623 char[] s;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
624 switch(strBuf.type)
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
625 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
626 case StringType.Char:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
627 Stdout(str)(" have become").newline()
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
628 (cast(char[])strBuf.data).newline;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
629 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
630 case StringType.WChar:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
631 Stdout(str)(" have become").newline()
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
632 (cast(wchar[])strBuf.data).newline;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
633 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
634 case StringType.DChar:
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
635 Stdout(str)(" have become").newline()
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
636 (cast(dchar[])strBuf.data).newline;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
637 break;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
638 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
639 }
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
640
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
641 static ushort[char[]] characterEntities;
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
642
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
643 static this()
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
644 {
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
645 characterEntities =
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
646 [
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
647 "quot"[]: 34,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
648 "amp": 38,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
649 "lt": 60,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
650 "gt": 62,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
651 "OElig": 338,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
652 "oelig": 339,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
653 "Scaron": 352,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
654 "scaron": 353,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
655 "Yuml": 376,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
656 "circ": 710,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
657 "tilde": 732,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
658 "ensp": 8194,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
659 "emsp": 8195,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
660 "thinsp": 8201,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
661 "zwnj": 8204,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
662 "zwj": 8205,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
663 "lrm": 8206,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
664 "rlm": 8207,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
665 "ndash": 8211,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
666 "mdash": 8212,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
667 "lsquo": 8216,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
668 "rsquo": 8217,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
669 "sbquo": 8218,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
670 "ldquo": 8220,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
671 "rdquo": 8221,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
672 "bdquo": 8222,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
673 "dagger": 8224,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
674 "Dagger": 8225,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
675 "permil": 8240,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
676 "lsaquo": 8249,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
677 "rsaquo": 8250,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
678 "euro": 8364,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
679 "nbsp": 160,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
680 "iexcl": 161,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
681 "cent": 162,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
682 "pound": 163,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
683 "curren": 164,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
684 "yen": 165,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
685 "brvbar": 166,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
686 "sect": 167,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
687 "uml": 168,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
688 "copy": 169,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
689 "ordf": 170,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
690 "laquo": 171,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
691 "not": 172,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
692 "shy": 173,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
693 "reg": 174,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
694 "macr": 175,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
695 "deg": 176,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
696 "plusmn": 177,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
697 "sup2": 178,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
698 "sup3": 179,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
699 "acute": 180,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
700 "micro": 181,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
701 "para": 182,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
702 "middot": 183,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
703 "cedil": 184,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
704 "sup1": 185,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
705 "ordm": 186,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
706 "raquo": 187,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
707 "frac14": 188,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
708 "frac12": 189,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
709 "frac34": 190,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
710 "iquest": 191,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
711 "Agrave": 192,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
712 "Aacute": 193,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
713 "Acirc": 194,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
714 "Atilde": 195,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
715 "Auml": 196,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
716 "Aring": 197,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
717 "AElig": 198,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
718 "Ccedil": 199,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
719 "Egrave": 200,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
720 "Eacute": 201,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
721 "Ecirc": 202,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
722 "Euml": 203,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
723 "Igrave": 204,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
724 "Iacute": 205,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
725 "Icirc": 206,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
726 "Iuml": 207,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
727 "ETH": 208,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
728 "Ntilde": 209,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
729 "Ograve": 210,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
730 "Oacute": 211,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
731 "Ocirc": 212,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
732 "Otilde": 213,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
733 "Ouml": 214,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
734 "times": 215,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
735 "Oslash": 216,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
736 "Ugrave": 217,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
737 "Uacute": 218,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
738 "Ucirc": 219,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
739 "Uuml": 220,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
740 "Yacute": 221,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
741 "THORN": 222,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
742 "szlig": 223,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
743 "agrave": 224,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
744 "aacute": 225,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
745 "acirc": 226,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
746 "atilde": 227,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
747 "auml": 228,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
748 "aring": 229,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
749 "aelig": 230,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
750 "ccedil": 231,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
751 "egrave": 232,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
752 "eacute": 233,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
753 "ecirc": 234,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
754 "euml": 235,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
755 "igrave": 236,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
756 "iacute": 237,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
757 "icirc": 238,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
758 "iuml": 239,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
759 "eth": 240,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
760 "ntilde": 241,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
761 "ograve": 242,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
762 "oacute": 243,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
763 "ocirc": 244,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
764 "otilde": 245,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
765 "ouml": 246,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
766 "divide": 247,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
767 "oslash": 248,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
768 "ugrave": 249,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
769 "uacute": 250,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
770 "ucirc": 251,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
771 "uuml": 252,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
772 "yacute": 253,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
773 "thorn": 254,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
774 "yuml": 255,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
775 "fnof": 402,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
776 "Alpha": 913,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
777 "Beta": 914,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
778 "Gamma": 915,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
779 "Delta": 916,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
780 "Epsilon": 917,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
781 "Zeta": 918,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
782 "Eta": 919,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
783 "Theta": 920,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
784 "Iota": 921,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
785 "Kappa": 922,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
786 "Lambda": 923,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
787 "Mu": 924,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
788 "Nu": 925,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
789 "Xi": 926,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
790 "Omicron": 927,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
791 "Pi": 928,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
792 "Rho": 929,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
793 "Sigma": 931,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
794 "Tau": 932,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
795 "Upsilon": 933,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
796 "Phi": 934,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
797 "Chi": 935,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
798 "Psi": 936,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
799 "Omega": 937,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
800 "alpha": 945,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
801 "beta": 946,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
802 "gamma": 947,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
803 "delta": 948,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
804 "epsilon": 949,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
805 "zeta": 950,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
806 "eta": 951,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
807 "theta": 952,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
808 "iota": 953,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
809 "kappa": 954,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
810 "lambda": 955,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
811 "mu": 956,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
812 "nu": 957,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
813 "xi": 958,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
814 "omicron": 959,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
815 "pi": 960,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
816 "rho": 961,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
817 "sigmaf": 962,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
818 "sigma": 963,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
819 "tau": 964,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
820 "upsilon": 965,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
821 "phi": 966,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
822 "chi": 967,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
823 "psi": 968,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
824 "omega": 969,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
825 "thetasym": 977,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
826 "upsih": 978,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
827 "piv": 982,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
828 "bull": 8226,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
829 "hellip": 8230,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
830 "prime": 8242,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
831 "Prime": 8243,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
832 "oline": 8254,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
833 "frasl": 8260,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
834 "weierp": 8472,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
835 "image": 8465,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
836 "real": 8476,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
837 "trade": 8482,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
838 "alefsym": 8501,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
839 "larr": 8592,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
840 "uarr": 8593,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
841 "rarr": 8594,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
842 "darr": 8595,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
843 "harr": 8596,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
844 "crarr": 8629,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
845 "lArr": 8656,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
846 "uArr": 8657,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
847 "rArr": 8658,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
848 "dArr": 8659,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
849 "hArr": 8660,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
850 "forall": 8704,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
851 "part": 8706,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
852 "exist": 8707,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
853 "empty": 8709,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
854 "nabla": 8711,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
855 "isin": 8712,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
856 "notin": 8713,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
857 "ni": 8715,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
858 "prod": 8719,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
859 "sum": 8721,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
860 "minus": 8722,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
861 "lowast": 8727,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
862 "radic": 8730,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
863 "prop": 8733,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
864 "infin": 8734,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
865 "ang": 8736,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
866 "and": 8743,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
867 "or": 8744,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
868 "cap": 8745,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
869 "cup": 8746,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
870 "int": 8747,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
871 "there4": 8756,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
872 "sim": 8764,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
873 "cong": 8773,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
874 "asymp": 8776,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
875 "ne": 8800,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
876 "equiv": 8801,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
877 "le": 8804,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
878 "ge": 8805,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
879 "sub": 8834,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
880 "sup": 8835,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
881 "nsub": 8836,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
882 "sube": 8838,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
883 "supe": 8839,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
884 "oplus": 8853,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
885 "otimes": 8855,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
886 "perp": 8869,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
887 "sdot": 8901,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
888 "lceil": 8968,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
889 "rceil": 8969,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
890 "lfloor": 8970,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
891 "rfloor": 8971,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
892 "lang": 9001,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
893 "rang": 9002,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
894 "loz": 9674,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
895 "spades": 9824,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
896 "clubs": 9827,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
897 "hearts": 9829,
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
898 "diams": 9830
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
899 ];
e0551773a005 Added the correct version.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
900 }