# HG changeset patch # User Kenichi Handa # Date 952409736 0 # Node ID dade22d104f22558ebd6e4ece73c835122f81469 # Parent a89f451a3273d42babe3801b3a2de601c79ac046 Modify comment about coding system property `coding-category'. (make-coding-system): New argument EOL-TYPE. Pay attention to coding-category property of PROPERTIES. diff -r a89f451a3273 -r dade22d104f2 lisp/international/mule.el --- a/lisp/international/mule.el Tue Mar 07 06:14:45 2000 +0000 +++ b/lisp/international/mule.el Tue Mar 07 06:15:36 2000 +0000 @@ -313,15 +313,15 @@ ;; o coding-category ;; ;; The value is a coding category the coding system belongs to. The -;; function `make-coding-system' and `define-coding-system-alias' sets -;; this value automatically. +;; function `make-coding-system' sets this value automatically +;; unless its argument PROPERTIES specifies this property. ;; ;; o alias-coding-systems ;; ;; The value is a list of coding systems of the same alias group. The ;; first element is the coding system made at first, which we call as -;; `base coding system'. The function `make-coding-system' and -;; `define-coding-system-alias' set this value automatically. +;; `base coding system'. The function `make-coding-system' sets this +;; value automatically and `define-coding-system-alias' updates it. ;; ;; o post-read-conversion ;; @@ -529,7 +529,10 @@ subsidiaries)) (defun make-coding-system (coding-system type mnemonic doc-string - &optional flags properties) + &optional + flags + properties + eol-type) "Define a new coding system CODING-SYSTEM (symbol). Remaining arguments are TYPE, MNEMONIC, DOC-STRING, FLAGS (optional), and PROPERTIES (optional) which construct a coding-spec of CODING-SYSTEM @@ -590,6 +593,27 @@ also sets properties `coding-category' and `alias-coding-systems' automatically. +EOL-TYPE specifies the EOL type of the coding-system in one of the +following formats: + + o symbol (unix, dos, or mac) + + The symbol `unix' means Unix-like EOL (LF), `dos' means + DOS-like EOL (CRLF), and `mac' means MAC-like EOL (CR). + + o number (0, 1, or 2) + + The number 0, 1, and 2 mean UNIX, DOS, and MAC-like EOL + respectively. + + o vector of coding-systems of length 3 + + The EOL type is detected automatically for the coding system. + And, according to the detected EOL type, one of the coding + systems in the vector is selected. Elements of the vector + corresponds to Unix-liek EOL, DOS-like EOL, and Mac-like EOL + in this order. + Kludgy features for backward compatibility: 1. If TYPE is 4 and car or cdr of FLAGS is a vector, the vector is @@ -698,22 +722,43 @@ ;; In the old version, the arg PROPERTIES is a list to be ;; set in PLIST as a value of property `safe-charsets'. (plist-put plist 'safe-charsets properties) + ;; In the current version PROPERTIES is a property list. + ;; Reflect it into PLIST one by one. (let ((l properties)) (while l (plist-put plist (car (car l)) (cdr (car l))) (setq l (cdr l))))) + ;; The property `coding-category' may have been set differently + ;; through PROPERTIES. + (setq coding-category (plist-get plist 'coding-category)) (aset coding-spec coding-spec-plist-idx plist)) (put coding-system 'coding-system coding-spec) (put coding-category 'coding-systems (cons coding-system (get coding-category 'coding-systems)))) - ;; Next, set a value of `eol-type' property. The value is a vector - ;; of subsidiary coding systems, each corresponds to a coding system - ;; for the detected end-of-line format. - (put coding-system 'eol-type - (if (or (<= type 3) (= type 5)) - (make-subsidiary-coding-system coding-system) - 0)) + ;; Next, set a value of `eol-type' property. + (if (and (not eol-type) + (or (<= type 3) (= type 5))) + ;; If EOL-TYPE is nil, set a vector of subsidiary coding + ;; systems, each corresponds to a coding system for the detected + ;; EOL format. + (setq eol-type (make-subsidiary-coding-system coding-system))) + (setq eol-type + (cond ((or (eq eol-type 'unix) (null eol-type)) + 0) + ((eq eol-type 'dos) + 1) + ((eq eol-type 'mac) + 2) + ((or (and (vectorp eol-type) + (= (length eol-type) 3)) + (and (numberp eol-type) + (and (>= eol-type 0) + (<= eol-type 2)))) + eol-type) + (t + (error "Invalid EOL-TYPE spec:%S" eol-type)))) + (put coding-system 'eol-type eol-type) ;; At last, register CODING-SYSTEM in `coding-system-list' and ;; `coding-system-alist'.