summaryrefslogtreecommitdiff
path: root/ennu-html.el
blob: 6244a75746aa5467548ae38eefa892f3e091bef8 (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
;; -*- 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* tag (ennu-setting :tag-directory))
       ,(or desc tag))))

(org-link-set-parameters
 "tag" :export 'ennu-export-tag)

(provide 'ennu-html)