Skip to content

Commit fdc0897

Browse files
committed
WIP
1 parent af7c010 commit fdc0897

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

assets/colophon.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<p style="margin: 0; margin-top: 0.3em;">Формат: 148×210 мм (A5)</p>
2020
<p style="margin: 0; margin-top: 0.15em;">Бумага: офсетная 80 г/м², печать цифровая</p>
2121
<p style="margin: 0; margin-top: 0.15em;">Шрифты: EB Garamond, JetBrains Mono</p>
22-
<p style="margin: 0; margin-top: 0.15em;">Тираж: 64 экз. | Заказ № 140574</p>
22+
<p style="margin: 0; margin-top: 0.15em;">Тираж: 76 экз. | Заказ № 140574</p>
2323
<p style="margin: 0; margin-top: 0.15em;">Издательство: Полиграфия «Колор», ИП Москалёва Э. В.</p>
2424
</div>
2525
</div>

content/010-no-nonsense.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,63 @@ echo (new Text($input))
264264
> **Обратите внимание на иммутабельность.**
265265
> Каждый шаг возвращает новый объект при котором не будет скрытых побочных эффектов.
266266
267+
### Конкатенация строк
268+
269+
Соединение строк с помощью оператора `.` кажется простым, но быстро теряет читаемость, особенно при длинных сообщениях или множестве переменных:
270+
271+
```php
272+
// Плохо [✗]
273+
$message = 'Hello, ' . $name . '! Today is ' . date('Y-m-d');
274+
```
275+
276+
При большом количестве переменных сложно сразу понять, как будет выглядеть итоговая строка.
277+
Чтобы избежать этого, можно использовать шаблон с подстановкой, например `sprintf`:
278+
279+
```php
280+
// Хорошо [✓]
281+
$message = sprintf(
282+
'Hello, %s! Today is %s',
283+
$name,
284+
date('Y-m-d')
285+
);
286+
```
287+
288+
Такой подход делает структуру строки прозрачной и упрощает её поддержку.
289+
290+
291+
### Регулярные выражения
292+
293+
Регулярные выражения часто превращаются в «магические строки»:
294+
295+
```php
296+
// Плохо [✗]
297+
if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $date, $matches)) {
298+
$year = $matches[1];
299+
$month = $matches[2];
300+
$day = $matches[3];
301+
}
302+
```
303+
304+
Через месяц уже непонятно, что означает каждая группа.
305+
И код начинает становиться путанным и явно обращаться к числовому индексу.
306+
307+
По возможности, следует использовать именованные группы:
308+
309+
```php
310+
// Хорошо [✓]
311+
if (preg_match(
312+
'/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/',
313+
$date,
314+
$matches
315+
)) {
316+
$year = $matches['year'];
317+
$month = $matches['month'];
318+
$day = $matches['day'];
319+
}
320+
```
321+
322+
Теперь каждая часть регулярного выражения имеет понятное имя, и при чтении кода сразу ясно, что именно извлекается.
323+
267324

268325
### Ссылки делают код хрупким
269326

src/MarkdownProcessor.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Illuminate\Support\Str;
66
use JoliTypo\Fixer;
7+
use Laravelsu\Highlight\Languages\Shell\ShellLanguage;
78
use League\CommonMark\Environment\Environment;
89
use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
910
use League\CommonMark\Extension\GithubFlavoredMarkdownExtension;
@@ -31,6 +32,11 @@ public function __construct()
3132
$environment->addExtension(new TaskListExtension());
3233

3334
$highlighter = new Highlighter(new InlineTheme(__DIR__.'/../assets/hightlight.css'));
35+
36+
$highlighter->addLanguage(
37+
new ShellLanguage,
38+
);
39+
3440
$environment->addExtension(new HighlightExtension($highlighter));
3541

3642
$this->converter = new MarkdownConverter($environment);
@@ -90,6 +96,13 @@ public function convert(string $markdown, int $index): string
9096

9197
$html = $syllable->hyphenateHtmlText($html);
9298

99+
$html = Str::of($html)
100+
->replace('', '<span style="font-family: dejavusans;">✓</span>')
101+
->replace('', '<span style="font-family: dejavusans;">✗</span>')
102+
->replace('TODO:', '<span style="font-weight: bold;">TODO:</span>')
103+
->replace('HACK:', '<span style="font-weight: bold;">HACK:</span>')
104+
->replace('FIXME:', '<span style="font-weight: bold;">FIXME:</span>');
105+
93106
$syllable->setLanguage('en-us');
94107

95108
return $syllable->hyphenateHtmlText($html);

0 commit comments

Comments
 (0)