This is prompted by lierdakil/pandoc-crossref#210
Long story short, I would expect pandoc to parse (@someCitation as
[Para [Str "("
,Cite
[Citation {
citationId = "someCitation"
, citationPrefix = []
, citationSuffix = []
, citationMode = AuthorInText
, citationNoteNum = 0
, citationHash = 0
}]
[Str "@someCitation"]
]
]
This is not what actually happens though:
$ pandoc -f markdown -t native <<< '(@someCitation' yields
[Para [Str "(@someCitation"]]
I'm pretty sure the culprit is line 1414 here:
|
citeKey :: (Stream s m Char, HasLastStrPosition st) |
|
=> ParserT s st m (Bool, String) |
|
citeKey = try $ do |
|
guard =<< notAfterString |
|
suppress_author <- option False (True <$ char '-') |
|
char '@' |
|
firstChar <- alphaNum <|> char '_' <|> char '*' -- @* for wildcard in nocite |
|
let regchar = satisfy (\c -> isAlphaNum c || c == '_') |
|
let internal p = try $ p <* lookAhead regchar |
|
rest <- many $ regchar <|> internal (oneOf ":.#$%&-+?<>~/") <|> |
|
try (oneOf ":/" <* lookAhead (char '/')) |
|
let key = firstChar:rest |
|
return (suppress_author, key) |
|
|
While on topic, this also becomes an issue at least in one other place where notAfterString is used, actually. Consider this (with smart extension):
pandoc -f markdown -t native <<< "('asd')"
[Para [Str "(\8217asd\8217)"]]
when I would expect something to the tune of
[Para [Str "(",Quoted SingleQuote [Str "asd"],Str ")"]]
instead.
This is prompted by lierdakil/pandoc-crossref#210
Long story short, I would expect pandoc to parse
(@someCitationasThis is not what actually happens though:
$ pandoc -f markdown -t native <<< '(@someCitation'yieldsI'm pretty sure the culprit is line 1414 here:
pandoc/src/Text/Pandoc/Parsing.hs
Lines 1411 to 1424 in a36d202
While on topic, this also becomes an issue at least in one other place where
notAfterStringis used, actually. Consider this (withsmartextension):pandoc -f markdown -t native <<< "('asd')"when I would expect something to the tune of
instead.