Files
markdig/src/Textamina.Markdig/Syntax/CodeBlock.cs

53 lines
1.5 KiB
C#
Raw Normal View History

2016-02-10 20:30:38 +09:00
using System;
using Textamina.Markdig.Helpers;
2016-02-10 20:30:38 +09:00
using Textamina.Markdig.Parsing;
namespace Textamina.Markdig.Syntax
2016-02-10 00:54:08 +09:00
{
/// <summary>
/// Repressents a indented code block.
/// </summary>
/// <remarks>
/// Related to CommonMark spec: 4.4 Indented code blocks
/// </remarks>
public class CodeBlock : LeafBlock
2016-02-10 00:54:08 +09:00
{
public static readonly BlockParser Parser = new ParserInternal();
2016-02-10 00:54:08 +09:00
2016-02-17 20:45:04 +09:00
public CodeBlock()
{
NoInline = true;
}
2016-02-10 00:54:08 +09:00
private class ParserInternal : BlockParser
2016-02-10 00:54:08 +09:00
{
public ParserInternal()
2016-02-10 00:54:08 +09:00
{
CanInterruptParagraph = false;
}
public override MatchLineResult Match(MatchLineState state)
{
2016-02-17 01:00:26 +09:00
var liner = state.Line;
int position = liner.Start;
2016-02-10 20:30:38 +09:00
liner.SkipLeadingSpaces3();
2016-02-10 00:54:08 +09:00
// 4.4 Indented code blocks
var c = liner.Current;
var isTab = CharHelper.IsTab(c);
var isSpace = CharHelper.IsSpace(c);
if ((isTab || (isSpace && (liner.Start - position) == 3)) && !liner.IsBlankLine())
2016-02-10 00:54:08 +09:00
{
liner.NextChar();
if (state.Block == null)
{
state.Block = new CodeBlock();
}
return MatchLineResult.Continue;
2016-02-10 00:54:08 +09:00
}
return MatchLineResult.None;
2016-02-10 00:54:08 +09:00
}
}
}
}