aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANUAL.txt8
-rw-r--r--src/Text/Pandoc/Extensions.hs1
-rw-r--r--src/Text/Pandoc/Writers/Markdown.hs21
-rw-r--r--test/Tests/Writers/Plain.hs4
-rw-r--r--test/command/4529.md2
-rw-r--r--test/writer.plain124
6 files changed, 64 insertions, 96 deletions
diff --git a/MANUAL.txt b/MANUAL.txt
index 7e01a5002..c9ff7bea5 100644
--- a/MANUAL.txt
+++ b/MANUAL.txt
@@ -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
-----------------
diff --git a/src/Text/Pandoc/Extensions.hs b/src/Text/Pandoc/Extensions.hs
index 6cb87eef6..121b60e7b 100644
--- a/src/Text/Pandoc/Extensions.hs
+++ b/src/Text/Pandoc/Extensions.hs
@@ -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.
diff --git a/src/Text/Pandoc/Writers/Markdown.hs b/src/Text/Pandoc/Writers/Markdown.hs
index e298fafe9..fc25cde44 100644
--- a/src/Text/Pandoc/Writers/Markdown.hs
+++ b/src/Text/Pandoc/Writers/Markdown.hs
@@ -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 <> "**"
diff --git a/test/Tests/Writers/Plain.hs b/test/Tests/Writers/Plain.hs
index 2a2eb4226..b8d1f6693 100644
--- a/test/Tests/Writers/Plain.hs
+++ b/test/Tests/Writers/Plain.hs
@@ -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]
diff --git a/test/command/4529.md b/test/command/4529.md
index 4a2125b9c..4242a65c2 100644
--- a/test/command/4529.md
+++ b/test/command/4529.md
@@ -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}
diff --git a/test/writer.plain b/test/writer.plain
index 79921fa27..b8767957f 100644
--- a/test/writer.plain
+++ b/test/writer.plain
@@ -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
Here’s 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
Here’s a simple block:
foo
@@ -426,30 +397,27 @@ Hr’s:
------------------------------------------------------------------------------
+Inline Markup
+This is emphasized, and so is this.
-INLINE MARKUP
-
+This is strong, and so is this.
-This is _emphasized_, and so _is this_.
+An emphasized link.
-This is STRONG, and so IS THIS.
+This is strong and em.
-An _emphasized link_.
+So is this word.
-_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 shouldn’t 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$.
Here’s 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
Here’s a link with an ampersand in the URL.
@@ -624,7 +578,6 @@ Here’s an inline link.
Here’s 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.