БлогNot. Пишем детабулятор и табулятор текста

Пишем детабулятор и табулятор текста

Как я уже писал вот здесь, применение табуляций вместо пробелов может уменьшить объём вашего файла при сохранении его внешнего вида неизменным, но будет чревато "разъезжанием" текста далеко вправо, если размер табуляции в вашем редакторе отличается от стандартного.

Прилагаемый ниже маленький сервис позволяет заменить в текстовом содержимом табуляции на пробелы и обратно при сохранении внешнего вида неизменным (в коде зафиксирован размер отступа табуляции, равный восьми символам, так как именно таков он в браузерах, при желании код легко изменить).

Проблема состоит в том, что табуляцию бывает нужно заменить сразу несколькими пробелами (до следующей позиции, кратной размеру табуляции), чтобы вид текста действительно не изменился. Скажем, строка "1[пробел][табуляция]2" при детабулировании с размером табуляции 8 заменится на "1[7 пробелов]2". А внешний вид файлов "111" и "222" при размере табуляции в "Блокноте", равном восьми, будет одинаковым.

Те же правила действуют при обратной замене, кучка пробелов до позиции строки, кратной размеру табуляции, может быть заменена одним символом табуляции.

Два файла, одинаковых внешне в "Блокноте", но различных по байтам
Два файла, одинаковых внешне в "Блокноте", но различных по байтам

Ниже прикреплён сервис в работе (файл .html в кодировке Юникода UTF-8), увидеть исходник можно из исходника страницы. Назначение кнопок описано на самой странице сервиса.

 Сервис табулирования/детабулирования текста, открыть в новом окне/вкладке

При табулировании (установке табуляций вместо пробелов) сначала делается детабулирование, на случай, если табуляции в исходном тексте уже были, а затем табуляции расставляются заново. Полезные функции в коде: detab, entab, rtrim.


теги: javascript программирование textprocessing сервис

27.11.2020, 14:12; рейтинг: 137