-
Notifications
You must be signed in to change notification settings - Fork 300
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
base: master
Are you sure you want to change the base?
Зиновьева Милана #224
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Просмотри спецификацию, в особенности разделы экранирование и взаимодействие тегов
cs/MarkdownTests/BoldTests.cs
Outdated
[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>"); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
одинаковые тесты
cs/MarkdownTests/HeadingTests.cs
Outdated
[Test] | ||
public void Test_StandartHeading() | ||
{ | ||
Md.Render("#aaaa").Should().Be("<h1>aaaa</h1>"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Абзац, начинающийся с "# ", выделяется тегом
<h1>
в заголовок.
Посмотри внимательно спецификацию
cs/MarkdownTests/ScreenTests.cs
Outdated
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"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Символ экранирования исчезает из результата, только если экранирует что-то.
Все эти кейсы неверны, последний слеш должен оставаться(т.к. ничего не экранирует), а первый при экранировании исчезать.
…nested tags has been changed
|
||
namespace Markdown; | ||
|
||
public class Md |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Булы тут немного не к месту, хочется от них избавиться. Как вариант, можно добавить дефолтный хендлер для символов, которые не являются тегами, перестать опираться на tagChars и использовать handler.IsTagStart. Чтобы всё заработало, хендлеры должны быть расположены в списке в корректном порядке. Тогда получится, что для каждого символа, мы берем первый подходящий хендлер. Так же придется вынести хендлеры в конструктор, для гибкой конфигурации.
cs/Markdown/Tags/BaseTagHandler.cs
Outdated
return text.Substring(0, startIndex) + replacement + text.Substring(endIndex + Symbol.Length); | ||
} | ||
|
||
protected virtual int StringOnlySpases(ref string text, int endIndex, int symbolLength) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
protected virtual int StringOnlySpases(ref string text, int endIndex, int symbolLength) | |
protected virtual int StringOnlySpaces(ref string text, int endIndex, int symbolLength) |
cs/Markdown/Tags/BaseTagHandler.cs
Outdated
int[] segment1 = { singleUnderscoreIndexes[i], singleUnderscoreIndexes[i + 1] }; | ||
int[] segment2 = { doubleUnderscoreIndexes[j], doubleUnderscoreIndexes[j + 1] }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут стоит использовать таплы, они имеют конкретное число элементов и хранятся на стеке
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Наверное стоило явно сказать, что имел ввиду ValueTuples. На страничке в доке нет примеров, можно посмотреть тут
cs/Markdown/Tags/BaseTagHandler.cs
Outdated
if (HelperFunctions.AreSegmentsIntersecting(segment1, segment2)) | ||
{ | ||
if (HelperFunctions.AreSegmentsNested(segment1, segment2)) | ||
continue; | ||
|
||
return true; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (HelperFunctions.AreSegmentsIntersecting(segment1, segment2)) | |
{ | |
if (HelperFunctions.AreSegmentsNested(segment1, segment2)) | |
continue; | |
return true; | |
} | |
if (HelperFunctions.AreSegmentsIntersecting(segment1, segment2) && | |
!HelperFunctions.AreSegmentsNested(segment1, segment2)) | |
{ | |
return true; | |
} |
cs/Markdown/Tags/BaseTagHandler.cs
Outdated
return false; | ||
} | ||
|
||
private bool AreTagsCorrectlyPositioned(string text, int startIndex, int endIndex, string content) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
можно сделать статиком
cs/Markdown/HelperFunctions.cs
Outdated
|
||
public static string RemoveExtraSpaces(string input) | ||
{ | ||
return string.Join(" ", input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return string.Join(" ", input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); | |
return string.Join(" ", input.Split(' ', StringSplitOptions.RemoveEmptyEntries)); |
using Markdown; | ||
namespace MarkdownTests; | ||
|
||
public class BorderlineCasesTests |
There was a problem hiding this comment.
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); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
При работе со строками старайся задавать StringComparison, в тексте могуть быть символы из различных культур и порой это может неприятно выстрелить
cs/Markdown/Tags/BaseTagHandler.cs
Outdated
|
||
protected virtual int FindEndIndex(string text, int startIndex) | ||
{ | ||
int currentIndex = startIndex + Symbol.Length; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
По возможности используй var, посмотреть тип переменной вполне можно в ide, поэтому явно указывать его редко имеет смысл
No description provided.