;; -*- lexical-binding: t -*- (require 'ox) (require 'subr-x) (require 'xmlgen) (defun expand-file-name* (name default-directory) (expand-file-name name (concat "/" default-directory))) (org-export-define-derived-backend 'ennu-html 'html :options-alist '((:html-inline-image-rules nil nil '(("image" . "\\.\\(jpeg\\|jpg\\|png\\|gif\\|svg\\)\\'")) t) (:summary "SUMMARY" nil nil t) (:thumbnail "THUMBNAIL" nil nil t))) ;; 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) (let ((post (concat (expand-file-name path (ennu-setting :posts-directory)) ".org"))) (xmlgen `(a :href ,(expand-file-name* path (ennu-setting :posts-directory)) ,(or desc (plist-get (ennu-post-metadata post) :title)))))) (org-link-set-parameters "post" :export 'ennu-export-post) (defun ennu-export-image (path desc backend) (let ((img `(img :src ,(expand-file-name* (ennu-image-output-filename path (ennu-setting :default-image-width)) (ennu-setting :images-directory))))) (xmlgen (if (ennu-setting :image-link-width) `(a :href ,(expand-file-name* (ennu-image-output-filename path (ennu-setting :image-link-width)) (ennu-setting :images-directory)) ,img) img)))) (org-link-set-parameters "image" :export 'ennu-export-image) (defun ennu-export-thumbnail (path desc backend) (xmlgen `(img :src ,(expand-file-name* (ennu-image-output-filename path (ennu-setting :thumbnail-image-width)) (ennu-setting :images-directory))))) (org-link-set-parameters "thumbnail" :export 'ennu-export-thumbnail) (defun ennu-export-video (path desc backend) (let ((video-directory (ennu-setting :video-directory))) (xmlgen `(video :src ,(expand-file-name* path video-directory) :poster ,(expand-file-name* (ennu-video-poster path) video-directory) :preload "none" :controls "")))) (org-link-set-parameters "video" :export 'ennu-export-video) (defun ennu-export-static (path desc backend) (xmlgen `(a :href ,(expand-file-name* path (ennu-setting :static-directory)) ,desc))) (org-link-set-parameters "static" :export 'ennu-export-static) (org-link-set-parameters "tangle" :export 'ennu-export-static) (defun ennu-export-tag (tag desc backend) (xmlgen `(a :href ,(expand-file-name* (concat tag ".html") (ennu-setting :tag-directory)) ,(or desc tag)))) (org-link-set-parameters "tag" :export 'ennu-export-tag) (provide 'ennu-html)