Потокове редагування

Редактори (програми редагування текстів, а не редактори новинних сайтів ;-) ) стають все «вмілішими» та «грамотнішими», ними все зручніше робити доволі складні речі. Особливо — проблемно-орієнтованими редакторами, на зразок Eclipse для програмістів чи Frescobaldi для набору нот мовою розмітки LilyPond.

Та іноді трапляються речі, які зручніше і швидше зробити старим добрим потоковим редагуванням, яке дійшло до нас з тих часів, коли з комп’ютером спілкувалися через телетайп і для того, щоб глянути на якийсь рядок тексту, його треба було надрукувати. По роздруківці тексту формувався пакет команд редагування і згодовувася програмі, яка брала порядко́во вхідний потік тексту, виконувала команди і записувала результат роботи у вихідний потік.

Ось приклад:
Є текстовий файл у форматі TeX. Тіло книжечки віршів. Набір почали вичитувати-виправляти, межу перевіреного та ще не вичитаного позначено коментарем

%%%% правопис

У процесі компонування книжки виникла необхідність міняти порядок віршів не чекаючи закінчення процесу вичитування, тому для кожного з них потрібна персональна мітка перевіреності. Кожен вірш «летить» у зміст, тому виділений у окрему секцію. Мітку та ім’я того, хто на той момент вичитував набір, було вирішено ставити коментарем на початку вірша, в кінці рядка з командою \section, наприклад:

\section[«Він ліг тобі до ніг, цей серпень запальний...»]{* * *} % OK {Oleg}

Отже, алгоритм роботи, виражений людською мовою:

В усіх рядках від першого до того, у якому стоїть текст «%%%% правопис» додати в кінець рядків з текстом «section» текст «% OK {Oleg}».

Відповідний виклик редактора sed (stream editor) виглядає наступним чином:

mv A1.tex A1.tex~
sed -e "1,/%%%% правопис/ { /section/ s/$/ % OK {Oleg}/ }" A1.tex~ >A1.tex

p.s. Ім’я учасника проекту, який вичитав фрагмент, вирішили ставити тому, що інший учасник може перевірити інші вірші чи повторно перевірити ці. Проект цієї книжки зберігається в git-репозиторії на bitbucket.org і хто коли залізе у який файл — залежить від вільного часу та натхнення :-)

Leave a Reply

[flagcounter image]