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/