summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/cldf-pos.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/cldf-pos.lmt')
-rw-r--r--tex/context/base/mkxl/cldf-pos.lmt152
1 files changed, 101 insertions, 51 deletions
diff --git a/tex/context/base/mkxl/cldf-pos.lmt b/tex/context/base/mkxl/cldf-pos.lmt
index 40c88c716..9378b01be 100644
--- a/tex/context/base/mkxl/cldf-pos.lmt
+++ b/tex/context/base/mkxl/cldf-pos.lmt
@@ -21,13 +21,15 @@ local posittonumber = posit.tonumber
local values = tokens.values
local boolean_code = values.boolean
+local float_code = values.float
-do
+local scanners = tokens.scanners
+local scanposit = scanners.posit
+local scanfloat = scanners.float
+local scaninteger = scanners.integer
+local scancsname = scanners.csname
- local scanners = tokens.scanners
- local scanfloat = scanners.float
- local scaninteger = scanners.integer
- local scancsname = scanners.csname
+do -- these are only for testing and might go to a module eventually
local codes = tex.codes
@@ -78,60 +80,108 @@ do
end,
}
-end
+ do
-do
-
- local p_number = lpeg.patterns.number
- local p = lpeg.Cs(
- lpeg.Cc("local new = new ; return ")
- * (
- lpeg.C(p_number) / function(s)
- return "new(" .. s .. ")"
- end
- + lpeg.P(1)
- )^0
- )
+ local p_number = lpeg.patterns.number
+ local p = lpeg.Cs(
+ lpeg.Cc("local new = new ; return ")
+ * (
+ lpeg.C(p_number) / function(s)
+ return "new(" .. s .. ")"
+ end
+ + lpeg.P(1)
+ )^0
+ )
- local t = setmetatableindex({ new = posit.new }, posit)
+ local t = setmetatableindex({ new = posit.new }, posit)
- local function calculate(s)
- local new = lpegmatch(p,s)
- new = load(new,nil,nil,t)
- if new then
- new = new()
+ local function calculate(s)
+ local new = lpegmatch(p,s)
+ new = load(new,nil,nil,t)
if new then
- return new
+ new = new()
+ if new then
+ return new
+ end
end
+ return old
end
- return old
- end
- implement {
- name = "positunum",
- public = true,
- arguments = "string",
- actions = function(s)
- local r = calculate(s)
- local t = type(r)
- if t == "boolean" then
- context(tostring(r))
- elseif t == "string" then
- context(r)
- else
- context("%N",posittonumber(r))
+ implement {
+ name = "positunum",
+ public = true,
+ arguments = "string",
+ actions = function(s)
+ local r = calculate(s)
+ local t = type(r)
+ if t == "boolean" then
+ context(tostring(r))
+ elseif t == "string" then
+ context(r)
+ else
+ context("%N",posittonumber(r))
+ end
end
- end
- }
+ }
+
+ implement {
+ name = "ifpositunum",
+ public = true,
+ usage = "condition",
+ arguments = "string",
+ actions = function(s)
+ return boolean_code, calculate(s) and true or false
+ end,
+ }
- implement {
- name = "ifpositunum",
- public = true,
- usage = "condition",
- arguments = "string",
- actions = function(s)
- return boolean_code, calculate(s) and true or false
- end,
- }
+ end
+
+end
+
+do
+
+ local xsin = xmath.sin local xasin = xmath.asin local xsinh = xmath.sinh local xasinh = xmath.asinh
+ local xcos = xmath.cos local xacos = xmath.acos local xcosh = xmath.cosh local xacosh = xmath.acosh
+ local xtan = xmath.tan local xatan = xmath.atan local xtanh = xmath.tanh local xatanh = xmath.atanh
+
+ local xsqrt = xmath.sqrt
+ local xlog = xmath.log
+ local xexp = xmath.exp
+ local xpow = xmath.pow
+ local xceil = xmath.ceil
+ local xfloor = xmath.floor
+ local xround = xmath.round
+ local xabs = xmath.fabs
+ local xmod = xmath.fmod
+ local xrem = xmath.remainder
+ local xrad = xmath.rad
+ local xdeg = xmath.deg
+ local xatan2 = xmath.atan2
+
+ implement { name = "pfsin", public = true, usage = "value", actions = function() return float_code, xsin (scanposit(true)) end }
+ implement { name = "pfcos", public = true, usage = "value", actions = function() return float_code, xcos (scanposit(true)) end }
+ implement { name = "pftan", public = true, usage = "value", actions = function() return float_code, xtan (scanposit(true)) end }
+ implement { name = "pfasin", public = true, usage = "value", actions = function() return float_code, xasin (scanposit(true)) end }
+ implement { name = "pfacos", public = true, usage = "value", actions = function() return float_code, xacos (scanposit(true)) end }
+ implement { name = "pfatan", public = true, usage = "value", actions = function() return float_code, xatan (scanposit(true)) end }
+ implement { name = "pfsinh", public = true, usage = "value", actions = function() return float_code, xsinh (scanposit(true)) end }
+ implement { name = "pfcosh", public = true, usage = "value", actions = function() return float_code, xcosh (scanposit(true)) end }
+ implement { name = "pftanh", public = true, usage = "value", actions = function() return float_code, xtanh (scanposit(true)) end }
+ implement { name = "pfasinh", public = true, usage = "value", actions = function() return float_code, xasinh(scanposit(true)) end }
+ implement { name = "pfacosh", public = true, usage = "value", actions = function() return float_code, xacosh(scanposit(true)) end }
+ implement { name = "pfatanh", public = true, usage = "value", actions = function() return float_code, xatanh(scanposit(true)) end }
+ implement { name = "pfsqrt", public = true, usage = "value", actions = function() return float_code, xsqrt (scanposit(true)) end }
+ implement { name = "pflog", public = true, usage = "value", actions = function() return float_code, xlog (scanposit(true)) end }
+ implement { name = "pfexp", public = true, usage = "value", actions = function() return float_code, xexp (scanposit(true)) end }
+ implement { name = "pfceil", public = true, usage = "value", actions = function() return float_code, xceil (scanposit(true)) end }
+ implement { name = "pffloor", public = true, usage = "value", actions = function() return float_code, xfloor(scanposit(true)) end }
+ implement { name = "pfround", public = true, usage = "value", actions = function() return float_code, xround(scanposit(true)) end }
+ implement { name = "pfabs", public = true, usage = "value", actions = function() return float_code, xabs (scanposit(true)) end }
+ implement { name = "pfrad", public = true, usage = "value", actions = function() return float_code, xrad (scanposit(true)) end }
+ implement { name = "pfdeg", public = true, usage = "value", actions = function() return float_code, xdeg (scanposit(true)) end }
+ implement { name = "pfatantwo", public = true, usage = "value", actions = function() return float_code, xatan2(scanposit(true),scanposit(true)) end }
+ implement { name = "pfpow", public = true, usage = "value", actions = function() return float_code, xpow (scanposit(true),scanposit(true)) end }
+ implement { name = "pfmod", public = true, usage = "value", actions = function() return float_code, xmod (scanposit(true),scanposit(true)) end }
+ implement { name = "pfrem", public = true, usage = "value", actions = function() return float_code, xrem (scanposit(true),scanposit(true)) end }
end