1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */ 2 3 #include "ef_euckr_parser.h" 4 5 #include <stdio.h> /* NULL */ 6 #include <pobl/bl_debug.h> 7 8 #include "ef_iso2022_parser.h" 9 10 #if 0 11 #define __DEBUG 12 #endif 13 14 /* --- static functions --- */ 15 uhc_parser_next_char(ef_parser_t * parser,ef_char_t * ch)16static int uhc_parser_next_char(ef_parser_t *parser, ef_char_t *ch) { 17 if (parser->is_eos) { 18 return 0; 19 } 20 21 ef_parser_mark(parser); 22 23 if (/* 0x00 <= *parser->str && */ *parser->str <= 0x80) { 24 ch->ch[0] = *parser->str; 25 ch->cs = US_ASCII; 26 ch->size = 1; 27 } else { 28 ch->ch[0] = *parser->str; 29 30 if (ef_parser_increment(parser) == 0) { 31 ef_parser_reset(parser); 32 33 return 0; 34 } 35 36 ch->ch[1] = *parser->str; 37 ch->size = 2; 38 ch->cs = UHC; 39 } 40 41 ch->property = 0; 42 43 ef_parser_increment(parser); 44 45 return 1; 46 } 47 euckr_parser_init_intern(ef_parser_t * parser,ef_charset_t g1_cs)48static void euckr_parser_init_intern(ef_parser_t *parser, ef_charset_t g1_cs) { 49 ef_iso2022_parser_t *iso2022_parser; 50 51 ef_parser_init(parser); 52 53 iso2022_parser = (ef_iso2022_parser_t*)parser; 54 55 iso2022_parser->g0 = US_ASCII; 56 iso2022_parser->g1 = g1_cs; 57 iso2022_parser->g2 = UNKNOWN_CS; 58 iso2022_parser->g3 = UNKNOWN_CS; 59 60 iso2022_parser->gl = &iso2022_parser->g0; 61 iso2022_parser->gr = &iso2022_parser->g1; 62 63 iso2022_parser->non_iso2022_cs = UNKNOWN_CS; 64 65 iso2022_parser->is_single_shifted = 0; 66 } 67 euckr_parser_init(ef_parser_t * parser)68static void euckr_parser_init(ef_parser_t *parser) { 69 euckr_parser_init_intern(parser, KSC5601_1987); 70 } 71 uhc_parser_init(ef_parser_t * parser)72static void uhc_parser_init(ef_parser_t *parser) { euckr_parser_init_intern(parser, UHC); } 73 74 /* --- global functions --- */ 75 ef_euckr_parser_new(void)76ef_parser_t *ef_euckr_parser_new(void) { 77 ef_iso2022_parser_t *iso2022_parser; 78 79 if ((iso2022_parser = ef_iso2022_parser_new()) == NULL) { 80 return NULL; 81 } 82 83 euckr_parser_init((ef_parser_t*)iso2022_parser); 84 85 /* override */ 86 iso2022_parser->parser.init = euckr_parser_init; 87 88 return (ef_parser_t*)iso2022_parser; 89 } 90 ef_uhc_parser_new(void)91ef_parser_t *ef_uhc_parser_new(void) { 92 ef_iso2022_parser_t *iso2022_parser; 93 94 if ((iso2022_parser = ef_iso2022_parser_new()) == NULL) { 95 return NULL; 96 } 97 98 uhc_parser_init((ef_parser_t*)iso2022_parser); 99 100 /* override */ 101 iso2022_parser->parser.init = uhc_parser_init; 102 iso2022_parser->parser.next_char = uhc_parser_next_char; 103 104 return (ef_parser_t*)iso2022_parser; 105 } 106