From 1f2531c31f219e5f569f228e9d57c65fd59c9964 Mon Sep 17 00:00:00 2001
From: Arun Isaac
Date: Mon, 2 Sep 2019 01:35:55 +0530
Subject: Implement ennu-html inner-template transcoder.

* ennu-html.el (ennu-html-inner-template): New function.
(ennu-html): Specify ennu-html-inner-template as inner-template
transcoder.
---
 ennu-html.el | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/ennu-html.el b/ennu-html.el
index 9a24f9c..877e561 100644
--- a/ennu-html.el
+++ b/ennu-html.el
@@ -8,6 +8,8 @@
   (expand-file-name name (concat "/" default-directory)))
 
 (org-export-define-derived-backend 'ennu-html 'html
+  :translate-alist
+  '((inner-template . ennu-html-inner-template))
   :options-alist
   '((:html-inline-image-rules
      nil nil '(("image" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'")) t)
@@ -15,6 +17,61 @@
     (:thumbnail "THUMBNAIL" nil nil t)
     (:translation-group "TRANSLATION_GROUP" nil nil t)))
 
+(defun ennu-html-inner-template (contents info)
+  (concat
+   ;; Table of contents
+   (let ((depth (plist-get info :with-toc)))
+     (when depth (org-html-toc depth info)))
+   ;; Beginning of h-entry
+   "<article class=\"h-entry\">"
+   ;; Title
+   (format "<h1 class=\"p-name\">%s</h1>\n"
+           (org-export-data (plist-get info :title) info))
+   ;; Author and date
+   (let ((author (when (plist-get info :with-author)
+                   (plist-get info :author)))
+         (date (when (plist-get info :with-date)
+                 (org-export-get-date info))))
+     (when (or author date)
+       (xmlgen `(p "Published"
+                   ,@(when author
+                       `(" by "
+                         (a :class "p-author h-card"
+                            :href ,(ennu--absolute-uri "")
+                            ,(car (plist-get info :author)))))
+                   ,@(when date
+                       `(" on "
+                         (time :class "dt-published"
+                               :datetime ,(org-export-get-date info "%Y-%m-%d 12:00:00")
+                               ,(org-export-get-date info "%B %d, %Y"))))))))
+   ;; Interlanguage language links
+   (format "<p>In other languages: %s</p>"
+           (mapconcat
+            (lambda (translation)
+              (let ((lang (ennu-post-language translation))
+                    (slug (ennu-post-slug translation)))
+                (replace-regexp-in-string
+                 "<a " (format "<a hreflang=\"%s\" " lang)
+                 (ennu-export-post slug lang (plist-get info :backend)))))
+            (plist-get info :translations)
+            ", "))
+   ;; Tags
+   (format "<p>Tags: %s</p>"
+           (mapconcat
+            (lambda (tag)
+              (replace-regexp-in-string
+               "<a " "<a class=\"p-category\" "
+               (ennu-export-tag tag nil (plist-get info :backend))))
+            (plist-get info :filetags) ", "))
+   ;; Summary
+   (format "<div class=\"p-summary\">%s</div>"
+           (org-export-data (plist-get info :summary) info))
+   ;; Document contents
+   (format "<div class=\"e-content\">%s</div>" contents)
+   ;; Footnotes section
+   (org-html-footnote-section info)
+   "</article>"))
+
 ;; TODO: Pass title through org-export-data-with-backend or something
 ;; similar in order to export org syntax in title
 (defun ennu-export-post (path desc backend)
-- 
cgit v1.2.3