annotate basic/LiteralParsing.d @ 106:89db676fbacb

Now able of understanding strings.
author Anders Johnsen <skabet@gmail.com>
date Thu, 22 May 2008 12:09:11 +0200
parents
children c658172ca8a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
106
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
1 module basic.LiteralParsing.d;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
2
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
3 import basic.SourceLocation,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
4 basic.Message;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
5
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
6 import tango.io.Stdout,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
7 tango.core.BitManip,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
8 Integer = tango.text.convert.Integer,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
9 tango.text.Util;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
10
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
11 enum StructType
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
12 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
13 Char,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
14 WChar,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
15 DChar
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
16 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
17
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
18 struct String
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
19 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
20 StructType type;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
21 ubyte[] data;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
22 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
23
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
24 private struct EscapeReturn
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
25 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
26 ubyte[] data;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
27 int length;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
28 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
29
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
30 String parseString(char[] str, SourceLocation loc, MessageHandler messages)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
31 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
32 String strBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
33 strBuf.data.length = str.length;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
34 strBuf.data.length = 0;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
35
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
36 switch(str[0])
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
37 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
38 case 'r':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
39 strBuf = parseWysiwygString(str[1..$], strBuf);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
40 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
41 case '`':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
42 strBuf = parseWysiwygString(str, strBuf);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
43 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
44 case '"':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
45 strBuf = parseDoubleQuotedString(str, strBuf, loc, messages);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
46 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
47 case 'x':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
48 strBuf = parseHexString(str[1..$], strBuf, loc + 1, messages);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
49 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
50 default:
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
51 messages.report(InvalidStrPrefix, loc, loc + 1);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
52
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
53 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
54
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
55 printString(str, strBuf);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
56
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
57 return strBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
58 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
59
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
60 String parseHexString(char[] str, String strBuf,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
61 SourceLocation loc, MessageHandler messages)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
62 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
63 int i = 1; // first char is "
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
64 char[] hex = "0123456789abcdefABCDEF";
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
65 char[] whitespace = "\r\n ";
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
66 char[] hexBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
67
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
68 while(str[i] != '"')
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
69 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
70 if(hex.contains(str[i]))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
71 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
72 hexBuf ~= str[i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
73 if(hexBuf.length == 2)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
74 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
75 strBuf.data ~= Integer.toInt(hexBuf, 16);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
76 hexBuf.length = 0;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
77 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
78 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
79 else if(whitespace.contains(str[i]))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
80 {}
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
81 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
82 messages.report(InvalidHexStrChar, loc + i, loc + i + 1);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
83
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
84 i++;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
85 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
86
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
87
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
88
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
89 return strBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
90 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
91
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
92
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
93 String parseDoubleQuotedString(char[] str, String strBuf,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
94 SourceLocation loc, MessageHandler messages)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
95 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
96 int i = 1; // first char is "
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
97
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
98 while(str[i] != '"')
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
99 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
100 switch(str[i])
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
101 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
102 case '\\': // EscapeSequence
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
103 EscapeReturn res = parseEscapeSequence(str[i..$], loc + i, messages);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
104 strBuf.data ~= res.data;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
105 i += res.length;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
106 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
107 default:
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
108 strBuf.data ~= str[i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
109 i++;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
110 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
111 if(i >= str.length)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
112 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
113 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
114
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
115 return strBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
116 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
117
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
118 EscapeReturn parseEscapeSequence(char[] str,
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
119 SourceLocation loc, MessageHandler messages)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
120 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
121 EscapeReturn res;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
122
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
123 switch(str[1])
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
124 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
125 case '\'':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
126 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
127 res.data ~= '\'';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
128 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
129 case '"':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
130 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
131 res.data ~= '\"';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
132 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
133 case '?':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
134 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
135 res.data ~= '\?';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
136 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
137 case '\\':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
138 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
139 res.data ~= '\\';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
140 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
141 case 'a':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
142 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
143 res.data ~= '\a';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
144 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
145 case 'b':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
146 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
147 res.data ~= '\b';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
148 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
149 case 'f':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
150 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
151 res.data ~= '\f';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
152 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
153 case 'n':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
154 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
155 res.data ~= '\n';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
156 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
157 case 'r':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
158 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
159 res.data ~= '\r';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
160 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
161 case 't':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
162 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
163 res.data ~= '\t';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
164 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
165 case 'v':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
166 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
167 res.data ~= '\v';
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
168 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
169 case 'x':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
170 char[] hex = "0123456789abcdefABCDEF";
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
171 char[] hexBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
172 if(str.length - 1 >= 4)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
173 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
174 for(int i = 2; i < 4; i++)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
175 if(hex.contains(str[i]))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
176 hexBuf ~= str[i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
177 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
178 messages.report(StringHexInvalid, loc + i, loc + i + 1)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
179 .arg(Integer.toString(i-1))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
180 .arg(Integer.toString(2));
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
181 res.length = 4;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
182 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
183 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
184 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
185 messages.report(StringShortEscape, loc, loc + str.length);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
186 res.length = str.length - 1;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
187 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
188 res.data ~= cast(ubyte)Integer.toInt(hexBuf, 16);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
189 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
190 case 'u':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
191 char[] hex = "0123456789abcdefABCDEF";
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
192 char[] hexBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
193 if(str.length - 1 >= 6)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
194 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
195 for(int i = 2; i < 6; i++)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
196 if(hex.contains(str[i]))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
197 hexBuf ~= str[i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
198 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
199 messages.report(StringHexInvalid, loc + i, loc + i + 1)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
200 .arg(Integer.toString(i-1))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
201 .arg(Integer.toString(6));
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
202 res.length = 6;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
203 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
204 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
205 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
206 messages.report(StringShortEscape, loc, loc + str.length);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
207 res.length = str.length - 1;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
208 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
209 uint i = Integer.toLong(hexBuf, 16);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
210 if(!isValidUtf8(i))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
211 messages.report(InvalidUtf8Hex, loc, loc+6);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
212 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
213 res.data ~= parseToUtf8(i);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
214 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
215 case 'U':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
216 char[] hex = "0123456789abcdefABCDEF";
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
217 char[] hexBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
218 if(str.length - 1 >= 10)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
219 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
220 for(int i = 2; i < 10; i++)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
221 if(hex.contains(str[i]))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
222 hexBuf ~= str[i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
223 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
224 messages.report(StringHexInvalid, loc + i, loc + i + 1)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
225 .arg(Integer.toString(i-1))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
226 .arg(Integer.toString(10));
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
227 res.length = 10;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
228 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
229 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
230 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
231 messages.report(StringShortEscape, loc, loc + str.length);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
232 res.length = str.length - 1;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
233 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
234 uint i = Integer.toLong(hexBuf, 16);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
235 if(!isValidUtf8(i))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
236 messages.report(InvalidUtf8Hex, loc, loc+10);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
237 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
238 res.data ~= parseToUtf8(i);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
239 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
240 case '0':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
241 case '1':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
242 case '2':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
243 case '3':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
244 case '4':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
245 case '5':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
246 case '6':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
247 case '7':
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
248 char[] oct = "01234567";
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
249 char[] octBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
250 octBuf ~= str[1];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
251 res.length = 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
252 for(int i = 2; i < 4; i++)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
253 if(oct.contains(str[i]))
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
254 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
255 octBuf ~= str[i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
256 res.length += 1;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
257 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
258 else
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
259 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
260
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
261 uint i = Integer.toLong(octBuf, 8);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
262 res.data ~= i;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
263 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
264 default:
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
265 messages.report(InvalidStrEscape, loc, loc + 2);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
266 res.length += 2;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
267 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
268
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
269 return res;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
270 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
271
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
272 String parseWysiwygString(char[] str, String strBuf)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
273 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
274 char start = str[0];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
275
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
276 int i = 1;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
277
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
278 while(str[i] != start)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
279 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
280 strBuf.data ~= cast(ubyte)str[i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
281 i++;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
282 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
283 return strBuf;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
284 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
285
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
286 ubyte[] parseToUtf8(uint i)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
287 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
288 if(i <= 0x00007F)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
289 return [cast(ubyte)i];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
290 else if(i <= 0x0007FF)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
291 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
292 ubyte a = (i << 26) >> 26;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
293 bts(cast(uint*)&a, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
294 ubyte b = (i << 19) >> 25;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
295 bts(cast(uint*)&b, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
296 bts(cast(uint*)&b, 6);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
297 return [b,a];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
298 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
299 else if(i <= 0x00FFFF)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
300 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
301 ubyte a = (i << 26) >> 26;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
302 bts(cast(uint*)&a, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
303 ubyte b = (i << 20) >> 26;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
304 bts(cast(uint*)&b, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
305 ubyte c = (i << 16) >> 28;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
306 bts(cast(uint*)&c, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
307 bts(cast(uint*)&c, 6);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
308 bts(cast(uint*)&c, 5);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
309 return [c,b,a];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
310 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
311 else if(i <= 0x10FFFF)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
312 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
313 ubyte a = (i << 26) >> 26;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
314 bts(cast(uint*)&a, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
315 ubyte b = (i << 20) >> 26;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
316 bts(cast(uint*)&b, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
317 ubyte c = (i << 14) >> 26;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
318 bts(cast(uint*)&c, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
319 ubyte d = (i << 11) >> 29;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
320 bts(cast(uint*)&d, 7);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
321 bts(cast(uint*)&d, 6);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
322 bts(cast(uint*)&d, 5);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
323 bts(cast(uint*)&d, 4);
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
324 return [d,c,b,a];
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
325 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
326 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
327
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
328 bool isValidUtf8(uint i)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
329 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
330 if(i <= 0x10FFFF)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
331 return true;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
332 return false;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
333 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
334
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
335 void printString(char[] str, String strBuf)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
336 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
337 char[] s;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
338 switch(strBuf.type)
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
339 {
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
340 case StructType.Char:
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
341 Stdout(str)(" have become").newline()
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
342 (cast(char[])strBuf.data).newline;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
343 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
344 case StructType.WChar:
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
345 Stdout(str)(" have become").newline()
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
346 (cast(wchar[])strBuf.data).newline;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
347 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
348 case StructType.DChar:
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
349 Stdout(str)(" have become").newline()
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
350 (cast(dchar[])strBuf.data).newline;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
351 break;
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
352 }
89db676fbacb Now able of understanding strings.
Anders Johnsen <skabet@gmail.com>
parents:
diff changeset
353 }