aboutsummaryrefslogtreecommitdiff
path: root/publish.el
blob: ee580f06a0f5f669f62b0b420660b838c0a57f73 (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
(require 'ox-publish)

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

(defun me/html-preamble-post (plist)
  "PLIST: An entry."
  (if (org-export-get-date plist this-date-format)
        (plist-put plist
             :subtitle (format "Published on %s by %s"
                               (org-export-get-date plist this-date-format)
                               (car (plist-get plist :author)))))
  ;; Preamble
  (with-temp-buffer
    (insert-file-contents "../html-templates/post-preamble.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 "*[[file:posts/%s][%s]]* - %s"
                 entry
                 (org-publish-find-title entry project)
                 (format-time-string this-date-format
                                     (org-publish-find-date 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"
                 (org-publish-find-title entry project)
                 (format-time-string this-date-format
                                     (org-publish-find-date entry project))
                 (org-publish-find-title entry project)
                 (org-publish-find-title entry project)
		 (org-publish-find-content entry project)
		 ))
        ((eq style 'tree) (file-name-nondirectory (directory-file-name entry)))
        (t entry)))

(setq org-publish-project-alist
      '(("posts"
         :base-directory "posts/"
         :base-extension "org"
         :publishing-directory "site/posts"
         :recursive t
         :publishing-function org-html-publish-to-html
         :auto-sitemap t
	 :sitemap-format-entry me/org-posts-sitemap-format-entry
	 :sitemap-title "All posts"
	 :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-post
	 :html-self-link-headlines t
	 :author ("Yuchen Pei")
	 :html-postamble ""
	 )
	("microposts"
         :base-directory "microposts/"
         :base-extension "org"
         :publishing-directory "site/microposts"
         :recursive t
         :publishing-function org-html-publish-to-html
         :auto-sitemap t
	 :sitemap-format-entry me/org-microposts-sitemap-format-entry
	 :sitemap-function me/org-microposts-sitemap
	 :sitemap-title "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-post
	 :author ("Yuchen Pei")
	 :html-postamble ""
	 )
	("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'/>"
	 :html-preamble me/html-preamble-post
	 :author ("Yuchen Pei")
	 :html-postamble ""
	 :html-prefer-user-labels t
	 )	 
	("css"
          :base-directory "css/"
          :base-extension "css"
          :publishing-directory "site/css"
          :publishing-function org-publish-attachment
          :recursive t
	  )
        ("all" :components ("posts" "microposts" "pages" "css"))))