summaryrefslogtreecommitdiff
path: root/tex/context/base/font-osd.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/font-osd.lua')
-rw-r--r--tex/context/base/font-osd.lua203
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