aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Readers/Org.hs17
-rw-r--r--tests/Tests/Readers/Org.hs26
2 files changed, 39 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Readers/Org.hs b/src/Text/Pandoc/Readers/Org.hs
index 6652925aa..20bca3e28 100644
--- a/src/Text/Pandoc/Readers/Org.hs
+++ b/src/Text/Pandoc/Readers/Org.hs
@@ -383,7 +383,10 @@ restOfLine = mconcat <$> manyTill inline newline
--
list :: OrgParser Blocks
-list = choice [ bulletList, orderedList ] <?> "list"
+list = choice [ definitionList, bulletList, orderedList ] <?> "list"
+
+definitionList :: OrgParser Blocks
+definitionList = B.definitionList <$> many1 (definitionListItem bulletListStart)
bulletList :: OrgParser Blocks
bulletList = B.bulletList . compactify' <$> many1 (listItem bulletListStart)
@@ -407,6 +410,18 @@ orderedListStart = genericListStart orderedListMarker
-- Ordered list markers allowed in org-mode
where orderedListMarker = mappend <$> many1 digit <*> (pure <$> oneOf ".)")
+definitionListItem :: OrgParser Int
+ -> OrgParser (Inlines, [Blocks])
+definitionListItem parseMarkerGetLength = try $ do
+ markerLength <- parseMarkerGetLength
+ term <- manyTill (noneOf "\n\r") (try $ string "::")
+ first <- anyLineNewline
+ cont <- concat <$> many (listContinuation markerLength)
+ term' <- parseFromString inline term
+ contents' <- parseFromString parseBlocks $ first ++ cont
+ return (term', [contents'])
+
+
-- parse raw text for one list item, excluding start marker and continuations
listItem :: OrgParser Int
-> OrgParser Blocks
diff --git a/tests/Tests/Readers/Org.hs b/tests/Tests/Readers/Org.hs
index 1088d6611..eb9f4d741 100644
--- a/tests/Tests/Readers/Org.hs
+++ b/tests/Tests/Readers/Org.hs
@@ -43,8 +43,8 @@ tests =
para (strong "Cider")
, "Strong Emphasis" =:
- "/*strength*/" =?>
- para (emph . strong $ "strength")
+ "/*strength*/" =?>
+ para (emph . strong $ "strength")
, "Strikeout" =:
"+Kill Bill+" =?>
@@ -428,7 +428,27 @@ tests =
, "Bullet List in Ordered List" =:
("1. GNU\n" ++
" - Freedom\n") =?>
- orderedList [ (para "GNU") <> bulletList [ (plain "Freedom") ] ]
+ orderedList [ (para "GNU") <> bulletList [ (plain "Freedom") ] ]
+
+ , "Definition List" =:
+ unlines [ "- PLL :: phase-locked loop"
+ , "- TTL ::"
+ , " transistor-transistor logic"
+ , "- PSK::phase-shift keying"
+ , ""
+ , " a digital modulation scheme"
+ ] =?>
+ definitionList [ ("PLL", [ plain $ "phase-locked" <> space <> "loop" ])
+ , ("TTL", [ plain $ "transistor-transistor" <> space <>
+ "logic" ])
+ , ("PSK", [ mconcat
+ [ para $ "phase-shift" <> space <> "keying"
+ , plain $ spcSep [ "a", "digital"
+ , "modulation", "scheme" ]
+ ]
+ ]
+ )
+ ]
]
, testGroup "Tables"