diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2026-05-02 16:41:33 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2026-05-02 16:41:33 +0200 |
| commit | 5556e46cc453c024defa833b964648465ddc9e39 (patch) | |
| tree | 789d144376970aaeefe14bd491d8edf220aea35c /go/typdown.go | |
| parent | 5bc6edf71afe1d9b115af7363e9ffd867f2a6a57 (diff) | |
build(zig): link statically typst
Diffstat (limited to 'go/typdown.go')
| -rw-r--r-- | go/typdown.go | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/go/typdown.go b/go/typdown.go index 386b779..d4bf569 100644 --- a/go/typdown.go +++ b/go/typdown.go @@ -28,7 +28,11 @@ var ( ErrInvalidLink = errors.New("invalid link") ) -func Parse(content string) (template.HTML, error) { +type Document struct { + ptr unsafe.Pointer +} + +func Parse(content string) (*Document, error) { code := C.uchar(0) conv := C.CString(content) raw := C.typdown_parse(conv, &code) @@ -38,8 +42,25 @@ func Parse(content string) (template.HTML, error) { if code == 1 { panic(err) } - return "", err + return nil, err } + return &Document{raw}, nil +} + +func (d *Document) Deinit() { + C.typdown_free(d.ptr) +} + +func (d *Document) RenderHTML() (template.HTML, error) { + code := C.uchar(0) + raw := C.typdown_renderHTML(d.ptr, &code) defer C.free(unsafe.Pointer(raw)) + if code > 0 { + err := codeErrors[uint8(code)] + if code == 1 { + panic(err) + } + return "", err + } return template.HTML(C.GoString(raw)), nil } |
