Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ucsutf.h avp 2012
- Функции для UTF-8 и Unicode (ASCII&Cyrillic), независимые от setlocale()
- */
- #ifndef UCSUTF_H
- #define UCSUTF_H
- #include <stdlib.h>
- struct getucs {
- u_int ucs, // m.b. EOF
- nc, // прочитано из stream байт в bytes[]
- err; // 0 if OK, при ошибке - err == nc
- char bytes[8];
- };
- #ifdef __cplusplus
- extern "C" {
- #endif
- // возвращает ucs из utf-8 в памяти
- extern int utf8_to_ucs (const char *utf, int *step, int *err);
- // записать ucs в кодировке utf-8 в память, возвращает к-во записанных байт
- extern int ucs_to_utf8 (int uc, char *b);
- // длина utf-8 символа (по первому байту)
- extern int utf8_chrlen (const char *utf);
- extern int ucs_len(int uc);
- // аналоги ctype для ucs (ascii & cyrillic)
- #define isCyr(ucs) ({int __u = (int)(ucs); 0x400 <= __u && __u < 0x460;})
- extern int isAlpha (int ucs);
- extern int isLower (int ucs);
- extern int isUpper (int ucs);
- extern int toLower (int ucs);
- extern int toUpper (int ucs);
- // convert символ utf-8 в памяти (по месту), возвращают к-во байт
- extern int utf8_toUpper (char *s, int *err);
- extern int utf8_toLower (char *s, int *err);
- extern int utf8_fgetc (struct getucs *uc, FILE *stream); // ucs из utf-8 stream
- extern int utf8_len (const char *utf, int n, int *err); // длина в символах
- // возвращает количество UCS и в *ofs смещение в байтах в utf (при ошибке < 0)
- extern int utf8str_to_ucs (const char *utf, int len, // if 0 then cnv up to end
- int *ucsarr, int size, int *ofs);
- // возвращает количество символов результата из json длины jmxl (или '\0' терм)
- // в **utf и *size результат (realloc())
- // если *utf, то она д.б. malloc и как минимум *size байт
- extern int utf8json_to_utf (const char *json, int *ofs, int jmxl,
- char **utf, int *size);
- // возвращает ucs и обнуленный sp[] или -1 и заполненный sp[] (правильная пара)
- extern int ucs_to_surpair (u_int ucs, int sp[2]);
- // возвращает 0 при неправильной суррогатной паре
- extern int surpair_to_ucs (int sp[2]);
- // возвращает длину в байтах (включая "")
- extern int utf8str_to_json (const char *utf, int n, char *json, int size, int *ofs);
- #ifdef __cplusplus
- }
- #endif
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement