本文整理汇总了C#中CommonMark.Syntax.Block类的典型用法代码示例。如果您正苦于以下问题:C# Block类的具体用法?C# Block怎么用?C# Block使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Block类属于CommonMark.Syntax命名空间,在下文中一共展示了Block类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: PositionSafeForSmartLink
public static bool PositionSafeForSmartLink(Block ast, int start, int length)
{
if (ast == null) return true;
var end = start + length;
var blockTags = new[] {BlockTag.FencedCode, BlockTag.HtmlBlock, BlockTag.IndentedCode, BlockTag.ReferenceDefinition};
var inlineTags = new[] {InlineTag.Code, InlineTag.Link, InlineTag.RawHtml, InlineTag.Image};
var lastBlockTag = BlockTag.Document;
foreach (var block in EnumerateBlocks(ast.FirstChild))
{
if (block.SourcePosition + block.SourceLength < start)
{
lastBlockTag = block.Tag;
continue;
}
if (block.SourcePosition >= end) return !blockTags.Any(tag => tag == lastBlockTag);
if (blockTags.Any(tag => tag == block.Tag)) return false;
return !EnumerateInlines(block.InlineContent)
.TakeWhile(il => il.SourcePosition < end)
.Where(il => il.SourcePosition + il.SourceLength > start)
.Any(il => inlineTags.Any(tag => tag == il.Tag));
}
return true;
}
开发者ID:jhorv,项目名称:Markdown-Edit,代码行数:26,代码来源:AbstractSyntaxTree.cs
示例2: WriteAsync
public async Task WriteAsync(Block block)
{
await WriteStartElementAsync("para");
await WriteStartElementAsync("command");
await WriteChildInlinesAsync(block);
await WriteEndElementAsync(); //command
await WriteEndElementAsync(); //para
}
开发者ID:AMDL,项目名称:amdl2maml,代码行数:8,代码来源:CommandWriter.cs
示例3: TopicParserResult
/// <summary>
/// Initializes a new instance of the <see cref="TopicParserResult"/> class.
/// </summary>
/// <param name="doc">Document block.</param>
internal TopicParserResult(Block doc)
{
if (doc == null)
throw new ArgumentNullException("doc");
if (doc.Tag != BlockTag.Document)
throw new InvalidOperationException("Unexpected block tag: " + doc.Tag);
Document = doc;
}
开发者ID:AMDL,项目名称:amdl2maml,代码行数:12,代码来源:TopicParserResult.cs
示例4: GetTitle
private static string GetTitle(TopicData topic, Block block)
{
if (block == null || block.HeaderLevel != 1)
return topic.Name;
var title = string.Empty;
for (var inline = block.InlineContent; inline != null; inline = inline.NextSibling)
title += inline.LiteralContent;
return title;
}
开发者ID:AMDL,项目名称:amdl2maml,代码行数:9,代码来源:TopicUpdater.cs
示例5: CreateDocument
/// <summary>
/// Creates a new top-level document block.
/// </summary>
internal static Block CreateDocument()
{
#pragma warning disable 0618
Block e = new Block(BlockTag.Document, 1, 1, 0);
#pragma warning restore 0618
e.ReferenceMap = new Dictionary<string, Reference>();
e.Top = e;
return e;
}
开发者ID:CodeCharm,项目名称:CommonMark.NET,代码行数:12,代码来源:Block.cs
示例6: DoWriteStartSectionAsync
internal override async Task<SectionState> DoWriteStartSectionAsync(Block block, string title)
{
await WriteStartElementAsync("glossaryEntry");
await WriteStartElementAsync("terms");
foreach (var term in title.Split(','))
await WriteTermAsync(term);
await WriteEndElementAsync(); //terms
await WriteStartElementAsync("definition");
return SectionState.Content;
}
开发者ID:AMDL,项目名称:amdl2maml,代码行数:10,代码来源:GlossaryTopicWriter.cs
示例7: PrintPosition
private static void PrintPosition(bool enabled, TextWriter writer, Block block)
{
if (enabled)
{
writer.Write(" [");
writer.Write(block.SourcePosition);
writer.Write('-');
writer.Write(block.SourceLastPosition);
writer.Write(']');
}
}
开发者ID:AMDL,项目名称:CommonMark.NET,代码行数:11,代码来源:Printer.cs
示例8: WriteChainedInlineHeader
public void WriteChainedInlineHeader()
{
// Process
Block block = new Block(BlockTag.AtxHeader, 0);
block.InlineContent = new Inline("Title");
block.InlineContent.NextSibling = new Inline(" in many");
block.InlineContent.NextSibling.NextSibling = new Inline(" siblings");
string output = this.Process(block);
// Assert
Assert.AreEqual(string.Format(@"<!--UT [Title in many siblings](page-title-in-many-siblings)-->{0}<h0>Title in many siblings</h0>{0}", Environment.NewLine), output);
}
开发者ID:chnfow,项目名称:Projbook,代码行数:12,代码来源:InjectAnchorHtmlFormatterTests.cs
示例9: EnumerateBlocks
public static IEnumerable<Block> EnumerateBlocks(Block block)
{
if (block == null) yield break;
var stack = new Stack<Block>();
stack.Push(block);
while (stack.Any())
{
var next = stack.Pop();
yield return next;
if (next.NextSibling != null) stack.Push(next.NextSibling);
if (next.FirstChild != null) stack.Push(next.FirstChild);
}
}
开发者ID:jhorv,项目名称:Markdown-Edit,代码行数:13,代码来源:AbstractSyntaxTree.cs
示例10: WriteListItemAsync
internal override async Task WriteListItemAsync(Block block)
{
if (GetSectionState() != SectionState.Sections)
{
await base.WriteListItemAsync(block);
return;
}
await WriteStartElementAsync("step");
await WriteStartElementAsync("content");
await WriteChildBlocksAsync(block);
await WriteEndElementAsync(); //content
await WriteEndElementAsync(); //step
}
开发者ID:AMDL,项目名称:amdl2maml,代码行数:14,代码来源:HowToTopicWriter.cs
示例11: EndsWithBlankLine
/// <summary>
/// Check to see if a block ends with a blank line, descending if needed into lists and sublists.
/// </summary>
private static bool EndsWithBlankLine(Block block)
{
while (true)
{
if (block.IsLastLineBlank)
return true;
if (block.Tag != BlockTag.List && block.Tag != BlockTag.ListItem)
return false;
block = block.LastChild;
if (block == null)
return false;
}
}
开发者ID:aggieben,项目名称:CommonMark.NET,代码行数:19,代码来源:BlockMethods.cs
示例12: WriteChainedInlineHeader
public void WriteChainedInlineHeader()
{
// Process
Block block = new Block(BlockTag.AtxHeader, 0);
block.InlineContent = new Inline("Title");
block.InlineContent.NextSibling = new Inline(" in many");
block.InlineContent.NextSibling.NextSibling = new Inline(" siblings");
string output = this.Process(block);
// Assert
Assert.IsTrue(output.StartsWith(@"<a name=""page-title+in+many+siblings"">"));
Assert.AreEqual(1, this.Formatter.Anchors.Length);
Assert.AreEqual("page-title+in+many+siblings", this.Formatter.Anchors[0].Value);
Assert.AreEqual("Title in many siblings", this.Formatter.Anchors[0].Label);
Assert.AreEqual(0, this.Formatter.Anchors[0].Level);
}
开发者ID:GregMialon,项目名称:Projbook,代码行数:16,代码来源:InjectAnchorHtmlFormatterTests.cs
示例13: WriteListAsync
internal override async Task WriteListAsync(Block block)
{
if (SectionLevel < 2)
{
await base.WriteListAsync(block);
return;
}
await WriteEndIntroductionAsync();
//TODO procedure?
await WriteStartElementAsync("steps");
await WriteListClassAsync(block, ListClass.Bullet);
SetSectionState(SectionState.Sections);
await WriteChildBlocksAsync(block);
await WriteEndElementAsync(); //steps
}
开发者ID:AMDL,项目名称:amdl2maml,代码行数:17,代码来源:HowToTopicWriter.cs
示例14: WriteBlock
/// <summary>
/// Specializes block writing for anchor injection.
/// For each formatted header we generate an anchor based on the context name, the header content and eventually add an integer suffix in order to prevent conflicts.
/// </summary>
/// <param name="block">The block to process.</param>
/// <param name="isOpening">Define whether the block is opening.</param>
/// <param name="isClosing">Defines whether the block is closing.</param>
/// <param name="ignoreChildNodes">return whether the processing ignored child nodes.</param>
protected override void WriteBlock(Block block, bool isOpening, bool isClosing, out bool ignoreChildNodes)
{
// Filter opening header
if (isOpening && null != block && block.Tag == BlockTag.AtxHeader)
{
// Retrieve header content
string headerContent;
if (null != block.InlineContent && null != block.InlineContent.LiteralContent)
{
// Read the whole content
Inline inline = block.InlineContent;
StringBuilder stringBuilder = new StringBuilder();
do
{
stringBuilder.Append(inline.LiteralContent);
inline = inline.NextSibling;
} while (null != inline);
headerContent = stringBuilder.ToString();
}
else
{
headerContent = "unknown";
}
// Compute the anchor value
string sectionId = HttpUtility.UrlEncode(headerContent.ToLower());
sectionId = string.Format("{0}-{1}", this.ContextName, sectionId)
.Replace('+', '-');
// Detect anchor conflict
if (sectionConflict.ContainsKey(sectionId))
{
// Append the index
sectionId = string.Format("{0}-{1}", sectionId, ++sectionConflict[sectionId]);
}
// Write anchor
this.Write(string.Format(@"<!--{0} [{1}]({2})-->", this.PageSplittingIdentifier, headerContent, sectionId));
sectionConflict[sectionId] = 1;
}
// Trigger parent rendering for the default html rendering
base.WriteBlock(block, isOpening, isClosing, out ignoreChildNodes);
}
开发者ID:chnfow,项目名称:Projbook,代码行数:52,代码来源:InjectAnchorHtmlFormatter.cs
示例15: WriteDocument
/// <summary>
/// Writes the given CommonMark document to the output stream as HTML.
/// </summary>
public void WriteDocument(Block document)
{
if (document == null)
throw new ArgumentNullException(nameof(document));
bool ignoreChildNodes;
Block ignoreUntilBlockCloses = null;
Inline ignoreUntilInlineCloses = null;
foreach (var node in document.AsEnumerable())
{
if (node.Block != null)
{
if (ignoreUntilBlockCloses != null)
{
if (ignoreUntilBlockCloses != node.Block)
continue;
ignoreUntilBlockCloses = null;
}
WriteBlock(node.Block, node.IsOpening, node.IsClosing, out ignoreChildNodes);
if (ignoreChildNodes && !node.IsClosing)
ignoreUntilBlockCloses = node.Block;
}
else if (ignoreUntilBlockCloses == null && node.Inline != null)
{
if (ignoreUntilInlineCloses != null)
{
if (ignoreUntilInlineCloses != node.Inline)
continue;
ignoreUntilInlineCloses = null;
}
WriteInline(node.Inline, node.IsOpening, node.IsClosing, out ignoreChildNodes);
if (ignoreChildNodes && !node.IsClosing)
ignoreUntilInlineCloses = node.Inline;
}
}
}
开发者ID:Knagis,项目名称:CommonMark.NET,代码行数:44,代码来源:HtmlFormatter.cs
示例16: BreakOutOfLists
/// <summary>
/// Break out of all containing lists
/// </summary>
private static void BreakOutOfLists(ref Block blockRef, LineInfo line)
{
Block container = blockRef;
Block b = container.Top;
// find first containing list:
while (b != null && b.Tag != BlockTag.List)
b = b.LastChild;
if (b != null)
{
while (container != null && container != b)
{
Finalize(container, line);
container = container.Parent;
}
Finalize(b, line);
blockRef = b.Parent;
}
}
开发者ID:aggieben,项目名称:CommonMark.NET,代码行数:24,代码来源:BlockMethods.cs
示例17: AddLine
private static void AddLine(Block block, LineInfo lineInfo, string ln, int offset, int length = -1)
{
if (!block.IsOpen)
throw new CommonMarkException(string.Format(CultureInfo.InvariantCulture, "Attempted to add line '{0}' to closed container ({1}).", ln, block.Tag));
var len = length == -1 ? ln.Length - offset : length;
if (len <= 0)
return;
var curSC = block.StringContent;
if (curSC == null)
{
block.StringContent = curSC = new StringContent();
if (lineInfo.IsTrackingPositions)
curSC.PositionTracker = new PositionTracker(lineInfo.LineOffset);
}
if (lineInfo.IsTrackingPositions)
curSC.PositionTracker.AddOffset(lineInfo, offset, len);
curSC.Append(ln, offset, len);
}
开发者ID:aggieben,项目名称:CommonMark.NET,代码行数:22,代码来源:BlockMethods.cs
示例18: WriteStartIntroductionAsync
internal override async Task WriteStartIntroductionAsync(Block block)
{
await WriteStartElementAsync("glossary");
}
开发者ID:AMDL,项目名称:amdl2maml,代码行数:4,代码来源:GlossaryTopicWriter.cs
示例19: ProcessInlines
/// <summary>
/// Walk through the block, its children and siblings, parsing string content into inline content where appropriate.
/// </summary>
/// <param name="block">The document level block from which to start the processing.</param>
/// <param name="refmap">The reference mapping used when parsing links.</param>
/// <param name="settings">The settings that influence how the inline parsing is performed.</param>
public static void ProcessInlines(Block block, Dictionary<string, Reference> refmap, CommonMarkSettings settings)
{
Stack<Inline> inlineStack = null;
var stack = new Stack<Block>();
var parsers = settings.InlineParsers;
var specialCharacters = settings.InlineParserSpecialCharacters;
var subj = new Subject(refmap);
StringContent sc;
int delta;
while (block != null)
{
var tag = block.Tag;
if (tag == BlockTag.Paragraph || tag == BlockTag.AtxHeader || tag == BlockTag.SETextHeader)
{
sc = block.StringContent;
if (sc != null)
{
sc.FillSubject(subj);
delta = subj.Position;
block.InlineContent = InlineMethods.parse_inlines(subj, refmap, parsers, specialCharacters);
block.StringContent = null;
if (sc.PositionTracker != null)
{
sc.PositionTracker.AddBlockOffset(-delta);
AdjustInlineSourcePosition(block.InlineContent, sc.PositionTracker, ref inlineStack);
}
}
}
if (block.FirstChild != null)
{
if (block.NextSibling != null)
stack.Push(block.NextSibling);
block = block.FirstChild;
}
else if (block.NextSibling != null)
{
block = block.NextSibling;
}
else if (stack.Count > 0)
{
block = stack.Pop();
}
else
{
block = null;
}
}
}
开发者ID:aggieben,项目名称:CommonMark.NET,代码行数:60,代码来源:BlockMethods.cs
示例20: EnumerateSpanningBlocks
public static IEnumerable<Block> EnumerateSpanningBlocks(Block ast, int startOffset, int endOffset)
{
return EnumerateBlocks(ast.FirstChild)
.Where(b => (b.SourcePosition + b.SourceLength) > startOffset)
.TakeWhile(b => b.SourcePosition < endOffset);
}
开发者ID:jhorv,项目名称:Markdown-Edit,代码行数:6,代码来源:AbstractSyntaxTree.cs
注:本文中的CommonMark.Syntax.Block类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论