| 
					
				 | 
			
			
				@@ -1,6 +1,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;; org-feed.el --- Add RSS feed items to Org files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-;; Copyright (C) 2009-2015 Free Software Foundation, Inc. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+;; Copyright (C) 2009-2016 Free Software Foundation, Inc. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;; Author: Carsten Dominik <carsten at orgmode dot org> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;; Keywords: outlines, hypermedia, calendar, wp 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -513,66 +513,70 @@ ENTRY is a property list.  This function adds a `:formatted-for-org' property 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 and returns the full property list. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 If that property is already present, nothing changes." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (require 'org-capture) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  (if formatter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (funcall formatter entry) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    (let (dlines time escape name tmp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 v-h v-t v-T v-u v-U v-a) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      (setq dlines (org-split-string (or (plist-get entry :description) "???") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				     "\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    v-h (or (plist-get entry :title) (car dlines) "???") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    time (or (if (plist-get entry :pubDate) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 (org-read-date t t (plist-get entry :pubDate))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		     (current-time)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    v-t (format-time-string (org-time-stamp-format nil nil) time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    v-T (format-time-string (org-time-stamp-format t   nil) time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    v-u (format-time-string (org-time-stamp-format nil t)   time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    v-U (format-time-string (org-time-stamp-format t   t)   time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    v-a (if (setq tmp (or (and (plist-get entry :guid-permalink) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				       (plist-get entry :guid)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				  (plist-get entry :link))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    (concat "[[" tmp "]]\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		  "")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (if formatter (funcall formatter entry) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    (let* ((dlines 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            (org-split-string (or (plist-get entry :description) "???") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                              "\n")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (time (or (if (plist-get entry :pubDate) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                         (org-read-date t t (plist-get entry :pubDate))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     (current-time))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (v-h (or (plist-get entry :title) (car dlines) "???")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (v-t (format-time-string (org-time-stamp-format nil nil) time)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (v-T (format-time-string (org-time-stamp-format t   nil) time)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (v-u (format-time-string (org-time-stamp-format nil t)   time)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (v-U (format-time-string (org-time-stamp-format t   t)   time)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+           (v-a (let ((tmp (or (and (plist-get entry :guid-permalink) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				    (plist-get entry :guid)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			       (plist-get entry :link)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		  (if tmp (format "[[%s]]\n" tmp ) "")))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       (with-temp-buffer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(insert template) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	;; Simple %-escapes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	;; before embedded elisp to support simple %-escapes as 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	;; arguments for embedded elisp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(goto-char (point-min)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(while (re-search-forward "%\\([a-zA-Z]+\\)" nil t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  (unless (org-capture-escaped-%) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (setq name (match-string 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		  escape (org-capture-inside-embedded-elisp-p)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (cond 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     ((member name '("h" "t" "T" "u" "U" "a")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      (setq tmp (symbol-value (intern (concat "v-" name))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	     ((setq tmp (plist-get entry (intern (concat ":" name)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      (save-excursion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		(save-match-data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		  (beginning-of-line 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		  (when (looking-at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 (concat "^\\([ \t]*\\)%" name "[ \t]*$")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    (setq tmp (org-feed-make-indented-block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			       tmp (org-get-indentation)))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	    (when tmp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      ;; escape string delimiters `"' when inside %() embedded lisp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      (when escape 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		(setq tmp (replace-regexp-in-string "\"" "\\\\\"" tmp))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	      (replace-match tmp t t)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	;; %() embedded elisp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(org-capture-expand-embedded-elisp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	(decode-coding-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 (buffer-string) (detect-coding-region (point-min) (point-max) t)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (insert template) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (goto-char (point-min)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ;; Mark %() embedded elisp for later evaluation. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (org-capture-expand-embedded-elisp 'mark) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ;; Simple %-escapes 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (while (re-search-forward "%\\([a-zA-Z]+\\)" nil t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          (unless (org-capture-escaped-%) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            (let ((replacement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                   (pcase (match-string-no-properties 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     ("h" v-h) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     ("t" v-t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     ("T" v-T) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     ("u" v-u) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     ("U" v-U) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     ("a" v-a) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     (name 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      (let ((v (plist-get entry (intern (concat ":" name))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        (save-excursion 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          (save-match-data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            (beginning-of-line) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            (if (looking-at 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                 (concat "^\\([ \t]*\\)%" name "[ \t]*$")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                (org-feed-make-indented-block 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				 v (org-get-indentation)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      v)))))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      (when replacement 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		(replace-match 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 ;; Escape string delimiters within embedded lisp. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 (if (org-capture-inside-embedded-elisp-p) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		     (replace-regexp-in-string "\"" "\\\\\"" replacement nil t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		   replacement)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ;; %() embedded elisp 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (org-capture-expand-embedded-elisp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        (decode-coding-string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+         (buffer-string) (detect-coding-region (point-min) (point-max) t)))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-feed-make-indented-block (s n) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Add indentation of N spaces to a multiline string S." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   (if (not (string-match "\n" s)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       s 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     (mapconcat 'identity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (org-split-string s "\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	       (concat "\n" (make-string n ?\ ))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               (org-split-string s "\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               (concat "\n" (make-string n ?\ ))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (defun org-feed-skip-http-headers (buffer) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   "Remove HTTP headers from BUFFER, and return it. 
			 |