aboutsummaryrefslogtreecommitdiff
path: root/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs
diff options
context:
space:
mode:
authorAlbert Krewinkel <[email protected]>2026-01-05 22:46:32 +0100
committerAlbert Krewinkel <[email protected]>2026-01-05 22:48:45 +0100
commite9c4d7f7246d0312e7b7613c8aa1b15c4559826f (patch)
treefcf279014d55b36fce6e796ce79e9e776060886b /pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs
parent2a426718bc7c6cc88ceac0359b60f840d0f27bf9 (diff)
Lua: let `pandoc.with_state` error on unknown options
Unknown or unsupported options now cause the `pandoc.with_state` function to fail. Closes: #11376
Diffstat (limited to 'pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs')
-rw-r--r--pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs38
1 files changed, 23 insertions, 15 deletions
diff --git a/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs b/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs
index 56cb52910..9e6d033d4 100644
--- a/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs
+++ b/pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs
@@ -485,21 +485,29 @@ data StateOptions = StateOptions
-- unspecified values.
peekStateOptions :: Peeker PandocError StateOptions
peekStateOptions idx = do
- opts <- liftLua getStateOptions
- let peekStateField field defVal peeker =
- peekFieldRaw (fmap (fromMaybe defVal) . peekNilOr peeker) field idx
- let peekOptStateField field defVal peeker =
- peekFieldRaw (fmap (maybe defVal Just ) . peekNilOr peeker) field idx
- StateOptions
- <$> peekStateField "request_headers"
- (stateOptsRequestHeaders opts)
- (peekList (peekPair peekText peekText))
- <*> peekStateField "resource_path"
- (stateOptsResourcePath opts)
- (peekList peekString)
- <*> peekOptStateField "user_data_dir"
- (stateOptsUserDataDir opts)
- peekString
+ absidx <- liftLua $ absindex idx
+ let setOptions opts = do
+ liftLua (next absidx) >>= \case
+ False -> return opts
+ True -> do
+ key <- peekByteString (nth 2)
+ case key of
+ "request_headers" -> do
+ let peekHeaderPair = peekPair peekText peekText
+ value <- peekList peekHeaderPair top `lastly` pop 1
+ setOptions $ opts { stateOptsRequestHeaders = value }
+ "resource_path" -> do
+ value <- peekList peekString top `lastly` pop 1
+ setOptions $ opts { stateOptsResourcePath = value }
+ "user_data_dir" -> do
+ value <- peekNilOr peekString top `lastly` pop 1
+ setOptions $ opts { stateOptsUserDataDir = value }
+ _ -> do
+ liftLua $ pop 2 -- remove key and value
+ failPeek $ "Unknown or unsupported state option: " <> key
+
+ liftLua pushnil -- first "key"
+ liftLua getStateOptions >>= setOptions
-- | Get the current options values from the pandoc state.
getStateOptions :: LuaE PandocError StateOptions