Lua filter: use lua strings for nullary constructors
Lua string are used to represent nullary data constructors. The previous table-based representation was based on the JSON serialization, but can be simplified. This also matches the way those arguments are passed to custom writers.
This commit is contained in:
parent
0add4253e6
commit
d671b69b87
2 changed files with 41 additions and 124 deletions
|
@ -565,115 +565,93 @@ M.Superscript = M.Inline:create_constructor(
|
|||
|
||||
--- Math content is to be displayed on a separate line.
|
||||
-- @see Math
|
||||
M.DisplayMath = {}
|
||||
M.DisplayMath.t = "DisplayMath"
|
||||
M.DisplayMath = "DisplayMath"
|
||||
--- Math content is to be displayed inline within the paragraph
|
||||
-- @see Math
|
||||
M.InlineMath = {}
|
||||
M.InlineMath.t = "InlineMath"
|
||||
M.InlineMath = "InlineMath"
|
||||
|
||||
--- Double quoted content.
|
||||
-- @see Quoted
|
||||
M.DoubleQuote = {}
|
||||
M.DoubleQuote.t = "DoubleQuote"
|
||||
M.DoubleQuote = "DoubleQuote"
|
||||
|
||||
--- Single quoted content.
|
||||
-- @see Quoted
|
||||
M.SingleQuote = {}
|
||||
M.SingleQuote.t = "SingleQuote"
|
||||
M.SingleQuote = "SingleQuote"
|
||||
|
||||
--- Author name is mentioned in the text.
|
||||
-- @see Citation
|
||||
-- @see Cite
|
||||
M.AuthorInText = {}
|
||||
M.AuthorInText.t = "AuthorInText"
|
||||
M.AuthorInText = "AuthorInText"
|
||||
|
||||
--- Author name is suppressed.
|
||||
-- @see Citation
|
||||
-- @see Cite
|
||||
M.SuppressAuthor = {}
|
||||
M.SuppressAuthor.t = "SuppressAuthor"
|
||||
M.SuppressAuthor = "SuppressAuthor"
|
||||
|
||||
--- Default citation style is used.
|
||||
-- @see Citation
|
||||
-- @see Cite
|
||||
M.NormalCitation = {}
|
||||
M.NormalCitation.t = "NormalCitation"
|
||||
M.NormalCitation = "NormalCitation"
|
||||
|
||||
--- Table cells aligned left.
|
||||
-- @see Table
|
||||
M.AlignLeft = {}
|
||||
M.AlignLeft.t = "AlignLeft"
|
||||
M.AlignLeft = "AlignLeft"
|
||||
|
||||
--- Table cells right-aligned.
|
||||
-- @see Table
|
||||
M.AlignRight = {}
|
||||
M.AlignRight.t = "AlignRight"
|
||||
M.AlignRight = "AlignRight"
|
||||
|
||||
--- Table cell content is centered.
|
||||
-- @see Table
|
||||
M.AlignCenter = {}
|
||||
M.AlignCenter.t = "AlignCenter"
|
||||
M.AlignCenter = "AlignCenter"
|
||||
|
||||
--- Table cells are alignment is unaltered.
|
||||
-- @see Table
|
||||
M.AlignDefault = {}
|
||||
M.AlignDefault.t = "AlignDefault"
|
||||
M.AlignDefault = "AlignDefault"
|
||||
|
||||
--- Default list number delimiters are used.
|
||||
-- @see OrderedList
|
||||
M.DefaultDelim = {}
|
||||
M.DefaultDelim.t = "DefaultDelim"
|
||||
M.DefaultDelim = "DefaultDelim"
|
||||
|
||||
--- List numbers are delimited by a period.
|
||||
-- @see OrderedList
|
||||
M.Period = {}
|
||||
M.Period.t = "Period"
|
||||
M.Period = "Period"
|
||||
|
||||
--- List numbers are delimited by a single parenthesis.
|
||||
-- @see OrderedList
|
||||
M.OneParen = {}
|
||||
M.OneParen.t = "OneParen"
|
||||
M.OneParen = "OneParen"
|
||||
|
||||
--- List numbers are delimited by a double parentheses.
|
||||
-- @see OrderedList
|
||||
M.TwoParens = {}
|
||||
M.TwoParens.t = "TwoParens"
|
||||
M.TwoParens = "TwoParens"
|
||||
|
||||
--- List are numbered in the default style
|
||||
-- @see OrderedList
|
||||
M.DefaultStyle = {}
|
||||
M.DefaultStyle.t = "DefaultStyle"
|
||||
M.DefaultStyle = "DefaultStyle"
|
||||
|
||||
--- List items are numbered as examples.
|
||||
-- @see OrderedList
|
||||
M.Example = {}
|
||||
M.Example.t = "Example"
|
||||
M.Example = "Example"
|
||||
|
||||
--- List are numbered using decimal integers.
|
||||
-- @see OrderedList
|
||||
M.Decimal = {}
|
||||
M.Decimal.t = "Decimal"
|
||||
M.Decimal = "Decimal"
|
||||
|
||||
--- List are numbered using lower-case roman numerals.
|
||||
-- @see OrderedList
|
||||
M.LowerRoman = {}
|
||||
M.LowerRoman.t = "LowerRoman"
|
||||
M.LowerRoman = "LowerRoman"
|
||||
|
||||
--- List are numbered using upper-case roman numerals
|
||||
-- @see OrderedList
|
||||
M.UpperRoman = {}
|
||||
M.UpperRoman.t = "UpperRoman"
|
||||
M.UpperRoman = "UpperRoman"
|
||||
|
||||
--- List are numbered using lower-case alphabetic characters.
|
||||
-- @see OrderedList
|
||||
M.LowerAlpha = {}
|
||||
M.LowerAlpha.t = "LowerAlpha"
|
||||
M.LowerAlpha = "LowerAlpha"
|
||||
|
||||
--- List are numbered using upper-case alphabetic characters.
|
||||
-- @see OrderedList
|
||||
M.UpperAlpha = {}
|
||||
M.UpperAlpha.t = "UpperAlpha"
|
||||
M.UpperAlpha = "UpperAlpha"
|
||||
|
||||
|
||||
------------------------------------------------------------------------
|
||||
|
|
|
@ -34,10 +34,11 @@ module Text.Pandoc.Lua.StackInstances () where
|
|||
|
||||
import Control.Applicative ( (<|>) )
|
||||
import Scripting.Lua
|
||||
( LTYPE(..), LuaState, StackValue(..), getglobal2, ltype, newtable, objlen )
|
||||
( LTYPE(..), LuaState, StackValue(..), ltype, newtable, objlen )
|
||||
import Text.Pandoc.Definition
|
||||
import Text.Pandoc.Lua.SharedInstances ()
|
||||
import Text.Pandoc.Lua.Util ( addValue, getTable, pushViaConstructor )
|
||||
import Text.Pandoc.Shared ( safeRead )
|
||||
|
||||
instance StackValue Pandoc where
|
||||
push lua (Pandoc meta blocks) = do
|
||||
|
@ -143,19 +144,8 @@ instance StackValue Inline where
|
|||
valuetype _ = TTABLE
|
||||
|
||||
instance StackValue Alignment where
|
||||
push lua = \case
|
||||
AlignLeft -> getglobal2 lua "pandoc.AlignLeft"
|
||||
AlignRight -> getglobal2 lua "pandoc.AlignRight"
|
||||
AlignCenter -> getglobal2 lua "pandoc.AlignCenter"
|
||||
AlignDefault -> getglobal2 lua "pandoc.AlignDefault"
|
||||
peek lua idx = do
|
||||
tag <- getTable lua idx "t"
|
||||
case tag of
|
||||
Just "AlignLeft" -> return $ Just AlignLeft
|
||||
Just "AlignRight" -> return $ Just AlignRight
|
||||
Just "AlignCenter" -> return $ Just AlignCenter
|
||||
Just "AlignDefault" -> return $ Just AlignDefault
|
||||
_ -> return Nothing
|
||||
push lua = push lua . show
|
||||
peek lua idx = (>>= safeRead) <$> peek lua idx
|
||||
valuetype _ = TSTRING
|
||||
|
||||
instance StackValue Citation where
|
||||
|
@ -172,18 +162,9 @@ instance StackValue Citation where
|
|||
valuetype _ = TTABLE
|
||||
|
||||
instance StackValue CitationMode where
|
||||
push lua = \case
|
||||
AuthorInText -> getglobal2 lua "pandoc.AuthorInText"
|
||||
NormalCitation -> getglobal2 lua "pandoc.NormalCitation"
|
||||
SuppressAuthor -> getglobal2 lua "pandoc.SuppressAuthor"
|
||||
peek lua idx = do
|
||||
tag <- getTable lua idx "t"
|
||||
case tag of
|
||||
Just "AuthorInText" -> return $ Just AuthorInText
|
||||
Just "NormalCitation" -> return $ Just NormalCitation
|
||||
Just "SuppressAuthor" -> return $ Just SuppressAuthor
|
||||
_ -> return Nothing
|
||||
valuetype _ = TTABLE
|
||||
push lua = push lua . show
|
||||
peek lua idx = (>>= safeRead) <$> peek lua idx
|
||||
valuetype _ = TSTRING
|
||||
|
||||
instance StackValue Format where
|
||||
push lua (Format f) = push lua f
|
||||
|
@ -191,66 +172,24 @@ instance StackValue Format where
|
|||
valuetype _ = TSTRING
|
||||
|
||||
instance StackValue ListNumberDelim where
|
||||
push lua = \case
|
||||
DefaultDelim -> getglobal2 lua "pandoc.DefaultDelim"
|
||||
Period -> getglobal2 lua "pandoc.Period"
|
||||
OneParen -> getglobal2 lua "pandoc.OneParen"
|
||||
TwoParens -> getglobal2 lua "pandoc.TwoParens"
|
||||
peek lua idx = do
|
||||
tag <- getTable lua idx "t"
|
||||
case tag of
|
||||
Just "DefaultDelim" -> return $ Just DefaultDelim
|
||||
Just "Period" -> return $ Just Period
|
||||
Just "OneParen" -> return $ Just OneParen
|
||||
Just "TwoParens" -> return $ Just TwoParens
|
||||
_ -> return Nothing
|
||||
valuetype _ = TTABLE
|
||||
push lua = push lua . show
|
||||
peek lua idx = (>>= safeRead) <$> peek lua idx
|
||||
valuetype _ = TSTRING
|
||||
|
||||
instance StackValue ListNumberStyle where
|
||||
push lua = \case
|
||||
DefaultStyle -> getglobal2 lua "pandoc.DefaultStyle"
|
||||
LowerRoman -> getglobal2 lua "pandoc.LowerRoman"
|
||||
UpperRoman -> getglobal2 lua "pandoc.UpperRoman"
|
||||
LowerAlpha -> getglobal2 lua "pandoc.LowerAlpha"
|
||||
UpperAlpha -> getglobal2 lua "pandoc.UpperAlpha"
|
||||
Decimal -> getglobal2 lua "pandoc.Decimal"
|
||||
Example -> getglobal2 lua "pandoc.Example"
|
||||
peek lua idx = do
|
||||
tag <- getTable lua idx "t"
|
||||
case tag of
|
||||
Just "DefaultStyle" -> return $ Just DefaultStyle
|
||||
Just "LowerRoman" -> return $ Just LowerRoman
|
||||
Just "UpperRoman" -> return $ Just UpperRoman
|
||||
Just "LowerAlpha" -> return $ Just LowerAlpha
|
||||
Just "UpperAlpha" -> return $ Just UpperAlpha
|
||||
Just "Decimal" -> return $ Just Decimal
|
||||
Just "Example" -> return $ Just Example
|
||||
_ -> return Nothing
|
||||
valuetype _ = TTABLE
|
||||
push lua = push lua . show
|
||||
peek lua idx = (>>= safeRead) <$> peek lua idx
|
||||
valuetype _ = TSTRING
|
||||
|
||||
instance StackValue MathType where
|
||||
push lua = \case
|
||||
InlineMath -> getglobal2 lua "pandoc.InlineMath"
|
||||
DisplayMath -> getglobal2 lua "pandoc.DisplayMath"
|
||||
peek lua idx = do
|
||||
res <- getTable lua idx "t"
|
||||
case res of
|
||||
Just "InlineMath" -> return $ Just InlineMath
|
||||
Just "DisplayMath" -> return $ Just DisplayMath
|
||||
_ -> return Nothing
|
||||
valuetype _ = TTABLE
|
||||
push lua = push lua . show
|
||||
peek lua idx = (>>= safeRead) <$> peek lua idx
|
||||
valuetype _ = TSTRING
|
||||
|
||||
instance StackValue QuoteType where
|
||||
push lua = \case
|
||||
SingleQuote -> getglobal2 lua "pandoc.SingleQuote"
|
||||
DoubleQuote -> getglobal2 lua "pandoc.DoubleQuote"
|
||||
peek lua idx = do
|
||||
res <- getTable lua idx "t"
|
||||
case res of
|
||||
Just "SingleQuote" -> return $ Just SingleQuote
|
||||
Just "DoubleQuote" -> return $ Just DoubleQuote
|
||||
_ -> return Nothing
|
||||
valuetype _ = TTABLE
|
||||
push lua = push lua . show
|
||||
peek lua idx = (>>= safeRead) <$> peek lua idx
|
||||
valuetype _ = TSTRING
|
||||
|
||||
-- | Return the value at the given index as inline if possible.
|
||||
peekInline :: LuaState -> Int -> IO (Maybe Inline)
|
||||
|
|
Loading…
Add table
Reference in a new issue