brotli_decompressor/
transform.rs

1#![allow(non_upper_case_globals)]
2
3const kIdentity: u8 = 0;
4const kOmitLast1: u8 = 1;
5const kOmitLast2: u8 = 2;
6const kOmitLast3: u8 = 3;
7const kOmitLast4: u8 = 4;
8const kOmitLast5: u8 = 5;
9const kOmitLast6: u8 = 6;
10const kOmitLast7: u8 = 7;
11const kOmitLast8: u8 = 8;
12const kOmitLast9: u8 = 9;
13const kUppercaseFirst: u8 = 10;
14const kUppercaseAll: u8 = 11;
15const kOmitFirst1: u8 = 12;
16const kOmitFirst2: u8 = 13;
17const kOmitFirst3: u8 = 14;
18const kOmitFirst4: u8 = 15;
19const kOmitFirst5: u8 = 16;
20const kOmitFirst6: u8 = 17;
21const kOmitFirst7: u8 = 18;
22// const  kOmitFirst8     : u8 = 19; // <-- unused (reserved)
23const kOmitFirst9: u8 = 20;
24
25
26pub struct Transform {
27  pub prefix_id: u8,
28  pub transform: u8,
29  pub suffix_id: u8,
30}
31
32const kPrefixSuffix: [u8; 208] =
33  [0x00, 0x20, 0x00, 0x2c, 0x20, 0x00, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x00, 0x20,
34   0x6f, 0x66, 0x20, 0x00, 0x73, 0x20, 0x00, 0x2e, 0x00, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x00, 0x20,
35   0x69, 0x6e, 0x20, 0x00, 0x22, 0x00, 0x20, 0x74, 0x6f, 0x20, 0x00, 0x22, 0x3e, 0x00, 0x0a, 0x00,
36   0x2e, 0x20, 0x00, 0x5d, 0x00, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x00, 0x20, 0x61, 0x20, 0x00, 0x20,
37   0x74, 0x68, 0x61, 0x74, 0x20, 0x00, 0x27, 0x00, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x00, 0x20,
38   0x66, 0x72, 0x6f, 0x6d, 0x20, 0x00, 0x20, 0x62, 0x79, 0x20, 0x00, 0x28, 0x00, 0x2e, 0x20, 0x54,
39   0x68, 0x65, 0x20, 0x00, 0x20, 0x6f, 0x6e, 0x20, 0x00, 0x20, 0x61, 0x73, 0x20, 0x00, 0x20, 0x69,
40   0x73, 0x20, 0x00, 0x69, 0x6e, 0x67, 0x20, 0x00, 0x0a, 0x09, 0x00, 0x3a, 0x00, 0x65, 0x64, 0x20,
41   0x00, 0x3d, 0x22, 0x00, 0x20, 0x61, 0x74, 0x20, 0x00, 0x6c, 0x79, 0x20, 0x00, 0x2c, 0x00, 0x3d,
42   0x27, 0x00, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x00, 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x00,
43   0x20, 0x6e, 0x6f, 0x74, 0x20, 0x00, 0x65, 0x72, 0x20, 0x00, 0x61, 0x6c, 0x20, 0x00, 0x66, 0x75,
44   0x6c, 0x20, 0x00, 0x69, 0x76, 0x65, 0x20, 0x00, 0x6c, 0x65, 0x73, 0x73, 0x20, 0x00, 0x65, 0x73,
45   0x74, 0x20, 0x00, 0x69, 0x7a, 0x65, 0x20, 0x00, 0xc2, 0xa0, 0x00, 0x6f, 0x75, 0x73, 0x20, 0x00];
46//    "\0 \0, \0 of the \0 of \0s \0.\0 and \0 in \0\"\0 to \0\">\0\n\0. \0]\0"
47//    " for \0 a \0 that \0\'\0 with \0 from \0 by \0(\0. The \0 on \0 as \0"
48//    " is \0ing \0\n\t\0:\0ed \0=\"\0 at \0ly \0,\0=\'\0.com/\0. This \0"
49//    " not \0er \0al \0ful \0ive \0less \0est \0ize \0\xc2\xa0\0ous ";
50
51// EMPTY = ""
52// SP = " "
53// DQUOT = "\""
54// SQUOT = "'"
55// CLOSEBR = "]"
56// OPEN = "("
57// SLASH = "/"
58// NBSP = non-breaking space "\0xc2\xa0"
59//
60const kPFix_EMPTY: u8 = 0;
61const kPFix_SP: u8 = 1;
62const kPFix_COMMASP: u8 = 3;
63const kPFix_SPofSPtheSP: u8 = 6;
64const kPFix_SPtheSP: u8 = 9;
65const kPFix_eSP: u8 = 12;
66const kPFix_SPofSP: u8 = 15;
67const kPFix_sSP: u8 = 20;
68const kPFix_DOT: u8 = 23;
69const kPFix_SPandSP: u8 = 25;
70const kPFix_SPinSP: u8 = 31;
71const kPFix_DQUOT: u8 = 36;
72const kPFix_SPtoSP: u8 = 38;
73const kPFix_DQUOTGT: u8 = 43;
74const kPFix_NEWLINE: u8 = 46;
75const kPFix_DOTSP: u8 = 48;
76const kPFix_CLOSEBR: u8 = 51;
77const kPFix_SPforSP: u8 = 53;
78const kPFix_SPaSP: u8 = 59;
79const kPFix_SPthatSP: u8 = 63;
80const kPFix_SQUOT: u8 = 70;
81const kPFix_SPwithSP: u8 = 72;
82const kPFix_SPfromSP: u8 = 79;
83const kPFix_SPbySP: u8 = 86;
84const kPFix_OPEN: u8 = 91;
85const kPFix_DOTSPTheSP: u8 = 93;
86const kPFix_SPonSP: u8 = 100;
87const kPFix_SPasSP: u8 = 105;
88const kPFix_SPisSP: u8 = 110;
89const kPFix_ingSP: u8 = 115;
90const kPFix_NEWLINETAB: u8 = 120;
91const kPFix_COLON: u8 = 123;
92const kPFix_edSP: u8 = 125;
93const kPFix_EQDQUOT: u8 = 129;
94const kPFix_SPatSP: u8 = 132;
95const kPFix_lySP: u8 = 137;
96const kPFix_COMMA: u8 = 141;
97const kPFix_EQSQUOT: u8 = 143;
98const kPFix_DOTcomSLASH: u8 = 146;
99const kPFix_DOTSPThisSP: u8 = 152;
100const kPFix_SPnotSP: u8 = 160;
101const kPFix_erSP: u8 = 166;
102const kPFix_alSP: u8 = 170;
103const kPFix_fulSP: u8 = 174;
104const kPFix_iveSP: u8 = 179;
105const kPFix_lessSP: u8 = 184;
106const kPFix_estSP: u8 = 190;
107const kPFix_izeSP: u8 = 195;
108const kPFix_NBSP: u8 = 200;
109const kPFix_ousSP: u8 = 203;
110
111pub const kNumTransforms: i32 = 121;
112pub const kTransforms: [Transform; kNumTransforms as usize] = [Transform {
113                                                                 prefix_id: kPFix_EMPTY,
114                                                                 transform: kIdentity,
115                                                                 suffix_id: kPFix_EMPTY,
116                                                               },
117                                                               Transform {
118                                                                 prefix_id: kPFix_EMPTY,
119                                                                 transform: kIdentity,
120                                                                 suffix_id: kPFix_SP,
121                                                               },
122                                                               Transform {
123                                                                 prefix_id: kPFix_SP,
124                                                                 transform: kIdentity,
125                                                                 suffix_id: kPFix_SP,
126                                                               },
127                                                               Transform {
128                                                                 prefix_id: kPFix_EMPTY,
129                                                                 transform: kOmitFirst1,
130                                                                 suffix_id: kPFix_EMPTY,
131                                                               },
132                                                               Transform {
133                                                                 prefix_id: kPFix_EMPTY,
134                                                                 transform: kUppercaseFirst,
135                                                                 suffix_id: kPFix_SP,
136                                                               },
137                                                               Transform {
138                                                                 prefix_id: kPFix_EMPTY,
139                                                                 transform: kIdentity,
140                                                                 suffix_id: kPFix_SPtheSP,
141                                                               },
142                                                               Transform {
143                                                                 prefix_id: kPFix_SP,
144                                                                 transform: kIdentity,
145                                                                 suffix_id: kPFix_EMPTY,
146                                                               },
147                                                               Transform {
148                                                                 prefix_id: kPFix_sSP,
149                                                                 transform: kIdentity,
150                                                                 suffix_id: kPFix_SP,
151                                                               },
152                                                               Transform {
153                                                                 prefix_id: kPFix_EMPTY,
154                                                                 transform: kIdentity,
155                                                                 suffix_id: kPFix_SPofSP,
156                                                               },
157                                                               Transform {
158                                                                 prefix_id: kPFix_EMPTY,
159                                                                 transform: kUppercaseFirst,
160                                                                 suffix_id: kPFix_EMPTY,
161                                                               },
162                                                               Transform {
163                                                                 prefix_id: kPFix_EMPTY,
164                                                                 transform: kIdentity,
165                                                                 suffix_id: kPFix_SPandSP,
166                                                               },
167                                                               Transform {
168                                                                 prefix_id: kPFix_EMPTY,
169                                                                 transform: kOmitFirst2,
170                                                                 suffix_id: kPFix_EMPTY,
171                                                               },
172                                                               Transform {
173                                                                 prefix_id: kPFix_EMPTY,
174                                                                 transform: kOmitLast1,
175                                                                 suffix_id: kPFix_EMPTY,
176                                                               },
177                                                               Transform {
178                                                                 prefix_id: kPFix_COMMASP,
179                                                                 transform: kIdentity,
180                                                                 suffix_id: kPFix_SP,
181                                                               },
182                                                               Transform {
183                                                                 prefix_id: kPFix_EMPTY,
184                                                                 transform: kIdentity,
185                                                                 suffix_id: kPFix_COMMASP,
186                                                               },
187                                                               Transform {
188                                                                 prefix_id: kPFix_SP,
189                                                                 transform: kUppercaseFirst,
190                                                                 suffix_id: kPFix_SP,
191                                                               },
192                                                               Transform {
193                                                                 prefix_id: kPFix_EMPTY,
194                                                                 transform: kIdentity,
195                                                                 suffix_id: kPFix_SPinSP,
196                                                               },
197                                                               Transform {
198                                                                 prefix_id: kPFix_EMPTY,
199                                                                 transform: kIdentity,
200                                                                 suffix_id: kPFix_SPtoSP,
201                                                               },
202                                                               Transform {
203                                                                 prefix_id: kPFix_eSP,
204                                                                 transform: kIdentity,
205                                                                 suffix_id: kPFix_SP,
206                                                               },
207                                                               Transform {
208                                                                 prefix_id: kPFix_EMPTY,
209                                                                 transform: kIdentity,
210                                                                 suffix_id: kPFix_DQUOT,
211                                                               },
212                                                               Transform {
213                                                                 prefix_id: kPFix_EMPTY,
214                                                                 transform: kIdentity,
215                                                                 suffix_id: kPFix_DOT,
216                                                               },
217                                                               Transform {
218                                                                 prefix_id: kPFix_EMPTY,
219                                                                 transform: kIdentity,
220                                                                 suffix_id: kPFix_DQUOTGT,
221                                                               },
222                                                               Transform {
223                                                                 prefix_id: kPFix_EMPTY,
224                                                                 transform: kIdentity,
225                                                                 suffix_id: kPFix_NEWLINE,
226                                                               },
227                                                               Transform {
228                                                                 prefix_id: kPFix_EMPTY,
229                                                                 transform: kOmitLast3,
230                                                                 suffix_id: kPFix_EMPTY,
231                                                               },
232                                                               Transform {
233                                                                 prefix_id: kPFix_EMPTY,
234                                                                 transform: kIdentity,
235                                                                 suffix_id: kPFix_CLOSEBR,
236                                                               },
237                                                               Transform {
238                                                                 prefix_id: kPFix_EMPTY,
239                                                                 transform: kIdentity,
240                                                                 suffix_id: kPFix_SPforSP,
241                                                               },
242                                                               Transform {
243                                                                 prefix_id: kPFix_EMPTY,
244                                                                 transform: kOmitFirst3,
245                                                                 suffix_id: kPFix_EMPTY,
246                                                               },
247                                                               Transform {
248                                                                 prefix_id: kPFix_EMPTY,
249                                                                 transform: kOmitLast2,
250                                                                 suffix_id: kPFix_EMPTY,
251                                                               },
252                                                               Transform {
253                                                                 prefix_id: kPFix_EMPTY,
254                                                                 transform: kIdentity,
255                                                                 suffix_id: kPFix_SPaSP,
256                                                               },
257                                                               Transform {
258                                                                 prefix_id: kPFix_EMPTY,
259                                                                 transform: kIdentity,
260                                                                 suffix_id: kPFix_SPthatSP,
261                                                               },
262                                                               Transform {
263                                                                 prefix_id: kPFix_SP,
264                                                                 transform: kUppercaseFirst,
265                                                                 suffix_id: kPFix_EMPTY,
266                                                               },
267                                                               Transform {
268                                                                 prefix_id: kPFix_EMPTY,
269                                                                 transform: kIdentity,
270                                                                 suffix_id: kPFix_DOTSP,
271                                                               },
272                                                               Transform {
273                                                                 prefix_id: kPFix_DOT,
274                                                                 transform: kIdentity,
275                                                                 suffix_id: kPFix_EMPTY,
276                                                               },
277                                                               Transform {
278                                                                 prefix_id: kPFix_SP,
279                                                                 transform: kIdentity,
280                                                                 suffix_id: kPFix_COMMASP,
281                                                               },
282                                                               Transform {
283                                                                 prefix_id: kPFix_EMPTY,
284                                                                 transform: kOmitFirst4,
285                                                                 suffix_id: kPFix_EMPTY,
286                                                               },
287                                                               Transform {
288                                                                 prefix_id: kPFix_EMPTY,
289                                                                 transform: kIdentity,
290                                                                 suffix_id: kPFix_SPwithSP,
291                                                               },
292                                                               Transform {
293                                                                 prefix_id: kPFix_EMPTY,
294                                                                 transform: kIdentity,
295                                                                 suffix_id: kPFix_SQUOT,
296                                                               },
297                                                               Transform {
298                                                                 prefix_id: kPFix_EMPTY,
299                                                                 transform: kIdentity,
300                                                                 suffix_id: kPFix_SPfromSP,
301                                                               },
302                                                               Transform {
303                                                                 prefix_id: kPFix_EMPTY,
304                                                                 transform: kIdentity,
305                                                                 suffix_id: kPFix_SPbySP,
306                                                               },
307                                                               Transform {
308                                                                 prefix_id: kPFix_EMPTY,
309                                                                 transform: kOmitFirst5,
310                                                                 suffix_id: kPFix_EMPTY,
311                                                               },
312                                                               Transform {
313                                                                 prefix_id: kPFix_EMPTY,
314                                                                 transform: kOmitFirst6,
315                                                                 suffix_id: kPFix_EMPTY,
316                                                               },
317                                                               Transform {
318                                                                 prefix_id: kPFix_SPtheSP,
319                                                                 transform: kIdentity,
320                                                                 suffix_id: kPFix_EMPTY,
321                                                               },
322                                                               Transform {
323                                                                 prefix_id: kPFix_EMPTY,
324                                                                 transform: kOmitLast4,
325                                                                 suffix_id: kPFix_EMPTY,
326                                                               },
327                                                               Transform {
328                                                                 prefix_id: kPFix_EMPTY,
329                                                                 transform: kIdentity,
330                                                                 suffix_id: kPFix_DOTSPTheSP,
331                                                               },
332                                                               Transform {
333                                                                 prefix_id: kPFix_EMPTY,
334                                                                 transform: kUppercaseAll,
335                                                                 suffix_id: kPFix_EMPTY,
336                                                               },
337                                                               Transform {
338                                                                 prefix_id: kPFix_EMPTY,
339                                                                 transform: kIdentity,
340                                                                 suffix_id: kPFix_SPonSP,
341                                                               },
342                                                               Transform {
343                                                                 prefix_id: kPFix_EMPTY,
344                                                                 transform: kIdentity,
345                                                                 suffix_id: kPFix_SPasSP,
346                                                               },
347                                                               Transform {
348                                                                 prefix_id: kPFix_EMPTY,
349                                                                 transform: kIdentity,
350                                                                 suffix_id: kPFix_SPisSP,
351                                                               },
352                                                               Transform {
353                                                                 prefix_id: kPFix_EMPTY,
354                                                                 transform: kOmitLast7,
355                                                                 suffix_id: kPFix_EMPTY,
356                                                               },
357                                                               Transform {
358                                                                 prefix_id: kPFix_EMPTY,
359                                                                 transform: kOmitLast1,
360                                                                 suffix_id: kPFix_ingSP,
361                                                               },
362                                                               Transform {
363                                                                 prefix_id: kPFix_EMPTY,
364                                                                 transform: kIdentity,
365                                                                 suffix_id: kPFix_NEWLINETAB,
366                                                               },
367                                                               Transform {
368                                                                 prefix_id: kPFix_EMPTY,
369                                                                 transform: kIdentity,
370                                                                 suffix_id: kPFix_COLON,
371                                                               },
372                                                               Transform {
373                                                                 prefix_id: kPFix_SP,
374                                                                 transform: kIdentity,
375                                                                 suffix_id: kPFix_DOTSP,
376                                                               },
377                                                               Transform {
378                                                                 prefix_id: kPFix_EMPTY,
379                                                                 transform: kIdentity,
380                                                                 suffix_id: kPFix_edSP,
381                                                               },
382                                                               Transform {
383                                                                 prefix_id: kPFix_EMPTY,
384                                                                 transform: kOmitFirst9,
385                                                                 suffix_id: kPFix_EMPTY,
386                                                               },
387                                                               Transform {
388                                                                 prefix_id: kPFix_EMPTY,
389                                                                 transform: kOmitFirst7,
390                                                                 suffix_id: kPFix_EMPTY,
391                                                               },
392                                                               Transform {
393                                                                 prefix_id: kPFix_EMPTY,
394                                                                 transform: kOmitLast6,
395                                                                 suffix_id: kPFix_EMPTY,
396                                                               },
397                                                               Transform {
398                                                                 prefix_id: kPFix_EMPTY,
399                                                                 transform: kIdentity,
400                                                                 suffix_id: kPFix_OPEN,
401                                                               },
402                                                               Transform {
403                                                                 prefix_id: kPFix_EMPTY,
404                                                                 transform: kUppercaseFirst,
405                                                                 suffix_id: kPFix_COMMASP,
406                                                               },
407                                                               Transform {
408                                                                 prefix_id: kPFix_EMPTY,
409                                                                 transform: kOmitLast8,
410                                                                 suffix_id: kPFix_EMPTY,
411                                                               },
412                                                               Transform {
413                                                                 prefix_id: kPFix_EMPTY,
414                                                                 transform: kIdentity,
415                                                                 suffix_id: kPFix_SPatSP,
416                                                               },
417                                                               Transform {
418                                                                 prefix_id: kPFix_EMPTY,
419                                                                 transform: kIdentity,
420                                                                 suffix_id: kPFix_lySP,
421                                                               },
422                                                               Transform {
423                                                                 prefix_id: kPFix_SPtheSP,
424                                                                 transform: kIdentity,
425                                                                 suffix_id: kPFix_SPofSP,
426                                                               },
427                                                               Transform {
428                                                                 prefix_id: kPFix_EMPTY,
429                                                                 transform: kOmitLast5,
430                                                                 suffix_id: kPFix_EMPTY,
431                                                               },
432                                                               Transform {
433                                                                 prefix_id: kPFix_EMPTY,
434                                                                 transform: kOmitLast9,
435                                                                 suffix_id: kPFix_EMPTY,
436                                                               },
437                                                               Transform {
438                                                                 prefix_id: kPFix_SP,
439                                                                 transform: kUppercaseFirst,
440                                                                 suffix_id: kPFix_COMMASP,
441                                                               },
442                                                               Transform {
443                                                                 prefix_id: kPFix_EMPTY,
444                                                                 transform: kUppercaseFirst,
445                                                                 suffix_id: kPFix_DQUOT,
446                                                               },
447                                                               Transform {
448                                                                 prefix_id: kPFix_DOT,
449                                                                 transform: kIdentity,
450                                                                 suffix_id: kPFix_OPEN,
451                                                               },
452                                                               Transform {
453                                                                 prefix_id: kPFix_EMPTY,
454                                                                 transform: kUppercaseAll,
455                                                                 suffix_id: kPFix_SP,
456                                                               },
457                                                               Transform {
458                                                                 prefix_id: kPFix_EMPTY,
459                                                                 transform: kUppercaseFirst,
460                                                                 suffix_id: kPFix_DQUOTGT,
461                                                               },
462                                                               Transform {
463                                                                 prefix_id: kPFix_EMPTY,
464                                                                 transform: kIdentity,
465                                                                 suffix_id: kPFix_EQDQUOT,
466                                                               },
467                                                               Transform {
468                                                                 prefix_id: kPFix_SP,
469                                                                 transform: kIdentity,
470                                                                 suffix_id: kPFix_DOT,
471                                                               },
472                                                               Transform {
473                                                                 prefix_id: kPFix_DOTcomSLASH,
474                                                                 transform: kIdentity,
475                                                                 suffix_id: kPFix_EMPTY,
476                                                               },
477                                                               Transform {
478                                                                 prefix_id: kPFix_SPtheSP,
479                                                                 transform: kIdentity,
480                                                                 suffix_id: kPFix_SPofSPtheSP,
481                                                               },
482                                                               Transform {
483                                                                 prefix_id: kPFix_EMPTY,
484                                                                 transform: kUppercaseFirst,
485                                                                 suffix_id: kPFix_SQUOT,
486                                                               },
487                                                               Transform {
488                                                                 prefix_id: kPFix_EMPTY,
489                                                                 transform: kIdentity,
490                                                                 suffix_id: kPFix_DOTSPThisSP,
491                                                               },
492                                                               Transform {
493                                                                 prefix_id: kPFix_EMPTY,
494                                                                 transform: kIdentity,
495                                                                 suffix_id: kPFix_COMMA,
496                                                               },
497                                                               Transform {
498                                                                 prefix_id: kPFix_DOT,
499                                                                 transform: kIdentity,
500                                                                 suffix_id: kPFix_SP,
501                                                               },
502                                                               Transform {
503                                                                 prefix_id: kPFix_EMPTY,
504                                                                 transform: kUppercaseFirst,
505                                                                 suffix_id: kPFix_OPEN,
506                                                               },
507                                                               Transform {
508                                                                 prefix_id: kPFix_EMPTY,
509                                                                 transform: kUppercaseFirst,
510                                                                 suffix_id: kPFix_DOT,
511                                                               },
512                                                               Transform {
513                                                                 prefix_id: kPFix_EMPTY,
514                                                                 transform: kIdentity,
515                                                                 suffix_id: kPFix_SPnotSP,
516                                                               },
517                                                               Transform {
518                                                                 prefix_id: kPFix_SP,
519                                                                 transform: kIdentity,
520                                                                 suffix_id: kPFix_EQDQUOT,
521                                                               },
522                                                               Transform {
523                                                                 prefix_id: kPFix_EMPTY,
524                                                                 transform: kIdentity,
525                                                                 suffix_id: kPFix_erSP,
526                                                               },
527                                                               Transform {
528                                                                 prefix_id: kPFix_SP,
529                                                                 transform: kUppercaseAll,
530                                                                 suffix_id: kPFix_SP,
531                                                               },
532                                                               Transform {
533                                                                 prefix_id: kPFix_EMPTY,
534                                                                 transform: kIdentity,
535                                                                 suffix_id: kPFix_alSP,
536                                                               },
537                                                               Transform {
538                                                                 prefix_id: kPFix_SP,
539                                                                 transform: kUppercaseAll,
540                                                                 suffix_id: kPFix_EMPTY,
541                                                               },
542                                                               Transform {
543                                                                 prefix_id: kPFix_EMPTY,
544                                                                 transform: kIdentity,
545                                                                 suffix_id: kPFix_EQSQUOT,
546                                                               },
547                                                               Transform {
548                                                                 prefix_id: kPFix_EMPTY,
549                                                                 transform: kUppercaseAll,
550                                                                 suffix_id: kPFix_DQUOT,
551                                                               },
552                                                               Transform {
553                                                                 prefix_id: kPFix_EMPTY,
554                                                                 transform: kUppercaseFirst,
555                                                                 suffix_id: kPFix_DOTSP,
556                                                               },
557                                                               Transform {
558                                                                 prefix_id: kPFix_SP,
559                                                                 transform: kIdentity,
560                                                                 suffix_id: kPFix_OPEN,
561                                                               },
562                                                               Transform {
563                                                                 prefix_id: kPFix_EMPTY,
564                                                                 transform: kIdentity,
565                                                                 suffix_id: kPFix_fulSP,
566                                                               },
567                                                               Transform {
568                                                                 prefix_id: kPFix_SP,
569                                                                 transform: kUppercaseFirst,
570                                                                 suffix_id: kPFix_DOTSP,
571                                                               },
572                                                               Transform {
573                                                                 prefix_id: kPFix_EMPTY,
574                                                                 transform: kIdentity,
575                                                                 suffix_id: kPFix_iveSP,
576                                                               },
577                                                               Transform {
578                                                                 prefix_id: kPFix_EMPTY,
579                                                                 transform: kIdentity,
580                                                                 suffix_id: kPFix_lessSP,
581                                                               },
582                                                               Transform {
583                                                                 prefix_id: kPFix_EMPTY,
584                                                                 transform: kUppercaseAll,
585                                                                 suffix_id: kPFix_SQUOT,
586                                                               },
587                                                               Transform {
588                                                                 prefix_id: kPFix_EMPTY,
589                                                                 transform: kIdentity,
590                                                                 suffix_id: kPFix_estSP,
591                                                               },
592                                                               Transform {
593                                                                 prefix_id: kPFix_SP,
594                                                                 transform: kUppercaseFirst,
595                                                                 suffix_id: kPFix_DOT,
596                                                               },
597                                                               Transform {
598                                                                 prefix_id: kPFix_EMPTY,
599                                                                 transform: kUppercaseAll,
600                                                                 suffix_id: kPFix_DQUOTGT,
601                                                               },
602                                                               Transform {
603                                                                 prefix_id: kPFix_SP,
604                                                                 transform: kIdentity,
605                                                                 suffix_id: kPFix_EQSQUOT,
606                                                               },
607                                                               Transform {
608                                                                 prefix_id: kPFix_EMPTY,
609                                                                 transform: kUppercaseFirst,
610                                                                 suffix_id: kPFix_COMMA,
611                                                               },
612                                                               Transform {
613                                                                 prefix_id: kPFix_EMPTY,
614                                                                 transform: kIdentity,
615                                                                 suffix_id: kPFix_izeSP,
616                                                               },
617                                                               Transform {
618                                                                 prefix_id: kPFix_EMPTY,
619                                                                 transform: kUppercaseAll,
620                                                                 suffix_id: kPFix_DOT,
621                                                               },
622                                                               Transform {
623                                                                 prefix_id: kPFix_NBSP,
624                                                                 transform: kIdentity,
625                                                                 suffix_id: kPFix_EMPTY,
626                                                               },
627                                                               Transform {
628                                                                 prefix_id: kPFix_SP,
629                                                                 transform: kIdentity,
630                                                                 suffix_id: kPFix_COMMA,
631                                                               },
632                                                               Transform {
633                                                                 prefix_id: kPFix_EMPTY,
634                                                                 transform: kUppercaseFirst,
635                                                                 suffix_id: kPFix_EQDQUOT,
636                                                               },
637                                                               Transform {
638                                                                 prefix_id: kPFix_EMPTY,
639                                                                 transform: kUppercaseAll,
640                                                                 suffix_id: kPFix_EQDQUOT,
641                                                               },
642                                                               Transform {
643                                                                 prefix_id: kPFix_EMPTY,
644                                                                 transform: kIdentity,
645                                                                 suffix_id: kPFix_ousSP,
646                                                               },
647                                                               Transform {
648                                                                 prefix_id: kPFix_EMPTY,
649                                                                 transform: kUppercaseAll,
650                                                                 suffix_id: kPFix_COMMASP,
651                                                               },
652                                                               Transform {
653                                                                 prefix_id: kPFix_EMPTY,
654                                                                 transform: kUppercaseFirst,
655                                                                 suffix_id: kPFix_EQSQUOT,
656                                                               },
657                                                               Transform {
658                                                                 prefix_id: kPFix_SP,
659                                                                 transform: kUppercaseFirst,
660                                                                 suffix_id: kPFix_COMMA,
661                                                               },
662                                                               Transform {
663                                                                 prefix_id: kPFix_SP,
664                                                                 transform: kUppercaseAll,
665                                                                 suffix_id: kPFix_EQDQUOT,
666                                                               },
667                                                               Transform {
668                                                                 prefix_id: kPFix_SP,
669                                                                 transform: kUppercaseAll,
670                                                                 suffix_id: kPFix_COMMASP,
671                                                               },
672                                                               Transform {
673                                                                 prefix_id: kPFix_EMPTY,
674                                                                 transform: kUppercaseAll,
675                                                                 suffix_id: kPFix_COMMA,
676                                                               },
677                                                               Transform {
678                                                                 prefix_id: kPFix_EMPTY,
679                                                                 transform: kUppercaseAll,
680                                                                 suffix_id: kPFix_OPEN,
681                                                               },
682                                                               Transform {
683                                                                 prefix_id: kPFix_EMPTY,
684                                                                 transform: kUppercaseAll,
685                                                                 suffix_id: kPFix_DOTSP,
686                                                               },
687                                                               Transform {
688                                                                 prefix_id: kPFix_SP,
689                                                                 transform: kUppercaseAll,
690                                                                 suffix_id: kPFix_DOT,
691                                                               },
692                                                               Transform {
693                                                                 prefix_id: kPFix_EMPTY,
694                                                                 transform: kUppercaseAll,
695                                                                 suffix_id: kPFix_EQSQUOT,
696                                                               },
697                                                               Transform {
698                                                                 prefix_id: kPFix_SP,
699                                                                 transform: kUppercaseAll,
700                                                                 suffix_id: kPFix_DOTSP,
701                                                               },
702                                                               Transform {
703                                                                 prefix_id: kPFix_SP,
704                                                                 transform: kUppercaseFirst,
705                                                                 suffix_id: kPFix_EQDQUOT,
706                                                               },
707                                                               Transform {
708                                                                 prefix_id: kPFix_SP,
709                                                                 transform: kUppercaseAll,
710                                                                 suffix_id: kPFix_EQSQUOT,
711                                                               },
712                                                               Transform {
713                                                                 prefix_id: kPFix_SP,
714                                                                 transform: kUppercaseFirst,
715                                                                 suffix_id: kPFix_EQSQUOT,
716                                                               }];
717
718
719
720fn ToUpperCase(p: &mut [u8]) -> i32 {
721  if (fast!((p)[0]) < 0xc0) {
722    if (fast!((p)[0]) >= b'a' && fast!((p)[0]) <= b'z') {
723      fast_mut!((p)[0]) ^= 32;
724    }
725    return 1;
726  }
727  // An overly simplified uppercasing model for utf-8.
728  if (fast!((p)[0]) < 0xe0) {
729    fast_mut!((p)[1]) ^= 32;
730    return 2;
731  }
732  // An arbitrary transform for three byte characters.
733  fast_mut!((p)[2]) ^= 5;
734  3
735}
736
737pub fn TransformDictionaryWord(dst: &mut [u8],
738                               mut word: &[u8],
739                               mut len: i32,
740                               transform: i32)
741                               -> i32 {
742  let mut idx: i32 = 0;
743  {
744    let prefix =
745      &fast!((kPrefixSuffix)[fast_inner!((kTransforms)[transform as usize]).prefix_id as usize;]);
746    while (fast!((prefix)[idx as usize]) != 0) {
747      fast_mut!((dst)[idx as usize]) = fast!((prefix)[idx as usize]);
748      idx += 1;
749    }
750  }
751  {
752    let t = fast_ref!((kTransforms)[transform as usize]).transform;
753    let mut skip: i32 = if t < kOmitFirst1 {
754      0
755    } else {
756      t as i32 - (kOmitFirst1 - 1) as i32
757    };
758    let mut i: i32 = 0;
759    if (skip > len) {
760      skip = len;
761    }
762    word = fast!((word)[skip as usize;]);
763    len -= skip;
764    if (t <= kOmitLast9) {
765      len -= t as i32;
766    }
767    while (i < len) {
768      fast_mut!((dst)[idx as usize]) = fast!((word)[i as usize]);
769      idx += 1;
770      i += 1;
771    }
772    let uppercase = &mut fast_mut!((dst)[(idx - len) as usize ;]);
773    if (t == kUppercaseFirst) {
774      ToUpperCase(uppercase);
775    } else if (t == kUppercaseAll) {
776      let mut uppercase_offset: usize = 0;
777      while (len > 0) {
778        let step = ToUpperCase(&mut fast_mut!((uppercase)[uppercase_offset;]));
779        uppercase_offset += step as usize;
780        len -= step;
781      }
782    }
783  }
784  {
785    let suffix =
786      &fast!((kPrefixSuffix)[fast_inner!((kTransforms)[transform as usize]).suffix_id as usize ; ]);
787    let mut i: usize = 0;
788    while (fast!((suffix)[i as usize]) != 0) {
789      fast_mut!((dst)[idx as usize]) = fast!((suffix)[i]);
790      idx += 1;
791      i += 1;
792    }
793    idx
794  }
795}