mirror of
https://github.com/jgm/pandoc.git
synced 2026-08-28 17:20:47 +08:00
Lua: let pandoc.with_state error on unknown options
Unknown or unsupported options now cause the `pandoc.with_state` function to fail. Closes: #11376
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user