Added Text.Pandoc.Readers.Native (readNative).

readNative can now read full pandoc documents, block lists, blocks,
inline lists, or inlines.  It will interpret

Str "hi"

as if it were

Pandoc (Meta [] [] []) [Plain [Str "hi"]]

This should make testing easier.
This commit is contained in:
John MacFarlane 2011-01-19 18:36:27 -08:00
parent e647f761ed
commit e1f3c6058e
3 changed files with 83 additions and 1 deletions

View file

@ -234,6 +234,7 @@ Library
Text.Pandoc.Readers.RST,
Text.Pandoc.Readers.TeXMath,
Text.Pandoc.Readers.Textile,
Text.Pandoc.Readers.Native,
Text.Pandoc.Writers.Native,
Text.Pandoc.Writers.Docbook,
Text.Pandoc.Writers.HTML,

View file

@ -114,6 +114,7 @@ import Text.Pandoc.Readers.RST
import Text.Pandoc.Readers.LaTeX
import Text.Pandoc.Readers.HTML
import Text.Pandoc.Readers.Textile
import Text.Pandoc.Readers.Native
import Text.Pandoc.Writers.Native
import Text.Pandoc.Writers.Markdown
import Text.Pandoc.Writers.RST
@ -143,7 +144,7 @@ pandocVersion = showVersion version
-- | Association list of formats and readers.
readers :: [(String, ParserState -> String -> Pandoc)]
readers = [("native" , \_ -> read)
readers = [("native" , \_ -> readNative)
,("json" , \_ -> decodeJSON)
,("markdown" , readMarkdown)
,("markdown+lhs" , \st ->

View file

@ -0,0 +1,80 @@
{-
Copyright (C) 2011 John MacFarlane <jgm@berkeley.edu>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-}
{- |
Module : Text.Pandoc.Readers.Native
Copyright : Copyright (C) 2011 John MacFarlane
License : GNU GPL, version 2 or above
Maintainer : John MacFarlane <jgm@berkeley.edu>
Stability : alpha
Portability : portable
Conversion of native 'Pandoc' formatted text to a 'Pandoc' document.
-}
module Text.Pandoc.Readers.Native ( readNative ) where
import Text.Pandoc.Definition
nullMeta :: Meta
nullMeta = Meta{ docTitle = []
, docAuthors = []
, docDate = []
}
-- | Read native formatted text and return a Pandoc document.
-- The input may be a full pandoc document, a block list, a block,
-- an inline list, or an inline. Thus, for example,
--
-- > Str "hi"
--
-- will be treated as if it were
--
-- > Pandoc (Meta [] [] []) [Plain [Str "hi"]]
--
readNative :: String -- ^ String to parse (assuming @'\n'@ line endings)
-> Pandoc
readNative s =
case reads s of
(d,_):_ -> d
[] -> Pandoc nullMeta $ readBlocks s
readBlocks :: String -> [Block]
readBlocks s =
case reads s of
(d,_):_ -> d
[] -> [readBlock s]
readBlock :: String -> Block
readBlock s =
case reads s of
(d,_):_ -> d
[] -> Plain $ readInlines s
readInlines :: String -> [Inline]
readInlines s =
case reads s of
(d,_):_ -> d
[] -> [readInline s]
readInline :: String -> Inline
readInline s =
case reads s of
(d,_):_ -> d
[] -> error "Cannot parse document"