Пример #1
0
        /// <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);
        }
Пример #2
0
            private static string GetArgStamp(Rgx::CaptureCollection args)
            {
                string ret = "";

                foreach (Rgx::Capture c in args)
                {
                    ret += (ret == ""?"":",") + c.Value;
                }
                return(ret);
            }
Пример #3
0
            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;
            }
Пример #4
0
 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'));
 }
Пример #5
0
            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("##","");
                 * //*/
            }