当前位置:  开发笔记 > 编程语言 > 正文

是否有用于生成HTML的Emacs Lisp库?

如何解决《是否有用于生成HTML的EmacsLisp库?》经验,为你挑选了1个好方法。

我正在寻找一种解决方案,允许我编写本机Emacs Lisp代码,并在编译时将其转换为HTML,如Franz的htmlgen:

(html
 ((:div class "post")
  (:h1 "Title")
  (:p "Hello, World!")))

当然我可以编写自己的宏,但是如果有任何关于这个问题的项目我很感兴趣.



1> Trey Jackson..:

如您所知,xmlgen从列表结构生成XML.我所做的令人失望的是``xmlgen`包它支持的格式与Emacs的xml解析器完全相反.

我确实将它添加到我的xmlgen副本中:

;; this creates a routine to be the inverse of what xml-parse does
;;;###autoload
(defun xml-gen (form &optional in-elm level)
  "Convert a sexp to xml:
  '(p :class \"big\")) => \"

\"" (let ((level (or level 0))) (cond ((numberp form) (number-to-string form)) ((stringp form) form) ((listp form) (destructuring-bind (xml attrs) (xml-gen-extract-plist form) (let ((el (car xml))) (unless (symbolp el) (error "Element must be a symbol (got '%S')." el)) (setq el (symbol-name el)) (concat "<" el (xml-gen-attr-to-string attrs) (if (> (length xml) 1) (concat ">" (mapconcat (lambda (s) (xml-gen s el (1+ level))) (cdr xml) "") "") "/>")))))))) (defun xml-gen-attr-to-string (plist) (reduce 'concat (mapcar (lambda (p) (concat " " (symbol-name (car p)) "=\"" (cdr p) "\"")) plist))) (defun xml-gen-extract-plist (list) (list (cons (car list) (let ((kids (xml-node-children list))) (if (= 1 (length kids)) kids (remove-if-not 'listp kids)))) (xml-node-attributes list)))

注意:此接口是xml-gen(不是xmlgen原始解析).

使用此界面,以下内容成立:

(string-equal (xml-gen (car (xml-parse-region )))
              )

(equal (car (xml-parse-region (insert (xml-gen ))))
       )

新的xml-gen并不努力保留xml-parse-region例程生成的空白.

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有