aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.zig24
-rw-r--r--src/root.zig1
-rw-r--r--src/typst.zig11
-rw-r--r--typst/typdown_typst.h (renamed from typst/typst.h)0
4 files changed, 34 insertions, 2 deletions
diff --git a/build.zig b/build.zig
index d41b8d1..8fc9b74 100644
--- a/build.zig
+++ b/build.zig
@@ -4,17 +4,36 @@ pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
+ // build typst module
+ const build_typst = b.addSystemCommand(&[_][]const u8{
+ "cargo", "build",
+ });
+ build_typst.setCwd(b.path("typst/"));
+ if (optimize != .Debug) build_typst.addArg("--release");
+ b.getInstallStep().dependOn(&build_typst.step);
+
const mod = b.addModule("typdown", .{
.root_source_file = b.path("src/root.zig"),
.target = target,
.optimize = optimize,
});
if (!target.result.isWasiLibC()) mod.link_libc = true;
+ // link typst module during build
+ mod.addIncludePath(b.path("typst"));
+ mod.addLibraryPath(
+ if (optimize == .Debug) b.path("typst/target/debug/")
+ else b.path("typst/target/release/")
+ );
+ if (optimize != .Debug) mod.strip = true;
+
const lib = b.addLibrary(.{
.name = "typdown",
- .linkage = .dynamic,
+ .linkage = .static,
.root_module = mod,
});
+ // link typst module to build
+ lib.linkSystemLibrary("typdown_typst");
+
const installed_lib = b.addInstallArtifact(lib, .{});
// when emitting headers will be fixed
//installed_lib.emitted_h = lib.getEmittedH();
@@ -42,10 +61,11 @@ pub fn build(b: *std.Build) void {
const run_mod_tests = b.addRunArtifact(mod_tests);
const test_step = b.step("test", "Run tests");
+ test_step.dependOn(b.getInstallStep());
test_step.dependOn(&run_mod_tests.step);
const examples_step = b.step("examples", "Run examples");
- examples_step.dependOn(&installed_lib.step);
+ examples_step.dependOn(b.getInstallStep());
const example_run = b.addRunArtifact(example);
examples_step.dependOn(&example_run.step);
diff --git a/src/root.zig b/src/root.zig
index 6fd15f5..648fb77 100644
--- a/src/root.zig
+++ b/src/root.zig
@@ -2,6 +2,7 @@ const std = @import("std");
const builtin = @import("builtin");
const Allocator = std.mem.Allocator;
const parser = @import("parser.zig");
+const typst = @import("typst.zig");
pub const Document = parser.Document;
pub const Error = parser.Error;
/// Parse the content.
diff --git a/src/typst.zig b/src/typst.zig
new file mode 100644
index 0000000..9608af5
--- /dev/null
+++ b/src/typst.zig
@@ -0,0 +1,11 @@
+const std = @import("std");
+const typst = @cImport(@cInclude("typdown_typst.h"));
+
+pub fn generateSVG(alloc: std.mem.Allocator, content: []const u8) ![]const u8 {
+ const source = try alloc.dupeZ(u8, content);
+ defer alloc.free(source);
+ const raw_res = typst.typst_generateSVG(source);
+ const res = try alloc.dupe(u8, std.mem.span(raw_res));
+ defer typst.typst_freeString(raw_res);
+ return res;
+}
diff --git a/typst/typst.h b/typst/typdown_typst.h
index 755314a..755314a 100644
--- a/typst/typst.h
+++ b/typst/typdown_typst.h