Changed readNative to use PandocMonad.
This commit is contained in:
parent
bf8fb78389
commit
18e85f8dfb
6 changed files with 22 additions and 11 deletions
|
@ -183,7 +183,7 @@ import Text.Pandoc.Options
|
|||
import Text.Pandoc.Shared (safeRead, warn, mapLeft, pandocVersion)
|
||||
import Text.Pandoc.MediaBag (MediaBag)
|
||||
import Text.Pandoc.Error
|
||||
import Text.Pandoc.Class (PandocMonad)
|
||||
import Text.Pandoc.Class (PandocMonad, runIOorExplode)
|
||||
import Data.Aeson
|
||||
import qualified Data.ByteString.Lazy as BL
|
||||
import Data.List (intercalate)
|
||||
|
@ -243,7 +243,7 @@ mkBSReaderWithWarnings r = ByteStringReader $ \o s ->
|
|||
|
||||
-- | Association list of formats and readers.
|
||||
readers :: [(String, Reader IO)]
|
||||
readers = [ ("native" , StringReader $ \_ s -> return $ readNative s)
|
||||
readers = [ ("native" , StringReader $ \_ s -> runIOorExplode (readNative s))
|
||||
,("json" , mkStringReader readJSON )
|
||||
,("markdown" , mkStringReaderWithWarnings readMarkdownWithWarnings)
|
||||
,("markdown_strict" , mkStringReaderWithWarnings readMarkdownWithWarnings)
|
||||
|
|
|
@ -34,6 +34,7 @@ import Text.Pandoc.Definition
|
|||
import Text.Pandoc.Shared (safeRead)
|
||||
|
||||
import Text.Pandoc.Error
|
||||
import Text.Pandoc.Class
|
||||
|
||||
-- | Read native formatted text and return a Pandoc document.
|
||||
-- The input may be a full pandoc document, a block list, a block,
|
||||
|
@ -45,9 +46,11 @@ import Text.Pandoc.Error
|
|||
--
|
||||
-- > Pandoc nullMeta [Plain [Str "hi"]]
|
||||
--
|
||||
readNative :: String -- ^ String to parse (assuming @'\n'@ line endings)
|
||||
-> Either PandocError Pandoc
|
||||
readNative s = maybe (Pandoc nullMeta <$> readBlocks s) Right (safeRead s)
|
||||
readNative :: PandocMonad m
|
||||
=> String -- ^ String to parse (assuming @'\n'@ line endings)
|
||||
-> m (Either PandocError Pandoc)
|
||||
readNative s =
|
||||
return $ maybe (Pandoc nullMeta <$> readBlocks s) Right (safeRead s)
|
||||
|
||||
readBlocks :: String -> Either PandocError [Block]
|
||||
readBlocks s = maybe ((:[]) <$> readBlock s) Right (safeRead s)
|
||||
|
|
|
@ -196,7 +196,9 @@ lhsReaderTest :: String -> Test
|
|||
lhsReaderTest format =
|
||||
testWithNormalize normalizer "lhs" ["-r", format, "-w", "native"]
|
||||
("lhs-test" <.> format) norm
|
||||
where normalizer = purely $ writeNative def . normalize . handleError . readNative
|
||||
where normalizer = purely $ \nat -> do
|
||||
d <- handleError <$> readNative nat
|
||||
writeNative def $ normalize d
|
||||
norm = if format == "markdown+lhs"
|
||||
then "lhs-test-markdown.native"
|
||||
else "lhs-test.native"
|
||||
|
|
|
@ -14,6 +14,7 @@ import qualified Data.Map as M
|
|||
import Text.Pandoc.MediaBag (MediaBag, lookupMedia, mediaDirectory)
|
||||
import Codec.Archive.Zip
|
||||
import Text.Pandoc.Error
|
||||
import Text.Pandoc.Class (runIOorExplode)
|
||||
|
||||
-- We define a wrapper around pandoc that doesn't normalize in the
|
||||
-- tests. Since we do our own normalization, we want to make sure
|
||||
|
@ -43,7 +44,8 @@ compareOutput opts docxFile nativeFile = do
|
|||
df <- B.readFile docxFile
|
||||
nf <- Prelude.readFile nativeFile
|
||||
let (p, _) = handleError $ readDocx opts df
|
||||
return $ (noNorm p, noNorm (handleError $ readNative nf))
|
||||
df' <- runIOorExplode $ readNative nf
|
||||
return $ (noNorm p, noNorm $ handleError df')
|
||||
|
||||
testCompareWithOptsIO :: ReaderOptions -> String -> FilePath -> FilePath -> IO Test
|
||||
testCompareWithOptsIO opts name docxFile nativeFile = do
|
||||
|
|
|
@ -5,6 +5,7 @@ import Text.Pandoc.Options
|
|||
import Text.Pandoc.Readers.Native
|
||||
import Text.Pandoc.Readers.Markdown
|
||||
import Text.Pandoc.Definition
|
||||
import Text.Pandoc.Class (runIOorExplode)
|
||||
import Tests.Helpers
|
||||
import Test.Framework
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
|
@ -62,7 +63,8 @@ compareOdtToNative :: TestCreator
|
|||
compareOdtToNative opts odtPath nativePath = do
|
||||
nativeFile <- Prelude.readFile nativePath
|
||||
odtFile <- B.readFile odtPath
|
||||
let native = getNoNormVia id "native" $ readNative nativeFile
|
||||
native <- getNoNormVia id "native" <$>
|
||||
runIOorExplode (readNative nativeFile)
|
||||
let odt = getNoNormVia fst "odt" $ readOdt opts odtFile
|
||||
return (odt,native)
|
||||
|
||||
|
|
|
@ -21,10 +21,12 @@ compareOutput opts nativeFileIn nativeFileOut = do
|
|||
nf <- Prelude.readFile nativeFileIn
|
||||
nf' <- Prelude.readFile nativeFileOut
|
||||
let wopts = fst opts
|
||||
df <- runIOorExplode $ writeDocx wopts{writerUserDataDir = Just (".." </> "data")}
|
||||
(handleError $ readNative nf)
|
||||
df <- runIOorExplode $ do
|
||||
d <- handleError <$> readNative nf
|
||||
writeDocx wopts{writerUserDataDir = Just (".." </> "data")} d
|
||||
df' <- handleError <$> runIOorExplode (readNative nf')
|
||||
let (p, _) = handleError $ readDocx (snd opts) df
|
||||
return (p, handleError $ readNative nf')
|
||||
return (p, df')
|
||||
|
||||
testCompareWithOptsIO :: Options -> String -> FilePath -> FilePath -> IO Test
|
||||
testCompareWithOptsIO opts name nativeFileIn nativeFileOut = do
|
||||
|
|
Loading…
Add table
Reference in a new issue