コード例 #1
0
ファイル: RuiJiParser.cs プロジェクト: Bhanditz/RuiJi.Net
        /// <summary>
        /// parse extract block from ruiji expression
        /// </summary>
        /// <param name="expression">ruiji expression</param>
        /// <returns>parse result with extract block</returns>
        public ParseResult <ExtractBlock> ParseExtract(string expression)
        {
            var result = new ParseResult <ExtractBlock>(expression);

            try
            {
                result.Result = RuiJiBlockParser.ParserBlock(expression);
            }
            catch (Exception ex)
            {
                result.Messages.Add(ex.Message);
            }

            return(result);
        }
コード例 #2
0
ファイル: RuiJiParser.cs プロジェクト: Bhanditz/RuiJi.Net
        /// <summary>
        /// parse storage from ruiji expression
        /// </summary>
        /// <param name="expression">ruiji expression</param>
        /// <returns>parse result with storage</returns>
        //public ParseResult<object> ParseStorage(string expression)
        //{
        //    return new ParseResult<object>(expression);
        //}

        /// <summary>
        /// parse extract feature from ruiji expression
        /// </summary>
        /// <param name="expression">ruiji expression</param>
        /// <returns>parse result wieth extract feature</returns>
        public ParseResult <ExtractFeature> ParseFeatureRule(string expression)
        {
            var result = new ParseResult <ExtractFeature>(expression);

            result.Result.Features = new List <ISelector>();

            using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(expression)))
                using (var reader = new StreamReader(stream))
                {
                    while (!reader.EndOfStream)
                    {
                        var line = reader.ReadLine();

                        if (line.StartsWith("[") && line.EndsWith("]"))
                        {
                            var name = line.TrimStart('[').TrimEnd(']');
                            line = reader.ReadLine();

                            switch (name)
                            {
                            case "wildcard":
                            {
                                if (string.IsNullOrEmpty(line))
                                {
                                    result.Messages.Add("wildcard expression is empty");
                                    continue;
                                }
                                result.Result.Wildcard = line;
                                break;
                            }

                            case "feature":
                            {
                                while (!string.IsNullOrEmpty(line) && !reader.EndOfStream)
                                {
                                    result.Result.Features.Add(RuiJiBlockParser.ParserSelector(line));
                                    line = reader.ReadLine();
                                }
                                break;
                            }
                            }
                        }
                    }
                }

            return(result);
        }