vega / vl-convert

Utilities for converting Vega-Lite specs from the command line and Python
BSD 3-Clause "New" or "Revised" License
96 stars 12 forks source link

vl-convert fails with fractional font sizes #66

Closed sacundim closed 1 year ago

sacundim commented 1 year ago

The following spec, with "fontSize": 20.5, works just fine in Vega Editor:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {
    "values": [
      {"text": "Some text"}
    ]
  },
  "mark": {"type": "text", "fontSize": 20.5},
  "encoding": {
    "text": {
      "type": "nominal",
      "field": "text"
    }
  }
}

...but crashes in vl-convert 0.10.3:

% vl-convert vl2svg --input fractional-fontSize.json --output fractional-fontSize.svg  
ERROR Error: Failed to deserialize text info: invalid type: floating point `20.5`, expected i32 at line 3 column 14
    at Object.sg.textMetrics.width (<anon>:17:45)
    at Ve (https://cdn.skypack.dev/-/vega-scenegraph@v4.10.2-W1dltMWN7mO3TARazJA1/dist=es2020,mode=imports,min/optimized/vega-scenegraph.js:1:30235)
    at J (https://cdn.skypack.dev/-/vega-view-transforms@v4.5.9-LiB26zIbxiHZW70fnrDI/dist=es2020,mode=imports,min/optimized/vega-view-transforms.js:1:1588)
    at https://cdn.skypack.dev/-/vega-view-transforms@v4.5.9-LiB26zIbxiHZW70fnrDI/dist=es2020,mode=imports,min/optimized/vega-view-transforms.js:1:1278
    at Array.forEach (<anonymous>)
    at Mt.transform (https://cdn.skypack.dev/-/vega-view-transforms@v4.5.9-LiB26zIbxiHZW70fnrDI/dist=es2020,mode=imports,min/optimized/vega-view-transforms.js:1:1259)
    at Mt.evaluate (https://cdn.skypack.dev/-/vega-dataflow@v5.7.5-asKYS4gpPLMPf64pSozt/dist=es2020,mode=imports,min/optimized/vega-dataflow.js:1:15429)
    at Mt.run (https://cdn.skypack.dev/-/vega-dataflow@v5.7.5-asKYS4gpPLMPf64pSozt/dist=es2020,mode=imports,min/optimized/vega-dataflow.js:1:15286)
    at ne.Gt [as evaluate] (https://cdn.skypack.dev/-/vega-dataflow@v5.7.5-asKYS4gpPLMPf64pSozt/dist=es2020,mode=imports,min/optimized/vega-dataflow.js:1:12073)
    at ne.evaluate (https://cdn.skypack.dev/-/vega-view@v5.11.1-FQ9r1BvJOMHegkomXDyj/dist=es2020,mode=imports,min/optimized/vega-view.js:2:1621)

I didn't specifically test this example with altair_saver, but I discovered it when testing the Vega-Altair 4.x → 5.x upgrade on an old project that uses such fractional font sizes and altair_saver.

jonmmease commented 1 year ago

Thanks for the report! Looks like we need to change size to a float in https://github.com/vega/vl-convert/blob/74a0af5cacc3212319198d699d8610b704cc45ab/vl-convert-rs/src/text.rs#L107