{-# LANGUAGE ScopedTypeVariables, FlexibleInstances #-}{-
Copyright (C) 2006-2010 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
Copyright : Copyright (C) 2006-2010 John MacFarlane
License : GNU GPL, version 2 or above
Maintainer : John MacFarlane <jgm@berkeley.edu>
Stability : alpha
Portability : portable
This helper module exports the main writers, readers, and data
structure definitions from the Pandoc libraries.
A typical application will chain together a reader and a writer
to convert strings from one format to another. For example, the
following simple program will act as a filter converting markdown
fragments to reStructuredText, using reference-style links instead of
inline links:
> module Main where
> import Text.Pandoc
> -- include the following two lines only if you're using ghc < 6.12:
> import Prelude hiding (getContents, putStrLn)
> import System.IO.UTF8
>
> markdownToRST :: String -> String
> markdownToRST =
> (writeRST defaultWriterOptions {writerReferenceLinks = True}) .
> readMarkdown defaultParserState
>
> main = getContents >>= putStrLn . markdownToRST
Note: all of the readers assume that the input text has @'\n'@
line endings. So if you get your input text from a web form,
you should remove @'\r'@ characters using @filter (/='\r')@.
-}moduleText.Pandoc(-- * DefinitionsmoduleText.Pandoc.Definition-- * Generics,moduleText.Pandoc.Generic-- * Lists of readers and writers,readers,writers-- * Readers: converting /to/ Pandoc format,readMarkdown,readRST,readLaTeX,readHtml,readTextile,readNative-- * Parser state used in readers,ParserState(..),defaultParserState,ParserContext(..),QuoteContext(..),KeyTable,NoteTable,HeaderType(..)-- * Writers: converting /from/ Pandoc format,writeNative,writeMarkdown,writePlain,writeRST,writeLaTeX,writeConTeXt,writeTexinfo,writeHtml,writeHtmlString,writeDocbook,writeOpenDocument,writeMan,writeMediaWiki,writeTextile,writeRTF,writeODT,writeDocx,writeEPUB,writeOrg,writeAsciiDoc-- * Writer options used in writers ,WriterOptions(..),HTMLSlideVariant(..),HTMLMathMethod(..),CiteMethod(..),defaultWriterOptions-- * Rendering templates and default templates,moduleText.Pandoc.Templates-- * Version,pandocVersion-- * Miscellaneous,rtfEmbedImage,jsonFilter,ToJsonFilter(..))whereimportText.Pandoc.DefinitionimportText.Pandoc.GenericimportText.Pandoc.Readers.MarkdownimportText.Pandoc.Readers.RSTimportText.Pandoc.Readers.LaTeXimportText.Pandoc.Readers.HTMLimportText.Pandoc.Readers.TextileimportText.Pandoc.Readers.NativeimportText.Pandoc.Writers.NativeimportText.Pandoc.Writers.MarkdownimportText.Pandoc.Writers.RSTimportText.Pandoc.Writers.LaTeXimportText.Pandoc.Writers.ConTeXtimportText.Pandoc.Writers.TexinfoimportText.Pandoc.Writers.HTMLimportText.Pandoc.Writers.ODTimportText.Pandoc.Writers.DocximportText.Pandoc.Writers.EPUBimportText.Pandoc.Writers.DocbookimportText.Pandoc.Writers.OpenDocumentimportText.Pandoc.Writers.ManimportText.Pandoc.Writers.RTFimportText.Pandoc.Writers.MediaWikiimportText.Pandoc.Writers.TextileimportText.Pandoc.Writers.OrgimportText.Pandoc.Writers.AsciiDocimportText.Pandoc.TemplatesimportText.Pandoc.ParsingimportText.Pandoc.SharedimportData.Version(showVersion)importText.JSON.GenericimportPaths_pandoc(version)-- | Version number of pandoc library.pandocVersion::StringpandocVersion=showVersionversion-- | Association list of formats and readers.readers::[(String,ParserState->String->Pandoc)]readers=[("native",\_->readNative),("json",\_->decodeJSON),("markdown",readMarkdown),("markdown+lhs",\st->readMarkdownst{stateLiterateHaskell=True}),("rst",readRST),("rst+lhs",\st->readRSTst{stateLiterateHaskell=True}),("textile",readTextile)-- TODO : textile+lhs ,("html",readHtml),("latex",readLaTeX),("latex+lhs",\st->readLaTeXst{stateLiterateHaskell=True})]-- | Association list of formats and writers (omitting the-- binary writers, odt, docx, and epub).writers::[(String,WriterOptions->Pandoc->String)]writers=[("native",writeNative),("json",\_->encodeJSON),("html",writeHtmlString),("html5",\o->writeHtmlStringo{writerHtml5=True}),("html+lhs",\o->writeHtmlStringo{writerLiterateHaskell=True}),("html5+lhs",\o->writeHtmlStringo{writerLiterateHaskell=True,writerHtml5=True}),("s5",writeHtmlString),("slidy",writeHtmlString),("dzslides",writeHtmlString),("docbook",writeDocbook),("opendocument",writeOpenDocument),("latex",writeLaTeX),("latex+lhs",\o->writeLaTeXo{writerLiterateHaskell=True}),("beamer",\o->writeLaTeXo{writerBeamer=True}),("context",writeConTeXt),("texinfo",writeTexinfo),("man",writeMan),("markdown",writeMarkdown),("markdown+lhs",\o->writeMarkdowno{writerLiterateHaskell=True}),("plain",writePlain),("rst",writeRST),("rst+lhs",\o->writeRSTo{writerLiterateHaskell=True}),("mediawiki",writeMediaWiki),("textile",writeTextile),("rtf",writeRTF),("org",writeOrg),("asciidoc",writeAsciiDoc)]{-# DEPRECATED jsonFilter "Use toJsonFilter instead" #-}-- | Converts a transformation on the Pandoc AST into a function-- that reads and writes a JSON-encoded string. This is useful-- for writing small scripts.jsonFilter::(Pandoc->Pandoc)->String->StringjsonFilterf=encodeJSON.f.decodeJSON-- | 'toJsonFilter' convert a function into a filter that reads pandoc's json output-- from stdin, transforms it by walking the AST and applying the specified-- function, and writes the result as json to stdout. Usage example:---- > -- capitalize.hs-- > -- compile with: ghc --make capitalize-- > -- run with: pandoc -t json | ./capitalize | pandoc -f json-- >-- > import Text.Pandoc-- > import Data.Char (toUpper)-- >-- > main :: IO ()-- > main = toJsonFilter capitalizeStrings-- >-- > capitalizeStrings :: Inline -> Inline-- > capitalizeStrings (Str s) = Str $ map toUpper s-- > capitalizeStrings x = x---- The function can be any type @(a -> a)@, @(a -> IO a)@, @(a -> [a])@,-- or @(a -> IO [a])@, where @a@ is an instance of 'Data'.-- So, for example, @a@ can be 'Pandoc', 'Inline', 'Block', ['Inline'],-- ['Block'], 'Meta', 'ListNumberStyle', 'Alignment', 'ListNumberDelim',-- 'QuoteType', etc. See 'Text.Pandoc.Definition'.classToJsonFilterawheretoJsonFilter::a->IO()instance(Dataa)=>ToJsonFilter(a->a)wheretoJsonFilterf=getContents>>=putStr.encodeJSON.(bottomUpf::Pandoc->Pandoc).decodeJSONinstance(Dataa)=>ToJsonFilter(a->IOa)wheretoJsonFilterf=getContents>>=(bottomUpMf::Pandoc->IOPandoc).decodeJSON>>=putStr.encodeJSONinstance(Dataa)=>ToJsonFilter(a->[a])wheretoJsonFilterf=getContents>>=putStr.encodeJSON.(bottomUp(concatMapf)::Pandoc->Pandoc).decodeJSONinstance(Dataa)=>ToJsonFilter(a->IO[a])wheretoJsonFilterf=getContents>>=(bottomUpM(fmapconcat.mapMf)::Pandoc->IOPandoc).decodeJSON>>=putStr.encodeJSON