35 lines
1.1 KiB
Zig
35 lines
1.1 KiB
Zig
// This example is dedicated to the public domain or, where that is not possible,
|
|
// licensed under CC0-1.0, available at https://spdx.org/licenses/CC0-1.0.html
|
|
|
|
const std = @import("std");
|
|
|
|
const nice = @import("nice");
|
|
|
|
pub fn main() !void {
|
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
|
defer _ = gpa.deinit();
|
|
const allocator = gpa.allocator();
|
|
|
|
const args = try std.process.argsAlloc(allocator);
|
|
defer std.process.argsFree(allocator, args);
|
|
if (args.len < 2) return;
|
|
|
|
const document: nice.Document = doc: {
|
|
const file = try std.fs.cwd().openFile(args[1], .{});
|
|
defer file.close();
|
|
var parser = try nice.StreamParser.init(allocator, .{});
|
|
defer parser.deinit();
|
|
errdefer parser.parse_state.document.deinit();
|
|
while (true) {
|
|
var buf = [_]u8{0} ** 1024;
|
|
const len = try file.read(&buf);
|
|
if (len == 0) break;
|
|
try parser.feed(buf[0..len]);
|
|
}
|
|
break :doc try parser.finish();
|
|
};
|
|
defer document.deinit();
|
|
|
|
document.printDebug();
|
|
}
|