@@ -1030,7 +1030,7 @@ noteBlock' marker = try $ do
10301030citationMarker :: Monad m => RSTParser m [Char]
10311031citationMarker = do
10321032 char '['
1033− res <- simpleReferenceName'
1033+ res <- simpleReferenceName
10341034 char ']'
10351035 return res
10361036
@@ -1039,7 +1039,7 @@ noteMarker = do
10391039 char '['
10401040 res <- many1 digit
10411041 <|>
1042− try (char '#' >> liftM ('#':) simpleReferenceName')
1042+ try (char '#' >> liftM ('#':) simpleReferenceName)
10431043 <|> count 1 (oneOf "#*")
10441044 char ']'
10451045 return res
@@ -1048,34 +1048,24 @@ noteMarker = do
10481048-- reference key
10491049--
10501050
1051−quotedReferenceName :: PandocMonad m => RSTParser m Inlines
1051+quotedReferenceName :: PandocMonad m => RSTParser m String
10521052quotedReferenceName = try $ do
10531053 char '`' >> notFollowedBy (char '`') -- `` means inline code!
1054− trimInlines . mconcat <$> many1Till inline (char '`')
1055−
1056−unquotedReferenceName :: PandocMonad m => RSTParser m Inlines
1057−unquotedReferenceName = try $ do -- `` means inline code!
1058− trimInlines . mconcat <$> many1Till inline (lookAhead $ char ':')
1054+ manyTill anyChar (char '`')
10591055
10601056-- Simple reference names are single words consisting of alphanumerics
10611057-- plus isolated (no two adjacent) internal hyphens, underscores,
10621058-- periods, colons and plus signs; no whitespace or other characters
10631059-- are allowed.
1064−simpleReferenceName' :: Monad m => ParserT [Char] st m String
1065−simpleReferenceName' = do
1060+simpleReferenceName :: Monad m => ParserT [Char] st m String
1061+simpleReferenceName = do
10661062 x <- alphaNum
10671063 xs <- many $ alphaNum
1068− <|>
1069− try (oneOf "-_:+." <* lookAhead alphaNum)
1064+ <|> try (oneOf "-_:+." <* lookAhead alphaNum)
10701065 return (x:xs)
10711066
1072−simpleReferenceName :: Monad m => ParserT [Char] st m Inlines
1073−simpleReferenceName = B.str <$> simpleReferenceName'
1074−
1075−referenceName :: PandocMonad m => RSTParser m Inlines
1076−referenceName = quotedReferenceName <|>
1077− try (simpleReferenceName <* lookAhead (char ':')) <|>
1078− unquotedReferenceName
1067+referenceName :: PandocMonad m => RSTParser m String
1068+referenceName = quotedReferenceName <|> simpleReferenceName
10791069
10801070referenceKey :: PandocMonad m => RSTParser m [Char]
10811071referenceKey = do
@@ -1123,16 +1113,17 @@ anonymousKey = try $ do
11231113 updateState $ \s -> s { stateKeys = M.insert key ((src,""), nullAttr) $
11241114 stateKeys s }
11251115
1126−stripTicks :: String -> String
1127−stripTicks = reverse . stripTick . reverse . stripTick
1128− where stripTick ('`':xs) = xs
1129− stripTick xs = xs
1130−
11311116referenceNames :: PandocMonad m => RSTParser m [String]
11321117referenceNames = do
11331118 let rn = try $ do
11341119 string ".. _"
1135− (_, ref) <- withRaw referenceName
1120+ ref <- quotedReferenceName
1121+ <|> many ( noneOf ":\n"
1122+ <|> try (char '\n' <*
1123+ string " " <*
1124+ notFollowedBy blankline)
1125+ <|> try (char ':' <* lookAhead alphaNum)
1126+ )
11361127 char ':'
11371128 return ref
11381129 first <- rn
@@ -1147,16 +1138,15 @@ regularKey = try $ do
11471138 refs <- referenceNames
11481139 src <- targetURI
11491140 guard $ not (null src)
1150− let keys = map (toKey . stripTicks) refs
1141+ let keys = map toKey refs
11511142 forM_ keys $ \key ->
11521143 updateState $ \s -> s { stateKeys = M.insert key ((src,""), nullAttr) $
11531144 stateKeys s }
11541145
11551146anchorDef :: PandocMonad m => RSTParser m [Char]
11561147anchorDef = try $ do
1157− (refs, raw) <- withRaw (try (referenceNames <* blanklines))
1158− let keys = map stripTicks refs
1159− forM_ keys $ \rawkey ->
1148+ (refs, raw) <- withRaw $ try (referenceNames <* blanklines)
1149+ forM_ refs $ \rawkey ->
11601150 updateState $ \s -> s { stateKeys =
11611151 M.insert (toKey rawkey) (('#':rawkey,""), nullAttr) $ stateKeys s }
11621152 -- keep this for 2nd round of parsing, where we'll add the divs (anchor)
@@ -1479,22 +1469,20 @@ explicitLink = try $ do
14791469 _ -> return ((src, ""), nullAttr)
14801470 return $ B.linkWith attr (escapeURI src') tit label''
14811471
1482−citationName :: PandocMonad m => RSTParser m Inlines
1472+citationName :: PandocMonad m => RSTParser m String
14831473citationName = do
14841474 raw <- citationMarker
1485− return $ B.str $ "[" ++ raw ++ "]"
1475+ return $ "[" ++ raw ++ "]"
14861476
14871477referenceLink :: PandocMonad m => RSTParser m Inlines
14881478referenceLink = try $ do
1489− (label',ref) <- withRaw (quotedReferenceName
1490− <|> simpleReferenceName
1491− <|> citationName) <*
1492− char '_'
1479+ ref <- (referenceName <|> citationName) <* char '_'
1480+ let label' = B.text ref
14931481 let isAnonKey (Key ('_':_)) = True
14941482 isAnonKey _ = False
14951483 state <- getState
14961484 let keyTable = stateKeys state
1497− key <- option (toKey $ stripTicks ref) $
1485+ key <- option (toKey ref) $
14981486 do char '_'
14991487 let anonKeys = sort $ filter isAnonKey $ M.keys keyTable
15001488 case anonKeys of