Skip to content

Commit

Permalink
Markdown reader: Fix awkward soft break movements before abbreviations.
Browse files Browse the repository at this point in the history
Closes #4635.
  • Loading branch information
jgm committed Oct 14, 2018
1 parent 2bc429a commit cf82240
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 6 deletions.
15 changes: 10 additions & 5 deletions src/Text/Pandoc/Readers/Markdown.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1717,19 +1717,24 @@ nonEndline = satisfy (/='\n')

str :: PandocMonad m => MarkdownParser m (F Inlines)
str = do
canRelocateSpace <- notAfterString
result <- many1 (alphaNum <|> try (char '.' <* notFollowedBy (char '.')))
updateLastStrPos
(do guardEnabled Ext_smart
abbrevs <- getOption readerAbbreviations
if not (null result) && last result == '.' && result `Set.member` abbrevs
then try (do ils <- whitespace <|> endline
lookAhead alphaNum
-- ?? lookAhead alphaNum
-- replace space after with nonbreaking space
-- if softbreak, move before abbrev if possible (#4635)
return $ do
ils' <- ils
if ils' == B.space
then return (B.str result <> B.str "\160")
else -- linebreak or softbreak
return (ils' <> B.str result <> B.str "\160"))
case B.toList ils' of
[Space] ->
return (B.str result <> B.str "\160")
[SoftBreak] | canRelocateSpace ->
return (ils' <> B.str result <> B.str "\160")
_ -> return (B.str result <> ils'))
<|> return (return (B.str result))
else return (return (B.str result)))
<|> return (return (B.str result))
Expand Down
31 changes: 31 additions & 0 deletions test/command/4635.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
```
% pandoc -f markdown -t native
(cf.
foo)
^D
[Para [Str "(cf.",SoftBreak,Str "foo)"]]
```

```
% pandoc -f markdown -t native
a (cf.
foo)
^D
[Para [Str "a",Space,Str "(cf.",SoftBreak,Str "foo)"]]
```

```
% pandoc -f markdown -t native
cf.
foo
^D
[Para [Str "cf.\160foo"]]
```

```
% pandoc -f markdown -t native
a cf.
foo
^D
[Para [Str "a",SoftBreak,Str "cf.\160foo"]]
```
2 changes: 1 addition & 1 deletion test/markdown-citations.native
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@
,[Para [Str "Citation",Space,Str "with",Space,Str "a",Space,Str "suffix",Space,Str "and",Space,Str "locator",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "pp.\160\&33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@item1",Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else]"],Str "."]]
,[Para [Str "Citation",Space,Str "with",Space,Str "suffix",Space,Str "only",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@item1",Space,Str "and",Space,Str "nowhere",Space,Str "else]"],Str "."]]
,[Para [Str "Now",Space,Str "some",Space,Str "modifiers.",Note [Para [Str "Like",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "author:",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0}] [Str "[-@item1]"],Str ",",Space,Str "and",Space,Str "now",Space,Str "Doe",Space,Str "with",Space,Str "a",Space,Str "locator",Space,Cite [Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.\160\&44"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0}] [Str "[-@item2",Space,Str "p.",Space,Str "44]"],Str "."]]]]
,[Para [Str "With",Space,Str "some",Space,Str "markup",Space,Cite [Citation {citationId = "item1", citationPrefix = [Emph [Str "see"]], citationSuffix = [Space,Str "p.",Space,Strong [Str "32"]], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[*see*",Space,Str "@item1",Space,Str "p.",Space,Str "**32**]"],Str "."]]]
,[Para [Str "With",Space,Str "some",Space,Str "markup",Space,Cite [Citation {citationId = "item1", citationPrefix = [Emph [Str "see"]], citationSuffix = [Space,Str "p.\160",Strong [Str "32"]], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[*see*",Space,Str "@item1",Space,Str "p.",Space,Str "**32**]"],Str "."]]]
,Header 1 ("references",[],[]) [Str "References"]]

0 comments on commit cf82240

Please sign in to comment.