UNPKG

@mapbox/jsxtreme-markdown

Version:
99 lines (81 loc) 2.08 kB
'use strict'; var repeat = require('repeat-string'); var trim = require('trim-trailing-lines'); module.exports = indentedCode; var lineFeed = '\n'; var tab = '\t'; var space = ' '; var tabSize = 4; var codeIndent = repeat(space, tabSize); function indentedCode(eat, value, silent) { var index = -1; var length = value.length; var subvalue = ''; var content = ''; var subvalueQueue = ''; var contentQueue = ''; var character; var blankQueue; var indent; while (++index < length) { character = value.charAt(index); if (indent) { indent = false; subvalue += subvalueQueue; content += contentQueue; subvalueQueue = ''; contentQueue = ''; if (character === lineFeed) { subvalueQueue = character; contentQueue = character; } else { subvalue += character; content += character; while (++index < length) { character = value.charAt(index); if (!character || character === lineFeed) { contentQueue = character; subvalueQueue = character; break; } subvalue += character; content += character; } } } else if ( character === space && value.charAt(index + 1) === character && value.charAt(index + 2) === character && value.charAt(index + 3) === character ) { subvalueQueue += codeIndent; index += 3; indent = true; } else if (character === tab) { subvalueQueue += character; indent = true; } else { blankQueue = ''; while (character === tab || character === space) { blankQueue += character; character = value.charAt(++index); } if (character !== lineFeed) { break; } subvalueQueue += blankQueue + character; contentQueue += character; } } if (content) { if (silent) { return true; } return eat(subvalue)({ type: 'code', lang: null, meta: null, value: trim(content), }); } }