Mercurial > hg > xemacs-beta
comparison src/mule-coding.c @ 183:e121b013d1f0 r20-3b18
Import from CVS: tag r20-3b18
| author | cvs |
|---|---|
| date | Mon, 13 Aug 2007 09:54:23 +0200 |
| parents | bfd6434d15b3 |
| children | 3d6bfa290dbd |
comparison
equal
deleted
inserted
replaced
| 182:f07455f06202 | 183:e121b013d1f0 |
|---|---|
| 85 Lisp_Object charset[4]; | 85 Lisp_Object charset[4]; |
| 86 | 86 |
| 87 /* Which registers are currently invoked into the left (GL) and | 87 /* Which registers are currently invoked into the left (GL) and |
| 88 right (GR) halves of the 8-bit encoding space? */ | 88 right (GR) halves of the 8-bit encoding space? */ |
| 89 int register_left, register_right; | 89 int register_left, register_right; |
| 90 | 90 |
| 91 /* ISO_ESC holds a value indicating part of an escape sequence | 91 /* ISO_ESC holds a value indicating part of an escape sequence |
| 92 that has already been seen. */ | 92 that has already been seen. */ |
| 93 enum iso_esc_flag esc; | 93 enum iso_esc_flag esc; |
| 94 | 94 |
| 95 /* This records the bytes we've seen so far in an escape sequence, | 95 /* This records the bytes we've seen so far in an escape sequence, |
| 96 in case the sequence is invalid (we spit out the bytes unchanged). */ | 96 in case the sequence is invalid (we spit out the bytes unchanged). */ |
| 97 unsigned char esc_bytes[8]; | 97 unsigned char esc_bytes[8]; |
| 98 | 98 |
| 99 /* Index for next byte to store in ISO escape sequence. */ | 99 /* Index for next byte to store in ISO escape sequence. */ |
| 100 int esc_bytes_index; | 100 int esc_bytes_index; |
| 101 | 101 |
| 102 /* Stuff seen so far when composing a string. */ | 102 /* Stuff seen so far when composing a string. */ |
| 103 unsigned_char_dynarr *composite_chars; | 103 unsigned_char_dynarr *composite_chars; |
| 230 (markobj) (CODING_SYSTEM_DOC_STRING (codesys)); | 230 (markobj) (CODING_SYSTEM_DOC_STRING (codesys)); |
| 231 (markobj) (CODING_SYSTEM_MNEMONIC (codesys)); | 231 (markobj) (CODING_SYSTEM_MNEMONIC (codesys)); |
| 232 (markobj) (CODING_SYSTEM_EOL_LF (codesys)); | 232 (markobj) (CODING_SYSTEM_EOL_LF (codesys)); |
| 233 (markobj) (CODING_SYSTEM_EOL_CRLF (codesys)); | 233 (markobj) (CODING_SYSTEM_EOL_CRLF (codesys)); |
| 234 (markobj) (CODING_SYSTEM_EOL_CR (codesys)); | 234 (markobj) (CODING_SYSTEM_EOL_CR (codesys)); |
| 235 | 235 |
| 236 switch (CODING_SYSTEM_TYPE (codesys)) | 236 switch (CODING_SYSTEM_TYPE (codesys)) |
| 237 { | 237 { |
| 238 int i; | 238 int i; |
| 239 case CODESYS_ISO2022: | 239 case CODESYS_ISO2022: |
| 240 for (i = 0; i < 4; i++) | 240 for (i = 0; i < 4; i++) |
| 348 { | 348 { |
| 349 Lisp_Object codesys_obj = Qnil; | 349 Lisp_Object codesys_obj = Qnil; |
| 350 int len = string_length (XSYMBOL (CODING_SYSTEM_NAME (codesys))->name); | 350 int len = string_length (XSYMBOL (CODING_SYSTEM_NAME (codesys))->name); |
| 351 char *codesys_name = (char *) alloca (len + 7); | 351 char *codesys_name = (char *) alloca (len + 7); |
| 352 Lisp_Object codesys_name_sym, sub_codesys_obj; | 352 Lisp_Object codesys_name_sym, sub_codesys_obj; |
| 353 | 353 |
| 354 /* kludge */ | 354 /* kludge */ |
| 355 | 355 |
| 356 XSETCODING_SYSTEM (codesys_obj, codesys); | 356 XSETCODING_SYSTEM (codesys_obj, codesys); |
| 357 | 357 |
| 358 memcpy (codesys_name, | 358 memcpy (codesys_name, |
| 359 string_data (XSYMBOL (CODING_SYSTEM_NAME (codesys))->name), len); | 359 string_data (XSYMBOL (CODING_SYSTEM_NAME (codesys))->name), len); |
| 360 | 360 |
| 361 #define DEFINE_SUB_CODESYS(op_sys, Type) do { \ | 361 #define DEFINE_SUB_CODESYS(op_sys, Type) do { \ |
| 362 strcpy (codesys_name + len, "-" op_sys); \ | 362 strcpy (codesys_name + len, "-" op_sys); \ |
| 363 codesys_name_sym = intern (codesys_name); \ | 363 codesys_name_sym = intern (codesys_name); \ |
| 364 sub_codesys_obj = Fcopy_coding_system (codesys_obj, codesys_name_sym); \ | 364 sub_codesys_obj = Fcopy_coding_system (codesys_obj, codesys_name_sym); \ |
| 365 XCODING_SYSTEM_EOL_TYPE (sub_codesys_obj) = Type; \ | 365 XCODING_SYSTEM_EOL_TYPE (sub_codesys_obj) = Type; \ |
| 554 { | 554 { |
| 555 int i; | 555 int i; |
| 556 Lisp_Object result = Qnil; | 556 Lisp_Object result = Qnil; |
| 557 | 557 |
| 558 if (!load_here) | 558 if (!load_here) |
| 559 return Qnil; | 559 return Qnil; |
| 560 for (i = 0; i < Dynarr_length (load_here); i++) | 560 for (i = 0; i < Dynarr_length (load_here); i++) |
| 561 { | 561 { |
| 562 struct charset_conversion_spec *ccs = | 562 struct charset_conversion_spec *ccs = |
| 563 Dynarr_atp (load_here, i); | 563 Dynarr_atp (load_here, i); |
| 564 result = Fcons (list2 (ccs->from_charset, ccs->to_charset), result); | 564 result = Fcons (list2 (ccs->from_charset, ccs->to_charset), result); |
| 739 struct Lisp_Coding_System *codesys; | 739 struct Lisp_Coding_System *codesys; |
| 740 Lisp_Object rest, key, value; | 740 Lisp_Object rest, key, value; |
| 741 int ty; | 741 int ty; |
| 742 int need_to_setup_eol_systems = 1; | 742 int need_to_setup_eol_systems = 1; |
| 743 | 743 |
| 744 /* Convert type to constant */ | 744 /* Convert type to constant */ |
| 745 if (NILP (type) || EQ (type, Qautomatic_conversion)) | 745 if (NILP (type) || EQ (type, Qautomatic_conversion)) |
| 746 { ty = CODESYS_AUTODETECT; } | 746 { ty = CODESYS_AUTODETECT; } |
| 747 else if (EQ (type, Qshift_jis)) { ty = CODESYS_SHIFT_JIS; } | 747 else if (EQ (type, Qshift_jis)) { ty = CODESYS_SHIFT_JIS; } |
| 748 else if (EQ (type, Qiso2022)) { ty = CODESYS_ISO2022; } | 748 else if (EQ (type, Qiso2022)) { ty = CODESYS_ISO2022; } |
| 749 else if (EQ (type, Qbig5)) { ty = CODESYS_BIG5; } | 749 else if (EQ (type, Qbig5)) { ty = CODESYS_BIG5; } |
| 792 | 792 |
| 793 if (EQ (key, Qcharset_g0)) FROB_INITIAL_CHARSET (0); | 793 if (EQ (key, Qcharset_g0)) FROB_INITIAL_CHARSET (0); |
| 794 else if (EQ (key, Qcharset_g1)) FROB_INITIAL_CHARSET (1); | 794 else if (EQ (key, Qcharset_g1)) FROB_INITIAL_CHARSET (1); |
| 795 else if (EQ (key, Qcharset_g2)) FROB_INITIAL_CHARSET (2); | 795 else if (EQ (key, Qcharset_g2)) FROB_INITIAL_CHARSET (2); |
| 796 else if (EQ (key, Qcharset_g3)) FROB_INITIAL_CHARSET (3); | 796 else if (EQ (key, Qcharset_g3)) FROB_INITIAL_CHARSET (3); |
| 797 | 797 |
| 798 #define FROB_FORCE_CHARSET(charset_num) \ | 798 #define FROB_FORCE_CHARSET(charset_num) \ |
| 799 CODING_SYSTEM_ISO2022_FORCE_CHARSET_ON_OUTPUT (codesys, charset_num) = !NILP (value) | 799 CODING_SYSTEM_ISO2022_FORCE_CHARSET_ON_OUTPUT (codesys, charset_num) = !NILP (value) |
| 800 | 800 |
| 801 else if (EQ (key, Qforce_g0_on_output)) FROB_FORCE_CHARSET (0); | 801 else if (EQ (key, Qforce_g0_on_output)) FROB_FORCE_CHARSET (0); |
| 802 else if (EQ (key, Qforce_g1_on_output)) FROB_FORCE_CHARSET (1); | 802 else if (EQ (key, Qforce_g1_on_output)) FROB_FORCE_CHARSET (1); |
| 803 else if (EQ (key, Qforce_g2_on_output)) FROB_FORCE_CHARSET (2); | 803 else if (EQ (key, Qforce_g2_on_output)) FROB_FORCE_CHARSET (2); |
| 804 else if (EQ (key, Qforce_g3_on_output)) FROB_FORCE_CHARSET (3); | 804 else if (EQ (key, Qforce_g3_on_output)) FROB_FORCE_CHARSET (3); |
| 805 | 805 |
| 806 #define FROB_BOOLEAN_PROPERTY(prop) \ | 806 #define FROB_BOOLEAN_PROPERTY(prop) \ |
| 807 CODING_SYSTEM_ISO2022_##prop (codesys) = !NILP (value) | 807 CODING_SYSTEM_ISO2022_##prop (codesys) = !NILP (value) |
| 808 | 808 |
| 809 else if (EQ (key, Qshort)) FROB_BOOLEAN_PROPERTY (SHORT); | 809 else if (EQ (key, Qshort)) FROB_BOOLEAN_PROPERTY (SHORT); |
| 810 else if (EQ (key, Qno_ascii_eol)) FROB_BOOLEAN_PROPERTY (NO_ASCII_EOL); | 810 else if (EQ (key, Qno_ascii_eol)) FROB_BOOLEAN_PROPERTY (NO_ASCII_EOL); |
| 811 else if (EQ (key, Qno_ascii_cntl)) FROB_BOOLEAN_PROPERTY (NO_ASCII_CNTL); | 811 else if (EQ (key, Qno_ascii_cntl)) FROB_BOOLEAN_PROPERTY (NO_ASCII_CNTL); |
| 812 else if (EQ (key, Qseven)) FROB_BOOLEAN_PROPERTY (SEVEN); | 812 else if (EQ (key, Qseven)) FROB_BOOLEAN_PROPERTY (SEVEN); |
| 813 else if (EQ (key, Qlock_shift)) FROB_BOOLEAN_PROPERTY (LOCK_SHIFT); | 813 else if (EQ (key, Qlock_shift)) FROB_BOOLEAN_PROPERTY (LOCK_SHIFT); |
| 814 else if (EQ (key, Qno_iso6429)) FROB_BOOLEAN_PROPERTY (NO_ISO6429); | 814 else if (EQ (key, Qno_iso6429)) FROB_BOOLEAN_PROPERTY (NO_ISO6429); |
| 815 else if (EQ (key, Qescape_quoted)) FROB_BOOLEAN_PROPERTY (ESCAPE_QUOTED); | 815 else if (EQ (key, Qescape_quoted)) FROB_BOOLEAN_PROPERTY (ESCAPE_QUOTED); |
| 816 | 816 |
| 817 else if (EQ (key, Qinput_charset_conversion)) | 817 else if (EQ (key, Qinput_charset_conversion)) |
| 818 { | 818 { |
| 819 codesys->iso2022.input_conv = | 819 codesys->iso2022.input_conv = |
| 820 Dynarr_new (struct charset_conversion_spec); | 820 Dynarr_new (struct charset_conversion_spec); |
| 821 parse_charset_conversion_specs (codesys->iso2022.input_conv, | 821 parse_charset_conversion_specs (codesys->iso2022.input_conv, |
| 850 signal_simple_error ("Unrecognized property", key); | 850 signal_simple_error ("Unrecognized property", key); |
| 851 } | 851 } |
| 852 | 852 |
| 853 if (need_to_setup_eol_systems) | 853 if (need_to_setup_eol_systems) |
| 854 setup_eol_coding_systems (codesys); | 854 setup_eol_coding_systems (codesys); |
| 855 | 855 |
| 856 { | 856 { |
| 857 Lisp_Object codesys_obj; | 857 Lisp_Object codesys_obj; |
| 858 XSETCODING_SYSTEM (codesys_obj, codesys); | 858 XSETCODING_SYSTEM (codesys_obj, codesys); |
| 859 Fputhash (name, codesys_obj, Vcoding_system_hashtable); | 859 Fputhash (name, codesys_obj, Vcoding_system_hashtable); |
| 860 return codesys_obj; | 860 return codesys_obj; |
| 1026 else if (type == CODESYS_ISO2022) | 1026 else if (type == CODESYS_ISO2022) |
| 1027 { | 1027 { |
| 1028 #define INITIAL_CHARSET(charset_num) \ | 1028 #define INITIAL_CHARSET(charset_num) \ |
| 1029 (XCHARSET_NAME (XCODING_SYSTEM_ISO2022_INITIAL_CHARSET \ | 1029 (XCHARSET_NAME (XCODING_SYSTEM_ISO2022_INITIAL_CHARSET \ |
| 1030 (coding_system, charset_num))) | 1030 (coding_system, charset_num))) |
| 1031 | 1031 |
| 1032 if (EQ (prop, Qcharset_g0)) return INITIAL_CHARSET (0); | 1032 if (EQ (prop, Qcharset_g0)) return INITIAL_CHARSET (0); |
| 1033 else if (EQ (prop, Qcharset_g1)) return INITIAL_CHARSET (1); | 1033 else if (EQ (prop, Qcharset_g1)) return INITIAL_CHARSET (1); |
| 1034 else if (EQ (prop, Qcharset_g2)) return INITIAL_CHARSET (2); | 1034 else if (EQ (prop, Qcharset_g2)) return INITIAL_CHARSET (2); |
| 1035 else if (EQ (prop, Qcharset_g3)) return INITIAL_CHARSET (3); | 1035 else if (EQ (prop, Qcharset_g3)) return INITIAL_CHARSET (3); |
| 1036 | 1036 |
| 1043 else if (EQ (prop, Qforce_g2_on_output)) return FORCE_CHARSET (2); | 1043 else if (EQ (prop, Qforce_g2_on_output)) return FORCE_CHARSET (2); |
| 1044 else if (EQ (prop, Qforce_g3_on_output)) return FORCE_CHARSET (3); | 1044 else if (EQ (prop, Qforce_g3_on_output)) return FORCE_CHARSET (3); |
| 1045 | 1045 |
| 1046 #define LISP_BOOLEAN(prop) \ | 1046 #define LISP_BOOLEAN(prop) \ |
| 1047 (XCODING_SYSTEM_ISO2022_##prop (coding_system) ? Qt : Qnil) | 1047 (XCODING_SYSTEM_ISO2022_##prop (coding_system) ? Qt : Qnil) |
| 1048 | 1048 |
| 1049 else if (EQ (prop, Qshort)) return LISP_BOOLEAN (SHORT); | 1049 else if (EQ (prop, Qshort)) return LISP_BOOLEAN (SHORT); |
| 1050 else if (EQ (prop, Qno_ascii_eol)) return LISP_BOOLEAN (NO_ASCII_EOL); | 1050 else if (EQ (prop, Qno_ascii_eol)) return LISP_BOOLEAN (NO_ASCII_EOL); |
| 1051 else if (EQ (prop, Qno_ascii_cntl)) return LISP_BOOLEAN (NO_ASCII_CNTL); | 1051 else if (EQ (prop, Qno_ascii_cntl)) return LISP_BOOLEAN (NO_ASCII_CNTL); |
| 1052 else if (EQ (prop, Qseven)) return LISP_BOOLEAN (SEVEN); | 1052 else if (EQ (prop, Qseven)) return LISP_BOOLEAN (SEVEN); |
| 1053 else if (EQ (prop, Qlock_shift)) return LISP_BOOLEAN (LOCK_SHIFT); | 1053 else if (EQ (prop, Qlock_shift)) return LISP_BOOLEAN (LOCK_SHIFT); |
| 1054 else if (EQ (prop, Qno_iso6429)) return LISP_BOOLEAN (NO_ISO6429); | 1054 else if (EQ (prop, Qno_iso6429)) return LISP_BOOLEAN (NO_ISO6429); |
| 1055 else if (EQ (prop, Qescape_quoted)) return LISP_BOOLEAN (ESCAPE_QUOTED); | 1055 else if (EQ (prop, Qescape_quoted)) return LISP_BOOLEAN (ESCAPE_QUOTED); |
| 1056 | 1056 |
| 1057 else if (EQ (prop, Qinput_charset_conversion)) | 1057 else if (EQ (prop, Qinput_charset_conversion)) |
| 1058 return | 1058 return |
| 1059 unparse_charset_conversion_specs | 1059 unparse_charset_conversion_specs |
| 1060 (XCODING_SYSTEM (coding_system)->iso2022.input_conv); | 1060 (XCODING_SYSTEM (coding_system)->iso2022.input_conv); |
| 1061 else if (EQ (prop, Qoutput_charset_conversion)) | 1061 else if (EQ (prop, Qoutput_charset_conversion)) |
| 1208 struct detection_state | 1208 struct detection_state |
| 1209 { | 1209 { |
| 1210 enum eol_type eol_type; | 1210 enum eol_type eol_type; |
| 1211 int seen_non_ascii; | 1211 int seen_non_ascii; |
| 1212 int mask; | 1212 int mask; |
| 1213 | 1213 |
| 1214 struct | 1214 struct |
| 1215 { | 1215 { |
| 1216 int mask; | 1216 int mask; |
| 1217 int in_second_byte; | 1217 int in_second_byte; |
| 1218 } | 1218 } |
| 1219 big5; | 1219 big5; |
| 1220 | 1220 |
| 1221 struct | 1221 struct |
| 1222 { | 1222 { |
| 1223 int mask; | 1223 int mask; |
| 1224 int in_second_byte; | 1224 int in_second_byte; |
| 1225 } | 1225 } |
| 1226 shift_jis; | 1226 shift_jis; |
| 1227 | 1227 |
| 1228 struct | 1228 struct |
| 1229 { | 1229 { |
| 1230 int mask; | 1230 int mask; |
| 1231 int initted; | 1231 int initted; |
| 1232 struct iso2022_decoder iso; | 1232 struct iso2022_decoder iso; |
| 1310 st->eol_type holds the determined EOL type, or EOL_AUTODETECT if | 1310 st->eol_type holds the determined EOL type, or EOL_AUTODETECT if |
| 1311 not yet known. | 1311 not yet known. |
| 1312 | 1312 |
| 1313 st->mask holds the determined coding category mask, or ~0 if only | 1313 st->mask holds the determined coding category mask, or ~0 if only |
| 1314 ASCII has been seen so far. | 1314 ASCII has been seen so far. |
| 1315 | 1315 |
| 1316 Returns: | 1316 Returns: |
| 1317 | 1317 |
| 1318 0 == st->eol_type is EOL_AUTODETECT and/or more than coding category | 1318 0 == st->eol_type is EOL_AUTODETECT and/or more than coding category |
| 1319 is present in st->mask | 1319 is present in st->mask |
| 1320 1 == definitive answers are here for both st->eol_type and st->mask | 1320 1 == definitive answers are here for both st->eol_type and st->mask |
| 1329 if (st->eol_type == EOL_AUTODETECT) | 1329 if (st->eol_type == EOL_AUTODETECT) |
| 1330 st->eol_type = detect_eol_type (st, src, n); | 1330 st->eol_type = detect_eol_type (st, src, n); |
| 1331 | 1331 |
| 1332 if (just_do_eol) | 1332 if (just_do_eol) |
| 1333 return st->eol_type != EOL_AUTODETECT; | 1333 return st->eol_type != EOL_AUTODETECT; |
| 1334 | 1334 |
| 1335 if (!st->seen_non_ascii) | 1335 if (!st->seen_non_ascii) |
| 1336 { | 1336 { |
| 1337 for (; n; n--, src++) | 1337 for (; n; n--, src++) |
| 1338 { | 1338 { |
| 1339 c = *src; | 1339 c = *src; |
| 1395 { | 1395 { |
| 1396 int i; | 1396 int i; |
| 1397 int cat = -1; | 1397 int cat = -1; |
| 1398 | 1398 |
| 1399 mask = postprocess_iso2022_mask (mask); | 1399 mask = postprocess_iso2022_mask (mask); |
| 1400 | 1400 |
| 1401 /* Look through the coding categories by priority and find | 1401 /* Look through the coding categories by priority and find |
| 1402 the first one that is allowed. */ | 1402 the first one that is allowed. */ |
| 1403 for (i = 0; i <= CODING_CATEGORY_LAST; i++) | 1403 for (i = 0; i <= CODING_CATEGORY_LAST; i++) |
| 1404 { | 1404 { |
| 1405 cat = coding_category_by_priority[i]; | 1405 cat = coding_category_by_priority[i]; |
| 1433 *eol_type_in_out = XCODING_SYSTEM_EOL_TYPE (*codesys_in_out); | 1433 *eol_type_in_out = XCODING_SYSTEM_EOL_TYPE (*codesys_in_out); |
| 1434 | 1434 |
| 1435 memset (&decst, 0, sizeof (decst)); | 1435 memset (&decst, 0, sizeof (decst)); |
| 1436 decst.eol_type = *eol_type_in_out; | 1436 decst.eol_type = *eol_type_in_out; |
| 1437 decst.mask = ~0; | 1437 decst.mask = ~0; |
| 1438 | 1438 |
| 1439 /* If autodetection is called for, do it now. */ | 1439 /* If autodetection is called for, do it now. */ |
| 1440 if (XCODING_SYSTEM_TYPE (*codesys_in_out) == CODESYS_AUTODETECT || | 1440 if (XCODING_SYSTEM_TYPE (*codesys_in_out) == CODESYS_AUTODETECT || |
| 1441 *eol_type_in_out == EOL_AUTODETECT) | 1441 *eol_type_in_out == EOL_AUTODETECT) |
| 1442 { | 1442 { |
| 1443 | 1443 |
| 1444 while (1) | 1444 while (1) |
| 1445 { | 1445 { |
| 1446 unsigned char random_buffer[4096]; | 1446 unsigned char random_buffer[4096]; |
| 1447 int nread; | 1447 int nread; |
| 1448 | 1448 |
| 1449 nread = Lstream_read (stream, random_buffer, sizeof (random_buffer)); | 1449 nread = Lstream_read (stream, random_buffer, sizeof (random_buffer)); |
| 1450 if (!nread) | 1450 if (!nread) |
| 1451 break; | 1451 break; |
| 1452 if (detect_coding_type (&decst, random_buffer, nread, | 1452 if (detect_coding_type (&decst, random_buffer, nread, |
| 1453 XCODING_SYSTEM_TYPE (*codesys_in_out) != | 1453 XCODING_SYSTEM_TYPE (*codesys_in_out) != |
| 1492 decst.mask = ~0; | 1492 decst.mask = ~0; |
| 1493 while (1) | 1493 while (1) |
| 1494 { | 1494 { |
| 1495 unsigned char random_buffer[4096]; | 1495 unsigned char random_buffer[4096]; |
| 1496 int nread; | 1496 int nread; |
| 1497 | 1497 |
| 1498 nread = Lstream_read (XLSTREAM (instream), random_buffer, | 1498 nread = Lstream_read (XLSTREAM (instream), random_buffer, |
| 1499 sizeof (random_buffer)); | 1499 sizeof (random_buffer)); |
| 1500 if (!nread) | 1500 if (!nread) |
| 1501 break; | 1501 break; |
| 1502 if (detect_coding_type (&decst, random_buffer, nread, 0)) | 1502 if (detect_coding_type (&decst, random_buffer, nread, 0)) |
| 1507 val = subsidiary_coding_system (Fget_coding_system (Qautomatic_conversion), | 1507 val = subsidiary_coding_system (Fget_coding_system (Qautomatic_conversion), |
| 1508 decst.eol_type); | 1508 decst.eol_type); |
| 1509 else | 1509 else |
| 1510 { | 1510 { |
| 1511 int i; | 1511 int i; |
| 1512 | 1512 |
| 1513 val = Qnil; | 1513 val = Qnil; |
| 1514 | 1514 |
| 1515 decst.mask = postprocess_iso2022_mask (decst.mask); | 1515 decst.mask = postprocess_iso2022_mask (decst.mask); |
| 1516 | 1516 |
| 1517 for (i = CODING_CATEGORY_LAST; i >= 0; i--) | 1517 for (i = CODING_CATEGORY_LAST; i >= 0; i--) |
| 1518 { | 1518 { |
| 1519 int sys = coding_category_by_priority[i]; | 1519 int sys = coding_category_by_priority[i]; |
| 1520 if (decst.mask & (1 << sys)) | 1520 if (decst.mask & (1 << sys)) |
| 1521 { | 1521 { |
| 1643 enum eol_type eol_type; | 1643 enum eol_type eol_type; |
| 1644 | 1644 |
| 1645 /* Additional ISO2022 information. We define the structure above | 1645 /* Additional ISO2022 information. We define the structure above |
| 1646 because it's also needed by the detection routines. */ | 1646 because it's also needed by the detection routines. */ |
| 1647 struct iso2022_decoder iso2022; | 1647 struct iso2022_decoder iso2022; |
| 1648 | 1648 |
| 1649 /* Additional information (the state of the running CCL program) | 1649 /* Additional information (the state of the running CCL program) |
| 1650 used by the CCL decoder. */ | 1650 used by the CCL decoder. */ |
| 1651 struct ccl_program ccl; | 1651 struct ccl_program ccl; |
| 1652 | 1652 |
| 1653 struct detection_state decst; | 1653 struct detection_state decst; |
| 1780 else if (CODING_SYSTEM_TYPE (str->codesys) == CODESYS_CCL) | 1780 else if (CODING_SYSTEM_TYPE (str->codesys) == CODESYS_CCL) |
| 1781 { | 1781 { |
| 1782 set_ccl_program (&str->ccl, CODING_SYSTEM_CCL_DECODE (str->codesys), | 1782 set_ccl_program (&str->ccl, CODING_SYSTEM_CCL_DECODE (str->codesys), |
| 1783 0, 0, 0); | 1783 0, 0, 0); |
| 1784 } | 1784 } |
| 1785 | 1785 |
| 1786 str->flags = str->ch = 0; | 1786 str->flags = str->ch = 0; |
| 1787 } | 1787 } |
| 1788 | 1788 |
| 1789 static int | 1789 static int |
| 1790 decoding_rewinder (Lstream *stream) | 1790 decoding_rewinder (Lstream *stream) |
| 1904 | 1904 |
| 1905 /* If necessary, do encoding-detection now. We do this when | 1905 /* If necessary, do encoding-detection now. We do this when |
| 1906 we're a writing stream or a non-seekable reading stream, | 1906 we're a writing stream or a non-seekable reading stream, |
| 1907 meaning that we can't just process the whole input, | 1907 meaning that we can't just process the whole input, |
| 1908 rewind, and start over. */ | 1908 rewind, and start over. */ |
| 1909 | 1909 |
| 1910 if (CODING_SYSTEM_TYPE (str->codesys) == CODESYS_AUTODETECT || | 1910 if (CODING_SYSTEM_TYPE (str->codesys) == CODESYS_AUTODETECT || |
| 1911 str->eol_type == EOL_AUTODETECT) | 1911 str->eol_type == EOL_AUTODETECT) |
| 1912 { | 1912 { |
| 1913 Lisp_Object codesys = Qnil; | 1913 Lisp_Object codesys = Qnil; |
| 1914 | 1914 |
| 1931 set_decoding_stream_coding_system (decoding, codesys); | 1931 set_decoding_stream_coding_system (decoding, codesys); |
| 1932 if (was_end) | 1932 if (was_end) |
| 1933 str->flags |= CODING_STATE_END; | 1933 str->flags |= CODING_STATE_END; |
| 1934 } | 1934 } |
| 1935 } | 1935 } |
| 1936 | 1936 |
| 1937 switch (CODING_SYSTEM_TYPE (str->codesys)) | 1937 switch (CODING_SYSTEM_TYPE (str->codesys)) |
| 1938 { | 1938 { |
| 1939 #ifdef DEBUG_XEMACS | 1939 #ifdef DEBUG_XEMACS |
| 1940 case CODESYS_INTERNAL: | 1940 case CODESYS_INTERNAL: |
| 1941 Dynarr_add_many (dst, src, n); | 1941 Dynarr_add_many (dst, src, n); |
| 2015 { | 2015 { |
| 2016 char tempbuf[1024]; /* some random amount */ | 2016 char tempbuf[1024]; /* some random amount */ |
| 2017 Lstream *in = XLSTREAM(instream); | 2017 Lstream *in = XLSTREAM(instream); |
| 2018 Lstream *out = XLSTREAM(outstream); | 2018 Lstream *out = XLSTREAM(outstream); |
| 2019 Bufpos newpos, even_newer_pos; | 2019 Bufpos newpos, even_newer_pos; |
| 2020 | 2020 |
| 2021 while (1) | 2021 while (1) |
| 2022 { | 2022 { |
| 2023 Bufpos oldpos = lisp_buffer_stream_startpos (in); | 2023 Bufpos oldpos = lisp_buffer_stream_startpos (in); |
| 2024 int size_in_bytes = Lstream_read (in, tempbuf, sizeof (tempbuf)); | 2024 int size_in_bytes = Lstream_read (in, tempbuf, sizeof (tempbuf)); |
| 2025 if (!size_in_bytes) | 2025 if (!size_in_bytes) |
| 2244 set_ccl_program (&str->ccl, CODING_SYSTEM_CCL_ENCODE (str->codesys), 0, 0, 0); | 2244 set_ccl_program (&str->ccl, CODING_SYSTEM_CCL_ENCODE (str->codesys), 0, 0, 0); |
| 2245 break; | 2245 break; |
| 2246 default: | 2246 default: |
| 2247 break; | 2247 break; |
| 2248 } | 2248 } |
| 2249 | 2249 |
| 2250 str->flags = str->ch = 0; | 2250 str->flags = str->ch = 0; |
| 2251 } | 2251 } |
| 2252 | 2252 |
| 2253 static int | 2253 static int |
| 2254 encoding_rewinder (Lstream *stream) | 2254 encoding_rewinder (Lstream *stream) |
| 2546 eol_type = str->eol_type; | 2546 eol_type = str->eol_type; |
| 2547 | 2547 |
| 2548 while (n--) | 2548 while (n--) |
| 2549 { | 2549 { |
| 2550 c = *src++; | 2550 c = *src++; |
| 2551 | 2551 |
| 2552 if (ch) | 2552 if (ch) |
| 2553 { | 2553 { |
| 2554 /* Previous character was first byte of Shift-JIS Kanji char. */ | 2554 /* Previous character was first byte of Shift-JIS Kanji char. */ |
| 2555 if (BYTE_SJIS_TWO_BYTE_2_P (c)) | 2555 if (BYTE_SJIS_TWO_BYTE_2_P (c)) |
| 2556 { | 2556 { |
| 2653 Return the corresponding character. | 2653 Return the corresponding character. |
| 2654 */ | 2654 */ |
| 2655 (code)) | 2655 (code)) |
| 2656 { | 2656 { |
| 2657 unsigned char c1, c2, s1, s2; | 2657 unsigned char c1, c2, s1, s2; |
| 2658 | 2658 |
| 2659 CHECK_CONS (code); | 2659 CHECK_CONS (code); |
| 2660 CHECK_INT (XCAR (code)); | 2660 CHECK_INT (XCAR (code)); |
| 2661 CHECK_INT (XCDR (code)); | 2661 CHECK_INT (XCDR (code)); |
| 2662 s1 = XINT (XCAR (code)); | 2662 s1 = XINT (XCAR (code)); |
| 2663 s2 = XINT (XCDR (code)); | 2663 s2 = XINT (XCDR (code)); |
| 2678 */ | 2678 */ |
| 2679 (ch)) | 2679 (ch)) |
| 2680 { | 2680 { |
| 2681 Lisp_Object charset; | 2681 Lisp_Object charset; |
| 2682 int c1, c2, s1, s2; | 2682 int c1, c2, s1, s2; |
| 2683 | 2683 |
| 2684 CHECK_CHAR_COERCE_INT (ch); | 2684 CHECK_CHAR_COERCE_INT (ch); |
| 2685 BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); | 2685 BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); |
| 2686 if (EQ (charset, Vcharset_japanese_jisx0208)) | 2686 if (EQ (charset, Vcharset_japanese_jisx0208)) |
| 2687 { | 2687 { |
| 2688 ENCODE_SJIS (c1 | 0x80, c2 | 0x80, s1, s2); | 2688 ENCODE_SJIS (c1 | 0x80, c2 | 0x80, s1, s2); |
| 2863 else | 2863 else |
| 2864 DECODE_ADD_BINARY_CHAR (c, dst); | 2864 DECODE_ADD_BINARY_CHAR (c, dst); |
| 2865 } | 2865 } |
| 2866 label_continue_loop:; | 2866 label_continue_loop:; |
| 2867 } | 2867 } |
| 2868 | 2868 |
| 2869 DECODE_HANDLE_END_OF_CONVERSION (flags, ch, dst); | 2869 DECODE_HANDLE_END_OF_CONVERSION (flags, ch, dst); |
| 2870 | 2870 |
| 2871 CODING_STREAM_COMPOSE (str, flags, ch); | 2871 CODING_STREAM_COMPOSE (str, flags, ch); |
| 2872 } | 2872 } |
| 2873 | 2873 |
| 2887 | 2887 |
| 2888 while (n--) | 2888 while (n--) |
| 2889 { | 2889 { |
| 2890 c = *src++; | 2890 c = *src++; |
| 2891 if (c == '\n') | 2891 if (c == '\n') |
| 2892 { | 2892 { |
| 2893 if (eol_type != EOL_LF && eol_type != EOL_AUTODETECT) | 2893 if (eol_type != EOL_LF && eol_type != EOL_AUTODETECT) |
| 2894 Dynarr_add (dst, '\r'); | 2894 Dynarr_add (dst, '\r'); |
| 2895 if (eol_type != EOL_CR) | 2895 if (eol_type != EOL_CR) |
| 2896 Dynarr_add (dst, '\n'); | 2896 Dynarr_add (dst, '\n'); |
| 2897 } | 2897 } |
| 2941 Return the corresponding character. | 2941 Return the corresponding character. |
| 2942 */ | 2942 */ |
| 2943 (code)) | 2943 (code)) |
| 2944 { | 2944 { |
| 2945 unsigned char c1, c2, b1, b2; | 2945 unsigned char c1, c2, b1, b2; |
| 2946 | 2946 |
| 2947 CHECK_CONS (code); | 2947 CHECK_CONS (code); |
| 2948 CHECK_INT (XCAR (code)); | 2948 CHECK_INT (XCAR (code)); |
| 2949 CHECK_INT (XCDR (code)); | 2949 CHECK_INT (XCDR (code)); |
| 2950 b1 = XINT (XCAR (code)); | 2950 b1 = XINT (XCAR (code)); |
| 2951 b2 = XINT (XCDR (code)); | 2951 b2 = XINT (XCDR (code)); |
| 2968 */ | 2968 */ |
| 2969 (ch)) | 2969 (ch)) |
| 2970 { | 2970 { |
| 2971 Lisp_Object charset; | 2971 Lisp_Object charset; |
| 2972 int c1, c2, b1, b2; | 2972 int c1, c2, b1, b2; |
| 2973 | 2973 |
| 2974 CHECK_CHAR_COERCE_INT (ch); | 2974 CHECK_CHAR_COERCE_INT (ch); |
| 2975 BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); | 2975 BREAKUP_CHAR (XCHAR (ch), charset, c1, c2); |
| 2976 if (EQ (charset, Vcharset_chinese_big5_1) || | 2976 if (EQ (charset, Vcharset_chinese_big5_1) || |
| 2977 EQ (charset, Vcharset_chinese_big5_2)) | 2977 EQ (charset, Vcharset_chinese_big5_2)) |
| 2978 { | 2978 { |
| 3126 o CSI '0' ']' -- end of the current direction | 3126 o CSI '0' ']' -- end of the current direction |
| 3127 o CSI '1' ']' -- start of left-to-right text | 3127 o CSI '1' ']' -- start of left-to-right text |
| 3128 o CSI '2' ']' -- start of right-to-left text | 3128 o CSI '2' ']' -- start of right-to-left text |
| 3129 The control character CSI (0x9B: control sequence introducer) is | 3129 The control character CSI (0x9B: control sequence introducer) is |
| 3130 abbreviated to the escape sequence ESC '[' in 7-bit environment. | 3130 abbreviated to the escape sequence ESC '[' in 7-bit environment. |
| 3131 | 3131 |
| 3132 Character composition specification takes the following format: | 3132 Character composition specification takes the following format: |
| 3133 o ESC '0' -- start character composition | 3133 o ESC '0' -- start character composition |
| 3134 o ESC '1' -- end character composition | 3134 o ESC '1' -- end character composition |
| 3135 Since these are not standard escape sequences of any ISO, the use | 3135 Since these are not standard escape sequences of any ISO, the use |
| 3136 of them for these meanings is restricted to Emacs only. */ | 3136 of them for these meanings is restricted to Emacs only. */ |
| 3137 | 3137 |
| 3138 static void | 3138 static void |
| 3139 reset_iso2022 (Lisp_Object coding_system, struct iso2022_decoder *iso) | 3139 reset_iso2022 (Lisp_Object coding_system, struct iso2022_decoder *iso) |
| 3140 { | 3140 { |
| 3141 int i; | 3141 int i; |
| 3142 | 3142 |
| 3143 for (i = 0; i < 4; i++) | 3143 for (i = 0; i < 4; i++) |
| 3144 { | 3144 { |
| 3145 if (!NILP (coding_system)) | 3145 if (!NILP (coding_system)) |
| 3146 iso->charset[i] = | 3146 iso->charset[i] = |
| 3147 XCODING_SYSTEM_ISO2022_INITIAL_CHARSET (coding_system, i); | 3147 XCODING_SYSTEM_ISO2022_INITIAL_CHARSET (coding_system, i); |
| 3230 { | 3230 { |
| 3231 case ISO_CODE_ESC: /* Start escape sequence */ | 3231 case ISO_CODE_ESC: /* Start escape sequence */ |
| 3232 *flags |= CODING_STATE_ESCAPE; | 3232 *flags |= CODING_STATE_ESCAPE; |
| 3233 iso->esc = ISO_ESC; | 3233 iso->esc = ISO_ESC; |
| 3234 goto not_done; | 3234 goto not_done; |
| 3235 | 3235 |
| 3236 case ISO_CODE_CSI: /* ISO6429 (specifying directionality) */ | 3236 case ISO_CODE_CSI: /* ISO6429 (specifying directionality) */ |
| 3237 *flags |= CODING_STATE_ESCAPE; | 3237 *flags |= CODING_STATE_ESCAPE; |
| 3238 iso->esc = ISO_ESC_5_11; | 3238 iso->esc = ISO_ESC_5_11; |
| 3239 goto not_done; | 3239 goto not_done; |
| 3240 | 3240 |
| 3291 case '0': | 3291 case '0': |
| 3292 iso->esc = ISO_ESC_START_COMPOSITE; | 3292 iso->esc = ISO_ESC_START_COMPOSITE; |
| 3293 *flags = (*flags & CODING_STATE_ISO2022_LOCK) | | 3293 *flags = (*flags & CODING_STATE_ISO2022_LOCK) | |
| 3294 CODING_STATE_COMPOSITE; | 3294 CODING_STATE_COMPOSITE; |
| 3295 return 1; | 3295 return 1; |
| 3296 | 3296 |
| 3297 case '1': | 3297 case '1': |
| 3298 iso->esc = ISO_ESC_END_COMPOSITE; | 3298 iso->esc = ISO_ESC_END_COMPOSITE; |
| 3299 *flags = (*flags & CODING_STATE_ISO2022_LOCK) & | 3299 *flags = (*flags & CODING_STATE_ISO2022_LOCK) & |
| 3300 ~CODING_STATE_COMPOSITE; | 3300 ~CODING_STATE_COMPOSITE; |
| 3301 return 1; | 3301 return 1; |
| 3456 else | 3456 else |
| 3457 { | 3457 { |
| 3458 /* Can this ever be reached? -slb */ | 3458 /* Can this ever be reached? -slb */ |
| 3459 abort(); | 3459 abort(); |
| 3460 } | 3460 } |
| 3461 | 3461 |
| 3462 cs = CHARSET_BY_ATTRIBUTES (type, c, | 3462 cs = CHARSET_BY_ATTRIBUTES (type, c, |
| 3463 *flags & CODING_STATE_R2L ? | 3463 *flags & CODING_STATE_R2L ? |
| 3464 CHARSET_RIGHT_TO_LEFT : | 3464 CHARSET_RIGHT_TO_LEFT : |
| 3465 CHARSET_LEFT_TO_RIGHT); | 3465 CHARSET_LEFT_TO_RIGHT); |
| 3466 goto designated; | 3466 goto designated; |
| 3783 dst = real_dst; | 3783 dst = real_dst; |
| 3784 len = set_charptr_emchar (comstr, emch); | 3784 len = set_charptr_emchar (comstr, emch); |
| 3785 Dynarr_add_many (dst, comstr, len); | 3785 Dynarr_add_many (dst, comstr, len); |
| 3786 break; | 3786 break; |
| 3787 } | 3787 } |
| 3788 | 3788 |
| 3789 case ISO_ESC_LITERAL: | 3789 case ISO_ESC_LITERAL: |
| 3790 DECODE_ADD_BINARY_CHAR (c, dst); | 3790 DECODE_ADD_BINARY_CHAR (c, dst); |
| 3791 break; | 3791 break; |
| 3792 | 3792 |
| 3793 default: | 3793 default: |
| 3893 XCHARSET_DIRECTION (charset) == CHARSET_LEFT_TO_RIGHT) | 3893 XCHARSET_DIRECTION (charset) == CHARSET_LEFT_TO_RIGHT) |
| 3894 || | 3894 || |
| 3895 (!(flags & CODING_STATE_R2L) && | 3895 (!(flags & CODING_STATE_R2L) && |
| 3896 XCHARSET_DIRECTION (charset) == CHARSET_RIGHT_TO_LEFT)) | 3896 XCHARSET_DIRECTION (charset) == CHARSET_RIGHT_TO_LEFT)) |
| 3897 { | 3897 { |
| 3898 Lisp_Object new_charset = | 3898 Lisp_Object new_charset = |
| 3899 XCHARSET_REVERSE_DIRECTION_CHARSET (charset); | 3899 XCHARSET_REVERSE_DIRECTION_CHARSET (charset); |
| 3900 if (!NILP (new_charset)) | 3900 if (!NILP (new_charset)) |
| 3901 charset = new_charset; | 3901 charset = new_charset; |
| 3902 } | 3902 } |
| 3903 | 3903 |
| 3906 { | 3906 { |
| 3907 case 1: /* ASCII */ | 3907 case 1: /* ASCII */ |
| 3908 DECODE_OUTPUT_PARTIAL_CHAR (ch); | 3908 DECODE_OUTPUT_PARTIAL_CHAR (ch); |
| 3909 Dynarr_add (dst, c & 0x7F); | 3909 Dynarr_add (dst, c & 0x7F); |
| 3910 break; | 3910 break; |
| 3911 | 3911 |
| 3912 case 2: /* one-byte official */ | 3912 case 2: /* one-byte official */ |
| 3913 DECODE_OUTPUT_PARTIAL_CHAR (ch); | 3913 DECODE_OUTPUT_PARTIAL_CHAR (ch); |
| 3914 Dynarr_add (dst, lb); | 3914 Dynarr_add (dst, lb); |
| 3915 Dynarr_add (dst, c | 0x80); | 3915 Dynarr_add (dst, c | 0x80); |
| 3916 break; | 3916 break; |
| 3917 | 3917 |
| 3918 case 3: /* one-byte private or two-byte official */ | 3918 case 3: /* one-byte private or two-byte official */ |
| 3919 if (XCHARSET_PRIVATE_P (charset)) | 3919 if (XCHARSET_PRIVATE_P (charset)) |
| 3920 { | 3920 { |
| 3921 DECODE_OUTPUT_PARTIAL_CHAR (ch); | 3921 DECODE_OUTPUT_PARTIAL_CHAR (ch); |
| 3922 Dynarr_add (dst, PRE_LEADING_BYTE_PRIVATE_1); | 3922 Dynarr_add (dst, PRE_LEADING_BYTE_PRIVATE_1); |
| 3934 } | 3934 } |
| 3935 else | 3935 else |
| 3936 ch = c; | 3936 ch = c; |
| 3937 } | 3937 } |
| 3938 break; | 3938 break; |
| 3939 | 3939 |
| 3940 default: /* two-byte private */ | 3940 default: /* two-byte private */ |
| 3941 if (ch) | 3941 if (ch) |
| 3942 { | 3942 { |
| 3943 Dynarr_add (dst, PRE_LEADING_BYTE_PRIVATE_2); | 3943 Dynarr_add (dst, PRE_LEADING_BYTE_PRIVATE_2); |
| 3944 Dynarr_add (dst, lb); | 3944 Dynarr_add (dst, lb); |
| 3997 str->codesys->iso2022.output_conv; | 3997 str->codesys->iso2022.output_conv; |
| 3998 | 3998 |
| 3999 if (dyn) | 3999 if (dyn) |
| 4000 { | 4000 { |
| 4001 int i; | 4001 int i; |
| 4002 | 4002 |
| 4003 for (i = 0; i < Dynarr_length (dyn); i++) | 4003 for (i = 0; i < Dynarr_length (dyn); i++) |
| 4004 { | 4004 { |
| 4005 struct charset_conversion_spec *spec = Dynarr_atp (dyn, i); | 4005 struct charset_conversion_spec *spec = Dynarr_atp (dyn, i); |
| 4006 if (EQ (charset, spec->from_charset)) | 4006 if (EQ (charset, spec->from_charset)) |
| 4007 charset = spec->to_charset; | 4007 charset = spec->to_charset; |
| 4136 | 4136 |
| 4137 else if (BUFBYTE_LEADING_BYTE_P (c) || BUFBYTE_LEADING_BYTE_P (ch)) | 4137 else if (BUFBYTE_LEADING_BYTE_P (c) || BUFBYTE_LEADING_BYTE_P (ch)) |
| 4138 { /* Processing Leading Byte */ | 4138 { /* Processing Leading Byte */ |
| 4139 ch = 0; | 4139 ch = 0; |
| 4140 charset = CHARSET_BY_LEADING_BYTE (c); | 4140 charset = CHARSET_BY_LEADING_BYTE (c); |
| 4141 if (c == PRE_LEADING_BYTE_PRIVATE_1 || | 4141 if (LEADING_BYTE_PREFIX_P(c)) |
| 4142 c == PRE_LEADING_BYTE_PRIVATE_2) | |
| 4143 ch = c; | 4142 ch = c; |
| 4144 else if (!EQ (charset, Vcharset_control_1) | 4143 else if (!EQ (charset, Vcharset_control_1) |
| 4145 && !EQ (charset, Vcharset_composite)) | 4144 && !EQ (charset, Vcharset_composite)) |
| 4146 { | 4145 { |
| 4147 int reg; | 4146 int reg; |
| 4336 Lisp_Object initial_charset = | 4335 Lisp_Object initial_charset = |
| 4337 CODING_SYSTEM_ISO2022_INITIAL_CHARSET (codesys, i); | 4336 CODING_SYSTEM_ISO2022_INITIAL_CHARSET (codesys, i); |
| 4338 iso2022_designate (initial_charset, i, str, dst); | 4337 iso2022_designate (initial_charset, i, str, dst); |
| 4339 } | 4338 } |
| 4340 } | 4339 } |
| 4341 | 4340 |
| 4342 CODING_STREAM_COMPOSE (str, flags, ch); | 4341 CODING_STREAM_COMPOSE (str, flags, ch); |
| 4343 str->iso2022.current_char_boundary = char_boundary; | 4342 str->iso2022.current_char_boundary = char_boundary; |
| 4344 str->iso2022.current_charset = charset; | 4343 str->iso2022.current_charset = charset; |
| 4345 str->iso2022.current_half = half; | 4344 str->iso2022.current_half = half; |
| 4346 | 4345 |
| 4368 eol_type = str->eol_type; | 4367 eol_type = str->eol_type; |
| 4369 | 4368 |
| 4370 while (n--) | 4369 while (n--) |
| 4371 { | 4370 { |
| 4372 c = *src++; | 4371 c = *src++; |
| 4373 | 4372 |
| 4374 DECODE_HANDLE_EOL_TYPE (eol_type, c, flags, dst); | 4373 DECODE_HANDLE_EOL_TYPE (eol_type, c, flags, dst); |
| 4375 DECODE_ADD_BINARY_CHAR (c, dst); | 4374 DECODE_ADD_BINARY_CHAR (c, dst); |
| 4376 label_continue_loop:; | 4375 label_continue_loop:; |
| 4377 } | 4376 } |
| 4378 | 4377 |
| 4448 | 4447 |
| 4449 #define PATHNAME_CODING_SYSTEM \ | 4448 #define PATHNAME_CODING_SYSTEM \ |
| 4450 ((NILP (Vpathname_coding_system) || \ | 4449 ((NILP (Vpathname_coding_system) || \ |
| 4451 (EQ ((Vpathname_coding_system), Qbinary))) ? \ | 4450 (EQ ((Vpathname_coding_system), Qbinary))) ? \ |
| 4452 Qnil : Fget_coding_system (Vpathname_coding_system)) | 4451 Qnil : Fget_coding_system (Vpathname_coding_system)) |
| 4453 | 4452 |
| 4454 /* #### not correct for all values of `fmt'! */ | 4453 /* #### not correct for all values of `fmt'! */ |
| 4455 #define FMT_CODING_SYSTEM(fmt) \ | 4454 #define FMT_CODING_SYSTEM(fmt) \ |
| 4456 (((fmt) == FORMAT_FILENAME) ? PATHNAME_CODING_SYSTEM : \ | 4455 (((fmt) == FORMAT_FILENAME) ? PATHNAME_CODING_SYSTEM : \ |
| 4457 ((fmt) == FORMAT_CTEXT ) ? Fget_coding_system (Qctext) : \ | 4456 ((fmt) == FORMAT_CTEXT ) ? Fget_coding_system (Qctext) : \ |
| 4458 ((fmt) == FORMAT_TERMINAL) ? PATHNAME_CODING_SYSTEM : \ | 4457 ((fmt) == FORMAT_TERMINAL) ? PATHNAME_CODING_SYSTEM : \ |
| 4470 conversion_out_dynarr = Dynarr_new (Extbyte); | 4469 conversion_out_dynarr = Dynarr_new (Extbyte); |
| 4471 else | 4470 else |
| 4472 Dynarr_reset (conversion_out_dynarr); | 4471 Dynarr_reset (conversion_out_dynarr); |
| 4473 | 4472 |
| 4474 if (NILP (coding_system)) | 4473 if (NILP (coding_system)) |
| 4475 { | 4474 { |
| 4476 CONST Bufbyte *end = ptr + len; | 4475 CONST Bufbyte *end = ptr + len; |
| 4477 | 4476 |
| 4478 for (; ptr < end;) | 4477 for (; ptr < end;) |
| 4479 { | 4478 { |
| 4480 Bufbyte c = | 4479 Bufbyte c = |
| 4484 '~'; | 4483 '~'; |
| 4485 | 4484 |
| 4486 Dynarr_add (conversion_out_dynarr, (Extbyte) c); | 4485 Dynarr_add (conversion_out_dynarr, (Extbyte) c); |
| 4487 INC_CHARPTR (ptr); | 4486 INC_CHARPTR (ptr); |
| 4488 } | 4487 } |
| 4489 | 4488 |
| 4490 #ifdef ERROR_CHECK_BUFPOS | 4489 #ifdef ERROR_CHECK_BUFPOS |
| 4491 assert (ptr == end); | 4490 assert (ptr == end); |
| 4492 #endif | 4491 #endif |
| 4493 } | 4492 } |
| 4494 else | 4493 else |
| 4526 Extcount len, | 4525 Extcount len, |
| 4527 Bytecount *len_out, | 4526 Bytecount *len_out, |
| 4528 enum external_data_format fmt) | 4527 enum external_data_format fmt) |
| 4529 { | 4528 { |
| 4530 Lisp_Object coding_system = FMT_CODING_SYSTEM (fmt); | 4529 Lisp_Object coding_system = FMT_CODING_SYSTEM (fmt); |
| 4531 | 4530 |
| 4532 if (!conversion_in_dynarr) | 4531 if (!conversion_in_dynarr) |
| 4533 conversion_in_dynarr = Dynarr_new (Bufbyte); | 4532 conversion_in_dynarr = Dynarr_new (Bufbyte); |
| 4534 else | 4533 else |
| 4535 Dynarr_reset (conversion_in_dynarr); | 4534 Dynarr_reset (conversion_in_dynarr); |
| 4536 | 4535 |
| 4549 make_fixed_buffer_input_stream ((unsigned char *) ptr, len); | 4548 make_fixed_buffer_input_stream ((unsigned char *) ptr, len); |
| 4550 Lisp_Object outstream = make_dynarr_output_stream | 4549 Lisp_Object outstream = make_dynarr_output_stream |
| 4551 ((unsigned_char_dynarr *) conversion_in_dynarr); | 4550 ((unsigned_char_dynarr *) conversion_in_dynarr); |
| 4552 struct gcpro gcpro1, gcpro2; | 4551 struct gcpro gcpro1, gcpro2; |
| 4553 char tempbuf[1024]; /* some random amount */ | 4552 char tempbuf[1024]; /* some random amount */ |
| 4554 | 4553 |
| 4555 outstream = | 4554 outstream = |
| 4556 make_decoding_output_stream (XLSTREAM (outstream), coding_system); | 4555 make_decoding_output_stream (XLSTREAM (outstream), coding_system); |
| 4557 GCPRO2 (instream, outstream); /* Necessary?? */ | 4556 GCPRO2 (instream, outstream); /* Necessary?? */ |
| 4558 while (1) | 4557 while (1) |
| 4559 { | 4558 { |
| 4601 DEFSUBR (Fcoding_category_list); | 4600 DEFSUBR (Fcoding_category_list); |
| 4602 DEFSUBR (Fset_coding_priority_list); | 4601 DEFSUBR (Fset_coding_priority_list); |
| 4603 DEFSUBR (Fcoding_priority_list); | 4602 DEFSUBR (Fcoding_priority_list); |
| 4604 DEFSUBR (Fset_coding_category_system); | 4603 DEFSUBR (Fset_coding_category_system); |
| 4605 DEFSUBR (Fcoding_category_system); | 4604 DEFSUBR (Fcoding_category_system); |
| 4606 | 4605 |
| 4607 DEFSUBR (Fdetect_coding_region); | 4606 DEFSUBR (Fdetect_coding_region); |
| 4608 DEFSUBR (Fdecode_coding_region); | 4607 DEFSUBR (Fdecode_coding_region); |
| 4609 DEFSUBR (Fencode_coding_region); | 4608 DEFSUBR (Fencode_coding_region); |
| 4610 DEFSUBR (Fdecode_shift_jis_char); | 4609 DEFSUBR (Fdecode_shift_jis_char); |
| 4611 DEFSUBR (Fencode_shift_jis_char); | 4610 DEFSUBR (Fencode_shift_jis_char); |
| 4702 for (i = 0; i <= CODING_CATEGORY_LAST; i++) | 4701 for (i = 0; i <= CODING_CATEGORY_LAST; i++) |
| 4703 { | 4702 { |
| 4704 coding_category_system[i] = Qnil; | 4703 coding_category_system[i] = Qnil; |
| 4705 coding_category_by_priority[i] = i; | 4704 coding_category_by_priority[i] = i; |
| 4706 } | 4705 } |
| 4707 | 4706 |
| 4708 DEFVAR_LISP ("keyboard-coding-system", &Vkeyboard_coding_system /* | 4707 DEFVAR_LISP ("keyboard-coding-system", &Vkeyboard_coding_system /* |
| 4709 Coding system used for TTY keyboard input. | 4708 Coding system used for TTY keyboard input. |
| 4710 Not used under a windowing system. | 4709 Not used under a windowing system. |
| 4711 */ ); | 4710 */ ); |
| 4712 Vkeyboard_coding_system = Qnil; | 4711 Vkeyboard_coding_system = Qnil; |
