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