diff options
| author | Arun Isaac | 2026-09-06 02:42:49 +0100 |
|---|---|---|
| committer | Arun Isaac | 2026-09-07 00:46:27 +0100 |
| commit | 5a682c030a07fc869dc05c6497e09a5136964f52 (patch) | |
| tree | da66a57da6d91a584a85ce4a0e1677c1359cb4bb /ennum-html.el | |
| parent | e27b6f5c6411c19b89e2721c8970e62cf98a6eb0 (diff) | |
| download | ennum-5a682c030a07fc869dc05c6497e09a5136964f52.tar.gz ennum-5a682c030a07fc869dc05c6497e09a5136964f52.tar.lz ennum-5a682c030a07fc869dc05c6497e09a5136964f52.zip | |
Move link types to separate file.
Move link types to a separate file independent of the ennum-html backend. The new link export interface exposes the info communication channel. So, we no longer need to override the html link transcoder.
Diffstat (limited to 'ennum-html.el')
| -rw-r--r-- | ennum-html.el | 163 |
1 files changed, 8 insertions, 155 deletions
diff --git a/ennum-html.el b/ennum-html.el index 337fa8e..f9d2d32 100644 --- a/ennum-html.el +++ b/ennum-html.el @@ -10,8 +10,7 @@ (org-export-define-derived-backend 'ennum-html 'html :translate-alist - '((inner-template . ennum-html-inner-template) - (link . ennum-html-link)) + '((inner-template . ennum-html-inner-template)) :options-alist '((:summary "SUMMARY" nil nil parse) (:thumbnail "THUMBNAIL" nil nil t) @@ -52,11 +51,11 @@ (pcase-lambda (`(,lang . ,slug)) (replace-regexp-in-string "<a " (format "<a hreflang=\"%s\" " lang) - (ennum-html-export-post + (ennum-link-export-post slug (map-elt ennum--iso-639-1-alist lang) - (org-export-backend-name - (plist-get info :back-end))))) + (org-export-backend-name (plist-get info :back-end)) + info))) translations ", "))) ;; Tags @@ -66,9 +65,11 @@ (lambda (tag) (replace-regexp-in-string "<a " "<a class=\"p-category\" " - (ennum-html-export-tag + (ennum-link-export-tag (ennum-add-tongue-suffix tag (plist-get info :language)) - tag (org-export-backend-name (plist-get info :back-end))))) + tag + (org-export-backend-name (plist-get info :back-end)) + info))) tags ", "))) ;; Summary @@ -80,152 +81,4 @@ (org-html-footnote-section info) "</article>")) -(defun ennum-html-find-link (type path info) - "Find link of TYPE and PATH in post object stored in -:ennum-posts of property list INFO." - (seq-find (lambda (link) - (and (eq (ennum-link-type link) type) - (string= (ennum-link-path link) path))) - (ennum-post-links (plist-get info :ennum-post)))) - -(defun ennum-html-link (link desc info) - ;; We override the html link transcoder to handle image, post and - ;; video links differently. We cannot use the `:export' property of - ;; `org-link-parameters' since those functions cannot access the - ;; `info' communication channel. - (let ((path (org-element-property :path link))) - (pcase (org-element-property :type link) - ("image" - ;; Convert image links to file links, get them transcoded by - ;; `org-html-link' and then remove the file:// scheme from the - ;; URI. Finally insert the transcoded image link in a link to a - ;; larger image as specified by the :image-link-width setting. - (format "<a href=\"%s\">%s</a>" - (expand-file-name* - (ennum-image-output-filename - path (ennum-setting :image-link-width)) - (ennum-setting :images-directory)) - (replace-regexp-in-string - (rx (group (or "src" "data")) "=\"file://") "\\1=\"" - (org-html-link - (org-element-put-property - (org-element-put-property - link :path (url-encode-url - (expand-file-name* - (ennum-image-output-filename - path (ennum-setting :image-width)) - (ennum-setting :images-directory)))) - :type "file") - desc info)))) - ("post" - (ennum-html-export-post - path - (or desc (ennum-post-link-target-title - (ennum-html-find-link 'post path info))) - (org-export-backend-name (plist-get info :back-end)))) - ("video" - (xmlgen - `(video :src ,(url-encode-url - (expand-file-name* path (ennum-setting :videos-directory))) - :poster ,(url-encode-url - (expand-file-name* - (ennum-video-link-poster - (ennum-html-find-link 'video path info)) - (ennum-setting :images-directory))) - :preload "none" - :controls ""))) - ;; Pass other link types to org-html-link - (_ (org-html-link link desc info))))) - -(defmacro ennum-html-follow (path) - `(ennum-with-current-directory (ennum-setting :working-directory) - (find-file ,path))) - -;; TODO: Pass title through org-export-data-with-backend or something -;; similar in order to export org syntax in title -(defun ennum-html-export-post (path desc backend) - (pcase backend - ((or 'ennum-html 'html) - (xmlgen `(a :href ,(url-encode-url - (expand-file-name* path (ennum-setting :posts-directory))) - ,desc))))) - -(defun ennum-html-follow-post (path) - (ennum-html-follow (expand-file-name (concat path ".org") - (ennum-setting :posts-directory)))) - -(org-link-set-parameters - "post" - :export 'ennum-html-export-post - :follow 'ennum-html-follow-post) - -(defun ennum-html-follow-image (path) - (ennum-html-follow (expand-file-name path (ennum-setting :images-directory)))) - -(org-link-set-parameters - "image" :follow 'ennum-html-follow-image) - -(defun ennum-html-export-thumbnail (path _desc backend) - (pcase backend - ((or 'ennum-html 'html) - (xmlgen - `(img :src ,(url-encode-url - (expand-file-name* - (ennum-image-output-filename - path (ennum-setting :image-thumbnail-width)) - (ennum-setting :images-directory)))))))) - -(org-link-set-parameters - "thumbnail" - :export 'ennum-html-export-thumbnail - :follow 'ennum-html-follow-image) - -(defun ennum-html-follow-video (path) - (ennum-html-follow (expand-file-name path - (ennum-setting :videos-directory)))) - -(org-link-set-parameters - "video" - :follow 'ennum-html-follow-video) - -(defun ennum-html-export-pdf (path desc backend) - (pcase backend - ((or 'ennum-html 'html) - (xmlgen - (let ((link-path (url-encode-url - (expand-file-name* path (ennum-setting :static-directory))))) - `(object :data ,link-path - :type "application/pdf" - :width ,(ennum-setting :pdf-width) - :height ,(ennum-setting :pdf-height) - "Download " (a :href ,link-path ,path))))))) - -(org-link-set-parameters - "pdf" :export 'ennum-html-export-pdf) - -(defun ennum-html-export-static (path desc backend) - (pcase backend - ((or 'ennum-html 'html) - (xmlgen - `(a :href ,(url-encode-url - (expand-file-name* path (ennum-setting :static-directory))) - ,desc))))) - -(org-link-set-parameters - "static" :export 'ennum-html-export-static) - -(org-link-set-parameters - "tangle" :export 'ennum-html-export-static) - -(defun ennum-html-export-tag (tag desc backend) - (pcase backend - ((or 'ennum-html 'html) - (xmlgen - `(a :href ,(url-encode-url - (expand-file-name* tag (ennum-setting :tag-directory))) - ,(or desc tag)))))) - -(org-link-set-parameters - "tag" :export 'ennum-html-export-tag) - (provide 'ennum-html) |
