1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */
2 
3 #include "ef_iso2022jp_parser.h"
4 
5 #include <stdio.h> /* NULL */
6 #include <pobl/bl_debug.h>
7 
8 #include "ef_iso2022_parser.h"
9 
10 /* --- static functions --- */
11 
iso2022jp_8_parser_init(ef_parser_t * parser)12 static void iso2022jp_8_parser_init(ef_parser_t *parser) {
13   ef_iso2022_parser_t *iso2022_parser;
14 
15   ef_parser_init(parser);
16 
17   iso2022_parser = (ef_iso2022_parser_t*)parser;
18 
19   iso2022_parser->g0 = US_ASCII;
20   iso2022_parser->g1 = JISX0201_KATA;
21   iso2022_parser->g2 = UNKNOWN_CS;
22   iso2022_parser->g3 = UNKNOWN_CS;
23 
24   iso2022_parser->gl = &iso2022_parser->g0;
25   iso2022_parser->gr = &iso2022_parser->g1;
26 
27   iso2022_parser->non_iso2022_cs = UNKNOWN_CS;
28 
29   iso2022_parser->is_single_shifted = 0;
30 }
31 
iso2022jp_7_parser_init(ef_parser_t * parser)32 static void iso2022jp_7_parser_init(ef_parser_t *parser) {
33   ef_iso2022_parser_t *iso2022_parser;
34 
35   ef_parser_init(parser);
36 
37   iso2022_parser = (ef_iso2022_parser_t*)parser;
38 
39   iso2022_parser->g0 = US_ASCII;
40   iso2022_parser->g1 = JISX0201_KATA;
41   iso2022_parser->g2 = UNKNOWN_CS;
42   iso2022_parser->g3 = UNKNOWN_CS;
43 
44   iso2022_parser->gl = &iso2022_parser->g0;
45 
46   iso2022_parser->is_single_shifted = 0;
47 }
48 
iso2022jp2_parser_init(ef_parser_t * parser)49 static void iso2022jp2_parser_init(ef_parser_t *parser) {
50   ef_iso2022_parser_t *iso2022_parser;
51 
52   ef_parser_init(parser);
53 
54   iso2022_parser = (ef_iso2022_parser_t*)parser;
55 
56   iso2022_parser->g0 = US_ASCII;
57   iso2022_parser->g1 = UNKNOWN_CS;
58   iso2022_parser->g2 = UNKNOWN_CS;
59   iso2022_parser->g3 = UNKNOWN_CS;
60 
61   iso2022_parser->gl = &iso2022_parser->g0;
62   iso2022_parser->gr = NULL;
63 
64   iso2022_parser->is_single_shifted = 0;
65 }
66 
iso2022jp3_parser_init(ef_parser_t * parser)67 static void iso2022jp3_parser_init(ef_parser_t *parser) {
68   ef_iso2022_parser_t *iso2022_parser;
69 
70   ef_parser_init(parser);
71 
72   iso2022_parser = (ef_iso2022_parser_t*)parser;
73 
74   iso2022_parser->g0 = US_ASCII;
75   iso2022_parser->g1 = UNKNOWN_CS;
76   iso2022_parser->g2 = UNKNOWN_CS;
77   iso2022_parser->g3 = UNKNOWN_CS;
78 
79   iso2022_parser->gl = &iso2022_parser->g0;
80 
81   iso2022_parser->is_single_shifted = 0;
82 }
83 
84 /* --- global functions --- */
85 
ef_iso2022jp_8_parser_new(void)86 ef_parser_t *ef_iso2022jp_8_parser_new(void) {
87   ef_iso2022_parser_t *iso2022_parser;
88 
89   if ((iso2022_parser = ef_iso2022_parser_new()) == NULL) {
90     return NULL;
91   }
92 
93   iso2022jp_8_parser_init((ef_parser_t*)iso2022_parser);
94 
95   /* overwrite */
96   iso2022_parser->parser.init = iso2022jp_8_parser_init;
97 
98   return (ef_parser_t*)iso2022_parser;
99 }
100 
ef_iso2022jp_7_parser_new(void)101 ef_parser_t *ef_iso2022jp_7_parser_new(void) {
102   ef_iso2022_parser_t *iso2022_parser;
103 
104   if ((iso2022_parser = ef_iso2022_parser_new()) == NULL) {
105     return NULL;
106   }
107 
108   iso2022jp_7_parser_init((ef_parser_t*)iso2022_parser);
109 
110   /* overwrite */
111   iso2022_parser->parser.init = iso2022jp_7_parser_init;
112 
113   return (ef_parser_t*)iso2022_parser;
114 }
115 
ef_iso2022jp2_parser_new(void)116 ef_parser_t *ef_iso2022jp2_parser_new(void) {
117   ef_iso2022_parser_t *iso2022_parser;
118 
119   if ((iso2022_parser = ef_iso2022_parser_new()) == NULL) {
120     return NULL;
121   }
122 
123   iso2022jp2_parser_init((ef_parser_t*)iso2022_parser);
124 
125   /* overwrite */
126   iso2022_parser->parser.init = iso2022jp2_parser_init;
127 
128   return (ef_parser_t*)iso2022_parser;
129 }
130 
ef_iso2022jp3_parser_new(void)131 ef_parser_t *ef_iso2022jp3_parser_new(void) {
132   ef_iso2022_parser_t *iso2022_parser;
133 
134   if ((iso2022_parser = ef_iso2022_parser_new()) == NULL) {
135     return NULL;
136   }
137 
138   iso2022jp3_parser_init((ef_parser_t*)iso2022_parser);
139 
140   /* overwrite */
141   iso2022_parser->parser.init = iso2022jp3_parser_init;
142 
143   return (ef_parser_t*)iso2022_parser;
144 }
145