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

2009年3月21日 (土)

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

キーワード+引数部分の解析です。

変更箇所

(defun parse-string (str elems se)
  (if (> (length str) 0)
      (let ((m (match-token str)))
        (let ((mb (car m))
              (me (cadr m))
              (spec (caddr m)))
        (if mb
            (let ((se2 (+ se me)))
              (cond
               ((eq spec 'keyargs)
                (cons (parse-keyword (substring str mb me) se) ;; se2 -> se
                      (parse-string (substring str me) elems se2)))
               ((eq spec 'argbegin)
                (let ((args (parse-args (substring str me) se2)))
                  (let ((se3 (parse-end args)))
                    (cons args
                          (parse-string
                           (substring str (+ (- se3 se2) 1))
                           elems se3)))))
               ((eq spec 'argend)
                (cons (list spec se2 (substring str mb me)) nil))
               ((eq spec 'text)
                (cons (list spec se2 (substring str mb me))
                      (parse-string (substring str me) elems se2)))))
          (parse-string (substring str 1) elems (+ se 1)))))))

(defun parse-keyword (str se)
  (let ((mb (string-match *match-key* str))
        (me (match-end 0)))
    (let ((kw (match-string 1)))
      (let ((sym (find-keyword kw *keywords*)))
        (if (eq sym nil)
            (error (format nil "keyword ~A not found." kw))
          (let ((se2 (+ se me)))
            (list sym se2
                  (parse-string (substring str me) nil se2))))))))

これで、 parse-string 関数は一応完成と:

(parse-string "x = \\frac{a}{b} + c" nil 0)
=>
((text 1 "x") (text 3 "=")
 (frac
  9
  ((argbegin 10 ((text 11 "a") (argend 12 "}")))
   (argbegin 13 ((text 14 "b") (argend 15 "}")))))
 (text 17 "+") (text 19 "c"))

|

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

コメント

コメントを書く



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


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



トラックバック

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

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

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