1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- '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)
- })
- }
- }
|