git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #1290 from tarleb/fix-header-params

Org reader: Fix block parameter reader, relax constraints

commit12d0dcffe8c91a0cb4ed78741eef6c205116e014 authorJohn MacFarlane <jgm@berkeley.edu> dateSat 10 May 2014, 14:57 (12 years ago) parent884693fc5fd631
2 files changed+25−6
src/Text/Pandoc/Readers/Org.hs+13−6 tests/Tests/Readers/Org.hs+12
src/Text/Pandoc/Readers/Org.hs+13−6
@@ -318,7 +318,7 @@ blockHeaderStart :: OrgParser (Int, String)
318318blockHeaderStart = try $ (,) <$> indent <*> blockType
319319 where
320320 indent = length <$> many spaceChar
321− blockType = map toLower <$> (stringAnyCase "#+begin_" *> many orgArgWordChar)
321+ blockType = map toLower <$> (stringAnyCase "#+begin_" *> orgArgWord)
322322
323323withRaw' :: (String -> F Blocks) -> BlockProperties -> OrgParser (F Blocks)
324324withRaw' f blockProp = (ignHeaders *> (f <$> rawBlockContent blockProp))
@@ -422,16 +422,23 @@ rundocBlockClass :: String
422422rundocBlockClass = rundocPrefix ++ "block"
423423
424424blockOption :: OrgParser (String, String)
425−blockOption = try $ (,) <$> orgArgKey <*> orgArgValue
425+blockOption = try $ (,) <$> orgArgKey <*> orgParamValue
426+
427+inlineBlockOption :: OrgParser (String, String)
428+inlineBlockOption = try $ (,) <$> orgArgKey <*> orgInlineParamValue
426429
427430orgArgKey :: OrgParser String
428431orgArgKey = try $
429432 skipSpaces *> char ':'
430433 *> many1 orgArgWordChar
431434
432−orgArgValue :: OrgParser String
433−orgArgValue = try $
434− skipSpaces *> many1 orgArgWordChar <* skipSpaces
435+orgParamValue :: OrgParser String
436+orgParamValue = try $
437+ skipSpaces *> many1 (noneOf "\t\n\r ") <* skipSpaces
438+
439+orgInlineParamValue :: OrgParser String
440+orgInlineParamValue = try $
441+ skipSpaces *> many1 (noneOf "\t\n\r ]") <* skipSpaces
435442
436443orgArgWordChar :: OrgParser Char
437444orgArgWordChar = alphaNum <|> oneOf "-_"
@@ -1067,7 +1074,7 @@ inlineCodeBlock :: OrgParser (F Inlines)
10671074inlineCodeBlock = try $ do
10681075 string "src_"
10691076 lang <- many1 orgArgWordChar
1070− opts <- option [] $ enclosedByPair '[' ']' blockOption
1077+ opts <- option [] $ enclosedByPair '[' ']' inlineBlockOption
10711078 inlineCode <- enclosedByPair '{' '}' (noneOf "\n\r")
10721079 let attrClasses = [translateLang lang, rundocBlockClass]
10731080 let attrKeyVal = map toRundocAttrib (("language", lang) : opts)
tests/Tests/Readers/Org.hs+12
@@ -929,5 +929,17 @@ tests =
929929 , "#+end_html"
930930 ] =?>
931931 rawBlock "html" "\n<span>boring</span>\n\n"
932+
933+ , "Non-letter chars in source block parameters" =:
934+ unlines [ "#+BEGIN_SRC C :tangle xxxx.c :city Zürich"
935+ , "code body"
936+ , "#+END_SRC"
937+ ] =?>
938+ let classes = [ "c", "rundoc-block" ]
939+ params = [ ("rundoc-language", "C")
940+ , ("rundoc-tangle", "xxxx.c")
941+ , ("rundoc-city", "Zürich")
942+ ]
943+ in codeBlockWith ( "", classes, params) "code body\n"
932944 ]
933945 ]