/// <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("+"); } } }
/// <summary> /// Visits the labeled list item. /// </summary> /// <param name="listItem">The list item.</param> public virtual void VisitLabeledListItem(LabeledListItem listItem) { VisitAttributable(listItem); VisitContainer(listItem); }
public virtual void Visit(LabeledListItem listItem) { }
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; }
/// <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"); }