about summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2019-09-02 22:56:11 +0530
committerArun Isaac2019-09-02 22:56:11 +0530
commit3f2eef6a230278fc4ed3cbc71d6bbcfc80f3f13c (patch)
treefdd3002868c6b2c650eda4c33a5200f5ddc73e61
parentdfdbc51501bcf535c6ecb742cfc169f6041be224 (diff)
downloadennum-3f2eef6a230278fc4ed3cbc71d6bbcfc80f3f13c.tar.gz
ennum-3f2eef6a230278fc4ed3cbc71d6bbcfc80f3f13c.tar.lz
ennum-3f2eef6a230278fc4ed3cbc71d6bbcfc80f3f13c.zip
Add tangle slot to post structure.
* ennu.el (ennu-post): Add tangle slot.
(ennu--read-post): Initialize tangle slot.
-rw-r--r--ennu.el27
1 files changed, 19 insertions, 8 deletions
diff --git a/ennu.el b/ennu.el
index be81523..f8bab98 100644
--- a/ennu.el
+++ b/ennu.el
@@ -14,7 +14,7 @@
 
 (cl-defstruct (ennu-post (:constructor ennu-make-post)
                          (:copier nil))
-  filename slug author date language links
+  filename slug author date language links tangle
   summary tags thumbnail title translation-group)
 
 (cl-defstruct (ennu-operation (:constructor ennu-make-operation)
@@ -46,13 +46,14 @@
                 (unless (plist-member metadata key)
                   (user-error "Metadata %s not specified" key)))
               ennu-mandatory-metadata)
-      (let ((links (org-element-map (org-element-parse-buffer) 'link
-                     (lambda (link)
-                       (pcase link
-                         (`(link ,properties . ,_)
-                          (let ((link-type (org-element-property :type link)))
-                            (when (member link-type (list "image" "static" "video"))
-                              (cons link-type (org-element-property :path link))))))))))
+      (let* ((tree (org-element-parse-buffer))
+             (links (org-element-map tree 'link
+                      (lambda (link)
+                        (pcase link
+                          (`(link ,properties . ,_)
+                           (let ((link-type (org-element-property :type link)))
+                             (when (member link-type (list "image" "static" "video"))
+                               (cons link-type (org-element-property :path link))))))))))
         (ennu-make-post
          :filename filename
          :slug (file-name-base filename)
@@ -60,6 +61,16 @@
          :date (org-timestamp-to-time (first (plist-get metadata :date)))
          :language (plist-get metadata :language)
          :links links
+         ;; TODO: Deal with cases when the :tangle parameter is "yes"
+         :tangle (seq-uniq
+                  (org-element-map tree 'src-block
+                    (lambda (src-block)
+                      (pcase (org-babel-get-src-block-info nil src-block)
+                        (`(,_ ,_ ,arguments ,_ ,_ ,_ ,_)
+                         (let ((tangle-output-file (map-elt arguments :tangle)))
+                           (pcase tangle-output-file
+                             ("no" nil)
+                             (_ tangle-output-file))))))))
          :summary (funcall export (first (plist-get metadata :summary)))
          :tags (plist-get metadata :filetags)
          :thumbnail (or (plist-get metadata :thumbnail)