+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.
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
/* 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;
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;