/// <summary> /// 指定した define 定義が __afh:: 型であるかどうかを判定し、 /// __afh:: 型であると判断された場合には、そのハンドラを作成して返します。 /// </summary> /// <param name="content"></param> /// <param name="proc"></param> /// <returns>__afh:: 型であると判定された場合に true を返します。</returns> public static bool TryCreateInstance(string content, out IDefineProcessor proc) { do { Rgx::Match m = rx_afhdefine.Match(content); if (!m.Success) { break; } string name = m.Groups["name"].Value; if (!methods.ContainsKey(name)) { break; } Rgx::CaptureCollection cc = m.Groups["arg"].Captures; string[] args = new string[cc.Count]; for (int i = 0; i < cc.Count; i++) { args[i] = cc[i].Value.Trim(); } proc = new AfhDefineProcessor(name, args); return(true); #pragma warning disable 162 }while(false); #pragma warning restore 162 // 失敗した場合 proc = null; return(false); }
private static string GetArgStamp(Rgx::CaptureCollection args) { string ret = ""; foreach (Rgx::Capture c in args) { ret += (ret == ""?"":",") + c.Value; } return(ret); }
public Template(string name, Rgx::CaptureCollection param, string content) { int i = 0; foreach (Rgx::Capture para in param) { content = Rgx::Regex.Replace(content, @"\b" + para.Value + @"\b", PARAM_REP + i++.ToString()); } content = Rgx::Regex.Replace(content, @"\b" + name + @"\b(?:\#\#)?", NAME_REP); this.name = name; this.content = content; this.count = i; }
private string Instantiate(string name, Rgx::CaptureCollection cc) { return(rx_param.Replace(this.content, delegate(Rgx::Match m){ string arg = cc[int.Parse(m.Groups["index"].Value)].Value; if (arg.StartsWith("##")) { arg = arg.Substring(2); } if (arg.EndsWith("##")) { arg = arg.Substring(0, arg.Length - 2); } // "#hogehoge#" という指定の時 if (arg.Length >= 4 && arg.StartsWith("\"#") && arg.EndsWith("#\"")) { arg = Rgx::Regex.Unescape(arg.Substring(2, arg.Length - 4)); } return arg; }).Replace(NAME_REP, name).Trim('\r', '\n')); }
private string Instantiate(Rgx::CaptureCollection cc) { string[] args = new string[cc.Count]; for (int i = 0; i < cc.Count; i++) { args[i] = cc[i].Value.TrimEnd(); } return(this.proc.Instantiate(args)); /* * return rx_param.Replace(this.content,delegate(Rgx::Match m){ * string arg=cc[int.Parse(m.Groups["index"].Value)].Value.TrimEnd(); * if(arg.Length>=4&&arg.StartsWith("\"#")&&arg.EndsWith("#\"")){ * arg=Rgx::Regex.Unescape(arg.Substring(2,arg.Length-4)); * } * return arg; * }).Replace("##",""); * //*/ }