1#ifndef SCRIPT_IDENTIFY_H_ 2#define SCRIPT_IDENTIFY_H_ 3 4#include <stdint.h> 5 6#include <harfbuzz-shaper.h> 7 8static const uint32_t HB_InvalidCodePoint = 0xffffffffu; 9 10// ----------------------------------------------------------------------------- 11// Return the next Unicode code point from a UTF-16 vector 12// chars: a pointer to @len words 13// iter: (input/output) an index into @chars. This is updated. 14// returns: HB_InvalidCodePoint on error and the code point otherwise. 15// ----------------------------------------------------------------------------- 16uint32_t utf16_to_code_point(const uint16_t *chars, size_t len, ssize_t *iter); 17 18// ----------------------------------------------------------------------------- 19// Like the above, except that the code points are traversed backwards. Thus, 20// on the first call, |iter| should be |len| - 1. 21// ----------------------------------------------------------------------------- 22uint32_t utf16_to_code_point(const uint16_t *chars, size_t len, ssize_t *iter); 23 24// ----------------------------------------------------------------------------- 25// Return the script of the given code point 26// ----------------------------------------------------------------------------- 27HB_Script code_point_to_script(uint32_t cp); 28 29// ----------------------------------------------------------------------------- 30// Find the next script run in a UTF-16 string. 31// 32// A script run is a subvector of codepoints, all of which are in the same 33// script. A run will never cut a surrogate pair in half at either end. 34// 35// num_code_points: (output, maybe NULL) the number of code points in the run 36// output: (output) the @pos, @length and @script fields are set on success 37// chars: the UTF-16 string 38// len: the length of @chars, in words 39// iter: (in/out) the current index into the string. This should be 0 for the 40// first call and is updated on exit. 41// 42// returns: non-zero if a script run was found and returned. 43// ----------------------------------------------------------------------------- 44char hb_utf16_script_run_next(unsigned *num_code_points, HB_ScriptItem *output, 45 const uint16_t *chars, size_t len, ssize_t *iter); 46 47// ----------------------------------------------------------------------------- 48// This is the same as above, except that the input is traversed backwards. 49// Thus, on the first call, |iter| should be |len| - 1. 50// ----------------------------------------------------------------------------- 51char hb_utf16_script_run_prev(unsigned *num_code_points, HB_ScriptItem *output, 52 const uint16_t *chars, size_t len, ssize_t *iter); 53 54#endif 55