Browse Source

Use `bit_field`s to describe internal `break_state`

gingerBill 2 months ago
parent
commit
37fffe78d6
1 changed files with 38 additions and 8 deletions
  1. 38 8
      vendor/kb_text_shape/kb_text_shape_types.odin

+ 38 - 8
vendor/kb_text_shape/kb_text_shape_types.odin

@@ -1819,22 +1819,52 @@ break_state :: struct {
 	BracketCount: u32,
 	Flags:        break_state_flags,
 
-	FlagState:       u32, // u8(break_flags)x4
+	FlagState: bit_field u32 {
+		_0: u32 | 8, // break_flags
+		_1: u32 | 8, // break_flags
+		_2: u32 | 8, // break_flags
+		_3: u32 | 8, // break_flags
+	},
 	PositionOffset2: i16,
 	PositionOffset3: i16,
 
-	WordBreakHistory:         u32, // u8x4
-	WordBreaks:               u16, // u4x4
-	WordUnbreaks:             u16, // u4x4
+	WordBreakHistory: bit_field u32 {
+		_0: u32 | 8,
+		_1: u32 | 8,
+		_2: u32 | 8,
+		_3: u32 | 8,
+	},
+	WordBreaks,
+	WordUnbreaks: bit_field u16 {
+		_0: u16 | 4,
+		_1: u16 | 4,
+		_2: u16 | 4,
+		_3: u16 | 4,
+	},
 	WordBreak2PositionOffset: i16,
 
-	LineBreaks: u64, // u16x4
+	LineBreaks: bit_field u64 {
+		_0: u64 | 16,
+		_1: u64 | 16,
+		_2: u64 | 16,
+		_3: u64 | 16,
+	},
 	// Instead of staying synchronized with LineBreaks/LineUnbreaks,
 	// this advances every character always.
 	// (This is only needed because ZWJ can create an unbreak while simultaneously being ignored.)
-	LineUnbreaksAsync:        u64, // u16x4
-	LineUnbreaks:             u64, // u16x4
-	LineBreakHistory:         u32, // u8(line_break_class)x4
+	LineUnbreaksAsync,
+	LineUnbreaks: bit_field u64 {
+		_0: u64 | 16,
+		_1: u64 | 16,
+		_2: u64 | 16,
+		_3: u64 | 16,
+	},
+	LineBreakHistory: bit_field u32 {
+		_0: u32 | 8, // break_flags
+		_1: u32 | 8, // break_flags
+		_2: u32 | 8, // break_flags
+		_3: u32 | 8, // break_flags
+	},
 	LineBreak2PositionOffset: i16,
 	LineBreak3PositionOffset: i16,