Make plain output plainer.

Previously we used the following Project Gutenberg conventions
for plain output:

- extra space before and after level 1 and 2 headings
- all-caps for strong emphasis `LIKE THIS`
- underscores surrounding regular emphasis `_like this_`

This commit makes `plain` output plainer. Strong and Emph
inlines are rendered without special formatting.  Headings
are also rendered without special formatting, and with only
one blank line following.

To restore the former behavior, use `-t plain+gutenberg`.

API change: Add `Ext_gutenberg` constructor to `Extension`.

See #5741.
This commit is contained in:
John MacFarlane 2019-09-22 10:57:48 -07:00
parent a9d106d1d1
commit d247e9f72e
6 changed files with 64 additions and 96 deletions

View file

@ -4544,6 +4544,14 @@ in several respects:
we must either disallow lazy wrapping or require a blank line between
list items.
#### Extension: `gutenberg` ####
Use [Project Gutenberg] conventions for `plain` output:
all-caps for strong emphasis, surround by underscores
for regular emphasis, add extra blank space around headings.
[Project Gutenberg]: https://www.gutenberg.org
Markdown variants
-----------------

View file

@ -155,6 +155,7 @@ data Extension =
| Ext_tex_math_double_backslash -- ^ TeX math btw \\(..\\) \\[..\\]
| Ext_tex_math_single_backslash -- ^ TeX math btw \(..\) \[..\]
| Ext_yaml_metadata_block -- ^ YAML metadata block
| Ext_gutenberg -- ^ Use Project Gutenberg conventions for plain
deriving (Show, Read, Enum, Eq, Ord, Bounded, Data, Typeable, Generic)
-- | Extensions to be used with pandoc-flavored markdown.

View file

@ -523,16 +523,22 @@ blockToMarkdown' opts (Header level attr inlines) = do
contents <- inlineListToMarkdown opts $
-- ensure no newlines; see #3736
walk lineBreakToSpace $
if level == 1 && plain
if level == 1 && plain && isEnabled Ext_gutenberg opts
then capitalize inlines
else inlines
let setext = writerSetextHeaders opts
hdr = nowrap $ case level of
1 | plain -> blanklines 3 <> contents <> blanklines 2
1 | plain ->
if isEnabled Ext_gutenberg opts
then blanklines 3 <> contents <> blanklines 2
else contents <> blankline
| setext ->
contents <> attr' <> cr <> text (replicate (offset contents) '=') <>
blankline
2 | plain -> blanklines 2 <> contents <> blankline
2 | plain ->
if isEnabled Ext_gutenberg opts
then blanklines 2 <> contents <> blankline
else contents <> blankline
| setext ->
contents <> attr' <> cr <> text (replicate (offset contents) '-') <>
blankline
@ -1036,13 +1042,18 @@ inlineToMarkdown opts (Emph lst) = do
plain <- asks envPlain
contents <- inlineListToMarkdown opts lst
return $ if plain
then "_" <> contents <> "_"
then if isEnabled Ext_gutenberg opts
then "_" <> contents <> "_"
else contents
else "*" <> contents <> "*"
inlineToMarkdown _ (Strong []) = return empty
inlineToMarkdown opts (Strong lst) = do
plain <- asks envPlain
if plain
then inlineListToMarkdown opts $ capitalize lst
then inlineListToMarkdown opts $
if isEnabled Ext_gutenberg opts
then capitalize lst
else lst
else do
contents <- inlineListToMarkdown opts lst
return $ "**" <> contents <> "**"

View file

@ -13,7 +13,9 @@ import Text.Pandoc.Builder
infix 4 =:
(=:) :: (ToString a, ToPandoc a)
=> String -> (a, String) -> TestTree
(=:) = test (purely (writePlain def) . toPandoc)
(=:) = test (purely (writePlain def{ writerExtensions =
enableExtension Ext_gutenberg plainExtensions }) .
toPandoc)
tests :: [TestTree]

View file

@ -1,5 +1,5 @@
```
% pandoc -f latex -t plain
% pandoc -f latex -t plain+gutenberg
\chapter{First chapter}\label{sec:chp1}
The next chapter is Chapter~\ref{sec:chp2}.
\section{First section}\label{sec:chp1sec1}

View file

@ -7,41 +7,31 @@ markdown test suite.
------------------------------------------------------------------------------
HEADERS
Headers
Level 2 with an embedded link
Level 3 with _emphasis_
Level 3 with emphasis
Level 4
Level 5
Level 1
LEVEL 1
Level 2 with _emphasis_
Level 2 with emphasis
Level 3
with no blank line
Level 2
with no blank line
------------------------------------------------------------------------------
PARAGRAPHS
Paragraphs
Heres a regular paragraph.
@ -56,10 +46,7 @@ here.
------------------------------------------------------------------------------
BLOCK QUOTES
Block Quotes
E-mail style:
@ -88,10 +75,7 @@ And a following paragraph.
------------------------------------------------------------------------------
CODE BLOCKS
Code Blocks
Code:
@ -111,10 +95,7 @@ And:
------------------------------------------------------------------------------
LISTS
Lists
Unordered
@ -160,7 +141,6 @@ Minuses loose:
- Minus 3
Ordered
Tight:
@ -201,7 +181,6 @@ Multiple paragraphs:
3. Item 3.
Nested
- Tab
@ -229,7 +208,6 @@ Same thing but with paragraphs:
3. Third
Tabs and spaces
- this is a list item indented with tabs
@ -240,7 +218,6 @@ Tabs and spaces
- this is an example list item indented with spaces
Fancy list markers
(2) begins with 2
@ -275,10 +252,7 @@ B. Williams
------------------------------------------------------------------------------
DEFINITION LISTS
Definition Lists
Tight using spaces:
@ -318,13 +292,13 @@ banana
Multiple blocks with italics:
_apple_
apple
red fruit
contains seeds, crisp, pleasant to taste
_orange_
orange
orange fruit
@ -371,10 +345,7 @@ orange
1. sublist
2. sublist
HTML BLOCKS
HTML Blocks
Simple block on one line:
@ -388,8 +359,8 @@ bar
Interpreted markdown in a table:
This is _emphasized_
And this is STRONG
This is emphasized
And this is strong
Heres a simple block:
foo
@ -426,30 +397,27 @@ Hrs:
------------------------------------------------------------------------------
Inline Markup
This is emphasized, and so is this.
INLINE MARKUP
This is strong, and so is this.
An emphasized link.
This is _emphasized_, and so _is this_.
This is strong and em.
This is STRONG, and so IS THIS.
So is this word.
An _emphasized link_.
This is strong and em.
_THIS IS STRONG AND EM._
So is _THIS_ word.
_THIS IS STRONG AND EM._
So is _THIS_ word.
So is this word.
This is code: >, $, \, \$, <html>.
~~This is _strikeout_.~~
~~This is strikeout.~~
Superscripts: a^(bc)d a^(_hello_) a^(hello there).
Superscripts: a^(bc)d a^(hello) a^(hello there).
Subscripts: H₂O, H₂₃O, H_(many of them)O.
@ -458,10 +426,7 @@ spaces: a^b c^d, a~b c~d.
------------------------------------------------------------------------------
SMART QUOTES, ELLIPSES, DASHES
Smart quotes, ellipses, dashes
“Hello,” said the spider. “Shelob is my name.”
@ -481,10 +446,7 @@ Ellipses…and…and….
------------------------------------------------------------------------------
LATEX
LaTeX
-
- 2+2=4
@ -499,19 +461,16 @@ LATEX
These shouldnt be math:
- To get the famous equation, write $e = mc^2$.
- $22,000 is a _lot_ of money. So is $34,000. (It worked if “lot” is
- $22,000 is a lot of money. So is $34,000. (It worked if “lot” is
emphasized.)
- Shoes ($20) and socks ($5).
- Escaped $: $73 _this should be emphasized_ 23$.
- Escaped $: $73 this should be emphasized 23$.
Heres a LaTeX table:
------------------------------------------------------------------------------
SPECIAL CHARACTERS
Special Characters
Here is some unicode:
@ -565,10 +524,7 @@ Minus: -
------------------------------------------------------------------------------
LINKS
Links
Explicit
@ -590,7 +546,6 @@ Email link
Empty.
Reference
Foo bar.
@ -613,7 +568,6 @@ Foo bar.
Foo biz.
With ampersands
Heres a link with an ampersand in the URL.
@ -624,7 +578,6 @@ Heres an inline link.
Heres an inline link in pointy braces.
Autolinks
With an ampersand: http://example.com/?foo=1&bar=2
@ -643,10 +596,7 @@ Auto-links should not occur here: <http://example.com/>
------------------------------------------------------------------------------
IMAGES
Images
From “Voyage dans la Lune” by Georges Melies (1902):
@ -656,14 +606,10 @@ Here is a movie [movie] icon.
------------------------------------------------------------------------------
Footnotes
FOOTNOTES
Here is a footnote reference,[1] and another.[2] This should _not_ be a
footnote reference, because it contains a space.[^my note] Here is an inline
note.[3]
Here is a footnote reference,[1] and another.[2] This should not be a footnote
reference, because it contains a space.[^my note] Here is an inline note.[3]
Notes can go in quotes.[4]
@ -684,7 +630,7 @@ with list items).
If you want, you can indent every line, but you can also be lazy and just
indent the first line of each block.
[3] This is _easier_ to type. Inline notes may contain links and ] verbatim
[3] This is easier to type. Inline notes may contain links and ] verbatim
characters, as well as [bracketed text].
[4] In quote.