Conversation
Markdown/Markdown/Md.cs
Outdated
There was a problem hiding this comment.
$"<{htmlTag}>{text}</{htmlTag}>
И лучше в метод расширения, потому что у тебя эта логика повторяется
| IsMarkedListItemOfType(tokens, lookAhead, listTagType) && | ||
| newLines < 2) | ||
| { | ||
| if (newLines > 0) html.Append('\n'); |
There was a problem hiding this comment.
Лучше использовать Environment.NewLine везде
There was a problem hiding this comment.
Обсудили, из-за проблем с тесткейсами решили оставить просто "\n"
There was a problem hiding this comment.
У тебя index всегда будет равен 0. Потом что выше проверка на то, что index != 0.
Поэтому подчеркивает, что операция сложения с нулем бессмысленная
There was a problem hiding this comment.
Проверки на тип плохи тем, что когда у тебя появится цепочка наследований, то придется переписывать :)
Потому что будет AnotherTag : SomeTag : ITag
There was a problem hiding this comment.
Поправил, теперь в ITag есть Enum со списком типов тегов
Markdown/Markdown.Tests/MdTests.cs
Outdated
There was a problem hiding this comment.
Не смотря на то, что Action(Из AAA) будет везде одинаковый, тут лучше разделить на несколько методов, каждый из которых тестирует свои теги и взаимодействие этого тега с другими.
В тестах нам не требуется прям по максимуму все переиспользовать, но желательно. В данном случае мы продублируем не так много, зато получим логическое разделение и читаемость
… одинарных и двойных, внес соответствующие правки


Идея следующая: разбиваем каждый элемент который можем распарсить на "токены", представляем их в виде классов наследующихся от IToken где лежит вся инфа о md и html теге, а также о его парности. Каждый парсер будет унаследован от IParser, задачей парсера будет корректно обработать свой тег для которого он создавался и возвращать токен. Токенайзер будет пытаться использовать каждый из парсеров на символ (на обычный текст не будет парсера, так что если мы не нашли ни один парсер который может обработать символ - значит это обычный текст), затем все токены собираются и вместо md тегов подставляются html теги.