Sfoglia il codice sorgente

feature(simpleLineBreaks): parse linebreaks as <br />

This option enables linebreaks to always be treated as `<br />` tags
without needing to add spaces in front of the line, the same way GitHub does.

Closes #206
Estevao Soares dos Santos 8 anni fa
parent
commit
0942b5e87d

+ 14 - 0
README.md

@@ -262,6 +262,20 @@ var defaultOptions = showdown.getDefaultOptions();
 
  * **disableForced4SpacesIndentedSublists**: (boolean) [default false] Disables the requirement of indenting sublists by 4 spaces for them to be nested, 
  effectively reverting to the old behavior where 2 or 3 spaces were enough. (since v1.5.0)
+ 
+ * **simpleLineBreaks**: (boolean) [default false] Parses line breaks as <br> like GitHub does, without needing 2 spaces at the end of the line (since v1.5.1)
+ 
+   ```md
+   a line
+   wrapped in two
+   ```
+    
+   turns into:
+    
+   ```html
+   <p>a line<br>
+   wrapped in two</p>
+   ```
 
 ## Flavors
 

+ 16 - 4
dist/showdown.js

@@ -1,4 +1,4 @@
-;/*! showdown 25-11-2016 */
+;/*! showdown 30-11-2016 */
 (function(){
 /**
  * Created by Tivie on 13-07-2015.
@@ -82,6 +82,11 @@ function getDefaultOpts(simple) {
       defaultValue: false,
       description: 'Disables the requirement of indenting nested sublists by 4 spaces',
       type: 'boolean'
+    },
+    simpleLineBreaks: {
+      defaultValue: false,
+      description: 'Parses simple line breaks as <br> (GFM Style)',
+      type: 'boolean'
     }
   };
   if (simple === false) {
@@ -116,7 +121,8 @@ var showdown = {},
         tablesHeaderId:                       true,
         ghCodeBlocks:                         true,
         tasklists:                            true,
-        disableForced4SpacesIndentedSublists: true
+        disableForced4SpacesIndentedSublists: true,
+        simpleLineBreaks:                     true
       },
       vanilla: getDefaultOpts(true)
     };
@@ -2213,8 +2219,14 @@ showdown.subParser('spanGamut', function (text, options, globals) {
   text = showdown.subParser('italicsAndBold')(text, options, globals);
   text = showdown.subParser('strikethrough')(text, options, globals);
 
-  // Do hard breaks:
-  text = text.replace(/  +\n/g, ' <br />\n');
+  // Do hard breaks
+
+  // GFM style hard breaks
+  if (options.simpleLineBreaks) {
+    text = text.replace(/\n/g, '<br />\n');
+  } else {
+    text = text.replace(/  +\n/g, '<br />\n');
+  }
 
   text = globals.converter._dispatch('spanGamut.after', text, options, globals);
   return text;

File diff suppressed because it is too large
+ 0 - 0
dist/showdown.js.map


File diff suppressed because it is too large
+ 1 - 1
dist/showdown.min.js


File diff suppressed because it is too large
+ 0 - 0
dist/showdown.min.js.map


+ 5 - 0
src/options.js

@@ -80,6 +80,11 @@ function getDefaultOpts(simple) {
       defaultValue: false,
       description: 'Disables the requirement of indenting nested sublists by 4 spaces',
       type: 'boolean'
+    },
+    simpleLineBreaks: {
+      defaultValue: false,
+      description: 'Parses simple line breaks as <br> (GFM Style)',
+      type: 'boolean'
     }
   };
   if (simple === false) {

+ 2 - 1
src/showdown.js

@@ -18,7 +18,8 @@ var showdown = {},
         tablesHeaderId:                       true,
         ghCodeBlocks:                         true,
         tasklists:                            true,
-        disableForced4SpacesIndentedSublists: true
+        disableForced4SpacesIndentedSublists: true,
+        simpleLineBreaks:                     true
       },
       vanilla: getDefaultOpts(true)
     };

+ 8 - 2
src/subParsers/spanGamut.js

@@ -23,8 +23,14 @@ showdown.subParser('spanGamut', function (text, options, globals) {
   text = showdown.subParser('italicsAndBold')(text, options, globals);
   text = showdown.subParser('strikethrough')(text, options, globals);
 
-  // Do hard breaks:
-  text = text.replace(/  +\n/g, ' <br />\n');
+  // Do hard breaks
+
+  // GFM style hard breaks
+  if (options.simpleLineBreaks) {
+    text = text.replace(/\n/g, '<br />\n');
+  } else {
+    text = text.replace(/  +\n/g, '<br />\n');
+  }
 
   text = globals.converter._dispatch('spanGamut.after', text, options, globals);
   return text;

+ 2 - 0
test/features/#206.treat-single-line-breaks-as-br.html

@@ -0,0 +1,2 @@
+<p>a simple<br />
+wrapped line</p>

+ 2 - 0
test/features/#206.treat-single-line-breaks-as-br.md

@@ -0,0 +1,2 @@
+a simple
+wrapped line

+ 1 - 1
test/karlcow/line-break-2-spaces.html

@@ -1,2 +1,2 @@
-<p>A first sentence <br />
+<p>A first sentence<br />
 and a line break.</p>

+ 1 - 1
test/karlcow/line-break-5-spaces.html

@@ -1,2 +1,2 @@
-<p>A first sentence <br />
+<p>A first sentence<br />
 and a line break.</p>

+ 2 - 0
test/node/testsuite.features.js

@@ -35,6 +35,8 @@ describe('makeHtml() features testsuite', function () {
       converter = new showdown.Converter({simplifiedAutoLink: true});
     } else if (testsuite[i].name === 'disableForced4SpacesIndentedSublists') {
       converter = new showdown.Converter({disableForced4SpacesIndentedSublists: true});
+    } else if (testsuite[i].name === '#206.treat-single-line-breaks-as-br') {
+      converter = new showdown.Converter({simpleLineBreaks: true});
     } else {
       converter = new showdown.Converter();
     }

Some files were not shown because too many files changed in this diff