[前][次][番号順一覧][スレッド一覧]

ruby-changes:31107

From: knu <ko1@a...>
Date: Tue, 8 Oct 2013 03:21:28 +0900 (JST)
Subject: [ruby-changes:31107] knu:r43186 (trunk): misc/ruby-mode.el: Improve `ruby-mode-set-encoding`.

knu	2013-10-08 03:21:21 +0900 (Tue, 08 Oct 2013)

  New Revision: 43186

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=43186

  Log:
    misc/ruby-mode.el: Improve `ruby-mode-set-encoding`.
    
    * misc/ruby-additional.el (ruby-mode-set-encoding): Add support
      for `prefer-utf-8` which was introduced in Emacs trunk.
    
    * misc/ruby-additional.el (ruby-encoding-map): Add a mapping from
      `japanese-cp932` to `cp932` to fix the problem where saving a
      source file written in Shift_JIS twice would end up having
      `coding: japanese-cp932` which Ruby could not recognize.
    
    * misc/ruby-additional.el (ruby-mode-set-encoding): Add support
      for encodings mapped to nil in `ruby-encoding-map`.
    
    * misc/ruby-additional.el (ruby-encoding-map): Map `us-ascii` and
      `utf-8` to nil by default, meaning they need not be explicitly
      declared in magic comment.
    
    * misc/ruby-additional.el (ruby-encoding-map): Add type
      declaration for better customize UI.
    
    * misc/ruby-mode.el: Ditto for the above.

  Modified files:
    trunk/ChangeLog
    trunk/misc/ruby-additional.el
    trunk/misc/ruby-mode.el
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 43185)
+++ ChangeLog	(revision 43186)
@@ -1,3 +1,25 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Tue Oct  8 03:19:19 2013  Akinori MUSHA  <knu@i...>
+
+	* misc/ruby-additional.el (ruby-mode-set-encoding): Add support
+	  for `prefer-utf-8` which was introduced in Emacs trunk.
+
+	* misc/ruby-additional.el (ruby-encoding-map): Add a mapping from
+	  `japanese-cp932` to `cp932` to fix the problem where saving a
+	  source file written in Shift_JIS twice would end up having
+	  `coding: japanese-cp932` which Ruby could not recognize.
+
+	* misc/ruby-additional.el (ruby-mode-set-encoding): Add support
+	  for encodings mapped to nil in `ruby-encoding-map`.
+
+	* misc/ruby-additional.el (ruby-encoding-map): Map `us-ascii` and
+	  `utf-8` to nil by default, meaning they need not be explicitly
+	  declared in magic comment.
+
+	* misc/ruby-additional.el (ruby-encoding-map): Add type
+	  declaration for better customize UI.
+
+	* misc/ruby-mode.el: Ditto for the above.
+
 Tue Oct  8 00:14:53 2013  Akinori MUSHA  <knu@i...>
 
 	* misc/ruby-additional.el: Add a standard header and footer,
Index: misc/ruby-mode.el
===================================================================
--- misc/ruby-mode.el	(revision 43185)
+++ misc/ruby-mode.el	(revision 43186)
@@ -240,8 +240,16 @@ Also ignores spaces after parenthesis wh https://github.com/ruby/ruby/blob/trunk/misc/ruby-mode.el#L240
   "Default deep indent style."
   :options '(t nil space) :group 'ruby)
 
-(defcustom ruby-encoding-map '((shift_jis . cp932) (shift-jis . cp932))
-  "Alist to map encoding name from emacs to ruby."
+(defcustom ruby-encoding-map
+  '((us-ascii       . nil)       ;; Do not put coding: us-ascii
+    (utf-8          . nil)       ;; Do not put coding: utf-8
+    (shift-jis      . cp932)     ;; Emacs charset name of Shift_JIS
+    (shift_jis      . cp932)     ;; MIME charset name of Shift_JIS
+    (japanese-cp932 . cp932))    ;; Emacs charset name of CP932
+  "Alist to map encoding name from Emacs to Ruby.
+Associating an encoding name with nil means it needs not be
+explicitly declared in magic comment."
+  :type '(repeat (cons (symbol :tag "From") (symbol :tag "To")))
   :group 'ruby)
 
 (defcustom ruby-use-encoding-map t
@@ -326,39 +334,58 @@ Also ignores spaces after parenthesis wh https://github.com/ruby/ruby/blob/trunk/misc/ruby-mode.el#L334
   (setq paragraph-ignore-fill-prefix t))
 
 (defun ruby-mode-set-encoding ()
-  (save-excursion
-    (widen)
-    (goto-char (point-min))
-    (when (re-search-forward "[^\0-\177]" nil t)
-      (goto-char (point-min))
-      (let ((coding-system
-             (or coding-system-for-write
-                 buffer-file-coding-system)))
-        (if coding-system
-            (setq coding-system
-                  (or (coding-system-get coding-system 'mime-charset)
-                      (coding-system-change-eol-conversion coding-system nil))))
-        (setq coding-system
-              (if coding-system
-                  (symbol-name
-                   (or (and ruby-use-encoding-map
-                            (cdr (assq coding-system ruby-encoding-map)))
-                       coding-system))
-                "ascii-8bit"))
-        (if (looking-at "^#!") (beginning-of-line 2))
-        (cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)\\s *\\(;\\|-\*-\\)")
-               (unless (string= (match-string 2) coding-system)
-                 (goto-char (match-beginning 2))
-                 (delete-region (point) (match-end 2))
-                 (and (looking-at "-\*-")
-                      (let ((n (skip-chars-backward " ")))
-                        (cond ((= n 0) (insert "  ") (backward-char))
-                              ((= n -1) (insert " "))
-                              ((forward-char)))))
-                 (insert coding-system)))
-              ((looking-at "\\s *#.*coding\\s *[:=]"))
-              (t (insert "# -*- coding: " coding-system " -*-\n"))
-              )))))
+  "Insert or update a magic comment header with the proper encoding.
+`ruby-encoding-map' is looked up to convert an encoding name from
+Emacs to Ruby."
+  (let* ((nonascii
+          (save-excursion
+            (widen)
+            (goto-char (point-min))
+            (re-search-forward "[^\0-\177]" nil t)))
+         (coding-system
+          (or coding-system-for-write
+              buffer-file-coding-system))
+         (coding-system
+          (and coding-system
+               (coding-system-change-eol-conversion coding-system nil)))
+         (coding-system
+          (and coding-system
+               (or
+                (coding-system-get coding-system :mime-charset)
+                (let ((coding-type (coding-system-get coding-system :coding-type)))
+                  (cond ((eq coding-type 'undecided)
+                         (if nonascii
+                             (if (coding-system-get coding-system :prefer-utf-8)
+                                 'utf-8 'ascii-8bit)))
+                        ((memq coding-type '(utf-8 shift-jis))
+                         coding-type))))))
+         (coding-system
+          (or coding-system
+              'us-ascii))
+         (coding-system
+          (let ((cons (assq coding-system ruby-encoding-map)))
+            (if cons (cdr cons) coding-system)))
+         (coding-system
+          (and coding-system
+               (symbol-name coding-system))))
+    (if coding-system
+        (save-excursion
+          (widen)
+          (goto-char (point-min))
+          (if (looking-at "^#!") (beginning-of-line 2))
+          (cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)\\s *\\(;\\|-\*-\\)")
+                 (unless (string= (match-string 2) coding-system)
+                   (goto-char (match-beginning 2))
+                   (delete-region (point) (match-end 2))
+                   (and (looking-at "-\*-")
+                        (let ((n (skip-chars-backward " ")))
+                          (cond ((= n 0) (insert "  ") (backward-char))
+                                ((= n -1) (insert " "))
+                                ((forward-char)))))
+                   (insert coding-system)))
+                ((looking-at "\\s *#.*coding\\s *[:=]"))
+                (t (when ruby-insert-encoding-magic-comment
+                     (insert "# -*- coding: " coding-system " -*-\n"))))))))
 
 (defun ruby-current-indentation ()
   (save-excursion
Index: misc/ruby-additional.el
===================================================================
--- misc/ruby-additional.el	(revision 43185)
+++ misc/ruby-additional.el	(revision 43186)
@@ -73,45 +73,71 @@ https://github.com/ruby/ruby/blob/trunk/misc/ruby-additional.el#L73
        (or (ruby-brace-to-do-end)
            (ruby-do-end-to-brace)))
 
+     (defcustom ruby-encoding-map
+       '((us-ascii       . nil)       ;; Do not put coding: us-ascii
+         (utf-8          . nil)       ;; Do not put coding: utf-8
+         (shift-jis      . cp932)     ;; Emacs charset name of Shift_JIS
+         (shift_jis      . cp932)     ;; MIME charset name of Shift_JIS
+         (japanese-cp932 . cp932))    ;; Emacs charset name of CP932
+       "Alist to map encoding name from Emacs to Ruby.
+Associating an encoding name with nil means it needs not be
+explicitly declared in magic comment."
+       :type '(repeat (cons (symbol :tag "From") (symbol :tag "To")))
+       :group 'ruby)
+
      (defun ruby-mode-set-encoding ()
-       "Insert a magic comment header with the proper encoding always.
-Now encoding needs to be set always explicitly actually."
-       (save-excursion
-         (let ((coding-system))
-           (widen)
-           (goto-char (point-min))
-           (if (re-search-forward "[^\0-\177]" nil t)
-               (progn
+       "Insert or update a magic comment header with the proper encoding.
+`ruby-encoding-map' is looked up to convert an encoding name from
+Emacs to Ruby."
+       (let* ((nonascii
+               (save-excursion
+                 (widen)
                  (goto-char (point-min))
-                 (setq coding-system
-                       (or coding-system-for-write
-                           buffer-file-coding-system))
-                 (if coding-system
-                     (setq coding-system
-                           (or (coding-system-get coding-system 'mime-charset)
-                               (coding-system-change-eol-conversion coding-system nil))))
-                 (setq coding-system
-                       (if coding-system
-                           (symbol-name
-                            (or (and ruby-use-encoding-map
-                                     (cdr (assq coding-system ruby-encoding-map)))
-                                coding-system))
-                         "ascii-8bit")))
-             (setq coding-system "us-ascii"))
-           (if (looking-at "^#!") (beginning-of-line 2))
-           (cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)\\s *\\(;\\|-\*-\\)")
-                  (unless (string= (match-string 2) coding-system)
-                    (goto-char (match-beginning 2))
-                    (delete-region (point) (match-end 2))
-                    (and (looking-at "-\*-")
-                         (let ((n (skip-chars-backward " ")))
-                           (cond ((= n 0) (insert "  ") (backward-char))
-                                 ((= n -1) (insert " "))
-                                 ((forward-char)))))
-                    (insert coding-system)))
-                 ((looking-at "\\s *#.*coding\\s *[:=]"))
-                 (t (when ruby-insert-encoding-magic-comment
-                      (insert "# -*- coding: " coding-system " -*-\n")))))))
+                 (re-search-forward "[^\0-\177]" nil t)))
+              (coding-system
+               (or coding-system-for-write
+                   buffer-file-coding-system))
+              (coding-system
+               (and coding-system
+                    (coding-system-change-eol-conversion coding-system nil)))
+              (coding-system
+               (and coding-system
+                    (or
+                     (coding-system-get coding-system :mime-charset)
+                     (let ((coding-type (coding-system-get coding-system :coding-type)))
+                       (cond ((eq coding-type 'undecided)
+                              (if nonascii
+                                  (if (coding-system-get coding-system :prefer-utf-8)
+                                      'utf-8 'ascii-8bit)))
+                             ((memq coding-type '(utf-8 shift-jis))
+                              coding-type))))))
+              (coding-system
+               (or coding-system
+                   'us-ascii))
+              (coding-system
+               (let ((cons (assq coding-system ruby-encoding-map)))
+                 (if cons (cdr cons) coding-system)))
+              (coding-system
+               (and coding-system
+                    (symbol-name coding-system))))
+         (if coding-system
+             (save-excursion
+               (widen)
+               (goto-char (point-min))
+               (if (looking-at "^#!") (beginning-of-line 2))
+               (cond ((looking-at "\\s *#.*-\*-\\s *\\(en\\)?coding\\s *:\\s *\\([-a-z0-9_]*\\)\\s *\\(;\\|-\*-\\)")
+                      (unless (string= (match-string 2) coding-system)
+                        (goto-char (match-beginning 2))
+                        (delete-region (point) (match-end 2))
+                        (and (looking-at "-\*-")
+                             (let ((n (skip-chars-backward " ")))
+                               (cond ((= n 0) (insert "  ") (backward-char))
+                                     ((= n -1) (insert " "))
+                                     ((forward-char)))))
+                        (insert coding-system)))
+                     ((looking-at "\\s *#.*coding\\s *[:=]"))
+                     (t (when ruby-insert-encoding-magic-comment
+                          (insert "# -*- coding: " coding-system " -*-\n"))))))))
 
      ))
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]