aboutsummaryrefslogtreecommitdiff
path: root/publish.el
blob: b1f665901229761e9c60b37ce966c24a6ba23b8f (plain) (blame)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
(require 'ox-publish)

(defvar this-date-format "%Y-%m-%d")

(defun me/html-preamble (plist)
  "PLIST: An entry."
  (if (org-export-get-date plist this-date-format)
        (plist-put plist
             :subtitle (format "Published on %s"
                               (org-export-get-date plist this-date-format)
			       )))
  ;; Preamble
  (with-temp-buffer
    (insert-file-contents "../html-templates/preamble.html") (buffer-string)))

(defun me/html-postamble (plist)
  (with-temp-buffer
    (insert-file-contents "../html-templates/postamble.html") (buffer-string)))

(defun me/org-posts-sitemap-format-entry (entry style project)
  "Format posts with author and published data in the index page.

ENTRY: file-name
STYLE:
PROJECT: `posts in this case."
  (cond ((not (directory-name-p entry))
         (format "%s - *[[file:posts/%s][%s]]*"
                 (format-time-string this-date-format
                                     (org-publish-find-date entry project))
                 entry
                 (org-publish-find-title entry project)
		 ))
        ((eq style 'tree) (file-name-nondirectory (directory-file-name entry)))
        (t entry)))

(defun me/org-microposts-sitemap (title list)
  "Default site map, as a string.
TITLE is the title of the site map.  LIST is an internal
representation for the files to include, as returned by
`org-list-to-lisp'.  PROJECT is the current project."
  (concat "#+TITLE: " title "\n\n"
	  (org-list-to-org list)))


(defun me/org-publish-do-nothing (plist filename pub-dir) "")

(defun org-publish-find-content (file project)
  (let ((file (org-publish--expand-file-name file project)))
    (when (and (file-readable-p file) (not (directory-name-p file)))
      (with-temp-buffer
	(insert-file-contents file)
	(goto-char (point-min))
	(let ((beg (+ 1 (re-search-forward "^$"))))
;	  (print (concat file ": " (number-to-string beg) ", " (number-to-string (point-max))))
	  (buffer-substring beg (point-max)))))))
    
(defun me/org-microposts-sitemap-format-entry (entry style project)
  "Format posts with author and published data in the index page.

ENTRY: file-name
STYLE:
PROJECT: `posts in this case."
  (cond ((not (directory-name-p entry))
         (format "*[[%s][%s]]* - %s\n<<%s>>\n\n%s"
		 (file-name-sans-extension entry)
                 (format-time-string this-date-format
                                     (org-publish-find-date entry project))
                 (org-publish-find-title entry project)
		 (file-name-sans-extension entry)
		 (org-publish-find-content entry project)
		 ))
        ((eq style 'tree) (file-name-nondirectory (directory-file-name entry)))
        (t entry)))

(defun me/org-publish-microblog (plist filename pub-dir)
  "Publish RSS with PLIST, only when FILENAME is '../pages/microblog.org'.
PUB-DIR is when the output will be placed."
  (if (equal "../pages/microblog.org" (file-name-nondirectory filename))
      (org-html-publish-to-html plist filename pub-dir)))

(defun my-blog-local-mathjax ()
      '((path "/js/MathJax.js?config=TeX-AMS-MML_HTMLorMML")
        (scale "100") (align "center") (indent "2em") (tagside "right")
        (mathml nil)))

(setq org-publish-project-alist
      '(("posts"
         :base-directory "posts/"
         :base-extension "org"
         :publishing-directory "site/posts"
         :recursive nil
         :publishing-function org-html-publish-to-html
         :auto-sitemap t
	 :section-numbers nil
	 :sitemap-format-entry me/org-posts-sitemap-format-entry
	 :sitemap-title "Yuchen's Blog"
	 :sitemap-sort-files anti-chronologically
	 :sitemap-filename "../pages/blog.org"
	 :html-head "<link rel='stylesheet' href='../css/default.css' type='text/css'/>"
	 :html-preamble me/html-preamble
	 :html-self-link-headlines t
	 :author ("Yuchen Pei")
	 :html-postamble me/html-postamble
	 :html-mathjax-options ((path "/js/MathJax.js?config=TeX-AMS-MML_HTMLorMML"))
	 )
	("microposts"
         :base-directory "microposts/"
         :base-extension "org"
         :publishing-directory "site/microposts"
         :recursive t
         :publishing-function me/org-publish-microblog
         :auto-sitemap t
	 :sitemap-format-entry me/org-microposts-sitemap-format-entry
	 :sitemap-function me/org-microposts-sitemap
	 :sitemap-title "Yuchen's Microblog"
	 :sitemap-sort-files anti-chronologically
	 :sitemap-filename "../pages/microblog.org"
	 :html-head "<link rel='stylesheet' href='../css/default.css' type='text/css'/>"
	 :html-preamble me/html-preamble
	 :author ("Yuchen Pei")
	 :html-postamble me/html-postamble
	 :html-mathjax-options ((path "/js/MathJax.js?config=TeX-AMS-MML_HTMLorMML"))
	 )
	("pages"
         :base-directory "pages/"
         :base-extension "org"
         :publishing-directory "site/"
         :recursive t
         :publishing-function org-html-publish-to-html
	 :html-head "<link rel='stylesheet' href='../css/default.css' type='text/css'/>
                     <link rel='stylesheet' href='../css/page.css' type='text/css'/>"
	 :html-preamble me/html-preamble
	 :author ("Yuchen Pei")
	 :html-postamble me/html-postamble
	 :html-prefer-user-labels t
	 :html-mathjax-options ((path "/js/MathJax.js?config=TeX-AMS-MML_HTMLorMML"))
	 )	 
	("css"
          :base-directory "css/"
          :base-extension "css"
          :publishing-directory "site/css"
          :publishing-function org-publish-attachment
          :recursive t
	  )
	("js"
          :base-directory "js/"
          :base-extension "js"
          :publishing-directory "site/js"
          :publishing-function org-publish-attachment
          :recursive t
	  )
        ("all" :components ("posts" "microposts" "pages" "css" "js"))))