From 8fb5c26bd2f15104a6db9945299d3ca2c75db2d6 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 11 Jun 2020 22:30:31 +0200 Subject: 2020-06-11 21:29:00 --- tex/generic/context/luatex/luatex-fonts-merged.lua | 105 ++++++++++++++++++++- 1 file changed, 103 insertions(+), 2 deletions(-) (limited to 'tex/generic/context/luatex/luatex-fonts-merged.lua') diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index d0aa965f3..c2128e8c3 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-06-09 18:53 +-- merge date : 2020-06-11 21:26 do -- begin closure to overcome local limits and interference @@ -26005,6 +26005,7 @@ if not modules then modules={} end modules ['font-ota']={ license="see context related readme files" } local type=type +local setmetatableindex=table.setmetatableindex if not trackers then trackers={ register=function() end } end local fonts,nodes,node=fonts,nodes,node local allocate=utilities.storage.allocate @@ -26218,7 +26219,7 @@ if not classifiers then local f_mandiac,l_mandiac=characters.blockrange("mandiac") local f_nko,l_nko=characters.blockrange("nko") local f_ext_a,l_ext_a=characters.blockrange("arabicextendeda") - classifiers=table.setmetatableindex(function(t,k) + classifiers=setmetatableindex(function(t,k) if type(k)=="number" then local c=chardata[k] local v=false @@ -26384,6 +26385,106 @@ end methods.syrc=methods.arab methods.mand=methods.arab methods.nko=methods.arab +do + local joining=setmetatableindex(function(t,k) + if type(k)=="number" then + local c=chardata[k] + local v=false + if c then + local mongolian=c.mongolian + v=mongolian + end + t[k]=v + return v + end + end) + function methods.mong(head,font,attr) + local first,last + local current=head + local done=false + local prevjoin=nil + local prestate=nil + current=tonut(current) + local function wrapup() + if last then + if last~=first then + local s=getstate(last) + if s==s_medi then + setstate(last,s_fina) + elseif s==s_init then + setstate(last,s_isol) + end + end + last=nil + first=nil + prevjoin=nil + prestate=nil + end + end + while current do + local char,id=ischar(current,font) + if char and not getstate(current) then + local currjoin=joining[char] + done=true + if not last then + setstate(current,s_isol) + prevjoin=currjoin + first=current + last=current + prevstate=s_isol + elseif currjoin=="t" then + last=current + elseif prevjoin=="d" or prevjoin=="jc" or prevjoin=="l" then + if currjoin=="d" or prevjoin=="jc" or prevjoin=="r" then + local s=getstate(last) + if s==s_isol then + setstate(last,s_init) + elseif s==s_fina then + setstate(last,s_medi) + end + setstate(current,s_fina) + prevstate=s_fina + elseif prevjoin=="nj" or prevjoin=="l" then + local s=getstate(last) + if s==s_medi then + setstate(last,s_fina) + elseif s==s_init then + setstate(last,s_isol) + end + setstate(current,s_isol) + prevstate=s_isol + end + prevjoin=currjoin + last=current + elseif prevjoin=="nj" or prevjoin=="r" then + if s==s_medi then + setstate(last,s_fina) + elseif s==s_init then + setstate(last,s_isol) + end + setstate(current,s_isol) + prevjoin=currjoin + prevstate=s_isol + last=current + elseif last then + wrapup() + end + else + if last then + wrapup() + end + if id==math_code then + current=end_of_math(current) + end + end + current=getnext(current) + end + if last then + wrapup() + end + return head,done + end +end directives.register("otf.analyze.useunicodemarks",function(v) analyzers.useunicodemarks=v end) -- cgit v1.2.3