@@ -16,8 +16,9 @@ You should have received a copy of the GNU General Public License
1616along with this program; if not, write to the Free Software
1717Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1818-}
19−{-# LANGUAGE FlexibleInstances #-}
20−{-# LANGUAGE LambdaCase #-}
19+{-# LANGUAGE FlexibleInstances #-}
20+{-# LANGUAGE LambdaCase #-}
21+{-# LANGUAGE ScopedTypeVariables #-}
2122{-# OPTIONS_GHC -fno-warn-orphans #-}
2223{- |
2324 Module : Text.Pandoc.Lua.StackInstances
@@ -34,13 +35,18 @@ module Text.Pandoc.Lua.StackInstances () where
3435
3536import Control.Applicative ((<|>))
3637import Control.Monad (when)
38+import Data.Data (showConstr, toConstr)
39+import Data.Foldable (forM_)
3740import Foreign.Lua (FromLuaStack (peek), Lua, LuaInteger, LuaNumber, StackIndex,
3841 ToLuaStack (push), Type (..), throwLuaError, tryLua)
3942import Text.Pandoc.Definition
43+import Text.Pandoc.Extensions (Extensions)
4044import Text.Pandoc.Lua.Util (adjustIndexBy, getTable, pushViaConstructor)
45+import Text.Pandoc.Options (ReaderOptions (..), TrackChanges)
4146import Text.Pandoc.Shared (Element (Blk, Sec), safeRead)
4247
4348import qualified Foreign.Lua as Lua
49+import qualified Data.Set as Set
4450import qualified Text.Pandoc.Lua.Util as LuaUtil
4551
4652instance ToLuaStack Pandoc where
@@ -332,3 +338,43 @@ instance ToLuaStack Element where
332338 Lua.push "__index"
333339 Lua.pushvalue (-2)
334340 Lua.rawset (-3)
341+
342+
343+--
344+-- Reader Options
345+--
346+instance ToLuaStack Extensions where
347+ push exts = push (show exts)
348+
349+instance ToLuaStack TrackChanges where
350+ push = push . showConstr . toConstr
351+
352+instance ToLuaStack a => ToLuaStack (Set.Set a) where
353+ push set = do
354+ Lua.newtable
355+ forM_ set (`LuaUtil.addValue` True)
356+
357+instance ToLuaStack ReaderOptions where
358+ push ro = do
359+ let ReaderOptions
360+ (extensions :: Extensions)
361+ (standalone :: Bool)
362+ (columns :: Int)
363+ (tabStop :: Int)
364+ (indentedCodeClasses :: [String])
365+ (abbreviations :: Set.Set String)
366+ (defaultImageExtension :: String)
367+ (trackChanges :: TrackChanges)
368+ (stripComments :: Bool)
369+ = ro
370+ Lua.newtable
371+ LuaUtil.addValue "extensions" extensions
372+ LuaUtil.addValue "standalone" standalone
373+ LuaUtil.addValue "columns" columns
374+ LuaUtil.addValue "tabStop" tabStop
375+ LuaUtil.addValue "indentedCodeClasses" indentedCodeClasses
376+ LuaUtil.addValue "abbreviations" abbreviations
377+ LuaUtil.addValue "defaultImageExtension" defaultImageExtension
378+ LuaUtil.addValue "trackChanges" trackChanges
379+ LuaUtil.addValue "stripComments" stripComments
380+