static string GetCommandInitializer(Rgx::Match m){ // コマンドの種類 string cmdtype='"'+m.Groups["cmdtype"].Value+'"'; // 既定の引数 string argdef=m.Groups["arg"].Value; if(argdef=="") argdef="null"; else if(argdef[0]!='"'&&argdef[0]!='\'') argdef=RegExp.DoubleQuoteText(argdef); // コマンドの内容 string definition=m.Groups["str"].Value; { if(definition!=""){ // @ 文字列を通常文字列に変換 if(definition[0]=='@'){ string q=definition[1].ToString(); definition=q+definition.Substring(2).Replace("\\","\\\\").Replace(q+q,"\\"+q); } }else{ definition=m.Groups["func"].Value; if(cmdtype=="\"f@\"") definition="function(doc,cmdName){"+definition+"}"; else definition="function(doc,argv){"+definition+"}"; } } return "new ns.Command2("+cmdtype+","+argdef+","+definition+")"; }
static string GetEnvironmentInitializer(Rgx::Match m){ // コマンドの種類 string cmdtype,context; { string value=m.Groups["cmdtype"].Value; int index=value.IndexOf(':'); if(index>=0){ cmdtype=RegExp.DoubleQuoteText(value.Substring(0,index)); context=RegExp.DoubleQuoteText(value.Substring(index+1)); }else{ cmdtype=RegExp.DoubleQuoteText(value); context="_CtxName"; // 登録先の context } } // 既定の引数 string argdef=m.Groups["arg"].Value; if(argdef=="") argdef="null"; else if(argdef[0]!='"'&&argdef[0]!='\'') argdef=RegExp.DoubleQuoteText(argdef); // コマンドの内容 string definition=m.Groups["str"].Value; { if(definition!=""){ // @ 文字列を通常文字列に変換 if(definition[0]=='@'){ string q=definition[1].ToString(); definition=q+definition.Substring(2).Replace("\\","\\\\").Replace(q+q,"\\"+q); } }else{ definition=m.Groups["func"].Value; definition="function(doc,argv){"+definition+"}"; } } return "ns.Environment.Create("+cmdtype+","+argdef+","+definition+","+context+")"; }
static string TranslateCommand2(ProgramArgs _args,string content){ content=reg_cmd2.Replace(content,delegate(Rgx::Match m){ // 登録名 string name=m.Groups["cmdname"].Value; if(name[0]!='"'&&name[0]!='\'')name=RegExp.DoubleQuoteText(name); // Hook 先 string target=m.Groups["target"].Value; switch(target){ case "command": target="Command"; goto command; case "letter": target="Letter"; goto command; command: if(_args.option_partial){ string cmddef=GetCommandInitializer_1308(m); return "_Ctx.Define"+target+"({"+name+":"+cmddef+"});"; }else{ string handler=GetCommandInitializer(m); return "Add"+target+"Handler("+name+","+handler+");"; } case "environment":{ string handler=GetEnvironmentInitializer(m); if(_args.option_partial) return "_Ctx.AddEnvironment("+name+","+handler+");"; else return "AddEnvironment("+name+","+handler+");"; } default: return m.Value; } }); return content; }