Esempio n. 1
0
	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+")";
	}
Esempio n. 2
0
	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+")";
	}
Esempio n. 3
0
	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;
	}