*** Library/Implementation/SGML.c.orig Fri Sep 3 02:03:14 1993 --- Library/Implementation/SGML.c Thu Sep 23 12:13:30 1993 *************** *** 57,62 **** --- 57,65 ---- enum sgml_state { S_text, S_litteral, S_tag, S_tag_gap, S_attr, S_attr_gap, S_equals, S_value, S_ero, S_cro, + #ifdef ISO_2022_JP + S_esc, S_doller, S_paren, S_nonascii_text, + #endif S_squoted, S_dquoted, S_end, S_entity, S_junk_tag} state; #ifdef CALLERDATA void * callerData; *************** *** 330,335 **** --- 333,345 ---- switch(context->state) { case S_text: + #ifdef ISO_2022_JP + if (c=='\033') { + context->state = S_esc; + PUTC(c); + break; + } + #endif /* ISO_2022_JP */ if (c=='&' && (!context->element_stack || ( context->element_stack->tag && ( context->element_stack->tag->contents == SGML_MIXED *************** *** 348,353 **** --- 358,400 ---- } else PUTC(c); break; + #ifdef ISO_2022_JP + case S_esc: + if (c=='$') { + context->state = S_doller; + } else if (c=='(') { + context->state = S_paren; + } else { + context->state = S_text; + } + PUTC(c); + break; + case S_doller: + if (c=='@' || c=='B') { + context->state = S_nonascii_text; + } else { + context->state = S_text; + } + PUTC(c); + break; + case S_paren: + if (c=='B' || c=='J') { + context->state = S_text; + } else { + context->state = S_text; + } + PUTC(c); + break; + case S_nonascii_text: + if (c=='\033') { + context->state = S_esc; + PUTC(c); + } else { + PUTC(c); + } + break; + #endif /* ISO_2022_JP */ + /* In litteral mode, waits only for specific end tag! ** Only foir compatibility with old servers. */