From dd8e1bab358884db6ba3f2373f515fbcc991e5ee Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sat, 28 Mar 2020 15:51:51 +0100 Subject: 2020-03-28 14:35:00 --- tex/generic/context/luatex/luatex-fonts-merged.lua | 59 ++++++++++++++++++---- 1 file changed, 48 insertions(+), 11 deletions(-) (limited to 'tex/generic/context') diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index d6a8b66da..59f0dd066 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2020-03-26 21:46 +-- merge date : 2020-03-28 14:31 do -- begin closure to overcome local limits and interference @@ -24564,14 +24564,14 @@ local insert_node_after=nuts.insert_after local properties=nodes.properties.data local fontkern=nuts.pool and nuts.pool.fontkern local italickern=nuts.pool and nuts.pool.italickern -local useitalickerns=false +local useitalickerns=false directives.register("fonts.injections.useitalics",function(v) if v then report_injections("using italics for space kerns (tracing only)") end useitalickerns=v end) -do if not fontkern then +if not fontkern then local thekern=nuts.new("kern",0) local setkern=nuts.setkern local copy_node=nuts.copy_node @@ -24580,8 +24580,8 @@ do if not fontkern then setkern(n,k) return n end -end end -do if not italickern then +end +if not italickern then local thekern=nuts.new("kern",3) local setkern=nuts.setkern local copy_node=nuts.copy_node @@ -24590,7 +24590,7 @@ do if not italickern then setkern(n,k) return n end -end end +end function injections.installnewkern() end local nofregisteredkerns=0 local nofregisteredpositions=0 @@ -25043,7 +25043,15 @@ local function inject_kerns_only(head,where) if i then local leftkern=i.leftkern if leftkern and leftkern~=0 then - head=insert_node_before(head,current,fontkern(leftkern)) + if prev and getid(prev)==glue_code then + if useitalickerns then + head=insert_node_before(head,current,italickern(leftkern)) + else + setwidth(prev,getwidth(prev)+leftkern) + end + else + head=insert_node_before(head,current,fontkern(leftkern)) + end end end if prevdisc then @@ -25186,12 +25194,26 @@ local function inject_positions_only(head,where) if rightkern and leftkern==-rightkern then setoffsets(current,leftkern,false) rightkern=0 + elseif prev and getid(prev)==glue_code then + if useitalickerns then + head=insert_node_before(head,current,italickern(leftkern)) + else + setwidth(prev,getwidth(prev)+leftkern) + end else head=insert_node_before(head,current,fontkern(leftkern)) end end if rightkern and rightkern~=0 then - insert_node_after(head,current,fontkern(rightkern)) + if next and getid(next)==glue_code then + if useitalickerns then + insert_node_after(head,current,italickern(rightkern)) + else + setwidth(next,getwidth(next)+rightkern) + end + else + insert_node_after(head,current,fontkern(rightkern)) + end end else local i=p.emptyinjections @@ -25539,12 +25561,26 @@ local function inject_everything(head,where) if rightkern and leftkern==-rightkern then setoffsets(current,leftkern,false) rightkern=0 + elseif prev and getid(prev)==glue_code then + if useitalickerns then + head=insert_node_before(head,current,italickern(leftkern)) + else + setwidth(prev,getwidth(prev)+leftkern) + end else head=insert_node_before(head,current,fontkern(leftkern)) end end if rightkern and rightkern~=0 then - insert_node_after(head,current,fontkern(rightkern)) + if next and getid(next)==glue_code then + if useitalickerns then + insert_node_after(head,current,italickern(rightkern)) + else + setwidth(next,getwidth(next)+rightkern) + end + else + insert_node_after(head,current,fontkern(rightkern)) + end end end else @@ -25910,16 +25946,17 @@ local function injectspaces(head) if useitalickerns then local new=rightkern*factor if trace_spaces then - report_spaces("%C [%p + %p]",nextchar,old,new) + report_spaces("[%p + %p] %C",old,new,nextchar) end insert_node_after(head,n,italickern(new)) else local new=old+rightkern*factor if trace_spaces then - report_spaces("[%p -> %p] %C",nextchar,old,new) + report_spaces("[%p -> %p] %C",old,new,nextchar) end setwidth(n,new) end + else end rightkern=false end -- cgit v1.2.3