diff options
| author | Albert Krewinkel <[email protected]> | 2026-01-05 22:46:32 +0100 |
|---|---|---|
| committer | Albert Krewinkel <[email protected]> | 2026-01-05 22:48:45 +0100 |
| commit | e9c4d7f7246d0312e7b7613c8aa1b15c4559826f (patch) | |
| tree | fcf279014d55b36fce6e796ce79e9e776060886b /pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs | |
| parent | 2a426718bc7c6cc88ceac0359b60f840d0f27bf9 (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.hs | 38 |
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 |
