private static List<string> RunParseCase(string markdown) { var retVal = new List<string>(); var parser = new MarkdownParser(new TabAwareCharacterStream(markdown)); parser.ArtifactFound += (s, e) => retVal.Add(markdown.Substring(e.Artifact.InnerRange.Start, e.Artifact.InnerRange.Length)); parser.Parse(); return retVal; }
public void GetArtifacts(ITextProvider text, ArtifactCollection artifactCollection) { var parser = new MarkdownParser(new TabAwareCharacterStream(text)); CodeBlockInfo lastBlock = null; parser.ArtifactFound += (s, e) => { var cla = e.Artifact as CodeLineArtifact; if (cla != null) { if (lastBlock == null || lastBlock != cla.BlockInfo) { if (lastBlock != null) artifactCollection.Add(new BlockBoundaryArtifact(lastBlock, BoundaryType.End)); lastBlock = cla.BlockInfo; artifactCollection.Add(new BlockBoundaryArtifact(cla.BlockInfo, BoundaryType.Start)); } // Don't add artifacts for HTML code lines. if ((cla.BlockInfo.Language ?? "").StartsWith("htm", StringComparison.OrdinalIgnoreCase)) { cla.BlockInfo.IsExtradited = true; return; } } // If we got a non-block artifact after a block end, add the end marker. else if (lastBlock != null && e.Artifact.Start >= lastBlock.OuterEnd.End) { artifactCollection.Add(new BlockBoundaryArtifact(lastBlock, BoundaryType.End)); lastBlock = null; } artifactCollection.Add(e.Artifact); }; parser.Parse(); if (lastBlock != null) artifactCollection.Add(new BlockBoundaryArtifact(lastBlock, BoundaryType.End)); }