Advertisement
avp210159

ucsutf.h

Feb 24th, 2014
602
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.61 KB | None | 0 0
  1. /*
  2.   ucsutf.h  avp 2012
  3.  
  4.   Функции для UTF-8 и Unicode (ASCII&Cyrillic), независимые от setlocale()
  5.  */
  6.  
  7. #ifndef UCSUTF_H
  8. #define UCSUTF_H
  9.  
  10. #include <stdlib.h>
  11.  
  12. struct getucs {
  13.   u_int  ucs,     // m.b. EOF
  14.     nc,  // прочитано из stream байт в bytes[]
  15.     err; // 0 if OK, при ошибке - err == nc
  16.   char   bytes[8];
  17. };
  18.  
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22.  
  23. // возвращает ucs из utf-8 в памяти
  24. extern int  utf8_to_ucs (const char *utf, int *step, int *err);
  25. // записать ucs в кодировке utf-8 в память, возвращает к-во записанных байт
  26. extern int  ucs_to_utf8 (int uc, char *b);
  27. // длина utf-8 символа (по первому байту)
  28. extern int  utf8_chrlen (const char *utf);
  29. extern int  ucs_len(int uc);
  30. // аналоги ctype для ucs (ascii & cyrillic)
  31. #define  isCyr(ucs) ({int __u = (int)(ucs); 0x400 <= __u && __u < 0x460;})
  32. extern int  isAlpha (int ucs);
  33. extern int  isLower (int ucs);
  34. extern int  isUpper (int ucs);
  35. extern int  toLower (int ucs);
  36. extern int  toUpper (int ucs);
  37. // convert символ utf-8 в памяти (по месту), возвращают к-во  байт
  38. extern int  utf8_toUpper (char *s, int *err);
  39. extern int  utf8_toLower (char *s, int *err);
  40.  
  41. extern int utf8_fgetc (struct getucs *uc, FILE *stream); // ucs из utf-8 stream
  42.  
  43. extern int utf8_len (const char *utf, int n, int *err); // длина в символах
  44. // возвращает количество UCS и в *ofs смещение в байтах в utf (при ошибке < 0)
  45. extern int utf8str_to_ucs (const char *utf, int len, // if 0 then cnv up to end
  46.                int *ucsarr, int size, int *ofs);
  47. // возвращает количество символов результата из json длины jmxl (или '\0' терм)
  48. // в **utf и *size результат (realloc())
  49. // если *utf, то она д.б. malloc и как минимум *size байт
  50. extern int utf8json_to_utf (const char *json, int *ofs, int jmxl,
  51.                 char **utf, int *size);
  52. // возвращает ucs и обнуленный sp[] или -1 и заполненный sp[] (правильная пара)
  53. extern int ucs_to_surpair (u_int ucs, int sp[2]);
  54. // возвращает 0 при неправильной суррогатной паре
  55. extern int surpair_to_ucs (int sp[2]);
  56. // возвращает длину в байтах (включая "")
  57. extern int utf8str_to_json (const char *utf, int n, char *json, int size, int *ofs);
  58.  
  59. #ifdef __cplusplus
  60. }
  61. #endif
  62.  
  63.  
  64. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement