summaryrefslogtreecommitdiff
path: root/repo/www/preprocess-org.el
diff options
context:
space:
mode:
Diffstat (limited to 'repo/www/preprocess-org.el')
-rw-r--r--repo/www/preprocess-org.el48
1 files changed, 40 insertions, 8 deletions
diff --git a/repo/www/preprocess-org.el b/repo/www/preprocess-org.el
index f7be936..bad9f90 100644
--- a/repo/www/preprocess-org.el
+++ b/repo/www/preprocess-org.el
@@ -1,5 +1,41 @@
+;; How I Convert Org Files To HTML.
+;; ================================
+;;
+;; Or: Why We Can't Have Nice Things: Exhibit #42.
+;; -------------------------------------------
+;;
+;; Or: I Got Way Too Much Time On My Hands, Apparently.
+;; ------------------------------------------------
+;;
+;; I see two straightforward ways to export Org files to HTML:
+;;
+;; 1. ox-html.el, Org's HTML backend: even with all the settings and
+;; filters available, there are still a few things that annoy me:
+;; lots of extra <div>s, unstable section IDs…
+;;
+;; Also, I want to squeeze pandoc somewhere in the pipeline, to run
+;; my Lua filters.
+;;
+;; 2. pandoc: does not cover all of Org's features. Org is so crammed
+;; with constructs that don't exist in other markup formats
+;; (agendas, logbooks, spreadsheets, properties…) and so many knobs
+;; can be tweaked on a per-file basis (link abbreviations, tags,
+;; TODO cycles) that Elisp remains the least painful way to process
+;; these files, IMO.
+;;
+;; A less-straightforward, but still reasonably simple way to go would
+;; be to use Org's markdown backend, then run pandoc on the result.
+;; Unfortunately, AFAICT ox-md.el does not implement definition lists,
+;; nor syntax-highlighting in fenced code blocks.
+;;
+;; So here's where I'm at: using Elisp, I'll preprocess Org files to
+;; add a bunch of #+OPTIONS pandoc recognizes, "dumb down" the stuff
+;; pandoc does not recognize, format some other stuff arbitrarily,
+;; *then* I'll run pandoc on the result.
+
(defun preprocess-org (input)
(with-temp-buffer
+ (insert "#+OPTIONS: ^:{} tags:nil\n")
(insert-file-contents input)
(org-mode)
(while (re-search-forward org-heading-regexp nil t)
@@ -10,11 +46,7 @@
(dolist (tag tags)
(insert "- " tag "\n"))
(insert "#+end_tags\n")))))
- (let ((org-export-with-properties t)
- (org-export-with-section-numbers nil)
- (org-export-with-sub-superscripts '{})
- (org-export-with-tags nil)
- (org-export-with-title nil)
- (org-export-with-toc nil))
- (org-md-export-as-markdown))
- (princ (buffer-string))))
+ ;; TODO: dump properties
+ ;; TODO: fontify TODO keywords
+ ;; TODO: expand #+LINK abbreviations
+ (princ (buffer-string))))