(unless (= 2 (length argv)) (error "Usage: emacs --script scripts/export-to-html ")) (let* ((source-filename (file-truename (elt argv 0))) (output-filename (file-truename (elt argv 1))) (source-buffer (find-file source-filename)) (output-buffer (find-file output-filename)) (html-buffer (get-buffer-create "*Org HTML Export*")) (pt nil) (file-buffer (current-buffer)) (org-html-toplevel-hlevel 1) (org-html-head "") (org-html-head-extra "") (org-html-head-include-default-style nil) (org-html-head-include-scripts nil) (org-html-preamble nil) (org-html-postamble nil) (org-html-use-infojs nil) (org-export-with-toc nil)) (with-current-buffer output-buffer (erase-buffer)) (set-buffer source-buffer) (org-next-visible-heading 1) (while (not (equal pt (point))) (setq pt (point)) (let ((title (org-get-heading t)) (id (org-element-property :CUSTOM_ID (org-element-at-point))) (timestamp (org-read-date nil t (org-element-property :TIMESTAMP (org-element-at-point)) nil)) (tags (org-get-tags)) (subtree nil) (html nil) (hash nil)) (org-copy-subtree) (setq subtree (with-temp-buffer (yank) (buffer-string))) (org-html-export-as-html nil t t t) (set-buffer html-buffer) (setq html (buffer-string)) (set-buffer output-buffer) (json-insert `((id . ,id) (title . ,title) (timestamp . ,(format-time-string "%FT%T%z" timestamp)) (tags . ,(vconcat tags)) (hash . ,(secure-hash 'sha256 subtree)) (source . ,subtree) (html . ,html))) (set-buffer source-buffer)) (org-forward-heading-same-level 1)) (set-buffer output-buffer) (save-buffer))