.emacs-my
changeset 1324 f6fc0d332bbc
parent 1323 08ca6cc08d2c
child 1325 d083de233368
--- a/.emacs-my	Sat Jan 23 21:08:36 2016 +0200
+++ b/.emacs-my	Thu Jan 28 22:55:06 2016 +0200
@@ -2885,7 +2885,7 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (message "html")
 
-(defun html-charref-escape-region (start end)
+(defun my-html-charref-escape-region (start end)
   (interactive "r")
   (save-excursion
     (save-restriction
@@ -2898,43 +2898,52 @@
       (replace-string ">" ">")
       )))
 
-(defun html-charref-from-char (char)
+(defun my-html-charref-from-char (char)
   (format "&#%d;" char)
   )
 
-(defun html-charref-from-string (string)
+(defun my-html-charref-from-string (string)
   (let ((res ""))
     (mapc
-     (lambda (char) (setq res (concat res (html-charref-from-char char))))
+     (lambda (char) (setq res (concat res (my-html-charref-from-char char))))
      string)
     res
     ) )
 
-(defun html-charref-escape-region2 (begin end &optional prefix)
+(defun my-html-charref-escape-region2 (begin end &optional prefix)
   (interactive "r\nP")
   (if prefix
       (save-excursion
         (goto-char begin)
-        (insert (html-charref-from-string (delete-and-extract-region begin end))))
-    (html-charref-from-string (buffer-substring begin end))
+        (insert (my-html-charref-from-string (delete-and-extract-region begin end))))
+    (my-html-charref-from-string (buffer-substring begin end))
     ))
 
-(defun html-charref-to-string (html)
-  (let ((res "") (pos 0))
-    (while (string-match "&#\\([[:digit:]]+\\);" html pos)
-      (setq res (concat res (string (string-to-int (substring html (match-beginning 1) (match-end 1)) 10))))
-      (setq pos (match-end 0))
-      )
-    res
-    ) )
-
-(defun html-charref-unescape-region (begin end &optional prefix)
+(defun my-html-charref-to-string (html)
+  (let (str)
+    (with-temp-buffer
+      (insert html)
+      (goto-char (point-min))
+      (while (search-forward-regexp "&\\(?:#\\([[:digit:]]+\\)\\|\\(lt\\|gt\\|amp\\)\\);" nil t)
+        (setq str (or (match-string 1) (match-string 2)))
+        (cond
+         ((equal str "lt")
+          (replace-match "<" t t))
+         ((equal str "gt")
+          (replace-match ">" t t))
+         ((equal str "amp")
+          (replace-match "&" t t))
+         ((> (string-to-number str) 0)
+          (replace-match (string (string-to-number str 10)) t t))))
+      (buffer-string))))
+
+(defun my-html-charref-unescape-region (begin end &optional prefix)
   (interactive "r\nP")
   (if prefix
       (save-excursion
         (goto-char begin)
-        (insert (html-charref-to-string (delete-and-extract-region begin end))))
-    (html-charref-to-string (buffer-substring begin end))
+        (insert (my-html-charref-to-string (delete-and-extract-region begin end))))
+    (my-html-charref-to-string (buffer-substring begin end))
     ))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;