1/Hejsil/mecha v0.5


Mecha

A parser combinator library for the Zig programming language. Time to make your own parser mech! mech

const mecha = @import("mecha");
const std = @import("std");

const Rgb = struct {
    r: u8,
    g: u8,
    b: u8,
};

fn toByte(v: u4) u8 {
    return @as(u8, v) * 0x10 + v;
}

const hex1 = mecha.map(u8, toByte, mecha.int(u4, .{
    .parse_sign = false,
    .base = 16,
    .max_digits = 1,
}));
const hex2 = mecha.int(u8, .{
    .parse_sign = false,
    .base = 16,
    .max_digits = 2,
});
const rgb1 = mecha.map(Rgb, mecha.toStruct(Rgb), mecha.manyN(hex1, 3, .{}));
const rgb2 = mecha.map(Rgb, mecha.toStruct(Rgb), mecha.manyN(hex2, 3, .{}));
const rgb = mecha.combine(.{
    mecha.ascii.char('#'),
    mecha.oneOf(.{
        rgb2,
        rgb1,
    }),
});

test "rgb" {
    const testing = std.testing;
    const allocator = testing.allocator;
    const a = (try rgb(allocator, "#aabbcc")).value;
    try testing.expectEqual(@as(u8, 0xaa), a.r);
    try testing.expectEqual(@as(u8, 0xbb), a.g);
    try testing.expectEqual(@as(u8, 0xcc), a.b);

    const b = (try rgb(allocator, "#abc")).value;
    try testing.expectEqual(@as(u8, 0xaa), b.r);
    try testing.expectEqual(@as(u8, 0xbb), b.g);
    try testing.expectEqual(@as(u8, 0xcc), b.b);

    const c = (try rgb(allocator, "#000000")).value;
    try testing.expectEqual(@as(u8, 0), c.r);
    try testing.expectEqual(@as(u8, 0), c.g);
    try testing.expectEqual(@as(u8, 0), c.b);

    const d = (try rgb(allocator, "#000")).value;
    try testing.expectEqual(@as(u8, 0), d.r);
    try testing.expectEqual(@as(u8, 0), d.g);
    try testing.expectEqual(@as(u8, 0), d.b);
}

Package Contents

  • example/rgb.zig
  • example/json.zig
  • example/README.md.template
  • gyro.zzz
  • .gitattributes
  • mecha.zig
  • LICENSE
  • .github/workflows/ci.yml
  • .github/dependabot.yml
  • .github/FUNDING.yml
  • build.zig
  • src/ascii.zig
  • src/utf8.zig
  • README.md
  • zig.mod
  • .gitignore

History

Published On Tree @ Commit Size
v0.47 Fri, 02 Feb 2024 14:48:22 UTC Tree 85.009 KB
v0.46 Fri, 02 Feb 2024 14:45:00 UTC Tree 85.017 KB
v0.45 Fri, 02 Feb 2024 14:42:26 UTC Tree 85.277 KB
v0.44 Mon, 08 Jan 2024 07:16:19 UTC Tree 85.208 KB
v0.43 Tue, 02 Jan 2024 06:58:09 UTC Tree 85.223 KB
v0.42 Tue, 05 Sep 2023 13:21:43 UTC Tree 85.223 KB
v0.41 Tue, 11 Jul 2023 07:26:38 UTC Tree 85.223 KB
v0.40 Tue, 27 Jun 2023 07:22:44 UTC Tree 85.223 KB
v0.39 Mon, 26 Jun 2023 14:39:10 UTC Tree 85.284 KB
v0.38 Sun, 18 Jun 2023 16:29:19 UTC Tree 85.284 KB
v0.37 Sun, 18 Jun 2023 11:42:29 UTC Tree 85.223 KB
v0.36 Thu, 01 Jun 2023 13:52:21 UTC Tree 85.227 KB
v0.35 Fri, 19 May 2023 14:49:38 UTC Tree 85.272 KB
v0.34 Fri, 12 May 2023 06:42:16 UTC Tree 85.272 KB
v0.33 Mon, 17 Apr 2023 07:01:18 UTC Tree 84.265 KB
v0.32 Fri, 14 Apr 2023 07:13:49 UTC Tree 84.273 KB
v0.31 Mon, 20 Mar 2023 08:28:46 UTC Tree 84.232 KB
v0.30 Sun, 19 Mar 2023 10:44:38 UTC Tree 84.227 KB
v0.29 Wed, 08 Mar 2023 15:53:37 UTC Tree 84.105 KB
v0.28 Wed, 01 Mar 2023 14:50:05 UTC Tree 84.145 KB
v0.27 Thu, 23 Feb 2023 09:09:34 UTC Tree 84.066 KB
v0.26 Wed, 15 Feb 2023 20:58:07 UTC Tree 84.041 KB
v0.25 Wed, 15 Feb 2023 20:57:38 UTC Tree 84.045 KB
v0.24 Wed, 15 Feb 2023 20:56:03 UTC Tree 84.055 KB
v0.23 Tue, 07 Feb 2023 09:54:38 UTC Tree 83.817 KB
v0.22 Tue, 07 Feb 2023 08:32:52 UTC Tree 83.609 KB
v0.21 Mon, 06 Feb 2023 15:53:39 UTC Tree 82.762 KB
v0.20 Mon, 06 Feb 2023 15:51:52 UTC Tree 82.781 KB
v0.19 Thu, 12 Jan 2023 18:54:42 UTC Tree 82.684 KB
v0.18 Wed, 04 Jan 2023 09:50:39 UTC Tree 82.685 KB
v0.17 Mon, 02 Jan 2023 09:08:51 UTC Tree 82.685 KB
v0.16 Mon, 02 Jan 2023 08:51:12 UTC Tree 82.677 KB
v0.15 Mon, 02 Jan 2023 08:37:52 UTC Tree 82.636 KB
v0.14 Mon, 02 Jan 2023 08:31:50 UTC Tree 82.502 KB
v0.13 Fri, 09 Dec 2022 10:03:40 UTC Tree 82.598 KB
v0.12 Fri, 09 Dec 2022 09:22:05 UTC Tree 82.641 KB
v0.11 Sun, 20 Nov 2022 10:00:57 UTC Tree 82.824 KB
v0.10 Wed, 16 Nov 2022 12:11:56 UTC Tree 82.833 KB
v0.9 Wed, 16 Nov 2022 10:18:31 UTC Tree 82.523 KB
v0.8 Tue, 08 Nov 2022 12:48:38 UTC Tree 82.502 KB
v0.7 Thu, 15 Sep 2022 11:45:25 UTC Tree 82.502 KB
v0.6 Tue, 23 Aug 2022 15:47:27 UTC Tree 82.419 KB
v0.5 Fri, 29 Jul 2022 12:12:52 UTC Tree 82.371 KB
v0.4 Tue, 31 May 2022 08:09:48 UTC Tree 82.362 KB
v0.3 Wed, 02 Mar 2022 16:55:39 UTC Tree 82.357 KB
v0.2 Thu, 17 Feb 2022 14:59:09 UTC Tree 82.365 KB
v0.1 Thu, 03 Feb 2022 20:53:48 UTC Tree 82.299 KB