Пример #1
0
	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;
	}