.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / remark-parse / lib / tokenize / thematic-break.js
1 'use strict';
2
3 module.exports = thematicBreak;
4
5 var C_NEWLINE = '\n';
6 var C_TAB = '\t';
7 var C_SPACE = ' ';
8 var C_ASTERISK = '*';
9 var C_UNDERSCORE = '_';
10 var C_DASH = '-';
11
12 var THEMATIC_BREAK_MARKER_COUNT = 3;
13
14 function thematicBreak(eat, value, silent) {
15   var index = -1;
16   var length = value.length + 1;
17   var subvalue = '';
18   var character;
19   var marker;
20   var markerCount;
21   var queue;
22
23   while (++index < length) {
24     character = value.charAt(index);
25
26     if (character !== C_TAB && character !== C_SPACE) {
27       break;
28     }
29
30     subvalue += character;
31   }
32
33   if (
34     character !== C_ASTERISK &&
35     character !== C_DASH &&
36     character !== C_UNDERSCORE
37   ) {
38     return;
39   }
40
41   marker = character;
42   subvalue += character;
43   markerCount = 1;
44   queue = '';
45
46   while (++index < length) {
47     character = value.charAt(index);
48
49     if (character === marker) {
50       markerCount++;
51       subvalue += queue + marker;
52       queue = '';
53     } else if (character === C_SPACE) {
54       queue += character;
55     } else if (
56       markerCount >= THEMATIC_BREAK_MARKER_COUNT &&
57       (!character || character === C_NEWLINE)
58     ) {
59       subvalue += queue;
60
61       if (silent) {
62         return true;
63       }
64
65       return eat(subvalue)({type: 'thematicBreak'});
66     } else {
67       return;
68     }
69   }
70 }