diff options
author | Hans Hagen <pragma@wxs.nl> | 2018-06-22 16:42:14 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2018-06-22 16:42:14 +0200 |
commit | da8162d4e816cf49d9790a1c81556b499f442bed (patch) | |
tree | 5c631b1fb8282670a6cea1087afa766a8b94db43 /tex/context/base/mkiv/mlib-lua.lua | |
parent | 204057fdc5023b5f4ff55a69bc6593388ea427e7 (diff) | |
download | context-da8162d4e816cf49d9790a1c81556b499f442bed.tar.gz |
2018-06-22 16:02:00
Diffstat (limited to 'tex/context/base/mkiv/mlib-lua.lua')
-rw-r--r-- | tex/context/base/mkiv/mlib-lua.lua | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/tex/context/base/mkiv/mlib-lua.lua b/tex/context/base/mkiv/mlib-lua.lua index 543d04697..eca17b751 100644 --- a/tex/context/base/mkiv/mlib-lua.lua +++ b/tex/context/base/mkiv/mlib-lua.lua @@ -74,11 +74,13 @@ local f_integer = formatters["%i"] local f_numeric = formatters["%n"] local f_pair = formatters["(%n,%n)"] +local f_ctrl = formatters["(%n,%n) .. controls (%n,%n) and (%n,%n)"] local f_triplet = formatters["(%n,%n,%n)"] local f_quadruple = formatters["(%n,%n,%n,%n)"] local f_points = formatters["%p"] local f_pair_pt = formatters["(%p,%p)"] +local f_ctrl_pt = formatters["(%p,%p) .. controls (%p,%p) and (%p,%p)"] local f_triplet_pt = formatters["(%p,%p,%p)"] local f_quadruple_pt = formatters["(%p,%p,%p,%p)"] @@ -231,7 +233,7 @@ function mp.quadruplepoints(w,x,y,z) end end -local function mppath(f,t,connector,cycle) +local function mppath(f2,f6,t,connector,cycle) if type(t) == "table" then local tn = #t if tn > 0 then @@ -242,11 +244,23 @@ local function mppath(f,t,connector,cycle) connector = "--" end local ti = t[1] - n = n + 1 ; buffer[n] = f(ti[1],ti[2]) + n = n + 1 ; + if #ti == 6 then + local tn = t[2] or t[1] + buffer[n] = f6(ti[1],ti[2],ti[5],ti[6],tn[3],tn[4]) + else + buffer[n] = f2(ti[1],ti[2]) + end for i=2,tn do local ti = t[i] n = n + 1 ; buffer[n] = connector - n = n + 1 ; buffer[n] = f(ti[1],ti[2]) + n = n + 1 ; + if #ti == 6 then + local tn = t[i+1] or t[1] + buffer[n] = f6(ti[1],ti[2],ti[5],ti[6],tn[3],tn[4]) + else + buffer[n] = f2(ti[1],ti[2]) + end end if cycle then n = n + 1 ; buffer[n] = connector @@ -257,11 +271,47 @@ local function mppath(f,t,connector,cycle) end function mp.path(...) - mppath(f_pair,...) + mppath(f_pair,f_ctrl,...) end function mp.pathpoints(...) - mppath(f_pair_pt,...) + mppath(f_pair_pt,f_ctrl_pt,...) +end + + +function mp.pathpoints(t,connector,cycle) + if type(t) == "table" then + local tn = #t + if tn > 0 then + if connector == true then + connector = "--" + cycle = true + elseif not connector then + connector = "--" + end + local ti = t[1] + n = n + 1 ; + if #ti == 6 then + buffer[n] = f_pair_pt_ctrl(ti[1],ti[2],ti[3],ti[4],ti[5],ti[6]) + else + buffer[n] = f_pair_pt(ti[1],ti[2]) + end + for i=2,tn do + local ti = t[i] + n = n + 1 ; buffer[n] = connector + n = n + 1 ; + if #ti == 6 then + buffer[n] = f_pair_pt_ctrl(ti[1],ti[2],ti[3],ti[4],ti[5],ti[6]) + else + buffer[n] = f_pair_pt(ti[1],ti[2]) + end + end + if cycle then + n = n + 1 ; buffer[n] = connector + n = n + 1 ; buffer[n] = "cycle" + end + end + end end function mp.size(t) |