]> git.eshelyaron.com Git - emacs.git/commitdiff
Include "composite.h".
authorKenichi Handa <handa@m17n.org>
Fri, 6 Mar 2009 07:52:40 +0000 (07:52 +0000)
committerKenichi Handa <handa@m17n.org>
Fri, 6 Mar 2009 07:52:40 +0000 (07:52 +0000)
(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.

src/ChangeLog
src/coding.h

index 876b888787694d60dfcf85e8ac12e90c72bd47ee..77f6e0278d268357019fe61bc6b4b30b6d435161 100644 (file)
@@ -1,3 +1,54 @@
+2009-03-06  Kenichi Handa  <handa@m17n.org>
+
+       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  <Adrian.B.Robert@gmail.com>
 
        * nsterm.m (ns_select): Shortcircuit if reentrant call.
index 3daf4a725f2c0ea47c5c9ec3259bbe87dfeb456f..153ec95209392bfa139ef31fc7823371c874eabd 100644 (file)
@@ -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;