HTMLのパース・作成


Tag: HTML

HTMLの作成

net.html.generator

FranzのAllegroServeの一部です。リストで表現したツリーからHTMLを出力するためのライブラリです。

(defpackage :htmlgen.use (:use :cl :net.html.generator))
(in-package :htmlgen.use)

(html (:html
        (:head (:title "タイトル"))
        (:body (:p "段落"))))
;=> "</html>"
;-> <html><head><title>タイトル</title></head><body><p>段落</p></body></html>

基本はnet.html.generator:htmlマクロです。このマクロは、ツリーから変換したHTMLをnet.html.generator:*html-stream*に出力します。特に指定しない場合、*html-stream*は標準出力です。

また、*html-stream*を簡単に設定するために、net.html.generator:html-streamというマクロも用意されています。

使用例

;; 部分的なツリーも変換できる
(html (:p "段落"))
;-> <p>段落</p>

;; 文字列は単純に出力される
(html "テキスト")
;-> テキスト

;; 直接タグを出力することもできる
(html "<em>強調</em>")
;-> <em>強調</em>

;; キーワードは開始タグとして解釈される
(html :br)
;-> <br>

;; HTMLに存在しない要素をキーワードに指定するとエラーになる
(html :abc)
;>> Error: unknown html keyword :ABC

;; 最初の要素がキーワードのリストは要素として解釈される
(html (:code "コード"))
;-> <code>コード</code>

;; 最初の要素がキーワードのリストのリストは属性を持つ要素として解釈される
(html ((:a :href "URL") "リンク"))
;-> <a HREF="URL">リンク</a>

;; それ以外の式はLispの式として評価されるが出力はされない
(html (list 0 1 2))
;=> (0 1 2)