summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Maus <dmaus@ictsoc.de>2010-06-19 19:25:40 +0000
committerCarsten Dominik <carsten.dominik@gmail.com>2010-07-01 15:08:43 +0200
commitea47dd58ffabe55f710e1ea673b22e4c4e4fd3ef (patch)
treee04fe07c005053c9d5843fbbfbfc7ec4c1df13e6
parent516640aff96b627d8ad412f6cdb436535600aff0 (diff)
downloadorg-mode-ea47dd58ffabe55f710e1ea673b22e4c4e4fd3ef.tar.gz
Unescape protected entities defined in `xml-entity-alist'.
* org-feed.el (org-feed-unescape): New function. Unescape protected entities. (org-feed-parse-atom-entry): Use function for atom:content type text and html.
-rw-r--r--lisp/org-feed.el15
1 files changed, 13 insertions, 2 deletions
diff --git a/lisp/org-feed.el b/lisp/org-feed.el
index c86ca90..19e4bf2 100644
--- a/lisp/org-feed.el
+++ b/lisp/org-feed.el
@@ -267,6 +267,17 @@ have been saved."
(defvar org-feed-buffer "*Org feed*"
"The buffer used to retrieve a feed.")
+(defun org-feed-unescape (s)
+ "Unescape protected entities in S."
+ (let ((re (concat "&\\("
+ (mapconcat (lambda (e)
+ (car e)) xml-entity-alist "\\|")
+ "\\);")))
+ (while (string-match re s)
+ (setq s (replace-match
+ (cdr (assoc (match-string 1 s) xml-entity-alist)) nil nil s)))
+ s))
+
;;;###autoload
(defun org-feed-update-all ()
"Get inbox items from all feeds in `org-feed-alist'."
@@ -646,10 +657,10 @@ formatted as a string, not the original XML data."
(cond
((string= type "text")
;; We like plain text.
- (setq entry (plist-put entry :description (car (xml-node-children content)))))
+ (setq entry (plist-put entry :description (org-feed-unescape (car (xml-node-children content))))))
((string= type "html")
;; TODO: convert HTML to Org markup.
- (setq entry (plist-put entry :description (car (xml-node-children content)))))
+ (setq entry (plist-put entry :description (org-feed-unescape (car (xml-node-children content))))))
((string= type "xhtml")
;; TODO: convert XHTML to Org markup.
(setq entry (plist-put entry :description (prin1-to-string (xml-node-children content)))))