From 93d30f5315aba02b0846d70185638fa65ca6960e Mon Sep 17 00:00:00 2001 From: "Wode \"Nimo\" Ni" Date: Fri, 2 Jun 2023 14:19:50 -0400 Subject: [PATCH] feat: accurate `Equation` measurements (#1445) --- README.md | 2 +- docs/assets/output.svg | 224 +++++++----------- .../src/compiler/shapeChecker/CheckShape.ts | 8 + packages/core/src/engine/EngineUtils.ts | 2 + packages/core/src/overall.test.ts | 6 +- packages/core/src/shapes/Equation.ts | 20 +- packages/core/src/types/state.ts | 2 + packages/core/src/utils/CollectLabels.ts | 117 ++++++--- .../exterior-algebra/exterior-algebra.style | 2 +- .../geometry-domain/euclidean-teaser.style | 2 +- .../src/geometry-domain/euclidean.style | 2 +- .../src/group-theory/CayleyGraph.style | 2 +- .../group-theory/MultiplicationTable.style | 14 +- .../src/lagrange-bases/lagrange-bases.style | 2 +- .../lagrange-bases/lagrange-bases.trio.json | 2 +- .../examples/src/matrix-ops/matrix-ops.style | 2 +- packages/examples/src/mobius/mobius.style | 4 +- packages/examples/src/molecules/lewis.style | 2 +- .../persistent-homology.style | 16 +- .../src/ray-tracing/ray-tracing.style | 2 +- .../examples/src/set-theory-domain/venn.style | 2 +- .../src/shape-distance/rect-line-dist.style | 2 +- packages/examples/src/timeline/timeline.style | 4 +- .../triangle-mesh-2d/triangle-mesh-2d.style | 2 +- .../triangle-mesh-3d/triangle-mesh-3d.style | 2 +- yarn.lock | 30 +-- 26 files changed, 259 insertions(+), 216 deletions(-) diff --git a/README.md b/README.md index f01d8ea181..9a74b96d2f 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ It's specified by the following trio of Domain, Substance, and Style programs x.text = Equation { string : x.label - fontSize : "25px" + fontSize : "32px" } ensure contains(x.icon, x.text) diff --git a/docs/assets/output.svg b/docs/assets/output.svg index 83b4089712..e17a55b471 100644 --- a/docs/assets/output.svg +++ b/docs/assets/output.svg @@ -2,35 +2,35 @@ `A`.icon `C`.icon `C`.text - - - - - - - - + + @@ -59,25 +53,25 @@ `B`.icon `B`.text - - - - - - - - + + @@ -106,25 +94,25 @@ `F`.icon `F`.text - - - - - - - - + + @@ -153,25 +135,25 @@ `D`.icon `D`.text - - - - - - - - + + @@ -200,25 +176,25 @@ `E`.icon `E`.text - - - - - - - - + + `A`.text - - - - - - - - + + @@ -284,25 +248,25 @@ `G`.icon `G`.text - - - - - - - - + + diff --git a/packages/core/src/compiler/shapeChecker/CheckShape.ts b/packages/core/src/compiler/shapeChecker/CheckShape.ts index 33a7685b01..6a764f46bf 100644 --- a/packages/core/src/compiler/shapeChecker/CheckShape.ts +++ b/packages/core/src/compiler/shapeChecker/CheckShape.ts @@ -161,6 +161,12 @@ export const checkEquation = ( const string = checkString(path, trans); if (string.isErr()) return err(string.error); + const ascent = checkProp(path, "ascent", trans, checkFloatV); + if (ascent.isErr()) return err(ascent.error); + + const descent = checkProp(path, "descent", trans, checkFloatV); + if (descent.isErr()) return err(descent.error); + return ok({ ...named.value, ...fill.value, @@ -168,6 +174,8 @@ export const checkEquation = ( ...rect.value, ...rotate.value, ...string.value, + ascent: ascent.value, + descent: descent.value, passthrough: new Map(), shapeType: "Equation", }); diff --git a/packages/core/src/engine/EngineUtils.ts b/packages/core/src/engine/EngineUtils.ts index 96ab8ed4e2..e07f7db397 100644 --- a/packages/core/src/engine/EngineUtils.ts +++ b/packages/core/src/engine/EngineUtils.ts @@ -249,6 +249,8 @@ const mapEquation = (f: (arg: T) => S, v: Equation): Equation => { ...mapRect(f, v), ...mapRotate(f, v), ...mapString(f, v), + ascent: mapFloat(f, v.ascent), + descent: mapFloat(f, v.descent), passthrough: mapPassthrough(f, v.passthrough), }; }; diff --git a/packages/core/src/overall.test.ts b/packages/core/src/overall.test.ts index a80ba65bac..a1f7df2d92 100644 --- a/packages/core/src/overall.test.ts +++ b/packages/core/src/overall.test.ts @@ -232,20 +232,20 @@ describe("Energy API", () => { describe("Cross-instance energy eval", () => { test("correct - subsets", async () => { - const twosets = `Set A, B\nAutoLabel All`; + const twosets = `Set A, B\nNot(Intersecting(A, B))\nAutoLabel All`; const twoSubsets = `Set A, B\nIsSubset(B, A)\nAutoLabel All`; // compile and optimize both states const state1 = await compileTrio({ substance: twosets, style: vennStyle, domain: setDomain, - variation: "cross-instance state1", + variation: "cross-instance state0", }); const state2 = await compileTrio({ substance: twoSubsets, style: vennStyle, domain: setDomain, - variation: "cross-instance state2", + variation: "cross-instance state1", }); if (state1.isOk() && state2.isOk()) { const state1Done = stepUntilConvergence(await prepareState(state1.value)); diff --git a/packages/core/src/shapes/Equation.ts b/packages/core/src/shapes/Equation.ts index 3107f84884..f7c6868049 100644 --- a/packages/core/src/shapes/Equation.ts +++ b/packages/core/src/shapes/Equation.ts @@ -1,3 +1,4 @@ +import { FloatV } from "src/types/value.js"; import * as ad from "../types/ad.js"; import { Center, @@ -17,7 +18,10 @@ export interface EquationProps Center, Rect, Rotate, - String {} + String { + ascent: FloatV; + descent: FloatV; +} export const sampleEquation = ( context: Context, @@ -48,9 +52,21 @@ export const sampleEquation = ( stages: new Set(), }) ), + descent: floatV( + context.makeInput({ + init: { tag: "Pending", pending: 0 }, + stages: new Set(), + }) + ), + ascent: floatV( + context.makeInput({ + init: { tag: "Pending", pending: 0 }, + stages: new Set(), + }) + ), rotation: floatV(0), string: strV("defaultLabelText"), - fontSize: strV("12pt"), + fontSize: strV("16px"), ensureOnCanvas: boolV(true), }); diff --git a/packages/core/src/types/state.ts b/packages/core/src/types/state.ts index ac1743efc0..cb1cb7368e 100644 --- a/packages/core/src/types/state.ts +++ b/packages/core/src/types/state.ts @@ -49,6 +49,8 @@ export interface EquationData { tag: "EquationData"; width: FloatV; height: FloatV; + descent: FloatV; + ascent: FloatV; rendered: HTMLElement; } diff --git a/packages/core/src/utils/CollectLabels.ts b/packages/core/src/utils/CollectLabels.ts index 061d0cd02a..68956d3b2f 100644 --- a/packages/core/src/utils/CollectLabels.ts +++ b/packages/core/src/utils/CollectLabels.ts @@ -15,12 +15,8 @@ import { FloatV } from "../types/value.js"; import { Result, err, ok } from "./Error.js"; import { getAdValueAsString, getValueAsShapeList, safe } from "./Util.js"; -// to re-scale baseline -const EX_CONSTANT = 10; - export const mathjaxInit = (): (( - input: string, - fontSize: string + input: string ) => Result) => { // https://github.com/mathjax/MathJax-demos-node/blob/master/direct/tex2svg // const adaptor = chooseAdaptor(); @@ -44,20 +40,14 @@ export const mathjaxInit = (): (( const svg = new SVG({ fontCache: "none" }); const html = mathjax.document("", { InputJax: tex, OutputJax: svg }); - const convert = ( - input: string, - fontSize: string - ): Result => { - // HACK: workaround for newlines + const convert = (input: string): Result => { + // HACK: workaround for newlines. This workaround will force MathJax to always return the same heights regardless of the text content. // https://github.com/mathjax/MathJax/issues/2312#issuecomment-538185951 - const newline_escaped = `\\displaylines{${input}}`; - // https://github.com/mathjax/MathJax-src/blob/master/ts/core/MathDocument.ts#L689 - // https://github.com/mathjax/MathJax-demos-node/issues/3#issuecomment-497524041 + // if(input) { + // const newline_escaped = `\\displaylines{${input}}`; + // } try { - const node = html.convert(newline_escaped, { ex: EX_CONSTANT }); - // Not sure if this call does anything: - // https://github.com/mathjax/MathJax-src/blob/master/ts/adaptors/liteAdaptor.ts#L523 - adaptor.setStyle(node, "font-size", fontSize); + const node = html.convert(input, {}); return ok(node.firstChild); } catch (error: any) { return err(error.message); @@ -70,6 +60,35 @@ type Output = { body: HTMLElement; width: number; height: number; + descent: number; + ascent: number; +}; + +const parseFontSize = ( + fontSize: string +): { number: number; unit: string } | undefined => { + const regex = /^(\d+(?:\.\d+)?)\s*(px|in|cm|mm)$/; + const match = fontSize.match(regex); + + if (!match) { + return; + } + + const number = parseFloat(match[1]); + const unit = match[2]; + + return { number, unit }; +}; + +// Convert from a font size in absolute unit (px, in, cm, mm) to pixels +const toPxFontSize = (number: number, unit: string): number => { + const inPX: { [unit: string]: number } = { + px: 1, + in: 96, // 96 px to an inch + cm: 96 / 2.54, // 2.54 cm to an inch + mm: 96 / 25.4, // 10 mm to a cm + }; + return inPX[unit] * number; }; /** @@ -77,7 +96,7 @@ type Output = { */ const tex2svg = async ( properties: Equation, - convert: (input: string, fontSize: string) => Result + convert: (input: string) => Result ): Promise> => new Promise((resolve) => { const contents = getAdValueAsString(properties.string, ""); @@ -93,30 +112,60 @@ const tex2svg = async ( } // Render the label - const output = convert(contents, fontSize); + const output = convert(contents); if (output.isErr()) { resolve(err(`MathJax could not render $${contents}$: ${output.error}`)); return; } + const body = output.value; + const viewBox = body.getAttribute("viewBox"); if (viewBox === null) { resolve(err(`No ViewBox found for MathJax output $${contents}$`)); return; } - // Get the rendered viewBox dimensions - const viewBoxArr = viewBox.split(" "); - const width = parseFloat(viewBoxArr[2]); - const height = parseFloat(viewBoxArr[3]); - // Get re-scaled dimensions of label according to // https://github.com/mathjax/MathJax-src/blob/32213009962a887e262d9930adcfb468da4967ce/ts/output/svg.ts#L248 - const vAlignFloat = parseFloat(body.style.verticalAlign) * EX_CONSTANT; - const constHeight = parseFloat(fontSize) - vAlignFloat; - const scaledWidth = (constHeight / height) * width; + // all viewbox units are divided by 1000 because MathJax scaled them by 1000 + // these viewbox props are in em units * 1000 + const viewBoxArr = viewBox.split(" "); + const width = parseFloat(viewBoxArr[2]) / 1000; + const height = parseFloat(viewBoxArr[3]) / 1000; + + // the vertical align adjustment and height in ex unit. This is used to avoid dealing with ex to px conversion + const d = -parseFloat(body.style.verticalAlign); + const exH = parseFloat(body.getAttribute("height")!); - resolve(ok({ body, width: scaledWidth, height: constHeight })); + // em is really the pixel value of the font size + const parsedFontSize = parseFontSize(fontSize); + if (parsedFontSize) { + const { number, unit } = parsedFontSize; + const em_to_px = (n: number) => n * toPxFontSize(number, unit); + const scaledWidth = em_to_px(width); + const scaledHeight = em_to_px(height); + const scaledD = (d / exH) * scaledHeight; + const scaledDescent = scaledD; + const scaledAscent = scaledHeight - scaledDescent; // HACK: interpreting ascent to be height - descent, which might be very wrong + + resolve( + ok({ + body, + width: scaledWidth, + height: scaledHeight, + descent: scaledDescent, + ascent: scaledAscent, + }) + ); + } else { + resolve( + err( + 'Invalid font size format. Only "px", "in", "cm", and "mm" units are supported.' + ) + ); + return; + } }); const floatV = (contents: number): FloatV => ({ @@ -140,11 +189,15 @@ const textData = ( const equationData = ( width: number, height: number, + ascent: number, + descent: number, rendered: HTMLElement ): EquationData => ({ tag: "EquationData", width: floatV(width), height: floatV(height), + ascent: floatV(ascent), + descent: floatV(descent), rendered, }); @@ -183,7 +236,7 @@ export const toFontRule = (properties: Text): string => { // https://stackoverflow.com/a/44564236 export const collectLabels = async ( allShapes: Shape[], - convert: (input: string, fontSize: string) => Result + convert: (input: string) => Result ): Promise> => { const labels: LabelCache = new Map(); for (const s of allShapes) { @@ -199,13 +252,15 @@ export const collectLabels = async ( }); } - const { body, width, height } = svg.value; + const { body, width, height, ascent, descent } = svg.value; // Instead of directly overwriting the properties, cache them temporarily // NOTE: in the case of empty strings, `tex2svg` returns infinity sometimes. Convert to 0 to avoid NaNs in such cases. const label: EquationData = equationData( width === Infinity ? 0 : width, height === Infinity ? 0 : height, + ascent, + descent, body ); labels.set(shapeName, label); @@ -319,6 +374,8 @@ const insertPendingHelper = ( ); setPendingProperty(xs, inputs, s.width, labelData.width); setPendingProperty(xs, inputs, s.height, labelData.height); + setPendingProperty(xs, inputs, s.ascent, labelData.ascent); + setPendingProperty(xs, inputs, s.descent, labelData.descent); } else if (s.shapeType === "Text") { const labelData = safe(labelCache.get(s.name.contents), "missing label"); if (labelData.tag !== "TextData") diff --git a/packages/examples/src/exterior-algebra/exterior-algebra.style b/packages/examples/src/exterior-algebra/exterior-algebra.style index 74fd593542..88c3f26dbb 100644 --- a/packages/examples/src/exterior-algebra/exterior-algebra.style +++ b/packages/examples/src/exterior-algebra/exterior-algebra.style @@ -26,7 +26,7 @@ Global { -- some additional parameters to get consistent styling throughout scalar lineThickness = 1.5 - scalar fontSize = "4.5px" + scalar fontSize = "9px" string fontFamily = "Linux Libertine" } diff --git a/packages/examples/src/geometry-domain/euclidean-teaser.style b/packages/examples/src/geometry-domain/euclidean-teaser.style index abb221b34b..4837b5946b 100644 --- a/packages/examples/src/geometry-domain/euclidean-teaser.style +++ b/packages/examples/src/geometry-domain/euclidean-teaser.style @@ -27,7 +27,7 @@ const { textPadding2 = 25.0 repelWeight = 0.7 -- TODO: Reverted from 0.0 repelWeight2 = 0.5 - fontSize = "22pt" + fontSize = "25px" containPadding = 50.0 rayLength = 100.0 pointRadius = 4.0 diff --git a/packages/examples/src/geometry-domain/euclidean.style b/packages/examples/src/geometry-domain/euclidean.style index 1be04b7727..28cb3d74a4 100644 --- a/packages/examples/src/geometry-domain/euclidean.style +++ b/packages/examples/src/geometry-domain/euclidean.style @@ -22,7 +22,7 @@ const { textPadding2 = 25.0 repelWeight = 0.7 -- TODO: Reverted from 0.0 repelWeight2 = 0.5 - fontSize = "13.5px" + fontSize = "20px" containPadding = 50.0 rayLength = 100.0 pointRadius = 4.0 diff --git a/packages/examples/src/group-theory/CayleyGraph.style b/packages/examples/src/group-theory/CayleyGraph.style index e31cd7c425..fd193f8a1d 100644 --- a/packages/examples/src/group-theory/CayleyGraph.style +++ b/packages/examples/src/group-theory/CayleyGraph.style @@ -40,7 +40,7 @@ forall Element g shape g.labelText = Equation { string: g.label center: g.icon.center - fontSize: "0.35px" + fontSize: "5px" fillColor: colors.darkGray } } diff --git a/packages/examples/src/group-theory/MultiplicationTable.style b/packages/examples/src/group-theory/MultiplicationTable.style index 1ba3025684..31cc3a1207 100644 --- a/packages/examples/src/group-theory/MultiplicationTable.style +++ b/packages/examples/src/group-theory/MultiplicationTable.style @@ -64,14 +64,14 @@ forall Element g shape g.rowLabel = Equation { string: g.label center: (-global.tableWidth/2, g.v ) - fontSize: "2.5px" + fontSize: "8px" fillColor: colors.darkGray } shape g.colLabel = Equation { string: g.label center: (g.u, global.tableHeight/2) - fontSize: "2.5px" + fontSize: "8px" fillColor: colors.darkGray } } @@ -99,7 +99,7 @@ where IsProduct( a, b, c ) shape productText = Equation { string: a.label center: productShape.center - fontSize: "2.5px" + fontSize: "8px" fillColor: a.labelColor } } @@ -120,7 +120,7 @@ where IsProduct( a, e, a ) shape productText = Equation { string: a.label center: productShape.center - fontSize: "2.5px" + fontSize: "8px" fillColor: a.labelColor } } @@ -141,7 +141,7 @@ where IsProduct( a, a, e ) shape productText = Equation { string: a.label center: productShape.center - fontSize: "2.5px" + fontSize: "8px" fillColor: a.labelColor } } @@ -162,7 +162,7 @@ where IsProduct( a, b, b ) shape productText = Equation { string: a.label center: productShape.center - fontSize: "2.5px" + fontSize: "8px" fillColor: a.labelColor } } @@ -183,7 +183,7 @@ where IsProduct( e, e, e ) shape productText = Equation { string: e.label center: productShape.center - fontSize: "2.5px" + fontSize: "8px" fillColor: e.labelColor } } diff --git a/packages/examples/src/lagrange-bases/lagrange-bases.style b/packages/examples/src/lagrange-bases/lagrange-bases.style index f8f8f2a83a..d6bf206068 100644 --- a/packages/examples/src/lagrange-bases/lagrange-bases.style +++ b/packages/examples/src/lagrange-bases/lagrange-bases.style @@ -16,7 +16,7 @@ Global { scalar dotSize = 2.5 scalar smallDotSize = 2. scalar edgeWidth = 1.5 - string labelSize = "6." + string labelSize = "10px" } Colors { diff --git a/packages/examples/src/lagrange-bases/lagrange-bases.trio.json b/packages/examples/src/lagrange-bases/lagrange-bases.trio.json index 7ba37d4116..150564360d 100644 --- a/packages/examples/src/lagrange-bases/lagrange-bases.trio.json +++ b/packages/examples/src/lagrange-bases/lagrange-bases.trio.json @@ -2,5 +2,5 @@ "substance": "./example.substance", "style": ["./lagrange-bases.style"], "domain": "./lagrange-bases.domain", - "variation": "RainmakerMarten88256" + "variation": "CadaverousJaguar540" } diff --git a/packages/examples/src/matrix-ops/matrix-ops.style b/packages/examples/src/matrix-ops/matrix-ops.style index d13100565a..26a7a49d47 100644 --- a/packages/examples/src/matrix-ops/matrix-ops.style +++ b/packages/examples/src/matrix-ops/matrix-ops.style @@ -5,7 +5,7 @@ canvas { global { scalar scale = 18.0 - string labelSize = "7px" + string labelSize = "10px" shape box = Rectangle { center: (0,0) diff --git a/packages/examples/src/mobius/mobius.style b/packages/examples/src/mobius/mobius.style index aa7c44d300..dad407136c 100644 --- a/packages/examples/src/mobius/mobius.style +++ b/packages/examples/src/mobius/mobius.style @@ -7,7 +7,7 @@ forall Shape s { shape s.eq = Equation { center: s.center string: s.label - fontSize: "15" + fontSize: "15px" } } @@ -29,7 +29,7 @@ forall Center c { } shape c.eq = Equation { string: c.label - fontSize: "15" + fontSize: "15px" } ensure lessThan(100, c.r) ensure touching(c.eq, c.circle, 5) diff --git a/packages/examples/src/molecules/lewis.style b/packages/examples/src/molecules/lewis.style index a4dbfa038e..e3d3d41b24 100644 --- a/packages/examples/src/molecules/lewis.style +++ b/packages/examples/src/molecules/lewis.style @@ -601,7 +601,7 @@ forall Atom x { rotation : 0.0 center : x.icon.center fillColor: #000 - fontSize: "15pt" + fontSize: "20px" } x.layering = x.text above x.icon } diff --git a/packages/examples/src/persistent-homology/persistent-homology.style b/packages/examples/src/persistent-homology/persistent-homology.style index 7220d8a187..859f9ec002 100644 --- a/packages/examples/src/persistent-homology/persistent-homology.style +++ b/packages/examples/src/persistent-homology/persistent-homology.style @@ -52,49 +52,49 @@ forall Frames f { f.eps0 = Equation { string: "0" center: (f.dot0.center[0] - 20, f.dot0.center[1]) - fontSize: "24p" + fontSize: "30px" } f.eps = Equation { string: "\varepsilon" center: (1.5 * f.d + 20, f.dot0.center[1]) - fontSize: "24p" + fontSize: "30px" } f.eps1 = Equation { string: "\varepsilon_1" center: (f.dot1.center[0] + 20, f.dot1.center[1] - 20) fillColor: rgba(0.1, 0.3, 0.1, 0.8) - fontSize: "24p" + fontSize: "30px" } f.eps2 = Equation { string: "\varepsilon_2" center: (f.dot2.center[0] + 20, f.dot2.center[1] - 20) fillColor: rgba(0.5, 0.1, 0.1, 0.8) - fontSize: "24p" + fontSize: "30px" } f.eps3 = Equation { string: "\varepsilon_3" center: (f.dot3.center[0] + 20, f.dot3.center[1] - 20) fillColor: rgba(0.1, 0.1, 0.5, 0.8) - fontSize: "24p" + fontSize: "30px" } f.lab1 = Equation { string: "X \oplus B_{\varepsilon_{1}}" fillColor: rgba(0.1, 0.3, 0.1, 0.8) center: (f.dot1.center[0], f.ylab) - fontSize: "24p" + fontSize: "30px" } f.lab2 = Equation { string: "X \oplus B_{\varepsilon_{2}}" fillColor: rgba(0.5, 0.1, 0.1, 0.8) center: (f.dot2.center[0], f.ylab) - fontSize: "24p" + fontSize: "30px" } f.lab3 = Equation { string: "X \oplus B_{\varepsilon_{3}}" fillColor: rgba(0.1, 0.1, 0.5, 0.8) center: (f.dot3.center[0], f.ylab) - fontSize: "24p" + fontSize: "30px" } } diff --git a/packages/examples/src/ray-tracing/ray-tracing.style b/packages/examples/src/ray-tracing/ray-tracing.style index ce80c89d2a..25710ffb38 100644 --- a/packages/examples/src/ray-tracing/ray-tracing.style +++ b/packages/examples/src/ray-tracing/ray-tracing.style @@ -129,7 +129,7 @@ where p has math label { shape p.labelText = Equation { string: p.label ensureOnCanvas: false - fontSize: "9px" + fontSize: "14px" fillColor: #000 strokeColor: "#ffffff" strokeWidth: 2.5 diff --git a/packages/examples/src/set-theory-domain/venn.style b/packages/examples/src/set-theory-domain/venn.style index 81368e321b..7e03913aab 100644 --- a/packages/examples/src/set-theory-domain/venn.style +++ b/packages/examples/src/set-theory-domain/venn.style @@ -10,7 +10,7 @@ forall Set x { x.text = Equation { string : x.label - fontSize : "25px" + fontSize : "32px" } ensure contains(x.icon, x.text) diff --git a/packages/examples/src/shape-distance/rect-line-dist.style b/packages/examples/src/shape-distance/rect-line-dist.style index edee21c735..30143ac471 100644 --- a/packages/examples/src/shape-distance/rect-line-dist.style +++ b/packages/examples/src/shape-distance/rect-line-dist.style @@ -6,7 +6,7 @@ canvas { forall Text `g` { `g`.shape = Equation { string : "e^{i \pi} = -1" - fontSize : "50pt" + fontSize : "50px" } `g`.box = Rectangle { center: `g`.shape.center diff --git a/packages/examples/src/timeline/timeline.style b/packages/examples/src/timeline/timeline.style index a45fee73e7..a843bf2e50 100644 --- a/packages/examples/src/timeline/timeline.style +++ b/packages/examples/src/timeline/timeline.style @@ -17,9 +17,9 @@ colors { global { --- parameters that user may want to tweek taskHeight = 35 - taskLabelFontSize = "14pt" + taskLabelFontSize = "18px" taskFontStyle = "italic" - periodFontSize = "16pt" + periodFontSize = "20px" periodFontStyle = "bold" fontFamily = "Garamond" diff --git a/packages/examples/src/triangle-mesh-2d/triangle-mesh-2d.style b/packages/examples/src/triangle-mesh-2d/triangle-mesh-2d.style index 0418314d03..50739a3e64 100644 --- a/packages/examples/src/triangle-mesh-2d/triangle-mesh-2d.style +++ b/packages/examples/src/triangle-mesh-2d/triangle-mesh-2d.style @@ -36,7 +36,7 @@ Global { -- string fontFamily = "Linux Libertine O" string fontFamily = "Palatino" - string fontSize = "14px" + string fontSize = "18px" } forall Vertex v { diff --git a/packages/examples/src/triangle-mesh-3d/triangle-mesh-3d.style b/packages/examples/src/triangle-mesh-3d/triangle-mesh-3d.style index 7d4e549cfc..baadc7015e 100644 --- a/packages/examples/src/triangle-mesh-3d/triangle-mesh-3d.style +++ b/packages/examples/src/triangle-mesh-3d/triangle-mesh-3d.style @@ -109,7 +109,7 @@ forall Triangle t -- using again the projected 2D coordinates p scalar dotSize = 1.0 color dotColor = rgba(0,0,0,1) - string dotFontSize = "4.5px" + string dotFontSize = "10px" scalar offset = 6 -- offset of labels from vertices shape t.vertexI = Circle { center: t.pi diff --git a/yarn.lock b/yarn.lock index ae2551d11a..942f43ea85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7645,7 +7645,7 @@ comma-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== -commander@>=7.0.0: +commander@9.2.0: version "9.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9" integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== @@ -12556,14 +12556,14 @@ math-random@^1.0.1: integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== mathjax-full@^3.0.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mathjax-full/-/mathjax-full-3.2.0.tgz#e53269842a943d4df10502937518991268996c5c" - integrity sha512-D2EBNvUG+mJyhn+M1C858k0f2Fc4KxXvbEX2WCMXroV10212JwfYqaBJ336ECBSz5X9L5LRoamxb7AJtg3KaJA== + version "3.2.2" + resolved "https://registry.yarnpkg.com/mathjax-full/-/mathjax-full-3.2.2.tgz#43f02e55219db393030985d2b6537ceae82f1fa7" + integrity sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w== dependencies: esm "^3.2.25" mhchemparser "^4.1.0" mj-context-menu "^0.6.1" - speech-rule-engine "^3.3.3" + speech-rule-engine "^4.0.6" md5-hex@^3.0.1: version "3.0.1" @@ -16105,14 +16105,14 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== -speech-rule-engine@^3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-3.3.3.tgz#781ed03cbcf3279f94d1d80241025ea954c6d571" - integrity sha512-0exWw+0XauLjat+f/aFeo5T8SiDsO1JtwpY3qgJE4cWt+yL/Stl0WP4VNDWdh7lzGkubUD9lWP4J1ASnORXfyQ== +speech-rule-engine@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz#b655dacbad3dae04acc0f7665e26ef258397dd09" + integrity sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g== dependencies: - commander ">=7.0.0" - wicked-good-xpath "^1.3.0" - xmldom-sre "^0.1.31" + commander "9.2.0" + wicked-good-xpath "1.3.0" + xmldom-sre "0.1.31" split-on-first@^1.0.0: version "1.1.0" @@ -17982,10 +17982,10 @@ why-is-node-running@^2.2.2: siginfo "^2.0.0" stackback "0.0.2" -wicked-good-xpath@^1.3.0: +wicked-good-xpath@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz#81b0e95e8650e49c94b22298fff8686b5553cf6c" - integrity sha1-gbDpXoZQ5JyUsiKY//hoa1VTz2w= + integrity sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw== wide-align@^1.1.0, wide-align@^1.1.2: version "1.1.5" @@ -18158,7 +18158,7 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xmldom-sre@^0.1.31: +xmldom-sre@0.1.31: version "0.1.31" resolved "https://registry.yarnpkg.com/xmldom-sre/-/xmldom-sre-0.1.31.tgz#10860d5bab2c603144597d04bf2c4980e98067f4" integrity sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==