Skip to content

Commit

Permalink
feat(allowBlockIndents): Indented inline block elements can be parsed…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
tivie committed Jan 16, 2015
1 parent f1211ac commit f6326b8
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 5 deletions.
66 changes: 65 additions & 1 deletion dist/showdown.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/showdown.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/showdown.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/showdown.min.js.map

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion src/showdown.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
var showdown = {},
parsers = {},
globalOptions = {
omitExtraWLInCodeBlocks: false
omitExtraWLInCodeBlocks: false,
allowBlockIndents: true
};

///////////////////////////////////////////////////////////////////////////
Expand Down
62 changes: 62 additions & 0 deletions src/subParsers/allowBlockIndents.js
Original file line number Diff line number Diff line change
@@ -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;
});

0 comments on commit f6326b8

Please sign in to comment.