ruby-changes:41504
From: nobu <ko1@a...>
Date: Mon, 18 Jan 2016 22:49:17 +0900 (JST)
Subject: [ruby-changes:41504] nobu:r53578 (trunk): ruby-additional.el: ruby-decode-unicode
nobu 2016-01-18 22:49:51 +0900 (Mon, 18 Jan 2016) New Revision: 53578 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=53578 Log: ruby-additional.el: ruby-decode-unicode * misc/ruby-additional.el (ruby-decode-unicode): new function to convert escaped Unicode to raw string. Modified files: trunk/misc/ruby-additional.el Index: misc/ruby-additional.el =================================================================== --- misc/ruby-additional.el (revision 53577) +++ misc/ruby-additional.el (revision 53578) @@ -106,7 +106,7 @@ Emacs to Ruby." https://github.com/ruby/ruby/blob/trunk/misc/ruby-additional.el#L106 (t (when ruby-insert-encoding-magic-comment (insert "# -*- coding: " coding-system " -*-\n")))))))) - (define-key ruby-mode-map "\C-cU" 'ruby-encode-unicode) + (define-key ruby-mode-map "\C-cU" 'ruby-encode-decode-unicode) (defun ruby-encode-unicode (beg end) "Convert non-ascii string in the given region to \\u{} form." @@ -131,6 +131,32 @@ Emacs to Ruby." https://github.com/ruby/ruby/blob/trunk/misc/ruby-additional.el#L131 (setq str (mapconcat f str sep)) (delete-region (match-beginning 0) (match-end 0)) (insert b str e)))) + + (defun ruby-decode-unicode (beg end) + "Convert escaped Unicode in the given region to raw string." + (interactive "r") + (setq end (set-marker (make-marker) end)) + (goto-char beg) + (while (and (< (point) end) + (re-search-forward "\\\\u\\([0-9a-fA-F]\\{4\\}\\)\\|\\\\u{\\([0-9a-fA-F \t]+\\)}" end t)) + (let ((b (match-beginning 0)) (e (match-end 0)) + (s (match-string-no-properties 1))) + (if s + (setq s (cons s nil)) + (goto-char (match-beginning 2)) + (while (looking-at "[ \t]*\\([0-9a-fA-F]+\\)") + (setq s (cons (match-string-no-properties 1) s)) + (goto-char (match-end 0)))) + (setq s (mapconcat (lambda (c) (format "%c" (string-to-int c 16))) + (nreverse s) "")) + (delete-region b e) + (insert s)) + )) + + (defun ruby-encode-decode-unicode (dec beg end) + "Convert Unicode <-> \\u{} in the given region." + (interactive "P\nr") + (if dec (ruby-decode-unicode beg end) (ruby-encode-unicode beg end))) )) ;; monkey-patching ruby-mode.el in Emacs 24, as r49872. -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/