Mercurial > hg > xemacs-beta
comparison src/file-coding.h @ 5118:e0db3c197671 ben-lisp-object
merge up to latest default branch, doesn't compile yet
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sat, 26 Dec 2009 21:18:49 -0600 |
parents | 257b468bf2ca |
children | d1247f3cc363 |
comparison
equal
deleted
inserted
replaced
5117:3742ea8250b5 | 5118:e0db3c197671 |
---|---|
206 /* type-specific extra data attached to a coding_system */ | 206 /* type-specific extra data attached to a coding_system */ |
207 char data[1]; | 207 char data[1]; |
208 }; | 208 }; |
209 typedef struct Lisp_Coding_System Lisp_Coding_System; | 209 typedef struct Lisp_Coding_System Lisp_Coding_System; |
210 | 210 |
211 DECLARE_LRECORD (coding_system, Lisp_Coding_System); | 211 DECLARE_LISP_OBJECT (coding_system, Lisp_Coding_System); |
212 #define XCODING_SYSTEM(x) XRECORD (x, coding_system, Lisp_Coding_System) | 212 #define XCODING_SYSTEM(x) XRECORD (x, coding_system, Lisp_Coding_System) |
213 #define wrap_coding_system(p) wrap_record (p, coding_system) | 213 #define wrap_coding_system(p) wrap_record (p, coding_system) |
214 #define CODING_SYSTEMP(x) RECORDP (x, coding_system) | 214 #define CODING_SYSTEMP(x) RECORDP (x, coding_system) |
215 #define CHECK_CODING_SYSTEM(x) CHECK_RECORD (x, coding_system) | 215 #define CHECK_CODING_SYSTEM(x) CHECK_RECORD (x, coding_system) |
216 #define CONCHECK_CODING_SYSTEM(x) CONCHECK_RECORD (x, coding_system) | 216 #define CONCHECK_CODING_SYSTEM(x) CONCHECK_RECORD (x, coding_system) |
228 mswindows_multibyte_coding_system, | 228 mswindows_multibyte_coding_system, |
229 iso2022_coding_system, | 229 iso2022_coding_system, |
230 ccl_coding_system, | 230 ccl_coding_system, |
231 shift_jis_coding_system, | 231 shift_jis_coding_system, |
232 big5_coding_system, | 232 big5_coding_system, |
233 unicode_coding_system | 233 unicode_coding_system, |
234 fixed_width_coding_system | |
234 }; | 235 }; |
235 | 236 |
236 struct coding_system_methods | 237 struct coding_system_methods |
237 { | 238 { |
238 Lisp_Object type; | 239 Lisp_Object type; |
316 Required. */ | 317 Required. */ |
317 Bytecount (*convert_method) (struct coding_stream *str, | 318 Bytecount (*convert_method) (struct coding_stream *str, |
318 const unsigned char *src, | 319 const unsigned char *src, |
319 unsigned_char_dynarr *dst, Bytecount n); | 320 unsigned_char_dynarr *dst, Bytecount n); |
320 | 321 |
322 /* Query method: Check whether the buffer text between point and END | |
323 can be encoded by this coding system. Returns | |
324 either nil (meaning the text can be encoded by the coding system) or a | |
325 range table object describing the stretches that the coding system | |
326 cannot encode. | |
327 | |
328 Possible values for flags are below, search for | |
329 QUERY_METHOD_IGNORE_INVALID_SEQUENCES. | |
330 | |
331 Coding systems are expected to be able to behave sensibly with all | |
332 possible octets on decoding, which is why this method is only available | |
333 for encoding. */ | |
334 Lisp_Object (*query_method) (Lisp_Object coding_system, struct buffer *buf, | |
335 Charbpos end, int flags); | |
336 | |
337 /* Same as the previous method, but this works in the context of | |
338 lstreams. (Where the data do need to be copied, unfortunately.) The | |
339 intention is to implement the query method for the mswindows-multibyte | |
340 coding systems in terms of a query_lstream method. */ | |
341 Lisp_Object (*query_lstream_method) (struct coding_stream *str, | |
342 const Ibyte *start, Bytecount n); | |
343 | |
321 /* Coding mark method: Mark any Lisp objects in the type-specific data | 344 /* Coding mark method: Mark any Lisp objects in the type-specific data |
322 attached to `struct coding_stream'. Optional. */ | 345 attached to `struct coding_stream'. Optional. */ |
323 void (*mark_coding_stream_method) (struct coding_stream *str); | 346 void (*mark_coding_stream_method) (struct coding_stream *str); |
324 | 347 |
325 /* Init coding stream method: Initialize the type-specific data attached | 348 /* Init coding stream method: Initialize the type-specific data attached |
385 lstream using this coding system), so we can't store this data in | 408 lstream using this coding system), so we can't store this data in |
386 the coding system object. */ | 409 the coding system object. */ |
387 int coding_data_size; | 410 int coding_data_size; |
388 }; | 411 }; |
389 | 412 |
413 /* Values for flags, as passed to query_method. */ | |
414 | |
415 #define QUERY_METHOD_IGNORE_INVALID_SEQUENCES 0x0001 | |
416 #define QUERY_METHOD_ERRORP 0x0002 | |
417 #define QUERY_METHOD_HIGHLIGHT 0x0004 | |
418 | |
419 enum query_coding_failure_reasons | |
420 { | |
421 query_coding_succeeded = 0, | |
422 query_coding_unencodable = 1, | |
423 query_coding_invalid_sequence = 2 | |
424 }; | |
425 | |
426 extern Lisp_Object Qquery_coding_warning_face; | |
427 | |
428 Lisp_Object default_query_method (Lisp_Object, struct buffer *, Charbpos, | |
429 int); | |
430 | |
390 /***** Calling a coding-system method *****/ | 431 /***** Calling a coding-system method *****/ |
391 | 432 |
392 #define RAW_CODESYSMETH(cs, m) ((cs)->methods->m##_method) | 433 #define RAW_CODESYSMETH(cs, m) ((cs)->methods->m##_method) |
393 #define HAS_CODESYSMETH_P(cs, m) (!!RAW_CODESYSMETH (cs, m)) | 434 #define HAS_CODESYSMETH_P(cs, m) (!!RAW_CODESYSMETH (cs, m)) |
394 #define CODESYSMETH(cs, m, args) (((cs)->methods->m##_method) args) | 435 #define CODESYSMETH(cs, m, args) (((cs)->methods->m##_method) args) |
410 CODESYSMETH (XCODING_SYSTEM (cs), m, args) | 451 CODESYSMETH (XCODING_SYSTEM (cs), m, args) |
411 #define MAYBE_XCODESYSMETH(cs, m, args) \ | 452 #define MAYBE_XCODESYSMETH(cs, m, args) \ |
412 MAYBE_CODESYSMETH (XCODING_SYSTEM (cs), m, args) | 453 MAYBE_CODESYSMETH (XCODING_SYSTEM (cs), m, args) |
413 #define XCODESYSMETH_OR_GIVEN(cs, m, args, given) \ | 454 #define XCODESYSMETH_OR_GIVEN(cs, m, args, given) \ |
414 CODESYSMETH_OR_GIVEN (XCODING_SYSTEM (cs), m, args, given) | 455 CODESYSMETH_OR_GIVEN (XCODING_SYSTEM (cs), m, args, given) |
415 | |
416 | 456 |
417 /***** Defining new coding-system types *****/ | 457 /***** Defining new coding-system types *****/ |
418 | 458 |
419 extern const struct sized_memory_description coding_system_empty_extra_description; | 459 extern const struct sized_memory_description coding_system_empty_extra_description; |
420 | 460 |
475 xnew_and_zero (struct coding_system_methods); \ | 515 xnew_and_zero (struct coding_system_methods); \ |
476 ty##_coding_system_methods->type = Q##ty; \ | 516 ty##_coding_system_methods->type = Q##ty; \ |
477 ty##_coding_system_methods->extra_description = \ | 517 ty##_coding_system_methods->extra_description = \ |
478 &coding_system_empty_extra_description; \ | 518 &coding_system_empty_extra_description; \ |
479 ty##_coding_system_methods->enumtype = ty##_coding_system; \ | 519 ty##_coding_system_methods->enumtype = ty##_coding_system; \ |
520 ty##_coding_system_methods->query_method = default_query_method; \ | |
480 defsymbol_nodump (&ty##_coding_system_methods->predicate_symbol, \ | 521 defsymbol_nodump (&ty##_coding_system_methods->predicate_symbol, \ |
481 pred_sym); \ | 522 pred_sym); \ |
482 add_entry_to_coding_system_type_list (ty##_coding_system_methods); \ | 523 add_entry_to_coding_system_type_list (ty##_coding_system_methods); \ |
483 dump_add_root_block_ptr (&ty##_coding_system_methods, \ | 524 dump_add_root_block_ptr (&ty##_coding_system_methods, \ |
484 &coding_system_methods_description); \ | 525 &coding_system_methods_description); \ |
581 #define CODING_SYSTEM_EOL_CR(codesys) ((codesys)->eol[EOL_CR]) | 622 #define CODING_SYSTEM_EOL_CR(codesys) ((codesys)->eol[EOL_CR]) |
582 #define CODING_SYSTEM_TEXT_FILE_WRAPPER(codesys) ((codesys)->text_file_wrapper) | 623 #define CODING_SYSTEM_TEXT_FILE_WRAPPER(codesys) ((codesys)->text_file_wrapper) |
583 #define CODING_SYSTEM_AUTO_EOL_WRAPPER(codesys) ((codesys)->auto_eol_wrapper) | 624 #define CODING_SYSTEM_AUTO_EOL_WRAPPER(codesys) ((codesys)->auto_eol_wrapper) |
584 #define CODING_SYSTEM_SUBSIDIARY_PARENT(codesys) ((codesys)->subsidiary_parent) | 625 #define CODING_SYSTEM_SUBSIDIARY_PARENT(codesys) ((codesys)->subsidiary_parent) |
585 #define CODING_SYSTEM_CANONICAL(codesys) ((codesys)->canonical) | 626 #define CODING_SYSTEM_CANONICAL(codesys) ((codesys)->canonical) |
627 #define CODING_SYSTEM_SAFE_CHARSETS(codesys) ((codesys)->safe_charsets) | |
628 #define CODING_SYSTEM_SAFE_CHARS(codesys) ((codesys)->safe_chars) | |
586 | 629 |
587 #define CODING_SYSTEM_CHAIN_CHAIN(codesys) \ | 630 #define CODING_SYSTEM_CHAIN_CHAIN(codesys) \ |
588 (CODING_SYSTEM_TYPE_DATA (codesys, chain)->chain) | 631 (CODING_SYSTEM_TYPE_DATA (codesys, chain)->chain) |
589 #define CODING_SYSTEM_CHAIN_COUNT(codesys) \ | 632 #define CODING_SYSTEM_CHAIN_COUNT(codesys) \ |
590 (CODING_SYSTEM_TYPE_DATA (codesys, chain)->count) | 633 (CODING_SYSTEM_TYPE_DATA (codesys, chain)->count) |
621 CODING_SYSTEM_AUTO_EOL_WRAPPER (XCODING_SYSTEM (codesys)) | 664 CODING_SYSTEM_AUTO_EOL_WRAPPER (XCODING_SYSTEM (codesys)) |
622 #define XCODING_SYSTEM_SUBSIDIARY_PARENT(codesys) \ | 665 #define XCODING_SYSTEM_SUBSIDIARY_PARENT(codesys) \ |
623 CODING_SYSTEM_SUBSIDIARY_PARENT (XCODING_SYSTEM (codesys)) | 666 CODING_SYSTEM_SUBSIDIARY_PARENT (XCODING_SYSTEM (codesys)) |
624 #define XCODING_SYSTEM_CANONICAL(codesys) \ | 667 #define XCODING_SYSTEM_CANONICAL(codesys) \ |
625 CODING_SYSTEM_CANONICAL (XCODING_SYSTEM (codesys)) | 668 CODING_SYSTEM_CANONICAL (XCODING_SYSTEM (codesys)) |
669 #define XCODING_SYSTEM_SAFE_CHARSETS(codesys) \ | |
670 CODING_SYSTEM_SAFE_CHARSETS (XCODING_SYSTEM (codesys)) | |
671 #define XCODING_SYSTEM_SAFE_CHARS(codesys) \ | |
672 CODING_SYSTEM_SAFE_CHARS (XCODING_SYSTEM (codesys)) | |
626 | 673 |
627 #define XCODING_SYSTEM_CHAIN_CHAIN(codesys) \ | 674 #define XCODING_SYSTEM_CHAIN_CHAIN(codesys) \ |
628 CODING_SYSTEM_CHAIN_CHAIN (XCODING_SYSTEM (codesys)) | 675 CODING_SYSTEM_CHAIN_CHAIN (XCODING_SYSTEM (codesys)) |
629 #define XCODING_SYSTEM_CHAIN_COUNT(codesys) \ | 676 #define XCODING_SYSTEM_CHAIN_COUNT(codesys) \ |
630 CODING_SYSTEM_CHAIN_COUNT (XCODING_SYSTEM (codesys)) | 677 CODING_SYSTEM_CHAIN_COUNT (XCODING_SYSTEM (codesys)) |
1021 #endif | 1068 #endif |
1022 | 1069 |
1023 #ifdef MULE | 1070 #ifdef MULE |
1024 DECLARE_CODING_SYSTEM_TYPE (iso2022); | 1071 DECLARE_CODING_SYSTEM_TYPE (iso2022); |
1025 DECLARE_CODING_SYSTEM_TYPE (ccl); | 1072 DECLARE_CODING_SYSTEM_TYPE (ccl); |
1073 DECLARE_CODING_SYSTEM_TYPE (fixed_width); | |
1026 DECLARE_CODING_SYSTEM_TYPE (shift_jis); | 1074 DECLARE_CODING_SYSTEM_TYPE (shift_jis); |
1027 DECLARE_CODING_SYSTEM_TYPE (big5); | 1075 DECLARE_CODING_SYSTEM_TYPE (big5); |
1028 #endif | 1076 #endif |
1029 | 1077 |
1030 #ifdef HAVE_ZLIB | 1078 #ifdef HAVE_ZLIB |
1044 Lisp_Object codesys); | 1092 Lisp_Object codesys); |
1045 Lisp_Object detect_coding_stream (Lisp_Object stream); | 1093 Lisp_Object detect_coding_stream (Lisp_Object stream); |
1046 Ichar decode_big5_char (int o1, int o2); | 1094 Ichar decode_big5_char (int o1, int o2); |
1047 void add_entry_to_coding_system_type_list (struct coding_system_methods *m); | 1095 void add_entry_to_coding_system_type_list (struct coding_system_methods *m); |
1048 Lisp_Object make_internal_coding_system (Lisp_Object existing, | 1096 Lisp_Object make_internal_coding_system (Lisp_Object existing, |
1049 Ascbyte *prefix, | 1097 const Ascbyte *prefix, |
1050 Lisp_Object type, | 1098 Lisp_Object type, |
1051 Lisp_Object description, | 1099 Lisp_Object description, |
1052 Lisp_Object props); | 1100 Lisp_Object props); |
1053 | 1101 |
1054 #define LSTREAM_FL_NO_CLOSE_OTHER (1 << 16) | 1102 #define LSTREAM_FL_NO_CLOSE_OTHER (1 << 16) |