/* SPDX-License-Identifier: GPL-2.0 */ /* * Unicode related declarations */ #ifndef _LINUX_HFSPLUS_UNICODE_H #define _LINUX_HFSPLUS_UNICODE_H /* * struct hfsplus_ccc_range - one run of consecutive BMP code points that * share the same Unicode canonical combining class * @first: the first UTF-16 code point in the run * @last: the last code point in the run (inclusive) * @combining_class: canonical combining class (ccc) shared by @first..@last */ struct hfsplus_ccc_range { u16 first; u16 last; u8 combining_class; }; /* * struct hfsplus_legacy_decomp - corrected canonical decomposition * @uc: the code point (a UTF-16 code unit) to look up * @len: number of valid code units in @repl * @repl: corrected decomposition sequence (base letter + combining marks) */ struct hfsplus_legacy_decomp { u16 uc; u8 len; #define HFSPLUS_LEGACY_DECOMP_MAX_LEN (3) u16 repl[HFSPLUS_LEGACY_DECOMP_MAX_LEN]; }; /* * struct hfsplus_legacy_seq_fixup - corrected replacement for a short * sequence of already-decomposed code units * @match_len: number of valid code units in @match * @match: decomposed sequence to look for in the buffer * @repl_len: number of valid code units in @repl * @repl: corrected sequence to substitute in place of @match */ struct hfsplus_legacy_seq_fixup { u8 match_len; #define HFSPLUS_LEGACY_SEQ_MAX_MATCH (3) u16 match[HFSPLUS_LEGACY_SEQ_MAX_MATCH]; u8 repl_len; #define HFSPLUS_LEGACY_SEQ_MAX_REPL (2) u16 repl[HFSPLUS_LEGACY_SEQ_MAX_REPL]; }; extern u16 hfsplus_case_fold_table[]; extern u16 hfsplus_decompose_table[]; extern u16 hfsplus_compose_table[]; extern struct hfsplus_ccc_range hfsplus_ccc_table[]; extern struct hfsplus_legacy_decomp hfsplus_legacy_decomp_table[]; extern struct hfsplus_legacy_seq_fixup hfsplus_legacy_seq_fixups[]; u8 hfsplus_combining_class(u16 c); const u16 *hfsplus_legacy_decompose(u16 uc, int *size); void hfsplus_fixup_legacy_sequences(u16 *buf, int *len); #endif /* _LINUX_HFSPLUS_UNICODE_H */