.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / remark-parse / lib / tokenize / code-inline.js
1 'use strict';
2
3 var whitespace = require('is-whitespace-character');
4 var locate = require('../locate/code-inline');
5
6 module.exports = inlineCode;
7 inlineCode.locator = locate;
8
9 var C_TICK = '`';
10
11 /* Tokenise inline code. */
12 function inlineCode(eat, value, silent) {
13   var length = value.length;
14   var index = 0;
15   var queue = '';
16   var tickQueue = '';
17   var contentQueue;
18   var subqueue;
19   var count;
20   var openingCount;
21   var subvalue;
22   var character;
23   var found;
24   var next;
25
26   while (index < length) {
27     if (value.charAt(index) !== C_TICK) {
28       break;
29     }
30
31     queue += C_TICK;
32     index++;
33   }
34
35   if (!queue) {
36     return;
37   }
38
39   subvalue = queue;
40   openingCount = index;
41   queue = '';
42   next = value.charAt(index);
43   count = 0;
44
45   while (index < length) {
46     character = next;
47     next = value.charAt(index + 1);
48
49     if (character === C_TICK) {
50       count++;
51       tickQueue += character;
52     } else {
53       count = 0;
54       queue += character;
55     }
56
57     if (count && next !== C_TICK) {
58       if (count === openingCount) {
59         subvalue += queue + tickQueue;
60         found = true;
61         break;
62       }
63
64       queue += tickQueue;
65       tickQueue = '';
66     }
67
68     index++;
69   }
70
71   if (!found) {
72     if (openingCount % 2 !== 0) {
73       return;
74     }
75
76     queue = '';
77   }
78
79   /* istanbul ignore if - never used (yet) */
80   if (silent) {
81     return true;
82   }
83
84   contentQueue = '';
85   subqueue = '';
86   length = queue.length;
87   index = -1;
88
89   while (++index < length) {
90     character = queue.charAt(index);
91
92     if (whitespace(character)) {
93       subqueue += character;
94       continue;
95     }
96
97     if (subqueue) {
98       if (contentQueue) {
99         contentQueue += subqueue;
100       }
101
102       subqueue = '';
103     }
104
105     contentQueue += character;
106   }
107
108   return eat(subvalue)({
109     type: 'inlineCode',
110     value: contentQueue
111   });
112 }