+++ /dev/null
-'use strict';
-
-var repeat = require('repeat-string');
-var trim = require('trim-trailing-lines');
-
-module.exports = indentedCode;
-
-var C_NEWLINE = '\n';
-var C_TAB = '\t';
-var C_SPACE = ' ';
-
-var CODE_INDENT_COUNT = 4;
-var CODE_INDENT = repeat(C_SPACE, CODE_INDENT_COUNT);
-
-/* Tokenise indented code. */
-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 === C_NEWLINE) {
- subvalueQueue = character;
- contentQueue = character;
- } else {
- subvalue += character;
- content += character;
-
- while (++index < length) {
- character = value.charAt(index);
-
- if (!character || character === C_NEWLINE) {
- contentQueue = character;
- subvalueQueue = character;
- break;
- }
-
- subvalue += character;
- content += character;
- }
- }
- } else if (
- character === C_SPACE &&
- value.charAt(index + 1) === character &&
- value.charAt(index + 2) === character &&
- value.charAt(index + 3) === character
- ) {
- subvalueQueue += CODE_INDENT;
- index += 3;
- indent = true;
- } else if (character === C_TAB) {
- subvalueQueue += character;
- indent = true;
- } else {
- blankQueue = '';
-
- while (character === C_TAB || character === C_SPACE) {
- blankQueue += character;
- character = value.charAt(++index);
- }
-
- if (character !== C_NEWLINE) {
- break;
- }
-
- subvalueQueue += blankQueue + character;
- contentQueue += character;
- }
- }
-
- if (content) {
- if (silent) {
- return true;
- }
-
- return eat(subvalue)({
- type: 'code',
- lang: null,
- value: trim(content)
- });
- }
-}