3 var repeat = require('repeat-string');
4 var trim = require('trim-trailing-lines');
6 module.exports = indentedCode;
12 var CODE_INDENT_COUNT = 4;
13 var CODE_INDENT = repeat(C_SPACE, CODE_INDENT_COUNT);
15 /* Tokenise indented code. */
16 function indentedCode(eat, value, silent) {
18 var length = value.length;
21 var subvalueQueue = '';
22 var contentQueue = '';
27 while (++index < length) {
28 character = value.charAt(index);
33 subvalue += subvalueQueue;
34 content += contentQueue;
38 if (character === C_NEWLINE) {
39 subvalueQueue = character;
40 contentQueue = character;
42 subvalue += character;
45 while (++index < length) {
46 character = value.charAt(index);
48 if (!character || character === C_NEWLINE) {
49 contentQueue = character;
50 subvalueQueue = character;
54 subvalue += character;
59 character === C_SPACE &&
60 value.charAt(index + 1) === character &&
61 value.charAt(index + 2) === character &&
62 value.charAt(index + 3) === character
64 subvalueQueue += CODE_INDENT;
67 } else if (character === C_TAB) {
68 subvalueQueue += character;
73 while (character === C_TAB || character === C_SPACE) {
74 blankQueue += character;
75 character = value.charAt(++index);
78 if (character !== C_NEWLINE) {
82 subvalueQueue += blankQueue + character;
83 contentQueue += character;
92 return eat(subvalue)({