Exemplo n.º 1
0
        /// <summary>
        /// Visits the labeled list item.
        /// </summary>
        /// <param name="listItem">The list item.</param>
        public virtual void VisitLabeledListItem(LabeledListItem listItem)
        {
            if (listItem == null)
            {
                return;
            }
            VisitAttributeList(listItem.Attributes);
            _writer.WriteLine("{0}{1}", listItem.Label, new string(':', listItem.Level + 2));
            _writer.WriteLine();
            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 labeled list item.
 /// </summary>
 /// <param name="listItem">The list item.</param>
 public virtual void VisitLabeledListItem(LabeledListItem listItem)
 {
     VisitAttributable(listItem);
     VisitContainer(listItem);
 }
Exemplo n.º 3
0
 public virtual void Visit(LabeledListItem 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.LabeledListItem.Match(reader.Line);

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

            var label = match.Groups["label"].Value;
            var level = match.Groups["level"].Value.Length;

            // levels start at 0
            if (level > 0)
            {
                level -= 2;
            }

            var labeledListItem = new LabeledListItem(label, level);

            labeledListItem.Attributes.Add(attributes);
            attributes = null;

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

            // labeled lists are lenient with whitespace so can have whitespace after the label
            // and before any content.
            if (!string.IsNullOrWhiteSpace(text))
            {
                buffer.Add(text);
                reader.ReadLine();
            }
            else
            {
                reader.ReadLine();
                while (reader.Line != null &&
                       PatternMatcher.BlankCharacters.IsMatch(reader.Line))
                {
                    reader.ReadLine();
                }
            }

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

            ProcessBuffer(labeledListItem, ref buffer, ref attributes);

            LabeledList labeledList;

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

                if (labeledList != null && labeledList.Items.Count > 0 && labeledList.Items[0].Level == labeledListItem.Level)
                {
                    labeledList.Items.Add(labeledListItem);
                }
                else
                {
                    labeledList = new LabeledList {
                        Items = { labeledListItem }
                    };
                    container.Add(labeledList);
                }
            }
            else
            {
                labeledList = new LabeledList {
                    Items = { labeledListItem }
                };
                container.Add(labeledList);
            }

            attributes = null;
        }
Exemplo n.º 5
0
 /// <summary>
 /// Visits the labeled list item.
 /// </summary>
 /// <param name="listItem">The list item.</param>
 public virtual void VisitLabeledListItem(LabeledListItem listItem)
 {
     throw new NotImplementedException("TODO: Labeled List Item");
 }