diff options
| author | Albert Krewinkel <[email protected]> | 2023-03-11 18:32:29 +0100 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2023-06-22 10:48:33 -0700 |
| commit | 5beb7a1b64448527d0a6e1c6adcb05c0edeee3d4 (patch) | |
| tree | 685746055fd6741b5cdc73a5f32c378c7682048b /pandoc-lua-engine | |
| parent | b07552c23f7866acc08a3faddcddd5cfb61fd124 (diff) | |
Lua: report warnings from Lua scripts
Lua's warning system is plugged into pandoc's reporting architecture.
Warnings that are raised with the Lua `warn` function are now reported
together with other messages.
Diffstat (limited to 'pandoc-lua-engine')
| -rw-r--r-- | pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs b/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs index 60d39670a..2900fea27 100644 --- a/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs +++ b/pandoc-lua-engine/src/Text/Pandoc/Lua/Init.hs @@ -23,12 +23,15 @@ import Control.Monad.Trans (MonadIO (..)) import Data.Maybe (catMaybes) import Data.Version (makeVersion) import HsLua as Lua hiding (status, try) -import Text.Pandoc.Class (PandocMonad (..)) +import Text.Pandoc.Class (PandocMonad (..), report) import Text.Pandoc.Data (readDataFile) import Text.Pandoc.Error (PandocError (PandocLuaError)) +import Text.Pandoc.Logging (LogMessage (ScriptingWarning)) import Text.Pandoc.Lua.Global (Global (..), setGlobals) import Text.Pandoc.Lua.Marshal.List (newListMetatable, pushListModule) import Text.Pandoc.Lua.PandocLua (PandocLua (..), liftPandocLua) +import Text.Parsec.Pos (newPos) +import Text.Read (readMaybe) import qualified Data.ByteString.Char8 as Char8 import qualified Data.Text as T import qualified Lua.LPeg as LPeg @@ -48,6 +51,7 @@ import qualified Text.Pandoc.Lua.Module.Template as Pandoc.Template import qualified Text.Pandoc.Lua.Module.Text as Pandoc.Text import qualified Text.Pandoc.Lua.Module.Types as Pandoc.Types import qualified Text.Pandoc.Lua.Module.Utils as Pandoc.Utils +import qualified Text.Pandoc.UTF8 as UTF8 -- | Run the Lua interpreter, using pandoc's default way of environment -- initialization. @@ -112,6 +116,7 @@ loadedModules = initLuaState :: PandocLua () initLuaState = do liftPandocLua Lua.openlibs + setWarnFunction initJsonMetatable initPandocModule installLpegSearcher @@ -232,3 +237,18 @@ defaultGlobals = do , PANDOC_STATE commonState , PANDOC_VERSION ] + +setWarnFunction :: PandocLua () +setWarnFunction = liftPandocLua . setwarnf' $ \msg -> do + -- reporting levels: + -- 0: this hook, + -- 1: userdata wrapper function for the hook, + -- 2: warn, + -- 3: function calling warn. + where' 3 + loc <- UTF8.toText <$> tostring' top + unPandocLua . report $ ScriptingWarning (UTF8.toText msg) (toSourcePos loc) + where + toSourcePos loc = (T.breakOnEnd ":" <$> T.stripSuffix ": " loc) + >>= (\(prfx, sfx) -> (,) <$> T.unsnoc prfx <*> readMaybe (T.unpack sfx)) + >>= \((source, _), line) -> Just $ newPos (T.unpack source) line 1 |
