Procházet zdrojové kódy

feat(allowBlockIndents): Indented inline block elements can be parsed as markdown

When the text is pulled from indented HTML elements, ex:
```
 <body>
    <div>
        ## Content to be converted
    </div>
 </body>
```
it no longer becomes wrapped in code/pre tags. A new option is also available (allowBlockIndents) that when set to false, reverts to the previous behavior
Estevão Soares dos Santos před 10 roky
rodič
revize
f6326b84e4

+ 65 - 1
dist/showdown.js

@@ -9,7 +9,8 @@
 var showdown = {},
     parsers = {},
     globalOptions = {
-        omitExtraWLInCodeBlocks: false
+        omitExtraWLInCodeBlocks: false,
+        allowBlockIndents: true
     };
 
 ///////////////////////////////////////////////////////////////////////////
@@ -246,6 +247,69 @@ showdown.helper.escapeCharactersCallback = escapeCharactersCallback;
  */
 showdown.helper.escapeCharacters = escapeCharacters;
 
+/**
+ * Credits to Christopher (https://github.com/cwalker107)
+ */
+
+/**
+ * If text is being pulled from indented HTML elements, i.e.
+ * <body>
+ *     <div>
+ *         ## Content to be converted
+ *     </div>
+ * </body>
+ */
+showdown.subParser('allowBlockIndents', function (text, config, globals) {
+    'use strict';
+
+    if (!config.allowBlockIndents) {
+        return text;
+    }
+
+    //Split the given array by it's new line characters
+    var textSplitArr = text.split('\n');
+    //We'll use this later to determine if there are leading whitespace characters
+    var leadingWhiteChars = 0;
+    var i;
+
+    for(i=0; i<=textSplitArr.length;i++) {
+        if(textSplitArr[i] !== undefined) {
+
+            // Trim all trailing whitespaces from each line
+            textSplitArr[i].replace(/[\s]*$/,'');
+
+            // roots out empty array values
+            if(textSplitArr[i].length > 0) {
+
+                // Defines this single line's leading whitespace
+                var lineLeadingWhiteChars = (textSplitArr[i].match(/^(\s)*/))[0].length;
+
+                // Determine how much the text is indented
+                // by. This fixes nesting issues and also
+                // doesn't break MarkDown syntax if code is on
+                // the first lines
+                if(leadingWhiteChars === 0 || (lineLeadingWhiteChars < leadingWhiteChars)) {
+                    if(textSplitArr[i].match(/[^\s]$/) !== null) {
+                        leadingWhiteChars = lineLeadingWhiteChars;
+                    }
+                }
+            }
+        }
+    }
+
+    // Only a regex that will replace how much it is indented by
+    var reg = '^\\s{'+leadingWhiteChars+'}';
+    for(i=0; i<=textSplitArr.length;i++) {
+        if(textSplitArr[i] !== undefined) {
+            // Replace leading indents
+            textSplitArr[i] = textSplitArr[i].replace(new RegExp(reg),'');
+        }
+    }
+    text = textSplitArr.join('\n\n'); //Join it all back together
+
+    return text;
+});
+
 /**
  * Created by Estevao on 11-01-2015.
  */

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/showdown.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/showdown.min.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/showdown.min.js.map


+ 2 - 1
src/showdown.js

@@ -6,7 +6,8 @@
 var showdown = {},
     parsers = {},
     globalOptions = {
-        omitExtraWLInCodeBlocks: false
+        omitExtraWLInCodeBlocks: false,
+        allowBlockIndents: true
     };
 
 ///////////////////////////////////////////////////////////////////////////

+ 62 - 0
src/subParsers/allowBlockIndents.js

@@ -0,0 +1,62 @@
+/**
+ * Credits to Christopher (https://github.com/cwalker107)
+ */
+
+/**
+ * If text is being pulled from indented HTML elements, i.e.
+ * <body>
+ *     <div>
+ *         ## Content to be converted
+ *     </div>
+ * </body>
+ */
+showdown.subParser('allowBlockIndents', function (text, config, globals) {
+    'use strict';
+
+    if (!config.allowBlockIndents) {
+        return text;
+    }
+
+    //Split the given array by it's new line characters
+    var textSplitArr = text.split('\n');
+    //We'll use this later to determine if there are leading whitespace characters
+    var leadingWhiteChars = 0;
+    var i;
+
+    for(i=0; i<=textSplitArr.length;i++) {
+        if(textSplitArr[i] !== undefined) {
+
+            // Trim all trailing whitespaces from each line
+            textSplitArr[i].replace(/[\s]*$/,'');
+
+            // roots out empty array values
+            if(textSplitArr[i].length > 0) {
+
+                // Defines this single line's leading whitespace
+                var lineLeadingWhiteChars = (textSplitArr[i].match(/^(\s)*/))[0].length;
+
+                // Determine how much the text is indented
+                // by. This fixes nesting issues and also
+                // doesn't break MarkDown syntax if code is on
+                // the first lines
+                if(leadingWhiteChars === 0 || (lineLeadingWhiteChars < leadingWhiteChars)) {
+                    if(textSplitArr[i].match(/[^\s]$/) !== null) {
+                        leadingWhiteChars = lineLeadingWhiteChars;
+                    }
+                }
+            }
+        }
+    }
+
+    // Only a regex that will replace how much it is indented by
+    var reg = '^\\s{'+leadingWhiteChars+'}';
+    for(i=0; i<=textSplitArr.length;i++) {
+        if(textSplitArr[i] !== undefined) {
+            // Replace leading indents
+            textSplitArr[i] = textSplitArr[i].replace(new RegExp(reg),'');
+        }
+    }
+    text = textSplitArr.join('\n\n'); //Join it all back together
+
+    return text;
+});

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů