Кабінет психопатологічної евтаназіології (
euthanasepam) wrote2022-01-26 05:45 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Entry tags:
Йойтішне: про форматування у 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 та зробив її значенням символ табуляції.
Оце чогось воно мені тепер згадалося — та й запишу, може комусь стане у пригоді.