diff --git a/ox-plumhtml.el b/ox-plumhtml.el
index 7c04243..e649a44 100644
--- a/ox-plumhtml.el
+++ b/ox-plumhtml.el
@@ -1,4 +1,4 @@
-;;; ox-plumhtml.el --- sane HTML export for org-mode -*- lexical-binding: t; -*-
+;;; ox-plumhtml.el --- Sane HTML export for org-mode -*- lexical-binding: t; -*-
;; Copyright (C) 2020 Plum
;; Author: Plum
@@ -6,7 +6,7 @@
;; Package-Version: 1.0.2
;; Keywords: org-export
;; URL: https://words.plum.moe/ox-plumhtml.html
-;; Package-Requires: ((emacs "24") (ox-slimhtml "0.4.5"))
+;; Package-Requires: ((emacs "26.1") (ox-slimhtml "0.4.5"))
;; This file is not part of GNU Emacs
@@ -29,10 +29,14 @@
;;; Code:
(require 'ox-slimhtml)
+ox-slimhtml
+
+;; Variables
+(defvar ox-plumhtml-export-header-ids nil)
;; Utils
(defun ox-plumhtml--table-header-p (element info)
- "Returns `t' if the table has a header else `nil'"
+ "Return t if the table has a header else nil."
(or (org-export-table-has-header-p element info)
(org-export-table-has-header-p (org-export-get-parent-table element) info)))
@@ -82,11 +86,64 @@ Uses for table headers"
(format " | %s | " contents)))
(defun ox-plumhtml-code (code contents info)
- (format "%s
" (org-element-property :value code)))
+ (format "%s
" (org-html-do-format-code (org-element-property :value code))))
(defun ox-plumhtml-verbatim (verbatim contents info)
(format "%s
" (org-element-property :value verbatim)))
+(defun ox-plumhtml-headline (headline contents info)
+ (let* ((text (org-export-data (org-element-property :title headline) info))
+ (level (org-export-get-relative-level headline info))
+ (attributes (org-element-property :ATTR_HTML headline))
+ (container (org-element-property :HTML_CONTAINER headline))
+ (container-class (and container (org-element-property :HTML_CONTAINER_CLASS headline))))
+ (when attributes
+ (setq attributes
+ (format " %s" (org-html--make-attribute-string
+ (org-export-read-attribute 'attr_html `(nil
+ (attr_html ,(split-string attributes))))))))
+ (when (not (org-export-low-level-p headline info))
+ (if ox-plumhtml-export-header-ids
+ (format "%s%s" level (org-export-get-reference headline info) text level (or contents ""))
+ (format "%s%s" level (or attributes "") text level (or contents ""))))))
+
+(defun ox-plumhtml-link (link contents info)
+ "Transcode LINK from Org to HTML.
+
+CONTENTS is the text of the link.
+INFO is a plist holding contextual information."
+ (cond
+ ((ox-slimhtml--immediate-child-of-p link 'link)
+ (org-element-property :raw-link link))
+ ((not contents)
+ (format "%s" (org-element-property :path link)))
+ (t (let ((link-type (org-element-property :type link))
+ (href (org-element-property :raw-link link))
+ (attributes (if (ox-slimhtml--immediate-child-of-p link 'paragraph)
+ (ox-slimhtml--attr (org-export-get-parent link))
+ ""))
+ (element "%s"))
+ (cond
+ ((string= "file" link-type)
+ (let ((html-extension (or (plist-get info :html-extension) ""))
+ (use-abs-url (plist-get info :html-link-use-abs-url))
+ (link-org-files-as-html (plist-get info :html-link-org-as-html))
+ (path (or (org-element-property :path link) "")))
+ (format element
+ (concat (if (and use-abs-url (file-name-absolute-p path)) "file:" "")
+ (if (and link-org-files-as-html (string= "org" (downcase (or (file-name-extension path) ""))))
+ (if (and html-extension (not (string= "" html-extension)))
+ (concat (file-name-sans-extension path) "." html-extension)
+ (file-name-sans-extension path))
+ path))
+ attributes contents)))
+ ((and (string= "fuzzy" link-type)
+ ox-plumhtml-export-header-ids)
+ (format "%s"
+ (org-export-get-reference (org-export-resolve-fuzzy-link link info) info)
+ attributes contents))
+ (t (format element href attributes contents)))))))
+
;; org-export backend and export/publish functions
(org-export-define-derived-backend 'plumhtml
'slimhtml
@@ -96,7 +153,9 @@ Uses for table headers"
(table-cell . ox-plumhtml-table-cell)
(paragraph . ox-plumhtml-paragraph)
(code . ox-plumhtml-code)
- (verbatim . ox-plumhtml-verbatim)))
+ (verbatim . ox-plumhtml-verbatim)
+ (headline . ox-plumhtml-headline)
+ (link . ox-plumhtml-link)))
;;;###autoload
(defun ox-plumhtml-publish-to-html (plist filename pub-dir)
|