Ejemplo n.º 1
0
        public override void ResolveDataInQueue()
        {
            #region //获取枚举的匹配集合

            if (string.IsNullOrWhiteSpace(SourceHtml))
            {
                return;
            }

            Regex regex = new Regex(@"<(?<HxTag>h\d+)\s+[^>]*id=""枚举[^>]+>((?<Nested><\k<HxTag>[^>]*>)|</\k<HxTag>>(?<-Nested>)|.*?)*</\k<HxTag>>(?<clumns>((?!</table>).|\n)*)", RegexOptions.IgnoreCase | RegexOptions.Compiled);

            var enumsMatchs = regex.Matches(SourceHtml);

            #endregion

            #region //将每个HTML的内容描述转换为EnumDesc对象

            //循环处理
            foreach (Match m in enumsMatchs)
            {
                //定义数据表描述对象处理上下文
                EnumDescContext context = new EnumDescContext(m.Value);

                //将HTMl信息解释为枚举EnumDesc的解释器
                List <EnumExpression> exps = new List <EnumExpression>();
                exps.Add(new EnumDescExpression());         //枚举描述信息解释器
                exps.Add(new EnumOptionsExpression());      //枚举成员解释器

                //循环执行文法解释器
                foreach (var exp in exps)
                {
                    exp.Interpret(context);
                }

                //将解释出来的EnumDesc加入数据队列
                DataQueue.Enqueue(context.EnumDesc);
            }

            #endregion
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 文法解释
 /// </summary>
 /// <param name="context"><seealso cref="EnumDescContext"/>对象实例</param>
 public abstract void Interpret(EnumDescContext context);