Hi again,

In tex/texmf-context/tex/context/base/mkxl/mlib-svg.lmt the following regex appears a few times (line 1502, 1556, and 1570):

gmatch(VAR,"%s*([^:]+):%s*([^;]+);?")

It may be helpful to first normalize the string by appending a semicolon to the end, allowing for:

for w in (VAR .. ";"):gmatch("([^;]*);") do ...

Splitting 'w' afterwards on the colon within key:value pairs would still be necessary, so maybe that approach is a wash.

Aside, when I made changes to the file, I couldn't get either a report() or a print() statement to show up in the output, even when running with --debug. Any hints on how to sprinkle debug info into the code? Or was I barking up the wrong source file?

Cheers!

On Sun, May 8, 2022 at 1:33 AM Thangalin <thangalin@gmail.com> wrote:
Hey hey,

The following produces a filled square, rather than an empty one:

\startbuffer[svg]
<svg>
  <rect width="100" height="100"
        style="stroke:rgb(0,0,0);;fill:none" />
</svg>
\stopbuffer

\starttext
  \placefigure{}{\includesvgbuffer[svg][conversion=mp]}
\stoptext

Remove the extra semicolon to get the expected result:

<svg>
  <rect width="100" height="100"
        style="stroke:rgb(0,0,0);fill:none" />
</svg>

It appears that a style immediately following two semicolons is ignored.

The SVG was generated using the following R code:

svg("filename.svg");
plot(rnorm(200));
dev.off()

Arguably, R's SVG routines could be a bit tighter. Can the MP SVG parser code be relaxed to skip "empty" semicolons?

$ context --version
mtx-context     | current version: 2022.05.02 16:19

Much appreciated.