« HTML + CSS で数式組版 (その6) | トップページ | HTML + CSS で数式組版 (その8) »

2009年3月21日 (土)

HTML + CSS で数式組版 (その7)

HTML エレメントに変換。

変更箇所

;(defun parse-string (str elems se)
(defun parse-string (str se)

重大なことに気付きました。 parse-string 関数の elems 引数は使っていません。ので、キャンセルということで。

たぶん、ここに破壊的代入で AST を構築するつもりだったのですね。で、戻り値で文字位置を戻すと。 命令的な書き方ですと、そういうインターフェイスになりそうです。

追加箇所

(defun gen-html-elem (ast)
  (cond ((atom ast) nil)
        ((and (atom (car ast)) (atom (caddr ast)))
         (cond ((eq (car ast) 'text)
                (list 'span
                      (list 'class
                            (format nil "~A~A" (car ast) (cadr ast)))
                      (list 'text (caddr ast))))
               (t nil)))
        ((atom (car ast))
         (cons (list 'div
                     (list 'class
                           (format nil "~A~A" (car ast) (cadr ast))))
               (gen-html-elem (caddr ast))))
        (t (cons (gen-html-elem (car ast)) (gen-html-elem (cdr ast))))))

gen-html-elem 関数は、 AST を受け取って、 HTML エレメントに変換します。

こんな感じ:

(gen-html-elem (parse-string "x =\\frac{a}{b}+ c" 0))
=>
((span (class "text1") (text "x")) (span (class "text3") (text "="))
 ((div (class "frac8"))
  ((div (class "argbegin9"))
   (span (class "text10") (text "a")) nil)
  ((div (class "argbegin12"))
   (span (class "text13") (text "b")) nil))
 (span (class "text15") (text "+")) (span (class "text17") (text "c")))

|

« HTML + CSS で数式組版 (その6) | トップページ | HTML + CSS で数式組版 (その8) »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/80472/28727283

この記事へのトラックバック一覧です: HTML + CSS で数式組版 (その7):

« HTML + CSS で数式組版 (その6) | トップページ | HTML + CSS で数式組版 (その8) »