Example #1
0
        public bool TryFormat(ref StringReader reader, StringBuilder output, FormatterParams formatterParams)
        {
            reader.SkipSpaces();
            SubString subString = reader.ReadWord();

            if (subString.length == 0)
            {
                return(false);
            }
            reader.SkipSpaces();
            if (reader.Read(','))
            {
                reader.SkipSpaces();
                if (reader.Read("select"))
                {
                    reader.SkipSpaces();
                    if (reader.Read(','))
                    {
                        string value = formatterParams.valueProvider.GetValue(subString.ToString());
                        FormatSelect(value, reader, output, formatterParams);
                        return(true);
                    }
                }
            }
            return(false);
        }
        private static void Format(StringReader reader, StringBuilder output, FormatterParams formatterParams)
        {
            SubString subString = reader.ReadWord();

            reader.SkipSpaces();
            string    value;
            SubString text = RuntimeData.TryGetText(subString.ToString(), out value) ? ((SubString)value) : subString;

            formatterParams.formatter.AppendFormat(text, output, formatterParams);
        }
Example #3
0
            /// <summary>
            /// 转换成字符串
            /// </summary>
            /// <returns>字符串</returns>
            public override string ToString()
            {
                switch (TagType)
                {
                case Type.Region:
                    return("#region " + Command + " " + Content.ToString());

                case Type.Note:
                    return("/*" + Command + ":" + Content.ToString() + "*/");

                case Type.At:
                    return("@" + Content.ToString());
                }
                if (Content.String != null)
                {
                    string code = Content.ToString().Replace('\r', ' ').Replace('\n', ' ');
                    if (code.Length > 64)
                    {
                        return(code.Substring(0, 32) + " ... " + code.Substring(code.Length - 32));
                    }
                    return(code);
                }
                return(null);
            }
Example #4
0
        public int ReadInt()
        {
            int       i         = position;
            SubString subString = new SubString(text, i, 0);

            for (; i < limit && char.IsDigit(text[i]); i++)
            {
            }
            if (i == position)
            {
                throw new TextFormatterException(text, i, "Cannot read a int");
            }
            subString.length = i - subString.startIndex;
            position         = i;
            return(int.Parse(subString.ToString()));
        }
        public bool TryFormat(ref StringReader reader, StringBuilder output, FormatterParams formatterParams)
        {
            reader.SkipSpaces();
            SubString subString = reader.ReadWord();

            if (subString.length == 0)
            {
                return(false);
            }
            reader.SkipSpaces();
            if (reader.hasNext)
            {
                return(false);
            }
            string value = formatterParams.valueProvider.GetValue(subString.ToString());

            output.Append(value);
            return(true);
        }
Example #6
0
 /// <summary>
 /// 根据提交类型获取编码字符集
 /// </summary>
 /// <param name="contentType">提交类型</param>
 /// <returns>编码字符集</returns>
 private static Encoding getEncoding(string contentType)
 {
     foreach (SubString value in contentType.split(';'))
     {
         SubString key = value.Trim();
         if (key.StartsWith(CharsetName))
         {
             try
             {
                 key.MoveStart(CharsetName.Length);
                 return(Encoding.GetEncoding(key));
             }
             catch (Exception error)
             {
                 AutoCSer.LogHelper.Exception(error, key.ToString(), LogLevel.Exception | LogLevel.AutoCSer);
             }
         }
     }
     return(null);
 }
Example #7
0
        object?IRuleOutput.ComputeOutput(SubString text, Lazy <object?> lazyDefaultOutput)
        {
            var    map = lazyDefaultOutput.Value as IImmutableDictionary <string, object>;
            object child;

            if (map == null)
            {
                throw new ParsingException(
                          $"Rule has no children, so can't find child '{_name}'");
            }
            else if (map.TryGetValue(_name, out child))
            {
                return(child);
            }
            else
            {
                var childList = string.Join(", ", map.Keys);

                throw new ParsingException(
                          $"Can't find child '{_name}' for match '{text.ToString()}', only "
                          + $"{{{childList}}}");
            }
        }
        public void Object_End(SubString name)
        {
            var value = Top;

            m_stack.Pop();
            var top = Top;

            if (value.Value == null)
            {
                return;
            }

            if (top.Value == null)
            {
                return;
            }

            var classDescriptor  = top.ClassDescriptor;
            var itemName         = name.ToString();
            var memberDescriptor = classDescriptor.FindMember(itemName);

            if (memberDescriptor == null)
            {
                if (classDescriptor.IsDictionaryLike)
                {
                    var dictionary = (IDictionary)top.Value;

                    if (dictionary.Contains(itemName))
                    {
                        // TODO: Log?
                        return;
                    }

                    dictionary.Add(itemName, value.Value);
                }
                else if (classDescriptor.IsListLike)
                {
                    var list = (IList)top.Value;

                    if (list.IsReadOnly)
                    {
                        // TODO: Log?
                        return;
                    }

                    list.Add(value.Value);
                }
                else
                {
                    // TODO: Log?
                    return;
                }

                return;
            }
            var memberClassDescriptor = memberDescriptor.ClassDescriptor;

            if (memberClassDescriptor.IsListLike)
            {
                var list = (IList)memberDescriptor.Getter(top.Value);

                if (list == null)
                {
                    list = (IList)memberClassDescriptor.Creator();

                    if (list.IsReadOnly)
                    {
                        // TODO: Log?
                        return;
                    }

                    memberDescriptor.Setter(top.Value, list);
                    top.MembersAssignedTo.Add(memberDescriptor);
                }

                list.Add(value.Value);
            }
            else
            {
                top.MembersAssignedTo.Add(memberDescriptor);
                memberDescriptor.Setter(top.Value, value.Value);
            }
        }
        public void Object_Begin(SubString name)
        {
            var top = Top;

            if (top.Value == null)
            {
                return;
            }

            Type type = null;

            try
            {
                var classDescriptor  = top.ClassDescriptor;
                var itemName         = name.ToString();
                var memberDescriptor = classDescriptor.FindMember(itemName);

                if (memberDescriptor == null)
                {
                    if (classDescriptor.IsDictionaryLike)
                    {
                        if (!IsAssignableFromString(classDescriptor.DictionaryKeyType))
                        {
                            // TODO: Log?
                            return;
                        }

                        var dictionary = (IDictionary)top.Value;

                        if (dictionary.Contains(itemName))
                        {
                            // TODO: Log?
                            return;
                        }

                        var itemType = classDescriptor.DictionaryValueType;

                        if (IsAssignableFromString(itemType))
                        {
                            // TODO: Log?
                            return;
                        }

                        type = itemType.GetClassDescriptor().NonNullableType;
                    }
                    else if (classDescriptor.IsListLike)
                    {
                        var itemType = classDescriptor.ListItemType;

                        if (IsAssignableFromString(itemType))
                        {
                            // TODO: Log?
                            return;
                        }

                        type = itemType.GetClassDescriptor().NonNullableType;
                    }
                    else
                    {
                        // TODO: Log?
                        return;
                    }

                    return;
                }

                var memberClassDescriptor = memberDescriptor.ClassDescriptor;
                if (memberClassDescriptor.IsListLike)
                {
                    var list = (IList)memberDescriptor.Getter(top.Value);

                    if (list == null)
                    {
                        if (!memberDescriptor.HasSetter)
                        {
                            // TODO: Log?
                            return;
                        }

                        if (!memberClassDescriptor.HasCreator)
                        {
                            // TODO: Log?
                            return;
                        }
                    }

                    var itemType = memberClassDescriptor.ListItemType;

                    if (IsAssignableFromString(itemType))
                    {
                        // TODO: Log?
                        return;
                    }

                    type = itemType.GetClassDescriptor().NonNullableType;
                }
                else
                {
                    if (!memberDescriptor.HasSetter)
                    {
                        // TODO: Log?
                        return;
                    }

                    if (top.MembersAssignedTo.Contains(memberDescriptor))
                    {
                        // TODO: Log?
                        return;
                    }

                    if (IsAssignableFromString(memberDescriptor.MemberType))
                    {
                        // TODO: Log?
                        return;
                    }

                    type = memberDescriptor.ClassDescriptor.NonNullableType;
                }
            }
            finally
            {
                m_stack.Push(new Item(type));
            }
        }
        public void Value_End(SubString name)
        {
            var top = Top;

            if (top.Value == null)
            {
                return;
            }

            var value = m_value.ToString();

            var classDescriptor  = top.ClassDescriptor;
            var itemName         = name.ToString();
            var memberDescriptor = classDescriptor.FindMember(itemName);

            if (memberDescriptor == null)
            {
                if (classDescriptor.IsDictionaryLike)
                {
                    if (!IsAssignableFromString(classDescriptor.DictionaryKeyType))
                    {
                        // TODO: Log?
                        return;
                    }

                    var dictionary = (IDictionary)top.Value;

                    if (dictionary.Contains(itemName))
                    {
                        // TODO: Log?
                        return;
                    }

                    var itemType = classDescriptor.DictionaryValueType;
                    if (IsAssignableFromString(itemType))
                    {
                        dictionary.Add(itemName, value);
                        return;
                    }

                    var parsedValue = value.Parse(
                        Config.DefaultCulture,
                        itemType,
                        null
                        );

                    if (parsedValue == null)
                    {
                        // TODO: Log?
                        return;
                    }

                    dictionary.Add(itemName, parsedValue);
                }
                else if (classDescriptor.IsListLike)
                {
                    var list = (IList)top.Value;

                    if (list.IsReadOnly)
                    {
                        // TODO: Log?
                        return;
                    }

                    if (IsAssignableFromString(classDescriptor.ListItemType))
                    {
                        list.Add(value);
                    }

                    var itemType = classDescriptor.ListItemType;

                    var parsedValue = value.Parse(
                        Config.DefaultCulture,
                        itemType,
                        null
                        );

                    if (parsedValue == null)
                    {
                        // TODO: Log?
                        return;
                    }

                    list.Add(parsedValue);
                }
                else
                {
                    // TODO: Log?
                    return;
                }

                return;
            }

            var memberClassDescriptor = memberDescriptor.ClassDescriptor;

            if (memberClassDescriptor.IsListLike)
            {
                var list = (IList)memberDescriptor.Getter(top.Value);

                if (list == null)
                {
                    if (!memberDescriptor.HasSetter)
                    {
                        // TODO: Log?
                        return;
                    }

                    if (!memberClassDescriptor.HasCreator)
                    {
                        // TODO: Log?
                        return;
                    }

                    list = (IList)memberClassDescriptor.Creator();

                    if (list.IsReadOnly)
                    {
                        // TODO: Log?
                        return;
                    }

                    memberDescriptor.Setter(top.Value, list);
                    top.MembersAssignedTo.Add(memberDescriptor);
                }

                var itemType = memberClassDescriptor.ListItemType;

                if (IsAssignableFromString(itemType))
                {
                    list.Add(value);
                    return;
                }

                var parsedValue = value.Parse(
                    Config.DefaultCulture,
                    itemType,
                    null
                    );

                if (parsedValue == null)
                {
                    // TODO: Log?
                    return;
                }

                list.Add(parsedValue);
            }
            else
            {
                if (!memberDescriptor.HasSetter)
                {
                    // TODO: Log?
                    return;
                }

                if (top.MembersAssignedTo.Contains(memberDescriptor))
                {
                    // TODO: Log?
                    return;
                }

                if (IsAssignableFromString(memberDescriptor.MemberType))
                {
                    memberDescriptor.Setter(top.Value, value);
                    top.MembersAssignedTo.Add(memberDescriptor);
                    return;
                }

                var parsedValue = value.Parse(
                    Config.DefaultCulture,
                    memberDescriptor.MemberType,
                    null
                    );

                if (parsedValue == null)
                {
                    // TODO: Log?
                    return;
                }

                memberDescriptor.Setter(top.Value, parsedValue);
                top.MembersAssignedTo.Add(memberDescriptor);
            }
        }
Example #11
0
 /// <summary>
 /// 根据类型名称获取子段模板
 /// </summary>
 /// <param name="typeName">类型名称</param>
 /// <param name="name">子段模板名称</param>
 /// <returns>子段模板</returns>
 protected override TreeBuilder.Node fromNameNode(string typeName, ref SubString name)
 {
     TreeBuilder.Node node = GetNode(typeName);
     if (node != null)
     {
         node = node.GetFirstNodeByTag(Command.NAME, ref name);
         if (node == null)
         {
             Messages.Add("模板文件 " + getTemplateFileName(typeName) + " 未找到NAME " + name.ToString());
         }
     }
     return(node);
 }
Example #12
0
 /// <summary>
 /// 根据提交类型获取编码字符集
 /// </summary>
 /// <param name="contentType">提交类型</param>
 /// <returns>编码字符集</returns>
 private static Encoding getEncoding(string contentType)
 {
     foreach (SubString value in contentType.split(';'))
     {
         SubString key = value.Trim();
         if (key.StartsWith(CharsetName))
         {
             try
             {
                 key.MoveStart(CharsetName.Length);
                 return(Encoding.GetEncoding(key));
             }
             catch (Exception error)
             {
                 AutoCSer.Log.Pub.Log.Add(Log.LogType.Debug | Log.LogType.Info, error, key.ToString(), true);
             }
         }
     }
     return(null);
 }
Example #13
0
        static void Main(string[] args)
        {
            User[] users = new User[]
            {
                new User {
                    Id = 1, Name = @"AutoCSer", Remark = @"现在的努力是为了将来能够吹牛B"
                }
                , new User {
                    Id = 2, Name = @"张三", Remark = @"现在的努力是为了曾经吹过的牛B"
                }
                , new User {
                    Id = 3, Name = @"李四", Remark = @"现在吹下的牛b是将来努力的动力"
                }
            };

            using (AutoCSer.Search.StaticSearcher <SearchKey> searcher = new AutoCSer.Search.StaticSearcher <SearchKey>())//没有词库
            {
                using (AutoCSer.Search.StaticSearcher <SearchKey> .InitializeAdder initializeAdder = searcher.GetInitializeAdder())
                {//支持多个 InitializeAdder,可用于多线程并行初始化数据
                    initializeAdder.Add(users.getArray(value => new KeyValue <SearchKey, string>(new SearchKey {
                        Type = SearchType.UserName, Id = value.Id
                    }, value.Name)));
                    initializeAdder.Add(users.getArray(value => new KeyValue <SearchKey, string>(new SearchKey {
                        Type = SearchType.UserRemark, Id = value.Id
                    }, value.Remark)));
                }
                searcher.Initialized();

                foreach (KeyValue <HashString, AutoCSer.Search.StaticSearcher <SearchKey> .QueryResult> result in searcher.Search(@"张三丰偷学AutoCSer以后不再吹牛B了"))
                {
                    SubString SubString = result.Key;
                    Console.WriteLine(result.Value.WordType.ToString() + " " + SubString.ToString() + "[" + SubString.StartIndex.toString() + "]");
                    foreach (KeyValuePair <SearchKey, AutoCSer.Search.ResultIndexArray> indexs in result.Value.Result)
                    {
                        Console.WriteLine(" " + indexs.Key.Type.ToString() + "[Id = " + indexs.Key.Id.toString() + "] " + indexs.Value.Indexs.joinString(',', index => index.toString()));
                    }
                }
            }
            Console.WriteLine();

            using (AutoCSer.Search.StringTrieGraph trieGraph = new AutoCSer.Search.StringTrieGraph(new string[] { "牛B" }.getArray(value => AutoCSer.Search.Simplified.Format(value))))
                using (AutoCSer.Search.StaticStringTrieGraph staticTrieGraph = trieGraph.CreateStaticGraph(false))
                    using (AutoCSer.Search.StaticSearcher <SearchKey> searcher = new AutoCSer.Search.StaticSearcher <SearchKey>(staticTrieGraph))
                    {
                        using (AutoCSer.Search.StaticSearcher <SearchKey> .InitializeAdder initializeAdder = searcher.GetInitializeAdder())
                        {
                            initializeAdder.Add(users.getArray(value => new KeyValue <SearchKey, string>(new SearchKey {
                                Type = SearchType.UserName, Id = value.Id
                            }, value.Name)));
                            initializeAdder.Add(users.getArray(value => new KeyValue <SearchKey, string>(new SearchKey {
                                Type = SearchType.UserRemark, Id = value.Id
                            }, value.Remark)));
                        }
                        searcher.Initialized();

                        foreach (KeyValue <HashString, AutoCSer.Search.StaticSearcher <SearchKey> .QueryResult> result in searcher.Search(@"张三丰偷学AutoCSer以后不再吹牛B了"))
                        {
                            SubString SubString = result.Key;
                            Console.WriteLine(result.Value.WordType.ToString() + " " + SubString.ToString() + "[" + SubString.StartIndex.toString() + "]");
                            foreach (KeyValuePair <SearchKey, AutoCSer.Search.ResultIndexArray> indexs in result.Value.Result)
                            {
                                Console.WriteLine(" " + indexs.Key.Type.ToString() + "[Id = " + indexs.Key.Id.toString() + "] " + indexs.Value.Indexs.joinString(',', index => index.toString()));
                            }
                        }
                    }
            Console.WriteLine();

            using (AutoCSer.Search.StringTrieGraph trieGraph = new AutoCSer.Search.StringTrieGraph(new string[] { "牛b", "张三丰" }.getArray(value => AutoCSer.Search.Simplified.Format(value))))
                using (AutoCSer.Search.StaticStringTrieGraph staticTrieGraph = trieGraph.CreateStaticGraph(false))
                    using (AutoCSer.Search.StaticSearcher <SearchKey> searcher = new AutoCSer.Search.StaticSearcher <SearchKey>(staticTrieGraph))
                    {
                        using (AutoCSer.Search.StaticSearcher <SearchKey> .InitializeAdder initializeAdder = searcher.GetInitializeAdder())
                        {
                            initializeAdder.Add(users.getArray(value => new KeyValue <SearchKey, string>(new SearchKey {
                                Type = SearchType.UserName, Id = value.Id
                            }, value.Name)));
                            initializeAdder.Add(users.getArray(value => new KeyValue <SearchKey, string>(new SearchKey {
                                Type = SearchType.UserRemark, Id = value.Id
                            }, value.Remark)));
                        }
                        searcher.Initialized();

                        foreach (KeyValue <HashString, AutoCSer.Search.StaticSearcher <SearchKey> .QueryResult> result in searcher.Search(@"张三丰偷学AutoCSer以后不再吹牛B了"))
                        {
                            SubString SubString = result.Key;
                            Console.WriteLine(result.Value.WordType.ToString() + " " + SubString.ToString() + "[" + SubString.StartIndex.toString() + "]");
                            foreach (KeyValuePair <SearchKey, AutoCSer.Search.ResultIndexArray> indexs in result.Value.Result)
                            {
                                Console.WriteLine(" " + indexs.Key.Type.ToString() + "[Id = " + indexs.Key.Id.toString() + "] " + indexs.Value.Indexs.joinString(',', index => index.toString()));
                            }
                        }
                    }
            Console.WriteLine();

            Console.WriteLine("Over");
            Console.ReadKey();
        }
        public static unsafe long Run()
        {
            long ran = 0;
            const int iterations = 10 * 1000 * 1000;

            string value = "?subscription-key=345&key=gfql3i4ufgdf3";
            string value2 = "?key=gfql3i4ufgdf3&subscription-key=345";
            var subValue = new SubString(value, 0, value.Length);
            //byte[] valueBytes = Encoding.Unicode.GetBytes(value);
            //Console.WriteLine(value.GetHashCode());
            //Console.WriteLine(subValue.GetHashCode());

            //CodeTimer.Time(true, "string.GetHashCode()", iterations, () => { value.GetHashCode(); });

            //CodeTimer.Time(true, "SubString.GetHashCode()", iterations, () => { subValue.GetHashCode(); });

            var subString = new SubString(value, 1, 16);
            Console.WriteLine(subString.ToString() + ":" + subString.GetHashCode());
            subString = new SubString(value, 22, 3);
            Console.WriteLine(subString.ToString() + ":" + subString.GetHashCode());

            subString = new SubString(value2, 19, 16);
            Console.WriteLine(subString.ToString() + ":" + subString.GetHashCode());
            subString = new SubString(value2, 1, 3);
            Console.WriteLine(subString.ToString() + ":" + subString.GetHashCode());

            CodeTimer.Time(true, "new SubString().GetHashCode()", iterations, () =>
            {
                new SubString(value, 1, 16).GetHashCode();
                new SubString(value, 23, 3).GetHashCode();
                new SubString(value, 1, 16).GetHashCode();
            });

            var ssComparer = new OrdinalIgnoreCaseSubStringComparer();
            CodeTimer.Time(true, "new SubString().GetCaseInsensitiveHashCode()", iterations, () =>
            {
                ssComparer.GetHashCode(new SubString(value, 1, 16));
                ssComparer.GetHashCode(new SubString(value, 23, 3));
                ssComparer.GetHashCode(new SubString(value, 1, 16));
            });

            CodeTimer.Time(true, "string.Substring().GetHashCode()", iterations, () =>
            {
                string substring = value.Substring(1, 16);
                substring.GetHashCode();
                substring = value.Substring(23, 3);
                substring.GetHashCode();
                substring = value.Substring(1, 16);
                substring.GetHashCode();
            });

            var comparer = StringComparer.OrdinalIgnoreCase;
            CodeTimer.Time(true, "string.Substring().GetHashCode() insensitive", iterations, () =>
            {
                string substring = value.Substring(1, 16);
                comparer.GetHashCode(substring);
                substring = value.Substring(23, 3);
                comparer.GetHashCode(substring);
                substring = value.Substring(1, 16);
                comparer.GetHashCode(substring);
            });

            return ran;
        }