From: Kenichi Handa Date: Fri, 6 Mar 2009 07:52:40 +0000 (+0000) Subject: Include "composite.h". X-Git-Tag: emacs-pretest-23.0.92~324 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=825d08758787822e136ea21224f684c8620ff1dd;p=emacs.git Include "composite.h". (enum compisition_state): New enum. (struct compisition_status): New struct. (struct iso_2022_spec): New member cmp_status. (struct emacs_mule_spec): New struct. (struct coding_system): New members ctext_extended_segment_len and embedded_utf_8. Change the union member spec.emacs_mule_full_support to spec.emacs_mule. --- diff --git a/src/ChangeLog b/src/ChangeLog index 876b8887876..77f6e0278d2 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,54 @@ +2009-03-06 Kenichi Handa + + These changes are to detect incorrect composition sequence without + looking ahead the source. + + * coding.h: Include "composite.h". + (enum compisition_state): New enum. + (struct compisition_status): New struct. + (struct iso_2022_spec): New member cmp_status. + (struct emacs_mule_spec): New struct. + (struct coding_system): New members ctext_extended_segment_len and + embedded_utf_8. Change the union member + spec.emacs_mule_full_support to spec.emacs_mule. + + * coding.c (CODING_ISO_CMP_STATUS): New macro. + (CODING_ISO_EXTSEGMENT_LEN, CODING_ISO_EMBEDDED_UTF_8): New macros. + (MAX_ANNOTATION_LENGTH): Defined to 5. + (ADD_COMPOSITION_DATA): New arg nbytes. + (emacs_mule_char): New arg cmp_status. + (DECODE_EMACS_MULE_COMPOSITION_CHAR): Delete it. + (DECODE_EMACS_MULE_COMPOSITION_RULE_20): New arg c. + (DECODE_EMACS_MULE_COMPOSITION_RULE_21): New arg c. + (DECODE_EMACS_MULE_21_COMPOSITION): Delete the arg c. + (DECODE_EMACS_MULE_20_RELATIVE_COMPOSITION): Likewise. + (DECODE_EMACS_MULE_20_RULEBASE_COMPOSITION): Likewise. + (DECODE_EMACS_MULE_COMPOSITION_START): New macro. + (EMACS_MULE_COMPOSITION_END): New macro. + (emacs_mule_finish_composition): New function. + (EMACS_MULE_MAYBE_FINISH_COMPOSITION): New macro. + (decode_coding_emacs_mule): Avoid long looking ahead while + handling composition. + (DECODE_COMPOSITION_RULE): Argument changed to rule and nbytes. + (ENCODE_COMPOSITION_RULE): New macro. + (finish_composition): New function. + (MAYBE_FINISH_COMPOSITION): Call finish_composition. + (DECODE_COMPOSITION_START): New implementation. + (DECODE_COMPOSITION_END): Likewise. + (STORE_COMPOSITION_RULE): New macro. + (decode_coding_iso_2022): Avoid long looking ahead while handling + composition, CTEXT extended segment, and embedded UTF-8. + (setup_coding_system): For a coding of type iso-2022, reset + CODING_ISO_EXTSEGMENT_LEN (coding) and + CODING_ISO_EMBEDDED_UTF_8 (coding). + (get_translation): Delete arguments last_block, from_nchars, + to_nchars. Callers changed. + (produce_chars): Don't modify charbuf. Adjusted for the change of + get_translation. + (produce_composition): Adjusted for the new annotation sequence. + (handle_composition_annotation): Likewise. + (consume_chars): Adjusted for the change of get_translation. + 2009-03-05 Adrian Robert * nsterm.m (ns_select): Shortcircuit if reentrant call. diff --git a/src/coding.h b/src/coding.h index 3daf4a725f2..153ec952093 100644 --- a/src/coding.h +++ b/src/coding.h @@ -306,6 +306,37 @@ enum coding_result_code ASCII characters (usually '?') for unsupported characters. */ #define CODING_MODE_SAFE_ENCODING 0x20 + /* For handling composition sequence. */ +#include "composite.h" + +enum composition_state + { + COMPOSING_NO, + COMPOSING_CHAR, + COMPOSING_RULE, + COMPOSING_COMPONENT_CHAR, + COMPOSING_COMPONENT_RULE + }; + +/* Structure for the current composition status. */ +struct composition_status +{ + enum composition_state state; + enum composition_method method; + int old_form; /* 0:pre-21 form, 1:post-21 form */ + int length; /* number of elements produced in charbuf */ + int nchars; /* number of characters composed */ + int ncomps; /* number of composition components */ + /* Maximum carryover is for the case of COMPOSITION_WITH_RULE_ALTCHARS. + See the comment in coding.c. */ + int carryover[4 /* annotation header */ + + MAX_COMPOSITION_COMPONENTS * 3 - 2 /* ALTs and RULEs */ + + 2 /* intermediate -1 -1 */ + + MAX_COMPOSITION_COMPONENTS /* CHARs */ + ]; +}; + + /* Structure of the field `spec.iso_2022' in the structure `coding_system'. */ struct iso_2022_spec @@ -327,6 +358,21 @@ struct iso_2022_spec /* Set to 1 temporarily only when processing at beginning of line. */ int bol; + + /* If positive, we are now scanning CTEXT extended segment. */ + int ctext_extended_segment_len; + + /* If nonzero, we are now scanning embedded UTF-8 sequence. */ + int embedded_utf_8; + + /* The current composition. */ + struct composition_status cmp_status; +}; + +struct emacs_mule_spec +{ + int full_support; + struct composition_status cmp_status; }; struct ccl_spec; @@ -387,7 +433,7 @@ struct coding_system struct ccl_spec *ccl; /* Defined in ccl.h. */ struct utf_16_spec utf_16; enum utf_bom_type utf_8_bom; - int emacs_mule_full_support; + struct emacs_mule_spec emacs_mule; } spec; int max_charset_id;