예제 #1
0
파일: Parser.cs 프로젝트: feihuobuke/xCoder
 private void scope_OnParse(AbsParser parser, ParserEventArgs e)
 {
     var sc = e.Body.ToString();
     var option = e.Option.Clone() as ParserOption;
     var invoker = new ScopeInvoker(option, sc);
     invoker.Execute(e.Option.StatementParameters);
     e.Replace = true;
     e.Replacement = new StringBuilder(invoker.Result);
 }
예제 #2
0
 private void ParamParser_OnParse(AbsParser parser, ParserEventArgs e)
 {
     var value = @params[e.Body.ToString().Trim(' ')];
     e.Replace = true;
     e.Replacement = new StringBuilder(value);
 }
예제 #3
0
 public string Parse(StringBuilder code)
 {
     Code = code;
     ParseIndexes(code);
     var tmp = new StringBuilder(code.ToString());
     var indexes = Indexes.Where(t => t.Length > 0);
     var tmpDic = new Dictionary<ScopeIndex, StringBuilder>();
     foreach (var index in indexes)
     {
         var str = Code.ToString(index);
         Console.WriteLine("SCOPE : " + index.ToString());
         Console.WriteLine(Code.ScopeBody(index));
         var result = new StringBuilder(str);
         Results.Add(result);
         tmpDic.Add(index, result);
     }
     if (OnParse != null)
     {
         foreach (var result in tmpDic)
         {
             var str = Code.ToString(result.Key);
             var body = new StringBuilder(result.Value.ToString());
             body = body.Remove(0, Tag.BeginTag.Length);
             body = body.Remove(body.Length - Tag.CloseTag.Length, Tag.CloseTag.Length);
             var args = new ParserEventArgs
                            {
                                Replace = true,
                                Replacement = new StringBuilder(),
                                Result = result.Value,
                                Tag = Tag,
                                Index = result.Key,
                                Body = body,
                                Option = Option
                            };
             OnParse.Invoke(this, args);
             if (args.Replace)
             {
                 tmp = tmp.Replace(str, args.Replacement.ToString());
             }
         }
     }
     return tmp.ToString();
 }
예제 #4
0
 private void OutputParser_OnParse(AbsParser parser, ParserEventArgs e)
 {
     var tmp = e.Body;
     OutputParameterParser.OnParse += (OutputParameterParser_OnParse);
     var body = OutputParameterParser.Parse(tmp);
     OutputParameterParser.OnParse -= (OutputParameterParser_OnParse);
     e.Replace = true;
     e.Replacement = new StringBuilder(string.Format("Output += @\"{0}\";", body));
 }
예제 #5
0
 private void OutputParameterParser_OnParse(AbsParser parser, ParserEventArgs e)
 {
     var tmp = e.Body;
     e.Replace = true;
     e.Replacement = new StringBuilder(string.Format("\"+{0}+@\"", tmp));
 }