Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

This development version matches HarfBuzz [v14.3.1](https://github.com/harfbuzz/harfbuzz/releases/tag/14.3.1).

- Update the built-in Unicode data to 18.0. Add Jurchen, Proto-Cuneiform, and
Seal script constants to the Rust and C APIs and route them through USE.
- Support hexadecimal OpenType language and script overrides in `x-hbot-`
and `x-hbsc-` private-use subtags, such as `x-hbot-4d4f4e54` for `MONT`.
- Add a unified `Buffer` type, matching HarfBuzz's `hb_buffer_t`. It carries a
Expand Down
4 changes: 4 additions & 0 deletions harfrust/src/hb/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,10 @@ pub mod script {
pub const SIDETIC: Script = Script::from_bytes(b"Sidt");
pub const TAI_YO: Script = Script::from_bytes(b"Tayo");
pub const TOLONG_SIKI: Script = Script::from_bytes(b"Tols");
// Since 18.0
pub const JURCHEN: Script = Script::from_bytes(b"Jurc");
pub const PROTO_CUNEIFORM: Script = Script::from_bytes(b"Pcun");
pub const SEAL: Script = Script::from_bytes(b"Seal");

pub const MATH: Script = Script::from_bytes(b"Zmth");

Expand Down
5 changes: 5 additions & 0 deletions harfrust/src/hb/ot_shaper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,11 @@ pub fn hb_ot_shape_complex_categorize(
| script::TAI_YO
| script::TOLONG_SIKI

// Unicode-18.0 additions
| script::JURCHEN
| script::PROTO_CUNEIFORM
| script::SEAL

=> {
// If the designer designed the font for the 'DFLT' script,
// (or we ended up arbitrarily pick 'latn'), use the default shaper.
Expand Down
26 changes: 13 additions & 13 deletions harfrust/src/hb/ot_shaper_arabic_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
*
* on files with these headers:
*
* # ArabicShaping-17.0.0.txt
* # Date: 2025-08-14
* # Blocks-17.0.0.txt
* # Date: 2025-08-01
* # ArabicShaping-18.0.0.txt
* # Date: 2026-08-18, 19:02:41 GMT
* # Blocks-18.0.0.txt
* # Date: 2026-07-08
* UnicodeData.txt does not have a header.
*/

Expand All @@ -21,7 +21,7 @@ use crate::unicode::Codepoint;
use super::ot_shaper_arabic::hb_arabic_joining_type_t::{self, D, GroupAlaph, GroupDalathRish, L, R, T, U, X};

#[allow(dead_code, non_upper_case_globals, clippy::allow_attributes_without_reason, missing_docs)]
pub(crate) static _hb_arabic_joining_u8: [u8; 737]=
pub(crate) static _hb_arabic_joining_u8: [u8; 749]=
[
0, 16, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Expand All @@ -46,11 +46,11 @@ pub(crate) static _hb_arabic_joining_u8: [u8; 737]=
0, 0, 46, 0, 0, 0, 47, 0, 0, 0, 0, 0, 0, 48, 6, 0,
0, 1, 1, 1, 1, 1, 1, 49, 0, 50, 51, 52, 53, 54, 55, 0,
0, 56, 57, 58, 0, 0, 59, 0, 0, 60, 1, 1, 1, 61, 0, 0,
0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
1, 64, 0, 65, 0, 0, 0, 66, 1, 67, 0, 0, 0, 0, 0, 68,
69, 70, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 62, 0, 0, 63, 64, 65, 0, 0, 0, 0, 0, 0, 0, 0, 66,
1, 67, 0, 68, 0, 0, 0, 69, 1, 70, 0, 0, 0, 0, 0, 71,
72, 73, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3, 0, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
1, 72, 73, 0, 0, 0, 0, 0, 0,119,119,119,119, 51, 51, 51,
1, 75, 76, 0, 0, 0, 0, 0, 0,119,119,119,119, 51, 51, 51,
51, 34, 34, 34, 34,119,119, 7,119, 34, 51, 51, 51, 35, 51, 51,
51, 0,119,119,119,115,119,119,119, 0, 0, 0,119,112, 7,119,
119, 3, 34, 34, 35, 35, 51, 51, 35, 34, 50, 51, 51, 50,115,119,
Expand All @@ -66,10 +66,10 @@ pub(crate) static _hb_arabic_joining_u8: [u8; 737]=
119, 51, 51, 35, 32, 32, 2, 16, 34, 34, 50, 51, 19, 51, 51, 35,
51, 35, 0,114,119,119, 55, 51, 35, 35, 35, 34, 51, 35, 51, 50,
34, 35,119,119,119, 39, 34, 50, 3, 49, 51, 51, 51, 51, 50,119,
119,119, 50,115, 51, 51, 35, 51, 51, 51, 51, 3,119, 55, 51,114,
119, 51, 51, 34, 51, 51,119,119,119, 3, 51, 34, 2, 35, 50, 35,
51, 48, 34, 3, 0, 32, 19,119,119, 51, 51,119,119,119,103,119,
119,
119,119, 50,115, 51, 23, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
113, 51, 35, 51, 51, 51, 51, 3,119, 55, 51,114,119, 51, 51, 34,
51, 51,119,119,119, 3, 51, 34, 2, 35, 50, 35, 51, 48, 34, 3,
0, 32, 19,119,119, 51, 51,119,119,119,103,119,119,
];

#[allow(dead_code, unused_parens, trivial_numeric_casts, clippy::allow_attributes_without_reason, clippy::unseparated_literal_suffix, clippy::double_parens, clippy::unnecessary_cast)]
Expand Down
84 changes: 42 additions & 42 deletions harfrust/src/hb/ot_shaper_indic_table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
*
* on files with these headers:
*
* # IndicSyllabicCategory-17.0.0.txt
* # Date: 2025-08-01, 04:02:23 GMT
* # IndicPositionalCategory-17.0.0.txt
* # Date: 2025-07-29, 13:35:52 GMT
* # Blocks-17.0.0.txt
* # Date: 2025-08-01
* # IndicSyllabicCategory-18.0.0.txt
* # Date: 2026-07-02, 18:58:37 GMT
* # IndicPositionalCategory-18.0.0.txt
* # Date: 2026-06-24, 13:39:21 GMT
* # Blocks-18.0.0.txt
* # Date: 2026-07-08
*/

#![allow(unused_parens)]
Expand All @@ -30,7 +30,7 @@ use OT_CM as _OT_CM; /* 1 chars; CM */
use OT_CS as _OT_CS; /* 4 chars; CS */
use OT_DOTTEDCIRCLE as _OT_DC; /* 1 chars; DOTTEDCIRCLE */
use OT_H as _OT_H; /* 11 chars; H */
use OT_M as _OT_M; /* 142 chars; M */
use OT_M as _OT_M; /* 144 chars; M */
use OT_MH as _OT_MH; /* 1 chars; MH */
use OT_ML as _OT_ML; /* 1 chars; ML */
use OT_MPst as _OT_MP; /* 1 chars; MPst */
Expand Down Expand Up @@ -59,7 +59,7 @@ use OT_ZWJ as _OT_ZWJ; /* 1 chars; ZWJ */
use OT_ZWNJ as _OT_ZWNJ; /* 1 chars; ZWNJ */

use POS_ABOVE_C as _POS_T; /* 22 chars; ABOVE_C */
use POS_AFTER_MAIN as _POS_A; /* 3 chars; AFTER_MAIN */
use POS_AFTER_MAIN as _POS_A; /* 5 chars; AFTER_MAIN */
use POS_AFTER_POST as _POS_AP; /* 50 chars; AFTER_POST */
use POS_AFTER_SUB as _POS_AS; /* 51 chars; AFTER_SUB */
use POS_BASE_C as _POS_C; /* 853 chars; BASE_C */
Expand Down Expand Up @@ -103,7 +103,7 @@ pub(crate) static _hb_indic_values: [u16; 42]=
indic_combine_categories(_OT_ZWJ, _POS_X),indic_combine_categories(_OT_ZWNJ, _POS_X),
];
#[allow(dead_code, non_upper_case_globals, clippy::allow_attributes_without_reason, missing_docs)]
pub(crate) static _hb_indic_u8: [u8; 1220]=
pub(crate) static _hb_indic_u8: [u8; 1224]=
[
1, 0, 50, 4, 5, 96, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Expand Down Expand Up @@ -143,45 +143,45 @@ pub(crate) static _hb_indic_u8: [u8; 1220]=
56, 12, 14, 6, 0, 0, 0, 4, 44, 2, 16, 2, 6, 22, 0, 4,
2, 0, 36, 28, 6, 28, 0, 4, 30, 30, 30, 30, 0, 0, 42, 0,
34, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 42, 12, 12, 6, 6,
6, 6, 24, 2, 2, 18, 36,112, 18, 18, 18, 18, 18, 18,114,116,
118,120,122, 18, 0, 6, 6, 6, 44, 10, 0, 2, 54, 32, 46, 10,
6, 6, 24, 2, 2, 18, 36,110, 18, 18, 18, 18, 18, 18,112,114,
116,118,120, 18, 0, 6, 6, 6, 44, 10, 0, 2, 54, 32, 46, 10,
26, 0, 0, 0, 0, 0, 34, 70, 6, 20, 0, 14, 44, 2, 16, 10,
2, 0, 72, 50,124, 48, 0, 32, 48, 32, 46, 0,126, 0, 0, 0,
16, 2, 10, 10, 12, 2,128, 0, 6, 6, 6, 14, 6, 14, 24, 2,
22, 22, 52, 74, 76, 32, 46, 0, 16, 58, 58, 78,130, 12, 14, 6,
2, 0, 36,132,134, 32, 46, 0, 0, 0, 80,136, 16, 0, 0, 0,
2, 0, 72, 50,122, 48, 0, 32, 48, 32, 46, 0,124, 0, 0, 0,
16, 2, 10, 10, 12, 2,126, 0, 6, 6, 6, 14, 6, 14, 24, 2,
22, 22, 52, 74, 76, 32, 46, 0, 16, 58, 58, 78,128, 12, 14, 6,
2, 0, 36,130,132, 32, 46, 0, 0,134,136,138, 16, 0, 0, 0,
0, 70, 14, 6, 6, 20, 0, 6, 20, 6, 24, 0, 16, 10, 10, 2,
0, 16, 10, 0, 2, 10, 0, 2, 2, 0, 0, 22, 76, 48, 0, 82,
54, 22, 84, 0, 12, 12,138, 6, 28, 60, 38, 28, 86, 28, 88, 0,
0, 0,140, 86, 2, 10, 16, 0, 26, 2, 16, 2, 28, 60, 38, 60,
38, 18, 88, 0, 0, 0, 74, 38, 0, 0, 16, 10,142,144, 0, 0,
12, 12,146, 6, 2,148,150, 22, 22, 22, 48, 82, 54, 22, 84,152,
0, 0, 2,154, 0, 0, 0, 14, 0, 2, 2, 2, 2, 2, 26, 2,
2,156, 2, 2, 90, 6, 6, 6, 6,158, 92, 94,160,162, 62, 58,
164,166,168,170, 4, 4, 0, 10, 2, 6, 6, 96, 98, 26, 2,172,
174,100,176,178,100,102,102, 2,104, 62,180, 2, 2,182,184,186,
12, 12, 12,188, 4, 12,190, 0, 2, 26, 2, 2, 2, 90, 6, 6,
6, 6, 0, 92, 62, 94, 98,192,194,196, 96,198,200,106,106,108,
108,202, 0, 0, 42, 0,204, 0, 8,206, 8, 8,208, 40,210, 40,
40, 2,212,214, 8, 34, 0, 0, 0, 0,216, 0, 4, 4, 4, 0,
0, 34, 0, 0, 0, 0,110, 0, 0, 64,110, 0, 0, 0,218, 0,
0, 42, 4, 34, 8, 40, 40, 40, 0, 0, 0,220, 2, 2,104, 16,
4, 2, 2, 10, 16, 2, 4, 34, 0,222, 78, 2, 56, 12, 0, 0,
0, 80, 72, 0, 37, 37, 2, 2, 6, 6, 31, 31, 0, 0, 2, 37,
0, 16, 10, 0, 2, 10, 0, 2, 2, 0, 0, 22, 76, 48, 0, 80,
54, 22, 82, 0, 12, 12,140, 6, 28, 60, 38, 28, 84, 28, 86, 0,
0, 0,142, 84, 2, 10, 16, 0, 26, 2, 16, 2, 28, 60, 38, 60,
38, 18, 86, 0, 0, 0, 74, 38, 0, 0, 16, 10,144,146, 0, 0,
12, 12,148, 6, 2,150,152, 22, 22, 22, 48, 80, 54, 22, 82,154,
0, 0, 2,156, 0, 0, 0, 14, 0, 2, 2, 2, 2, 2, 26, 2,
2,158, 2, 2, 88, 6, 6, 6, 6,160, 90, 92,162,164, 62, 58,
166,168,170,172, 4, 4, 0, 10, 2, 6, 6, 94, 96, 26, 2,174,
176, 98,178,180, 98,100,100, 2,102, 62,182, 2, 2,184,186,188,
12, 12, 12,190, 4, 12,192, 0, 2, 26, 2, 2, 2, 88, 6, 6,
6, 6, 0, 90, 62, 92, 96,194,196,198, 94,200,202,104,104,106,
106,204, 0, 0, 42, 0,206, 0, 8,208, 8, 8,210, 40,212, 40,
40, 2,214,216, 8, 34, 0, 0, 0, 0,218, 0, 4, 4, 4, 0,
0, 34, 0, 0, 0, 0,108, 0, 0, 64,108, 0, 0, 0,220, 0,
0, 42, 4, 34, 8, 40, 40, 40, 0, 0, 0,222, 2, 2,102, 16,
4, 2, 2, 10, 16, 2, 4, 34, 0,224, 78, 2, 56, 12, 0, 0,
0,226, 72, 0, 37, 37, 2, 2, 6, 6, 31, 31, 0, 0, 2, 37,
29, 29, 37, 31, 37, 2, 12, 12, 31, 37, 11, 11, 31, 2, 24, 2,
14, 14, 36, 36, 37, 11, 6, 37, 22, 27, 12, 37, 27, 27, 37, 6,
24, 37, 11, 7, 11, 37, 11, 15, 11, 12, 15, 37, 37, 29, 0, 22,
14, 12, 32, 32, 30, 30, 6, 29, 37, 15, 29, 37, 22, 37, 37, 12,
12, 11, 22, 22, 37, 22, 15, 15, 11, 8, 14, 37, 14, 8, 2, 31,
35, 32, 32, 33, 35, 35, 33, 33, 35, 23, 23, 23, 2, 32, 26, 38,
38, 38, 30, 37, 12, 15, 12, 7, 15, 12, 37, 0, 0, 29, 29, 12,
18, 11, 37, 13, 37, 3, 37, 28, 11, 10, 10, 37, 10, 11, 29, 31,
37, 14, 37, 4, 4, 29, 6, 31, 2, 12, 12, 27, 25, 37, 2, 11,
2, 24, 31, 35, 33, 34, 0, 32, 29, 9, 1, 21, 19, 20, 16, 2,
21, 21, 17, 2, 23, 2, 2, 35, 32, 2, 20, 35, 34, 32, 32, 29,
2, 29, 29, 32, 32, 35, 35, 34, 34, 34, 38, 39, 39, 26, 9, 39,
27, 39, 0, 37, 0, 27, 27, 0, 0, 4, 4, 0, 41, 40, 5, 37,
31, 12, 2, 23,
12, 11, 22, 22, 15, 15, 11, 8, 14, 37, 14, 8, 2, 31, 35, 32,
32, 33, 35, 35, 33, 33, 35, 23, 23, 23, 2, 32, 26, 38, 38, 38,
30, 37, 12, 15, 12, 7, 15, 12, 37, 0, 0, 29, 29, 12, 18, 11,
37, 13, 37, 3, 37, 28, 11, 10, 10, 37, 37, 10, 10, 22, 10, 11,
29, 31, 37, 14, 37, 4, 4, 29, 6, 31, 2, 12, 12, 27, 25, 37,
2, 11, 2, 24, 31, 35, 33, 34, 0, 32, 29, 9, 1, 21, 19, 20,
16, 2, 21, 21, 17, 2, 23, 2, 2, 35, 32, 2, 20, 35, 34, 32,
32, 29, 2, 29, 29, 32, 32, 35, 35, 34, 34, 34, 38, 39, 39, 26,
9, 39, 27, 39, 0, 37, 0, 27, 27, 0, 0, 4, 4, 0, 41, 40,
5, 37, 31, 12, 2, 23, 37, 22,
];

#[allow(dead_code, unused_parens, trivial_numeric_casts, clippy::allow_attributes_without_reason, clippy::unseparated_literal_suffix, clippy::double_parens, clippy::unnecessary_cast)]
Expand Down
Loading