فهرست منبع

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 10 سال پیش
والد
کامیت
f6326b84e4
6فایلهای تغییر یافته به همراه129 افزوده شده و 2 حذف شده
  1. 65 1
      dist/showdown.js
  2. 0 0
      dist/showdown.js.map
  3. 0 0
      dist/showdown.min.js
  4. 0 0
      dist/showdown.min.js.map
  5. 2 1
      src/showdown.js
  6. 62 0
      src/subParsers/allowBlockIndents.js

+ 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.
  */

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/showdown.js.map


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
dist/showdown.min.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 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;
+});

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است