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)