public static SegmentCollection GetRegions(string code) { MatchCollection mc = regexRegion.Matches(code); SegmentCollection segments = new SegmentCollection(); string segment; int position = 0; foreach(Match m in mc) { segment = code.Substring(position, m.Index - position); //截取到时标志位前的内容 position = m.Index + m.Length; segments.Add(new Segment(segment)); //添加正文片断 string content = m.Groups["Template"].Value; //除去起始标签的内容部分 string nameTag = m.Groups["Name"].Value; //起始标签的标识名; 例如: <!--!Title--> , 结果: Title string matchResult = m.Value; //匹配后的整个结果; 例如: 最后结果<!--!Title-->Category: {CategoryName}<!--Title!--> segments.Add(new Region(nameTag, matchResult, content)); //添加要替换部分的信息 } segment = code.Substring(position, code.Length - position); //获取最后剩余的内容部分 segments.Add(new Segment(segment)); return segments; /*example: * content: <title><!--!Title-->Category: {CategoryName}<!--Title!--> Of Northwind</title> * result: * [0] : <title> -- segment * [1] : <!--!Title-->Category: {CategoryName}<!--Title!--> -- region * [0]: Category: -- segment * [1]: {CategoryName} -- field * [2]: "" -- segment * [2] : of Northwind</title> -- segment */ }
public Uri GetUri() { StringBuilder builder = new StringBuilder(Url); SegmentCollection segments = new SegmentCollection(); segments.Add(this.Version); segments.Add(this.Server); segments.Add(this.Ting); foreach (var segment in segments) { builder.Append(string.Format("/{0}", segment.Name)); } builder.Append("?"); builder.Append(Parameters.ToString()); return(new Uri(builder.ToString())); }
public static LIN AddLIN(this SegmentCollection doc) { var l = new LIN(); doc.Add(l); return(l); }
public static SegmentCollection GetFields(string code) { MatchCollection mc = regexField.Matches(code); SegmentCollection segments = new SegmentCollection(); string name; string format; string length; int len = 0; string segment; int position = 0; foreach(Match m in mc) { segment = code.Substring(position, m.Index - position); segments.Add(new Segment(segment)); //添加正文片断 position = m.Index + m.Length; name = m.Groups["Name"].Value; format = m.Groups["Format"].Value; length = m.Groups["Length"].Value; if(string.IsNullOrEmpty(name)) { name = string.Empty; } if(string.IsNullOrEmpty(format)) { format = string.Empty; } else { format = format.Substring(2); format = format.Substring(0, format.Length - 1); } if(!string.IsNullOrEmpty(length)) { int.TryParse(length.Substring(1), out len); } segments.Add(new Field(m.Value, name, len, format)); } segment = code.Substring(position, code.Length - position); segments.Add(new Segment(segment)); return segments; }
public BooleanVector GetVector(Circle circle) { Debug.Assert(circle.Any()); int count = circle.Count; var collection = new SegmentCollection(); for (int i = 0; i < count; i++) { collection.Add(new Segment(circle[i], circle[(i + 1) % count])); } Debug.Assert(collection.All(Contains)); List <int> indexes; if (Settings.EnableCudafy) { try { IEnumerable <IEnumerable <int> > list1 = collection.Select(GetInts); IEnumerable <IEnumerable <int> > list2 = this.Select(GetInts); int[,] matrix; lock (CudafySequencies.Semaphore) { CudafySequencies.SetSequencies( list1.Select(item => item.ToArray()).ToArray(), list2.Select(item => item.ToArray()).ToArray() ); CudafySequencies.Execute("Compare"); matrix = CudafySequencies.GetMatrix(); } lock (CudafyMatrix.Semaphore) { CudafyMatrix.SetMatrix(matrix); CudafyMatrix.ExecuteRepeatZeroIndexOfZero(); indexes = CudafyMatrix.GetIndexes().ToList(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); indexes = collection.Select(segment => IndexOf(segment)).ToList(); } } else { indexes = collection.Select(segment => IndexOf(segment)).ToList(); } indexes.Sort(); var booleanVector = new BooleanVector(); if (indexes[0] > 0) { booleanVector.AddRange(Enumerable.Repeat(false, indexes[0])); } booleanVector.Add(true); for (int i = 1; i < indexes.Count; i++) { if (indexes[i] - indexes[i - 1] > 1) { booleanVector.AddRange(Enumerable.Repeat(false, indexes[i] - indexes[i - 1] - 1)); } booleanVector.Add(true); } return(booleanVector); }