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
             */
        }
Ejemplo n.º 2
0
        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()));
        }
Ejemplo n.º 3
0
        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;
		}
Ejemplo n.º 5
0
        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);
        }