1

我正在为 Emacs 编写一个函数来将自动生成的纯文本文件转换为 HTML,但是遇到了一个问题......如何添加结束标签(例如</div>)?

(注意:Org-mode 的内置 org-export 不是我想要的。)

作为输入的纯文本如下:

* 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>

我应该怎么做?谢谢!

4

2 回答 2

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>
于 2013-08-24T09:37:19.493 回答
0

Emacs org-mode 带有一个 html-exporter。组织模式有自己的信息文件:

Chi RET m 组织模式 RET

见标签“出口”

于 2013-08-24T05:34:03.290 回答