Skip to content

Commit

Permalink
renderer,tablex: render args, allow cetz renderer
Browse files Browse the repository at this point in the history
Cc #76 #77
  • Loading branch information
PgBiel committed Dec 17, 2023
1 parent 66b8e0c commit 4d0b855
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 10 deletions.
27 changes: 20 additions & 7 deletions src/renderer/renderer.typ
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Central file for the renderer module.
#import "old.typ": render-old, old-renderer-setup
#import "cetz.typ": render-cetz, cetz-renderer-setup

// ctx: The context dictionary with the following attributes:
//
Expand Down Expand Up @@ -30,15 +31,27 @@
//
// 6. Typst context
// - styles
#let render(ctx) = {
// TODO: add new renderer, allow choosing.
render-old(ctx)
#let render(renderer, ctx) = {
// TODO: add new renderer.
if renderer == "old" {
render-old(ctx)
} else if renderer == "cetz" {
render-cetz(ctx)
} else {
panic("Internal tablex error: Renderer must be 'old' or 'cetz'.")
}
}

// Sets up the renderer and generates the table.
// Call with:
// renderer-setup((renderer-ctx, size, styles) => ... code to generate the tablex table ...)
#let renderer-setup(tablex-callback) = {
// TODO: add new renderer, allow choosing
old-renderer-setup(tablex-callback)
// renderer-setup(renderer, renderer-args, (renderer-ctx, size, styles) => ... code to generate the tablex table ...)
#let renderer-setup(renderer, renderer-args, tablex-callback) = {
// TODO: add new renderer.
if renderer == "old" {
old-renderer-setup(tablex-callback)
} else if renderer == "cetz" {
cetz-renderer-setup(renderer-args, tablex-callback)
} else {
panic("Internal tablex error: Renderer must be 'old' or 'cetz'.")
}
}
21 changes: 18 additions & 3 deletions src/tablex.typ
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,15 @@
// cannot be sent to another row. Also, cells may be
// 'none' if they're a position taken by a cell in a
// colspan/rowspan.
//
// renderer: Choose the renderer you will use.
// Must be either "old" or "cetz".
// Defaults to "old".
//
// renderer-args: Args for the renderer.
// If "old", ignored.
// If "cetz", must contain 'styles'.
// Must be a dictionary.
#let tablex(
columns: auto, rows: auto,
inset: 5pt,
Expand All @@ -117,6 +126,8 @@
map-vlines: none,
map-rows: none,
map-cols: none,
renderer: "old",
renderer-args: (:),
..items
) = {
let header-rows = validate-header-rows(header-rows)
Expand All @@ -127,6 +138,8 @@
let map-vlines = parse-map-func(map-vlines)
let map-rows = parse-map-func(map-rows, uses-second-param: true)
let map-cols = parse-map-func(map-cols, uses-second-param: true)
let renderer = validate-renderer(renderer)
let renderer-args = validate-renderer-args(renderer-args, renderer: renderer)

// --- initial grid setup (doesn't require renderer setup) ---
let items = items.pos().map(table-item-convert)
Expand Down Expand Up @@ -175,7 +188,7 @@
// Gather the info the renderer needs (available through renderer-ctx),
// and also get the page/container's dimensions ('container-size')
// and the current styles ('styles').
renderer-setup((renderer-ctx, container-size, styles) => {
renderer-setup(renderer, renderer-args, (renderer-ctx, container-size, styles) => {
let page-width = container-size.width
let page-height = container-size.height

Expand Down Expand Up @@ -242,13 +255,15 @@
// lines
hlines: hlines,
vlines: vlines,
// renderer context info
// renderer and renderer context info
renderer: renderer,
renderer-args: renderer-args,
renderer-ctx: renderer-ctx,
// Typst context
styles: styles
)

render(context)
render(renderer, context)
})
}

Expand Down

0 comments on commit 4d0b855

Please sign in to comment.