1{-# LANGUAGE LambdaCase #-} 2{-# LANGUAGE OverloadedStrings #-} 3{-# LANGUAGE ScopedTypeVariables #-} 4{-# OPTIONS_GHC -fno-warn-orphans #-} 5{- | 6 Module : Text.Pandoc.Lua.Marshaling.ReaderOptions 7 Copyright : © 2012-2021 John MacFarlane 8 © 2017-2021 Albert Krewinkel 9 License : GNU GPL, version 2 or above 10 11 Maintainer : Albert Krewinkel <tarleb+pandoc@moltkeplatz.de> 12 Stability : alpha 13 14Marshaling instance for ReaderOptions and its components. 15-} 16module Text.Pandoc.Lua.Marshaling.ReaderOptions () where 17 18import Data.Data (showConstr, toConstr) 19import Foreign.Lua (Lua, Pushable) 20import Text.Pandoc.Extensions (Extensions) 21import Text.Pandoc.Lua.Marshaling.AnyValue (AnyValue (..)) 22import Text.Pandoc.Lua.Marshaling.CommonState () 23import Text.Pandoc.Options (ReaderOptions (..), TrackChanges) 24 25import qualified Data.Set as Set 26import qualified Data.Text as Text 27import qualified Foreign.Lua as Lua 28import qualified Text.Pandoc.Lua.Util as LuaUtil 29 30-- 31-- Reader Options 32-- 33instance Pushable Extensions where 34 push exts = Lua.push (show exts) 35 36instance Pushable TrackChanges where 37 push = Lua.push . showConstr . toConstr 38 39instance Pushable ReaderOptions where 40 push ro = do 41 let ReaderOptions 42 (extensions :: Extensions) 43 (standalone :: Bool) 44 (columns :: Int) 45 (tabStop :: Int) 46 (indentedCodeClasses :: [Text.Text]) 47 (abbreviations :: Set.Set Text.Text) 48 (defaultImageExtension :: Text.Text) 49 (trackChanges :: TrackChanges) 50 (stripComments :: Bool) 51 = ro 52 Lua.newtable 53 LuaUtil.addField "extensions" extensions 54 LuaUtil.addField "standalone" standalone 55 LuaUtil.addField "columns" columns 56 LuaUtil.addField "tab_stop" tabStop 57 LuaUtil.addField "indented_code_classes" indentedCodeClasses 58 LuaUtil.addField "abbreviations" abbreviations 59 LuaUtil.addField "default_image_extension" defaultImageExtension 60 LuaUtil.addField "track_changes" trackChanges 61 LuaUtil.addField "strip_comments" stripComments 62 63 -- add metatable 64 let indexReaderOptions :: AnyValue -> AnyValue -> Lua Lua.NumResults 65 indexReaderOptions _tbl (AnyValue key) = do 66 Lua.ltype key >>= \case 67 Lua.TypeString -> Lua.peek key >>= \case 68 ("defaultImageExtension" :: Text.Text) 69 -> Lua.push defaultImageExtension 70 "indentedCodeClasses" -> Lua.push indentedCodeClasses 71 "stripComments" -> Lua.push stripComments 72 "tabStop" -> Lua.push tabStop 73 "trackChanges" -> Lua.push trackChanges 74 _ -> Lua.pushnil 75 _ -> Lua.pushnil 76 return 1 77 Lua.newtable 78 LuaUtil.addFunction "__index" indexReaderOptions 79 Lua.setmetatable (Lua.nthFromTop 2) 80