changeset 68209:ac1d7b21ddfc

(autoload-coding-system): Prepare for EOL variants.
author Kenichi Handa <handa@m17n.org>
date Mon, 16 Jan 2006 12:07:26 +0000
parents 4bc30665eef2
children 64f09dba41dc
files lisp/international/mule.el
diffstat 1 files changed, 31 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/international/mule.el	Mon Jan 16 12:07:08 2006 +0000
+++ b/lisp/international/mule.el	Mon Jan 16 12:07:26 2006 +0000
@@ -1144,7 +1144,11 @@
 FROM is a form to evaluate to define the coding-system."
   (put symbol 'coding-system-define-form form)
   (setq coding-system-alist (cons (list (symbol-name symbol))
-				  coding-system-alist)))
+				  coding-system-alist))
+  (dolist (elt '("-unix" "-dos" "-mac"))
+    (let ((name (concat (symbol-name symbol) elt)))
+      (put (intern name) 'coding-system-define-form form)
+      (setq coding-system-alist (cons (list name) coding-system-alist)))))
 
 (defun set-buffer-file-coding-system (coding-system &optional force nomodify)
   "Set the file coding-system of the current buffer to CODING-SYSTEM.
@@ -1589,6 +1593,23 @@
   :type '(repeat (cons (regexp :tag "Regexp")
 		       (symbol :tag "Coding system"))))
 
+(defun auto-coding-regexp-alist-lookup (from to)
+  "Lookup `auto-coding-regexp-alist' for the contents of the current buffer.
+The value is a coding system is specified for the region FROM and TO,
+or nil."
+  (save-excursion
+    (goto-char from)
+    (let ((alist auto-coding-regexp-alist)
+	  coding-system)
+      (while (and alist (not coding-system))
+	(let ((regexp (car (car alist))))
+	  (if enable-multibyte-characters
+	      (setq regexp (string-to-multibyte regexp)))
+	  (if (re-search-forward regexp to t)
+	      (setq coding-system (cdr (car alist)))
+	    (setq alist (cdr alist)))))
+      coding-system)))
+
 ;; See the bottom of this file for built-in auto coding functions.
 (defcustom auto-coding-functions '(sgml-xml-auto-coding-function
 				   sgml-html-meta-auto-coding-function)
@@ -1648,24 +1669,15 @@
 of CODING is not checked; it's callers responsibility to check
 it.
 
-If nothing is specified, the return value is nil.
-
-The variable `set-auto-coding-function' (which see) is set to this
-function by default."
+If nothing is specified, the return value is nil."
   (or (let ((coding-system (auto-coding-alist-lookup filename)))
 	(if coding-system
 	    (cons coding-system 'auto-coding-alist)))
       ;; Try using `auto-coding-regexp-alist'.
-      (save-excursion
-	(let ((alist auto-coding-regexp-alist)
-	      coding-system)
-	  (while (and alist (not coding-system))
-	    (let ((regexp (car (car alist))))
-	      (when (re-search-forward regexp (+ (point) size) t)
-		(setq coding-system (cdr (car alist)))))
-	    (setq alist (cdr alist)))
-	  (if coding-system
-	      (cons coding-system 'auto-coding-regexp-alist))))
+      (let ((coding-system (auto-coding-regexp-alist-lookup (point)
+							    (+ (point) size))))
+	(if coding-system
+	    (cons coding-system 'auto-coding-regexp-alist)))
       (let* ((case-fold-search t)
 	     (head-start (point))
 	     (head-end (+ head-start (min size 1024)))
@@ -1758,7 +1770,10 @@
 (defun set-auto-coding (filename size)
   "Return coding system for a file FILENAME of which SIZE bytes follow point.
 See `find-auto-coding' for how the coding system is found.
-Return nil if an invalid coding system is found."
+Return nil if an invalid coding system is found.
+
+The variable `set-auto-coding-function' (which see) is set to this
+function by default."
   (let ((found (find-auto-coding filename size)))
     (if (and found (coding-system-p (car found)))
 	(car found))))