lib/xkb/src/keymap/text/compile.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const xkb = @import("../../root.zig");
 3 const parse = @import("parse/root.zig");
 4 const resolve = @import("resolve.zig");
 5 
 6 pub const Error = parse.Error || resolve.Error;
 7 
 8 pub const Compiled = struct {
 9     arena: std.heap.ArenaAllocator,
10     value: *const xkb.keymap.Keymap,
11 
12     pub fn keymap(self: *const Compiled) *const xkb.keymap.Keymap {
13         return self.value;
14     }
15 
16     pub fn deinit(self: *Compiled) void {
17         self.arena.deinit();
18         self.* = undefined;
19     }
20 };
21 
22 pub fn compile(allocator: std.mem.Allocator, input: []const u8) Error!Compiled {
23     var arena = std.heap.ArenaAllocator.init(allocator);
24     errdefer arena.deinit();
25     const arena_allocator = arena.allocator();
26     const parsed_document = try parse.parse(arena_allocator, input);
27     const value = try resolve.resolve(arena_allocator, parsed_document);
28     return .{ .arena = arena, .value = value };
29 }