2015-09-17 20:51:32 -04:00
|
|
|
module.exports = function(encodeCodeBlock) {
|
|
|
|
// var MIXIN_PATTERN = /\S*\+\S*\(.*/;
|
|
|
|
return {
|
|
|
|
name: 'indentForMarkdown',
|
|
|
|
process: function (str, width ) {
|
|
|
|
if(str == null || str.length === 0) {
|
|
|
|
return '';
|
|
|
|
}
|
|
|
|
width = width || 4;
|
|
|
|
|
|
|
|
var lines = str.split('\n');
|
|
|
|
var newLines = [];
|
|
|
|
var sp = spaces(width);
|
|
|
|
var spMixin = spaces(width - 2);
|
|
|
|
var isAfterMarkdownTag = true;
|
|
|
|
lines.forEach(function(line) {
|
|
|
|
// indent lines that match mixin pattern by 2 less than specified width
|
|
|
|
if (line.indexOf('{@example') >= 0) {
|
|
|
|
if (isAfterMarkdownTag) {
|
|
|
|
// happens if example follows example
|
|
|
|
if (newLines.length > 0) {
|
|
|
|
newLines.pop();
|
|
|
|
} else {
|
|
|
|
// wierd case - first expression in str is an @example
|
|
|
|
// in this case the :markdown appear above the str passed in,
|
|
|
|
// so we need to put 'something' into the markdown tag.
|
|
|
|
newLines.push(sp + "."); // '.' is a dummy char
|
|
|
|
}
|
|
|
|
}
|
|
|
|
newLines.push(spMixin + line);
|
|
|
|
// after a mixin line we need to reenter markdown.
|
|
|
|
newLines.push(spMixin + ':markdown');
|
|
|
|
isAfterMarkdownTag = true;
|
|
|
|
} else {
|
|
|
|
if ((!isAfterMarkdownTag) || (line.trim().length > 0)) {
|
|
|
|
newLines.push(sp + line);
|
|
|
|
isAfterMarkdownTag = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
if (isAfterMarkdownTag) {
|
|
|
|
if (newLines.length > 0) {
|
|
|
|
// if last line is a markdown tag remove it.
|
|
|
|
newLines.pop();
|
|
|
|
}
|
|
|
|
}
|
2015-09-18 18:35:12 -04:00
|
|
|
// force character to be a newLine.
|
|
|
|
if (newLines.length > 0) newLines.push('');
|
2015-09-17 20:51:32 -04:00
|
|
|
var res = newLines.join('\n');
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function spaces(n) {
|
|
|
|
var str = '';
|
|
|
|
for(var i=0; i<n; i++) {
|
|
|
|
str += ' ';
|
|
|
|
}
|
|
|
|
return str;
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|