VoVのHTMLレンダラリファクタリング中
これは本当に自分の書いたコードだろうか。なにかの陰謀に思えてきた。
…という戯れ言はさておき、テンプレートをファイルから読み込んで埋めこんだ記号列を置換というのはどうにも文字列処理に弱いAdaのコードとしては無駄なHTML全体の文字列のコピーが大量発生しているような気がします。気だけですが。それでどういうのがスマートかなあと弄り回した結果…
procedure Message_Page( Object : in Renderer; Output : not null access Ada.Streams.Root_Stream_Type'Class; Message : String; User_ID : String; User_Password : String) is html_t : Block(html(Output, UTF8)); begin declare head_t : Block(head_tag(Output)); begin meta_tag(Output, UTF8); link_tag(Output, Object.Configuration.Style_Sheet_File_Name.all); title_tag(Output, Title); end; declare body_t : Block(body_tag(Output)); begin h1_tag(Output, Title); declare div_t : Block(div_tag(Output, class => "center")); begin p_tag(Output, Message); Write(Output, "<form class=""button"" method=""POST"" >" & Line_Break & "<input type=""submit"" value=""戻る"" />" & Line_Break & "</form>" & Line_Break); end; end; end Message_Page;
RAIIでタグをクローズ…どこのRubyだこれは…orz…いやRubyのはブロック渡しなのは承知してますが、見た目が。
AdaでRAIIでクリティカルセクションとか見ませんしね…これは果てしなくAda的では無さそうです。Ada的にはどういうのが正しいんだ?
…まだVCLのTPageProducerみたいにするのがマシか?