diff options
| author | Sam Varshavchik | 2021-03-07 17:46:01 -0500 |
|---|---|---|
| committer | Sam Varshavchik | 2021-03-10 22:52:34 -0500 |
| commit | 18fc31347b80597f4100f96c86799fe130786781 (patch) | |
| tree | 08b641332ec55232a34d3656d6435559a847fcce /unicode/courier-unicode.h.in | |
| parent | 92bcce9b28d5d123af67ff0201cd97508af21326 (diff) | |
| download | courier-libs-18fc31347b80597f4100f96c86799fe130786781.tar.bz2 | |
courier-unicode: canonical decomposition and composition implementation.
Move unicode_canonical() into a larger library of functions that handles
full Unicode decomposition and composition.
Diffstat (limited to 'unicode/courier-unicode.h.in')
| -rw-r--r-- | unicode/courier-unicode.h.in | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/unicode/courier-unicode.h.in b/unicode/courier-unicode.h.in index da886a4..b3caa47 100644 --- a/unicode/courier-unicode.h.in +++ b/unicode/courier-unicode.h.in @@ -13,6 +13,7 @@ #include <vector> #include <list> #include <functional> +#include <tuple> extern "C" { #endif @@ -1317,6 +1318,63 @@ extern const char unicode_u_ucs2_native[]; #define unicode_x_smap_modutf8 "x-smap-modutf8" +#define UNICODE_DECOMPOSE_FLAG_QC 1 +#define UNICODE_DECOMPOSE_FLAG_COMPAT 2 + +struct unicode_decompose_info { + char32_t *string; + size_t string_size; + int decompose_flags; + + int (*reallocate)(struct unicode_decompose_info *info, + const size_t *offsets, + const size_t *sizes, + size_t n); + + void *arg; +}; + +extern void unicode_decompose_info_init(struct unicode_decompose_info *, + char32_t *string, + size_t string_size, + void *arg); + +extern void unicode_decompose_info_deinit(struct unicode_decompose_info *); + +extern int unicode_decompose(struct unicode_decompose_info *); + +extern size_t unicode_decompose_reallocate_size(struct unicode_decompose_info *, + const size_t *sizes, + size_t n); + +struct unicode_compositions { + struct unicode_compositions *next; + size_t index; + size_t n_composed; + char32_t *composition; + size_t n_composition; +}; + +#define UNICODE_COMPOSE_FLAG_REMOVEUNUSED 1 +#define UNICODE_COMPOSE_FLAG_ONESHOT 128 + +int unicode_composition_init(const char32_t *string, + size_t string_size, + int flags, + struct unicode_compositions **ret + ); + +void unicode_composition_deinit(struct unicode_compositions *); + +size_t unicode_composition_apply(char32_t *string, + size_t string_size, + struct unicode_compositions *compositions); + +int unicode_compose(char32_t *string, + size_t string_size, + int flags, + size_t *new_size); + #if 0 { #endif @@ -2390,6 +2448,32 @@ std::u32string bidi_override(const std::u32string &s, unicode_bidi_level_t direction, int cleanup_options=0); +constexpr int decompose_flag_qc=UNICODE_DECOMPOSE_FLAG_QC; +constexpr int decompose_flag_compat=UNICODE_DECOMPOSE_FLAG_COMPAT; + +void decompose_default_reallocate(std::u32string &, + const std::vector<std::tuple<size_t, size_t>> + &); + +void decompose(std::u32string &, + int flags=0, + const std::function<void (std::u32string &, + const std::vector<std::tuple<size_t, + size_t>>)> & + =decompose_default_reallocate); + +constexpr int compose_flag_removeunused=UNICODE_COMPOSE_FLAG_REMOVEUNUSED; + +constexpr int compose_flag_oneshot=UNICODE_COMPOSE_FLAG_ONESHOT; + +void compose_default_callback(size_t, size_t, const char32_t *, size_t); + +void compose(std::u32string &string, + int flags=0, + const std::function<void (size_t, size_t, + const char32_t *, size_t)> &cb= + compose_default_callback); + #if 0 { #endif |
