.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / remark-parse / lib / tokenize / html-block.js
1 'use strict';
2
3 var openCloseTag = require('../util/html').openCloseTag;
4
5 module.exports = blockHTML;
6
7 var C_TAB = '\t';
8 var C_SPACE = ' ';
9 var C_NEWLINE = '\n';
10 var C_LT = '<';
11
12 function blockHTML(eat, value, silent) {
13   var self = this;
14   var blocks = self.options.blocks;
15   var length = value.length;
16   var index = 0;
17   var next;
18   var line;
19   var offset;
20   var character;
21   var count;
22   var sequence;
23   var subvalue;
24
25   var sequences = [
26     [/^<(script|pre|style)(?=(\s|>|$))/i, /<\/(script|pre|style)>/i, true],
27     [/^<!--/, /-->/, true],
28     [/^<\?/, /\?>/, true],
29     [/^<![A-Za-z]/, />/, true],
30     [/^<!\[CDATA\[/, /\]\]>/, true],
31     [new RegExp('^</?(' + blocks.join('|') + ')(?=(\\s|/?>|$))', 'i'), /^$/, true],
32     [new RegExp(openCloseTag.source + '\\s*$'), /^$/, false]
33   ];
34
35   /* Eat initial spacing. */
36   while (index < length) {
37     character = value.charAt(index);
38
39     if (character !== C_TAB && character !== C_SPACE) {
40       break;
41     }
42
43     index++;
44   }
45
46   if (value.charAt(index) !== C_LT) {
47     return;
48   }
49
50   next = value.indexOf(C_NEWLINE, index + 1);
51   next = next === -1 ? length : next;
52   line = value.slice(index, next);
53   offset = -1;
54   count = sequences.length;
55
56   while (++offset < count) {
57     if (sequences[offset][0].test(line)) {
58       sequence = sequences[offset];
59       break;
60     }
61   }
62
63   if (!sequence) {
64     return;
65   }
66
67   if (silent) {
68     return sequence[2];
69   }
70
71   index = next;
72
73   if (!sequence[1].test(line)) {
74     while (index < length) {
75       next = value.indexOf(C_NEWLINE, index + 1);
76       next = next === -1 ? length : next;
77       line = value.slice(index + 1, next);
78
79       if (sequence[1].test(line)) {
80         if (line) {
81           index = next;
82         }
83
84         break;
85       }
86
87       index = next;
88     }
89   }
90
91   subvalue = value.slice(0, index);
92
93   return eat(subvalue)({type: 'html', value: subvalue});
94 }