Exemplo n.º 1
0
        /// <summary>
        /// Visits the ordered list item.
        /// </summary>
        /// <param name="listItem">The list item.</param>
        public virtual void VisitOrderedListItem(OrderedListItem listItem)
        {
            if (listItem == null)
            {
                return;
            }
            if (listItem.Number.HasValue)
            {
                switch (listItem.Numbering)
                {
                case NumberStyle.LowerAlpha:
                    _writer.Write("{0}. ", Patterns.LowerAlphabet[listItem.Number.Value - 1]);
                    break;

                case NumberStyle.UpperAlpha:
                    _writer.Write("{0}. ", Patterns.UpperAlphabet[listItem.Number.Value - 1]);
                    break;

                case NumberStyle.LowerRoman:
                    _writer.Write("{0}. ", RomanNumerals.ToNumeral(listItem.Number.Value).ToLowerInvariant());
                    break;

                case NumberStyle.UpperRoman:
                    _writer.Write("{0}. ", RomanNumerals.ToNumeral(listItem.Number.Value));
                    break;

                case NumberStyle.Decimal:
                case NumberStyle.LowerGreek:
                case NumberStyle.Arabic:
                default:
                    _writer.Write("{0}. ", listItem.Number.Value);
                    break;
                }
            }
            else
            {
                _writer.Write("{0} ", new string('.', listItem.Level));
            }

            if (listItem.Count > 1)
            {
                _insideListItem = true;
            }

            for (int index = 0; index < listItem.Count; index++)
            {
                var element     = listItem[index];
                var lastElement = index == listItem.Count - 1;
                if (lastElement)
                {
                    _insideListItem = false;
                }
                element.Accept(this);
                if (!lastElement)
                {
                    _writer.WriteLine("+");
                }
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Visits the ordered list item.
 /// </summary>
 /// <param name="listItem">The list item.</param>
 public virtual void VisitOrderedListItem(OrderedListItem listItem)
 {
     VisitAttributable(listItem);
     VisitContainer(listItem);
 }
Exemplo n.º 3
0
 public virtual void Visit(OrderedListItem listItem)
 {
 }
Exemplo n.º 4
0
        public override void InternalParse(Container container, IDocumentReader reader, Func <string, bool> predicate, ref List <string> buffer,
                                           ref AttributeList attributes)
        {
            var match = PatternMatcher.OrderedListItem.Match(reader.Line);

            if (!match.Success)
            {
                throw new ArgumentException("not an ordered list item");
            }

            var level           = match.Groups["level"].Value;
            var orderedListItem = new OrderedListItem(level.Length);

            orderedListItem.Attributes.Add(attributes);

            var number     = match.Groups["number"].Value;
            var upperAlpha = match.Groups["upperalpha"].Value;
            var lowerAlpha = match.Groups["loweralpha"].Value;
            var upperRoman = match.Groups["upperRoman"].Value;
            var lowerRoman = match.Groups["lowerRoman"].Value;

            if (!string.IsNullOrEmpty(number))
            {
                orderedListItem.Number = int.Parse(number);
            }
            else if (!string.IsNullOrEmpty(upperAlpha))
            {
                orderedListItem.Numbering = NumberStyle.UpperAlpha;
                orderedListItem.Number    = Array.IndexOf(Patterns.UpperAlphabet, upperAlpha) + 1;
            }
            else if (!string.IsNullOrEmpty(lowerAlpha))
            {
                orderedListItem.Numbering = NumberStyle.LowerAlpha;
                orderedListItem.Number    = Array.IndexOf(Patterns.LowerAlphabet, lowerAlpha) + 1;
            }
            else if (!string.IsNullOrEmpty(upperRoman))
            {
                orderedListItem.Numbering = NumberStyle.UpperRoman;
                orderedListItem.Number    = RomanNumerals.ToInt(upperRoman);
            }
            else if (!string.IsNullOrEmpty(lowerRoman))
            {
                orderedListItem.Numbering = NumberStyle.LowerRoman;
                orderedListItem.Number    = RomanNumerals.ToInt(lowerRoman);
            }

            var text = match.Groups["text"].Value;

            buffer.Add(text);
            reader.ReadLine();

            attributes = null;

            while (reader.Line != null &&
                   !PatternMatcher.BlankCharacters.IsMatch(reader.Line) &&
                   !PatternMatcher.OrderedListItem.IsMatch(reader.Line) &&
                   (predicate == null || !predicate(reader.Line)))
            {
                if (PatternMatcher.ListItemContinuation.IsMatch(reader.Line))
                {
                    ProcessBuffer(orderedListItem, ref buffer, ref attributes);
                    reader.ReadLine();
                    DescendingParse(
                        orderedListItem,
                        reader,
                        line => PatternMatcher.BlankCharacters.IsMatch(line) || PatternMatcher.OrderedListItem.IsMatch(line),
                        ref buffer,
                        ref attributes);
                }
                else
                {
                    buffer.Add(reader.Line);
                    reader.ReadLine();
                }
            }

            ProcessBuffer(orderedListItem, ref buffer, ref attributes);

            OrderedList orderedList;

            if (container.Count > 0)
            {
                orderedList = container[container.Count - 1] as OrderedList;

                if (orderedList != null && orderedList.Items.Count > 0 && orderedList.Items[0].Level == orderedListItem.Level)
                {
                    orderedList.Items.Add(orderedListItem);
                }
                else
                {
                    orderedList = new OrderedList {
                        Items = { orderedListItem }
                    };
                    container.Add(orderedList);
                }
            }
            else
            {
                orderedList = new OrderedList {
                    Items = { orderedListItem }
                };
                container.Add(orderedList);
            }

            attributes = null;
        }