Состоялся релиз низкоуровневой библиотеки на языке Си для чтения и записи файлов/текстовых потоков в кодировке UTF-8 на уровне отдельных байт libfatchars 0.4 и использующей её программы-фильтра raskormiknigu 0.1.
Библиотека libfatchars предоставляет ряд следующих функций:
int sizeoffatc(int);
— возвращает размер символа в байтах по первому байту; в случае ошибки (некорректные данные) возвращает -1char rsizeoffatc(int);
— возвращает размер симвода в байтах по коду символа;char ismodifierfatc(int);
— проверка на соответствие диапазонам модификаторов;int fgetfatc(FILE *);
— читает UTF-8 символ из файла/текстового потока; в случае EOF возвращает EOF, в случае ошибки в sizeoffatc возвращает -2;int nextfatc(FILE *);
— переход к следующему символу в файле/текстовом потоке;int nextvisfatc(FILE *);
— переход к следующему видимому символу в файле/текстовом потоке (проверяется соответствие диапазонам модификаторов);int fputfatc(int, FILE *);
- вывод UTF-8 символа в файл/текстовый поток; в случае EOF возвращает EOF, в случае некорректных данных возвращает -2.
Программа raskormiknigu является программой-фильтром, которая читает с stdin текст в кодировке KOI8-R, собственными силами перекодирует его в UTF-8 с автоматической расстановкой юникодных кавычек-ёлочек, дефисов, коротких и длинных тире, а затем выводит итоговый текст в UTF-8 на stdout через библиотеку libfatchars. Вложенные кавычки, конечно, не обрабатываются, однако для простого фильтра и этого функционала не так уж и мало. Программа адресована любителям писать книги и другие тексты в KOI8-R.
Простейшим примером использования библиотеки libfatchars является следующий фильтр, который просто читает с stdin и пишет в stdout без проверки переполнения последнего:
#include <fatchars/fatchars.h>
int main(){
int c;
while((c = fgetfatc(stdin)) != EOF) fputfatc(c, stdout);
return 0;
}