Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Комментарии к коду (//Todo) и минорные правки #3

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 13 additions & 2 deletions Markdown/Md.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ namespace Markdown
{
public class Md
{
//Todo plainMd - ассоциация с plainText-ом, а тип - массив строк.
private readonly string[] plainMd;

private readonly string baseUrl;
private readonly CssClassInfo cssClassInfo;

Expand All @@ -27,6 +29,7 @@ public class Md

private int currLineIndex;

//Todo Зачем нужна CurrLine? Может вообще лучше формальную грамматику сделать? Sprache
private string CurrLine
{
get { return plainMd[currLineIndex]; }
Expand Down Expand Up @@ -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++;
Expand Down Expand Up @@ -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]);
}

Expand Down Expand Up @@ -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] == '_'
Expand All @@ -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]))
Expand Down
2 changes: 1 addition & 1 deletion Markdown/Spec.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Спецификация языка разметки

Процессору принимает на вход строку формата описанного ниже и возвращает HTML-код эквивалентный данной строке.
Процессор принимает на вход строку формата, описанного ниже, и возвращает HTML-код эквивалентный данной строке.

###Описание правил:
Текст
Expand Down
3 changes: 3 additions & 0 deletions Markdown/Tag.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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("", "");
Expand Down
1 change: 1 addition & 0 deletions Markdown/Test/HtmlToken_Should.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public void ShouldInsertDataInToTags_WhenToStringCalls()
token.Render(null).Should().Be("<em>data</em>");
}

//Todo непонятные названия тестов
[Test]
public void ShouldConcatManyTags_WhenHasInsertedTags()
{
Expand Down
1 change: 1 addition & 0 deletions Markdown/Test/MD_Should.cs
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ private static string GenerateMd(Random rnd)
return md.ToString();
}

//Todo зачем нужен этот тест? Линейность? Переписать нормально
[Test]
[Explicit]
public void PerformanceTest()
Expand Down
8 changes: 4 additions & 4 deletions Markdown/Tokens/AHtmlToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<HtmlToken> parsedTokens, int escapedCharacters)
: base("a", parsedTokens, escapedCharacters)
public AHtmlToken(List<HtmlToken> parsedTokens, int escapedCharsCount)
: base("a", parsedTokens, escapedCharsCount)
{
}

Expand Down
2 changes: 1 addition & 1 deletion Markdown/Tokens/CodeHtmlToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public CodeHtmlToken(List<HtmlToken> parsedTokens) : base("code", parsedTokens,

public override string Render(CssClassInfo cssClassInfo)
{
return InsertInToTags("pre", InsertInToTags(Data, cssClassInfo), cssClassInfo);
return WrapWithTag("pre", WrapWithTag(Data, cssClassInfo), cssClassInfo);
}
}
}
9 changes: 5 additions & 4 deletions Markdown/Tokens/EmHtmlToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<HtmlToken> parsedTokens, int escapedCharacters)
: base("em", parsedTokens, escapedCharacters)
public EmHtmlToken(List<HtmlToken> parsedTokens, int escapedCharsCount)
: base("em", parsedTokens, escapedCharsCount)
{
}
}
Expand Down
34 changes: 20 additions & 14 deletions Markdown/Tokens/HtmlToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,47 @@

namespace Markdown.Tokens
{
//Todo много однотипных классов XxxHtmlToken - цель?
public abstract class HtmlToken
{
protected readonly string Tag;
protected readonly List<HtmlToken> 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<HtmlToken>();
Length = CalcLength();
}

protected HtmlToken(string tag, List<HtmlToken> parsedTokens, int escapedCharacters)
protected HtmlToken(string tag, List<HtmlToken> 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}>";
}
Expand All @@ -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);
}
}
}
8 changes: 4 additions & 4 deletions Markdown/Tokens/StrongHtmlToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<HtmlToken> parsedTokens, int escapedCharacters)
: base("strong", parsedTokens, escapedCharacters)
public StrongHtmlToken(List<HtmlToken> parsedTokens, int escapedCharsCount)
: base("strong", parsedTokens, escapedCharsCount)
{
}
}
Expand Down