新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

cl-who をつかう

なぜか HTML を生成するのに ASP.NET を使っているのだが、、、ASP.NET 自体は悪くなく、むしろ、素晴らしい技術だと思うが、使っている人が(契約している開発者)があまり素晴らしくなく、結果としてものすごくネストしたHTMLソースがちらばっている。

なんだか、めんどくさいので cl-who をつかい、圧縮することにした。まずは html を who の形式に変換。変換は簡単パーザを作った。Java
Script が混ざっていたりするとうまく変換できないが、、、、まぁ簡易的には使える。

(:div (:P)
 (:DIV :CLASS "pgNsSectionKolona" :ID "ip-cores"
  (:TABLE :STYLE "float: right; margin-left: 4px" :BORDER "0" :CELLSPACING "0"
   :CELLPADDING "0"
   (:TBODY
    (:TR
     (:TD ....

と、これだけでは括弧が増えただけ。vi 使いにはうれしいかもしれないが、ネストは解消されない。そこで、括弧を評価しつつ who 形式に変換する関数を作った。結果として、次のようになる。-aspx で終わるシンボルが泣ける。

(:div
  (:DIV :CLASS "pgDesnaKolonaTablicaTop")
  (:DIV :CLASS "pgDesnaKolonaTablicaContent"
        (:H2 "Read More ")
        (:UL
          (:LI logiCRAFT-CC-Kits-aspx)
          (:LI logiCRAFT-CC-Reference-FPGA-aspx
....

展開も全部自動でしてほしいので、つぎのようなデータを与えると自動的に変換してくれるようにした。

(((contents-data-dir #P"created-html/"))
 ("217.html" main-page ((main-page :file "217.who")
                        (right-menu :file "right-menu.who")
                        (right-menu-lib :file "right-menu-lib.props")
...

これでネストが浅くなって見通しがよくなる。