public static string Process(string content,FileInfo info){ string _filename=info.filename; content=reg_preproc.Replace(content,delegate(Rgx::Match m){ switch(m.Groups["name"].Value){ case "output":{ string fn=StringFromLiteral(m.Groups["filename"].Value).ToLower(); if(fn.EndsWith(".js"))fn=fn.Substring(0,fn.Length-3); if(fn!=null)_filename=fn; return ""; } case "include":{ // 読み取るファイル名 string incfile=StringFromLiteral(m.Groups["filename"].Value); if(!System.IO.File.Exists(incfile)){ System.Console.WriteLine("#include 指定した file '{0}' は見つかりませんでした。",incfile); return ""; }else{ System.Console.WriteLine("#include 指定した file '{0}' を取り込みます。",incfile); } // 内容 string inc_content=System.IO.File.ReadAllText(incfile,Program.enc); FileInfo incinfo=new FileInfo(); incinfo.filename=incfile; inc_content=Process(inc_content,incinfo); return @"/*------------------------------------------------------------------- Start of Inclusion from file '"+incfile+@"' -------------------------------------------------------------------*/ (function(){ "+RegExp.Indent(inc_content)+@" })(); /*------------------------------------------------------------------- End of Inclusion -------------------------------------------------------------------*/ "; } case "debug": // ■ debug 0 以外には対応していない。 // ■ 入れ子になっている場合に対応していない System.Console.WriteLine("#debug"); System.Console.WriteLine("#> 一つの debug-region が除去されました"); return "\n"; case "mwgwait":{ string fn=StringFromLiteral(m.Groups["filename"].Value).ToLower(); info.mwg_waits.Add(fn); return ""; } default: System.Console.WriteLine("!{0} は未知のプリプロセッサディレクティブです。無視します。",m.Groups["name"].Value); return m.Value; } }); info.filename=_filename; return content; }