diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2015-11-19 20:15:06 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2015-11-19 20:15:06 +0100 |
commit | adc43c3c243ed95215af6fe02d71e393c178da23 (patch) | |
tree | aad04954cbfb0378c65fd2b98e7c924245aad372 /tex/context/base/font-osd.lua | |
parent | 726a663be481042003566d4614266b940b5a0c91 (diff) | |
download | context-adc43c3c243ed95215af6fe02d71e393c178da23.tar.gz |
2015-11-19 19:15:00
Diffstat (limited to 'tex/context/base/font-osd.lua')
-rw-r--r-- | tex/context/base/font-osd.lua | 203 |
1 files changed, 64 insertions, 139 deletions
diff --git a/tex/context/base/font-osd.lua b/tex/context/base/font-osd.lua index cf2835554..23579ea48 100644 --- a/tex/context/base/font-osd.lua +++ b/tex/context/base/font-osd.lua @@ -120,8 +120,10 @@ local getid = nuts.getid local getchar = nuts.getchar local getfont = nuts.getfont local getsubtype = nuts.getsubtype -local getfield = nuts.getfield -local setfield = nuts.setfield +local setlink = nuts.setlink +local setnext = nuts.setnext +local setprev = nuts.setprev +local setchar = nuts.setchar local getprop = nuts.getprop local setprop = nuts.setprop @@ -840,8 +842,7 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces) copyinjection(tempcurrent,next) local nextcurrent = copy_node(current) copyinjection(nextcurrent,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set - setfield(tempcurrent,"next",nextcurrent) - setfield(nextcurrent,"prev",tempcurrent) + setlink(tempcurrent,nextcurrent) setprop(tempcurrent,a_state,s_blwf) tempcurrent = processcharacters(tempcurrent,font) setprop(tempcurrent,a_state,unsetvalue) @@ -849,15 +850,12 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces) flush_list(tempcurrent) local n = copy_node(current) copyinjection(n,current) -- KE: necessary? HH: probably not as positioning comes later and we rawget/set - setfield(current,"char",dotted_circle) + setchar(current,dotted_circle) head = insert_node_after(head, current, n) else - setfield(current,"char",getchar(tempcurrent)) -- we assumes that the result of blwf consists of one node + setchar(current,getchar(tempcurrent)) -- we assumes that the result of blwf consists of one node local freenode = getnext(current) - setfield(current,"next",tmp) - if tmp then - setfield(tmp,"prev",current) - end + setlink(current,tmp) free_node(freenode) flush_list(tempcurrent) if changestop then @@ -910,14 +908,13 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces) -- local np = getprev(n) local nn = getnext(n) local ln = getnext(lastcons) -- what if lastcons is nn ? - setfield(np,"next",nn) - setfield(nn,"prev",np) - setfield(lastcons,"next",n) + setlink(np,nn) + setnext(lastcons,n) if ln then - setfield(ln,"prev",n) + setprev(ln,n) end - setfield(n,"next",ln) - setfield(n,"prev",lastcons) + setnext(n,ln) + setprev(n,lastcons) if lastcons == stop then stop = n end @@ -940,16 +937,10 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces) local sp = getprev(start) local nn = getnext(n) local mn = getnext(matra) - if sp then - setfield(sp,"next",nn) - end - setfield(nn,"prev",sp) - setfield(matra,"next",start) - setfield(start,"prev",matra) - setfield(n,"next",mn) - if mn then - setfield(mn,"prev",n) - end + setlink(sp,nn) + setprev(nn,sp) + setlink(matra,start) + setlink(n,mn) if head == start then head = nn end @@ -1023,20 +1014,19 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces) -- move pre-base matras... if pre_mark[getchar(cn)] then if bp then - setfield(bp,"next",cn) + setnext(bp,cn) end local next = getnext(cn) local prev = getprev(cn) if next then - setfield(next,"prev",prev) + setprev(next,prev) end - setfield(prev,"next",next) + setnext(prev,next) if cn == stop then stop = prev end - setfield(cn,"prev",bp) - setfield(cn,"next",firstcons) - setfield(firstcons,"prev",cn) + setprev(cn,bp) + setlink(cn,firstcons) if firstcons == start then if head == start then head = cn @@ -1081,36 +1071,18 @@ local function deva_reorder(head,start,stop,font,attr,nbspaces) stop = c end local prev = getprev(current) - if prev then - setfield(prev,"next",n) - end - if n then - setfield(n,"prev",prev) - end + setlink(prev,n) local next = getnext(b) - setfield(c,"next",next) - if next then - setfield(next,"prev",c) - end - setfield(c,"next",next) - setfield(b,"next",current) - setfield(current,"prev",b) + setlink(c,next) + setnext(c,next) + setlink(b,current) end elseif cns and getnext(cns) ~= current then -- todo: optimize next -- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants) local cp, cnsn = getprev(current), getnext(cns) - if cp then - setfield(cp,"next",n) - end - if n then - setfield(n,"prev",cp) - end - setfield(cns,"next",current) - setfield(current,"prev",cns) - setfield(c,"next",cnsn) - if cnsn then - setfield(cnsn,"prev",c) - end + setlink(cp,n) + setlink(cns,current) + setlink(c,cnsn) if c == stop then stop = cp break @@ -1170,12 +1142,8 @@ function handlers.devanagari_reorder_matras(head,start) -- no leak local startnext = getnext(start) head = remove_node(head,start) local next = getnext(current) - if next then - setfield(next,"prev",start) - end - setfield(start,"next",next) - setfield(current,"next",start) - setfield(start,"prev",current) + setlink(start,next) + setlink(current,start) start = startnext break end @@ -1225,12 +1193,8 @@ function handlers.devanagari_reorder_reph(head,start) startnext = getnext(start) head = remove_node(head,start) local next = getnext(current) - if next then - setfield(next,"prev",start) - end - setfield(start,"next",next) - setfield(current,"next",start) - setfield(start,"prev",current) + setlink(start,next) + setlink(current,start) start = startnext startattr = getprop(start,a_syllabe) break @@ -1244,10 +1208,8 @@ function handlers.devanagari_reorder_reph(head,start) startnext = getnext(start) head = remove_node(head,start) local prev = getprev(current) - setfield(start,"prev",prev) - setfield(prev,"next",start) - setfield(start,"next",current) - setfield(current,"prev",start) + setlink(prev,start) + setlink(start,"next",current) start = startnext startattr = getprop(start,a_syllabe) break @@ -1276,10 +1238,8 @@ function handlers.devanagari_reorder_reph(head,start) startnext = getnext(start) head = remove_node(head,start) local prev = getprev(c) - setfield(start,"prev",prev) - setfield(prev,"next",start) - setfield(start,"next",c) - setfield(c,"prev",start) + setlink(prev,start) + setlink(start,c) -- end start = startnext startattr = getprop(start,a_syllabe) @@ -1297,12 +1257,8 @@ function handlers.devanagari_reorder_reph(head,start) startnext = getnext(start) head = remove_node(head,start) local next = getnext(current) - if next then - setfield(next,"prev",start) - end - setfield(start,"next",next) - setfield(current,"next",start) - setfield(start,"prev",current) + setlink(start,next) + setlink(current,"next",start) start = startnext end end @@ -1340,12 +1296,8 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start) startnext = getnext(start) removenode(start,start) local next = getnext(current) - if next then - setfield(next,"prev",start) - end - setfield(start,"next",next) - setfield(current,"next",start) - setfield(start,"prev",current) + setlink(start,next) + setlink(current,start) start = startnext break end @@ -1359,10 +1311,8 @@ function handlers.devanagari_reorder_pre_base_reordering_consonants(head,start) startnext = getnext(start) removenode(start,start) local prev = getprev(current) - setfield(start,"prev",prev) - setfield(prev,"next",start) - setfield(start,"next",current) - setfield(current,"prev",start) + setlink(prev,"next",start) + setlink(start,"next",current) start = startnext break end @@ -1383,14 +1333,11 @@ function handlers.devanagari_remove_joiners(head,start) break end end - if stop then - setfield(getfield(stop,"prev"),"next",nil) - setfield(stop,"prev",getprev(start)) - end local prev = getprev(start) - if prev then - setfield(prev,"next",stop) + if stop then + setnext(getprev(stop)) end + setlink(prev,stop) if head == start then head = stop end @@ -1596,7 +1543,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa next = getnext(current) local tmp = getnext(next) local changestop = next == stop - setfield(next,"next",nil) + setnext(next,nil) setprop(current,a_state,s_pref) current = processcharacters(current,font) setprop(current,a_state,s_blwf) @@ -1605,13 +1552,13 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa current = processcharacters(current,font) setprop(current,a_state,unsetvalue) if halant[getchar(current)] then - setfield(getnext(current),"next",tmp) + setnext(getnext(current),tmp) local nc = copy_node(current) copyinjection(nc,current) - setfield(current,"char",dotted_circle) + setchar(current,dotted_circle) head = insert_node_after(head,current,nc) else - setfield(current,"next",tmp) -- assumes that result of pref, blwf, or pstf consists of one node + setnext(current,tmp) -- assumes that result of pref, blwf, or pstf consists of one node if changestop then stop = current end @@ -1677,8 +1624,8 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa local extra = copy_node(current) copyinjection(extra,current) char = tpm[1] - setfield(current,"char",char) - setfield(extra,"char",tpm[2]) + setchar(current,"char",char) + setchar(extra,"char",tpm[2]) head = insert_node_after(head,current,extra) end -- @@ -1687,12 +1634,7 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa moved[current] = true local prev = getprev(current) local next = getnext(current) - if prev then - setfield(prev,"next",next) - end - if next then - setfield(next,"prev",prev) - end + setlink(prev,next) if current == stop then stop = getprev(current) end @@ -1703,12 +1645,8 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa start = current end local prev = getprev(halfpos) - if prev then - setfield(prev,"next",current) - end - setfield(current,"prev",prev) - setfield(halfpos,"prev",current) - setfield(current,"next",halfpos) + setlink(prev,current) + setlink(current,halfpos) halfpos = current elseif above_mark[char] then -- After main consonant target = basepos @@ -1733,22 +1671,13 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa local prev = getprev(current) if prev ~= target then local next = getnext(current) - if prev then -- not needed, already tested with target - setfield(prev,"next",next) - end - if next then - setfield(next,"prev",prev) - end + setlink(next,prev) if current == stop then stop = prev end local next = getnext(target) - if next then - setfield(next,"prev",current) - end - setfield(current,"next",next) - setfield(target,"next",current) - setfield(current,"prev",target) + setlink(current,next) + setlink(target,current) end end end @@ -1776,18 +1705,14 @@ local function dev2_reorder(head,start,stop,font,attr,nbspaces) -- maybe do a pa stop = current end local prev = getprev(c) - if prev then - setfield(prev,"next",next) - end - setfield(next,"prev",prev) + setlink(next,prev) local nextnext = getnext(next) - setfield(current,"next",nextnext) + setnext(current,nextnext) local nextnextnext = getnext(nextnext) if nextnextnext then - setfield(nextnextnext,"prev",current) + setprev(nextnextnext,current) end - setfield(c,"prev",nextnext) - setfield(nextnext,"next",c) + setlink(nextnext,c) end if stop == current then break end current = getnext(current) @@ -2112,9 +2037,9 @@ local function inject_syntax_error(head,current,mark) local signal = copy_node(current) copyinjection(signal,current) if mark == pre_mark then -- THIS IS WRONG: pre_mark is a table - setfield(signal,"char",dotted_circle) + setchar(signal,dotted_circle) else - setfield(current,"char",dotted_circle) + setchar(current,dotted_circle) end return insert_node_after(head,current,signal) end |