2007年7月20日金曜日

(X)HTMLコンバータ (2)

命令・コメント・文字列・プリプロセッサ・ラベルのタグ付けに成功しました。と思ったら命令のタグ付けに不具合があったようです。残念。
関数と変数の区別はデータベースを用いる必要がありそうなので、ここでひと段落です。

今回はHTMLタグを2つのモードで生成するモジュールを垂れ流し。
解析スクリプトはあまりにも長すぎるので、もう少し整理してから垂れ流したいと思います。

配色は一時的にle.Antillaのものをお借りしています。#enum global MODE_XHTML = 1
#enum global MODE_HTML

// パラメータ省略用マクロ
#define ctype aloneTag( %1, %2 = "" ) _aloneTag( %1, %2 )
#define ctype startTag( %1, %2 = "" ) _startTag( %1, %2 )

#module
#defcfunc _aloneTag str tagName, str className
    if ( replaceMode@ == MODE_XHTML ) {
        if ( className == "" ) {
            return "<" + tagName + " />"
        } else {
            return "<" + tagName + " class=\"" + className + "\" />"
        }
    } else {
        if ( className == "" ) {
            return "<" + tagName + ">"
        } else {
            return "<" + tagName + " class=\"" + className + "\">"
        }
    }

#defcfunc endTag str tagName
    return "</" + tagName + ">"

#defcfunc _startTag str tagName, str className
    if ( className == "" ) {
        return "<" + tagName + ">"
    } else {
        return "<" + tagName + " class=\"" + className + "\">"
    }
#global
/* モジュールここまで */

*start
    repeat 2
        if ( cnt == 0 ) {
            replaceMode = MODE_HTML
        } else {
            replaceMode = MODE_XHTML
        }
        ; (X)HTMLの出力
        mes startTag( "html" ) + startTag( "head" )
        mes "\t" + startTag( "title" ) + "HTML Sample" + endTag( "title" )
        mes endTag( "head" )
        mes startTag( "body" )
        mes "\t" + startTag( "p""class1" ) + "message test" + aloneTag( "br" ) + "\n\t2nd line" + endTag( "p" )
        mes endTag( "body" ) + endTag( "html" ) + "\n"
    loop
    stop

0 件のコメント: