| #ifndef SCRIPT_IDENTIFY_H_ |
| #define SCRIPT_IDENTIFY_H_ |
| |
| #include <stdint.h> |
| |
| #include <harfbuzz-shaper.h> |
| |
| static const uint32_t HB_InvalidCodePoint = 0xffffffffu; |
| |
| // ----------------------------------------------------------------------------- |
| // Return the next Unicode code point from a UTF-16 vector |
| // chars: a pointer to @len words |
| // iter: (input/output) an index into @chars. This is updated. |
| // returns: HB_InvalidCodePoint on error and the code point otherwise. |
| // ----------------------------------------------------------------------------- |
| uint32_t utf16_to_code_point(const uint16_t *chars, size_t len, ssize_t *iter); |
| |
| // ----------------------------------------------------------------------------- |
| // Like the above, except that the code points are traversed backwards. Thus, |
| // on the first call, |iter| should be |len| - 1. |
| // ----------------------------------------------------------------------------- |
| uint32_t utf16_to_code_point(const uint16_t *chars, size_t len, ssize_t *iter); |
| |
| // ----------------------------------------------------------------------------- |
| // Return the script of the given code point |
| // ----------------------------------------------------------------------------- |
| HB_Script code_point_to_script(uint32_t cp); |
| |
| // ----------------------------------------------------------------------------- |
| // Find the next script run in a UTF-16 string. |
| // |
| // A script run is a subvector of codepoints, all of which are in the same |
| // script. A run will never cut a surrogate pair in half at either end. |
| // |
| // num_code_points: (output, maybe NULL) the number of code points in the run |
| // output: (output) the @pos, @length and @script fields are set on success |
| // chars: the UTF-16 string |
| // len: the length of @chars, in words |
| // iter: (in/out) the current index into the string. This should be 0 for the |
| // first call and is updated on exit. |
| // |
| // returns: non-zero if a script run was found and returned. |
| // ----------------------------------------------------------------------------- |
| char hb_utf16_script_run_next(unsigned *num_code_points, HB_ScriptItem *output, |
| const uint16_t *chars, size_t len, ssize_t *iter); |
| |
| // ----------------------------------------------------------------------------- |
| // This is the same as above, except that the input is traversed backwards. |
| // Thus, on the first call, |iter| should be |len| - 1. |
| // ----------------------------------------------------------------------------- |
| char hb_utf16_script_run_prev(unsigned *num_code_points, HB_ScriptItem *output, |
| const uint16_t *chars, size_t len, ssize_t *iter); |
| |
| #endif |