Текст слов и игнорируйте коды побега ANSI при подсчете длины строкиPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Текст слов и игнорируйте коды побега ANSI при подсчете длины строки

Сообщение Anonymous »

Я строю приложение CLI в PHP, в котором есть метод для вывода текста: < /p>

Код: Выделить всё

$out->line('Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Aenean lacinia bibendum nulla sed consectetur. Nullam id dolor id nibh ultricies vehicula ut id elit. Aenean lacinia bibendum nulla sed consectetur. Curabitur blandit tempus porttitor.');
Я ограничиваю вывод строки 80 символами в line () через:

Код: Выделить всё

public function line(string $text): void
{
$this->rawLine(wordwrap($text, 80, PHP_EOL));
}
< /code>
Это печатает вывод по нескольким линиям: < /p>
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Aenean lacinia
bibendum nulla sed consectetur. Nullam id dolor id nibh ultricies vehicula ut id
elit. Aenean lacinia bibendum nulla sed consectetur. Curabitur blandit tempus
porttitor.
< /code>
Теперь я также могу стилизовать части текста, используя коды ANSI Escape: < /p>
$out->line('Morbi leo risus, ' . Style::inline('porta ac consectetur', ['color' => 'blue', 'attribute' => 'bold']) . ' ac, vestibulum at eros. Aenean lacinia bibendum nulla sed consectetur. Nullam id dolor id nibh ultricies vehicula ut id elit. Aenean lacinia bibendum nulla sed consectetur. Curabitur blandit tempus porttitor.');
< /code>
, который преобразуется в это: < /p>
Morbi leo risus, \x1b[34;1mporta ac consectetur\x1b[39;22m ac, vestibulum at
eros. Aenean lacinia bibendum nulla sed consectetur. Nullam id dolor id nibh
ultricies vehicula ut id elit. Aenean lacinia bibendum nulla sed consectetur.
Curabitur blandit tempus porttitor.
и при передаче в line () , распечатано так:

Код: Выделить всё

Morbi leo risus, porta ac consectetur ac, vestibulum at eros.
Aenean lacinia bibendum nulla sed consectetur. Nullam id dolor id nibh ultricies
vehicula ut id elit. Aenean lacinia bibendum nulla sed consectetur. Curabitur
blandit tempus porttitor.
Где "Porta Ac-CesceTur AC" является синим и жирным шрифтом, но если вы заметите, линия короче, чем раньше, и не ломается в одном и том же месте. символы без кодов Escape ANSI: < /p>
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Aenean lacinia
< /code>
Но после добавления стилей он возвращается как 97 символов: < /p>
Morbi leo risus, \x1b[34;1mporta ac consectetur\x1b[39;22m ac, vestibulum at eros. Aenean lacinia
< /code>
В других частях приложения, как таблица, я «решил» это, имея метод для установки значения столбца, а затем отдельный метод для стиля указанного столбца. Таким образом, я могу надежно получить длину, но также вывести текст в определенном стиле. Он также не решает проблему точного разделения версии стиля. /> Итак, мой вопрос: как я могу надежно разделить текст, содержащий коды ANSI Escape на основе длины текста? < /p>

Подробнее здесь: https://stackoverflow.com/questions/757 ... ine-length
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»