Moved stateLiterateHaskell to readerLiterateHaskell in Options.

This commit is contained in:
John MacFarlane 2012-07-25 20:20:03 -07:00
parent 1dba82f25e
commit 856aa8c244
6 changed files with 39 additions and 29 deletions

View file

@ -3,6 +3,7 @@ import Text.Pandoc.Shared (readDataFile, normalize)
import Criterion.Main
import Data.List (isSuffixOf)
import Text.JSON.Generic
import Data.Default
readerBench :: Pandoc
-> (String, ParserState -> String -> Pandoc)
@ -18,10 +19,11 @@ readerBench doc (name, reader) =
getLength (Pandoc (Meta a b c) d) =
length a + length b + length c + length d
in bench (name ++ " reader") $ whnf (getLength .
reader defaultParserState{ stateSmart = True
, stateStandalone = True
, stateLiterateHaskell =
"+lhs" `isSuffixOf` name }) inp
reader def{ stateOptions = def{
readerSmart = True
, readerLiterateHaskell = "+lhs" `isSuffixOf` name
}
}) inp
writerBench :: Pandoc
-> (String, WriterOptions -> Pandoc -> String)
@ -38,7 +40,7 @@ normalizeBench doc = [ bench "normalize - with" $ nf (encodeJSON . normalize) do
main = do
inp <- readDataFile (Just ".") "README"
let ps = defaultParserState{ stateSmart = True }
let ps = defaultParserState{ stateOptions = def{ readerSmart = True }}
let doc = readMarkdown ps inp
let readerBs = map (readerBench doc) readers
let writers' = [(n,w) | (n, PureStringWriter w) <- writers]

View file

@ -93,7 +93,8 @@ tests = [ testGroup "inline code"
=?> para (note (para "See [^1]"))
]
, testGroup "lhs"
[ test (readMarkdown defaultParserState{stateLiterateHaskell = True})
[ test (readMarkdown def{stateOptions =
def{readerLiterateHaskell = True}})
"inverse bird tracks and html" $
"> a\n\n< b\n\n<div>\n"
=?> codeBlockWith ("",["sourceCode","literate","haskell"],[]) "a"

View file

@ -170,16 +170,22 @@ readers = [("native" , \_ -> readNative)
,("json" , \_ -> decodeJSON)
,("markdown" , readMarkdown)
,("markdown+lhs" , \st ->
readMarkdown st{ stateLiterateHaskell = True})
readMarkdown st{ stateOptions =
let oldopts = stateOptions st
in oldopts{ readerLiterateHaskell = True} })
,("rst" , readRST)
,("rst+lhs" , \st ->
readRST st{ stateLiterateHaskell = True})
readRST st{ stateOptions =
let oldopts = stateOptions st
in oldopts{ readerLiterateHaskell = True} })
,("docbook" , readDocBook)
,("textile" , readTextile) -- TODO : textile+lhs
,("html" , readHtml)
,("latex" , readLaTeX)
,("latex+lhs" , \st ->
readLaTeX st{ stateLiterateHaskell = True})
readLaTeX st{ stateOptions =
let oldopts = stateOptions st
in oldopts{ readerLiterateHaskell = True} })
]
data Writer = PureStringWriter (WriterOptions -> Pandoc -> String)

View file

@ -51,24 +51,26 @@ data Extension = Footnotes
deriving (Show, Read, Enum, Eq, Ord, Bounded)
data ReaderOptions = ReaderOptions{
readerExtensions :: Set Extension -- ^ Syntax extensions
, readerSmart :: Bool -- ^ Smart punctuation
, readerStrict :: Bool -- ^ FOR TRANSITION ONLY
, readerParseRaw :: Bool -- ^ Parse raw HTML, LaTeX
, readerColumns :: Int -- ^ Number of columns in terminal
, readerTabStop :: Int -- ^ Tab stop
, readerOldDashes :: Bool -- ^ Use pandoc <= 1.8.2.1 behavior
readerExtensions :: Set Extension -- ^ Syntax extensions
, readerSmart :: Bool -- ^ Smart punctuation
, readerStrict :: Bool -- ^ FOR TRANSITION ONLY
, readerParseRaw :: Bool -- ^ Parse raw HTML, LaTeX
, readerColumns :: Int -- ^ Number of columns in terminal
, readerTabStop :: Int -- ^ Tab stop
, readerOldDashes :: Bool -- ^ Use pandoc <= 1.8.2.1 behavior
-- in parsing dashes; -- is em-dash;
-- - before numerial is en-dash
, readerLiterateHaskell :: Bool -- ^ Interpret as literate Haskell
} deriving (Show, Read)
instance Default ReaderOptions
where def = ReaderOptions{
readerExtensions = Set.fromList [minBound..maxBound]
, readerSmart = False
, readerStrict = False
, readerParseRaw = False
, readerColumns = 80
, readerTabStop = 4
, readerOldDashes = False
readerExtensions = Set.fromList [minBound..maxBound]
, readerSmart = False
, readerStrict = False
, readerParseRaw = False
, readerColumns = 80
, readerTabStop = 4
, readerOldDashes = False
, readerLiterateHaskell = False
}

View file

@ -395,7 +395,7 @@ failIfStrict = getOption readerStrict >>= guard . not
-- | Fail unless we're in literate haskell mode.
failUnlessLHS :: Parsec [tok] ParserState ()
failUnlessLHS = getState >>= guard . stateLiterateHaskell
failUnlessLHS = getOption readerLiterateHaskell >>= guard
-- | Parses backslash, then applies character parser.
escaped :: Parsec [Char] st Char -- ^ Parser for character to escape
@ -698,7 +698,6 @@ data ParserState = ParserState
stateTitle :: [Inline], -- ^ Title of document
stateAuthors :: [[Inline]], -- ^ Authors of document
stateDate :: [Inline], -- ^ Date of document
stateLiterateHaskell :: Bool, -- ^ Treat input as literate haskell
stateHeaderTable :: [HeaderType], -- ^ Ordered list of header types used
stateIndentedCodeClasses :: [String], -- ^ Classes to use for indented code blocks
stateNextExample :: Int, -- ^ Number of next example
@ -726,7 +725,6 @@ defaultParserState =
stateTitle = [],
stateAuthors = [],
stateDate = [],
stateLiterateHaskell = False,
stateHeaderTable = [],
stateIndentedCodeClasses = [],
stateNextExample = 1,

View file

@ -936,9 +936,7 @@ main = do
then "."
else takeDirectory (head sources)
let startParserState = def{ stateLiterateHaskell = "+lhs" `isSuffixOf` readerName' ||
lhsExtension sources,
stateCitations = map CSL.refId refs,
let startParserState = def{ stateCitations = map CSL.refId refs,
stateOptions = def{
readerStrict = strict
, readerSmart = smart || (texLigatures &&
@ -947,6 +945,9 @@ main = do
, readerColumns = columns
, readerTabStop = tabStop
, readerOldDashes = oldDashes
, readerLiterateHaskell =
"+lhs" `isSuffixOf` readerName' ||
lhsExtension sources
},
stateIndentedCodeClasses = codeBlockClasses,
stateApplyMacros = not laTeXOutput