diff --git a/Markdown/Md.cs b/Markdown/Md.cs
index e0e4a8727..cbeedfab1 100644
--- a/Markdown/Md.cs
+++ b/Markdown/Md.cs
@@ -8,7 +8,9 @@ namespace Markdown
{
public class Md
{
+ //Todo plainMd - ассоциация с plainText-ом, а тип - массив строк.
private readonly string[] plainMd;
+
private readonly string baseUrl;
private readonly CssClassInfo cssClassInfo;
@@ -27,6 +29,7 @@ public class Md
private int currLineIndex;
+ //Todo Зачем нужна CurrLine? Может вообще лучше формальную грамматику сделать? Sprache
private string CurrLine
{
get { return plainMd[currLineIndex]; }
@@ -60,10 +63,11 @@ public Md(string plainMd, string baseUrl = "", CssClassInfo cssClassInfo = null)
currLineIndex = 0;
}
+ //Todo в spec.md ничего не нашел про Header
private HtmlToken ParseHeader()
{
+ //Todo .Replace("\\", "") - это зачем?
var headerText = CurrLine.Replace("#", "").Replace("\\", "");
-
var headerImportance = CurrLine.Length - headerText.Length;
currLineIndex++;
@@ -274,10 +278,13 @@ private static HtmlToken ParseEmInStrong(string currLine, ref int index, ref int
return htmlToken;
}
+ //Todo непонятное имя: не внутри цифр
private static bool NotInsideDigits(int tagIndex, string currLine)
{
- if (tagIndex + 1 == currLine.Length || tagIndex - 1 == -1)
+ //Todo tagIndex == 0
+ if(tagIndex + 1 == currLine.Length || tagIndex - 1 == -1)
return true;
+ //Todo !char.IsDigit(currLine[tagIndex + 1]) - tag всегда из 1 символа?
return !char.IsDigit(currLine[tagIndex - 1]) && !char.IsDigit(currLine[tagIndex + 1]);
}
@@ -327,6 +334,8 @@ private static Tag ParseTag(string currLine, int tagIndex)
return Tag.A;
if (currLine[tagIndex] != '_')
return Tag.Empty;
+
+ //Todo непонятно
if (tagIndex == currLine.Length - 1)
return Tag.Em;
return currLine[tagIndex + 1] == '_'
@@ -338,6 +347,8 @@ private static LineType GetLineTypeTag(string currLine)
{
if (currLine.StartsWith("#"))
return LineType.Header;
+
+ //Todo у некоторых людей сдвиги по 2 пробела. Константы в коде
if (currLine.StartsWith(" ") || currLine.StartsWith("\t"))
return LineType.CodeBlock;
if (char.IsDigit(currLine[0]))
diff --git a/Markdown/Spec.md b/Markdown/Spec.md
index 144ddfb3a..f440c10d1 100644
--- a/Markdown/Spec.md
+++ b/Markdown/Spec.md
@@ -1,6 +1,6 @@
# Спецификация языка разметки
-Процессору принимает на вход строку формата описанного ниже и возвращает HTML-код эквивалентный данной строке.
+Процессор принимает на вход строку формата, описанного ниже, и возвращает HTML-код эквивалентный данной строке.
###Описание правил:
Текст
diff --git a/Markdown/Tag.cs b/Markdown/Tag.cs
index 84d95effa..441948e2a 100644
--- a/Markdown/Tag.cs
+++ b/Markdown/Tag.cs
@@ -5,8 +5,11 @@ namespace Markdown
{
public class Tag
{
+ //Todo непонятно, что это
public string Md { get; }
+
public string Html { get; }
+
public static readonly Tag Em = new Tag("_", "em");
public static readonly Tag Strong = new Tag("__", "strong");
public static readonly Tag Empty = new Tag("", "");
diff --git a/Markdown/Test/HtmlToken_Should.cs b/Markdown/Test/HtmlToken_Should.cs
index de979fbd4..5e3bf0a60 100644
--- a/Markdown/Test/HtmlToken_Should.cs
+++ b/Markdown/Test/HtmlToken_Should.cs
@@ -16,6 +16,7 @@ public void ShouldInsertDataInToTags_WhenToStringCalls()
token.Render(null).Should().Be("data");
}
+ //Todo непонятные названия тестов
[Test]
public void ShouldConcatManyTags_WhenHasInsertedTags()
{
diff --git a/Markdown/Test/MD_Should.cs b/Markdown/Test/MD_Should.cs
index 63f14d3ec..4c0eabb4f 100644
--- a/Markdown/Test/MD_Should.cs
+++ b/Markdown/Test/MD_Should.cs
@@ -180,6 +180,7 @@ private static string GenerateMd(Random rnd)
return md.ToString();
}
+ //Todo зачем нужен этот тест? Линейность? Переписать нормально
[Test]
[Explicit]
public void PerformanceTest()
diff --git a/Markdown/Tokens/AHtmlToken.cs b/Markdown/Tokens/AHtmlToken.cs
index ecb40b0dd..560e4a649 100644
--- a/Markdown/Tokens/AHtmlToken.cs
+++ b/Markdown/Tokens/AHtmlToken.cs
@@ -7,16 +7,16 @@ public class AHtmlToken : HtmlToken
private readonly string url;
private readonly string baseUrl;
private bool IsReferece => url.StartsWith("/");
- public override int Length => Data.Length + url.Length + 4 + EscapedCharacters;
+ public int Length => Data.Length + url.Length + 4 + EscapedCharsCount;
- public AHtmlToken(string data, string url, int escapedCharacters, string baseUrl) : base("a", data, escapedCharacters)
+ public AHtmlToken(string data, string url, int escapedCharsCount, string baseUrl) : base("a", data, escapedCharsCount)
{
this.url = url;
this.baseUrl = baseUrl;
}
- public AHtmlToken(List parsedTokens, int escapedCharacters)
- : base("a", parsedTokens, escapedCharacters)
+ public AHtmlToken(List parsedTokens, int escapedCharsCount)
+ : base("a", parsedTokens, escapedCharsCount)
{
}
diff --git a/Markdown/Tokens/CodeHtmlToken.cs b/Markdown/Tokens/CodeHtmlToken.cs
index 924046cdd..ba486809f 100644
--- a/Markdown/Tokens/CodeHtmlToken.cs
+++ b/Markdown/Tokens/CodeHtmlToken.cs
@@ -14,7 +14,7 @@ public CodeHtmlToken(List parsedTokens) : base("code", parsedTokens,
public override string Render(CssClassInfo cssClassInfo)
{
- return InsertInToTags("pre", InsertInToTags(Data, cssClassInfo), cssClassInfo);
+ return WrapWithTag("pre", WrapWithTag(Data, cssClassInfo), cssClassInfo);
}
}
}
\ No newline at end of file
diff --git a/Markdown/Tokens/EmHtmlToken.cs b/Markdown/Tokens/EmHtmlToken.cs
index 8a5a40a1b..67ab7d3be 100644
--- a/Markdown/Tokens/EmHtmlToken.cs
+++ b/Markdown/Tokens/EmHtmlToken.cs
@@ -4,14 +4,15 @@ namespace Markdown.Tokens
{
public class EmHtmlToken : HtmlToken
{
- public override int Length => base.Length + 2;
+ //Todo Непонятно. Выглядит как какой-то хак
+ public int Length => base.Length + 2;
- public EmHtmlToken(string data, int escapedCharacters) : base("em", data, escapedCharacters)
+ public EmHtmlToken(string data, int escapedCharsCount) : base("em", data, escapedCharsCount)
{
}
- public EmHtmlToken(List parsedTokens, int escapedCharacters)
- : base("em", parsedTokens, escapedCharacters)
+ public EmHtmlToken(List parsedTokens, int escapedCharsCount)
+ : base("em", parsedTokens, escapedCharsCount)
{
}
}
diff --git a/Markdown/Tokens/HtmlToken.cs b/Markdown/Tokens/HtmlToken.cs
index cd15b314c..a7b6879e8 100644
--- a/Markdown/Tokens/HtmlToken.cs
+++ b/Markdown/Tokens/HtmlToken.cs
@@ -3,41 +3,47 @@
namespace Markdown.Tokens
{
+ //Todo много однотипных классов XxxHtmlToken - цель?
public abstract class HtmlToken
{
protected readonly string Tag;
protected readonly List ParsedTokens;
protected readonly string Data;
- protected virtual bool IsTagged => !string.IsNullOrEmpty(Tag);
+ public int Length;
- public virtual int Length => ParsedTokens.Sum(x => x.Length) + (Data ?? "").Length + EscapedCharacters;
+ protected readonly int EscapedCharsCount;
- protected readonly int EscapedCharacters;
-
- protected HtmlToken(string tag, string data, int escapedCharacters)
+ protected HtmlToken(string tag, string data, int escapedCharsCount)
{
Tag = tag;
Data = data;
- EscapedCharacters = escapedCharacters;
+ EscapedCharsCount = escapedCharsCount;
ParsedTokens = new List();
+ Length = CalcLength();
}
- protected HtmlToken(string tag, List parsedTokens, int escapedCharacters)
+ protected HtmlToken(string tag, List parsedTokens, int escapedCharsCount)
{
Tag = tag;
ParsedTokens = parsedTokens;
- EscapedCharacters = escapedCharacters;
+ EscapedCharsCount = escapedCharsCount;
+ Length = CalcLength();
+ }
+
+ private int CalcLength()
+ {
+ return ParsedTokens.Sum(x => x.Length) + (Data ?? "").Length + EscapedCharsCount;
}
- protected virtual string InsertInToTags(string dataToInsert, CssClassInfo cssClassInfo)
+ protected virtual string WrapWithTag(string dataToInsert, CssClassInfo cssClassInfo)
{
- return IsTagged
- ? InsertInToTags(Tag, dataToInsert, cssClassInfo)
+ return !string.IsNullOrEmpty(Tag)
+ ? WrapWithTag(Tag, dataToInsert, cssClassInfo)
: dataToInsert;
}
- protected virtual string InsertInToTags(string tag, string dataToInsert, CssClassInfo cssClassInfo)
+ protected virtual string WrapWithTag(string tag, string dataToInsert, CssClassInfo cssClassInfo)
{
return $"<{tag}{GetCssClassDef(cssClassInfo)}>{dataToInsert}{tag}>";
}
@@ -50,8 +56,8 @@ protected static string GetCssClassDef(CssClassInfo cssClassInfo)
public virtual string Render(CssClassInfo cssClassInfo)
{
return ParsedTokens.Count > 0
- ? InsertInToTags(string.Join("", ParsedTokens.Select(token => token.Render(cssClassInfo))), cssClassInfo)
- : InsertInToTags(Data, cssClassInfo);
+ ? WrapWithTag(string.Join("", ParsedTokens.Select(token => token.Render(cssClassInfo))), cssClassInfo)
+ : WrapWithTag(Data, cssClassInfo);
}
}
}
\ No newline at end of file
diff --git a/Markdown/Tokens/StrongHtmlToken.cs b/Markdown/Tokens/StrongHtmlToken.cs
index 8ed4ebbcc..641bdfc18 100644
--- a/Markdown/Tokens/StrongHtmlToken.cs
+++ b/Markdown/Tokens/StrongHtmlToken.cs
@@ -4,14 +4,14 @@ namespace Markdown.Tokens
{
public class StrongHtmlToken : HtmlToken
{
- public override int Length => base.Length + 4;
+ public int Length => base.Length + 4;
- public StrongHtmlToken(string data, int escapedCharacters) : base("strong", data, escapedCharacters)
+ public StrongHtmlToken(string data, int escapedCharsCount) : base("strong", data, escapedCharsCount)
{
}
- public StrongHtmlToken(List parsedTokens, int escapedCharacters)
- : base("strong", parsedTokens, escapedCharacters)
+ public StrongHtmlToken(List parsedTokens, int escapedCharsCount)
+ : base("strong", parsedTokens, escapedCharsCount)
{
}
}