1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */
2 
3 #include "ef_iso8859_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 
iso8859_parser_init(ef_parser_t * parser,ef_charset_t gr_cs)12 static void iso8859_parser_init(ef_parser_t *parser, ef_charset_t gr_cs) {
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 = gr_cs;
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 
iso8859_1_parser_init(ef_parser_t * parser)32 static void iso8859_1_parser_init(ef_parser_t *parser) {
33   iso8859_parser_init(parser, ISO8859_1_R);
34 }
35 
iso8859_2_parser_init(ef_parser_t * parser)36 static void iso8859_2_parser_init(ef_parser_t *parser) {
37   iso8859_parser_init(parser, ISO8859_2_R);
38 }
39 
iso8859_3_parser_init(ef_parser_t * parser)40 static void iso8859_3_parser_init(ef_parser_t *parser) {
41   iso8859_parser_init(parser, ISO8859_3_R);
42 }
43 
iso8859_4_parser_init(ef_parser_t * parser)44 static void iso8859_4_parser_init(ef_parser_t *parser) {
45   iso8859_parser_init(parser, ISO8859_4_R);
46 }
47 
iso8859_5_parser_init(ef_parser_t * parser)48 static void iso8859_5_parser_init(ef_parser_t *parser) {
49   iso8859_parser_init(parser, ISO8859_5_R);
50 }
51 
iso8859_6_parser_init(ef_parser_t * parser)52 static void iso8859_6_parser_init(ef_parser_t *parser) {
53   iso8859_parser_init(parser, ISO8859_6_R);
54 }
55 
iso8859_7_parser_init(ef_parser_t * parser)56 static void iso8859_7_parser_init(ef_parser_t *parser) {
57   iso8859_parser_init(parser, ISO8859_7_R);
58 }
59 
iso8859_8_parser_init(ef_parser_t * parser)60 static void iso8859_8_parser_init(ef_parser_t *parser) {
61   iso8859_parser_init(parser, ISO8859_8_R);
62 }
63 
iso8859_9_parser_init(ef_parser_t * parser)64 static void iso8859_9_parser_init(ef_parser_t *parser) {
65   iso8859_parser_init(parser, ISO8859_9_R);
66 }
67 
iso8859_10_parser_init(ef_parser_t * parser)68 static void iso8859_10_parser_init(ef_parser_t *parser) {
69   iso8859_parser_init(parser, ISO8859_10_R);
70 }
71 
tis620_2533_parser_init(ef_parser_t * parser)72 static void tis620_2533_parser_init(ef_parser_t *parser) {
73   iso8859_parser_init(parser, TIS620_2533);
74 }
75 
iso8859_13_parser_init(ef_parser_t * parser)76 static void iso8859_13_parser_init(ef_parser_t *parser) {
77   iso8859_parser_init(parser, ISO8859_13_R);
78 }
79 
iso8859_14_parser_init(ef_parser_t * parser)80 static void iso8859_14_parser_init(ef_parser_t *parser) {
81   iso8859_parser_init(parser, ISO8859_14_R);
82 }
83 
iso8859_15_parser_init(ef_parser_t * parser)84 static void iso8859_15_parser_init(ef_parser_t *parser) {
85   iso8859_parser_init(parser, ISO8859_15_R);
86 }
87 
iso8859_16_parser_init(ef_parser_t * parser)88 static void iso8859_16_parser_init(ef_parser_t *parser) {
89   iso8859_parser_init(parser, ISO8859_16_R);
90 }
91 
tcvn5712_3_1993_parser_init(ef_parser_t * parser)92 static void tcvn5712_3_1993_parser_init(ef_parser_t *parser) {
93   iso8859_parser_init(parser, TCVN5712_3_1993);
94 }
95 
iso8859_parser_new(void (* init)(struct ef_parser *))96 static ef_parser_t *iso8859_parser_new(void (*init)(struct ef_parser *)) {
97   ef_iso2022_parser_t *iso2022_parser;
98 
99   if ((iso2022_parser = ef_iso2022_parser_new()) == NULL) {
100     return NULL;
101   }
102 
103   (*init)((ef_parser_t *)iso2022_parser);
104 
105   /* overwrite */
106   iso2022_parser->parser.init = init;
107 
108   return (ef_parser_t *)iso2022_parser;
109 }
110 
111 /* --- global functions --- */
112 
ef_iso8859_1_parser_new(void)113 ef_parser_t *ef_iso8859_1_parser_new(void) { return iso8859_parser_new(iso8859_1_parser_init); }
114 
ef_iso8859_2_parser_new(void)115 ef_parser_t *ef_iso8859_2_parser_new(void) { return iso8859_parser_new(iso8859_2_parser_init); }
116 
ef_iso8859_3_parser_new(void)117 ef_parser_t *ef_iso8859_3_parser_new(void) { return iso8859_parser_new(iso8859_3_parser_init); }
118 
ef_iso8859_4_parser_new(void)119 ef_parser_t *ef_iso8859_4_parser_new(void) { return iso8859_parser_new(iso8859_4_parser_init); }
120 
ef_iso8859_5_parser_new(void)121 ef_parser_t *ef_iso8859_5_parser_new(void) { return iso8859_parser_new(iso8859_5_parser_init); }
122 
ef_iso8859_6_parser_new(void)123 ef_parser_t *ef_iso8859_6_parser_new(void) { return iso8859_parser_new(iso8859_6_parser_init); }
124 
ef_iso8859_7_parser_new(void)125 ef_parser_t *ef_iso8859_7_parser_new(void) { return iso8859_parser_new(iso8859_7_parser_init); }
126 
ef_iso8859_8_parser_new(void)127 ef_parser_t *ef_iso8859_8_parser_new(void) { return iso8859_parser_new(iso8859_8_parser_init); }
128 
ef_iso8859_9_parser_new(void)129 ef_parser_t *ef_iso8859_9_parser_new(void) { return iso8859_parser_new(iso8859_9_parser_init); }
130 
ef_iso8859_10_parser_new(void)131 ef_parser_t *ef_iso8859_10_parser_new(void) { return iso8859_parser_new(iso8859_10_parser_init); }
132 
ef_tis620_2533_parser_new(void)133 ef_parser_t *ef_tis620_2533_parser_new(void) {
134   return iso8859_parser_new(tis620_2533_parser_init);
135 }
136 
ef_iso8859_13_parser_new(void)137 ef_parser_t *ef_iso8859_13_parser_new(void) { return iso8859_parser_new(iso8859_13_parser_init); }
138 
ef_iso8859_14_parser_new(void)139 ef_parser_t *ef_iso8859_14_parser_new(void) { return iso8859_parser_new(iso8859_14_parser_init); }
140 
ef_iso8859_15_parser_new(void)141 ef_parser_t *ef_iso8859_15_parser_new(void) { return iso8859_parser_new(iso8859_15_parser_init); }
142 
ef_iso8859_16_parser_new(void)143 ef_parser_t *ef_iso8859_16_parser_new(void) { return iso8859_parser_new(iso8859_16_parser_init); }
144 
ef_tcvn5712_3_1993_parser_new(void)145 ef_parser_t *ef_tcvn5712_3_1993_parser_new(void) {
146   return iso8859_parser_new(tcvn5712_3_1993_parser_init);
147 }
148