예제 #1
0
            public ParaRange CreateNextInSequence()
            {
                ParaRange rng = new ParaRange(End);

                rng.Bold      = Bold;
                rng.Underline = Underline;
                rng.Italic    = Italic;
                return(rng);
            }
예제 #2
0
        private void Collect(string line, ParaRange rng)
        {
            int len = line.Length;

            while (rng.End < len)
            {
                if (line[rng.End] == '*' || line[rng.End] == '_' || line[rng.End] == '^')
                {
                    if (rng.Begin == rng.End)
                    {
                        ++rng.End;
                    }
                    break;
                }
                ++rng.End;
            }
        }
예제 #3
0
        protected List <ParaRange> Parse(string line)
        {
            var ranges = new List <ParaRange>();
            var rng    = new ParaRange(0);

            while (true)
            {
                Collect(line, rng);
                if (rng.IsEmpty)
                {
                    break;
                }
                else if (line[rng.Begin] == '*')
                {
                    rng.Bold = !rng.Bold;
                    rng      = rng.CreateNextInSequence();
                }
                else if (line[rng.Begin] == '^')
                {
                    rng.Italic = !rng.Italic;
                    rng        = rng.CreateNextInSequence();
                }
                else if (line[rng.Begin] == '_')
                {
                    rng.Underline = !rng.Underline;
                    rng           = rng.CreateNextInSequence();
                }
                else
                {
                    ranges.Add(rng);
                    rng = rng.CreateNextInSequence();
                }
            }

            return(ranges);
        }