diff options
-rw-r--r-- | src/main.zig | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/src/main.zig b/src/main.zig index 14eb65c..21103ff 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,11 +1,12 @@ const std = @import("std"); const File = std.fs.File; +const Reader = std.fs.File.Reader; const Writer = std.fs.File.Writer; pub fn main() !void { const in = std.io.getStdIn(); const out = std.io.getStdOut(); - Uf.init().streamCopy(in, out) catch |err| { + Uf.init().streamCopy(in.reader(), out.writer()) catch |err| { try std.io.getStdErr().writer().print("Error {}", .{err}); }; } @@ -22,12 +23,12 @@ const Uf = struct { return Self{}; } - fn flush(_: Self, out: Writer) !void { + fn flush(_: Self, out: anytype) !void { _ = try out.write(out_buf[0..out_index]); out_index = 0; } - fn writeChar(self: Self, out: Writer, c: u8) !void { + fn writeChar(self: Self, out: anytype, c: u8) !void { if (out_index >= buf_size) { try self.flush(out); } @@ -35,10 +36,7 @@ const Uf = struct { out_index += 1; } - fn streamCopy(self: Self, in: File, out: File) !void { - const reader = in.reader(); - const writer = out.writer(); - + fn streamCopy(self: Self, reader: anytype, writer: anytype) !void { var hit = false; var second = false; var in_buf: [buf_size]u8 = undefined; @@ -55,6 +53,8 @@ const Uf = struct { } else if (hit and c != '\n') { if (second) { try self.writeChar(writer, '\n'); + } else { + try self.writeChar(writer, ' '); } hit = false; second = false; @@ -73,3 +73,32 @@ const Uf = struct { } } }; + +test "Test format" { + const text_in = + \\# This is a markdown + \\ + \\Lorem ipsum dolor sit amet, + \\consectetur adipiscing elit. + \\ + \\ + \\ + \\Praesent pharetra sit amet ante sit amet consequat. + ; + + const text_out = + \\# This is a markdown + \\ + \\Lorem ipsum dolor sit amet, consectetur adipiscing elit. + \\ + \\Praesent pharetra sit amet ante sit amet consequat. + ; + + var stream = std.io.fixedBufferStream(text_in); + + var list = std.ArrayList(u8).init(std.testing.allocator); + defer list.deinit(); + + try Uf.init().streamCopy(stream.reader(), list.writer()); + try std.testing.expect(std.mem.eql(u8, text_out, list.items)); +} |