wsutf8.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:3k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  *
  3.  * wsutf8.h
  4.  *
  5.  * Author: Markku Rossi <mtr@iki.fi>
  6.  *
  7.  * Copyright (c) 1999-2000 WAPIT OY LTD.
  8.  *  All rights reserved.
  9.  *
  10.  * Functions to manipulate UTF-8 encoded strings.
  11.  *
  12.  * Specification: RFC-2279
  13.  *
  14.  */
  15. #ifndef WSUTF8_H
  16. #define WSUTF8_H
  17. /********************* Types and defintions *****************************/
  18. /* UTF-8 string handle. */
  19. struct WsUtf8StringRec
  20. {
  21.     /* The length of the UTF-8 encoded `data'. */
  22.     size_t len;
  23.     /* The UTF-8 encoded data. */
  24.     unsigned char *data;
  25.     /* The number of characters in the string. */
  26.     size_t num_chars;
  27. };
  28. typedef struct WsUtf8StringRec WsUtf8String;
  29. /********************* Global functions *********************************/
  30. /* Allocate an empty UTF-8 string.  The function returns NULL if the
  31.    allocation failed (out of memory). */
  32. WsUtf8String *ws_utf8_alloc(void);
  33. /* Free an UTF-8 encoded string. */
  34. void ws_utf8_free(WsUtf8String *string);
  35. /* Append the character `ch' to the string `string'.  The function
  36.    returns 1 if the operation was successful or 0 otherwise (out of
  37.    memory). */
  38. int ws_utf8_append_char(WsUtf8String *string, unsigned long ch);
  39. /* Verify the UTF-8 encoded string `data' containing `len' bytes of
  40.    data.  The function returns 1 if the `data' is correctly encoded
  41.    and 0 otherwise.  If the argument `strlen_return' is not NULL, it
  42.    is set to the number of characters in the string. */
  43. int ws_utf8_verify(const unsigned char *data, size_t len,
  44.                    size_t *strlen_return);
  45. /* Set UTF-8 encoded data `data', `len' to the string `string'.  The
  46.    function returns 1 if the data was UTF-8 encoded and 0 otherwise
  47.    (malformed data or out of memory).  The function frees the possible
  48.    old data from `string'. */
  49. int ws_utf8_set_data(WsUtf8String *string, const unsigned char *data,
  50.                      size_t len);
  51. /* Get a character from the UTF-8 string `string'.  The argument
  52.    `posp' gives the index of the character in the UTF-8 encoded data.
  53.    It is not the sequence number of the character.  It is its starting
  54.    position within the UTF-8 encoded data.  The argument `posp' is
  55.    updated to point to the beginning of the next character within the
  56.    data.  The character is returned in `ch_return'.  The function
  57.    returns 1 if the operation was successful or 0 otherwise (index
  58.    `posp' was invalid or there were no more characters in the
  59.    string). */
  60. int ws_utf8_get_char(const WsUtf8String *string, unsigned long *ch_return,
  61.                      size_t *posp);
  62. /* Convert the UTF-8 encoded string `string' to null-terminated ISO
  63.    8859/1 (ISO latin1) string.  Those characters of `string' which can
  64.    not be presented in latin1 are replaced with the character
  65.    `unknown_char'.  If the argument `len_return' is not NULL, it is
  66.    set to contain the length of the returned string (excluding the
  67.    trailing null-character).  The function returns a pointer to the
  68.    string or NULL if the operation failed (out of memory).  The
  69.    returned string must be freed with the ws_utf8_free_data()
  70.    function. */
  71. unsigned char *ws_utf8_to_latin1(const WsUtf8String *string,
  72.                                  unsigned char unknown_char,
  73.                                  size_t *len_return);
  74. /* Free a string, returned by the ws_utf8_to_latin1_cstr()
  75.    function. */
  76. void ws_utf8_free_data(unsigned char *data);
  77. #endif /* not WSUTF8_H */