~ubuntu-branches/ubuntu/vivid/muse-el/vivid

« back to all changes in this revision

Viewing changes to examples/johnw/muse-johnw.el

  • Committer: Bazaar Package Importer
  • Author(s): Michael W. Olson (GNU address)
  • Date: 2007-06-25 08:17:44 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070625081744-h9xfz7c72h1pfyo6
Tags: 3.03-1ubuntu1
* Closes LP: #123907
* Sync with Debian.  Remaining changes:
  - Keep (add) manual.
* debian/control:
  - Set Ubuntu MOTU to be Maintainer and myself as
    XSBC-Original-Maintainer to silence warning.
* debian/rules;
  - Manual is now in texi/ directory.
  - Clean generated html files and info file for the manual.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
(require 'muse)
2
 
(require 'muse-mode)
3
 
(require 'muse-colors)
4
 
(require 'muse-project)
5
 
(require 'muse-book)
6
 
 
7
 
(require 'muse-html)
8
 
(require 'muse-latex)
9
 
(require 'muse-texinfo)
10
 
 
11
 
(require 'muse-journal)
12
 
(require 'muse-poem)
13
 
(require 'muse-message)
14
 
 
15
 
(require 'muse-http)
16
 
 
17
 
;;(require 'muse-arabic)
18
 
;;(require 'muse-cite)
19
 
 
20
 
(eval-after-load "whitespace"
21
 
  '(add-to-list 'whitespace-modes 'muse-mode))
22
 
 
23
 
(defun muse-maybe-convert-poem ()
24
 
  (if (string-match "/poems/" muse-publishing-current-file)
25
 
      (muse-poem-prepare-buffer)))
26
 
 
27
 
(defun muse-insert-reset-chapter ()
28
 
  (insert "\n\\setcounter{chapter}{1}\n"))
29
 
 
30
 
(defun muse-insert-all-poems-header ()
31
 
  (insert "\n\\renewcommand{\\poemtoc}{chapter}
32
 
\\settocdepth{chapter}\n"))
33
 
 
34
 
;; I use my own sectioning commands in conjunction with memoir.cls
35
 
(setcdr (assq 'chapter muse-latex-markup-strings)       "\\mychapter{")
36
 
(setcdr (assq 'section muse-latex-markup-strings)       "\\mysection{")
37
 
(setcdr (assq 'subsection muse-latex-markup-strings)    "\\mysubsection{")
38
 
(setcdr (assq 'subsubsection muse-latex-markup-strings) "\\mysubsubsection{")
39
 
 
40
 
;; Relocate the images directory
41
 
;(setcdr (assq 'image-with-desc muse-latex-markup-strings)
42
 
;       "\\includegraphics[width=\\textwidth]{../%s}")
43
 
(setcdr (assq 'image-with-desc muse-latex-markup-strings)
44
 
        "\\includegraphics[scale=0.6]{../%s}")
45
 
(setcdr (assq 'image-link muse-latex-markup-strings)
46
 
        "\\includegraphics[scale=0.6]{../%s}")
47
 
(setcdr (assq 'url-with-image muse-latex-markup-strings)
48
 
        "%% %s\n\\includegraphics[scale=0.6]{../%s}")
49
 
 
50
 
(unless (assoc "site-html" muse-publishing-styles)
51
 
  (muse-derive-style "site-html" "html"
52
 
                     :maintainer "jwiegley@hotmail.com"
53
 
                     :before 'muse-maybe-convert-poem
54
 
                     :after 'muse-my-html-finalize-buffer
55
 
                     :final 'muse-site-html-set-mode
56
 
                     :header "~/Documents/site/header.html"
57
 
                     :footer "~/Documents/site/footer.html")
58
 
  (muse-derive-style "site-journal-html" "journal-html"
59
 
                     :maintainer "jwiegley@hotmail.com"
60
 
                     :before 'muse-my-journal-find-entries
61
 
                     :after 'muse-my-journal-insert-contents
62
 
                     :final 'muse-site-html-set-mode
63
 
                     :header "~/Documents/site/header.html"
64
 
                     :footer "~/Documents/site/footer.html")
65
 
  (muse-derive-style "newartisans-html" "html"
66
 
                     :maintainer "johnw@newartisans.com"
67
 
                     :header "~/Sites/newartisans/header.html"
68
 
                     :footer "~/Sites/newartisans/footer.html")
69
 
  (muse-derive-style "newartisans-journal-html" "journal-html"
70
 
                     :maintainer "johnw@newartisans.com"
71
 
                     :header "~/Sites/newartisans/header.html"
72
 
                     :footer "~/Sites/newartisans/footer.html"))
73
 
 
74
 
(custom-set-variables
75
 
 '(muse-project-alist
76
 
   (quote
77
 
    (("website"                         ; my various writings
78
 
      (:book-part "Essays"
79
 
       :book-funcall muse-insert-reset-chapter
80
 
       "~/Documents/essays"
81
 
       :book-part "Stories"
82
 
       :book-funcall muse-insert-reset-chapter
83
 
       "~/Documents/stories"
84
 
       :book-part "Journal"
85
 
       :book-style "journal-book-pdf"
86
 
       :book-funcall muse-insert-reset-chapter
87
 
       "~/Documents/journal/early"
88
 
       "~/Documents/journal/summer2003"
89
 
       "~/Documents/journal/j2003"
90
 
       "~/Documents/journal/j2004"
91
 
       "~/Documents/journal/j2005"
92
 
       "~/Documents/journal/journal"
93
 
       "~/Documents/journal/pending"
94
 
       :book-part "Poems"
95
 
       :book-style "chapbook-pdf"
96
 
       :book-funcall muse-insert-all-poems-header
97
 
       :book-funcall muse-insert-reset-chapter
98
 
       :nochapters t  ; do automatically add chapters
99
 
       :book-chapter "Mystical"
100
 
       "~/Documents/poems/mystical"
101
 
       :book-chapter "Romance"
102
 
       "~/Documents/poems/romantic"
103
 
       :book-chapter "Nature"
104
 
       "~/Documents/poems/natural"
105
 
       :book-chapter "Melancholoy"
106
 
       "~/Documents/poems/melancholy"
107
 
       :book-chapter "Commentary"
108
 
       "~/Documents/poems/commentary"
109
 
       :book-end t
110
 
       "~/Documents/contents"
111
 
       "~/Documents/notes"
112
 
       :default "journal")
113
 
 
114
 
      (:base "site-html" :path "~/Sites/johnw"
115
 
       :include "/contents/recent")
116
 
      (:base "pdf" :path "~/Sites/johnw/pdf"
117
 
       :include "/\\(essays\\|stories\\)/")
118
 
      (:base "poem-pdf" :path "~/Sites/johnw/pdf"
119
 
       :include "/poems/")
120
 
      (:base "site-html" :path "~/Sites/johnw"
121
 
       :exclude "/journal/")
122
 
      (:base "journal-pdf" :path "~/Sites/johnw/pdf"
123
 
       :include "/journal/")
124
 
      (:base "site-journal-html" :path "~/Sites/johnw"
125
 
       :include "/journal/")
126
 
      (:base "journal-rdf" :path "~/Sites/johnw"
127
 
       :include "/journal/journal"
128
 
       :base-url "http://johnwiegley.com/")
129
 
      (:base "journal-rss" :path "~/Sites/johnw"
130
 
       :include "/journal/journal"
131
 
       :base-url "http://johnwiegley.com/")
132
 
      (:base "journal-rss" :path "~/Sites/johnw"
133
 
       :include "/journal/pending"
134
 
       :base-url "http://johnwiegley.com/"))
135
 
     ("thoughts"                        ; collected writings
136
 
      (:book-end t
137
 
       "~/Documents/thoughts/thoughts"
138
 
       :default "thoughts")
139
 
      (:base "journal-pdf" :path "~/Sites/johnw/pdf")
140
 
      (:base "site-journal-html" :path "~/Sites/johnw"))
141
 
     ("newartisans"                     ; my company
142
 
      ("~/Documents/newartisans"
143
 
       :default "index")
144
 
      (:base "newartisans-html" :path "~/Sites/newartisans"
145
 
       :exclude "/news")
146
 
      (:base "newartisans-journal-html" :path "~/Sites/newartisans"
147
 
       :include "/news"))
148
 
     ("planner"                         ; my company
149
 
      ("~/Private/plan"
150
 
       :default "TaskPool"
151
 
       :major-mode planner-mode)))))
152
 
 '(muse-mode-highlight-p t nil (muse-colors))
153
 
 '(muse-mode-auto-p t nil (muse-project))
154
 
 '(muse-latex-header "~/Documents/site/header.tex")
155
 
 '(muse-latex-footer "~/Documents/site/footer.tex")
156
 
 '(muse-book-latex-header "~/Documents/site/book-header.tex")
157
 
 '(muse-poem-latex-header "~/Documents/site/poem-header.tex")
158
 
 '(muse-poem-latex-footer "~/Documents/site/poem-footer.tex")
159
 
 '(muse-chapbook-latex-header "~/Documents/site/chapbook-header.tex")
160
 
 ;;'(muse-before-publish-hook (quote (muse-cite-munge-footnotes)))
161
 
 '(muse-mode-hook (quote (list footnote-mode turn-on-auto-fill flyspell-mode))))
162
 
 
163
 
(defun muse-publish-my-books (&optional force)
164
 
  (interactive "P")
165
 
  (muse-book-publish-project
166
 
   '("essays" ("~/Documents/essays"))
167
 
   "essays" "Collected Essays" "book-pdf" "~/Sites/johnw/pdf" force)
168
 
  (muse-book-publish-project
169
 
   '("stories" ("~/Documents/stories"))
170
 
   "stories" "Collected Stories" "book-pdf" "~/Sites/johnw/pdf" force)
171
 
  (muse-book-publish-project
172
 
   '("myjournal"
173
 
     ("~/Documents/journal/early"
174
 
      "~/Documents/journal/summer2003"
175
 
      "~/Documents/journal/j2003"
176
 
      "~/Documents/journal/j2004"
177
 
      "~/Documents/journal/j2005"
178
 
      "~/Documents/journal/journal"
179
 
      :book-end t
180
 
      "~/Documents/poems/mystical"
181
 
      "~/Documents/poems/romantic"
182
 
      "~/Documents/poems/natural"
183
 
      "~/Documents/poems/melancholy"
184
 
      "~/Documents/poems/commentary"))
185
 
   "myjournal" "Thought Journal" "journal-book-pdf" "~/Sites/johnw/pdf" force)
186
 
  (muse-book-publish-project
187
 
   '("poems"
188
 
     (:nochapters t  ; do automatically add chapters
189
 
      :book-chapter "Mystical"
190
 
      "~/Documents/poems/mystical"
191
 
      :book-chapter "Romance"
192
 
      "~/Documents/poems/romantic"
193
 
      :book-chapter "Nature"
194
 
      "~/Documents/poems/natural"
195
 
      :book-chapter "Melancholoy"
196
 
      "~/Documents/poems/melancholy"
197
 
      :book-chapter "Commentary"
198
 
      "~/Documents/poems/commentary"))
199
 
   "poems" "Collected Poems" "chapbook-pdf" "~/Sites/johnw/pdf" force)
200
 
  (muse-book-publish-project
201
 
   "website" "writings" "Collected Writings" "book-pdf"
202
 
   "~/Sites/johnw/pdf" force))
203
 
 
204
 
(defun modules-get-version-and-date (module)
205
 
  (let (version date)
206
 
    (with-temp-buffer
207
 
      (insert-file-contents-literally module nil 0 1000)
208
 
      (if (re-search-forward "Version:\\s-+\\(.*\\)" nil t)
209
 
          (setq version (match-string 1))))
210
 
    (setq date (format-time-string "%Y-%m-%d"
211
 
                                   (nth 5 (file-attributes module))))
212
 
    (concat (and muse-publishing-p "<span class=\"version\">")
213
 
            (if version
214
 
                (format "%s (%s)" date version)
215
 
              date)
216
 
            (and muse-publishing-p "</span>"))))
217
 
 
218
 
(defun muse-blog-add-entry ()
219
 
  (interactive)
220
 
  (muse-project-find-file "journal" "website")
221
 
  (goto-char (point-min))
222
 
  (forward-line 3)
223
 
  (insert "* " (format-time-string "%Y%m%d: ")
224
 
          (read-string "Journal entry title: ")
225
 
          "\n\n\n\n")
226
 
  (forward-line -2))
227
 
 
228
 
(defun muse-my-html-insert-contents (&optional ignore)
229
 
  (let ((index 1)
230
 
        base contents l)
231
 
    (save-excursion
232
 
      (goto-char (point-min))
233
 
      (search-forward "Page published by Emacs Muse begins here" nil t)
234
 
      (catch 'done
235
 
        (while (re-search-forward "^<h\\([0-9]+\\)>\\(.+?\\)</h\\1>" nil t)
236
 
          (unless (get-text-property (point) 'read-only)
237
 
            (setq l (1- (string-to-number (match-string 1))))
238
 
            (if (null base)
239
 
                (setq base l)
240
 
              (if (< l base)
241
 
                  (throw 'done t)))
242
 
            (when (<= l 1)
243
 
              (setq contents (cons (cons l (muse-match-string-no-properties 2))
244
 
                                   contents))
245
 
              (goto-char (match-beginning 2))
246
 
              (muse-html-insert-anchor (concat "sec" (int-to-string index)))
247
 
              (setq index (1+ index)))))))
248
 
    (setq index 1 contents (reverse contents))
249
 
    (when (> (length contents) 0)
250
 
      (goto-char (point-min))
251
 
      (or (search-forward "<h2>Archives</h2>" nil t)
252
 
          (search-forward "#include virtual=\"/sidebar.html\"" nil t))
253
 
      (beginning-of-line)
254
 
      (insert "<h2>Contents</h2>\n\n<ul>\n")
255
 
      (dolist (item contents)
256
 
        (insert "<li><a href=\"" (muse-publish-output-name)
257
 
                "#sec" (int-to-string index) "\">"
258
 
                (muse-publish-strip-tags (cdr item))
259
 
                "</a></li>\n")
260
 
        (setq index (1+ index)))
261
 
      (insert "</ul>\n"))))
262
 
 
263
 
(defun muse-my-html-finalize-buffer ()
264
 
  (when muse-publish-generate-contents
265
 
    (muse-my-html-insert-contents (cdr muse-publish-generate-contents))
266
 
    (setq muse-publish-generate-contents nil))
267
 
  (when (string= (muse-publish-output-name) "recent.html")
268
 
    (goto-char (point-min))
269
 
    (search-forward "Page published by Emacs Muse")
270
 
    (forward-line 1)
271
 
    (delete-region (point-min) (point))
272
 
    (search-forward "Page published by Emacs Muse")
273
 
    (beginning-of-line)
274
 
    (delete-region (point) (point-max))))
275
 
 
276
 
(defun muse-site-html-set-mode (file output-path final-target)
277
 
  (set-file-modes output-path ?\755))
278
 
 
279
 
(defvar muse-my-journal-entries nil)
280
 
(defvar muse-my-journal-nested t)
281
 
 
282
 
(defun muse-my-journal-find-entries ()
283
 
  (goto-char (point-min))
284
 
  (let ((heading-regexp (concat "^\\* " muse-journal-heading-regexp "$"))
285
 
        (inhibit-read-only t)
286
 
        entries)
287
 
    (while (re-search-forward heading-regexp nil t)
288
 
      (let ((begin (match-beginning 0))
289
 
            (date (match-string 1))
290
 
            (title (muse-match-string-no-properties 2))
291
 
            enclosure qotd desc)
292
 
        (if title
293
 
            (save-match-data
294
 
              (if (string-match muse-explicit-link-regexp title)
295
 
                  (setq enclosure (match-string 1 title)
296
 
                        title (match-string 2 title)))))
297
 
        (save-match-data
298
 
          (when (and date
299
 
                     (string-match
300
 
                      (concat "\\([1-9][0-9][0-9][0-9]\\)[./]?"
301
 
                              "\\([0-1][0-9]\\)[./]?\\([0-3][0-9]\\)") date))
302
 
            (setq date (encode-time 0 0 0
303
 
                                    (string-to-number (match-string 3 date))
304
 
                                    (string-to-number (match-string 2 date))
305
 
                                    (string-to-number (match-string 1 date))
306
 
                                    (current-time-zone)))))
307
 
        (while (string-match "\\*" title)
308
 
          (setq title (replace-match "" nil nil title)))
309
 
        (unless muse-my-journal-nested
310
 
          (let* ((path (muse-style-element :path))
311
 
                 (item-path
312
 
                  (concat (expand-file-name (format-time-string "%Y/%m")
313
 
                                            path)
314
 
                          "/" (muse-journal-anchorize-title title)))
315
 
                 (end
316
 
                  (save-excursion
317
 
                    (if (re-search-forward heading-regexp nil t)
318
 
                        (match-beginning 0)
319
 
                      (if (re-search-forward "^Footnotes:" nil t)
320
 
                          (match-beginning 0)
321
 
                        (point-max)))))
322
 
                 (data (buffer-substring begin end))
323
 
                 (footnotes
324
 
                  (save-excursion
325
 
                    (if (re-search-forward "^Footnotes:" nil t)
326
 
                        (buffer-substring (match-beginning 0) (point-max)))))
327
 
                 (project (muse-project)))
328
 
            (save-excursion
329
 
              (unless (file-directory-p (file-name-directory item-path))
330
 
                (make-directory  (file-name-directory item-path) t))
331
 
              (find-file item-path)
332
 
              (erase-buffer)
333
 
              (insert "#title " title ?\n)
334
 
              (insert "#date " (format-time-string "%B %e, %Y" date) ?\n)
335
 
              (insert ?\n)
336
 
              (setq begin (point))
337
 
              (insert data)
338
 
              (goto-char begin)
339
 
              (forward-line 2)
340
 
              (delete-region begin (point))
341
 
              (goto-char (point-max))
342
 
              (if footnotes
343
 
                  (insert ?\n footnotes))
344
 
              (save-buffer)
345
 
              (kill-buffer (current-buffer))
346
 
              (let ((muse-my-journal-nested t)
347
 
                    (muse-current-project project))
348
 
                (muse-publish-file item-path "journal-pdf"
349
 
                                   (file-name-directory item-path))
350
 
                (muse-publish-file item-path "site-journal-html"
351
 
                                   (file-name-directory item-path)))
352
 
              (delete-file item-path))))
353
 
        (set (make-local-variable 'muse-my-journal-entries)
354
 
             (cons (cons title date)
355
 
                   muse-my-journal-entries))))))
356
 
 
357
 
(defun muse-my-journal-insert-contents ()
358
 
  (goto-char (point-min))
359
 
  (or (search-forward "<h2>Archives</h2>" nil t)
360
 
      (search-forward "#include virtual=\"/sidebar.html\"" nil t))
361
 
  (beginning-of-line)
362
 
  (if (string= "journal" (muse-page-name))
363
 
      (insert "<h2>Recent Entries</h2>\n\n<ul>\n")
364
 
    (insert "<h2>Contents</h2>\n\n<ul>\n"))
365
 
  (dolist (entry (nreverse muse-my-journal-entries))
366
 
    ;;(setq date (format-time-string "%m/%d" date))
367
 
    ;;(if (= ?0 (aref date 0))
368
 
    ;;  (setq date (substring date 1)))
369
 
    (insert (format "<li><a href=\"%s#%s\">%s</a></li>\n"
370
 
                    (muse-publish-output-name)
371
 
                    (muse-journal-anchorize-title (car entry))
372
 
                    (car entry))))
373
 
  (insert "</ul>\n\n")
374
 
  ;; jww (2005-04-17): a hack to rewrite MP3 titles
375
 
  (goto-char (point-min))
376
 
  (let ((inhibit-read-only t))
377
 
    (while (re-search-forward "<h2><a href=\"\\([^\"]+\\)\">\\(.+?\\)</a></h2>" nil t)
378
 
      (replace-match "<h2><a href=\"\\1\"><img src=\"images/speak.png\"></img></a>&nbsp;\\2</h2>"))))
379
 
 
380
 
;; (eval-when-compile
381
 
;;   (defvar muse-current-project))
382
 
;;
383
 
;; (defvar muse-ref-tag '("ref" nil t muse-ref-markup-tag))
384
 
;;
385
 
;; (defun muse-ref-markup-tag (beg end attrs)
386
 
;;   "This markup tag allows a poem to be included from another project page.
387
 
;; The form of usage is:
388
 
;;   <ref title=\"page.name[#subtitle]\">"
389
 
;;   (let ((page (cdr (assoc (cdr (assoc "title" attrs))
390
 
;;                        (muse-project-file-alist))))
391
 
;;      beg start end text)
392
 
;;     (if (null page)
393
 
;;      (insert "  *Reference to\n  unknown page \""
394
 
;;              (cdr (assoc "title" attrs)) "\".*\n")
395
 
;;       (setq beg (point))
396
 
;;       (let (title)
397
 
;;      (if (string-match "html" muse-publishing-current-style)
398
 
;;          t
399
 
;;        (insert
400
 
;;         (with-temp-buffer
401
 
;;           (insert-file-contents page)
402
 
;;           (goto-char (point-min))
403
 
;;           (forward-paragraph)
404
 
;;           (forward-line)
405
 
;;           (buffer-substring-no-properties (point) (point-max)))))))))
406
 
;;
407
 
;; (add-to-list 'muse-publish-markup-tags muse-ref-tag)
408
 
 
409
 
(when (and window-system (load "httpd" t))
410
 
  (require 'muse-http)
411
 
  ;;(add-hook 'after-init-hook 'httpd-start)
412
 
  (setq httpd-document-root (expand-file-name "~/Sites/johnw")))
413
 
 
414
 
;;(setq
415
 
;; muse-cite-titles
416
 
;; '(("Bah�'u'll�h"
417
 
;;    ("Kit�b-i-�q�n"
418
 
;;     "http://bahai-library.com/?file=bahaullah_kitab_iqan.html"
419
 
;;     "http://bahai-library.com/?file=bahaullah_kitab_iqan.html#%d"))
420
 
;;   ("`Abdu'l-Bah�"
421
 
;;    ("Promulgation of Universal Peace"
422
 
;;     "http://bahai-library.com/?file=abdulbaha_promulgation_universal_peace.html"
423
 
;;     "http://www.bahai-library.com/writings/abdulbaha/pup/pup.html#%d"))))
424
 
 
425
 
(provide 'muse-init)