summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/luacas/tex/core/luacas-atomicexpression.lua
blob: 6cc6e4f58e2e3e3af17b70f974866f7c17e8bc71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
--- @class AtomicExpression
--- Interface for an atomic mathematical expression that has no sub-expressions.
AtomicExpression = {}
__AtomicExpression = {}


----------------------
-- Required methods --
----------------------

--- Converts an atomic expression to its equivalent compound expression, if it has one.
--- @return Expression
function AtomicExpression:tocompoundexpression()
    return self
end

----------------------
-- Instance methods --
----------------------

--- @return AtomicExpression
function AtomicExpression:evaluate()
    return self
end

--- @return AtomicExpression
function AtomicExpression:autosimplify()
    return self
end

--- @return table<number, Expression>
function AtomicExpression:subexpressions()
    return {}
end

--- @param subexpressions table<number, Expression>
--- @return AtomicExpression
function AtomicExpression:setsubexpressions(subexpressions)
    return self
end

--- @param map table<Expression, Expression>
--- @return Expression
function AtomicExpression:substitute(map)
    for expression, replacement in pairs(map) do
        if self == expression then
            return replacement
        end
    end
    return self
end

--- @return boolean
function AtomicExpression:isatomic()
    return true
end

--- @return string
function AtomicExpression:tolatex()
    -- Most atomic expressions should have the same __tostring as LaTeX's output
    return tostring(self)
end


-----------------
-- Inheritance --
-----------------

__AtomicExpression.__index = Expression
AtomicExpression = setmetatable(AtomicExpression, __AtomicExpression)