Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ jobs:
- 8.1
- 8.2
- 8.3
- 8.4

steps:
- name: Checkout
Expand Down
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# Changelog
## [Unreleased](https://github.com/akhx/typograf/compare/v0.6.0...HEAD)
## [Unreleased](https://github.com/akhx/typograf/compare/v0.7.0...HEAD)

## [0.7.0](https://github.com/akhx/typograf/compare/v0.6.0...v0.7.0) - 2024-12-08
* url добавлен в safeBlock
* новое правило для работы с адресами

## [0.6.0](https://github.com/akhx/typograf/compare/v0.5.0...v0.6.0) - 2024-09-25
* переработан SafeBlock
Expand Down
3 changes: 2 additions & 1 deletion docs/RULES.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
## Nbsp
| Класс | Название | Сортировка | Активность | Параметры |
| --- | --- | --- | --- | --- |
| --- | --- | -- | --- | --- |
| [Nbsp\ReplaceNbsp](../src/Rule/Nbsp/ReplaceNbsp.php) | Замена неразрывного пробела на обычный перед типографированием | -100 | выкл |   |
| [Nbsp\AfterNumber](../src/Rule/Nbsp/AfterNumber.php) | Неразрывной пробел, после чисел | 500 | вкл | maxLen = 5 |
| [Nbsp\AfterShortWord](../src/Rule/Nbsp/AfterShortWord.php) | Неразрывной пробел, после короткого слова | 500 | вкл | len = 2 |
| [Nbsp\BeforeShortLastWord](../src/Rule/Nbsp/BeforeShortLastWord.php) | Неразрывной пробел перед последним коротким словом в предложении | 500 | вкл | len = 3 |
| [Nbsp\DayMonth](../src/Rule/Nbsp/DayMonth.php) | Нераз. пробел между числом и месяцем | 500 | вкл |   |
| [Nbsp\BeforeParticle](../src/Rule/Nbsp/BeforeParticle.php) | Нераз. пробел перед «ли», «ль», «же», «бы», «б» | 510 | вкл |   |
| [Nbsp\Initials](../src/Rule/Nbsp/Initials.php) | Неразрывной пробел инициалов и фамилии | 500 | вкл |   |
| [Nbsp\Address](../src/Rule/Nbsp/Address.php) | Неразрывной пробел, а адресах г. ул. кв. | 450 | вкл |   |
## Dash
| Класс | Название | Сортировка | Активность | Параметры |
| --- | --- | --- | --- | --- |
Expand Down
27 changes: 27 additions & 0 deletions src/Rule/Nbsp/Address.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Akh\Typograf\Rule\Nbsp;

use Akh\Typograf\Rule\AbstractRule;

class Address extends AbstractRule
{
public $name = 'Неразрывной пробел а адресах г. ул. кв.';

protected $sort = 450;

public function handler(string $text): string
{
$pattern = [
'#(^|\s|>)(обл|кр|ст|пос|с|д|ул|пер|пр|пр-т|просп|пл|бул|б-р|наб|ш|туп|оф|комн?|уч|вл|влад|стр|кор|г|эт|мкр|влд)\.\s+(\S)#iu',
'#(^|\s|>)(дом|корпус|этаж)\s+(\S)#iu',
];

$replace = [
'$1$2.' . $this->char['nbsp'] . '$3',
'$1$2' . $this->char['nbsp'] . '$3',
];

return preg_replace($pattern, $replace, $text);
}
}
59 changes: 59 additions & 0 deletions tests/Rule/Nbsp/AddressTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace Akh\Typograf\Tests\Rule\Nbsp;

use Akh\Typograf\Rule\AbstractRule;
use Akh\Typograf\Rule\Nbsp\Address;
use Akh\Typograf\Tests\Rule\RuleTestCase;

/**
* @internal
*/
class AddressTest extends RuleTestCase
{
public function getRule(): AbstractRule
{
return new Address();
}

/**
* @return string[][]
*/
public function dataProvider(): array
{
return [
[
'г. Москва, ул. Тверская, д. 12',
'г.&nbsp;Москва, ул.&nbsp;Тверская, д.&nbsp;12',
],
[
'Магазин "Авто": ул. Набережная, д. 10, эт. -1, оф. 22',
'Магазин "Авто": ул.&nbsp;Набережная, д.&nbsp;10, эт.&nbsp;-1, оф.&nbsp;22',
],
[
'К примеру, ваш адрес: Россия, г.&nbsp;Саратов, ул.&nbsp;Антонова, дом&nbsp;25, кв.&nbsp;72.',
'К примеру, ваш адрес: Россия, г.&nbsp;Саратов, ул.&nbsp;Антонова, дом&nbsp;25, кв.&nbsp;72.',
],
[
'Адрес: 119021, Москва, ул. Льва Толстого, 16',
'Адрес: 119021, Москва, ул.&nbsp;Льва Толстого, 16',
],
[
'Санкт-Петербург, Пискаревский проспект, дом 2, корпус 2, БЦ «Бенуа».',
'Санкт-Петербург, Пискаревский проспект, дом&nbsp;2, корпус&nbsp;2, БЦ «Бенуа».',
],
[
'Адрес: 119021, Саратов, ул. М. Попова 20-21, бизнес-центр «Верный», подъезд B2, этаж 6',
'Адрес: 119021, Саратов, ул.&nbsp;М. Попова 20-21, бизнес-центр «Верный», подъезд B2, этаж&nbsp;6',
],
[
'220036, Минск, пр. Дзержинского 5, оф. 318 (БЦ Rubin Plaza).',
'220036, Минск, пр.&nbsp;Дзержинского 5, оф.&nbsp;318 (БЦ Rubin Plaza).',
],
[
'г. Пущино, д. 34, мкр. «В»',
'г.&nbsp;Пущино, д.&nbsp;34, мкр.&nbsp;«В»',
],
];
}
}
2 changes: 2 additions & 0 deletions tests/TypografTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ public function testApplyDocument(): void
</pre>
<!-- test "text" -->
<p>"Пример"</p>
<p>Наш адрес: Россия, г. Саратов, ул. Антонова, дом 25, кв. 72.</p>
https://www.domain.com/path/test-05-09-2024/
<a href="https://domain.com/path/test-05-09-2024/">https://domain.com/path/test-05-09-2024/</a>
[embed]https://domain.com/path/test-05-09-2024/[/embed]
Expand Down Expand Up @@ -184,6 +185,7 @@ public function testApplyDocument(): void
</pre>
<!-- test "text" -->
<p>&laquo;Пример&raquo;</p>
<p>Наш адрес: Россия, г.&nbsp;Саратов, ул.&nbsp;Антонова, дом&nbsp;25, кв.&nbsp;72.</p>
https://www.domain.com/path/test-05-09-2024/
<a href="https://domain.com/path/test-05-09-2024/">https://domain.com/path/test-05-09-2024/</a>
[embed]https://domain.com/path/test-05-09-2024/[/embed]
Expand Down
Loading