-
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
Брайденбихер Виктор Николаевич #240
base: master
Are you sure you want to change the base?
Conversation
|
||
namespace Markdown.MarkdownRenders | ||
{ | ||
public interface IMarkdownRender |
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.
Render -> Renderer
cs/Markdown/Parsers/AstNode.cs
Outdated
public AstNode(AstNode parent, Tag tag) | ||
{ | ||
ParentToken = parent; | ||
ParentToken.ChildsTokens.Add(this); |
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.
NRE
public static bool IsHash(this Token token) | ||
{ | ||
throw new NotImplementedException(); | ||
} |
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.
Для чего этот метод нужен будет? Не очень понятно из названия - IsHash
cs/Markdown/Tags/Tag.cs
Outdated
TagType = tagType; | ||
Content = content; | ||
this.level = level; | ||
Content = string.Empty; |
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.
Content = content;
...
Content = string.Empty;
cs/Markdown/Tags/Tag.cs
Outdated
public Tag CheckCompleted() | ||
{ | ||
if (IsCompleted || SelfCompeted) | ||
return this; | ||
|
||
return new TextTag(this.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.
Снова не понятно, что за метод 😓. Из названия хочется думать - "Проверить завершенность", т.е. закрылся ли тэг или что-то подобное, на деле возвращаем новый TextTag?
cs/Markdown/Tags/TagType.cs
Outdated
Document, | ||
Header, | ||
Italic, | ||
Bold, | ||
Paragraph, | ||
BulletedList, | ||
Text |
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.
Document, Text - это что за теги в HTML?
cs/Markdown/Md.cs
Outdated
var tokens = markdownTokenizer.Tokenize(text); | ||
var rootNode = markdownParser.Parse(tokens); | ||
|
||
return render.Render(rootNode); |
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.
Возможно немного перемудрил с проектированием. Нам недостаточно следовать такого плана?
- markdown строку разбиваем на токены
- из токенов собираем html строку
Пока не совсем ясно для чего нужны и тэги и токены и ноды. Возможно в ходе написания самой логики это будет более очевидно. Можешь это не переделывать, а потом мы посмотрим как это всё будет взаимодействовать, а можешь подумать немного в сторону упрощения.
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.
Сейчас так понимаю схема такая: markdownStr -> Tokens -> Nodes (Tags) -> htmlStr
|
||
namespace Markdown.MarkdownRenders.ConcreteMarkdownRenders | ||
{ | ||
public class HtmlRender : IMarkdownRender |
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.
HtmlRender_er_
HtmlRender наследуется от MarkdownRender звучит не очень логично)
namespace Markdown.TokenizerClasses.ConcreteTokenizers | ||
{ |
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.
Придерживайся везде единого стиля. Рядом лежат две папки: Parsers, Renderers внутри которых папка с конкретными реализациями, рядом лежат интерфейсы и вспомогательные классы. А тут в названии откуда-то "Classes"
Верхнеуровнево я понял твою идею: разбивать исходную строку на токены, разбивать токены на дерево, и дерево приводить к конечной html строке. Ты написал довольно конкретные методы, значит у тебя уже есть какая-то идея, но пока код плохо передает основную идею. Есть фабрика токенов, в тэгах дополнительные методы и прочее. Сейчас не ясно зачем всё это нужно. Опиши идею и можем постараться придумать более понятные абстракции, контракты и банально названия. |
Моя идея первоначально - да была в том, чтобы разбивать строку на токены(слова, пробелы, цифры, #, _ и т.п.), а уже после составить дерево, проходя узлы которого мы сможем распознать различные сложные ситуации с тегами. И выполнять различную логику проверки. Но после большого числа попыток реализовать свой замысел я понял, что он слишком сложен, т.к. я не пришел к конечному решению |
Привет! Посмотрел изменения, хочу сказать, что надо сильно поработать над наименованиями методов, классов и т.д. так как очень сложно понять что должен сделать метод/класс, не заглядывая в саму реализацию. По домашке, ты сделал маркерованный список и это круто, но у тебя пока не проходят тесты на базовые теги (_, __, #) в соответствии со спецификацией. Постарайся это починить, пожалуйста. |
Привет! Проверил решение. В итоге:
Поставлю 2 балла за решение, но с надеждой, что в будущем ты будешь исправлять эти недочеты. Особенно удели время код стайлу, пожалуйста) |
@ksamnole