1 |
|
2 | CND = require 'cnd'
|
3 | log = CND.log.bind CND
|
4 | echo = CND.echo.bind CND
|
5 | rainbow = CND.rainbow.bind CND
|
6 | CHR = require '../../coffeenode-chr'
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | assert = require 'assert'
|
18 |
|
19 |
|
20 | assert.deepEqual ( ( '&jzr#x123;helo'.match CHR._first_chr_matcher_xncr )[ 1 .. 3 ] ),[ 'jzr', '123', undefined ]
|
21 | assert.deepEqual ( ( '&jzr#123;helo'.match CHR._first_chr_matcher_xncr )[ 1 .. 3 ] ),[ 'jzr', undefined, '123' ]
|
22 | assert.deepEqual ( ( 'ģhelo'.match CHR._first_chr_matcher_xncr )[ 1 .. 3 ] ),[ '', '123', undefined ]
|
23 | assert.deepEqual ( ( 'ģhelo'.match CHR._first_chr_matcher_ncr )[ 1 .. 3 ] ), [ '', '123', undefined ]
|
24 | assert.deepEqual ( ( '{helo'.match CHR._first_chr_matcher_ncr )[ 1 .. 3 ] ), [ '', undefined, '123' ]
|
25 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'abc', 'plain' ), [ 'a', 'u', 97 ]
|
26 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'abc', 'ncr' ), [ 'a', 'u', 97 ]
|
27 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'abc', 'xncr' ), [ 'a', 'u', 97 ]
|
28 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'aabc', 'plain' ), [ '&', 'u', 38 ]
|
29 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'aabc', 'ncr' ), [ 'a', 'u', 97 ]
|
30 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'aabc', 'xncr' ), [ 'a', 'u', 97 ]
|
31 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'aabc' ), [ '&', 'u', 38 ]
|
32 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'aabc', 'plain' ), [ '&', 'u', 38 ]
|
33 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'aabc', 'ncr' ), [ 'a', 'u', 97 ]
|
34 | assert.deepEqual ( CHR._chr_csg_cid_from_chr 'aabc', 'xncr' ), [ 'a', 'u', 97 ]
|
35 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣' ), [ 'u', 38 ]
|
36 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣', input: 'plain' ), [ 'u', 38 ]
|
37 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣', input: 'ncr' ), [ 'u', 148835 ]
|
38 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣', input: 'xncr' ), [ 'u', 148835 ]
|
39 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣' ), [ 'u', 148835 ]
|
40 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣', input: 'plain' ), [ 'u', 148835 ]
|
41 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣', input: 'ncr' ), [ 'u', 148835 ]
|
42 | assert.deepEqual ( CHR.csg_cid_from_chr '𤕣', input: 'xncr' ), [ 'u', 148835 ]
|
43 | assert.deepEqual ( ( '𤕣'[ 0 ] + 'x' ).match CHR._first_chr_matcher_plain ), null
|
44 | assert.throws ( -> CHR._chr_csg_cid_from_chr '𤕣'[ 0 ] ), /^Error: illegal character sequence/
|
45 | assert.throws ( -> CHR._chr_csg_cid_from_chr '𤕣'[ 0 ] + 'x' ), /^Error: illegal character sequence/
|
46 | assert.throws ( -> CHR.chrs_from_text 'x', input: 'xxx' ), /^Error: unknown input mode: /
|
47 |
|
48 |
|
49 |
|
50 |
|
51 | assert.deepEqual ( CHR.chrs_from_text '' ), []
|
52 | assert.deepEqual ( CHR.chrs_from_text 'abc' ), [ 'a', 'b', 'c' ]
|
53 | assert.deepEqual ( CHR.chrs_from_text '𤕣abc' ), [ '𤕣', 'a', 'b', 'c' ]
|
54 | assert.deepEqual ( CHR.chrs_from_text '𤕣ab𤕣c' ), [ '𤕣', 'a', 'b', '𤕣', 'c' ]
|
55 | assert.deepEqual ( CHR.chrs_from_text '𤕣a{b𤕣c' ), [ '𤕣', 'a', '&', '#', '1', '2', '3', ';', 'b', '𤕣', 'c' ]
|
56 | assert.deepEqual ( CHR.chrs_from_text '𤕣a&jzr#123;b𤕣c' ), [ '𤕣', 'a', '&', 'j', 'z', 'r', '#', '1', '2', '3', ';', 'b', '𤕣', 'c' ]
|
57 | assert.deepEqual ( CHR.chrs_from_text '𤕣a𒎫b𤕣c' ), [ '𤕣', 'a', '&', '#', 'x', '1', '2', '3', 'a', 'b', ';', 'b', '𤕣', 'c' ]
|
58 | assert.deepEqual ( CHR.chrs_from_text '𤕣a&jzr#x123ab;b𤕣c' ), [ '𤕣', 'a', '&', 'j', 'z', 'r', '#', 'x', '1', '2', '3', 'a', 'b', ';', 'b', '𤕣', 'c' ]
|
59 | assert.deepEqual ( CHR.chrs_from_text '', input: 'ncr' ), []
|
60 | assert.deepEqual ( CHR.chrs_from_text 'abc', input: 'ncr' ), [ 'a', 'b', 'c' ]
|
61 | assert.deepEqual ( CHR.chrs_from_text '𤕣abc', input: 'ncr' ), [ '𤕣', 'a', 'b', 'c' ]
|
62 | assert.deepEqual ( CHR.chrs_from_text '𤕣ab𤕣c', input: 'ncr' ), [ '𤕣', 'a', 'b', '𤕣', 'c' ]
|
63 | assert.deepEqual ( CHR.chrs_from_text '𤕣a{b𤕣c', input: 'ncr' ), [ '𤕣', 'a', '{', 'b', '𤕣', 'c' ]
|
64 | assert.deepEqual ( CHR.chrs_from_text '𤕣a𒎫b𤕣c', input: 'ncr' ), [ '𤕣', 'a', '𒎫', 'b', '𤕣', 'c' ]
|
65 | assert.deepEqual ( CHR.chrs_from_text '𤕣a&jzr#x123ab;b𤕣c', input: 'ncr' ), [ '𤕣', 'a', '&', 'j', 'z', 'r', '#', 'x', '1', '2', '3', 'a', 'b', ';', 'b', '𤕣', 'c' ]
|
66 | assert.deepEqual ( CHR.chrs_from_text '', input: 'xncr' ), []
|
67 | assert.deepEqual ( CHR.chrs_from_text 'abc', input: 'xncr' ), [ 'a', 'b', 'c' ]
|
68 | assert.deepEqual ( CHR.chrs_from_text '𤕣abc', input: 'xncr' ), [ '𤕣', 'a', 'b', 'c' ]
|
69 | assert.deepEqual ( CHR.chrs_from_text '𤕣ab𤕣c', input: 'xncr' ), [ '𤕣', 'a', 'b', '𤕣', 'c' ]
|
70 | assert.deepEqual ( CHR.chrs_from_text '𤕣a{b𤕣c', input: 'xncr' ), [ '𤕣', 'a', '{', 'b', '𤕣', 'c' ]
|
71 | assert.deepEqual ( CHR.chrs_from_text '𤕣a𒎫b𤕣c', input: 'xncr' ), [ '𤕣', 'a', '𒎫', 'b', '𤕣', 'c' ]
|
72 | assert.deepEqual ( CHR.chrs_from_text '𤕣a&jzr#x123ab;b𤕣c', input: 'xncr' ), [ '𤕣', 'a', '&jzr#x123ab;', 'b', '𤕣', 'c' ]
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 | assert.throws ( -> CHR.cid_from_chr '' ), /^Error: unable to obtain CID from empty string$/
|
79 | assert.throws ( -> CHR.cid_from_chr '', 'ncr' ), /^Error: unable to obtain CID from empty string$/
|
80 | assert.throws ( -> CHR.cid_from_chr '', 'xncr' ), /^Error: unable to obtain CID from empty string$/
|
81 | assert.strictEqual ( CHR.cid_from_chr 'a' ), 97
|
82 | assert.strictEqual ( CHR.cid_from_chr 'x' ), 120
|
83 | assert.strictEqual ( CHR.cid_from_chr 'ʦ' ), 38
|
84 | assert.strictEqual ( CHR.cid_from_chr 'ٸ' ), 38
|
85 | assert.strictEqual ( CHR.cid_from_chr '&jzr#678;' ), 38
|
86 | assert.strictEqual ( CHR.cid_from_chr '&jzr#x678;' ), 38
|
87 | assert.strictEqual ( CHR.cid_from_chr 'a', input: 'ncr', ), 97
|
88 | assert.strictEqual ( CHR.cid_from_chr 'x', input: 'ncr', ), 120
|
89 | assert.strictEqual ( CHR.cid_from_chr 'ʦ', input: 'ncr', ), 678
|
90 | assert.strictEqual ( CHR.cid_from_chr 'ٸ', input: 'ncr', ), 0x678
|
91 | assert.strictEqual ( CHR.cid_from_chr '&jzr#678;', input: 'ncr', ), 38
|
92 | assert.strictEqual ( CHR.cid_from_chr '&jzr#x678;', input: 'ncr', ), 38
|
93 | assert.strictEqual ( CHR.cid_from_chr 'a', input: 'xncr', ), 97
|
94 | assert.strictEqual ( CHR.cid_from_chr 'x', input: 'xncr', ), 120
|
95 | assert.strictEqual ( CHR.cid_from_chr 'ʦ', input: 'xncr', ), 678
|
96 | assert.strictEqual ( CHR.cid_from_chr 'ٸ', input: 'xncr', ), 0x678
|
97 | assert.strictEqual ( CHR.cid_from_chr '&jzr#678;', input: 'xncr', ), 678
|
98 | assert.strictEqual ( CHR.cid_from_chr '&jzr#x678;', input: 'xncr', ), 0x678
|
99 |
|
100 | assert.strictEqual ( CHR.html_from_text 'helo wörld' ), """<span class="u-latn">helo w</span><span class="u-latn-1">ö</span><span class="u-latn">rld</span>"""
|
101 | assert.strictEqual ( CHR.html_from_text 'helo 𤕣 wörld' ), """<span class="u-latn">helo &#x24563; w</span><span class="u-latn-1">ö</span><span class="u-latn">rld</span>"""
|
102 | assert.strictEqual ( CHR.html_from_text 'helo 𤕣 wörld', input: 'xncr'), """<span class="u-latn">helo </span><span class="u-cjk-xb">𤕣</span><span class="u-latn"> w</span><span class="u-latn-1">ö</span><span class="u-latn">rld</span>"""
|
103 | assert.strictEqual ( CHR.html_from_text '&jzr#xe101; & you', input: 'xncr' ), """<span class="jzr-fig"></span><span class="u-latn"> & you</span>"""
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 |
|
114 |
|
115 |
|
116 |
|
117 |
|
118 |
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 |
|
127 |
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 |
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 | assert.strictEqual ( CHR._as_xncr 'u', 0x12abc ), '𒪼'
|
151 | assert.strictEqual ( CHR._as_xncr 'u', 0x12abc ), '𒪼'
|
152 | assert.strictEqual ( CHR._as_xncr 'jzr', 0x12abc ), '&jzr#x12abc;'
|
153 | assert.strictEqual ( CHR._as_sfncr 'u', 0x12abc ), 'u-12abc'
|
154 | assert.strictEqual ( CHR._as_sfncr 'jzr', 0x12abc ), 'jzr-12abc'
|
155 |
|
156 | assert.strictEqual ( CHR.as_ncr 0x12abc ), '𒪼'
|
157 | assert.strictEqual ( CHR.as_sfncr 'a' ), 'u-61'
|
158 | assert.strictEqual ( CHR.as_rsg 'a' ), 'u-latn'
|
159 | assert.strictEqual ( CHR.as_rsg '𤕣' ), 'u-cjk-xb'
|
160 | assert.strictEqual ( CHR.as_range_name 'a' ), 'Basic Latin'
|
161 | assert.strictEqual ( CHR.as_range_name '𤕣' ), 'CJK Unified Ideographs Extension B'
|
162 |
|
163 | assert.strictEqual ( CHR.as_range_name '', input: 'plain' ), 'Basic Latin'
|
164 | assert.strictEqual ( CHR.as_range_name '&jzr#xe100;', input: 'plain' ), 'Basic Latin'
|
165 | assert.strictEqual ( CHR.as_rsg '', input: 'plain' ), 'u-latn'
|
166 | assert.strictEqual ( CHR.as_rsg '&jzr#xe100;', input: 'plain' ), 'u-latn'
|
167 |
|
168 | assert.strictEqual ( CHR.as_range_name '', input: 'ncr' ), 'Private Use Area'
|
169 | assert.strictEqual ( CHR.as_range_name '&jzr#xe100;', input: 'ncr' ), 'Basic Latin'
|
170 | assert.strictEqual ( CHR.as_rsg '', input: 'ncr' ), 'u-pua'
|
171 | assert.strictEqual ( CHR.as_rsg '&jzr#xe100;', input: 'ncr' ), 'u-latn'
|
172 |
|
173 | assert.strictEqual ( CHR.as_range_name '', input: 'xncr' ), 'Private Use Area'
|
174 | assert.strictEqual ( CHR.as_range_name '&jzr#xe100;', input: 'xncr' ), 'Jizura Character Components'
|
175 | assert.strictEqual ( CHR.as_rsg '', input: 'xncr' ), 'u-pua'
|
176 | assert.strictEqual ( CHR.as_rsg '&jzr#xe100;', input: 'xncr' ), 'jzr-fig'
|
177 |
|
178 | assert.throws ( -> CHR.as_rsg '&unknown#xe100;', input: 'xncr' ), /Error: unknown CSG: 'unknown'/
|
179 | assert.strictEqual ( CHR.as_rsg '&jzr#xe100;', input: 'xncr', csg: 'u' ), 'u-pua'
|
180 | assert.strictEqual ( CHR.as_rsg '', input: 'xncr', csg: 'u' ), 'u-pua'
|
181 | assert.strictEqual ( CHR.as_rsg '', input: 'xncr', csg: 'jzr' ), 'jzr-fig'
|
182 | assert.strictEqual ( CHR.as_rsg '', input: 'xncr', csg: 'jzr' ), null
|
183 | assert.strictEqual ( CHR.as_fncr '', input: 'xncr', csg: 'jzr' ), 'jzr-1'
|
184 | assert.strictEqual ( CHR.as_fncr '', input: 'xncr', csg: 'jzr' ), 'jzr-fig-e123'
|
185 | assert.strictEqual ( CHR.as_fncr '𤕣', input: 'xncr' ), 'u-cjk-xb-24563'
|
186 |
|
187 | assert.strictEqual ( CHR.as_cid '&jzr#xe100;', input: 'xncr' ), 0xe100
|
188 | assert.strictEqual ( CHR.as_cid '&jzr#xe100;', input: 'xncr', csg: 'u' ), 0xe100
|
189 | assert.strictEqual ( CHR.as_cid '𤕣', input: 'xncr' ), 0x24563
|
190 |
|
191 | assert.strictEqual ( CHR.as_csg '&jzr#xe100;', input: 'xncr' ), 'jzr'
|
192 | assert.strictEqual ( CHR.as_csg '&jzr#xe100;', input: 'xncr', csg: 'u' ), 'u'
|
193 | assert.strictEqual ( CHR.as_csg '𤕣', input: 'xncr' ), 'u'
|
194 |
|
195 | assert.deepEqual ( CHR.analyze 'helo world' ), {'~isa': 'CHR/chr-description',"chr":"h","csg":"u","cid":104,"fncr":"u-latn-68","sfncr":"u-68","ncr":"h","xncr":"h","rsg":"u-latn"}
|
196 | assert.deepEqual ( CHR.analyze '𤕣' ), {'~isa': 'CHR/chr-description',"chr":"&","csg":"u","cid":38,"fncr":"u-latn-26","sfncr":"u-26","ncr":"&","xncr":"&","rsg":"u-latn"}
|
197 | assert.deepEqual ( CHR.analyze '𤕣', input: 'ncr' ), {'~isa': 'CHR/chr-description',"chr":"𤕣","csg":"u","cid":148835,"fncr":"u-cjk-xb-24563","sfncr":"u-24563","ncr":"𤕣","xncr":"𤕣","rsg":"u-cjk-xb"}
|
198 | assert.deepEqual ( CHR.analyze '𤕣', input: 'xncr' ), {'~isa': 'CHR/chr-description',"chr":"𤕣","csg":"u","cid":148835,"fncr":"u-cjk-xb-24563","sfncr":"u-24563","ncr":"𤕣","xncr":"𤕣","rsg":"u-cjk-xb"}
|
199 | assert.deepEqual ( CHR.analyze '&jzr#x24563;' ), {'~isa': 'CHR/chr-description',"chr":"&","csg":"u","cid":38,"fncr":"u-latn-26","sfncr":"u-26","ncr":"&","xncr":"&","rsg":"u-latn"}
|
200 | assert.deepEqual ( CHR.analyze '&jzr#x24563;', input: 'ncr' ), {'~isa': 'CHR/chr-description',"chr":"&","csg":"u","cid":38,"fncr":"u-latn-26","sfncr":"u-26","ncr":"&","xncr":"&","rsg":"u-latn"}
|
201 | assert.deepEqual ( CHR.analyze '&jzr#x24563;', input: 'xncr' ), {'~isa': 'CHR/chr-description',"chr":"&jzr#x24563;","csg":"jzr","cid":148835,"fncr":"jzr-24563","sfncr":"jzr-24563","ncr":"𤕣","xncr":"&jzr#x24563;","rsg":null}
|
202 |
|
203 |
|
204 | assert.throws ( -> CHR.chunks_from_text 'ab&jzr#xe063;d', input: 'xncr', output: 'xxx' ), /Error: unknown output mode: 'xxx'/
|
205 | assert.deepEqual ( CHR.chunks_from_text 'helo wörld' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"helo w"},{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn-1","text":"ö"},{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"rld"}]
|
206 | assert.deepEqual ( CHR.chunks_from_text '種果〇𤕣カタカナ' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-cjk","text":"種果"},{"~isa":"CHR/chunk","csg":"u","rsg":"u-cjk-sym","text":"〇"},{"~isa":"CHR/chunk","csg":"u","rsg":"u-cjk-xb","text":"𤕣"},{"~isa":"CHR/chunk","csg":"u","rsg":"u-cjk-kata","text":"カタカナ"}]
|
207 | assert.deepEqual ( CHR.chunks_from_text 'abcd' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"abcd"}]
|
208 | assert.deepEqual ( CHR.chunks_from_text 'abcd', input: 'ncr' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"abcd"}]
|
209 | assert.deepEqual ( CHR.chunks_from_text 'abcd', input: 'xncr' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"abcd"}]
|
210 | assert.deepEqual ( CHR.chunks_from_text 'ab&jzr#xe063;d' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"ab&jzr#xe063;d"}]
|
211 | assert.deepEqual ( CHR.chunks_from_text 'ab&jzr#xe063;d', input: 'ncr' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"ab&jzr#xe063;d"}]
|
212 | assert.deepEqual ( CHR.chunks_from_text 'ab&jzr#xe063;d', input: 'xncr' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"ab"},{"~isa":"CHR/chunk","csg":"jzr","rsg":"jzr-fig","text":""},{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"d"}]
|
213 | assert.deepEqual ( CHR.chunks_from_text 'helo wörld', output: 'html' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"helo w"},{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn-1","text":"ö"},{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"rld"}]
|
214 | assert.deepEqual ( CHR.chunks_from_text '1 < 2', output: 'html' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"1 < 2"}]
|
215 | assert.deepEqual ( CHR.chunks_from_text '2 > 1', output: 'html' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"2 > 1"}]
|
216 | assert.deepEqual ( CHR.chunks_from_text 'me & you', output: 'html' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"me & you"}]
|
217 | assert.deepEqual ( CHR.chunks_from_text 'me & you', output: 'html' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"me &amp; you"}]
|
218 | assert.deepEqual ( CHR.chunks_from_text 'ab&jzr#xe063;d', input: 'xncr', output: 'html' ), [{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"ab"},{"~isa":"CHR/chunk","csg":"jzr","rsg":"jzr-fig","text":""},{"~isa":"CHR/chunk","csg":"u","rsg":"u-latn","text":"d"}]
|
219 |
|
220 |
|
221 |
|
222 |
|
223 |
|
224 |
|
225 |
|
226 |
|
227 |
|
228 |
|
229 |
|
230 |
|
231 |
|
232 |
|
233 |
|
234 |
|
235 |
|
236 |
|
237 |
|
238 |
|
239 |
|
240 |
|
241 |
|
242 |
|
243 |
|
244 |
|
245 |
|
246 |
|
247 |
|
248 |
|
249 |
|
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 |
|