comparison src/unicode.c @ 4952:19a72041c5ed

Mule-izing, various fixes related to char * arguments -------------------- ChangeLog entries follow: -------------------- modules/ChangeLog addition: 2010-01-26 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c: * postgresql/postgresql.c (CHECK_LIVE_CONNECTION): * postgresql/postgresql.c (print_pgresult): * postgresql/postgresql.c (Fpq_conn_defaults): * postgresql/postgresql.c (Fpq_connectdb): * postgresql/postgresql.c (Fpq_connect_start): * postgresql/postgresql.c (Fpq_result_status): * postgresql/postgresql.c (Fpq_res_status): Mule-ize large parts of it. 2010-01-26 Ben Wing <ben@xemacs.org> * ldap/eldap.c (print_ldap): * ldap/eldap.c (allocate_ldap): Use write_ascstring(). src/ChangeLog addition: 2010-01-26 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (build_ascstring): * alloc.c (build_msg_cistring): * alloc.c (staticpro_1): * alloc.c (staticpro_name): * alloc.c (staticpro_nodump_1): * alloc.c (staticpro_nodump_name): * alloc.c (unstaticpro_nodump_1): * alloc.c (mcpro_1): * alloc.c (mcpro_name): * alloc.c (object_memory_usage_stats): * alloc.c (common_init_alloc_early): * alloc.c (init_alloc_once_early): * buffer.c (print_buffer): * buffer.c (vars_of_buffer): * buffer.c (common_init_complex_vars_of_buffer): * buffer.c (init_initial_directory): * bytecode.c (invalid_byte_code): * bytecode.c (print_compiled_function): * bytecode.c (mark_compiled_function): * chartab.c (print_table_entry): * chartab.c (print_char_table): * config.h.in: * console-gtk.c: * console-gtk.c (gtk_device_to_console_connection): * console-gtk.c (gtk_semi_canonicalize_console_connection): * console-gtk.c (gtk_canonicalize_console_connection): * console-gtk.c (gtk_semi_canonicalize_device_connection): * console-gtk.c (gtk_canonicalize_device_connection): * console-stream.c (stream_init_frame_1): * console-stream.c (vars_of_console_stream): * console-stream.c (init_console_stream): * console-x.c (x_semi_canonicalize_console_connection): * console-x.c (x_semi_canonicalize_device_connection): * console-x.c (x_canonicalize_device_connection): * console-x.h: * data.c (eq_with_ebola_notice): * data.c (Fsubr_interactive): * data.c (Fnumber_to_string): * data.c (digit_to_number): * device-gtk.c (gtk_init_device): * device-msw.c (print_devmode): * device-x.c (x_event_name): * dialog-msw.c (handle_directory_dialog_box): * dialog-msw.c (handle_file_dialog_box): * dialog-msw.c (vars_of_dialog_mswindows): * doc.c (weird_doc): * doc.c (Fsnarf_documentation): * doc.c (vars_of_doc): * dumper.c (pdump): * dynarr.c: * dynarr.c (Dynarr_realloc): * editfns.c (Fuser_real_login_name): * editfns.c (get_home_directory): * elhash.c (print_hash_table_data): * elhash.c (print_hash_table): * emacs.c (main_1): * emacs.c (vars_of_emacs): * emodules.c: * emodules.c (_emodules_list): * emodules.c (Fload_module): * emodules.c (Funload_module): * emodules.c (Flist_modules): * emodules.c (find_make_module): * emodules.c (attempt_module_delete): * emodules.c (emodules_load): * emodules.c (emodules_doc_subr): * emodules.c (emodules_doc_sym): * emodules.c (syms_of_module): * emodules.c (vars_of_module): * emodules.h: * eval.c (print_subr): * eval.c (signal_call_debugger): * eval.c (build_error_data): * eval.c (signal_error): * eval.c (maybe_signal_error): * eval.c (signal_continuable_error): * eval.c (maybe_signal_continuable_error): * eval.c (signal_error_2): * eval.c (maybe_signal_error_2): * eval.c (signal_continuable_error_2): * eval.c (maybe_signal_continuable_error_2): * eval.c (signal_ferror): * eval.c (maybe_signal_ferror): * eval.c (signal_continuable_ferror): * eval.c (maybe_signal_continuable_ferror): * eval.c (signal_ferror_with_frob): * eval.c (maybe_signal_ferror_with_frob): * eval.c (signal_continuable_ferror_with_frob): * eval.c (maybe_signal_continuable_ferror_with_frob): * eval.c (syntax_error): * eval.c (syntax_error_2): * eval.c (maybe_syntax_error): * eval.c (sferror): * eval.c (sferror_2): * eval.c (maybe_sferror): * eval.c (invalid_argument): * eval.c (invalid_argument_2): * eval.c (maybe_invalid_argument): * eval.c (invalid_constant): * eval.c (invalid_constant_2): * eval.c (maybe_invalid_constant): * eval.c (invalid_operation): * eval.c (invalid_operation_2): * eval.c (maybe_invalid_operation): * eval.c (invalid_change): * eval.c (invalid_change_2): * eval.c (maybe_invalid_change): * eval.c (invalid_state): * eval.c (invalid_state_2): * eval.c (maybe_invalid_state): * eval.c (wtaerror): * eval.c (stack_overflow): * eval.c (out_of_memory): * eval.c (print_multiple_value): * eval.c (issue_call_trapping_problems_warning): * eval.c (backtrace_specials): * eval.c (backtrace_unevalled_args): * eval.c (Fbacktrace): * eval.c (warn_when_safe): * event-Xt.c (modwarn): * event-Xt.c (modbarf): * event-Xt.c (check_modifier): * event-Xt.c (store_modifier): * event-Xt.c (emacs_Xt_format_magic_event): * event-Xt.c (describe_event): * event-gtk.c (dragndrop_data_received): * event-gtk.c (store_modifier): * event-gtk.c (gtk_reset_modifier_mapping): * event-msw.c (dde_eval_string): * event-msw.c (Fdde_alloc_advise_item): * event-msw.c (mswindows_dde_callback): * event-msw.c (FROB): * event-msw.c (emacs_mswindows_format_magic_event): * event-stream.c (external_debugging_print_event): * event-stream.c (execute_help_form): * event-stream.c (vars_of_event_stream): * events.c (print_event_1): * events.c (print_event): * events.c (event_equal): * extents.c (print_extent_1): * extents.c (print_extent): * extents.c (vars_of_extents): * faces.c (print_face): * faces.c (complex_vars_of_faces): * file-coding.c: * file-coding.c (print_coding_system): * file-coding.c (print_coding_system_in_print_method): * file-coding.c (default_query_method): * file-coding.c (find_coding_system): * file-coding.c (make_coding_system_1): * file-coding.c (chain_print): * file-coding.c (undecided_print): * file-coding.c (gzip_print): * file-coding.c (vars_of_file_coding): * file-coding.c (complex_vars_of_file_coding): * fileio.c: * fileio.c (report_file_type_error): * fileio.c (report_error_with_errno): * fileio.c (report_file_error): * fileio.c (barf_or_query_if_file_exists): * fileio.c (vars_of_fileio): * floatfns.c (matherr): * fns.c (print_bit_vector): * fns.c (Fmapconcat): * fns.c (add_suffix_to_symbol): * fns.c (add_prefix_to_symbol): * frame-gtk.c: * frame-gtk.c (Fgtk_window_id): * frame-x.c (def): * frame-x.c (x_cde_transfer_callback): * frame.c: * frame.c (Fmake_frame): * gc.c (show_gc_cursor_and_message): * gc.c (vars_of_gc): * glyphs-eimage.c (png_instantiate): * glyphs-eimage.c (tiff_instantiate): * glyphs-gtk.c (gtk_print_image_instance): * glyphs-msw.c (mswindows_print_image_instance): * glyphs-x.c (x_print_image_instance): * glyphs-x.c (update_widget_face): * glyphs.c (make_string_from_file): * glyphs.c (print_image_instance): * glyphs.c (signal_image_error): * glyphs.c (signal_image_error_2): * glyphs.c (signal_double_image_error): * glyphs.c (signal_double_image_error_2): * glyphs.c (xbm_mask_file_munging): * glyphs.c (pixmap_to_lisp_data): * glyphs.h: * gui.c (gui_item_display_flush_left): * hpplay.c (player_error_internal): * hpplay.c (myHandler): * intl-win32.c: * intl-win32.c (langcode_to_lang): * intl-win32.c (sublangcode_to_lang): * intl-win32.c (Fmswindows_get_locale_info): * intl-win32.c (lcid_to_locale_mule_or_no): * intl-win32.c (mswindows_multibyte_to_unicode_print): * intl-win32.c (complex_vars_of_intl_win32): * keymap.c: * keymap.c (print_keymap): * keymap.c (ensure_meta_prefix_char_keymapp): * keymap.c (Fkey_description): * keymap.c (Ftext_char_description): * lisp.h: * lisp.h (struct): * lisp.h (DECLARE_INLINE_HEADER): * lread.c (Fload_internal): * lread.c (locate_file): * lread.c (read_escape): * lread.c (read_raw_string): * lread.c (read1): * lread.c (read_list): * lread.c (read_compiled_function): * lread.c (init_lread): * lrecord.h: * marker.c (print_marker): * marker.c (marker_equal): * menubar-msw.c (displayable_menu_item): * menubar-x.c (command_builder_operate_menu_accelerator): * menubar.c (vars_of_menubar): * minibuf.c (reinit_complex_vars_of_minibuf): * minibuf.c (complex_vars_of_minibuf): * mule-charset.c (Fmake_charset): * mule-charset.c (complex_vars_of_mule_charset): * mule-coding.c (iso2022_print): * mule-coding.c (fixed_width_query): * number.c (bignum_print): * number.c (ratio_print): * number.c (bigfloat_print): * number.c (bigfloat_finalize): * objects-msw.c: * objects-msw.c (mswindows_color_to_string): * objects-msw.c (mswindows_color_list): * objects-tty.c: * objects-tty.c (tty_font_list): * objects-tty.c (tty_find_charset_font): * objects-xlike-inc.c (xft_find_charset_font): * objects-xlike-inc.c (endif): * print.c: * print.c (write_istring): * print.c (write_ascstring): * print.c (Fterpri): * print.c (Fprint): * print.c (print_error_message): * print.c (print_vector_internal): * print.c (print_cons): * print.c (print_string): * print.c (printing_unreadable_object): * print.c (print_internal): * print.c (print_float): * print.c (print_symbol): * process-nt.c (mswindows_report_winsock_error): * process-nt.c (nt_canonicalize_host_name): * process-unix.c (unix_canonicalize_host_name): * process.c (print_process): * process.c (report_process_error): * process.c (report_network_error): * process.c (make_process_internal): * process.c (Fstart_process_internal): * process.c (status_message): * process.c (putenv_internal): * process.c (vars_of_process): * process.h: * profile.c (vars_of_profile): * rangetab.c (print_range_table): * realpath.c (vars_of_realpath): * redisplay.c (vars_of_redisplay): * search.c (wordify): * search.c (Freplace_match): * sheap.c (sheap_adjust_h): * sound.c (report_sound_error): * sound.c (Fplay_sound_file): * specifier.c (print_specifier): * symbols.c (Fsubr_name): * symbols.c (do_symval_forwarding): * symbols.c (set_default_buffer_slot_variable): * symbols.c (set_default_console_slot_variable): * symbols.c (store_symval_forwarding): * symbols.c (default_value): * symbols.c (defsymbol_massage_name_1): * symbols.c (defsymbol_massage_name_nodump): * symbols.c (defsymbol_massage_name): * symbols.c (defsymbol_massage_multiword_predicate_nodump): * symbols.c (defsymbol_massage_multiword_predicate): * symbols.c (defsymbol_nodump): * symbols.c (defsymbol): * symbols.c (defkeyword): * symbols.c (defkeyword_massage_name): * symbols.c (check_module_subr): * symbols.c (deferror_1): * symbols.c (deferror): * symbols.c (deferror_massage_name): * symbols.c (deferror_massage_name_and_message): * symbols.c (defvar_magic): * symeval.h: * symeval.h (DEFVAR_SYMVAL_FWD): * sysdep.c: * sysdep.c (init_system_name): * sysdll.c: * sysdll.c (MAYBE_PREPEND_UNDERSCORE): * sysdll.c (dll_function): * sysdll.c (dll_variable): * sysdll.c (dll_error): * sysdll.c (dll_open): * sysdll.c (dll_close): * sysdll.c (image_for_address): * sysdll.c (my_find_image): * sysdll.c (search_linked_libs): * sysdll.h: * sysfile.h: * sysfile.h (DEFAULT_DIRECTORY_FALLBACK): * syswindows.h: * tests.c (DFC_CHECK_LENGTH): * tests.c (DFC_CHECK_CONTENT): * tests.c (Ftest_hash_tables): * text.c (vars_of_text): * text.h: * tooltalk.c (tt_opnum_string): * tooltalk.c (tt_message_arg_ival_string): * tooltalk.c (Ftooltalk_default_procid): * tooltalk.c (Ftooltalk_default_session): * tooltalk.c (init_tooltalk): * tooltalk.c (vars_of_tooltalk): * ui-gtk.c (Fdll_load): * ui-gtk.c (type_to_marshaller_type): * ui-gtk.c (Fgtk_import_function_internal): * ui-gtk.c (emacs_gtk_object_printer): * ui-gtk.c (emacs_gtk_boxed_printer): * unicode.c (unicode_to_ichar): * unicode.c (unicode_print): * unicode.c (unicode_query): * unicode.c (vars_of_unicode): * unicode.c (complex_vars_of_unicode): * win32.c: * win32.c (mswindows_report_process_error): * window.c (print_window): * xemacs.def.in.in: BASIC IDEA: Further fixing up uses of char * and CIbyte * to reflect their actual semantics; Mule-izing some code; redoing of the not-yet-working code to handle message translation. Clean up code to handle message-translation (not yet working). Create separate versions of build_msg_string() for working with Ibyte *, CIbyte *, and Ascbyte * arguments. Assert that Ascbyte * arguments are pure-ASCII. Make build_msg_string() be the same as build_msg_ascstring(). Create same three versions of GETTEXT() and DEFER_GETTEXT(). Also create build_defer_string() and variants for the equivalent of DEFER_GETTEXT() when building a string. Remove old CGETTEXT(). Clean up code where GETTEXT(), DEFER_GETTEXT(), build_msg_string(), etc. was being called and introduce some new calls to build_msg_string(), etc. Remove GETTEXT() from calls to weird_doc() -- we assume that the message snarfer knows about weird_doc(). Remove uses of DEFER_GETTEXT() from error messages in sysdep.c and instead use special comments /* @@@begin-snarf@@@ */ and /* @@@end-snarf@@@ */ that the message snarfer presumably knows about. Create build_ascstring() and use it in many instances in place of build_string(). The purpose of having Ascbyte * variants is to make the code more self-documenting in terms of what sort of semantics is expected for char * strings. In fact in the process of looking for uses of build_string(), much improperly Mule-ized was discovered. Mule-ize a lot of code as described in previous paragraph, e.g. in sysdep.c. Make the error functions take Ascbyte * strings and fix up a couple of places where non-pure-ASCII strings were being passed in (file-coding.c, mule-coding.c, unicode.c). (It's debatable whether we really need to make the error functions work this way. It helps catch places where code is written in a way that message translation won't work, but we may well never implement message translation.) Make staticpro() and friends take Ascbyte * strings instead of raw char * strings. Create a const_Ascbyte_ptr dynarr type to describe what's held by staticpro_names[] and friends, create pdump descriptions for const_Ascbyte_ptr dynarrs, and use them in place of specially-crafted staticpro descriptions. Mule-ize certain other functions (e.g. x_event_name) by correcting raw use of char * to Ascbyte *, Rawbyte * or another such type, and raw use of char[] buffers to another type (usually Ascbyte[]). Change many uses of write_c_string() to write_msg_string(), write_ascstring(), etc. Mule-ize emodules.c, emodules.h, sysdll.h. Fix some un-Mule-ized code in intl-win32.c. A comment in event-Xt.c and the limitations of the message snarfer (make-msgfile or whatever) is presumably incorrect -- it should be smart enough to handle function calls spread over more than one line. Clean up code in event-Xt.c that was written awkwardly for this reason. In config.h.in, instead of NEED_ERROR_CHECK_TYPES_INLINES, create a more general XEMACS_DEFS_NEEDS_INLINE_DECLS to indicate when inlined functions need to be declared in xemacs.defs.in.in, and make use of it in xemacs.defs.in.in. We need to do this because postgresql.c now calls qxestrdup(), which is an inline function. Make nconc2() and other such functions MODULE_API and put them in xemacs.defs.in.in since postgresql.c now uses them. Clean up indentation in lread.c and a few other places. In text.h, document ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN(), group together the stand-in encodings and add some more for DLL symbols, function and variable names, etc.
author Ben Wing <ben@xemacs.org>
date Tue, 26 Jan 2010 23:22:30 -0600
parents b3ea9c582280
children 304aebb79cd3
comparison
equal deleted inserted replaced
4951:de60897044f4 4952:19a72041c5ed
1153 assert(100 > number_of_jit_charsets); 1153 assert(100 > number_of_jit_charsets);
1154 1154
1155 qxesprintf(setname, "jit-ucs-charset-%d", number_of_jit_charsets); 1155 qxesprintf(setname, "jit-ucs-charset-%d", number_of_jit_charsets);
1156 1156
1157 Vcurrent_jit_charset = Fmake_charset 1157 Vcurrent_jit_charset = Fmake_charset
1158 (intern((const CIbyte *)setname), Vcharset_descr, 1158 (intern_int (setname), Vcharset_descr,
1159 /* Set encode-as-utf-8 to t, to have this character set written 1159 /* Set encode-as-utf-8 to t, to have this character set written
1160 using UTF-8 escapes in escape-quoted and ctext. This 1160 using UTF-8 escapes in escape-quoted and ctext. This
1161 sidesteps the fact that our internal character -> Unicode 1161 sidesteps the fact that our internal character -> Unicode
1162 mapping is not stable from one invocation to the next. */ 1162 mapping is not stable from one invocation to the next. */
1163 nconc2 (list2(Qencode_as_utf_8, Qt), 1163 nconc2 (list2(Qencode_as_utf_8, Qt),
2824 int UNUSED (escapeflag)) 2824 int UNUSED (escapeflag))
2825 { 2825 {
2826 write_fmt_string_lisp (printcharfun, "(%s", 1, 2826 write_fmt_string_lisp (printcharfun, "(%s", 1,
2827 unicode_getprop (cs, Qunicode_type)); 2827 unicode_getprop (cs, Qunicode_type));
2828 if (XCODING_SYSTEM_UNICODE_LITTLE_ENDIAN (cs)) 2828 if (XCODING_SYSTEM_UNICODE_LITTLE_ENDIAN (cs))
2829 write_c_string (printcharfun, ", little-endian"); 2829 write_ascstring (printcharfun, ", little-endian");
2830 if (XCODING_SYSTEM_UNICODE_NEED_BOM (cs)) 2830 if (XCODING_SYSTEM_UNICODE_NEED_BOM (cs))
2831 write_c_string (printcharfun, ", need-bom"); 2831 write_ascstring (printcharfun, ", need-bom");
2832 write_c_string (printcharfun, ")"); 2832 write_ascstring (printcharfun, ")");
2833 } 2833 }
2834 2834
2835 #ifdef MULE 2835 #ifdef MULE
2836 DEFUN ("set-unicode-query-skip-chars-args", Fset_unicode_query_skip_chars_args, 2836 DEFUN ("set-unicode-query-skip-chars-args", Fset_unicode_query_skip_chars_args,
2837 3, 3, 0, /* 2837 3, 3, 0, /*
3046 assert (previous_failed_reason == query_coding_invalid_sequence 3046 assert (previous_failed_reason == query_coding_invalid_sequence
3047 || previous_failed_reason == query_coding_unencodable); 3047 || previous_failed_reason == query_coding_unencodable);
3048 3048
3049 if (flags & QUERY_METHOD_ERRORP) 3049 if (flags & QUERY_METHOD_ERRORP)
3050 { 3050 {
3051 DECLARE_EISTRING (error_details); 3051 signal_error_2
3052 3052 (Qtext_conversion_error,
3053 eicpy_ascii (error_details, "Cannot encode "); 3053 "Cannot encode using coding system",
3054 eicat_lstr (error_details, 3054 make_string_from_buffer (buf, fail_range_start,
3055 make_string_from_buffer (buf, fail_range_start, 3055 pos - fail_range_start),
3056 pos - 3056 XCODING_SYSTEM_NAME (codesys));
3057 fail_range_start));
3058 eicat_ascii (error_details, " using coding system");
3059
3060 signal_error (Qtext_conversion_error,
3061 (const CIbyte *)(eidata (error_details)),
3062 XCODING_SYSTEM_NAME (codesys));
3063 } 3057 }
3064 3058
3065 if (NILP (result)) 3059 if (NILP (result))
3066 { 3060 {
3067 result = Fmake_range_table (Qstart_closed_end_open); 3061 result = Fmake_range_table (Qstart_closed_end_open);
3217 Vnumber_of_jit_charsets = make_int (0); 3211 Vnumber_of_jit_charsets = make_int (0);
3218 staticpro (&Vlast_jit_charset_final); 3212 staticpro (&Vlast_jit_charset_final);
3219 Vlast_jit_charset_final = make_char (0x30); 3213 Vlast_jit_charset_final = make_char (0x30);
3220 staticpro (&Vcharset_descr); 3214 staticpro (&Vcharset_descr);
3221 Vcharset_descr 3215 Vcharset_descr
3222 = build_string ("Mule charset for otherwise unknown Unicode code points."); 3216 = build_defer_string ("Mule charset for otherwise unknown Unicode code points.");
3223 3217
3224 staticpro (&Vlanguage_unicode_precedence_list); 3218 staticpro (&Vlanguage_unicode_precedence_list);
3225 Vlanguage_unicode_precedence_list = Qnil; 3219 Vlanguage_unicode_precedence_list = Qnil;
3226 3220
3227 staticpro (&Vdefault_unicode_precedence_list); 3221 staticpro (&Vdefault_unicode_precedence_list);
3266 displaying charsets for which the `encode-as-utf-8' property is true, and 3260 displaying charsets for which the `encode-as-utf-8' property is true, and
3267 those used when no font matching the charset's registries property has been 3261 those used when no font matching the charset's registries property has been
3268 found (that is, they're probably Mule-specific charsets like Ethiopic or 3262 found (that is, they're probably Mule-specific charsets like Ethiopic or
3269 IPA.) 3263 IPA.)
3270 */ ); 3264 */ );
3271 Qunicode_registries = vector1(build_string("iso10646-1")); 3265 Qunicode_registries = vector1(build_ascstring("iso10646-1"));
3272 3266
3273 /* Initialised in lisp/mule/general-late.el, by a call to 3267 /* Initialised in lisp/mule/general-late.el, by a call to
3274 #'set-unicode-query-skip-chars-args. Or at least they would be, but we 3268 #'set-unicode-query-skip-chars-args. Or at least they would be, but we
3275 can't do this at dump time right now, initialised range tables aren't 3269 can't do this at dump time right now, initialised range tables aren't
3276 dumped properly. */ 3270 dumped properly. */
3296 { 3290 {
3297 /* We used to define this in unicode.el. But we need it early for 3291 /* We used to define this in unicode.el. But we need it early for
3298 Cygwin 1.7 -- used in LOCAL_FILE_FORMAT_TO_TSTR() et al. */ 3292 Cygwin 1.7 -- used in LOCAL_FILE_FORMAT_TO_TSTR() et al. */
3299 Fmake_coding_system_internal 3293 Fmake_coding_system_internal
3300 (Qutf_8, Qunicode, 3294 (Qutf_8, Qunicode,
3301 build_msg_string ("UTF-8"), 3295 build_defer_string ("UTF-8"),
3302 nconc2 (list4 (Qdocumentation, 3296 nconc2 (list4 (Qdocumentation,
3303 build_msg_string ( 3297 build_defer_string (
3304 "UTF-8 Unicode encoding -- ASCII-compatible 8-bit variable-width encoding\n" 3298 "UTF-8 Unicode encoding -- ASCII-compatible 8-bit variable-width encoding\n"
3305 "sharing the following principles with the Mule-internal encoding:\n" 3299 "sharing the following principles with the Mule-internal encoding:\n"
3306 "\n" 3300 "\n"
3307 " -- All ASCII characters (codepoints 0 through 127) are represented\n" 3301 " -- All ASCII characters (codepoints 0 through 127) are represented\n"
3308 " by themselves (i.e. using one byte, with the same value as the\n" 3302 " by themselves (i.e. using one byte, with the same value as the\n"
3320 " character are disjoint, so moving backwards is easy.\n" 3314 " character are disjoint, so moving backwards is easy.\n"
3321 "\n" 3315 "\n"
3322 " -- Given only the leading byte, you know how many following bytes\n" 3316 " -- Given only the leading byte, you know how many following bytes\n"
3323 " are present.\n" 3317 " are present.\n"
3324 ), 3318 ),
3325 Qmnemonic, build_string ("UTF8")), 3319 Qmnemonic, build_ascstring ("UTF8")),
3326 list2 (Qunicode_type, Qutf_8))); 3320 list2 (Qunicode_type, Qutf_8)));
3327 } 3321 }