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

Зиновьева Милана #224

Open
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

crycrash
Copy link

No description provided.

Copy link

@xsitin xsitin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Просмотри спецификацию, в особенности разделы экранирование и взаимодействие тегов

Comment on lines 29 to 43
[Test]
public void Test_BoldInPartOfWord()
{
Md.Render("__нач__але").Should().Be("<strong>нач</strong>але");
Md.Render("сер__еди__не").Should().Be("сер<strong>еди</strong>не");
Md.Render("кон__це.__").Should().Be("кон<strong>це.</strong>");
}

[Test]
public void Test_BoldSeveralWords()
{
Md.Render("__нач__але").Should().Be("<strong>нач</strong>але");
Md.Render("сер__еди__не").Should().Be("сер<strong>еди</strong>не");
Md.Render("кон__це.__").Should().Be("кон<strong>це.</strong>");
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

одинаковые тесты

[Test]
public void Test_StandartHeading()
{
Md.Render("#aaaa").Should().Be("<h1>aaaa</h1>");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Абзац, начинающийся с "# ", выделяется тегом <h1> в заголовок.

Посмотри внимательно спецификацию

Comment on lines 10 to 15
Md.Render("\\aaa").Should().Be("\\aaa");
Md.Render("\\__aaa__\\").Should().Be("__aaa__");
Md.Render("\\_aaa_\\").Should().Be("_aaa_");
Md.Render("\\#aaa\\").Should().Be("#aaa");
Md.Render("\\\\#aa\\").Should().Be("\\#aa");
Md.Render("\\#aa").Should().Be("\\#aa");
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Символ экранирования исчезает из результата, только если экранирует что-то.

Все эти кейсы неверны, последний слеш должен оставаться(т.к. ничего не экранирует), а первый при экранировании исчезать.


namespace Markdown;

public class Md
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Булы тут немного не к месту, хочется от них избавиться. Как вариант, можно добавить дефолтный хендлер для символов, которые не являются тегами, перестать опираться на tagChars и использовать handler.IsTagStart. Чтобы всё заработало, хендлеры должны быть расположены в списке в корректном порядке. Тогда получится, что для каждого символа, мы берем первый подходящий хендлер. Так же придется вынести хендлеры в конструктор, для гибкой конфигурации.

return text.Substring(0, startIndex) + replacement + text.Substring(endIndex + Symbol.Length);
}

protected virtual int StringOnlySpases(ref string text, int endIndex, int symbolLength)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
protected virtual int StringOnlySpases(ref string text, int endIndex, int symbolLength)
protected virtual int StringOnlySpaces(ref string text, int endIndex, int symbolLength)

Comment on lines 109 to 110
int[] segment1 = { singleUnderscoreIndexes[i], singleUnderscoreIndexes[i + 1] };
int[] segment2 = { doubleUnderscoreIndexes[j], doubleUnderscoreIndexes[j + 1] };
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут стоит использовать таплы, они имеют конкретное число элементов и хранятся на стеке

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Наверное стоило явно сказать, что имел ввиду ValueTuples. На страничке в доке нет примеров, можно посмотреть тут

Comment on lines 111 to 117
if (HelperFunctions.AreSegmentsIntersecting(segment1, segment2))
{
if (HelperFunctions.AreSegmentsNested(segment1, segment2))
continue;

return true;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if (HelperFunctions.AreSegmentsIntersecting(segment1, segment2))
{
if (HelperFunctions.AreSegmentsNested(segment1, segment2))
continue;
return true;
}
if (HelperFunctions.AreSegmentsIntersecting(segment1, segment2) &&
!HelperFunctions.AreSegmentsNested(segment1, segment2))
{
return true;
}

return false;
}

private bool AreTagsCorrectlyPositioned(string text, int startIndex, int endIndex, string content)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

можно сделать статиком


public static string RemoveExtraSpaces(string input)
{
return string.Join(" ", input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return string.Join(" ", input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries));
return string.Join(" ", input.Split(' ', StringSplitOptions.RemoveEmptyEntries));

using Markdown;
namespace MarkdownTests;

public class BorderlineCasesTests
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Оставлю коммент здесь, но относиться ко всем тестам. Стоит немного прибраться, сделать, чтобы при падении одного кейса, остальные всё равно проверялись. Так же стоит сделать md private


while (currentIndex < text.Length)
{
currentIndex = text.IndexOf(Symbol, currentIndex);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

При работе со строками старайся задавать StringComparison, в тексте могуть быть символы из различных культур и порой это может неприятно выстрелить


protected virtual int FindEndIndex(string text, int startIndex)
{
int currentIndex = startIndex + Symbol.Length;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По возможности используй var, посмотреть тип переменной вполне можно в ide, поэтому явно указывать его редко имеет смысл

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants