srctree

Gregory Mullen parent 6d986755 0af3b006
pretty up side by side diffs a bit more

inlinesplit
src/patch.zig added: 40, removed: 20, total 20
@@ -379,35 +379,54 @@ pub fn loadRemote(a: Allocator, uri: []const u8) !Patch {
pub fn diffLineHtmlSplit(a: Allocator, diff: []const u8) []HTML.Element {
var dom = DOM.new(a);
 
 
 
 
 
const clean = Bleach.sanitizeAlloc(a, diff, .{}) catch unreachable;
const line_count = std.mem.count(u8, clean, "\n");
var litr = std.mem.split(u8, clean, "\n");
 
 
 
 
for (0..line_count + 1) |_| {
const a_splt = &HTML.Attr.class("split");
const a_add = &HTML.Attr.class("add");
const a_del = &HTML.Attr.class("del");
const a_block = &HTML.Attr.class("block");
const line = litr.next().?;
if (line.len > 0) {
switch (line[0]) {
'-' => {
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(line[1..], a_del));
dom.dupe(HTML.span(null, null));
dom = dom.close();
},
'+' => {
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(null, null));
dom.dupe(HTML.span(line[1..], a_add));
dom = dom.close();
},
'@' => {
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(line[1..], a_block));
dom = dom.close();
},
else => {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(line[1..], null));
dom.dupe(HTML.span(line[1..], null));
@@ -379,35 +379,54 @@ pub fn loadRemote(a: Allocator, uri: []const u8) !Patch {
pub fn diffLineHtmlSplit(a: Allocator, diff: []const u8) []HTML.Element {
var dom = DOM.new(a);
const a_splt = &HTML.Attr.class("split");
const a_add = &HTML.Attr.class("add");
const a_del = &HTML.Attr.class("del");
const a_block = &HTML.Attr.class("block");
 
const clean = Bleach.sanitizeAlloc(a, diff, .{}) catch unreachable;
const line_count = std.mem.count(u8, clean, "\n");
var litr = std.mem.split(u8, clean, "\n");
var left = std.ArrayList([]const u8).init(a);
defer left.clearAndFree();
var right = std.ArrayList([]const u8).init(a);
defer right.clearAndFree();
for (0..line_count + 1) |_| {
 
 
 
 
const line = litr.next().?;
if (line.len > 0) {
switch (line[0]) {
'-' => left.append(line[1..]) catch unreachable,
'+' => right.append(line[1..]) catch unreachable,
 
 
 
 
 
 
 
 
 
 
'@' => {
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(line, a_block));
dom = dom.close();
},
else => {
const min = @min(left.items.len, right.items.len);
for (0..min) |i| {
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(left.items[i], a_del));
dom.dupe(HTML.span(right.items[i], a_add));
dom = dom.close();
}
if (left.items.len > min) {
for (left.items[min..]) |l| {
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(l, a_del));
dom.dupe(HTML.span(null, null));
dom = dom.close();
}
} else if (right.items.len > min) {
for (right.items[min..]) |r| {
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(null, null));
dom.dupe(HTML.span(r, a_add));
dom = dom.close();
}
}
left.clearRetainingCapacity();
right.clearRetainingCapacity();
dom = dom.open(HTML.span(null, a_splt));
dom.dupe(HTML.span(line[1..], null));
dom.dupe(HTML.span(line[1..], null));
templates/commit.html added: 40, removed: 20, total 20
@@ -20,11 +20,12 @@
</data>
</commit>
</With>
 
 
<For Comments>
<_comment.html>
</For>
 
<diff>
<_patch.html>
</diff>
@@ -20,11 +20,12 @@
</data>
</commit>
</With>
</content>
<content class="diff">
<For Comments>
<_comment.html>
</For>
 
<diff>
<_patch.html>
</diff>