diff --git a/src/showdown.js b/src/showdown.js
index c69c378..122c27f 100644
--- a/src/showdown.js
+++ b/src/showdown.js
@@ -208,6 +208,9 @@ this.makeHtml = function(text) {
// Convert all tabs to spaces.
text = _Detab(text);
+ // Allow for indented code blocks in HTML
+ text = _AllowForBlockIndents(text);
+
// Strip any lines consisting only of spaces and tabs.
// This makes subsequent regexen easier to write, because we can
// match consecutive blank lines with /\n+/ instead of something
@@ -313,7 +316,6 @@ var _StripLinkDefinitions = function(text) {
return text;
}
-
var _HashHTMLBlocks = function(text) {
// attacklab: Double up blank lines to reduce lookaround
text = text.replace(/\n/g,"\n\n");
@@ -763,6 +765,56 @@ var writeImageTag = function(wholeMatch,m1,m2,m3,m4,m5,m6,m7) {
return result;
}
+var _AllowForBlockIndents = function(text) {
+ // If text is being pulled from indented HTML elements, i.e.
+ //
+ //
+ // ## Content to be converted
+ //
+ //
+
+ //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(new RegExp(/[\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;
+};
var _DoHeaders = function(text) {