diff options
| -rw-r--r-- | pandoc-lua-engine/src/Text/Pandoc/Lua/Module/Pandoc.hs | 38 | ||||
| -rw-r--r-- | pandoc-lua-engine/test/lua/module/pandoc.lua | 13 |
2 files changed, 32 insertions, 19 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 diff --git a/pandoc-lua-engine/test/lua/module/pandoc.lua b/pandoc-lua-engine/test/lua/module/pandoc.lua index 1bb364f54..f9c58f5aa 100644 --- a/pandoc-lua-engine/test/lua/module/pandoc.lua +++ b/pandoc-lua-engine/test/lua/module/pandoc.lua @@ -490,12 +490,17 @@ return { pandoc.with_state(opts, function () end) assert.are_equal(PANDOC_STATE.user_data_dir, orig_user_data_dir) end), - test('unsupported options are ignored', function () + test('unsupported options trigger an error', function () local orig_log = PANDOC_STATE.log local opts = {log = 'nonsense'} - pandoc.with_state(opts, function () - assert.are_same(PANDOC_STATE.log, orig_log) - end) + assert.error_matches( + function () + pandoc.with_state(opts, function () + assert.are_same(PANDOC_STATE.log, orig_log) + end) + end, + "Unknown or unsupported" + ) assert.are_same(PANDOC_STATE.log, orig_log) end), }, |
