euthanasepam: G (G)
Кабінет психопатологічної евтаназіології ([personal profile] euthanasepam) wrote2022-01-26 05:45 pm

Йойтішне: про форматування у pretty-print для книжок у форматі FB2

 

Часом бува треба зробити правильно й одноманітно відформатовану (well-formed і pretty-print) копію для кожного з купки книжкових FB2-файлів, що лежать в одній директорії.

Пошукавши в інтернеті, здибав програму, що відповідала моїм забаганкам — xmlformatter. Вона написана на Пітоні та робить усе якраз так, як я хотів. Але позаяк вона написана на Пітоні, то працює неквапно, жере безліч ресурсів і за певних обставин ставить раком цілий комп’ютер.

Інший засіб — xmllint з проєкту libxml2. Йому дещо бракує зручних опцій у порівнянні з попередньою програмою (про що далі буде в зауваженні), але працює xmllint незрівнянно швидше і потребує лиш якусь дрібочку ресурсів машини.

Щоб обробити перелік FB2-файлів у робочій директорії, досить дати команду з одним циклом. Для юніксів не писатиму, бо юніксоїди самі знають, а для Windows вона така, для прикладу:

FOR %x IN (*.fb2) DO xmllint.exe --huge --nowrap --nocompact --format "%x" > new_"%x"

За якусь мить маємо комплект файно відформатованих файлів-копій з префіксом «new_» в імені, з якими далі можна робити що хоч.


Окреме невеличке зауваження щодо нюансів. За промовчанням для структурних відступів у ній визначено два звичайних пробіли. Мені треба було табуляцію. Способу це передати у параметрах нема, лише через окрему змінну XMLLINT_INDENT (man xmllint), тож я додав до змінних користувацького довкілля ще одну змінну XMLLINT_INDENT та зробив її значенням символ табуляції.


Оце чогось воно мені тепер згадалося — та й запишу, може комусь стане у пригоді.