2016-02-10 20:30:38 +09:00
|
|
|
using System;
|
|
|
|
|
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 : BlockLeaf
|
|
|
|
|
{
|
2016-02-15 06:58:16 +09:00
|
|
|
public static readonly BlockParser Parser = new ParserInternal();
|
2016-02-10 00:54:08 +09:00
|
|
|
|
|
|
|
|
|
2016-02-15 06:58:16 +09:00
|
|
|
private class ParserInternal : BlockParser
|
2016-02-10 00:54:08 +09:00
|
|
|
{
|
2016-02-15 06:58:16 +09:00
|
|
|
public override MatchLineResult Match(ref StringLiner liner, ref Block block)
|
2016-02-10 00:54:08 +09:00
|
|
|
{
|
2016-02-10 20:30:38 +09:00
|
|
|
int position = liner.Column;
|
|
|
|
|
liner.SkipLeadingSpaces3();
|
|
|
|
|
|
2016-02-10 00:54:08 +09:00
|
|
|
// 4.4 Indented code blocks
|
|
|
|
|
var c = liner.Current;
|
2016-02-10 20:30:38 +09:00
|
|
|
var isTab = Utility.IsTab(c);
|
|
|
|
|
var isSpace = Utility.IsSpace(c);
|
|
|
|
|
if ((isTab || (isSpace && (liner.Column - position) == 3)) && !liner.IsBlankLine())
|
2016-02-10 00:54:08 +09:00
|
|
|
{
|
|
|
|
|
liner.NextChar();
|
2016-02-15 00:34:21 +09:00
|
|
|
if (block == null)
|
|
|
|
|
{
|
|
|
|
|
block = new CodeBlock();
|
|
|
|
|
}
|
2016-02-15 06:58:16 +09:00
|
|
|
return MatchLineResult.Continue;
|
2016-02-10 00:54:08 +09:00
|
|
|
}
|
|
|
|
|
|
2016-02-15 06:58:16 +09:00
|
|
|
return MatchLineResult.None;
|
2016-02-10 00:54:08 +09:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|