diff options
Diffstat (limited to 'src/Text/Pandoc/Readers')
| -rw-r--r-- | src/Text/Pandoc/Readers/Markdown.hs | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/src/Text/Pandoc/Readers/Markdown.hs b/src/Text/Pandoc/Readers/Markdown.hs index 2ab61f90e..4efbd25eb 100644 --- a/src/Text/Pandoc/Readers/Markdown.hs +++ b/src/Text/Pandoc/Readers/Markdown.hs @@ -36,6 +36,7 @@ module Text.Pandoc.Readers.Markdown ( readMarkdown ) where  import Prelude  import Control.Monad  import Control.Monad.Except (throwError) +import qualified Data.ByteString.Lazy as BS  import Data.Char (isAlphaNum, isPunctuation, isSpace, toLower)  import Data.List (intercalate, sortBy, transpose, elemIndex)  import qualified Data.Map as M @@ -233,7 +234,6 @@ pandocTitleBlock = try $ do  yamlMetaBlock :: PandocMonad m => MarkdownParser m (F Blocks)  yamlMetaBlock = try $ do    guardEnabled Ext_yaml_metadata_block -  pos <- getPosition    string "---"    blankline    notFollowedBy blankline  -- if --- is followed by a blank it's an HRULE @@ -241,8 +241,13 @@ yamlMetaBlock = try $ do    -- by including --- and ..., we allow yaml blocks with just comments:    let rawYaml = unlines ("---" : (rawYamlLines ++ ["..."]))    optional blanklines -  case YAML.decodeNode' YAML.failsafeSchemaResolver False False -               (UTF8.fromStringLazy rawYaml) of +  yamlBsToMeta $ UTF8.fromStringLazy rawYaml +  return mempty + +yamlBsToMeta :: PandocMonad m => BS.ByteString -> MarkdownParser m () +yamlBsToMeta bstr = do +  pos <- getPosition +  case YAML.decodeNode' YAML.failsafeSchemaResolver False False bstr of         Right [YAML.Doc (YAML.Mapping _ hashmap)] ->           mapM_ (\(key, v) -> do                      k <- nodeToKey key @@ -271,7 +276,6 @@ yamlMetaBlock = try $ do                      logMessage $ CouldNotParseYamlMetadata                                   err' pos                      return () -  return mempty  nodeToKey :: Monad m => YAML.Node -> m Text  nodeToKey (YAML.Scalar (YAML.SStr t))       = return t | 
