Merge branch 'master' into zig-0.14
This commit is contained in:
commit
a959563bc7
11 changed files with 253 additions and 75 deletions
|
@ -524,7 +524,7 @@ const Node = union(enum) {
|
|||
if (!found) return error.NotFound;
|
||||
}
|
||||
|
||||
pub fn ecg_at(self: *const Node, line: usize, col: usize, metrics: Metrics) error{NotFound}!struct { []const u8, usize, usize } {
|
||||
pub fn egc_at(self: *const Node, line: usize, col: usize, metrics: Metrics) error{NotFound}!struct { []const u8, usize, usize } {
|
||||
const ctx_ = struct {
|
||||
col: usize,
|
||||
at: ?[]const u8 = null,
|
||||
|
@ -545,8 +545,8 @@ const Node = union(enum) {
|
|||
}
|
||||
|
||||
pub fn test_at(self: *const Node, pred: *const fn (c: []const u8) bool, line: usize, col: usize, metrics: Metrics) bool {
|
||||
const ecg, _, _ = self.ecg_at(line, col, metrics) catch return false;
|
||||
return pred(ecg);
|
||||
const egc, _, _ = self.egc_at(line, col, metrics) catch return false;
|
||||
return pred(egc);
|
||||
}
|
||||
|
||||
pub fn get_line_width_map(self: *const Node, line: usize, map: *ArrayList(usize), metrics: Metrics) error{ Stop, NoSpaceLeft }!void {
|
||||
|
|
|
@ -40,7 +40,7 @@ fn move_right_no_target(self: *Self, root: Buffer.Root, metrics: Metrics) !void
|
|||
const lines = root.lines();
|
||||
if (lines <= self.row) return error.Stop;
|
||||
if (self.col < root.line_width(self.row, metrics) catch 0) {
|
||||
_, const wcwidth, const offset = root.ecg_at(self.row, self.col, metrics) catch return error.Stop;
|
||||
_, const wcwidth, const offset = root.egc_at(self.row, self.col, metrics) catch return error.Stop;
|
||||
self.col += wcwidth - offset;
|
||||
} else if (self.row < lines - 1) {
|
||||
self.col = 0;
|
||||
|
@ -59,7 +59,7 @@ fn move_left_no_target(self: *Self, root: Buffer.Root, metrics: Metrics) !void {
|
|||
self.row -= 1;
|
||||
self.col = root.line_width(self.row, metrics) catch 0;
|
||||
} else {
|
||||
_, const wcwidth, _ = root.ecg_at(self.row, self.col - 1, metrics) catch return error.Stop;
|
||||
_, const wcwidth, _ = root.egc_at(self.row, self.col - 1, metrics) catch return error.Stop;
|
||||
if (self.col > wcwidth) self.col -= wcwidth else self.col = 0;
|
||||
}
|
||||
}
|
||||
|
@ -176,6 +176,10 @@ fn is_at_end(self: *const Self, root: Buffer.Root, metrics: Metrics) bool {
|
|||
return if (self.row < root.lines()) self.col == root.line_width(self.row, metrics) catch 0 else true;
|
||||
}
|
||||
|
||||
pub fn egc_at(self: *const Self, root: Buffer.Root, metrics: Metrics) error{NotFound}!struct { []const u8, usize, usize } {
|
||||
return root.egc_at(self.row, self.col, metrics);
|
||||
}
|
||||
|
||||
pub fn test_at(self: *const Self, root: Buffer.Root, pred: *const fn (c: []const u8) bool, metrics: Metrics) bool {
|
||||
return root.test_at(pred, self.row, self.col, metrics);
|
||||
}
|
||||
|
|
|
@ -38,6 +38,25 @@ pub fn control_code_to_unicode(code: u8) [:0]const u8 {
|
|||
};
|
||||
}
|
||||
|
||||
pub const char_pairs = [_]struct { []const u8, []const u8 }{
|
||||
.{ "\"", "\"" },
|
||||
.{ "'", "'" },
|
||||
.{ "(", ")" },
|
||||
.{ "(", ")" },
|
||||
.{ "[", "]" },
|
||||
.{ "[", "]" },
|
||||
.{ "{", "}" },
|
||||
.{ "{", "}" },
|
||||
.{ "‘", "’" },
|
||||
.{ "‘", "’" },
|
||||
.{ "“", "”" },
|
||||
.{ "“", "”" },
|
||||
.{ "‚", "‘" },
|
||||
.{ "‚", "‘" },
|
||||
.{ "«", "»" },
|
||||
.{ "«", "»" },
|
||||
};
|
||||
|
||||
fn raw_byte_to_utf8(cp: u8, buf: []u8) ![]const u8 {
|
||||
var utf16le: [1]u16 = undefined;
|
||||
const utf16le_as_bytes = std.mem.sliceAsBytes(utf16le[0..]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue