ChangeLog

last update: $Date: 2004/04/26 20:30:16 $
2004-05-09
  • [enhance] 文字列が '...' だけでなく "..." を使えるようになった。
  • [change] 改行文字 \n は '...' の中では使えなくなり、"..." の中でのみ使えるようになった。
  • [enhance] 改行が "\n" か "\r\n" かを自動判別するようになった。Windowsユーザに朗報。
  • [enhance] プレゼンテーションデータから id="name" を削除するためのコマンドラインオプション --delete_idattr をサポート。
2004-04-27
  • [enhance] mkmethod が --include_path と --load_path をサポート
2004-04-26
  • [bugfix] Analyzer#exec_stmt()において、:foreach(local=global)の処理に関するバグを修正 (reported by Andreas).
2004-04-24
  • [change] mkmethodスクリプトが「require 'cgi'」や「require 'erb'」を出力するようになった。
    ### current:
    $ mkmethod -M hoge -s hoge.html
    require 'cgi'
    module Hoge
      def self.expand_hoge(_args)
        user = _args[:user]
        _s = ''
        _s << "Hello " << CGI.escapeHTML((user).to_s) << "\n"
        return _s
      end
    end
    
  • [bugfix] mkmethodスクリプトが生成するコードにおいて「include ERB::Util」の位置がおかしかったのを修正 (reported by Andreas)
    ### old:
    $ mkmethod -M Hoge -s hoge.html
    module Hoge
      include ERB::Util
      def self.expand_hoge(_args)
        user = _args[:user]
        _erbout = ''; _erbout.concat "Hello ";
        _erbout.concat(( html_escape(user) ).to_s);
        _erbout.concat "\n"
        _erbout
      end
    end
    
    ### current:
    $ mkmethod -M Hoge hoge.html
    require 'erb'
    include ERB::Util
    module Hoge
      def self.expand_hoge(_args)
        user = _args[:user]
        _erbout = ''; _erbout.concat "Hello ";
        _erbout.concat(( html_escape(user) ).to_s);
        _erbout.concat "\n"
        _erbout
      end
    end
    
2004-04-23
  • [enhance] 新しいlanguageとしてruby2を追加。print ... の代わりに _s << (...).to_s を使用する。
    ### -l ruby
    $ kwartz -l ruby file.html
    print "<ul>\n"
    for item in list do
      print "  <li>", item, "</li>\n"
    end
    print "</ul>\n"
    
    ### -l ruby2
    $ kwartz -l ruby2 file.html
    _s << "<ul>\n"
    for item in list do
      _s << "  <li>" << (item).to_s << "</li>\n"
    end
    _s << "</ul>\n"
    
  • [enhance] 新しいlanguageとしてphp2を追加。ob_start()とob_get_contents()とob_end_clean()を使用することで、出力を文字列として取り出すことができる。
    ### -l php2
    $ kwartz -l php2 file.html
    <?php  ob_start(); ?>
    <ul>
    <?php foreach ($list as $item) { ?>
      <li><?php echo $item; ?></li>
    <?php } ?>
    </ul>
    <?php  $_s = ob_get_contents();  ob_end_clean(); ?>
    
  • [enhance] ユーティリティスクリプト mkmethod において、ruby2とphpとphp2をサポート。 またデフォルトはruby2になった。
  • [enhance] ユーティリティスクリプト mkmethod において、オプション -A でメソッドの引数が指定できるようになった。
    $ mkmethod -M Hoge -A user,list hoge.html
    module Hoge
      def self.expand_hoge(_args)
        user = _args[:user]
        list = _args[:list]
        return self._expand_hoge(user, list)
      end
      def self._expand_hoge(user, list)
        _s = ''
        _s << "Hello " << (user).to_s << "!\n"
        _s << "<ul>\n"
        for item in list do
          _s << "  <li>" << (item).to_s << "</li>\n"
        end
        _s << "</ul>\n"
        return _s
      end
    end
    
2004-04-05
  • [bugfix] 代入文において左辺が初出でないローカル変数だった場合に右辺をanalyzeしなかったバグを修正(reported by Shu-yu Guo)
2004-04-04
  • [bugfix] 負の数字があった場合、analyzeがエラーになるバグを修正 (reported by Andreas)
  • [update] ユーザーズガイドを更新
2004-03-26
  • [change] ERBのとき、サニタイズ用の関数としてERB::Util#html_escape()を使用するようにした。 そのため、ERBを使用する場合はメインプログラムを次のようにする。
    require 'erb'
    include ERB::Util
    str = File.open('file.erb') { |f| f.read }
    erb = ERB.new(str, $SAFE, '%')
    print erb.result()
    
  • [enhance] ユーティリティスクリプト util/mkmethod を追加。 これはテンプレートをコンパイルし、Rubyのモジュールを生成するスクリプトであり、次のように使用する。
    bash$ mkmethod -h
    Usage: mkmethod [-p file] [-l lang] [-M module] [-m method] [-s] file.html
    
    Options:
      -p file            : presentation logic file
      -l lang            : ruby / eruby / erb  (default 'ruby')
      -M module          : module name (default none)
      -m method          : method name (default 'expand_' + file)
      -s                 : sanitizing (equals to '--escape=true')
      --name=value       : options for kwartz
    
    bash$ mkmethod -p hoge.plogic hoge.html
      def expand_hoge(_args)
        user = _args[:user]
        list = _args[:list]
        print "Hello "
        print user
        print "!\n"
        for item in list do
          print "<ul>\n"
          print " <li>", item, "</li>\n"
          print "</ul>\n"
        end
      end
    
    bash$ mkmethod -p hoge.plogic -M Hoge -l erb hoge.html
    module Hoge
      include ERB::Util
      def self.expand_hoge(_args)
        user = _args[:user]
        list = _args[:list]
        _erbout = ''; _erbout.concat "Hello "; _erbout.concat(( user ).to_s); _erbout.concat "!\n"
         for item in list do
        _erbout.concat "<ul>\n"
        _erbout.concat " <li>"; _erbout.concat(( item ).to_s); _erbout.concat "</li>\n"
        _erbout.concat "</ul>\n"
         end
        _erbout
      end
    end
    
2004-03-25
  • [enhance] 他のプレゼンテーションデータファイルを読み込むためのディレクティブ 'include' を追加。(reported by Andreas)
    Presentation data:
    <span id="include:'file.html'"/>
    
  • [enhance] 他のプレゼンテーションロジックファイルを読み込むためのディレクティブ 'load' を追加。 また中間言語に:load()文も追加。ディレクティブ 'load' は :load() にコンバートされる。
    Presentation data:
    <span id="load:'file.plogic'"/>
    
    Presentation logic:
    :load('file.plogic')
    
  • [enhance] コマンドオプション --include_path=dir1,dir2,... を追加。 これは 'include' ディレクティブで読み込むファイルのディレクトリを指定する。
  • [enhance] コマンドオプション --load_path=dir1,dir2,... を追加。 これは 'load' ディレクティブで読み込むファイルのディレクトリを指定する。
  • [change] RubyとeRubyにおいて、サニタイズを CGI.escapeHTML(x) ではなく CGI.escapeHTML((x).to_s) に変更 (suggested by Andreas)
2004-03-24
  • [enhance] 関数E()X()をサポート。 E(expr)は式exprをサニタイズし、X(expr)はサニタイズをしない。 これらはコマンドラインオプション-s--escapeに依らない。
    Presentation data:
    #{expr}#
    #{E(expr)}#
    #{X(expr)}#
    
    Output script (PHP):
    <?php echo expr; ?>
    <?php echo htmlspecialchars(expr); ?>
    <?php echo expr; ?>
    
    Output script (PHP) (with command option -s):
    <?php echo htmlspecialchars(expr); ?>
    <?php echo htmlspecialchars(expr); ?>
    <?php echo expr; ?>
    
  • [enhance] 新しいディレクティブid="Value:expr"id="VALUE:expr"を追加。 前者はid="value:E(expr)"と同じでありexprをサニタイズして出力する。 後者はid="value:X(expr)"と同じでありexprをサニタイズせずに出力する。
  • [enhance] 新しいディレクティブid="Attr:name:value"id="ATTR:name:value"を追加。 前者はid="attr:name:E(value)"と同じであり、valueをサニタイズして出力する。 後者はid="attr:name:X(value)"と同じであり、valueをサニタイズせずに出力する。
2004-03-22
  • [change] <span>タグは削除するが<div>タグは残すように変更。(suggested by Andreas)
2004-03-21
  • [bugfix] ネストしたタグの扱いに関するバグを修正 (reported by Andreas)
2004-03-20
  • [enhance] 特殊マクロBEGINENDをサポート。 マクロBEGINで定義した内容は出力スクリプトの最初に追加され、マクロENDの内容は出力スクリプトの最後に追加される。
  • [enhance] 出力スクリプトの言語がRubyでもサニタイズすることが可能に。
2004-03-19
  • [enhance] id属性をkd属性と同じように使用可能に。 つまりkd属性のかわりにid属性を使用できるようになった。 加えて、id属性とkd属性を併用可能となっている。
  • [enhance] 「id="name"」は「id="mark:name"」と見なす。
  • [enhance] キーワード empty をサポート。 「str==empty」は「str==null || str==''」と同じ、「str!=empty」は「str!=nil && str!=''」と同じ。
  • [enhance] 新しいアクション 'analyze' を追加。 この機能は、テンプレートを解析し、テンプレート中で使われている変数をグローバル変数とローカル変数とに分けて報告する。
    Presentation data (hoge.html):
    Hello #{user}# !
    <ul id="mark:itemlist">
     <li id="value:item">foo</li>
    </ul>
    
    Presentation logic (hoge.plogic):
    :elem(itemlist)
      :foreach(item = itemlist)
        @stag
        @cont
        @etag
      :end
    :end
    
    Result:
    $ kwartz -a analyze -p hoge.plogic hoge.html
    global variables: user itemlist
    local variables:  item
    
  • [enhance] 新しいコマンドラインオプション --enable_eruby=true を追加。 これを指定すると、プレゼンテーションロジック中にeRubyコードを含めることができる。 これは、プレゼンテーションロジック中に複数のRawcodeを含めるときに使用する。
  • [enhance] ディレクティブの新しい記法として「id="foreach:item:list"」と「id="attr:name:value"」をサポート。「=」を使わないので、id属性の中に記述するのに適する(HTMLの仕様では、id属性の中に「=」を含めることはできない)。
  • [enhance] 新しいディレクティブ「id="replace:elemname"」をサポート。 このディレクティブがついたエレメントは、名前elemnameでマーキングされたエレメントで置き換えられる。
2004-03-08
  • [change] Velocityにおいて、式の出力を「${var}」から「${var}」に変更
  • [enhance] Velocityへトランスレートするときに、「expr!=null」「expr==null」をそれぞれ「expr」「!expr」に自動変換
2004-02-27
  • [enhance] 条件演算子が文字列または数値を返す場合は、コマンドラインオプション-sが指定されていてもサニタイズしないようになった。
2004-02-24
  • [enhance] ユーティリティスクリプト 'W3C Markup Validation Service for Kwartz' を同梱。 このスクリプトは、HTMLファイルからkd属性を取り除いたうえでW3C Markup Validation Serviceに送信し、結果を表示してくれるCGIスクリプトである。
2004-02-18
  • [enhance] attrディレクティブで名前空間を使用した属性名を指定可能に。
2004-02-12
  • public release