On 9/26/2018 12:30 AM, Marcel Krüger wrote:
  ---- On Tue, 25 Sep 2018 23:26:10 +0200 Hans Hagen <j.ha...@xs4all.nl> wrote 
----
  > On 9/25/2018 9:33 PM, Marcel Krüger wrote:
  > > Hi,
  > >
  > > while looking into a [luaotfload bug][bug] caused by the fontloader
  > > being confused when LuaTeX overwrites the `parameters` in a
  > > cached font table, I wondered why `write_lua_parameters` always
  > > creates a new table instead of altering a potentially preexisting table.
  > >
  > > Changing this should lead to some small performance improvement
  > > because  Lua no longer has to create a new table every time a cached
  > > font table is queried and more importantly it allows additional string
  > > keys in `parameters` to be preserved.
  >
  > sounds more like an issue of luaotfload ... it should manage the
  > parameters well

I do not think luaotfload is responsible especially because Ulrike Fischer
got a similar problem on ConTeXt with

     \starttext
     foo
     \ctxlua{for ii,vv in font.each() do end }
     bar
     \stoptext

hm, we never use font.each in context

She proposed that the ConTeXt fontloader might benefit from overloading
`font.each()` similar to `font.getfont` if the engine should not be changed.

she hasn't reported an issue on the context list (yet)

In some personal experiments

     local function fonteach_next(max, f)
       repeat
         f = f + 1
         if f > max then return end
       until font.frozen(f) ~= nil

usage and therefore freezing can happen out of order so you can miss some

       return f, font.getfont(f) or font.fonts[f]
     end
     font.each = function() return fonteach_next, font.max(), 0 end
seemed to fix the problem.

i assume that you just want to run over fonts ... in that case i can overload font.each in the context font loader (but different) in a more efficient way than querying tex

  > we're not going to change the current behaviour in the engine which is
  > creating these tables (same for math constant etc) from mem (changing
  > such things might solve your specific issue but introduce issues for
  > others)

While I agree that keeping compatibility is important I do not really understand
how this would lead to issues.

Especially the parameters known to LuaTeX are still updated, so the only change
I can see here would be if someone relies on LuaTeX dropping some table 
values...

Is there a problem I missed?
- why only parameters and not mathconstants, every character (which can have subtables), and other properties

- why overload set values at the lua end with values at the tex end (they can differe on purpose)

- better would be to set a metatable but that would add an extra lookup chain every time one does font.each

- do you really want to use font.each and overwrite parameters with maybe values different from what is expected at the other end (can have fuzzy side effects)

- you probably loose way more than this one variable with font.each

- basically what font.each does is give you back what tex sees (which can be way less than what lives at the lua end)

- so you solve one of your issues, then later another pops up (because some other assumed value is not coming from the tex end, and within a few years we have chaos in intercepts and heuristics

- the example of 'factor' not being in the tex parameters table is an example of where usage can differ from stock tex usage

etc

Hans

-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
_______________________________________________
dev-luatex mailing list
dev-luatex@ntg.nl
https://mailman.ntg.nl/mailman/listinfo/dev-luatex

Reply via email to