aboutsummaryrefslogtreecommitdiff
path: root/src/eval/html/Literal.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval/html/Literal.zig')
-rw-r--r--src/eval/html/Literal.zig19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/eval/html/Literal.zig b/src/eval/html/Literal.zig
index d3b697f..ccad004 100644
--- a/src/eval/html/Literal.zig
+++ b/src/eval/html/Literal.zig
@@ -1,22 +1,37 @@
const std = @import("std");
const Allocator = std.mem.Allocator;
-const List = std.ArrayList;
const html = @import("html.zig");
const Element = @import("Element.zig");
+const Node = Element.Node;
const Error = Element.Error;
literal: []const u8,
+node: Node = .{
+ .ptr = undefined,
+ .vtable = .{ .element = fromNode },
+},
const Self = @This();
pub fn init(alloc: Allocator, literal: []const u8) Error!*Element.Literal {
const v = try alloc.create(Self);
v.* = .{ .literal = try html.escape(alloc, literal) };
+ v.node.ptr = v;
return v;
}
pub fn element(self: *Self) Element {
- return .{ .vtable = .{ .render = Self.render }, .ptr = self };
+ return .{ .vtable = .{ .render = render, .node = getNode }, .ptr = self };
+}
+
+fn getNode(context: *anyopaque) *Node {
+ const self: *Self = @ptrCast(@alignCast(context));
+ return &self.node;
+}
+
+fn fromNode(context: *anyopaque) Element {
+ const self: *Self = @ptrCast(@alignCast(context));
+ return self.element();
}
fn render(context: *anyopaque, alloc: Allocator) Error![]const u8 {