blob: d2c4b76e31cf5b08a1f2aa3b50b66793197800bb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
;; -*- 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)
|