.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / remark-parse / lib / tokenize / strong.js
1 'use strict';
2
3 var trim = require('trim');
4 var whitespace = require('is-whitespace-character');
5 var locate = require('../locate/strong');
6
7 module.exports = strong;
8 strong.locator = locate;
9
10 var C_ASTERISK = '*';
11 var C_UNDERSCORE = '_';
12
13 function strong(eat, value, silent) {
14   var self = this;
15   var index = 0;
16   var character = value.charAt(index);
17   var now;
18   var pedantic;
19   var marker;
20   var queue;
21   var subvalue;
22   var length;
23   var prev;
24
25   if (
26     (character !== C_ASTERISK && character !== C_UNDERSCORE) ||
27     value.charAt(++index) !== character
28   ) {
29     return;
30   }
31
32   pedantic = self.options.pedantic;
33   marker = character;
34   subvalue = marker + marker;
35   length = value.length;
36   index++;
37   queue = '';
38   character = '';
39
40   if (pedantic && whitespace(value.charAt(index))) {
41     return;
42   }
43
44   while (index < length) {
45     prev = character;
46     character = value.charAt(index);
47
48     if (
49       character === marker &&
50       value.charAt(index + 1) === marker &&
51       (!pedantic || !whitespace(prev))
52     ) {
53       character = value.charAt(index + 2);
54
55       if (character !== marker) {
56         if (!trim(queue)) {
57           return;
58         }
59
60         /* istanbul ignore if - never used (yet) */
61         if (silent) {
62           return true;
63         }
64
65         now = eat.now();
66         now.column += 2;
67         now.offset += 2;
68
69         return eat(subvalue + queue + subvalue)({
70           type: 'strong',
71           children: self.tokenizeInline(queue, now)
72         });
73       }
74     }
75
76     if (!pedantic && character === '\\') {
77       queue += character;
78       character = value.charAt(++index);
79     }
80
81     queue += character;
82     index++;
83   }
84 }