mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-07-21 16:41:26 +00:00
unicode: change cell to wide when grapheme width changes
This commit is contained in:
@@ -13,6 +13,10 @@ pub const Properties = packed struct {
|
||||
/// becomes a 2-em dash).
|
||||
width: u2 = 0,
|
||||
|
||||
/// Whether the code point does not contribute to the width of a grapheme
|
||||
/// cluster (not used for single code point cells).
|
||||
width_zero_in_grapheme: bool = false,
|
||||
|
||||
/// Grapheme break property.
|
||||
grapheme_break: uucode.x.types.GraphemeBreakNoControl = .other,
|
||||
|
||||
@@ -23,6 +27,7 @@ pub const Properties = packed struct {
|
||||
// Needed for lut.Generator
|
||||
pub fn eql(a: Properties, b: Properties) bool {
|
||||
return a.width == b.width and
|
||||
a.width_zero_in_grapheme == b.width_zero_in_grapheme and
|
||||
a.grapheme_break == b.grapheme_break and
|
||||
a.emoji_vs_text == b.emoji_vs_text and
|
||||
a.emoji_vs_emoji == b.emoji_vs_emoji;
|
||||
@@ -36,12 +41,14 @@ pub const Properties = packed struct {
|
||||
try writer.print(
|
||||
\\.{{
|
||||
\\ .width= {},
|
||||
\\ .width_zero_in_grapheme= {},
|
||||
\\ .grapheme_break= .{s},
|
||||
\\ .emoji_vs_text= {},
|
||||
\\ .emoji_vs_emoji= {},
|
||||
\\}}
|
||||
, .{
|
||||
self.width,
|
||||
self.width_zero_in_grapheme,
|
||||
@tagName(self.grapheme_break),
|
||||
self.emoji_vs_text,
|
||||
self.emoji_vs_emoji,
|
||||
|
||||
@@ -8,6 +8,7 @@ const Properties = @import("props.zig").Properties;
|
||||
pub fn get(cp: u21) Properties {
|
||||
if (cp > uucode.config.max_code_point) return .{
|
||||
.width = 1,
|
||||
.width_zero_in_grapheme = true,
|
||||
.grapheme_break = .other,
|
||||
.emoji_vs_text = false,
|
||||
.emoji_vs_emoji = false,
|
||||
@@ -15,6 +16,7 @@ pub fn get(cp: u21) Properties {
|
||||
|
||||
return .{
|
||||
.width = uucode.get(.width, cp),
|
||||
.width_zero_in_grapheme = uucode.get(.wcwidth_zero_in_grapheme, cp),
|
||||
.grapheme_break = uucode.get(.grapheme_break_no_control, cp),
|
||||
.emoji_vs_text = uucode.get(.is_emoji_vs_text, cp),
|
||||
.emoji_vs_emoji = uucode.get(.is_emoji_vs_emoji, cp),
|
||||
|
||||
Reference in New Issue
Block a user