Skip to content

Commit

Permalink
Added support for <ul>, <ol> & <li>
Browse files Browse the repository at this point in the history
  • Loading branch information
janpecha committed Apr 18, 2024
1 parent c7f0b94 commit 29b398c
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 2 deletions.
7 changes: 7 additions & 0 deletions src/DefaultHtmlTagFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@ public function createTag(MessageElement $element)
]));
}

if ($element->is('ul', 'ol', 'li')) {
return Html::el($element->getName(), $element->getAttributes([
'class',
'title',
]));
}

if ($element->is('br')) {
return Html::el('br');
}
Expand Down
73 changes: 71 additions & 2 deletions src/TextTranslator.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,34 @@ private function translateMessage(MessageId $messageId, array $parameters)
return $messageId->toString();
}

return ltrim($this->formatElements($message->getElements()));
}


/**
* @param array<string|MessageElement> $elements
* @return string
*/
private function formatElements(array $elements)
{
$res = '';

foreach ($message->getElements() as $element) {
foreach ($elements as $element) {
if ($element instanceof MessageElement) {
if ($element->is('br')) {
$res .= "\n";
continue;
}

$res .= $element->toText();
if ($element->is('ul')) {
$res .= $this->formatList($element->getChildren(), FALSE);

} elseif ($element->is('ol')) {
$res .= $this->formatList($element->getChildren(), TRUE);

} else {
$res .= $this->formatElements($element->getChildren());
}

} else {
$res .= $element;
Expand All @@ -81,4 +99,55 @@ private function translateMessage(MessageId $messageId, array $parameters)

return $res;
}


/**
* @param array<string|MessageElement> $elements
* @param bool $isOrdered
* @param non-negative-int $level
* @return string
*/
private function formatList(
array $elements,
$isOrdered,
$level = 0
)
{
$res = "\n";
$levelPrefix = str_repeat("\t", $level);
$counter = 0;

foreach ($elements as $element) {
if ($element instanceof MessageElement) {
if ($element->is('ul')) {
$res .= $this->formatList($element->getChildren(), FALSE, $level++);
continue;
}

if ($element->is('ol')) {
$res .= $this->formatList($element->getChildren(), FALSE, $level++);
continue;
}

$res .= $levelPrefix;

if ($element->is('li')) {
if ($isOrdered) {
$counter++;
$res .= "\n" . $counter . '. ';

} else {
$res .= "\n- ";
}
}

$res .= $this->formatElements($element->getChildren());

} else {
$res .= $levelPrefix . $element;
}
}

return $res . "\n";
}
}
9 changes: 9 additions & 0 deletions tests/Translator/HtmlTranslator.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ function createTranslator($lang)
'homepage.unknow' => 'Hello, <muted>lorem <i>{$name|lower}!</i></muted>',
'homepage.br' => 'Hello<br>friends',
'homepage.entity' => 'A&nbsp;entity',
'homepage.ul' => '<ul><li>A</li><li>B</li></ul>',
'homepage.ol' => '<ol><li>A</li><li>B</li></ol>',
]),
]),
new Translator\Processors\TagProcessor
Expand Down Expand Up @@ -62,6 +64,13 @@ test('MessageId', function () {
});


test('Lists', function () {
$translator = createTranslator('en');
Assert::same("<ul><li>A</li><li>B</li></ul>", (string) $translator->translate('homepage.ul'));
Assert::same("<ol><li>A</li><li>B</li></ol>", (string) $translator->translate('homepage.ol'));
});


test('Entities', function () {
$translator = createTranslator('en');
Assert::same("A\xC2\xA0entity", (string) $translator->translate('homepage.entity'));
Expand Down
9 changes: 9 additions & 0 deletions tests/Translator/TextTranslator.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ function createTranslator($lang)
'homepage.hello2' => 'Hello, <b>{$name}</b>!',
'homepage.br' => 'Hello<br>friends',
'homepage.entity' => 'A&nbsp;entity',
'homepage.ul' => '<ul><li>A</li><li>B</li></ul>',
'homepage.ol' => '<ol><li>A</li><li>B</li></ol>',
]),
]),
new Translator\Processors\TagProcessor
Expand Down Expand Up @@ -77,6 +79,13 @@ test('MessageId', function () {
});


test('Lists', function () {
$translator = createTranslator('en');
Assert::same("- A\n- B\n", (string) $translator->translate('homepage.ul'));
Assert::same("1. A\n2. B\n", (string) $translator->translate('homepage.ol'));
});


test('Entities', function () {
$translator = createTranslator('en');
Assert::same("A\xC2\xA0entity", (string) $translator->translate('homepage.entity'));
Expand Down

0 comments on commit 29b398c

Please sign in to comment.