On Thu, May 13, 2021 at 04:23:21PM +0200, Hans Hagen wrote:
On 5/12/2021 11:46 PM, Marcel Fabian Krüger wrote:
Hi,
recently we got an interesting bug report in luaotfload (the original report is at https://github.com/latex3/luaotfload/issues/184) which relates to the ConTeXt fontloader. Take the following ConTeXt example:
\starttext \definefontfeature [default:bold] [default] [axis={weight=500}] \definedfont[file:NotoSansCJKsc-VF.otf*default:bold @ 10pt] U+5E2E 帮 \stoptext
The font is available at https://github.com/googlefonts/noto-cjk/raw/main/Sans/Variable/OTF/NotoSansC....
This compiles correctly, but the CJK glyph do not appear since it's Type2 CharString is invalid. The CFF2 CharStrings of this glyph invokes the rrcurveto operator with 63 arguments, which is
66 etc .. multiples of 6
Counting is hard... (I assumed that all arguments are created through blend operators)
allowed in CFF2 where the argument limit is 513, but not allowed in Type2 where the limit is at 48.
a rather low limit right from the start (we can assume only rrcurveto is affected)
It would be great if ConTeXt could check for this and insert additional rrcuveto operators when necessary to avoid this issue. after some experiments ... attached
Thanks you very much for looking into this so quickly.
(no upload yet as i'm renaming some low level helpers which needs testing)
I've noticed that both issues are fixed in the latest upload and testing showed that it works, except for two small issues: 1. The cache version of the streams cache didn't change, therefore the fix only gets picked up if the old cache is manually deleted. Could it be increased to automatically trigger a rebuilt? 2. The change to f_convert in font-ocl.lua relies on `new` being set, which only happens when inkscapeformat is first called which happens later in the same function. Therefore it does not work for the first SVG font loaded, while others work fine. Best regards, Marcel
Hans