summaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Readers/Haddock.hs
diff options
context:
space:
mode:
authorDavid Lazar <lazar6@illinois.edu>2013-03-28 14:53:10 -0700
committerDavid Lazar <lazar6@illinois.edu>2013-03-28 14:53:10 -0700
commit18459b95bab91b2a1d59e888045d555494d94bc8 (patch)
tree1974f9b339f37f9bdb90e309388ef5a436f7bcfe /src/Text/Pandoc/Readers/Haddock.hs
parentee0fc19bc54208c5d8828eab872e3bbe303c47bf (diff)
Add reader for Haddock markup based on Haddock's own lexer/parser.
Diffstat (limited to 'src/Text/Pandoc/Readers/Haddock.hs')
-rw-r--r--src/Text/Pandoc/Readers/Haddock.hs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Readers/Haddock.hs b/src/Text/Pandoc/Readers/Haddock.hs
new file mode 100644
index 000000000..49154b0ca
--- /dev/null
+++ b/src/Text/Pandoc/Readers/Haddock.hs
@@ -0,0 +1,39 @@
+{- |
+ Module : Text.Pandoc.Readers.Haddock
+ Copyright : Copyright (C) 2013 David Lazar
+ License : GNU GPL, version 2 or above
+
+ Maintainer : David Lazar <lazar6@illinois.edu>
+ Stability : alpha
+
+Conversion of Haddock markup to 'Pandoc' document.
+-}
+module Text.Pandoc.Readers.Haddock
+ ( readHaddock
+ ) where
+
+import Text.Pandoc.Builder
+import Text.Pandoc.Options
+import Text.Pandoc.Readers.Haddock.Lex
+import Text.Pandoc.Readers.Haddock.Parse
+
+-- | Parse Haddock markup and return a 'Pandoc' document.
+readHaddock :: ReaderOptions -- ^ Reader options
+ -> String -- ^ String to parse
+ -> Pandoc
+readHaddock _ s = Pandoc (Meta [] [] []) blocks
+ where
+ blocks = case parseParas (tokenise s (0,0)) of
+ Nothing -> []
+ Just x -> mergeLists (toList x)
+
+-- similar to 'docAppend' in Haddock.Doc
+mergeLists :: [Block] -> [Block]
+mergeLists (BulletList xs : BulletList ys : blocks)
+ = mergeLists (BulletList (xs ++ ys) : blocks)
+mergeLists (OrderedList _ xs : OrderedList a ys : blocks)
+ = mergeLists (OrderedList a (xs ++ ys) : blocks)
+mergeLists (DefinitionList xs : DefinitionList ys : blocks)
+ = mergeLists (DefinitionList (xs ++ ys) : blocks)
+mergeLists (x : blocks) = x : mergeLists blocks
+mergeLists [] = []