Line | Count | Source |
1 | | |
2 | | #include "wc.h" |
3 | | #include "wtf.h" |
4 | | |
5 | | Str |
6 | | wc_conv_from_priv1(Str is, wc_ces ces) |
7 | 483 | { |
8 | 483 | Str os; |
9 | 483 | wc_uchar *sp = (wc_uchar *)is->ptr; |
10 | 483 | wc_uchar *ep = sp + is->length; |
11 | 483 | wc_uchar *p; |
12 | 483 | wc_ccs ccs = WcCesInfo[WC_CCS_INDEX(ces)].gset[1].ccs; |
13 | | |
14 | 818 | for (p = sp; p < ep && *p < 0x80; p++) |
15 | 335 | ; |
16 | 483 | if (p == ep) |
17 | 86 | return is; |
18 | 397 | os = Strnew_size(is->length); |
19 | 397 | if (p > sp) |
20 | 37 | Strcat_charp_n(os, is->ptr, (int)(p - sp)); |
21 | | |
22 | 8.61M | for (; p < ep; p++) { |
23 | 8.61M | if (*p & 0x80) |
24 | 7.87M | wtf_push(os, ccs, (wc_uint32)*p); |
25 | 735k | else |
26 | 735k | Strcat_char(os, (char)*p); |
27 | 8.61M | } |
28 | 397 | return os; |
29 | 483 | } |
30 | | |
31 | | Str |
32 | | wc_char_conv_from_priv1(wc_uchar c, wc_status *st) |
33 | 0 | { |
34 | 0 | Str os = Strnew_size(1); |
35 | |
|
36 | 0 | if (c & 0x80) |
37 | 0 | wtf_push(os, st->ces_info->gset[1].ccs, (wc_uint32)c); |
38 | 0 | else |
39 | 0 | Strcat_char(os, (char)c); |
40 | 0 | return os; |
41 | 0 | } |
42 | | |
43 | | Str |
44 | | wc_conv_from_ascii(Str is, wc_ces ces) |
45 | 1.26k | { |
46 | 1.26k | Str os; |
47 | 1.26k | wc_uchar *sp = (wc_uchar *)is->ptr; |
48 | 1.26k | wc_uchar *ep = sp + is->length; |
49 | 1.26k | wc_uchar *p; |
50 | | |
51 | 5.97k | for (p = sp; p < ep && *p < 0x80; p++) |
52 | 4.70k | ; |
53 | 1.26k | if (p == ep) |
54 | 895 | return is; |
55 | 368 | os = Strnew_size(is->length); |
56 | 368 | if (p > sp) |
57 | 94 | Strcat_charp_n(os, is->ptr, (int)(p - sp)); |
58 | | |
59 | 1.06M | for (; p < ep; p++) { |
60 | 1.06M | if (*p & 0x80) |
61 | 155k | wtf_push_unknown(os, p, 1); |
62 | 907k | else |
63 | 907k | Strcat_char(os, (char)*p); |
64 | 1.06M | } |
65 | 368 | return os; |
66 | 1.26k | } |
67 | | |
68 | | void |
69 | | wc_push_to_raw(Str os, wc_wchar_t cc, wc_status *st) |
70 | 1.07M | { |
71 | | |
72 | 1.07M | switch (cc.ccs) { |
73 | 203 | case WC_CCS_US_ASCII: |
74 | 1.06M | case WC_CCS_RAW: |
75 | 1.06M | Strcat_char(os, (char)cc.code); |
76 | 1.07M | } |
77 | 1.07M | return; |
78 | 1.07M | } |