示例#1
0
 /// <summary>
 /// Visits the unordered list item.
 /// </summary>
 /// <param name="listItem">The list item.</param>
 public virtual void VisitUnorderedListItem(UnorderedListItem listItem)
 {
     if (listItem == null)
     {
         return;
     }
     _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("+");
         }
     }
 }
示例#2
0
 public virtual void Visit(UnorderedListItem listItem)
 {
     if (listItem.Count == 1)
     {
         _writer.Write("<li>");
         _isBlock = false;
         Visit((Container)listItem);
         _isBlock = true;
         _writer.WriteLine("</li>");
     }
     else
     {
         _writer.WriteLine("<li>");
         Visit((Container)listItem);
         _writer.WriteLine("</li>");
     }
 }
示例#3
0
 /// <summary>
 /// Visits the unordered list item.
 /// </summary>
 /// <param name="listItem">The list item.</param>
 public virtual void VisitUnorderedListItem(UnorderedListItem listItem)
 {
     VisitAttributable(listItem);
     VisitContainer(listItem);
 }
示例#4
0
        public override void InternalParse(Container container, IDocumentReader reader, Func <string, bool> predicate, ref List <string> buffer,
                                           ref AttributeList attributes)
        {
            var match = PatternMatcher.ListItem.Match(reader.Line);

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

            var level    = match.Groups["level"].Value;
            var text     = match.Groups["text"].Value;
            var listItem = new UnorderedListItem(level.Length);

            listItem.Attributes.Add(attributes);

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

            attributes = null;

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

            ProcessBuffer(listItem, ref buffer, ref attributes);

            UnorderedList unorderedList;

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

                if (unorderedList != null && unorderedList.Items.Count > 0 && unorderedList.Items[0].Level == listItem.Level)
                {
                    unorderedList.Items.Add(listItem);
                }
                else
                {
                    unorderedList = new UnorderedList {
                        Items = { listItem }
                    };
                    container.Add(unorderedList);
                }
            }
            else
            {
                unorderedList = new UnorderedList {
                    Items = { listItem }
                };
                container.Add(unorderedList);
            }

            attributes = null;
        }