summaryrefslogtreecommitdiff
path: root/tex/generic
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-09-28 11:20:59 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-09-28 11:20:59 +0200
commit164a98ac4e58ae88de0a83d1eb60583827f4fbab (patch)
treea9bb80667dcf2dacc511b7c0dd0439e3ece7c274 /tex/generic
parente5c13c74b45e08527dda1d1be1788cccd96b6dac (diff)
downloadcontext-164a98ac4e58ae88de0a83d1eb60583827f4fbab.tar.gz
2017-09-28 10:13:00
Diffstat (limited to 'tex/generic')
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua88
1 files changed, 58 insertions, 30 deletions
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index a6397043b..38e94a091 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 : 09/25/17 19:19:22
+-- merge date : 09/28/17 10:07:40
do -- begin closure to overcome local limits and interference
@@ -691,7 +691,13 @@ function lpeg.append(list,pp,delayed,checked)
end
local p_false=P(false)
local p_true=P(true)
-local function make(t,rest)
+local lower=utf and utf.lower or string.lower
+local upper=utf and utf.upper or string.upper
+function lpeg.setutfcasers(l,u)
+ lower=l or lower
+ upper=u or upper
+end
+local function make1(t,rest)
local p=p_false
local keys=sortedkeys(t)
for i=1,#keys do
@@ -702,7 +708,7 @@ local function make(t,rest)
p=p+P(k)*p_true
elseif v==false then
else
- p=p+P(k)*make(v,v[""])
+ p=p+P(k)*make1(v,v[""])
end
end
end
@@ -711,32 +717,27 @@ local function make(t,rest)
end
return p
end
-local function collapse(t,x)
- if type(t)~="table" then
- return t,x
- else
- local n=next(t)
- if n==nil then
- return t,x
- elseif next(t,n)==nil then
- local k=n
+local function make2(t,rest)
+ local p=p_false
+ local keys=sortedkeys(t)
+ for i=1,#keys do
+ local k=keys[i]
+ if k~="" then
local v=t[k]
- if type(v)=="table" then
- return collapse(v,x..k)
+ if v==true then
+ p=p+(P(lower(k))+P(upper(k)))*p_true
+ elseif v==false then
else
- return v,x..k
+ p=p+(P(lower(k))+P(upper(k)))*make2(v,v[""])
end
- else
- local tt={}
- for k,v in next,t do
- local vv,kk=collapse(v,k)
- tt[kk]=vv
- end
- return tt,x
end
end
+ if rest then
+ p=p+p_true
+ end
+ return p
end
-function lpeg.utfchartabletopattern(list)
+function lpeg.utfchartabletopattern(list,insensitive)
local tree={}
local n=#list
if n==0 then
@@ -807,7 +808,7 @@ function lpeg.utfchartabletopattern(list)
end
end
end
- return make(tree)
+ return (insensitive and make2 or make1)(tree)
end
patterns.containseol=lpeg.finder(eol)
local function nextstep(n,step,result)
@@ -28763,6 +28764,7 @@ local format,insert,sortedkeys,tohash=string.format,table.insert,table.sortedkey
local type,next=type,next
local lpegmatch=lpeg.match
local utfbyte,utflen,utfsplit=utf.byte,utf.len,utf.split
+local match=string.match
local trace_loading=false trackers.register("otf.loading",function(v) trace_loading=v end)
local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
@@ -29582,7 +29584,8 @@ registerotffeature {
local lookups={}
local protect={}
local revert={}
-local zwj={ 0x200C }
+local zwjchar=0x200C
+local zwj={ zwjchar }
otf.addfeature {
name="blockligatures",
type="chainsubstitution",
@@ -29621,19 +29624,44 @@ registerotffeature {
}
local settings_to_array=utilities.parsers and utilities.parsers.settings_to_array
or function(s) return string.split(s,",") end
+local splitter=lpeg.splitat(":")
local function blockligatures(str)
local t=settings_to_array(str)
for i=1,#t do
- local ti=utfsplit(t[i])
- if #ti>1 then
- local one=ti[1]
- local two=ti[2]
- lookups[one]={ one,0x200C }
+ local ti=t[i]
+ local before,current,after=lpegmatch(splitter,ti)
+ if current and after then
+ if before then
+ before=utfsplit(before)
+ for i=1,#before do
+ before[i]={ before[i] }
+ end
+ end
+ if current then
+ current=utfsplit(current)
+ end
+ if after then
+ after=utfsplit(after)
+ for i=1,#after do
+ after[i]={ after[i] }
+ end
+ end
+ else
+ before=nil
+ current=utfsplit(ti)
+ after=nil
+ end
+ if #current>1 then
+ local one=current[1]
+ local two=current[2]
+ lookups[one]={ one,zwjchar }
local one={ one }
local two={ two }
local new=#protect+1
protect[new]={
+ before=before,
current={ one,two },
+ after=after,
lookups={ 1 },
}
revert[new]={