# HG changeset patch # User Oleksandr Gavenko # Date 1454014506 -7200 # Node ID f6fc0d332bbcda4c987578e421988c336ceb32cf # Parent 08ca6cc08d2c906d177e8f599b12d4af876ec66f Add my-* prefix to html-charref-* functions. Add support for < / > / & to un-escape function. diff -r 08ca6cc08d2c -r f6fc0d332bbc .emacs-my --- 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)) )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;