aboutsummaryrefslogtreecommitdiffstats
path: root/misc
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-01-18 13:49:51 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-01-18 13:49:51 +0000
commit8d6d6116ac3b737ee51af40ce8d0c735bae44e8e (patch)
treee5c03ad4e17dd99e6f924857f1d419fc76f3c64d /misc
parent90d606218187e68af95e301ccc1c1fb61a23e210 (diff)
downloadruby-8d6d6116ac3b737ee51af40ce8d0c735bae44e8e.tar.gz
ruby-additional.el: ruby-decode-unicode
* misc/ruby-additional.el (ruby-decode-unicode): new function to convert escaped Unicode to raw string. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'misc')
-rw-r--r--misc/ruby-additional.el28
1 files changed, 27 insertions, 1 deletions
diff --git a/misc/ruby-additional.el b/misc/ruby-additional.el
index 2aa20cba38..198510979e 100644
--- a/misc/ruby-additional.el
+++ b/misc/ruby-additional.el
@@ -106,7 +106,7 @@ Emacs to Ruby."
(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."
(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.