LINUX.ORG.RU

Релиз библиотеки libfatchars 0.4 и использующей её программы raskormiknigu 0.1

 ,


2

3

Состоялся релиз низкоуровневой библиотеки на языке Си для чтения и записи файлов/текстовых потоков в кодировке UTF-8 на уровне отдельных байт libfatchars 0.4 и использующей её программы-фильтра raskormiknigu 0.1.

Библиотека libfatchars предоставляет ряд следующих функций:

  • int sizeoffatc(int); — возвращает размер символа в байтах по первому байту; в случае ошибки (некорректные данные) возвращает -1
  • char 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;
}

Скачать библиотеку libfatchars

Скачать программу raskormiknigu

★★★★★

Проверено: Shaman007 ()
Последнее исправление: cetjs2 (всего исправлений: 4)

Ответ на: комментарий от tereshchenko

По поводу программы ещё можно сказать, что она нужна немногим, но библиотека-то почему? Сколько воплей по поводу того, что Си непригоден для работы с UTF-8, а всё потому, что до сегодняшнего дня не было такой библиотеки.

saahriktu ★★★★★
() автор топика

А почему, если не секрет, вы не желаете давать разрешения на использование libfatchars под более поздними версиями GNU GPL, чем третья?

Смею предположить, что это крайне отрицательно скажется на возможности применения вашего труда хоть где-либо.

Zmicier ★★★★★
()

int в качестве кода символа? Не маловато ли? К тому же на некоторых платформах это может быть всего 16 бит (avr-gcc)

anonymous
()
Ответ на: комментарий от Zmicier

Надеетесь, что следующие версии GNU GPL приблизятся к BSD и Public domain?

хоть где-либо

Хоть где-либо в проприетарщине?

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от buddhist

На ARM'ах char всегда unsigned, что не даёт возможность обрабатывать через него EOF, который внезапно из -1 превращается в 255. Можно было использовать short int, но раз уж так свёл преобразование типов к минимуму.

saahriktu ★★★★★
() автор топика

libfatchars-0.4.tar.xz

.tar.xz

Что это с тобой? Ты не заболел случайно? Тот saahriktu, которого я знал, паковал всё в .tar.lzma

EXL ★★★★★
()

Теперь венде точно капец?

petrosyan ★★★★★
()
Ответ на: комментарий от angel_il

есть такая библиотека и давно

И какие же аналоги с побайтной обработкой данных есть?

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от anonymous

int в качестве кода символа? Не маловато ли?

Ну, на x86_64 и armv6 это не менее 4-х байт. А новый стандарт UTF-8, как пишут, определяет вес символов не более чем 4 байта.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от vodz

А почему нет? Библиотека просто читает и пишет символы побайтно как они есть.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Можно заявить, что библиотека предназначена для POSIX-систем, а там int всегда как минимум 32-битный.

anonymous
()

Программа raskormiknigu является программой-фильтром, которая читает с stdin текст в кодировке KOI8-R, собственными силами перекодирует его в UTF-8 с автоматической расстановкой юникодных кавычек-ёлочек, дефисов, коротких и длинных тире, а затем выводит итоговый текст в UTF-8 на stdout через библиотеку libfatchars. Вложенные кавычки, конечно, не обрабатываются, однако для простого фильтра и этого функционала не так уж и мало. Программа адресована любителям писать книги и другие тексты в KOI8-R.

Задумался о создании аналогичной программы qraskormiknigu на базе QtCore...

hobbit ★★★★★
()
Ответ на: комментарий от tereshchenko

Эталонное ненадо.

systemd эталонное ненадо, тк не надо от слова совсем, но при этом всюду навязывают.

а тут - минимум автору надо, и он не заставляет выкинуть что либо, и не навязывает.

Но название смешное :)

а вот это правда.

alwayslate ★★
()
Ответ на: комментарий от RazrFalcon

оПНЦПЮЛЛЮ ЮДПЕЯНБЮМЮ КЧАХРЕКЧ ОХЯЮРЭ ЙМХЦХ Х ДПСЦХЕ РЕЙЯРШ Б KOI8-R

Так лучше.

petrosyan ★★★★★
()
Ответ на: комментарий от Deleted

icu - совершенно другой велосипед, но при этом высокоуровневый. А эта библиотека низкоуровневая.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от nikitosios20031

сам написать под свои нужды

Вот в этом и проблема опенсорса. Как мегакомбайны - так пожалуйста, самых разных видов и под самыми разными лицензиями. А как библиотека на 10 Кб и меньше - так каждый сам пишет свои велосипеды никуда их не выкладывая.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

А как библиотека на 10 Кб и меньше - так каждый сам пишет свои велосипеды никуда их не выкладывая.

Не всем нужны велосипеды для koi8.

petrosyan ★★★★★
()
Ответ на: комментарий от saahriktu

но библиотека-то почему?

С такой лицензией для такой библиотеки сомневаюсь в широком да даже и узком применении. Ведь есть такие как public domain/LGPL/MIT/что хочешь µstr, LGPL libestr и даже LGPL от GNU: libunistring. И они уже реально используются (заметил их в Debian).

gag ★★★★★
()
Ответ на: комментарий от petrosyan

Так библиотека-то для UTF-8. Она читает и пишет побайтово текст именно в UTF-8.

Для KOI8-R - программа, которая использует эту библиотеку для UTF-8.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Так библиотека-то для UTF-8. Она читает и пишет побайтово текст именно в UTF-8.

Вот честно, понятия не имею на кой мне читать побайтово текст в UTF-8 и как это поможет мне писать книги в koi8-r.

petrosyan ★★★★★
()
Ответ на: комментарий от gag

Основное отличие этих лицензий в том, что они позволяют использовать библиотеки и софт в проприетарщине. Для тех, кто пишет только свободный софт, подходит и GNU GPL.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от petrosyan

Затем, чтобы не парсить на отдельные символы. Это на себя берёт библиотека.

Можно, конечно, читать другими библиотеками в wchar_t/char16_t/char32_t, но не всем это удобно.

saahriktu ★★★★★
() автор топика

.xz

преобразование в UTF-8

saahriktu, что с тобой случилось?

intelfx ★★★★★
()

@sahriktu, годнота, пиши исчо!

Лицензия немного людоедская, имхо, но за библиотеку всё равно спасибо, люблю такие миниатюрные вещи. Завтра попробую завести на ардуино

twentydraft
()

Спасибо за Вашу библиотеку! Может, когда-нибудь пригодится. Для embeded думаю в самый раз.

xor2003
()

Программа для EddyEm, с нечитаемым названием и версией 0.1? На главную, без вариантов!

anonymous
()
Ответ на: комментарий от saahriktu

utf-8 он до 6 байт, но в реальности больше 4 байт не встречается.по поводу кодировок и GLib поверьте там есть исчерпывающий набор функций для конвертации всего во все, сам на этих перекодировках собак к съел. пол собаки точно.

angel_il ★★★★
()
Последнее исправление: angel_il (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Хоть где-либо в проприетарщине?

Хоть где-либо вообще.

Zmicier ★★★★★
()

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

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

Это библиотека для Си. Низкоуровневая библиотека. Что также может быть полезно при ресурсоёмких задачах. Пока другие библиотеки распутывают свои алиасы и прочие кишки эта библиотека уже много байт перемолотит. С интерфейсом в обычный int, а не в экзотические типы.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

vala работает как с низкоуровнемы библиотеками на си(написанными не разработчиками vala), так и сам генерирует код на си(правда для чтения человеком он не очень приспособлен). единственное в чём теоретически может выиграть библиотека - бинарник будет на килобайт меньше.

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

Зачем что-то генерировать если достаточно один раз руками определить набор функций? И он уже определён. Всё. Только компилировать и линковать.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

кто сказал что это надо генерировать? vala использует уже давно изобретённый код на си. Который вполен можно собирать с другим кодом на си. без переизобретения

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

Но, зачем? И какой другой код предполагается использовать через лишние инструменты?

Эта библиотека для тех, кому не нужны тонны лишних инструментов. Для тех, кто просто хочет взять уже готовую библиотеку на Си, и просто юзать в своих программах на Си.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Беда только в том, что предусмотрено только посимвольное чтение из файла/потока и всё. А это ой как медленно. То есть другие библиотеки распутают, что они там распутывают, да и обгонят твоего пешехода.

TeopeTuK ★★★★
()
Ответ на: комментарий от saahriktu

А еще там баги, увы. Дочитал, правда, только до реализации sizeoffatc() (первая же функция!) и в ее вызовах уже баги со знаками преобразованных типов. А что же там дальше тогда? Переписывай, что ли... Или лучше не пиши на си совсем, это сложно...

TeopeTuK ★★★★
()
Последнее исправление: TeopeTuK (всего исправлений: 1)

А из char* почему читать не умеет? требовать FILE* довольно нагло. Ну тоесть что из FILE* умеет хорошо, но кроме него неплохо бы char* и абстрактный поточный интерфейс иметь.

q0tw4 ★★★★
()
Последнее исправление: q0tw4 (всего исправлений: 1)
Ответ на: комментарий от q0tw4

В первую очередь в Unix'ах работать нужно с файлами. В строках откуда возьмутся данные как не из файлов?

Напоминаю, что в Unix'ах - всё файл. Включая stdin, stdout и stderr.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Есть бинарные форматы файлов. Делаешь 1 раз memcpy по заданной длине а потом уже разбираешься что там внутри написано.

q0tw4 ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.