diff --git a/README.md b/README.md index ba7c84ccc24667a3771a2d524fa6c9158ca7c09b..0710ecd57d6622e1d192d29ea46f0e2c23e1737c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ![loc](https://sloc.xyz/github/nektro/zig-pek) [![license](https://img.shields.io/github/license/nektro/zig-pek.svg)](https://github.com/nektro/zig-pek/blob/master/LICENSE) [![nektro @ github sponsors](https://img.shields.io/badge/sponsors-nektro-purple?logo=github)](https://github.com/sponsors/nektro) -[![Zig](https://img.shields.io/badge/Zig-0.14-f7a41d)](https://ziglang.org/) +[![Zig](https://img.shields.io/badge/Zig-0.15-f7a41d)](https://ziglang.org/) [![Zigmod](https://img.shields.io/badge/Zigmod-latest-f7a41d)](https://github.com/nektro/zigmod) A comptime HTML preprocessor with a builtin template engine for Zig. diff --git a/src/lib.zig b/src/lib.zig index 88e6ccdc31ac9dc3815888d4813bcf1ac91ebbea..0c901ca043466dcc369b7bfbb8534bdbf5d8eea1 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -40,7 +40,7 @@ pub fn compileInner(alloc: std.mem.Allocator, writer: anytype, comptime value: a try do(alloc, writer, value, data, data, opts); } -pub const Writer = std.ArrayList(u8).Writer; +pub const Writer = *std.Io.Writer; fn do(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype, comptime opts: DoOptions) anyerror!void { comptime var skipindent = false; @@ -297,33 +297,33 @@ fn doInner(alloc: std.mem.Allocator, writer: anytype, comptime value: astgen.Val .function => |v| { if (!v.raw and @hasDecl(opts.Ctx, "pek_" ++ v.name)) { const func = @field(opts.Ctx, "pek_" ++ v.name); - var list = std.ArrayList(u8).init(alloc); + var list = std.Io.Writer.Allocating.init(alloc); defer list.deinit(); comptime var types: [v.args.len]type = @splat(void); inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx)); var args: std.meta.Tuple(&types) = undefined; inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts); - try @call(.auto, func, .{ alloc, list.writer() } ++ args); + try @call(.auto, func, .{ alloc, &list.writer } ++ args); try writeReplacementString(writer, v.raw, opts.escaped, try list.toOwnedSlice()); return; } if (v.raw and @hasDecl(opts.Ctx, "pek__" ++ v.name)) { const func = @field(opts.Ctx, "pek__" ++ v.name); - var list = std.ArrayList(u8).init(alloc); + var list = std.Io.Writer.Allocating.init(alloc); defer list.deinit(); const Tup = @typeInfo(@TypeOf(func)).@"fn".params[3].type.?; if (@typeInfo(Tup).@"struct".fields.len == 0) { // edge case branch because 'struct {}' is counted as a non-tuple - try @call(.auto, func, .{ alloc, list.writer(), opts, Tup{} }); - try writeReplacementString(writer, v.raw, opts.escaped, list.items); + try @call(.auto, func, .{ alloc, &list.writer, opts, Tup{} }); + try writeReplacementString(writer, v.raw, opts.escaped, list.written()); return; } comptime var types: [v.args.len]type = @splat(void); inline for (v.args, &types) |arg, *T| T.* = ResolveArg(arg, @TypeOf(data), @TypeOf(ctx)); var args: std.meta.Tuple(&types) = undefined; inline for (v.args, 0..) |arg, i| args[i] = try resolveArg(arg, alloc, data, ctx, opts); - try @call(.auto, func, .{ alloc, list.writer(), opts, args }); - try writeReplacementString(writer, v.raw, opts.escaped, list.items); + try @call(.auto, func, .{ alloc, &list.writer, opts, args }); + try writeReplacementString(writer, v.raw, opts.escaped, list.written()); return; } if (v.raw and @hasDecl(opts.Ctx, "pek_" ++ v.name)) { @@ -352,11 +352,11 @@ fn resolveArg(comptime arg: astgen.Arg, alloc: std.mem.Allocator, data: anytype, .lookup => |av| search(av, ctx), .int => |av| av, .value => |av| { - var list = std.ArrayList(u8).init(alloc); + var list = std.Io.Writer.Allocating.init(alloc); comptime var newopts = opts; newopts.escaped = false; - try do(alloc, list.writer(), astgen.Value{ .body = av }, data, ctx, newopts); - return list.items; + try do(alloc, &list.writer, astgen.Value{ .body = av }, data, ctx, newopts); + return list.written(); }, }; }