Mercurial > hg > xemacs-beta
diff 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 |
line wrap: on
line diff
--- a/src/file-coding.h Sat Dec 26 00:20:27 2009 -0600 +++ b/src/file-coding.h Sat Dec 26 21:18:49 2009 -0600 @@ -208,7 +208,7 @@ }; typedef struct Lisp_Coding_System Lisp_Coding_System; -DECLARE_LRECORD (coding_system, Lisp_Coding_System); +DECLARE_LISP_OBJECT (coding_system, Lisp_Coding_System); #define XCODING_SYSTEM(x) XRECORD (x, coding_system, Lisp_Coding_System) #define wrap_coding_system(p) wrap_record (p, coding_system) #define CODING_SYSTEMP(x) RECORDP (x, coding_system) @@ -230,7 +230,8 @@ ccl_coding_system, shift_jis_coding_system, big5_coding_system, - unicode_coding_system + unicode_coding_system, + fixed_width_coding_system }; struct coding_system_methods @@ -318,6 +319,28 @@ const unsigned char *src, unsigned_char_dynarr *dst, Bytecount n); + /* Query method: Check whether the buffer text between point and END + can be encoded by this coding system. Returns + either nil (meaning the text can be encoded by the coding system) or a + range table object describing the stretches that the coding system + cannot encode. + + Possible values for flags are below, search for + QUERY_METHOD_IGNORE_INVALID_SEQUENCES. + + Coding systems are expected to be able to behave sensibly with all + possible octets on decoding, which is why this method is only available + for encoding. */ + Lisp_Object (*query_method) (Lisp_Object coding_system, struct buffer *buf, + Charbpos end, int flags); + + /* Same as the previous method, but this works in the context of + lstreams. (Where the data do need to be copied, unfortunately.) The + intention is to implement the query method for the mswindows-multibyte + coding systems in terms of a query_lstream method. */ + Lisp_Object (*query_lstream_method) (struct coding_stream *str, + const Ibyte *start, Bytecount n); + /* Coding mark method: Mark any Lisp objects in the type-specific data attached to `struct coding_stream'. Optional. */ void (*mark_coding_stream_method) (struct coding_stream *str); @@ -387,6 +410,24 @@ int coding_data_size; }; +/* Values for flags, as passed to query_method. */ + +#define QUERY_METHOD_IGNORE_INVALID_SEQUENCES 0x0001 +#define QUERY_METHOD_ERRORP 0x0002 +#define QUERY_METHOD_HIGHLIGHT 0x0004 + +enum query_coding_failure_reasons + { + query_coding_succeeded = 0, + query_coding_unencodable = 1, + query_coding_invalid_sequence = 2 + }; + +extern Lisp_Object Qquery_coding_warning_face; + +Lisp_Object default_query_method (Lisp_Object, struct buffer *, Charbpos, + int); + /***** Calling a coding-system method *****/ #define RAW_CODESYSMETH(cs, m) ((cs)->methods->m##_method) @@ -413,7 +454,6 @@ #define XCODESYSMETH_OR_GIVEN(cs, m, args, given) \ CODESYSMETH_OR_GIVEN (XCODING_SYSTEM (cs), m, args, given) - /***** Defining new coding-system types *****/ extern const struct sized_memory_description coding_system_empty_extra_description; @@ -477,6 +517,7 @@ ty##_coding_system_methods->extra_description = \ &coding_system_empty_extra_description; \ ty##_coding_system_methods->enumtype = ty##_coding_system; \ + ty##_coding_system_methods->query_method = default_query_method; \ defsymbol_nodump (&ty##_coding_system_methods->predicate_symbol, \ pred_sym); \ add_entry_to_coding_system_type_list (ty##_coding_system_methods); \ @@ -583,6 +624,8 @@ #define CODING_SYSTEM_AUTO_EOL_WRAPPER(codesys) ((codesys)->auto_eol_wrapper) #define CODING_SYSTEM_SUBSIDIARY_PARENT(codesys) ((codesys)->subsidiary_parent) #define CODING_SYSTEM_CANONICAL(codesys) ((codesys)->canonical) +#define CODING_SYSTEM_SAFE_CHARSETS(codesys) ((codesys)->safe_charsets) +#define CODING_SYSTEM_SAFE_CHARS(codesys) ((codesys)->safe_chars) #define CODING_SYSTEM_CHAIN_CHAIN(codesys) \ (CODING_SYSTEM_TYPE_DATA (codesys, chain)->chain) @@ -623,6 +666,10 @@ CODING_SYSTEM_SUBSIDIARY_PARENT (XCODING_SYSTEM (codesys)) #define XCODING_SYSTEM_CANONICAL(codesys) \ CODING_SYSTEM_CANONICAL (XCODING_SYSTEM (codesys)) +#define XCODING_SYSTEM_SAFE_CHARSETS(codesys) \ + CODING_SYSTEM_SAFE_CHARSETS (XCODING_SYSTEM (codesys)) +#define XCODING_SYSTEM_SAFE_CHARS(codesys) \ + CODING_SYSTEM_SAFE_CHARS (XCODING_SYSTEM (codesys)) #define XCODING_SYSTEM_CHAIN_CHAIN(codesys) \ CODING_SYSTEM_CHAIN_CHAIN (XCODING_SYSTEM (codesys)) @@ -1023,6 +1070,7 @@ #ifdef MULE DECLARE_CODING_SYSTEM_TYPE (iso2022); DECLARE_CODING_SYSTEM_TYPE (ccl); +DECLARE_CODING_SYSTEM_TYPE (fixed_width); DECLARE_CODING_SYSTEM_TYPE (shift_jis); DECLARE_CODING_SYSTEM_TYPE (big5); #endif @@ -1046,7 +1094,7 @@ Ichar decode_big5_char (int o1, int o2); void add_entry_to_coding_system_type_list (struct coding_system_methods *m); Lisp_Object make_internal_coding_system (Lisp_Object existing, - Ascbyte *prefix, + const Ascbyte *prefix, Lisp_Object type, Lisp_Object description, Lisp_Object props);