Skip to content

Commit

Permalink
terminal: remove unused pagesearch
Browse files Browse the repository at this point in the history
  • Loading branch information
mitchellh committed Dec 3, 2024
1 parent b487aa8 commit 09e4ccc
Showing 1 changed file with 0 additions and 139 deletions.
139 changes: 0 additions & 139 deletions src/terminal/search.zig
Original file line number Diff line number Diff line change
Expand Up @@ -448,142 +448,3 @@ test "SlidingWindow two pages" {
try testing.expect(w.next(needle) == null);
try testing.expect(w.next(needle) == null);
}

pub const PageSearch = struct {
alloc: Allocator,
node: *PageList.List.Node,
needle: []const u8,
cell_map: Page.CellMap,
encoded: std.ArrayListUnmanaged(u8) = .{},
i: usize = 0,

pub fn init(
alloc: Allocator,
node: *PageList.List.Node,
needle: []const u8,
) !PageSearch {
var result: PageSearch = .{
.alloc = alloc,
.node = node,
.needle = needle,
.cell_map = Page.CellMap.init(alloc),
};

const page: *const Page = &node.data;
_ = try page.encodeUtf8(result.encoded.writer(alloc), .{
.cell_map = &result.cell_map,
});

return result;
}

pub fn deinit(self: *PageSearch) void {
self.encoded.deinit(self.alloc);
self.cell_map.deinit();
}

pub fn next(self: *PageSearch) ?Selection {
// Search our haystack for the needle. The resulting index is
// the offset from self.i not the absolute index.
const haystack: []const u8 = self.encoded.items[self.i..];
const i_offset = std.mem.indexOf(u8, haystack, self.needle) orelse {
self.i = self.encoded.items.len;
return null;
};

// Get our full index into the encoded buffer.
const idx = self.i + i_offset;

// We found our search term. Move the cursor forward one beyond
// the match. This lets us find every repeated match.
self.i = idx + 1;

const tl: PageList.Pin = tl: {
const map = self.cell_map.items[idx];
break :tl .{
.node = self.node,
.y = map.y,
.x = map.x,
};
};
const br: PageList.Pin = br: {
const map = self.cell_map.items[idx + self.needle.len - 1];
break :br .{
.node = self.node,
.y = map.y,
.x = map.x,
};
};

return Selection.init(tl, br, false);
}
};

test "search single page one match" {
const testing = std.testing;
const alloc = testing.allocator;

var s = try Screen.init(alloc, 80, 24, 0);
defer s.deinit();
try s.testWriteString("hello, world");

// We want to test single-page cases.
try testing.expect(s.pages.pages.first == s.pages.pages.last);
const node: *PageList.List.Node = s.pages.pages.first.?;

var it = try PageSearch.init(alloc, node, "world");
defer it.deinit();

const sel = it.next().?;
try testing.expectEqual(point.Point{ .active = .{
.x = 7,
.y = 0,
} }, s.pages.pointFromPin(.active, sel.start()).?);
try testing.expectEqual(point.Point{ .active = .{
.x = 11,
.y = 0,
} }, s.pages.pointFromPin(.active, sel.end()).?);

try testing.expect(it.next() == null);
}

test "search single page multiple match" {
const testing = std.testing;
const alloc = testing.allocator;

var s = try Screen.init(alloc, 80, 24, 0);
defer s.deinit();
try s.testWriteString("hello. boo! hello. boo!");

// We want to test single-page cases.
try testing.expect(s.pages.pages.first == s.pages.pages.last);
const node: *PageList.List.Node = s.pages.pages.first.?;

var it = try PageSearch.init(alloc, node, "boo!");
defer it.deinit();

{
const sel = it.next().?;
try testing.expectEqual(point.Point{ .active = .{
.x = 7,
.y = 0,
} }, s.pages.pointFromPin(.active, sel.start()).?);
try testing.expectEqual(point.Point{ .active = .{
.x = 10,
.y = 0,
} }, s.pages.pointFromPin(.active, sel.end()).?);
}
{
const sel = it.next().?;
try testing.expectEqual(point.Point{ .active = .{
.x = 19,
.y = 0,
} }, s.pages.pointFromPin(.active, sel.start()).?);
try testing.expectEqual(point.Point{ .active = .{
.x = 22,
.y = 0,
} }, s.pages.pointFromPin(.active, sel.end()).?);
}

try testing.expect(it.next() == null);
}

0 comments on commit 09e4ccc

Please sign in to comment.