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

Заколюкин Степан #230

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Prev Previous commit
Next Next commit
Выполнил декомпозицию решения
  • Loading branch information
StepanZakolukin committed Nov 24, 2024
commit b90ae8e86be30fe3afcbc06978bb88356a6c82e5
46 changes: 24 additions & 22 deletions cs/Markdown/Md.cs
Original file line number Diff line number Diff line change
@@ -3,37 +3,39 @@
internal class Md
{
public string Render(string markdown)
{
return markdown.PerformTextFormatting(GetFragmentToFormatInHeading, ToFormatFragmentIntoHeader)
.PerformTextFormatting(GetFragmentToFormatInItalics, ToFormatFragmentInItalics)
.PerformTextFormatting(GetFragmentToFormatInSemiBold, ToFormatFragmentIntoSemiBold);
StepanZakolukin marked this conversation as resolved.
Show resolved Hide resolved
}

private PortionText GetFragmentToFormatInHeading(string text, int startIndex)
{
throw new NotImplementedException();
}

public string ToHtml(string markdown)
private PortionText GetFragmentToFormatInItalics(string text, int startIndex)
{
throw new NotImplementedException();
}

public static bool Check(string str)
private PortionText GetFragmentToFormatInSemiBold(string text, int startIndex)
{
var stack = new Stack<char>();
char openBracket;
var dict = new Dictionary<char, char>
{
['('] = ')',
['['] = ']'
};
throw new NotImplementedException();
}

foreach (var symbol in str)
{
if (dict.ContainsKey(symbol))
stack.Push(symbol);
else if (dict.ContainsValue(symbol))
{
if (stack.Count == 0) return false;
openBracket = stack.Pop();
if (dict[openBracket] != symbol) return false;
}
else return false;
}
return stack.Count == 0;
private string ToFormatFragmentIntoHeader(string fragment)
{
throw new NotImplementedException();
}

private string ToFormatFragmentInItalics(string fragment)
{
throw new NotImplementedException();
}

private string ToFormatFragmentIntoSemiBold(string fragment)
{
throw new NotImplementedException();
}
}
3 changes: 1 addition & 2 deletions cs/Markdown/MdTests.cs
Original file line number Diff line number Diff line change
@@ -19,8 +19,7 @@ public void Render_StringEmpty_NoExceptions()
{
var lambda = () => md.Render(string.Empty);

lambda.Should()
.NotThrow();
lambda.Should().NotThrow();
}

[TestCase("_12_3", "_12_3")]
20 changes: 13 additions & 7 deletions cs/Markdown/PortionText.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Markdown;

namespace Markdown
internal class PortionText
Copy link

Choose a reason for hiding this comment

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

А здесь если хотелось назвать "Порцаия текста", то правильнее будет "TextPortion"

{
internal class PortionText
public readonly int StartIndex;
public readonly int Length;

public PortionText(int startIndex, int length)
{
if (startIndex < 0)
throw new ArgumentException("startIndex не может быть отрицательным");
if (length < 0)
throw new ArgumentException("length не может быть отрицательной");

Length = length;
StartIndex = startIndex;
}
}
12 changes: 12 additions & 0 deletions cs/Markdown/StringExtension.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace Markdown;

internal static class StringExtension
{
public static string PerformTextFormatting(
this string text, Func<string, int, PortionText> getNextFragmentToFormat,
Copy link

Choose a reason for hiding this comment

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

Делать экстеншны от базовых типов нужно только если очень хочется
Почему: если напишешь var a = "text". и попросишь IDE предложить варианты после точки, то она предложит тебе кучу самописных методов, бесполезных тебе в контексте. Конкретно этот метод предложится в методе Main, в котором он скорее всего не нужен

Исключения: штуки, которые могут пригодиться во всём проекте. Например, для стринга ты написал метод, который какой-то магией делит текст на массив предложений. Если пишешь парсер текстов, то этот метод будет использоваться часто, и его можно обернуть в экстеншн

Можно просто класс сделать internal, и тогда страдать будут только разработчики конкретного пакета, но я бы вообще убрал метод в реализацию Md, тк кроме того класса этот метод не нужен

Func<string, string> formatFragment)
{
//Используя переданные функции форматирует текст
throw new NotSupportedException();
}
}