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); }
/// <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); }
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); }
/// <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); }
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); } }
/// <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); }
/// <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); }
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; }