From 8325236833445ae851dc0d6d2d1faf199b6f1870 Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Wed, 16 Oct 2024 02:32:20 -0400 Subject: [PATCH 1/6] whitespace changes in test output due to new pandoc --- .../qmd-files/css-properties/border/border-width-ex.qmd | 2 +- .../qmd-files/css-properties/border/border-width-rem.qmd | 2 +- .../qmd-files/css-properties/border/border-width-rpx.qmd | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-ex.qmd b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-ex.qmd index 910b76007fe..6106db9091a 100644 --- a/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-ex.qmd +++ b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-ex.qmd @@ -19,7 +19,7 @@ _quarto: typst: ensureTypstFileRegexMatches: - - - ' \[A\], \[B\]' + - ' \[A\], \[B\]' - [] --- diff --git a/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rem.qmd b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rem.qmd index 740df70e78c..c34bc5ace67 100644 --- a/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rem.qmd +++ b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rem.qmd @@ -19,7 +19,7 @@ _quarto: typst: ensureTypstFileRegexMatches: - - - ' table.cell\(stroke: \(thickness: 17em\)\)\[A\], \[B\]' + - ' table.cell\(stroke: \(thickness: 17em\)\)\[A\], \[B\]' - [] --- diff --git a/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rpx.qmd b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rpx.qmd index 16665d78fdf..63dd69aa567 100644 --- a/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rpx.qmd +++ b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-rpx.qmd @@ -19,7 +19,7 @@ _quarto: typst: ensureTypstFileRegexMatches: - - - ' \[A\], \[B\]' + - ' \[A\], \[B\]' - [] --- From af3f8321529421fc4b0c7fcb6ad60d08b207a173 Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Wed, 16 Oct 2024 02:33:13 -0400 Subject: [PATCH 2/6] refactor parse_multiple & related functions into _quarto.modules.typst.css --- src/resources/filters/modules/typst_css.lua | 126 ++++++++++++++++- .../typst-css-property-processing.lua | 130 ++---------------- 2 files changed, 135 insertions(+), 121 deletions(-) diff --git a/src/resources/filters/modules/typst_css.lua b/src/resources/filters/modules/typst_css.lua index 6b3fcb48080..0af1efd9654 100644 --- a/src/resources/filters/modules/typst_css.lua +++ b/src/resources/filters/modules/typst_css.lua @@ -533,6 +533,122 @@ local function translate_length(csslen, warnings) return length and output_length(length, warnings) end +-- only a few of these map to typst, again seems simplest to parse anyway +local border_styles = { + 'none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'inherit', 'initial', 'revert', 'revert-layer', 'unset' +} + +function parse_multiple(s, limit, callback) + local start = 0 + local count = 0 + repeat + start = callback(s, start) + -- not really necessary with string:find + -- as evidenced that s.sub also works + while s:sub(start, start) == ' ' do + start = start + 1 + end + count = count + 1 + until count >=limit or start >= #s +end + +local border_width_keywords = { + thin = '1px', + medium = '3px', + thick = '5px' +} + +local function translate_border_width(v, warnings) + v = border_width_keywords[v] or v + local thickness = translate_length(v, warnings) + return thickness == '0pt' and 'delete' or thickness +end + +local function quote(s) + return '"' .. s .. '"' +end + +local function translate_border_style(v, _warnings) + local dash + if v == 'none' then + return 'delete' + elseif tcontains({'dotted', 'dashed'}, v) then + return quote(v) + end + return nil +end + +local function translate_border_color(v, warnings) + return output_color(parse_color(v, warnings), nil, warnings) +end + +-- border shorthand +-- https://developer.mozilla.org/en-US/docs/Web/CSS/border +local function translate_border(v, warnings) + -- not sure why the default style that works is not the same one specified + local width = 'medium' + local style = 'solid' -- css specifies none + local paint = 'black' -- css specifies currentcolor + parse_multiple(v, 3, function(s, start) + local fbeg, fend = s:find('%w+%b()', start) + if fbeg then + local paint2 = translate_border_color(s:sub(fbeg, fend), warnings) + if paint2 then + paint = paint2 + end + return fend + 1 + else + fbeg, fend = s:find('%S+', start) + local term = v:sub(fbeg, fend) + if tcontains(border_styles, term) then + style = term + else + if parse_length_unit(term) or border_width_keywords[term] then + width = term + else + local paint2 = translate_border_color(term, warnings) + if paint2 then + paint = paint2 + else + output_warning(warnings, 'invalid border shorthand ' .. term) + end + end + end + return fend + 1 + end + end) + return { + thickness = translate_border_width(width, warnings), + dash = translate_border_style(style, warnings), + paint = paint + } +end + +local function consume_width(s, start, warnings) + fbeg, fend = s:find('%S+', start) + local term = s:sub(fbeg, fend) + local thickness = translate_border_width(term, warnings) + return thickness, fend + 1 +end + +local function consume_style(s, start, warnings) + fbeg, fend = s:find('%S+', start) + local term = s:sub(fbeg, fend) + local dash = translate_border_style(term, warnings) + return dash, fend + 1 +end + +local function consume_color(s, start, warnings) + local fbeg, fend = s:find('%w+%b()', start) + if not fbeg then + fbeg, fend = s:find('%S+', start) + end + if not fbeg then return nil end + local paint = translate_border_color(s:sub(fbeg, fend), warnings) + return paint, fend + 1 +end + + return { parse_color = parse_color, parse_opacity = parse_opacity, @@ -540,5 +656,13 @@ return { parse_length_unit = parse_length_unit, parse_length = parse_length, output_length = output_length, - translate_length = translate_length + translate_length = translate_length, + parse_multiple = parse_multiple, + translate_border = translate_border, + translate_border_width = translate_border_width, + translate_border_style = translate_border_style, + translate_border_color = translate_border_color, + consume_width = consume_width, + consume_style = consume_style, + consume_color = consume_color } diff --git a/src/resources/filters/quarto-post/typst-css-property-processing.lua b/src/resources/filters/quarto-post/typst-css-property-processing.lua index c41ca5fc6ae..bf4fd903498 100644 --- a/src/resources/filters/quarto-post/typst-css-property-processing.lua +++ b/src/resources/filters/quarto-post/typst-css-property-processing.lua @@ -100,12 +100,6 @@ function render_typst_css_property_processing() local border_sides = {'left', 'top', 'right', 'bottom'} local border_properties = {'width', 'style', 'color'} - local border_width_keywords = { - thin = '1px', - medium = '3px', - thick = '5px' - } - local function all_equal(seq) local a = seq[1] for i = 2, #seq do @@ -116,135 +110,31 @@ function render_typst_css_property_processing() return true end - local function translate_border_width(v) - v = border_width_keywords[v] or v - local thickness = _quarto.format.typst.css.translate_length(v, _warnings) - return thickness == '0pt' and 'delete' or thickness - end - - local function translate_border_style(v) - local dash - if v == 'none' then - return 'delete' - elseif tcontains({'dotted', 'dashed'}, v) then - return quote(v) - end - return nil - end - - local function translate_border_color(v) - return _quarto.format.typst.css.output_color(_quarto.modules.typst.css.parse_color(v, _warnings), nil, _warnings) - end local border_translators = { width = { prop = 'thickness', - fn = translate_border_width + fn = _quarto.modules.typst.css.translate_border_width }, style = { prop = 'dash', - fn = translate_border_style + fn = _quarto.modules.typst.css.translate_border_style }, color = { prop = 'paint', - fn = translate_border_color + fn = _quarto.modules.typst.css.translate_border_color } } - -- only a few of these map to typst, again seems simplest to parse anyway - local border_styles = { - 'none', 'hidden', 'dotted', 'dashed', 'solid', 'double', 'groove', 'ridge', 'inset', 'outset', 'inherit', 'initial', 'revert', 'revert-layer', 'unset' - } - - function parse_multiple(s, limit, callback) - local start = 0 - local count = 0 - repeat - start = callback(s, start) - -- not really necessary with string:find - -- as evidenced that s.sub also works - while s:sub(start, start) == ' ' do - start = start + 1 - end - count = count + 1 - until count >=limit or start >= #s - end - - -- border shorthand - -- https://developer.mozilla.org/en-US/docs/Web/CSS/border - local function translate_border(v) - -- not sure why the default style that works is not the same one specified - local width = 'medium' - local style = 'solid' -- css specifies none - local paint = 'black' -- css specifies currentcolor - parse_multiple(v, 3, function(s, start) - local fbeg, fend = s:find('%w+%b()', start) - if fbeg then - local paint2 = translate_border_color(s:sub(fbeg, fend)) - if paint2 then - paint = paint2 - end - return fend + 1 - else - fbeg, fend = s:find('%S+', start) - local term = v:sub(fbeg, fend) - if tcontains(border_styles, term) then - style = term - else - if _quarto.format.typst.css.parse_length_unit(term) or border_width_keywords[term] then - width = term - else - local paint2 = translate_border_color(term) - if paint2 then - paint = paint2 - else - _warnings:insert('invalid border shorthand ' .. term) - end - end - end - return fend + 1 - end - end) - return { - thickness = translate_border_width(width), - dash = translate_border_style(style), - paint = paint - } - end - - local function consume_width(s, start) - fbeg, fend = s:find('%S+', start) - local term = s:sub(fbeg, fend) - local thickness = translate_border_width(term) - return thickness, fend + 1 - end - - local function consume_style(s, start) - fbeg, fend = s:find('%S+', start) - local term = s:sub(fbeg, fend) - local dash = translate_border_style(term) - return dash, fend + 1 - end - - local function consume_color(s, start) - local fbeg, fend = s:find('%w+%b()', start) - if not fbeg then - fbeg, fend = s:find('%S+', start) - end - if not fbeg then return nil end - local paint = translate_border_color(s:sub(fbeg, fend)) - return paint, fend + 1 - end - local border_consumers = { - width = consume_width, - style = consume_style, - color = consume_color, + width = _quarto.modules.typst.css.consume_width, + style = _quarto.modules.typst.css.consume_style, + color = _quarto.modules.typst.css.consume_color, } local function handle_border(k, v, borders) local _, ndash = k:gsub('-', '') if ndash == 0 then - local border = translate_border(v) + local border = _quarto.modules.typst.css.translate_border(v, _warnings) for _, side in ipairs(border_sides) do borders[side] = borders[side] or {} for k2, v2 in pairs(border) do @@ -255,13 +145,13 @@ function render_typst_css_property_processing() local part = k:match('^border--(%a+)') if tcontains(border_sides, part) then borders[part] = borders[part] or {} - local border = translate_border(v) + local border = _quarto.modules.typst.css.translate_border(v, _warnings) for k2, v2 in pairs(border) do borders[part][k2] = v2 end elseif tcontains(border_properties, part) then local items = {} - parse_multiple(v, 4, function(s, start) + _quarto.modules.typst.css.parse_multiple(v, 4, function(s, start) local item, newstart = border_consumers[part](s, start) table.insert(items, item) return newstart @@ -304,7 +194,7 @@ function render_typst_css_property_processing() if tcontains(border_sides, side) and tcontains(border_properties, prop) then borders[side] = borders[side] or {} local tr = border_translators[prop] - borders[side][tr.prop] = tr.fn(v) + borders[side][tr.prop] = tr.fn(v, _warnings) else _warnings:insert('invalid 3-item border key ' .. k) end From 833192e39601e718452ab25ddf70613f78789abf Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Wed, 16 Oct 2024 03:19:41 -0400 Subject: [PATCH 3/6] expose _quarto.modules.typst.css.expand_side_shorthand --- .../border/border-width-too-many.qmd | 31 ++++++++++++++++ src/resources/filters/modules/typst_css.lua | 31 ++++++++++++++++ .../typst-css-property-processing.lua | 37 +++++-------------- 3 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-too-many.qmd diff --git a/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-too-many.qmd b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-too-many.qmd new file mode 100644 index 00000000000..5cd5ea5be90 --- /dev/null +++ b/dev-docs/feature-format-matrix/qmd-files/css-properties/border/border-width-too-many.qmd @@ -0,0 +1,31 @@ +--- +format: + html: + quality: -1 + pdf: + quality: na + typst: + quality: -1 + comment: "invalid" + dashboard: + quality: -1 + docx: + quality: na + pptx: + quality: na +keep-typ: true +_quarto: + tests: + typst: + ensureTypstFileRegexMatches: + - + - ' \[A\], \[B\]' + - [] +--- + +```{=html} + + +
AB
+``` + diff --git a/src/resources/filters/modules/typst_css.lua b/src/resources/filters/modules/typst_css.lua index 0af1efd9654..c83d64f1126 100644 --- a/src/resources/filters/modules/typst_css.lua +++ b/src/resources/filters/modules/typst_css.lua @@ -648,6 +648,36 @@ local function consume_color(s, start, warnings) return paint, fend + 1 end +-- the most css thing ever +local function expand_side_shorthand(items, context, warnings) + local sides = {} + if #items == 0 then + output_warning(warnings, 'no valid ' .. context) + elseif #items == 1 then + sides.top = items[1] + sides.right = items[1] + sides.bottom = items[1] + sides.left = items[1] + elseif #items == 2 then + sides.top = items[1] + sides.right = items[2] + sides.bottom = items[1] + sides.left = items[2] + elseif #items == 3 then + sides.top = items[1] + sides.right = items[2] + sides.bottom = items[3] + sides.left = items[2] + elseif #items == 4 then + sides.top = items[1] + sides.right = items[2] + sides.bottom = items[3] + sides.left = items[4] + else + output_warning(warnings, 'too many ' .. context) + end + return sides +end return { parse_color = parse_color, @@ -658,6 +688,7 @@ return { output_length = output_length, translate_length = translate_length, parse_multiple = parse_multiple, + expand_side_shorthand = expand_side_shorthand, translate_border = translate_border, translate_border_width = translate_border_width, translate_border_style = translate_border_style, diff --git a/src/resources/filters/quarto-post/typst-css-property-processing.lua b/src/resources/filters/quarto-post/typst-css-property-processing.lua index bf4fd903498..254151e9e45 100644 --- a/src/resources/filters/quarto-post/typst-css-property-processing.lua +++ b/src/resources/filters/quarto-post/typst-css-property-processing.lua @@ -151,7 +151,8 @@ function render_typst_css_property_processing() end elseif tcontains(border_properties, part) then local items = {} - _quarto.modules.typst.css.parse_multiple(v, 4, function(s, start) + -- one extra only so we can error on it + _quarto.modules.typst.css.parse_multiple(v, 5, function(s, start) local item, newstart = border_consumers[part](s, start) table.insert(items, item) return newstart @@ -160,32 +161,14 @@ function render_typst_css_property_processing() borders[side] = borders[side] or {} end local xlate = border_translators[part] - if #items == 0 then - _warnings:insert('no valid ' .. part .. 's in ' .. v) - -- the most css thing ever - elseif #items == 1 then - borders.top[xlate.prop] = items[1] - borders.right[xlate.prop] = items[1] - borders.bottom[xlate.prop] = items[1] - borders.left[xlate.prop] = items[1] - elseif #items == 2 then - borders.top[xlate.prop] = items[1] - borders.right[xlate.prop] = items[2] - borders.bottom[xlate.prop] = items[1] - borders.left[xlate.prop] = items[2] - elseif #items == 3 then - borders.top[xlate.prop] = items[1] - borders.right[xlate.prop] = items[2] - borders.bottom[xlate.prop] = items[3] - borders.left[xlate.prop] = items[2] - elseif #items == 4 then - borders.top[xlate.prop] = items[1] - borders.right[xlate.prop] = items[2] - borders.bottom[xlate.prop] = items[3] - borders.left[xlate.prop] = items[4] - else - _warnings:insert('too many values in ' .. k .. ' list: ' .. v) - end + local sides = _quarto.modules.typst.css.expand_side_shorthand( + items, + part .. 's in ' .. k .. ' list: ' .. v, + _warnings) + borders.top[xlate.prop] = sides.top + borders.right[xlate.prop] = sides.right + borders.bottom[xlate.prop] = sides.bottom + borders.left[xlate.prop] = sides.left else _warnings:insert('invalid 2-item border key ' .. k) end From a25bd71612abfff5ce552b5d9daa098c2efd1d7e Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Tue, 8 Oct 2024 11:29:17 -0400 Subject: [PATCH 4/6] logo is just string or object in particular, typst logo wants to have padding-left, padding-top, etc --- src/resources/schema/definitions.yml | 24 ------------------- .../schema/document-reveal-content.yml | 4 +++- 2 files changed, 3 insertions(+), 25 deletions(-) diff --git a/src/resources/schema/definitions.yml b/src/resources/schema/definitions.yml index fa5705b408a..9a9f9c455b8 100644 --- a/src/resources/schema/definitions.yml +++ b/src/resources/schema/definitions.yml @@ -2568,30 +2568,6 @@ - id: brand-color-value schema: string -- id: logo-string-layout - description: Source path or source path with layout options for logo - anyOf: - - string - - object: - closed: true - properties: - location: - schema: string - description: > - X-Y positioning of logo - padding: - schema: string - description: > - Padding of logo - width: - schema: string - description: > - Width of logo - src: - schema: path - description: > - Source path of logo - - id: brand-color description: > The brand's custom color palette and theme. diff --git a/src/resources/schema/document-reveal-content.yml b/src/resources/schema/document-reveal-content.yml index 3cb0c25b57b..0cfed2c3898 100644 --- a/src/resources/schema/document-reveal-content.yml +++ b/src/resources/schema/document-reveal-content.yml @@ -2,7 +2,9 @@ tags: formats: [revealjs, typst] schema: - ref: logo-string-layout + anyOf: + - string + - object # typst: location, padding, padding-*, width, source description: "Logo image (placed in bottom right corner of slides)" - name: footer From e54bb27336331faf57c82e19189701e28a861ba2 Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Wed, 16 Oct 2024 04:14:22 -0400 Subject: [PATCH 5/6] padding shorthand for typst logo and individual control of each side's padding --- src/resources/filters/modules/typst.lua | 16 ++++ src/resources/filters/modules/typst_css.lua | 1 + .../filters/quarto-post/typst-brand-yaml.lua | 69 +++++++++++++----- .../typst-css-property-processing.lua | 36 +-------- src/resources/pandoc/datadir/_utils.lua | 19 ++++- .../brand-yaml/logo/padding-xy/_brand.yml | 13 ++++ .../brand-yaml/logo/padding-xy/brand-logo.qmd | 18 +++++ .../brand-yaml/logo/padding-xy/quarto.png | Bin 0 -> 11810 bytes .../typst/brand-yaml/logo/padding/_brand.yml | 13 ++++ .../brand-yaml/logo/padding/brand-logo.qmd | 20 +++++ .../typst/brand-yaml/logo/padding/quarto.png | Bin 0 -> 11810 bytes 11 files changed, 154 insertions(+), 51 deletions(-) create mode 100644 tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/_brand.yml create mode 100644 tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/brand-logo.qmd create mode 100644 tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/quarto.png create mode 100644 tests/docs/smoke-all/typst/brand-yaml/logo/padding/_brand.yml create mode 100644 tests/docs/smoke-all/typst/brand-yaml/logo/padding/brand-logo.qmd create mode 100644 tests/docs/smoke-all/typst/brand-yaml/logo/padding/quarto.png diff --git a/src/resources/filters/modules/typst.lua b/src/resources/filters/modules/typst.lua index 506881d60d6..4f157f290d1 100644 --- a/src/resources/filters/modules/typst.lua +++ b/src/resources/filters/modules/typst.lua @@ -75,10 +75,26 @@ local function _main() return result end end + + local function as_typst_dictionary(tab) + local entries = {} + for k, v in _quarto.utils.table.sortedPairs(tab) do + if type(v) == 'table' then + v = as_typst_dictionary(v) + end + if k and v then + table.insert(entries, k .. ': ' .. v) + end + end + if #entries == 0 then return nil end + return '(' .. table.concat(entries, ', ') .. ')' + end return { function_call = typst_function_call, + sortedPairs = sortedPairs, as_typst_content = as_typst_content, + as_typst_dictionary = as_typst_dictionary, css = require("modules/typst_css") } end diff --git a/src/resources/filters/modules/typst_css.lua b/src/resources/filters/modules/typst_css.lua index c83d64f1126..29a216cbab4 100644 --- a/src/resources/filters/modules/typst_css.lua +++ b/src/resources/filters/modules/typst_css.lua @@ -175,6 +175,7 @@ local typst_named_colors = { green = '#2ecc40', lime = '#01ff70', } + -- css can have fraction or percent -- typst can have int or percent -- what goes for opacity also goes for alpha diff --git a/src/resources/filters/quarto-post/typst-brand-yaml.lua b/src/resources/filters/quarto-post/typst-brand-yaml.lua index 979923a3585..394d82e1859 100644 --- a/src/resources/filters/quarto-post/typst-brand-yaml.lua +++ b/src/resources/filters/quarto-post/typst-brand-yaml.lua @@ -3,26 +3,12 @@ function render_typst_brand_yaml() return {} end - local function sortedPairs(t, f) - local a = {} - for n in pairs(t) do table.insert(a, n) end - table.sort(a, f) - local i = 0 -- iterator variable - local iter = function() -- iterator function - i = i + 1 - if a[i] == nil then return nil - else return a[i], t[a[i]] - end - end - return iter - end - local function to_typst_dict_indent(tab, curr, indent) curr = curr or '' indent = indent or ' ' local entries = {} local inside = curr .. indent - for k, v in sortedPairs(tab) do + for k, v in _quarto.utils.table.sortedPairs(tab) do if type(v) == 'table' then v = to_typst_dict_indent(v, inside, indent) end @@ -243,8 +229,55 @@ function render_typst_brand_yaml() logoOptions.path = foundLogo.dark.path logoOptions.alt = foundLogo.dark.alt end - -- todo: path relative to brand.yaml - logoOptions.padding = _quarto.modules.typst.css.translate_length(logoOptions.padding or '0.5in') + + local pads = {} + for k, v in _quarto.utils.table.sortedPairs(logoOptions) do + if k == 'padding' then + quarto.log.output('foo', k) + local widths = {} + _quarto.modules.typst.css.parse_multiple(v, 5, function(s, start) + local width, newstart = _quarto.modules.typst.css.consume_width(s, start) + table.insert(widths, width) + return newstart + end) + local sides = _quarto.modules.typst.css.expand_side_shorthand( + widths, + 'widths in padding list: ' .. v) + pads.top = sides.top + pads.right = sides.right + pads.bottom = sides.bottom + pads.left = sides.left + elseif k:find '^padding-' then + quarto.log.output('foo', k) + local _, ndash = k:gsub('-', '') + if ndash == 1 then + local side = k:match('^padding--(%a+)') + local padding_sides = {'left', 'top', 'right', 'bottom'} + if tcontains(padding_sides, side) then + pads[side] = _quarto.modules.typst.css.translate_length(v) + else + quarto.log.warning('invalid padding key ' .. k) + end + else + quarto.log.warning('invalid padding key ' .. k) + end + end + end + local inset = nil + if next(pads) then + if pads.top == pads.right and + pads.right == pads.bottom and + pads.bottom == pads.left + then + inset = pads.top + elseif pads.top == pads.bottom and pads.left == pads.right then + inset = _quarto.modules.typst.as_typst_dictionary({x = pads.left, y = pads.top}) + else + inset = _quarto.modules.typst.as_typst_dictionary(pads) + end + else + inset = '0.5in' + end logoOptions.width = _quarto.modules.typst.css.translate_length(logoOptions.width or '2in') logoOptions.location = logoOptions.location and location_to_typst_align(logoOptions.location) or 'left+top' @@ -252,7 +285,7 @@ function render_typst_brand_yaml() local altProp = logoOptions.alt and (', alt: "' .. logoOptions.alt .. '"') or '' local dblbackslash = string.gsub(logoOptions.path, '\\', '\\\\') -- double backslash? quarto.doc.include_text('in-header', - '#set page(background: align(' .. logoOptions.location .. ', box(inset: ' .. logoOptions.padding .. ', image("' .. dblbackslash .. '", width: ' .. logoOptions.width .. altProp .. '))))') + '#set page(background: align(' .. logoOptions.location .. ', box(inset: ' .. inset .. ', image("' .. dblbackslash .. '", width: ' .. logoOptions.width .. altProp .. '))))') end end end, diff --git a/src/resources/filters/quarto-post/typst-css-property-processing.lua b/src/resources/filters/quarto-post/typst-css-property-processing.lua index 254151e9e45..324e30ef299 100644 --- a/src/resources/filters/quarto-post/typst-css-property-processing.lua +++ b/src/resources/filters/quarto-post/typst-css-property-processing.lua @@ -32,20 +32,6 @@ function render_typst_css_property_processing() end end - local function sortedPairs(t, f) - local a = {} - for n in pairs(t) do table.insert(a, n) end - table.sort(a, f) - local i = 0 -- iterator variable - local iter = function() -- iterator function - i = i + 1 - if a[i] == nil then return nil - else return a[i], t[a[i]] - end - end - return iter - end - local function dequote(s) return s:gsub('^["\']', ''):gsub('["\']$', '') end @@ -84,20 +70,6 @@ function render_typst_css_property_processing() return nil end - local function to_typst_dict(tab) - local entries = {} - for k, v in sortedPairs(tab) do - if type(v) == 'table' then - v = to_typst_dict(v) - end - if k and v then - table.insert(entries, k .. ': ' .. v) - end - end - if #entries == 0 then return nil end - return '(' .. table.concat(entries, ', ') .. ')' - end - local border_sides = {'left', 'top', 'right', 'bottom'} local border_properties = {'width', 'style', 'color'} local function all_equal(seq) @@ -228,7 +200,7 @@ function render_typst_css_property_processing() -- inset seems either buggy or hard to get right, see -- https://github.com/quarto-dev/quarto-cli/pull/9387#issuecomment-2076015962 -- if next(paddings) ~= nil then - -- cell.attributes['typst:inset'] = to_typst_dict(paddings) + -- cell.attributes['typst:inset'] = _quarto.modules.typst.as_typst_dictionary(paddings) -- end -- since e.g. the left side of one cell can override the right side of another @@ -259,9 +231,9 @@ function render_typst_css_property_processing() quarto.log.debug('paints', table.unpack(paints)) if all_equal(thicknesses) and all_equal(dashes) and all_equal(paints) then assert(borders.left) - cell.attributes['typst:stroke'] = to_typst_dict(borders.left) + cell.attributes['typst:stroke'] = _quarto.modules.typst.as_typst_dictionary(borders.left) else - cell.attributes['typst:stroke'] = to_typst_dict(borders) + cell.attributes['typst:stroke'] = _quarto.modules.typst.as_typst_dictionary(borders) end end end @@ -291,7 +263,7 @@ function render_typst_css_property_processing() hlprops.fill = 'rgb(0,0,0,0)' end return pandoc.Inlines({ - pandoc.RawInline('typst', '#highlight' .. to_typst_dict(hlprops) .. '['), + pandoc.RawInline('typst', '#highlight' .. _quarto.modules.typst.as_typst_dictionary(hlprops) .. '['), span, pandoc.RawInline('typst', ']') }) diff --git a/src/resources/pandoc/datadir/_utils.lua b/src/resources/pandoc/datadir/_utils.lua index e48c5e5eba7..e2d986646e2 100644 --- a/src/resources/pandoc/datadir/_utils.lua +++ b/src/resources/pandoc/datadir/_utils.lua @@ -235,6 +235,22 @@ local function tcontains(t, value) return false end + +local function sortedPairs(t, f) + local a = {} + for n in pairs(t) do table.insert(a, n) end + table.sort(a, f) + local i = 0 -- iterator variable + local iter = function() -- iterator function + i = i + 1 + if a[i] == nil then return nil + else return a[i], t[a[i]] + end + end + return iter +end + + local function get_type(v) local pandoc_type = pandoc.utils.type(v) if pandoc_type == "Inline" then @@ -546,7 +562,8 @@ return { type = get_type, table = { isarray = tisarray, - contains = tcontains + contains = tcontains, + sortedPairs = sortedPairs }, as_inlines = as_inlines, as_blocks = as_blocks, diff --git a/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/_brand.yml b/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/_brand.yml new file mode 100644 index 00000000000..20a0a3456eb --- /dev/null +++ b/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/_brand.yml @@ -0,0 +1,13 @@ +logo: + images: + large-light: quarto.png + large: large-light +defaults: + quarto: + format: + typst: + logo: + src: large + location: center-top + width: 300px + padding: 1in diff --git a/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/brand-logo.qmd b/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/brand-logo.qmd new file mode 100644 index 00000000000..46c8abf1b38 --- /dev/null +++ b/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/brand-logo.qmd @@ -0,0 +1,18 @@ +--- +title: logo background +format: + typst: + keep-typ: true +logo: + padding: 1in 2in +_quarto: + tests: + typst: + ensureTypstFileRegexMatches: + - + - '#set page\(background: align\(center\+top, box\(inset: \(x: 2in, y: 1\in\), image\("quarto.png", width: 225pt\)\)\)\)' + - [] +--- + +{{< lipsum 4 >}} + diff --git a/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/quarto.png b/tests/docs/smoke-all/typst/brand-yaml/logo/padding-xy/quarto.png new file mode 100644 index 0000000000000000000000000000000000000000..616d17b92cb7f142afa346bb27bb505ad26ae908 GIT binary patch literal 11810 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

2y z6(;TAA{R3KcB}wRG4H+QOr+t_LDvIpzj{dzWRSqu(GVmF@Gyj(#fcO)#^Uq(zK>nE zX|dg_q14B;je3ywKyQfUbDPWB4V6Lp$@C*8X|$stF9e7XH=iEp6wBP;v$|J|XEn;j zM3FY}4GBuJ?Hsc`gXA7%?hS2jpeXv}+05HO^FLYsyamDkBB!z=p!n5aH-aY2G;ZG5 zG6)fmM0#BO5%1W^+v#iMn3LnTfCRuxtoUjIQxv1jsdlE=!oZq7;Je04}os{ynlWxjdcZl0%-!;RP>(LvRONf-1}wD4d>A!%64tG>iWsj+WRum0{XrgG8MLI z(c^ck)6M_k%@E=5P-i(7hy*D-IPT1JDmx}X>UaI z10VvJTvm1Gw<^^(bKngP1#c^D-1fI&msaJcPTpT~h~wtP5F0v3TtGgFwDu|fqjj=B oA4&gkm;JGV|Cgq2w0sl##jV&$be9bIfW84T5{lwgqK1M02Ttn$=Kufz literal 0 HcmV?d00001 diff --git a/tests/docs/smoke-all/typst/brand-yaml/logo/padding/_brand.yml b/tests/docs/smoke-all/typst/brand-yaml/logo/padding/_brand.yml new file mode 100644 index 00000000000..20a0a3456eb --- /dev/null +++ b/tests/docs/smoke-all/typst/brand-yaml/logo/padding/_brand.yml @@ -0,0 +1,13 @@ +logo: + images: + large-light: quarto.png + large: large-light +defaults: + quarto: + format: + typst: + logo: + src: large + location: center-top + width: 300px + padding: 1in diff --git a/tests/docs/smoke-all/typst/brand-yaml/logo/padding/brand-logo.qmd b/tests/docs/smoke-all/typst/brand-yaml/logo/padding/brand-logo.qmd new file mode 100644 index 00000000000..8db14e3bdd0 --- /dev/null +++ b/tests/docs/smoke-all/typst/brand-yaml/logo/padding/brand-logo.qmd @@ -0,0 +1,20 @@ +--- +title: logo background +format: + typst: + keep-typ: true +logo: + padding-left: 4pt + padding: 9pt 2pt 3pt 17pt + padding-top: 1pt +_quarto: + tests: + typst: + ensureTypstFileRegexMatches: + - + - '#set page\(background: align\(center\+top, box\(inset: \(bottom: 3pt, left: 4pt, right: 2pt, top: 1pt\), image\("quarto.png", width: 225pt\)\)\)\)' + - [] +--- + +{{< lipsum 4 >}} + diff --git a/tests/docs/smoke-all/typst/brand-yaml/logo/padding/quarto.png b/tests/docs/smoke-all/typst/brand-yaml/logo/padding/quarto.png new file mode 100644 index 0000000000000000000000000000000000000000..616d17b92cb7f142afa346bb27bb505ad26ae908 GIT binary patch literal 11810 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

2y z6(;TAA{R3KcB}wRG4H+QOr+t_LDvIpzj{dzWRSqu(GVmF@Gyj(#fcO)#^Uq(zK>nE zX|dg_q14B;je3ywKyQfUbDPWB4V6Lp$@C*8X|$stF9e7XH=iEp6wBP;v$|J|XEn;j zM3FY}4GBuJ?Hsc`gXA7%?hS2jpeXv}+05HO^FLYsyamDkBB!z=p!n5aH-aY2G;ZG5 zG6)fmM0#BO5%1W^+v#iMn3LnTfCRuxtoUjIQxv1jsdlE=!oZq7;Je04}os{ynlWxjdcZl0%-!;RP>(LvRONf-1}wD4d>A!%64tG>iWsj+WRum0{XrgG8MLI z(c^ck)6M_k%@E=5P-i(7hy*D-IPT1JDmx}X>UaI z10VvJTvm1Gw<^^(bKngP1#c^D-1fI&msaJcPTpT~h~wtP5F0v3TtGgFwDu|fqjj=B oA4&gkm;JGV|Cgq2w0sl##jV&$be9bIfW84T5{lwgqK1M02Ttn$=Kufz literal 0 HcmV?d00001 From b2fc83ed9f1b617aed1b888fc295040535731cc7 Mon Sep 17 00:00:00 2001 From: Gordon Woodhull Date: Wed, 16 Oct 2024 15:05:51 -0400 Subject: [PATCH 6/6] artifacts --- src/resources/editor/tools/vs-code.mjs | 41 ++++--------------- src/resources/editor/tools/yaml/web-worker.js | 41 ++++--------------- .../yaml/yaml-intelligence-resources.json | 41 ++++--------------- src/resources/schema/json-schemas.json | 25 ----------- src/resources/types/schema-types.ts | 7 ---- 5 files changed, 21 insertions(+), 134 deletions(-) diff --git a/src/resources/editor/tools/vs-code.mjs b/src/resources/editor/tools/vs-code.mjs index b020cd377aa..69e48a165d0 100644 --- a/src/resources/editor/tools/vs-code.mjs +++ b/src/resources/editor/tools/vs-code.mjs @@ -11955,36 +11955,6 @@ var require_yaml_intelligence_resources = __commonJS({ id: "brand-color-value", schema: "string" }, - { - id: "logo-string-layout", - description: "Source path or source path with layout options for logo", - anyOf: [ - "string", - { - object: { - closed: true, - properties: { - location: { - schema: "string", - description: "X-Y positioning of logo\n" - }, - padding: { - schema: "string", - description: "Padding of logo\n" - }, - width: { - schema: "string", - description: "Width of logo\n" - }, - src: { - schema: "path", - description: "Source path of logo\n" - } - } - } - } - ] - }, { id: "brand-color", description: "The brand's custom color palette and theme.\n", @@ -17677,7 +17647,10 @@ var require_yaml_intelligence_resources = __commonJS({ ] }, schema: { - ref: "logo-string-layout" + anyOf: [ + "string", + "object" + ] }, description: "Logo image (placed in bottom right corner of slides)" }, @@ -24150,12 +24123,12 @@ var require_yaml_intelligence_resources = __commonJS({ mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 192356, + _internalId: 192336, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 192348, + _internalId: 192328, type: "enum", enum: [ "png", @@ -24171,7 +24144,7 @@ var require_yaml_intelligence_resources = __commonJS({ exhaustiveCompletions: true }, theme: { - _internalId: 192355, + _internalId: 192335, type: "anyOf", anyOf: [ { diff --git a/src/resources/editor/tools/yaml/web-worker.js b/src/resources/editor/tools/yaml/web-worker.js index f1e51dd5ded..d8a034e1621 100644 --- a/src/resources/editor/tools/yaml/web-worker.js +++ b/src/resources/editor/tools/yaml/web-worker.js @@ -11956,36 +11956,6 @@ try { id: "brand-color-value", schema: "string" }, - { - id: "logo-string-layout", - description: "Source path or source path with layout options for logo", - anyOf: [ - "string", - { - object: { - closed: true, - properties: { - location: { - schema: "string", - description: "X-Y positioning of logo\n" - }, - padding: { - schema: "string", - description: "Padding of logo\n" - }, - width: { - schema: "string", - description: "Width of logo\n" - }, - src: { - schema: "path", - description: "Source path of logo\n" - } - } - } - } - ] - }, { id: "brand-color", description: "The brand's custom color palette and theme.\n", @@ -17678,7 +17648,10 @@ try { ] }, schema: { - ref: "logo-string-layout" + anyOf: [ + "string", + "object" + ] }, description: "Logo image (placed in bottom right corner of slides)" }, @@ -24151,12 +24124,12 @@ try { mermaid: "%%" }, "handlers/mermaid/schema.yml": { - _internalId: 192356, + _internalId: 192336, type: "object", description: "be an object", properties: { "mermaid-format": { - _internalId: 192348, + _internalId: 192328, type: "enum", enum: [ "png", @@ -24172,7 +24145,7 @@ try { exhaustiveCompletions: true }, theme: { - _internalId: 192355, + _internalId: 192335, type: "anyOf", anyOf: [ { diff --git a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json index 6d69cf755ba..4473adb75b3 100644 --- a/src/resources/editor/tools/yaml/yaml-intelligence-resources.json +++ b/src/resources/editor/tools/yaml/yaml-intelligence-resources.json @@ -4927,36 +4927,6 @@ "id": "brand-color-value", "schema": "string" }, - { - "id": "logo-string-layout", - "description": "Source path or source path with layout options for logo", - "anyOf": [ - "string", - { - "object": { - "closed": true, - "properties": { - "location": { - "schema": "string", - "description": "X-Y positioning of logo\n" - }, - "padding": { - "schema": "string", - "description": "Padding of logo\n" - }, - "width": { - "schema": "string", - "description": "Width of logo\n" - }, - "src": { - "schema": "path", - "description": "Source path of logo\n" - } - } - } - } - ] - }, { "id": "brand-color", "description": "The brand's custom color palette and theme.\n", @@ -10649,7 +10619,10 @@ ] }, "schema": { - "ref": "logo-string-layout" + "anyOf": [ + "string", + "object" + ] }, "description": "Logo image (placed in bottom right corner of slides)" }, @@ -17122,12 +17095,12 @@ "mermaid": "%%" }, "handlers/mermaid/schema.yml": { - "_internalId": 192356, + "_internalId": 192336, "type": "object", "description": "be an object", "properties": { "mermaid-format": { - "_internalId": 192348, + "_internalId": 192328, "type": "enum", "enum": [ "png", @@ -17143,7 +17116,7 @@ "exhaustiveCompletions": true }, "theme": { - "_internalId": 192355, + "_internalId": 192335, "type": "anyOf", "anyOf": [ { diff --git a/src/resources/schema/json-schemas.json b/src/resources/schema/json-schemas.json index 7c895d22d83..9542a2f5060 100644 --- a/src/resources/schema/json-schemas.json +++ b/src/resources/schema/json-schemas.json @@ -3295,31 +3295,6 @@ "BrandColorValue": { "type": "string" }, - "LogoStringLayout": { - "anyOf": [ - { - "type": "string" - }, - { - "object": { - "properties": { - "location": { - "type": "string" - }, - "padding": { - "type": "string" - }, - "width": { - "type": "string" - }, - "src": { - "type": "string" - } - } - } - } - ] - }, "BrandColor": { "object": { "properties": { diff --git a/src/resources/types/schema-types.ts b/src/resources/types/schema-types.ts index 4c215554dff..c31339ebf4c 100644 --- a/src/resources/types/schema-types.ts +++ b/src/resources/types/schema-types.ts @@ -1301,13 +1301,6 @@ export type BrandNamedLogo = export type BrandColorValue = string; -export type LogoStringLayout = string | { - location?: string; - padding?: string; - src?: string; - width?: string; -}; /* Source path or source path with layout options for logo */ - export type BrandColor = { background?: BrandColorValue; danger?: BrandColorValue;