我正在为Emacs编写一个函数,将自动生成的纯文本文件转换为HTML,但遇到问题...如何添加结束标记(例如</div>
)?
(注意:Org-mode的内置组织导出不是我想要的。)
纯文本输入如下:
* 2012
** Jan
balahbalah
...
** Feb
balahbalah
...
* 2013
** Mar
balahbalah
...
(我写过一个函数可以将整个文件复制到另一个缓冲区并处理“balahbalah”。)
所需的输出是:
<div class="year">
<h2>2012</h2>
<div class="month">
<h3>Jan</h3>
balahbalah
....
</div>
<div class="month">
<h3>Feb</h3>
balahbalah
....
</div>
</div>
<div class="year">
<h2>2013</h2>
<div class="month">
<h3>March</h3>
balahbalah
....
</div>
</div>
我该怎么办?谢谢!
答案 0 :(得分:2)
这里有一些新鲜的代码:
(defun org-to-list ()
(interactive)
(let* ((str
(buffer-substring-no-properties (point-min)
(point-max)))
(years-str (delete "" (split-string str "^* ")))
(years
(mapcar
(lambda(x)
(when (string-match "^\\([0-9]+\\)\\([^\0]*\\)$" x)
(list (match-string 1 x)
(mapcar
(lambda (y)
(when (string-match
"^\\([a-zA-Z]+\\)\\([^\0]*\\)$" y)
(cons (match-string 1 y)
(match-string 2 y))))
(delete
"\n"
(split-string (match-string 2 x) "^** "))))))
years-str)))
(switch-to-buffer-other-window
(get-buffer-create "*Generated HTML*"))
(delete-region (point-min) (point-max))
(insert
(mapconcat
(lambda(x)
(concat
(format "<div class=\"year\">\n <h2>%s</h2>\n" (car x))
(mapconcat
(lambda(y)
(concat
(format
" <div class=\"month\">\n <h3>%s</h3>\n" (car y))
(mapconcat
(lambda(z)(format " %s" z))
(delete "" (split-string (cdr y) "\n"))
"\n")
"\n </div>"))
(cadr x)
"\n")
"\n</div>\n"))
years
"\n"))))
您可以使用 M-x 运行它。它创建一个包含以下内容的新缓冲区:
<div class="year">
<h2>2012</h2>
<div class="month">
<h3>Jan</h3>
spam
</div>
<div class="month">
<h3>Feb</h3>
and eggs!
</div>
</div>
<div class="year">
<h2>2013</h2>
<div class="month">
<h3>Mar</h3>
spam spam?
</div>
</div>
答案 1 :(得分:0)
Emacs org-mode附带一个html-exporter。 组织模式有自己的信息文件:
C-h i RET m Org Mode RET
请参阅“导出”标记