eslint-plugin-markdown-preferences 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/index.d.ts +28 -1
- package/lib/index.js +2524 -192
- package/package.json +6 -1
package/lib/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { __export } from "./chunk-Cl8Af3a2.js";
|
|
2
|
+
import stringWidth from "string-width";
|
|
3
|
+
import emojiRegex from "emoji-regex-xs";
|
|
2
4
|
import path from "node:path";
|
|
3
5
|
import markdown from "@eslint/markdown";
|
|
4
6
|
|
|
@@ -25,6 +27,437 @@ function createRule(ruleName, rule) {
|
|
|
25
27
|
};
|
|
26
28
|
}
|
|
27
29
|
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region src/utils/atx-heading.ts
|
|
32
|
+
/**
|
|
33
|
+
* Parse the closing sequence of an ATX heading.
|
|
34
|
+
*/
|
|
35
|
+
function parseATXHeadingClosingSequence(sourceCode, node) {
|
|
36
|
+
const loc = sourceCode.getLoc(node);
|
|
37
|
+
if (loc.start.line !== loc.end.line) return null;
|
|
38
|
+
const range = sourceCode.getRange(node);
|
|
39
|
+
const parsed = parseATXHeadingClosingSequenceFromText(sourceCode.text.slice(...range));
|
|
40
|
+
if (parsed == null) return { closingSequence: null };
|
|
41
|
+
const rawAfter = {
|
|
42
|
+
text: parsed.rawAfter,
|
|
43
|
+
range: [range[1] - parsed.rawAfter.length, range[1]],
|
|
44
|
+
loc: {
|
|
45
|
+
start: {
|
|
46
|
+
line: loc.end.line,
|
|
47
|
+
column: loc.end.column - parsed.rawAfter.length
|
|
48
|
+
},
|
|
49
|
+
end: {
|
|
50
|
+
line: loc.end.line,
|
|
51
|
+
column: loc.end.column
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const closingSequence = {
|
|
56
|
+
text: parsed.closingSequence,
|
|
57
|
+
range: [rawAfter.range[0] - parsed.closingSequence.length, rawAfter.range[0]],
|
|
58
|
+
loc: {
|
|
59
|
+
start: {
|
|
60
|
+
line: rawAfter.loc.start.line,
|
|
61
|
+
column: rawAfter.loc.start.column - parsed.closingSequence.length
|
|
62
|
+
},
|
|
63
|
+
end: rawAfter.loc.start
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const rawBefore = {
|
|
67
|
+
text: parsed.rawBefore,
|
|
68
|
+
range: [closingSequence.range[0] - parsed.rawBefore.length, closingSequence.range[0]],
|
|
69
|
+
loc: {
|
|
70
|
+
start: {
|
|
71
|
+
line: closingSequence.loc.start.line,
|
|
72
|
+
column: closingSequence.loc.start.column - parsed.rawBefore.length
|
|
73
|
+
},
|
|
74
|
+
end: closingSequence.loc.start
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
return {
|
|
78
|
+
rawBefore,
|
|
79
|
+
closingSequence,
|
|
80
|
+
rawAfter
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parse the closing sequence from a text string.
|
|
85
|
+
*/
|
|
86
|
+
function parseATXHeadingClosingSequenceFromText(text) {
|
|
87
|
+
const trimmedEndOffset = skipEndWhitespace(text.length - 1) + 1;
|
|
88
|
+
if (trimmedEndOffset <= 0 || text[trimmedEndOffset - 1] !== "#") return null;
|
|
89
|
+
let closingSequenceBeforeOffset = trimmedEndOffset - 2;
|
|
90
|
+
while (closingSequenceBeforeOffset >= 0 && text[closingSequenceBeforeOffset] === "#") closingSequenceBeforeOffset--;
|
|
91
|
+
const beforeOffset = skipEndWhitespace(closingSequenceBeforeOffset);
|
|
92
|
+
if (beforeOffset === closingSequenceBeforeOffset || beforeOffset < 0) return null;
|
|
93
|
+
return {
|
|
94
|
+
rawBefore: text.slice(beforeOffset + 1, closingSequenceBeforeOffset + 1),
|
|
95
|
+
closingSequence: text.slice(closingSequenceBeforeOffset + 1, trimmedEndOffset),
|
|
96
|
+
rawAfter: text.slice(trimmedEndOffset)
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Skip whitespace characters at the end of the text.
|
|
100
|
+
*/
|
|
101
|
+
function skipEndWhitespace(index) {
|
|
102
|
+
let result = index;
|
|
103
|
+
let c;
|
|
104
|
+
while (result >= 0 && (c = text[result]) && (c === " " || c === " ")) result--;
|
|
105
|
+
return result;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/utils/lines.ts
|
|
111
|
+
const cache = /* @__PURE__ */ new WeakMap();
|
|
112
|
+
var ParsedLines = class {
|
|
113
|
+
lines;
|
|
114
|
+
constructor(codeText) {
|
|
115
|
+
let offset = 0;
|
|
116
|
+
this.lines = codeText.split(/(?<=\n)/u).map((lineText, index) => {
|
|
117
|
+
const start = offset;
|
|
118
|
+
offset += lineText.length;
|
|
119
|
+
const range = [start, offset];
|
|
120
|
+
let text = lineText;
|
|
121
|
+
let linebreak = "";
|
|
122
|
+
if (text.at(-1) === "\n") {
|
|
123
|
+
text = text.slice(0, -1);
|
|
124
|
+
linebreak = "\n";
|
|
125
|
+
}
|
|
126
|
+
if (text.at(-1) === "\r") {
|
|
127
|
+
text = text.slice(0, -1);
|
|
128
|
+
linebreak = `\r${linebreak}`;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
text,
|
|
132
|
+
range,
|
|
133
|
+
line: index + 1,
|
|
134
|
+
linebreak
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
[Symbol.iterator]() {
|
|
139
|
+
return this.lines[Symbol.iterator]();
|
|
140
|
+
}
|
|
141
|
+
get length() {
|
|
142
|
+
return this.lines.length;
|
|
143
|
+
}
|
|
144
|
+
get(lineNumber) {
|
|
145
|
+
return this.lines[lineNumber - 1];
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
/**
|
|
149
|
+
* Parse the lines of the source code.
|
|
150
|
+
* @param sourceCode source code to parse
|
|
151
|
+
* @returns parsed lines
|
|
152
|
+
*/
|
|
153
|
+
function parseLines(sourceCode) {
|
|
154
|
+
const cached = cache.get(sourceCode);
|
|
155
|
+
if (cached) return cached;
|
|
156
|
+
const parsedLines = new ParsedLines(sourceCode.text);
|
|
157
|
+
cache.set(sourceCode, parsedLines);
|
|
158
|
+
return parsedLines;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
//#endregion
|
|
162
|
+
//#region src/rules/atx-headings-closing-sequence-length.ts
|
|
163
|
+
let segmenter;
|
|
164
|
+
var atx_headings_closing_sequence_length_default = createRule("atx-headings-closing-sequence-length", {
|
|
165
|
+
meta: {
|
|
166
|
+
type: "layout",
|
|
167
|
+
docs: {
|
|
168
|
+
description: "enforce consistent length for the closing sequence (trailing #s) in ATX headings.",
|
|
169
|
+
categories: [],
|
|
170
|
+
listCategory: "Stylistic"
|
|
171
|
+
},
|
|
172
|
+
fixable: "code",
|
|
173
|
+
hasSuggestions: false,
|
|
174
|
+
schema: [{
|
|
175
|
+
type: "object",
|
|
176
|
+
properties: {
|
|
177
|
+
mode: { enum: [
|
|
178
|
+
"match-opening",
|
|
179
|
+
"length",
|
|
180
|
+
"consistent",
|
|
181
|
+
"consistent-line-length",
|
|
182
|
+
"fixed-line-length"
|
|
183
|
+
] },
|
|
184
|
+
length: {
|
|
185
|
+
type: "integer",
|
|
186
|
+
minimum: 1
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
additionalProperties: false
|
|
190
|
+
}],
|
|
191
|
+
messages: { wrongClosingLength: "The closing sequence length should be {{expected}} (was {{actual}})." }
|
|
192
|
+
},
|
|
193
|
+
create(context) {
|
|
194
|
+
const sourceCode = context.sourceCode;
|
|
195
|
+
const option = Object.assign({ mode: "match-opening" }, context.options[0] || {});
|
|
196
|
+
/**
|
|
197
|
+
* Verify the closing sequence length of an ATX heading.
|
|
198
|
+
*/
|
|
199
|
+
function verifyATXHeadingClosingSequenceLength(node, getExpected) {
|
|
200
|
+
const parsed = parseATXHeadingClosingSequence(sourceCode, node);
|
|
201
|
+
if (!parsed || parsed.closingSequence == null) return;
|
|
202
|
+
const actualLength = parsed.closingSequence.text.length;
|
|
203
|
+
const expectedLength = getExpected(node, parsed);
|
|
204
|
+
if (expectedLength === actualLength) return;
|
|
205
|
+
context.report({
|
|
206
|
+
node,
|
|
207
|
+
loc: parsed.closingSequence.loc,
|
|
208
|
+
messageId: "wrongClosingLength",
|
|
209
|
+
data: {
|
|
210
|
+
expected: String(expectedLength),
|
|
211
|
+
actual: String(actualLength)
|
|
212
|
+
},
|
|
213
|
+
fix: (fixer) => {
|
|
214
|
+
return fixer.replaceTextRange(parsed.closingSequence.range, "#".repeat(expectedLength));
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
return option.mode === "match-opening" ? (() => {
|
|
219
|
+
const getExpected = (node) => node.depth;
|
|
220
|
+
return { heading(node) {
|
|
221
|
+
verifyATXHeadingClosingSequenceLength(node, getExpected);
|
|
222
|
+
} };
|
|
223
|
+
})() : option.mode === "length" ? (() => {
|
|
224
|
+
const expected = option.length || 2;
|
|
225
|
+
const getExpected = () => expected;
|
|
226
|
+
return { heading(node) {
|
|
227
|
+
verifyATXHeadingClosingSequenceLength(node, getExpected);
|
|
228
|
+
} };
|
|
229
|
+
})() : option.mode === "fixed-line-length" ? (() => {
|
|
230
|
+
const totalLength = option.length || 80;
|
|
231
|
+
const lines = parseLines(sourceCode);
|
|
232
|
+
const getExpected = (_node, parsed) => {
|
|
233
|
+
return totalLength - getContentLength(lines, parsed);
|
|
234
|
+
};
|
|
235
|
+
return { heading(node) {
|
|
236
|
+
verifyATXHeadingClosingSequenceLength(node, getExpected);
|
|
237
|
+
} };
|
|
238
|
+
})() : option.mode === "consistent" ? (() => {
|
|
239
|
+
let getExpected = null;
|
|
240
|
+
return { heading(node) {
|
|
241
|
+
if (getExpected == null) {
|
|
242
|
+
const parsed = parseATXHeadingClosingSequence(sourceCode, node);
|
|
243
|
+
if (!parsed || parsed.closingSequence == null) return;
|
|
244
|
+
const expected = parsed.closingSequence.text.length;
|
|
245
|
+
getExpected = () => expected;
|
|
246
|
+
} else verifyATXHeadingClosingSequenceLength(node, getExpected);
|
|
247
|
+
} };
|
|
248
|
+
})() : option.mode === "consistent-line-length" ? (() => {
|
|
249
|
+
const lines = parseLines(sourceCode);
|
|
250
|
+
const headings = [];
|
|
251
|
+
return {
|
|
252
|
+
heading(node) {
|
|
253
|
+
const parsed = parseATXHeadingClosingSequence(sourceCode, node);
|
|
254
|
+
if (!parsed || !parsed.closingSequence) return;
|
|
255
|
+
headings.push({
|
|
256
|
+
node,
|
|
257
|
+
parsed
|
|
258
|
+
});
|
|
259
|
+
},
|
|
260
|
+
"root:exit"() {
|
|
261
|
+
let mostLongContentHeading = null;
|
|
262
|
+
for (const heading of headings) {
|
|
263
|
+
const contentLength = getContentLength(lines, heading.parsed);
|
|
264
|
+
if (mostLongContentHeading == null || contentLength > mostLongContentHeading.contentLength) {
|
|
265
|
+
const lineLength = getLineLength(lines, heading.parsed);
|
|
266
|
+
mostLongContentHeading = {
|
|
267
|
+
...heading,
|
|
268
|
+
contentLength,
|
|
269
|
+
lineLength
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (!mostLongContentHeading) return;
|
|
274
|
+
let minLineLength = mostLongContentHeading.lineLength;
|
|
275
|
+
for (const heading of headings) {
|
|
276
|
+
const lineLength = getLineLength(lines, heading.parsed);
|
|
277
|
+
if (mostLongContentHeading.contentLength < lineLength && lineLength < minLineLength) minLineLength = Math.min(minLineLength, lineLength);
|
|
278
|
+
}
|
|
279
|
+
const getExpected = (_node, parsed) => {
|
|
280
|
+
return minLineLength - getContentLength(lines, parsed);
|
|
281
|
+
};
|
|
282
|
+
for (const { node } of headings) verifyATXHeadingClosingSequenceLength(node, getExpected);
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
})() : {};
|
|
286
|
+
/**
|
|
287
|
+
* Get the content length of the heading.
|
|
288
|
+
*/
|
|
289
|
+
function getContentLength(lines, parsed) {
|
|
290
|
+
const line = lines.get(parsed.closingSequence.loc.start.line);
|
|
291
|
+
const beforeClosing = sourceCode.text.slice(line.range[0], parsed.closingSequence.range[0]);
|
|
292
|
+
return getTextWidth(beforeClosing);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get the line length of the heading.
|
|
296
|
+
*/
|
|
297
|
+
function getLineLength(lines, parsed) {
|
|
298
|
+
const line = lines.get(parsed.closingSequence.loc.start.line);
|
|
299
|
+
const lineText = sourceCode.text.slice(line.range[0], parsed.closingSequence.range[1]);
|
|
300
|
+
return getTextWidth(lineText);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
/**
|
|
305
|
+
* Get the width of a text string.
|
|
306
|
+
*/
|
|
307
|
+
function getTextWidth(text) {
|
|
308
|
+
if (!text.includes(" ")) return stringWidth(text);
|
|
309
|
+
if (!segmenter) segmenter = new Intl.Segmenter("en");
|
|
310
|
+
let width = 0;
|
|
311
|
+
for (const { segment: c } of segmenter.segment(text)) if (c === " ") width += 4 - width % 4;
|
|
312
|
+
else width += stringWidth(c);
|
|
313
|
+
return width;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
//#endregion
|
|
317
|
+
//#region src/rules/atx-headings-closing-sequence.ts
|
|
318
|
+
var atx_headings_closing_sequence_default = createRule("atx-headings-closing-sequence", {
|
|
319
|
+
meta: {
|
|
320
|
+
type: "layout",
|
|
321
|
+
docs: {
|
|
322
|
+
description: "enforce consistent use of closing sequence in ATX headings.",
|
|
323
|
+
categories: [],
|
|
324
|
+
listCategory: "Stylistic"
|
|
325
|
+
},
|
|
326
|
+
fixable: "code",
|
|
327
|
+
hasSuggestions: false,
|
|
328
|
+
schema: [{
|
|
329
|
+
type: "object",
|
|
330
|
+
properties: { closingSequence: { enum: ["always", "never"] } },
|
|
331
|
+
additionalProperties: false
|
|
332
|
+
}],
|
|
333
|
+
messages: {
|
|
334
|
+
requireClosing: "ATX heading should have a closing sequence (e.g. '### heading ###').",
|
|
335
|
+
forbidClosing: "ATX heading should not have a closing sequence."
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
create(context) {
|
|
339
|
+
const sourceCode = context.sourceCode;
|
|
340
|
+
let closingSequence = "never";
|
|
341
|
+
const opt = context.options[0];
|
|
342
|
+
if (opt && typeof opt === "object" && typeof opt.closingSequence === "string") {
|
|
343
|
+
if (opt.closingSequence === "always" || opt.closingSequence === "never") closingSequence = opt.closingSequence;
|
|
344
|
+
}
|
|
345
|
+
return { heading(node) {
|
|
346
|
+
const parsed = parseATXHeadingClosingSequence(sourceCode, node);
|
|
347
|
+
if (!parsed) return;
|
|
348
|
+
if (closingSequence === "always") {
|
|
349
|
+
if (parsed.closingSequence) return;
|
|
350
|
+
context.report({
|
|
351
|
+
node,
|
|
352
|
+
messageId: "requireClosing",
|
|
353
|
+
fix(fixer) {
|
|
354
|
+
const insert = ` ${"#".repeat(node.depth)} `;
|
|
355
|
+
return fixer.insertTextAfter(node, insert);
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
} else if (closingSequence === "never") {
|
|
359
|
+
if (parsed.closingSequence == null) return;
|
|
360
|
+
context.report({
|
|
361
|
+
node,
|
|
362
|
+
loc: {
|
|
363
|
+
start: parsed.rawBefore.loc.start,
|
|
364
|
+
end: parsed.closingSequence.loc.end
|
|
365
|
+
},
|
|
366
|
+
messageId: "forbidClosing",
|
|
367
|
+
*fix(fixer) {
|
|
368
|
+
const removeRange = [parsed.rawBefore.range[0], parsed.closingSequence.range[1]];
|
|
369
|
+
const newHeadingText = sourceCode.text.slice(sourceCode.getRange(node)[0], removeRange[0]);
|
|
370
|
+
const newHeadingParsed = parseATXHeadingClosingSequenceFromText(newHeadingText);
|
|
371
|
+
if (newHeadingParsed) {
|
|
372
|
+
const escapeIndex = removeRange[0] - newHeadingParsed.rawAfter.length - 1;
|
|
373
|
+
yield fixer.insertTextBeforeRange([escapeIndex, escapeIndex], "\\");
|
|
374
|
+
}
|
|
375
|
+
yield fixer.removeRange(removeRange);
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
} };
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
|
|
383
|
+
//#endregion
|
|
384
|
+
//#region src/utils/ast.ts
|
|
385
|
+
/**
|
|
386
|
+
* Get the kind of code block.
|
|
387
|
+
*/
|
|
388
|
+
function getCodeBlockKind(sourceCode, node) {
|
|
389
|
+
const text = sourceCode.getText(node);
|
|
390
|
+
return text.startsWith("```") ? "backtick-fenced" : text.startsWith("~~~") ? "tilde-fenced" : "indented";
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get the kind of link.
|
|
394
|
+
*/
|
|
395
|
+
function getLinkKind(sourceCode, node) {
|
|
396
|
+
const text = sourceCode.getText(node);
|
|
397
|
+
return text.startsWith("[") ? "inline" : text.startsWith("<") && text.endsWith(">") ? "autolink" : "gfm-autolink";
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Get the marker of a list item.
|
|
401
|
+
*/
|
|
402
|
+
function getListItemMarker(sourceCode, node) {
|
|
403
|
+
const item = node.type === "list" ? node.children[0] || node : node;
|
|
404
|
+
const text = sourceCode.getText(item);
|
|
405
|
+
if (text.startsWith("-")) return {
|
|
406
|
+
kind: "-",
|
|
407
|
+
raw: "-"
|
|
408
|
+
};
|
|
409
|
+
if (text.startsWith("*")) return {
|
|
410
|
+
kind: "*",
|
|
411
|
+
raw: "*"
|
|
412
|
+
};
|
|
413
|
+
if (text.startsWith("+")) return {
|
|
414
|
+
kind: "+",
|
|
415
|
+
raw: "+"
|
|
416
|
+
};
|
|
417
|
+
const matchDot = /^(\d+)\./.exec(text);
|
|
418
|
+
if (matchDot) return {
|
|
419
|
+
kind: ".",
|
|
420
|
+
raw: matchDot[0],
|
|
421
|
+
sequence: Number(matchDot[1])
|
|
422
|
+
};
|
|
423
|
+
const matchParen = /^(\d+)\)/.exec(text);
|
|
424
|
+
return {
|
|
425
|
+
kind: ")",
|
|
426
|
+
raw: matchParen[0],
|
|
427
|
+
sequence: Number(matchParen[1])
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Get the source location from a range in a node.
|
|
432
|
+
*/
|
|
433
|
+
function getSourceLocationFromRange(sourceCode, node, range) {
|
|
434
|
+
const [nodeStart] = sourceCode.getRange(node);
|
|
435
|
+
let startLine, startColumn;
|
|
436
|
+
if (nodeStart <= range[0]) {
|
|
437
|
+
const loc = sourceCode.getLoc(node);
|
|
438
|
+
const beforeLines = sourceCode.text.slice(nodeStart, range[0]).split(/\n/u);
|
|
439
|
+
startLine = loc.start.line + beforeLines.length - 1;
|
|
440
|
+
startColumn = (beforeLines.length === 1 ? loc.start.column : 1) + (beforeLines.at(-1) || "").length;
|
|
441
|
+
} else {
|
|
442
|
+
const beforeLines = sourceCode.text.slice(0, range[0]).split(/\n/u);
|
|
443
|
+
startLine = beforeLines.length;
|
|
444
|
+
startColumn = 1 + (beforeLines.at(-1) || "").length;
|
|
445
|
+
}
|
|
446
|
+
const contentLines = sourceCode.text.slice(range[0], range[1]).split(/\n/u);
|
|
447
|
+
const endLine = startLine + contentLines.length - 1;
|
|
448
|
+
const endColumn = (contentLines.length === 1 ? startColumn : 1) + (contentLines.at(-1) || "").length;
|
|
449
|
+
return {
|
|
450
|
+
start: {
|
|
451
|
+
line: startLine,
|
|
452
|
+
column: startColumn
|
|
453
|
+
},
|
|
454
|
+
end: {
|
|
455
|
+
line: endLine,
|
|
456
|
+
column: endColumn
|
|
457
|
+
}
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
|
|
28
461
|
//#endregion
|
|
29
462
|
//#region src/rules/canonical-code-block-language.ts
|
|
30
463
|
const DEFAULT_LANGUAGES = {
|
|
@@ -85,32 +518,17 @@ var canonical_code_block_language_default = createRule("canonical-code-block-lan
|
|
|
85
518
|
const fenceMatch = fenceRegex.exec(nodeText.split("\n")[0]);
|
|
86
519
|
if (!fenceMatch) return;
|
|
87
520
|
const [, fence, langInfo] = fenceMatch;
|
|
88
|
-
const
|
|
89
|
-
const langEnd = langStart + langInfo.length;
|
|
90
|
-
const nodeLoc = sourceCode.getLoc(node);
|
|
91
|
-
const beforeFence = sourceCode.text.slice(nodeRange[0], langStart);
|
|
92
|
-
const beforeLines = beforeFence.split(/\n/u);
|
|
93
|
-
const line = nodeLoc.start.line + beforeLines.length - 1;
|
|
94
|
-
const column = (beforeLines.length === 1 ? nodeLoc.start.column : 0) + (beforeLines.at(-1) || "").length;
|
|
521
|
+
const range = [nodeRange[0] + fence.length, nodeRange[0] + fence.length + langInfo.length];
|
|
95
522
|
context.report({
|
|
96
523
|
node,
|
|
97
|
-
loc:
|
|
98
|
-
start: {
|
|
99
|
-
line,
|
|
100
|
-
column
|
|
101
|
-
},
|
|
102
|
-
end: {
|
|
103
|
-
line,
|
|
104
|
-
column: column + langInfo.length
|
|
105
|
-
}
|
|
106
|
-
},
|
|
524
|
+
loc: getSourceLocationFromRange(sourceCode, node, range),
|
|
107
525
|
messageId: "useCanonical",
|
|
108
526
|
data: {
|
|
109
527
|
canonical,
|
|
110
528
|
current
|
|
111
529
|
},
|
|
112
530
|
fix(fixer) {
|
|
113
|
-
return fixer.replaceTextRange(
|
|
531
|
+
return fixer.replaceTextRange(range, canonical);
|
|
114
532
|
}
|
|
115
533
|
});
|
|
116
534
|
} };
|
|
@@ -158,6 +576,2079 @@ var definitions_last_default = createRule("definitions-last", {
|
|
|
158
576
|
}
|
|
159
577
|
});
|
|
160
578
|
|
|
579
|
+
//#endregion
|
|
580
|
+
//#region src/utils/regexp.ts
|
|
581
|
+
const RE_REGEXP_STR = /^\/(.+)\/([A-Za-z]*)$/u;
|
|
582
|
+
/**
|
|
583
|
+
* Convert a string to the `RegExp`.
|
|
584
|
+
* Normal strings (e.g. `"foo"`) is converted to `/^foo$/` of `RegExp`.
|
|
585
|
+
* Strings like `"/^foo/i"` are converted to `/^foo/i` of `RegExp`.
|
|
586
|
+
*
|
|
587
|
+
* @param {string} string The string to convert.
|
|
588
|
+
* @returns {RegExp} Returns the `RegExp`.
|
|
589
|
+
*/
|
|
590
|
+
function toRegExp(string) {
|
|
591
|
+
const parts = RE_REGEXP_STR.exec(string);
|
|
592
|
+
if (parts) return new RegExp(parts[1], parts[2]);
|
|
593
|
+
return { test: (s) => s === string };
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* Checks whether given string is regexp string
|
|
597
|
+
* @param {string} string
|
|
598
|
+
* @returns {boolean}
|
|
599
|
+
*/
|
|
600
|
+
function isRegExp(string) {
|
|
601
|
+
return Boolean(RE_REGEXP_STR.test(string));
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
//#endregion
|
|
605
|
+
//#region src/utils/resources/gh-emoji.ts
|
|
606
|
+
const GH_EMOJI_MAP = {
|
|
607
|
+
"100": "💯",
|
|
608
|
+
"1234": "🔢",
|
|
609
|
+
"+1": "👍",
|
|
610
|
+
"-1": "👎",
|
|
611
|
+
"1st_place_medal": "🥇",
|
|
612
|
+
"2nd_place_medal": "🥈",
|
|
613
|
+
"3rd_place_medal": "🥉",
|
|
614
|
+
"8ball": "🎱",
|
|
615
|
+
a: "🅰",
|
|
616
|
+
ab: "🆎",
|
|
617
|
+
abacus: "🧮",
|
|
618
|
+
abc: "🔤",
|
|
619
|
+
abcd: "🔡",
|
|
620
|
+
accept: "🉑",
|
|
621
|
+
accordion: "🪗",
|
|
622
|
+
adhesive_bandage: "🩹",
|
|
623
|
+
adult: "🧑",
|
|
624
|
+
aerial_tramway: "🚡",
|
|
625
|
+
afghanistan: "🇦🇫",
|
|
626
|
+
airplane: "✈",
|
|
627
|
+
aland_islands: "🇦🇽",
|
|
628
|
+
alarm_clock: "⏰",
|
|
629
|
+
albania: "🇦🇱",
|
|
630
|
+
alembic: "⚗",
|
|
631
|
+
algeria: "🇩🇿",
|
|
632
|
+
alien: "👽",
|
|
633
|
+
ambulance: "🚑",
|
|
634
|
+
american_samoa: "🇦🇸",
|
|
635
|
+
amphora: "🏺",
|
|
636
|
+
anatomical_heart: "🫀",
|
|
637
|
+
anchor: "⚓",
|
|
638
|
+
andorra: "🇦🇩",
|
|
639
|
+
angel: "👼",
|
|
640
|
+
anger: "💢",
|
|
641
|
+
angola: "🇦🇴",
|
|
642
|
+
angry: "😠",
|
|
643
|
+
anguilla: "🇦🇮",
|
|
644
|
+
anguished: "😧",
|
|
645
|
+
ant: "🐜",
|
|
646
|
+
antarctica: "🇦🇶",
|
|
647
|
+
antigua_barbuda: "🇦🇬",
|
|
648
|
+
apple: "🍎",
|
|
649
|
+
aquarius: "♒",
|
|
650
|
+
argentina: "🇦🇷",
|
|
651
|
+
aries: "♈",
|
|
652
|
+
armenia: "🇦🇲",
|
|
653
|
+
arrow_backward: "◀",
|
|
654
|
+
arrow_double_down: "⏬",
|
|
655
|
+
arrow_double_up: "⏫",
|
|
656
|
+
arrow_down: "⬇",
|
|
657
|
+
arrow_down_small: "🔽",
|
|
658
|
+
arrow_forward: "▶",
|
|
659
|
+
arrow_heading_down: "⤵",
|
|
660
|
+
arrow_heading_up: "⤴",
|
|
661
|
+
arrow_left: "⬅",
|
|
662
|
+
arrow_lower_left: "↙",
|
|
663
|
+
arrow_lower_right: "↘",
|
|
664
|
+
arrow_right: "➡",
|
|
665
|
+
arrow_right_hook: "↪",
|
|
666
|
+
arrow_up: "⬆",
|
|
667
|
+
arrow_up_down: "↕",
|
|
668
|
+
arrow_up_small: "🔼",
|
|
669
|
+
arrow_upper_left: "↖",
|
|
670
|
+
arrow_upper_right: "↗",
|
|
671
|
+
arrows_clockwise: "🔃",
|
|
672
|
+
arrows_counterclockwise: "🔄",
|
|
673
|
+
art: "🎨",
|
|
674
|
+
articulated_lorry: "🚛",
|
|
675
|
+
artificial_satellite: "🛰",
|
|
676
|
+
artist: "🧑🎨",
|
|
677
|
+
aruba: "🇦🇼",
|
|
678
|
+
ascension_island: "🇦🇨",
|
|
679
|
+
asterisk: "*️⃣",
|
|
680
|
+
astonished: "😲",
|
|
681
|
+
astronaut: "🧑🚀",
|
|
682
|
+
athletic_shoe: "👟",
|
|
683
|
+
atm: "🏧",
|
|
684
|
+
atom_symbol: "⚛",
|
|
685
|
+
australia: "🇦🇺",
|
|
686
|
+
austria: "🇦🇹",
|
|
687
|
+
auto_rickshaw: "🛺",
|
|
688
|
+
avocado: "🥑",
|
|
689
|
+
axe: "🪓",
|
|
690
|
+
azerbaijan: "🇦🇿",
|
|
691
|
+
b: "🅱",
|
|
692
|
+
baby: "👶",
|
|
693
|
+
baby_bottle: "🍼",
|
|
694
|
+
baby_chick: "🐤",
|
|
695
|
+
baby_symbol: "🚼",
|
|
696
|
+
back: "🔙",
|
|
697
|
+
bacon: "🥓",
|
|
698
|
+
badger: "🦡",
|
|
699
|
+
badminton: "🏸",
|
|
700
|
+
bagel: "🥯",
|
|
701
|
+
baggage_claim: "🛄",
|
|
702
|
+
baguette_bread: "🥖",
|
|
703
|
+
bahamas: "🇧🇸",
|
|
704
|
+
bahrain: "🇧🇭",
|
|
705
|
+
balance_scale: "⚖",
|
|
706
|
+
bald_man: "👨🦲",
|
|
707
|
+
bald_woman: "👩🦲",
|
|
708
|
+
ballet_shoes: "🩰",
|
|
709
|
+
balloon: "🎈",
|
|
710
|
+
ballot_box: "🗳",
|
|
711
|
+
ballot_box_with_check: "☑",
|
|
712
|
+
bamboo: "🎍",
|
|
713
|
+
banana: "🍌",
|
|
714
|
+
bangbang: "‼",
|
|
715
|
+
bangladesh: "🇧🇩",
|
|
716
|
+
banjo: "🪕",
|
|
717
|
+
bank: "🏦",
|
|
718
|
+
bar_chart: "📊",
|
|
719
|
+
barbados: "🇧🇧",
|
|
720
|
+
barber: "💈",
|
|
721
|
+
baseball: "⚾",
|
|
722
|
+
basket: "🧺",
|
|
723
|
+
basketball: "🏀",
|
|
724
|
+
basketball_man: "⛹♂",
|
|
725
|
+
basketball_woman: "⛹♀",
|
|
726
|
+
bat: "🦇",
|
|
727
|
+
bath: "🛀",
|
|
728
|
+
bathtub: "🛁",
|
|
729
|
+
battery: "🔋",
|
|
730
|
+
beach_umbrella: "🏖",
|
|
731
|
+
beans: "🫘",
|
|
732
|
+
bear: "🐻",
|
|
733
|
+
bearded_person: "🧔",
|
|
734
|
+
beaver: "🦫",
|
|
735
|
+
bed: "🛏",
|
|
736
|
+
bee: "🐝",
|
|
737
|
+
beer: "🍺",
|
|
738
|
+
beers: "🍻",
|
|
739
|
+
beetle: "🪲",
|
|
740
|
+
beginner: "🔰",
|
|
741
|
+
belarus: "🇧🇾",
|
|
742
|
+
belgium: "🇧🇪",
|
|
743
|
+
belize: "🇧🇿",
|
|
744
|
+
bell: "🔔",
|
|
745
|
+
bell_pepper: "🫑",
|
|
746
|
+
bellhop_bell: "🛎",
|
|
747
|
+
benin: "🇧🇯",
|
|
748
|
+
bento: "🍱",
|
|
749
|
+
bermuda: "🇧🇲",
|
|
750
|
+
beverage_box: "🧃",
|
|
751
|
+
bhutan: "🇧🇹",
|
|
752
|
+
bicyclist: "🚴",
|
|
753
|
+
bike: "🚲",
|
|
754
|
+
biking_man: "🚴♂",
|
|
755
|
+
biking_woman: "🚴♀",
|
|
756
|
+
bikini: "👙",
|
|
757
|
+
billed_cap: "🧢",
|
|
758
|
+
biohazard: "☣",
|
|
759
|
+
bird: "🐦",
|
|
760
|
+
birthday: "🎂",
|
|
761
|
+
bison: "🦬",
|
|
762
|
+
biting_lip: "🫦",
|
|
763
|
+
black_bird: "🐦⬛",
|
|
764
|
+
black_cat: "🐈⬛",
|
|
765
|
+
black_circle: "⚫",
|
|
766
|
+
black_flag: "🏴",
|
|
767
|
+
black_heart: "🖤",
|
|
768
|
+
black_joker: "🃏",
|
|
769
|
+
black_large_square: "⬛",
|
|
770
|
+
black_medium_small_square: "◾",
|
|
771
|
+
black_medium_square: "◼",
|
|
772
|
+
black_nib: "✒",
|
|
773
|
+
black_small_square: "▪",
|
|
774
|
+
black_square_button: "🔲",
|
|
775
|
+
blond_haired_man: "👱♂",
|
|
776
|
+
blond_haired_person: "👱",
|
|
777
|
+
blond_haired_woman: "👱♀",
|
|
778
|
+
blonde_woman: "👱♀",
|
|
779
|
+
blossom: "🌼",
|
|
780
|
+
blowfish: "🐡",
|
|
781
|
+
blue_book: "📘",
|
|
782
|
+
blue_car: "🚙",
|
|
783
|
+
blue_heart: "💙",
|
|
784
|
+
blue_square: "🟦",
|
|
785
|
+
blueberries: "🫐",
|
|
786
|
+
blush: "😊",
|
|
787
|
+
boar: "🐗",
|
|
788
|
+
boat: "⛵",
|
|
789
|
+
bolivia: "🇧🇴",
|
|
790
|
+
bomb: "💣",
|
|
791
|
+
bone: "🦴",
|
|
792
|
+
book: "📖",
|
|
793
|
+
bookmark: "🔖",
|
|
794
|
+
bookmark_tabs: "📑",
|
|
795
|
+
books: "📚",
|
|
796
|
+
boom: "💥",
|
|
797
|
+
boomerang: "🪃",
|
|
798
|
+
boot: "👢",
|
|
799
|
+
bosnia_herzegovina: "🇧🇦",
|
|
800
|
+
botswana: "🇧🇼",
|
|
801
|
+
bouncing_ball_man: "⛹♂",
|
|
802
|
+
bouncing_ball_person: "⛹",
|
|
803
|
+
bouncing_ball_woman: "⛹♀",
|
|
804
|
+
bouquet: "💐",
|
|
805
|
+
bouvet_island: "🇧🇻",
|
|
806
|
+
bow: "🙇",
|
|
807
|
+
bow_and_arrow: "🏹",
|
|
808
|
+
bowing_man: "🙇♂",
|
|
809
|
+
bowing_woman: "🙇♀",
|
|
810
|
+
bowl_with_spoon: "🥣",
|
|
811
|
+
bowling: "🎳",
|
|
812
|
+
boxing_glove: "🥊",
|
|
813
|
+
boy: "👦",
|
|
814
|
+
brain: "🧠",
|
|
815
|
+
brazil: "🇧🇷",
|
|
816
|
+
bread: "🍞",
|
|
817
|
+
breast_feeding: "🤱",
|
|
818
|
+
bricks: "🧱",
|
|
819
|
+
bride_with_veil: "👰♀",
|
|
820
|
+
bridge_at_night: "🌉",
|
|
821
|
+
briefcase: "💼",
|
|
822
|
+
british_indian_ocean_territory: "🇮🇴",
|
|
823
|
+
british_virgin_islands: "🇻🇬",
|
|
824
|
+
broccoli: "🥦",
|
|
825
|
+
broken_heart: "💔",
|
|
826
|
+
broom: "🧹",
|
|
827
|
+
brown_circle: "🟤",
|
|
828
|
+
brown_heart: "🤎",
|
|
829
|
+
brown_square: "🟫",
|
|
830
|
+
brunei: "🇧🇳",
|
|
831
|
+
bubble_tea: "🧋",
|
|
832
|
+
bubbles: "🫧",
|
|
833
|
+
bucket: "🪣",
|
|
834
|
+
bug: "🐛",
|
|
835
|
+
building_construction: "🏗",
|
|
836
|
+
bulb: "💡",
|
|
837
|
+
bulgaria: "🇧🇬",
|
|
838
|
+
bullettrain_front: "🚅",
|
|
839
|
+
bullettrain_side: "🚄",
|
|
840
|
+
burkina_faso: "🇧🇫",
|
|
841
|
+
burrito: "🌯",
|
|
842
|
+
burundi: "🇧🇮",
|
|
843
|
+
bus: "🚌",
|
|
844
|
+
business_suit_levitating: "🕴",
|
|
845
|
+
busstop: "🚏",
|
|
846
|
+
bust_in_silhouette: "👤",
|
|
847
|
+
busts_in_silhouette: "👥",
|
|
848
|
+
butter: "🧈",
|
|
849
|
+
butterfly: "🦋",
|
|
850
|
+
cactus: "🌵",
|
|
851
|
+
cake: "🍰",
|
|
852
|
+
calendar: "📆",
|
|
853
|
+
call_me_hand: "🤙",
|
|
854
|
+
calling: "📲",
|
|
855
|
+
cambodia: "🇰🇭",
|
|
856
|
+
camel: "🐫",
|
|
857
|
+
camera: "📷",
|
|
858
|
+
camera_flash: "📸",
|
|
859
|
+
cameroon: "🇨🇲",
|
|
860
|
+
camping: "🏕",
|
|
861
|
+
canada: "🇨🇦",
|
|
862
|
+
canary_islands: "🇮🇨",
|
|
863
|
+
cancer: "♋",
|
|
864
|
+
candle: "🕯",
|
|
865
|
+
candy: "🍬",
|
|
866
|
+
canned_food: "🥫",
|
|
867
|
+
canoe: "🛶",
|
|
868
|
+
cape_verde: "🇨🇻",
|
|
869
|
+
capital_abcd: "🔠",
|
|
870
|
+
capricorn: "♑",
|
|
871
|
+
car: "🚗",
|
|
872
|
+
card_file_box: "🗃",
|
|
873
|
+
card_index: "📇",
|
|
874
|
+
card_index_dividers: "🗂",
|
|
875
|
+
caribbean_netherlands: "🇧🇶",
|
|
876
|
+
carousel_horse: "🎠",
|
|
877
|
+
carpentry_saw: "🪚",
|
|
878
|
+
carrot: "🥕",
|
|
879
|
+
cartwheeling: "🤸",
|
|
880
|
+
cat: "🐱",
|
|
881
|
+
cat2: "🐈",
|
|
882
|
+
cayman_islands: "🇰🇾",
|
|
883
|
+
cd: "💿",
|
|
884
|
+
central_african_republic: "🇨🇫",
|
|
885
|
+
ceuta_melilla: "🇪🇦",
|
|
886
|
+
chad: "🇹🇩",
|
|
887
|
+
chains: "⛓",
|
|
888
|
+
chair: "🪑",
|
|
889
|
+
champagne: "🍾",
|
|
890
|
+
chart: "💹",
|
|
891
|
+
chart_with_downwards_trend: "📉",
|
|
892
|
+
chart_with_upwards_trend: "📈",
|
|
893
|
+
checkered_flag: "🏁",
|
|
894
|
+
cheese: "🧀",
|
|
895
|
+
cherries: "🍒",
|
|
896
|
+
cherry_blossom: "🌸",
|
|
897
|
+
chess_pawn: "♟",
|
|
898
|
+
chestnut: "🌰",
|
|
899
|
+
chicken: "🐔",
|
|
900
|
+
child: "🧒",
|
|
901
|
+
children_crossing: "🚸",
|
|
902
|
+
chile: "🇨🇱",
|
|
903
|
+
chipmunk: "🐿",
|
|
904
|
+
chocolate_bar: "🍫",
|
|
905
|
+
chopsticks: "🥢",
|
|
906
|
+
christmas_island: "🇨🇽",
|
|
907
|
+
christmas_tree: "🎄",
|
|
908
|
+
church: "⛪",
|
|
909
|
+
cinema: "🎦",
|
|
910
|
+
circus_tent: "🎪",
|
|
911
|
+
city_sunrise: "🌇",
|
|
912
|
+
city_sunset: "🌆",
|
|
913
|
+
cityscape: "🏙",
|
|
914
|
+
cl: "🆑",
|
|
915
|
+
clamp: "🗜",
|
|
916
|
+
clap: "👏",
|
|
917
|
+
clapper: "🎬",
|
|
918
|
+
classical_building: "🏛",
|
|
919
|
+
climbing: "🧗",
|
|
920
|
+
climbing_man: "🧗♂",
|
|
921
|
+
climbing_woman: "🧗♀",
|
|
922
|
+
clinking_glasses: "🥂",
|
|
923
|
+
clipboard: "📋",
|
|
924
|
+
clipperton_island: "🇨🇵",
|
|
925
|
+
clock1: "🕐",
|
|
926
|
+
clock10: "🕙",
|
|
927
|
+
clock1030: "🕥",
|
|
928
|
+
clock11: "🕚",
|
|
929
|
+
clock1130: "🕦",
|
|
930
|
+
clock12: "🕛",
|
|
931
|
+
clock1230: "🕧",
|
|
932
|
+
clock130: "🕜",
|
|
933
|
+
clock2: "🕑",
|
|
934
|
+
clock230: "🕝",
|
|
935
|
+
clock3: "🕒",
|
|
936
|
+
clock330: "🕞",
|
|
937
|
+
clock4: "🕓",
|
|
938
|
+
clock430: "🕟",
|
|
939
|
+
clock5: "🕔",
|
|
940
|
+
clock530: "🕠",
|
|
941
|
+
clock6: "🕕",
|
|
942
|
+
clock630: "🕡",
|
|
943
|
+
clock7: "🕖",
|
|
944
|
+
clock730: "🕢",
|
|
945
|
+
clock8: "🕗",
|
|
946
|
+
clock830: "🕣",
|
|
947
|
+
clock9: "🕘",
|
|
948
|
+
clock930: "🕤",
|
|
949
|
+
closed_book: "📕",
|
|
950
|
+
closed_lock_with_key: "🔐",
|
|
951
|
+
closed_umbrella: "🌂",
|
|
952
|
+
cloud: "☁",
|
|
953
|
+
cloud_with_lightning: "🌩",
|
|
954
|
+
cloud_with_lightning_and_rain: "⛈",
|
|
955
|
+
cloud_with_rain: "🌧",
|
|
956
|
+
cloud_with_snow: "🌨",
|
|
957
|
+
clown_face: "🤡",
|
|
958
|
+
clubs: "♣",
|
|
959
|
+
cn: "🇨🇳",
|
|
960
|
+
coat: "🧥",
|
|
961
|
+
cockroach: "🪳",
|
|
962
|
+
cocktail: "🍸",
|
|
963
|
+
coconut: "🥥",
|
|
964
|
+
cocos_islands: "🇨🇨",
|
|
965
|
+
coffee: "☕",
|
|
966
|
+
coffin: "⚰",
|
|
967
|
+
coin: "🪙",
|
|
968
|
+
cold_face: "🥶",
|
|
969
|
+
cold_sweat: "😰",
|
|
970
|
+
collision: "💥",
|
|
971
|
+
colombia: "🇨🇴",
|
|
972
|
+
comet: "☄",
|
|
973
|
+
comoros: "🇰🇲",
|
|
974
|
+
compass: "🧭",
|
|
975
|
+
computer: "💻",
|
|
976
|
+
computer_mouse: "🖱",
|
|
977
|
+
confetti_ball: "🎊",
|
|
978
|
+
confounded: "😖",
|
|
979
|
+
confused: "😕",
|
|
980
|
+
congo_brazzaville: "🇨🇬",
|
|
981
|
+
congo_kinshasa: "🇨🇩",
|
|
982
|
+
congratulations: "㊗",
|
|
983
|
+
construction: "🚧",
|
|
984
|
+
construction_worker: "👷",
|
|
985
|
+
construction_worker_man: "👷♂",
|
|
986
|
+
construction_worker_woman: "👷♀",
|
|
987
|
+
control_knobs: "🎛",
|
|
988
|
+
convenience_store: "🏪",
|
|
989
|
+
cook: "🧑🍳",
|
|
990
|
+
cook_islands: "🇨🇰",
|
|
991
|
+
cookie: "🍪",
|
|
992
|
+
cool: "🆒",
|
|
993
|
+
cop: "👮",
|
|
994
|
+
copyright: "©",
|
|
995
|
+
coral: "🪸",
|
|
996
|
+
corn: "🌽",
|
|
997
|
+
costa_rica: "🇨🇷",
|
|
998
|
+
cote_divoire: "🇨🇮",
|
|
999
|
+
couch_and_lamp: "🛋",
|
|
1000
|
+
couple: "👫",
|
|
1001
|
+
couple_with_heart: "💑",
|
|
1002
|
+
couple_with_heart_man_man: "👨❤👨",
|
|
1003
|
+
couple_with_heart_woman_man: "👩❤👨",
|
|
1004
|
+
couple_with_heart_woman_woman: "👩❤👩",
|
|
1005
|
+
couplekiss: "💏",
|
|
1006
|
+
couplekiss_man_man: "👨❤💋👨",
|
|
1007
|
+
couplekiss_man_woman: "👩❤💋👨",
|
|
1008
|
+
couplekiss_woman_woman: "👩❤💋👩",
|
|
1009
|
+
cow: "🐮",
|
|
1010
|
+
cow2: "🐄",
|
|
1011
|
+
cowboy_hat_face: "🤠",
|
|
1012
|
+
crab: "🦀",
|
|
1013
|
+
crayon: "🖍",
|
|
1014
|
+
credit_card: "💳",
|
|
1015
|
+
crescent_moon: "🌙",
|
|
1016
|
+
cricket: "🦗",
|
|
1017
|
+
cricket_game: "🏏",
|
|
1018
|
+
croatia: "🇭🇷",
|
|
1019
|
+
crocodile: "🐊",
|
|
1020
|
+
croissant: "🥐",
|
|
1021
|
+
crossed_fingers: "🤞",
|
|
1022
|
+
crossed_flags: "🎌",
|
|
1023
|
+
crossed_swords: "⚔",
|
|
1024
|
+
crown: "👑",
|
|
1025
|
+
crutch: "🩼",
|
|
1026
|
+
cry: "😢",
|
|
1027
|
+
crying_cat_face: "😿",
|
|
1028
|
+
crystal_ball: "🔮",
|
|
1029
|
+
cuba: "🇨🇺",
|
|
1030
|
+
cucumber: "🥒",
|
|
1031
|
+
cup_with_straw: "🥤",
|
|
1032
|
+
cupcake: "🧁",
|
|
1033
|
+
cupid: "💘",
|
|
1034
|
+
curacao: "🇨🇼",
|
|
1035
|
+
curling_stone: "🥌",
|
|
1036
|
+
curly_haired_man: "👨🦱",
|
|
1037
|
+
curly_haired_woman: "👩🦱",
|
|
1038
|
+
curly_loop: "➰",
|
|
1039
|
+
currency_exchange: "💱",
|
|
1040
|
+
curry: "🍛",
|
|
1041
|
+
cursing_face: "🤬",
|
|
1042
|
+
custard: "🍮",
|
|
1043
|
+
customs: "🛃",
|
|
1044
|
+
cut_of_meat: "🥩",
|
|
1045
|
+
cyclone: "🌀",
|
|
1046
|
+
cyprus: "🇨🇾",
|
|
1047
|
+
czech_republic: "🇨🇿",
|
|
1048
|
+
dagger: "🗡",
|
|
1049
|
+
dancer: "💃",
|
|
1050
|
+
dancers: "👯",
|
|
1051
|
+
dancing_men: "👯♂",
|
|
1052
|
+
dancing_women: "👯♀",
|
|
1053
|
+
dango: "🍡",
|
|
1054
|
+
dark_sunglasses: "🕶",
|
|
1055
|
+
dart: "🎯",
|
|
1056
|
+
dash: "💨",
|
|
1057
|
+
date: "📅",
|
|
1058
|
+
de: "🇩🇪",
|
|
1059
|
+
deaf_man: "🧏♂",
|
|
1060
|
+
deaf_person: "🧏",
|
|
1061
|
+
deaf_woman: "🧏♀",
|
|
1062
|
+
deciduous_tree: "🌳",
|
|
1063
|
+
deer: "🦌",
|
|
1064
|
+
denmark: "🇩🇰",
|
|
1065
|
+
department_store: "🏬",
|
|
1066
|
+
derelict_house: "🏚",
|
|
1067
|
+
desert: "🏜",
|
|
1068
|
+
desert_island: "🏝",
|
|
1069
|
+
desktop_computer: "🖥",
|
|
1070
|
+
detective: "🕵",
|
|
1071
|
+
diamond_shape_with_a_dot_inside: "💠",
|
|
1072
|
+
diamonds: "♦",
|
|
1073
|
+
diego_garcia: "🇩🇬",
|
|
1074
|
+
disappointed: "😞",
|
|
1075
|
+
disappointed_relieved: "😥",
|
|
1076
|
+
disguised_face: "🥸",
|
|
1077
|
+
diving_mask: "🤿",
|
|
1078
|
+
diya_lamp: "🪔",
|
|
1079
|
+
dizzy: "💫",
|
|
1080
|
+
dizzy_face: "😵",
|
|
1081
|
+
djibouti: "🇩🇯",
|
|
1082
|
+
dna: "🧬",
|
|
1083
|
+
do_not_litter: "🚯",
|
|
1084
|
+
dodo: "🦤",
|
|
1085
|
+
dog: "🐶",
|
|
1086
|
+
dog2: "🐕",
|
|
1087
|
+
dollar: "💵",
|
|
1088
|
+
dolls: "🎎",
|
|
1089
|
+
dolphin: "🐬",
|
|
1090
|
+
dominica: "🇩🇲",
|
|
1091
|
+
dominican_republic: "🇩🇴",
|
|
1092
|
+
donkey: "🫏",
|
|
1093
|
+
door: "🚪",
|
|
1094
|
+
dotted_line_face: "🫥",
|
|
1095
|
+
doughnut: "🍩",
|
|
1096
|
+
dove: "🕊",
|
|
1097
|
+
dragon: "🐉",
|
|
1098
|
+
dragon_face: "🐲",
|
|
1099
|
+
dress: "👗",
|
|
1100
|
+
dromedary_camel: "🐪",
|
|
1101
|
+
drooling_face: "🤤",
|
|
1102
|
+
drop_of_blood: "🩸",
|
|
1103
|
+
droplet: "💧",
|
|
1104
|
+
drum: "🥁",
|
|
1105
|
+
duck: "🦆",
|
|
1106
|
+
dumpling: "🥟",
|
|
1107
|
+
dvd: "📀",
|
|
1108
|
+
"e-mail": "📧",
|
|
1109
|
+
eagle: "🦅",
|
|
1110
|
+
ear: "👂",
|
|
1111
|
+
ear_of_rice: "🌾",
|
|
1112
|
+
ear_with_hearing_aid: "🦻",
|
|
1113
|
+
earth_africa: "🌍",
|
|
1114
|
+
earth_americas: "🌎",
|
|
1115
|
+
earth_asia: "🌏",
|
|
1116
|
+
ecuador: "🇪🇨",
|
|
1117
|
+
egg: "🥚",
|
|
1118
|
+
eggplant: "🍆",
|
|
1119
|
+
egypt: "🇪🇬",
|
|
1120
|
+
eight: "8️⃣",
|
|
1121
|
+
eight_pointed_black_star: "✴",
|
|
1122
|
+
eight_spoked_asterisk: "✳",
|
|
1123
|
+
eject_button: "⏏",
|
|
1124
|
+
el_salvador: "🇸🇻",
|
|
1125
|
+
electric_plug: "🔌",
|
|
1126
|
+
elephant: "🐘",
|
|
1127
|
+
elevator: "🛗",
|
|
1128
|
+
elf: "🧝",
|
|
1129
|
+
elf_man: "🧝♂",
|
|
1130
|
+
elf_woman: "🧝♀",
|
|
1131
|
+
email: "📧",
|
|
1132
|
+
empty_nest: "🪹",
|
|
1133
|
+
end: "🔚",
|
|
1134
|
+
england: "🏴",
|
|
1135
|
+
envelope: "✉",
|
|
1136
|
+
envelope_with_arrow: "📩",
|
|
1137
|
+
equatorial_guinea: "🇬🇶",
|
|
1138
|
+
eritrea: "🇪🇷",
|
|
1139
|
+
es: "🇪🇸",
|
|
1140
|
+
estonia: "🇪🇪",
|
|
1141
|
+
ethiopia: "🇪🇹",
|
|
1142
|
+
eu: "🇪🇺",
|
|
1143
|
+
euro: "💶",
|
|
1144
|
+
european_castle: "🏰",
|
|
1145
|
+
european_post_office: "🏤",
|
|
1146
|
+
european_union: "🇪🇺",
|
|
1147
|
+
evergreen_tree: "🌲",
|
|
1148
|
+
exclamation: "❗",
|
|
1149
|
+
exploding_head: "🤯",
|
|
1150
|
+
expressionless: "😑",
|
|
1151
|
+
eye: "👁",
|
|
1152
|
+
eye_speech_bubble: "👁🗨",
|
|
1153
|
+
eyeglasses: "👓",
|
|
1154
|
+
eyes: "👀",
|
|
1155
|
+
face_exhaling: "😮💨",
|
|
1156
|
+
face_holding_back_tears: "🥹",
|
|
1157
|
+
face_in_clouds: "😶🌫",
|
|
1158
|
+
face_with_diagonal_mouth: "🫤",
|
|
1159
|
+
face_with_head_bandage: "🤕",
|
|
1160
|
+
face_with_open_eyes_and_hand_over_mouth: "🫢",
|
|
1161
|
+
face_with_peeking_eye: "🫣",
|
|
1162
|
+
face_with_spiral_eyes: "😵💫",
|
|
1163
|
+
face_with_thermometer: "🤒",
|
|
1164
|
+
facepalm: "🤦",
|
|
1165
|
+
facepunch: "👊",
|
|
1166
|
+
factory: "🏭",
|
|
1167
|
+
factory_worker: "🧑🏭",
|
|
1168
|
+
fairy: "🧚",
|
|
1169
|
+
fairy_man: "🧚♂",
|
|
1170
|
+
fairy_woman: "🧚♀",
|
|
1171
|
+
falafel: "🧆",
|
|
1172
|
+
falkland_islands: "🇫🇰",
|
|
1173
|
+
fallen_leaf: "🍂",
|
|
1174
|
+
family: "👪",
|
|
1175
|
+
family_man_boy: "👨👦",
|
|
1176
|
+
family_man_boy_boy: "👨👦👦",
|
|
1177
|
+
family_man_girl: "👨👧",
|
|
1178
|
+
family_man_girl_boy: "👨👧👦",
|
|
1179
|
+
family_man_girl_girl: "👨👧👧",
|
|
1180
|
+
family_man_man_boy: "👨👨👦",
|
|
1181
|
+
family_man_man_boy_boy: "👨👨👦👦",
|
|
1182
|
+
family_man_man_girl: "👨👨👧",
|
|
1183
|
+
family_man_man_girl_boy: "👨👨👧👦",
|
|
1184
|
+
family_man_man_girl_girl: "👨👨👧👧",
|
|
1185
|
+
family_man_woman_boy: "👨👩👦",
|
|
1186
|
+
family_man_woman_boy_boy: "👨👩👦👦",
|
|
1187
|
+
family_man_woman_girl: "👨👩👧",
|
|
1188
|
+
family_man_woman_girl_boy: "👨👩👧👦",
|
|
1189
|
+
family_man_woman_girl_girl: "👨👩👧👧",
|
|
1190
|
+
family_woman_boy: "👩👦",
|
|
1191
|
+
family_woman_boy_boy: "👩👦👦",
|
|
1192
|
+
family_woman_girl: "👩👧",
|
|
1193
|
+
family_woman_girl_boy: "👩👧👦",
|
|
1194
|
+
family_woman_girl_girl: "👩👧👧",
|
|
1195
|
+
family_woman_woman_boy: "👩👩👦",
|
|
1196
|
+
family_woman_woman_boy_boy: "👩👩👦👦",
|
|
1197
|
+
family_woman_woman_girl: "👩👩👧",
|
|
1198
|
+
family_woman_woman_girl_boy: "👩👩👧👦",
|
|
1199
|
+
family_woman_woman_girl_girl: "👩👩👧👧",
|
|
1200
|
+
farmer: "🧑🌾",
|
|
1201
|
+
faroe_islands: "🇫🇴",
|
|
1202
|
+
fast_forward: "⏩",
|
|
1203
|
+
fax: "📠",
|
|
1204
|
+
fearful: "😨",
|
|
1205
|
+
feather: "🪶",
|
|
1206
|
+
feet: "🐾",
|
|
1207
|
+
female_detective: "🕵♀",
|
|
1208
|
+
female_sign: "♀",
|
|
1209
|
+
ferris_wheel: "🎡",
|
|
1210
|
+
ferry: "⛴",
|
|
1211
|
+
field_hockey: "🏑",
|
|
1212
|
+
fiji: "🇫🇯",
|
|
1213
|
+
file_cabinet: "🗄",
|
|
1214
|
+
file_folder: "📁",
|
|
1215
|
+
film_projector: "📽",
|
|
1216
|
+
film_strip: "🎞",
|
|
1217
|
+
finland: "🇫🇮",
|
|
1218
|
+
fire: "🔥",
|
|
1219
|
+
fire_engine: "🚒",
|
|
1220
|
+
fire_extinguisher: "🧯",
|
|
1221
|
+
firecracker: "🧨",
|
|
1222
|
+
firefighter: "🧑🚒",
|
|
1223
|
+
fireworks: "🎆",
|
|
1224
|
+
first_quarter_moon: "🌓",
|
|
1225
|
+
first_quarter_moon_with_face: "🌛",
|
|
1226
|
+
fish: "🐟",
|
|
1227
|
+
fish_cake: "🍥",
|
|
1228
|
+
fishing_pole_and_fish: "🎣",
|
|
1229
|
+
fist: "✊",
|
|
1230
|
+
fist_left: "🤛",
|
|
1231
|
+
fist_oncoming: "👊",
|
|
1232
|
+
fist_raised: "✊",
|
|
1233
|
+
fist_right: "🤜",
|
|
1234
|
+
five: "5️⃣",
|
|
1235
|
+
flags: "🎏",
|
|
1236
|
+
flamingo: "🦩",
|
|
1237
|
+
flashlight: "🔦",
|
|
1238
|
+
flat_shoe: "🥿",
|
|
1239
|
+
flatbread: "🫓",
|
|
1240
|
+
fleur_de_lis: "⚜",
|
|
1241
|
+
flight_arrival: "🛬",
|
|
1242
|
+
flight_departure: "🛫",
|
|
1243
|
+
flipper: "🐬",
|
|
1244
|
+
floppy_disk: "💾",
|
|
1245
|
+
flower_playing_cards: "🎴",
|
|
1246
|
+
flushed: "😳",
|
|
1247
|
+
flute: "🪈",
|
|
1248
|
+
fly: "🪰",
|
|
1249
|
+
flying_disc: "🥏",
|
|
1250
|
+
flying_saucer: "🛸",
|
|
1251
|
+
fog: "🌫",
|
|
1252
|
+
foggy: "🌁",
|
|
1253
|
+
folding_hand_fan: "🪭",
|
|
1254
|
+
fondue: "🫕",
|
|
1255
|
+
foot: "🦶",
|
|
1256
|
+
football: "🏈",
|
|
1257
|
+
footprints: "👣",
|
|
1258
|
+
fork_and_knife: "🍴",
|
|
1259
|
+
fortune_cookie: "🥠",
|
|
1260
|
+
fountain: "⛲",
|
|
1261
|
+
fountain_pen: "🖋",
|
|
1262
|
+
four: "4️⃣",
|
|
1263
|
+
four_leaf_clover: "🍀",
|
|
1264
|
+
fox_face: "🦊",
|
|
1265
|
+
fr: "🇫🇷",
|
|
1266
|
+
framed_picture: "🖼",
|
|
1267
|
+
free: "🆓",
|
|
1268
|
+
french_guiana: "🇬🇫",
|
|
1269
|
+
french_polynesia: "🇵🇫",
|
|
1270
|
+
french_southern_territories: "🇹🇫",
|
|
1271
|
+
fried_egg: "🍳",
|
|
1272
|
+
fried_shrimp: "🍤",
|
|
1273
|
+
fries: "🍟",
|
|
1274
|
+
frog: "🐸",
|
|
1275
|
+
frowning: "😦",
|
|
1276
|
+
frowning_face: "☹",
|
|
1277
|
+
frowning_man: "🙍♂",
|
|
1278
|
+
frowning_person: "🙍",
|
|
1279
|
+
frowning_woman: "🙍♀",
|
|
1280
|
+
fu: "🖕",
|
|
1281
|
+
fuelpump: "⛽",
|
|
1282
|
+
full_moon: "🌕",
|
|
1283
|
+
full_moon_with_face: "🌝",
|
|
1284
|
+
funeral_urn: "⚱",
|
|
1285
|
+
gabon: "🇬🇦",
|
|
1286
|
+
gambia: "🇬🇲",
|
|
1287
|
+
game_die: "🎲",
|
|
1288
|
+
garlic: "🧄",
|
|
1289
|
+
gb: "🇬🇧",
|
|
1290
|
+
gear: "⚙",
|
|
1291
|
+
gem: "💎",
|
|
1292
|
+
gemini: "♊",
|
|
1293
|
+
genie: "🧞",
|
|
1294
|
+
genie_man: "🧞♂",
|
|
1295
|
+
genie_woman: "🧞♀",
|
|
1296
|
+
georgia: "🇬🇪",
|
|
1297
|
+
ghana: "🇬🇭",
|
|
1298
|
+
ghost: "👻",
|
|
1299
|
+
gibraltar: "🇬🇮",
|
|
1300
|
+
gift: "🎁",
|
|
1301
|
+
gift_heart: "💝",
|
|
1302
|
+
ginger_root: "🫚",
|
|
1303
|
+
giraffe: "🦒",
|
|
1304
|
+
girl: "👧",
|
|
1305
|
+
globe_with_meridians: "🌐",
|
|
1306
|
+
gloves: "🧤",
|
|
1307
|
+
goal_net: "🥅",
|
|
1308
|
+
goat: "🐐",
|
|
1309
|
+
goggles: "🥽",
|
|
1310
|
+
golf: "⛳",
|
|
1311
|
+
golfing: "🏌",
|
|
1312
|
+
golfing_man: "🏌♂",
|
|
1313
|
+
golfing_woman: "🏌♀",
|
|
1314
|
+
goose: "🪿",
|
|
1315
|
+
gorilla: "🦍",
|
|
1316
|
+
grapes: "🍇",
|
|
1317
|
+
greece: "🇬🇷",
|
|
1318
|
+
green_apple: "🍏",
|
|
1319
|
+
green_book: "📗",
|
|
1320
|
+
green_circle: "🟢",
|
|
1321
|
+
green_heart: "💚",
|
|
1322
|
+
green_salad: "🥗",
|
|
1323
|
+
green_square: "🟩",
|
|
1324
|
+
greenland: "🇬🇱",
|
|
1325
|
+
grenada: "🇬🇩",
|
|
1326
|
+
grey_exclamation: "❕",
|
|
1327
|
+
grey_heart: "🩶",
|
|
1328
|
+
grey_question: "❔",
|
|
1329
|
+
grimacing: "😬",
|
|
1330
|
+
grin: "😁",
|
|
1331
|
+
grinning: "😀",
|
|
1332
|
+
guadeloupe: "🇬🇵",
|
|
1333
|
+
guam: "🇬🇺",
|
|
1334
|
+
guard: "💂",
|
|
1335
|
+
guardsman: "💂♂",
|
|
1336
|
+
guardswoman: "💂♀",
|
|
1337
|
+
guatemala: "🇬🇹",
|
|
1338
|
+
guernsey: "🇬🇬",
|
|
1339
|
+
guide_dog: "🦮",
|
|
1340
|
+
guinea: "🇬🇳",
|
|
1341
|
+
guinea_bissau: "🇬🇼",
|
|
1342
|
+
guitar: "🎸",
|
|
1343
|
+
gun: "🔫",
|
|
1344
|
+
guyana: "🇬🇾",
|
|
1345
|
+
hair_pick: "🪮",
|
|
1346
|
+
haircut: "💇",
|
|
1347
|
+
haircut_man: "💇♂",
|
|
1348
|
+
haircut_woman: "💇♀",
|
|
1349
|
+
haiti: "🇭🇹",
|
|
1350
|
+
hamburger: "🍔",
|
|
1351
|
+
hammer: "🔨",
|
|
1352
|
+
hammer_and_pick: "⚒",
|
|
1353
|
+
hammer_and_wrench: "🛠",
|
|
1354
|
+
hamsa: "🪬",
|
|
1355
|
+
hamster: "🐹",
|
|
1356
|
+
hand: "✋",
|
|
1357
|
+
hand_over_mouth: "🤭",
|
|
1358
|
+
hand_with_index_finger_and_thumb_crossed: "🫰",
|
|
1359
|
+
handbag: "👜",
|
|
1360
|
+
handball_person: "🤾",
|
|
1361
|
+
handshake: "🤝",
|
|
1362
|
+
hankey: "💩",
|
|
1363
|
+
hash: "#️⃣",
|
|
1364
|
+
hatched_chick: "🐥",
|
|
1365
|
+
hatching_chick: "🐣",
|
|
1366
|
+
headphones: "🎧",
|
|
1367
|
+
headstone: "🪦",
|
|
1368
|
+
health_worker: "🧑⚕",
|
|
1369
|
+
hear_no_evil: "🙉",
|
|
1370
|
+
heard_mcdonald_islands: "🇭🇲",
|
|
1371
|
+
heart: "❤",
|
|
1372
|
+
heart_decoration: "💟",
|
|
1373
|
+
heart_eyes: "😍",
|
|
1374
|
+
heart_eyes_cat: "😻",
|
|
1375
|
+
heart_hands: "🫶",
|
|
1376
|
+
heart_on_fire: "❤🔥",
|
|
1377
|
+
heartbeat: "💓",
|
|
1378
|
+
heartpulse: "💗",
|
|
1379
|
+
hearts: "♥",
|
|
1380
|
+
heavy_check_mark: "✔",
|
|
1381
|
+
heavy_division_sign: "➗",
|
|
1382
|
+
heavy_dollar_sign: "💲",
|
|
1383
|
+
heavy_equals_sign: "🟰",
|
|
1384
|
+
heavy_exclamation_mark: "❗",
|
|
1385
|
+
heavy_heart_exclamation: "❣",
|
|
1386
|
+
heavy_minus_sign: "➖",
|
|
1387
|
+
heavy_multiplication_x: "✖",
|
|
1388
|
+
heavy_plus_sign: "➕",
|
|
1389
|
+
hedgehog: "🦔",
|
|
1390
|
+
helicopter: "🚁",
|
|
1391
|
+
herb: "🌿",
|
|
1392
|
+
hibiscus: "🌺",
|
|
1393
|
+
high_brightness: "🔆",
|
|
1394
|
+
high_heel: "👠",
|
|
1395
|
+
hiking_boot: "🥾",
|
|
1396
|
+
hindu_temple: "🛕",
|
|
1397
|
+
hippopotamus: "🦛",
|
|
1398
|
+
hocho: "🔪",
|
|
1399
|
+
hole: "🕳",
|
|
1400
|
+
honduras: "🇭🇳",
|
|
1401
|
+
honey_pot: "🍯",
|
|
1402
|
+
honeybee: "🐝",
|
|
1403
|
+
hong_kong: "🇭🇰",
|
|
1404
|
+
hook: "🪝",
|
|
1405
|
+
horse: "🐴",
|
|
1406
|
+
horse_racing: "🏇",
|
|
1407
|
+
hospital: "🏥",
|
|
1408
|
+
hot_face: "🥵",
|
|
1409
|
+
hot_pepper: "🌶",
|
|
1410
|
+
hotdog: "🌭",
|
|
1411
|
+
hotel: "🏨",
|
|
1412
|
+
hotsprings: "♨",
|
|
1413
|
+
hourglass: "⌛",
|
|
1414
|
+
hourglass_flowing_sand: "⏳",
|
|
1415
|
+
house: "🏠",
|
|
1416
|
+
house_with_garden: "🏡",
|
|
1417
|
+
houses: "🏘",
|
|
1418
|
+
hugs: "🤗",
|
|
1419
|
+
hungary: "🇭🇺",
|
|
1420
|
+
hushed: "😯",
|
|
1421
|
+
hut: "🛖",
|
|
1422
|
+
hyacinth: "🪻",
|
|
1423
|
+
ice_cream: "🍨",
|
|
1424
|
+
ice_cube: "🧊",
|
|
1425
|
+
ice_hockey: "🏒",
|
|
1426
|
+
ice_skate: "⛸",
|
|
1427
|
+
icecream: "🍦",
|
|
1428
|
+
iceland: "🇮🇸",
|
|
1429
|
+
id: "🆔",
|
|
1430
|
+
identification_card: "🪪",
|
|
1431
|
+
ideograph_advantage: "🉐",
|
|
1432
|
+
imp: "👿",
|
|
1433
|
+
inbox_tray: "📥",
|
|
1434
|
+
incoming_envelope: "📨",
|
|
1435
|
+
index_pointing_at_the_viewer: "🫵",
|
|
1436
|
+
india: "🇮🇳",
|
|
1437
|
+
indonesia: "🇮🇩",
|
|
1438
|
+
infinity: "♾",
|
|
1439
|
+
information_desk_person: "💁",
|
|
1440
|
+
information_source: "ℹ",
|
|
1441
|
+
innocent: "😇",
|
|
1442
|
+
interrobang: "⁉",
|
|
1443
|
+
iphone: "📱",
|
|
1444
|
+
iran: "🇮🇷",
|
|
1445
|
+
iraq: "🇮🇶",
|
|
1446
|
+
ireland: "🇮🇪",
|
|
1447
|
+
isle_of_man: "🇮🇲",
|
|
1448
|
+
israel: "🇮🇱",
|
|
1449
|
+
it: "🇮🇹",
|
|
1450
|
+
izakaya_lantern: "🏮",
|
|
1451
|
+
jack_o_lantern: "🎃",
|
|
1452
|
+
jamaica: "🇯🇲",
|
|
1453
|
+
japan: "🗾",
|
|
1454
|
+
japanese_castle: "🏯",
|
|
1455
|
+
japanese_goblin: "👺",
|
|
1456
|
+
japanese_ogre: "👹",
|
|
1457
|
+
jar: "🫙",
|
|
1458
|
+
jeans: "👖",
|
|
1459
|
+
jellyfish: "🪼",
|
|
1460
|
+
jersey: "🇯🇪",
|
|
1461
|
+
jigsaw: "🧩",
|
|
1462
|
+
jordan: "🇯🇴",
|
|
1463
|
+
joy: "😂",
|
|
1464
|
+
joy_cat: "😹",
|
|
1465
|
+
joystick: "🕹",
|
|
1466
|
+
jp: "🇯🇵",
|
|
1467
|
+
judge: "🧑⚖",
|
|
1468
|
+
juggling_person: "🤹",
|
|
1469
|
+
kaaba: "🕋",
|
|
1470
|
+
kangaroo: "🦘",
|
|
1471
|
+
kazakhstan: "🇰🇿",
|
|
1472
|
+
kenya: "🇰🇪",
|
|
1473
|
+
key: "🔑",
|
|
1474
|
+
keyboard: "⌨",
|
|
1475
|
+
keycap_ten: "🔟",
|
|
1476
|
+
khanda: "🪯",
|
|
1477
|
+
kick_scooter: "🛴",
|
|
1478
|
+
kimono: "👘",
|
|
1479
|
+
kiribati: "🇰🇮",
|
|
1480
|
+
kiss: "💋",
|
|
1481
|
+
kissing: "😗",
|
|
1482
|
+
kissing_cat: "😽",
|
|
1483
|
+
kissing_closed_eyes: "😚",
|
|
1484
|
+
kissing_heart: "😘",
|
|
1485
|
+
kissing_smiling_eyes: "😙",
|
|
1486
|
+
kite: "🪁",
|
|
1487
|
+
kiwi_fruit: "🥝",
|
|
1488
|
+
kneeling_man: "🧎♂",
|
|
1489
|
+
kneeling_person: "🧎",
|
|
1490
|
+
kneeling_woman: "🧎♀",
|
|
1491
|
+
knife: "🔪",
|
|
1492
|
+
knot: "🪢",
|
|
1493
|
+
koala: "🐨",
|
|
1494
|
+
koko: "🈁",
|
|
1495
|
+
kosovo: "🇽🇰",
|
|
1496
|
+
kr: "🇰🇷",
|
|
1497
|
+
kuwait: "🇰🇼",
|
|
1498
|
+
kyrgyzstan: "🇰🇬",
|
|
1499
|
+
lab_coat: "🥼",
|
|
1500
|
+
label: "🏷",
|
|
1501
|
+
lacrosse: "🥍",
|
|
1502
|
+
ladder: "🪜",
|
|
1503
|
+
lady_beetle: "🐞",
|
|
1504
|
+
lantern: "🏮",
|
|
1505
|
+
laos: "🇱🇦",
|
|
1506
|
+
large_blue_circle: "🔵",
|
|
1507
|
+
large_blue_diamond: "🔷",
|
|
1508
|
+
large_orange_diamond: "🔶",
|
|
1509
|
+
last_quarter_moon: "🌗",
|
|
1510
|
+
last_quarter_moon_with_face: "🌜",
|
|
1511
|
+
latin_cross: "✝",
|
|
1512
|
+
latvia: "🇱🇻",
|
|
1513
|
+
laughing: "😆",
|
|
1514
|
+
leafy_green: "🥬",
|
|
1515
|
+
leaves: "🍃",
|
|
1516
|
+
lebanon: "🇱🇧",
|
|
1517
|
+
ledger: "📒",
|
|
1518
|
+
left_luggage: "🛅",
|
|
1519
|
+
left_right_arrow: "↔",
|
|
1520
|
+
left_speech_bubble: "🗨",
|
|
1521
|
+
leftwards_arrow_with_hook: "↩",
|
|
1522
|
+
leftwards_hand: "🫲",
|
|
1523
|
+
leftwards_pushing_hand: "🫷",
|
|
1524
|
+
leg: "🦵",
|
|
1525
|
+
lemon: "🍋",
|
|
1526
|
+
leo: "♌",
|
|
1527
|
+
leopard: "🐆",
|
|
1528
|
+
lesotho: "🇱🇸",
|
|
1529
|
+
level_slider: "🎚",
|
|
1530
|
+
liberia: "🇱🇷",
|
|
1531
|
+
libra: "♎",
|
|
1532
|
+
libya: "🇱🇾",
|
|
1533
|
+
liechtenstein: "🇱🇮",
|
|
1534
|
+
light_blue_heart: "🩵",
|
|
1535
|
+
light_rail: "🚈",
|
|
1536
|
+
link: "🔗",
|
|
1537
|
+
lion: "🦁",
|
|
1538
|
+
lips: "👄",
|
|
1539
|
+
lipstick: "💄",
|
|
1540
|
+
lithuania: "🇱🇹",
|
|
1541
|
+
lizard: "🦎",
|
|
1542
|
+
llama: "🦙",
|
|
1543
|
+
lobster: "🦞",
|
|
1544
|
+
lock: "🔒",
|
|
1545
|
+
lock_with_ink_pen: "🔏",
|
|
1546
|
+
lollipop: "🍭",
|
|
1547
|
+
long_drum: "🪘",
|
|
1548
|
+
loop: "➿",
|
|
1549
|
+
lotion_bottle: "🧴",
|
|
1550
|
+
lotus: "🪷",
|
|
1551
|
+
lotus_position: "🧘",
|
|
1552
|
+
lotus_position_man: "🧘♂",
|
|
1553
|
+
lotus_position_woman: "🧘♀",
|
|
1554
|
+
loud_sound: "🔊",
|
|
1555
|
+
loudspeaker: "📢",
|
|
1556
|
+
love_hotel: "🏩",
|
|
1557
|
+
love_letter: "💌",
|
|
1558
|
+
love_you_gesture: "🤟",
|
|
1559
|
+
low_battery: "🪫",
|
|
1560
|
+
low_brightness: "🔅",
|
|
1561
|
+
luggage: "🧳",
|
|
1562
|
+
lungs: "🫁",
|
|
1563
|
+
luxembourg: "🇱🇺",
|
|
1564
|
+
lying_face: "🤥",
|
|
1565
|
+
m: "Ⓜ",
|
|
1566
|
+
macau: "🇲🇴",
|
|
1567
|
+
macedonia: "🇲🇰",
|
|
1568
|
+
madagascar: "🇲🇬",
|
|
1569
|
+
mag: "🔍",
|
|
1570
|
+
mag_right: "🔎",
|
|
1571
|
+
mage: "🧙",
|
|
1572
|
+
mage_man: "🧙♂",
|
|
1573
|
+
mage_woman: "🧙♀",
|
|
1574
|
+
magic_wand: "🪄",
|
|
1575
|
+
magnet: "🧲",
|
|
1576
|
+
mahjong: "🀄",
|
|
1577
|
+
mailbox: "📫",
|
|
1578
|
+
mailbox_closed: "📪",
|
|
1579
|
+
mailbox_with_mail: "📬",
|
|
1580
|
+
mailbox_with_no_mail: "📭",
|
|
1581
|
+
malawi: "🇲🇼",
|
|
1582
|
+
malaysia: "🇲🇾",
|
|
1583
|
+
maldives: "🇲🇻",
|
|
1584
|
+
male_detective: "🕵♂",
|
|
1585
|
+
male_sign: "♂",
|
|
1586
|
+
mali: "🇲🇱",
|
|
1587
|
+
malta: "🇲🇹",
|
|
1588
|
+
mammoth: "🦣",
|
|
1589
|
+
man: "👨",
|
|
1590
|
+
man_artist: "👨🎨",
|
|
1591
|
+
man_astronaut: "👨🚀",
|
|
1592
|
+
man_beard: "🧔♂",
|
|
1593
|
+
man_cartwheeling: "🤸♂",
|
|
1594
|
+
man_cook: "👨🍳",
|
|
1595
|
+
man_dancing: "🕺",
|
|
1596
|
+
man_facepalming: "🤦♂",
|
|
1597
|
+
man_factory_worker: "👨🏭",
|
|
1598
|
+
man_farmer: "👨🌾",
|
|
1599
|
+
man_feeding_baby: "👨🍼",
|
|
1600
|
+
man_firefighter: "👨🚒",
|
|
1601
|
+
man_health_worker: "👨⚕",
|
|
1602
|
+
man_in_manual_wheelchair: "👨🦽",
|
|
1603
|
+
man_in_motorized_wheelchair: "👨🦼",
|
|
1604
|
+
man_in_tuxedo: "🤵♂",
|
|
1605
|
+
man_judge: "👨⚖",
|
|
1606
|
+
man_juggling: "🤹♂",
|
|
1607
|
+
man_mechanic: "👨🔧",
|
|
1608
|
+
man_office_worker: "👨💼",
|
|
1609
|
+
man_pilot: "👨✈",
|
|
1610
|
+
man_playing_handball: "🤾♂",
|
|
1611
|
+
man_playing_water_polo: "🤽♂",
|
|
1612
|
+
man_scientist: "👨🔬",
|
|
1613
|
+
man_shrugging: "🤷♂",
|
|
1614
|
+
man_singer: "👨🎤",
|
|
1615
|
+
man_student: "👨🎓",
|
|
1616
|
+
man_teacher: "👨🏫",
|
|
1617
|
+
man_technologist: "👨💻",
|
|
1618
|
+
man_with_gua_pi_mao: "👲",
|
|
1619
|
+
man_with_probing_cane: "👨🦯",
|
|
1620
|
+
man_with_turban: "👳♂",
|
|
1621
|
+
man_with_veil: "👰♂",
|
|
1622
|
+
mandarin: "🍊",
|
|
1623
|
+
mango: "🥭",
|
|
1624
|
+
mans_shoe: "👞",
|
|
1625
|
+
mantelpiece_clock: "🕰",
|
|
1626
|
+
manual_wheelchair: "🦽",
|
|
1627
|
+
maple_leaf: "🍁",
|
|
1628
|
+
maracas: "🪇",
|
|
1629
|
+
marshall_islands: "🇲🇭",
|
|
1630
|
+
martial_arts_uniform: "🥋",
|
|
1631
|
+
martinique: "🇲🇶",
|
|
1632
|
+
mask: "😷",
|
|
1633
|
+
massage: "💆",
|
|
1634
|
+
massage_man: "💆♂",
|
|
1635
|
+
massage_woman: "💆♀",
|
|
1636
|
+
mate: "🧉",
|
|
1637
|
+
mauritania: "🇲🇷",
|
|
1638
|
+
mauritius: "🇲🇺",
|
|
1639
|
+
mayotte: "🇾🇹",
|
|
1640
|
+
meat_on_bone: "🍖",
|
|
1641
|
+
mechanic: "🧑🔧",
|
|
1642
|
+
mechanical_arm: "🦾",
|
|
1643
|
+
mechanical_leg: "🦿",
|
|
1644
|
+
medal_military: "🎖",
|
|
1645
|
+
medal_sports: "🏅",
|
|
1646
|
+
medical_symbol: "⚕",
|
|
1647
|
+
mega: "📣",
|
|
1648
|
+
melon: "🍈",
|
|
1649
|
+
melting_face: "🫠",
|
|
1650
|
+
memo: "📝",
|
|
1651
|
+
men_wrestling: "🤼♂",
|
|
1652
|
+
mending_heart: "❤🩹",
|
|
1653
|
+
menorah: "🕎",
|
|
1654
|
+
mens: "🚹",
|
|
1655
|
+
mermaid: "🧜♀",
|
|
1656
|
+
merman: "🧜♂",
|
|
1657
|
+
merperson: "🧜",
|
|
1658
|
+
metal: "🤘",
|
|
1659
|
+
metro: "🚇",
|
|
1660
|
+
mexico: "🇲🇽",
|
|
1661
|
+
microbe: "🦠",
|
|
1662
|
+
micronesia: "🇫🇲",
|
|
1663
|
+
microphone: "🎤",
|
|
1664
|
+
microscope: "🔬",
|
|
1665
|
+
middle_finger: "🖕",
|
|
1666
|
+
military_helmet: "🪖",
|
|
1667
|
+
milk_glass: "🥛",
|
|
1668
|
+
milky_way: "🌌",
|
|
1669
|
+
minibus: "🚐",
|
|
1670
|
+
minidisc: "💽",
|
|
1671
|
+
mirror: "🪞",
|
|
1672
|
+
mirror_ball: "🪩",
|
|
1673
|
+
mobile_phone_off: "📴",
|
|
1674
|
+
moldova: "🇲🇩",
|
|
1675
|
+
monaco: "🇲🇨",
|
|
1676
|
+
money_mouth_face: "🤑",
|
|
1677
|
+
money_with_wings: "💸",
|
|
1678
|
+
moneybag: "💰",
|
|
1679
|
+
mongolia: "🇲🇳",
|
|
1680
|
+
monkey: "🐒",
|
|
1681
|
+
monkey_face: "🐵",
|
|
1682
|
+
monocle_face: "🧐",
|
|
1683
|
+
monorail: "🚝",
|
|
1684
|
+
montenegro: "🇲🇪",
|
|
1685
|
+
montserrat: "🇲🇸",
|
|
1686
|
+
moon: "🌔",
|
|
1687
|
+
moon_cake: "🥮",
|
|
1688
|
+
moose: "🫎",
|
|
1689
|
+
morocco: "🇲🇦",
|
|
1690
|
+
mortar_board: "🎓",
|
|
1691
|
+
mosque: "🕌",
|
|
1692
|
+
mosquito: "🦟",
|
|
1693
|
+
motor_boat: "🛥",
|
|
1694
|
+
motor_scooter: "🛵",
|
|
1695
|
+
motorcycle: "🏍",
|
|
1696
|
+
motorized_wheelchair: "🦼",
|
|
1697
|
+
motorway: "🛣",
|
|
1698
|
+
mount_fuji: "🗻",
|
|
1699
|
+
mountain: "⛰",
|
|
1700
|
+
mountain_bicyclist: "🚵",
|
|
1701
|
+
mountain_biking_man: "🚵♂",
|
|
1702
|
+
mountain_biking_woman: "🚵♀",
|
|
1703
|
+
mountain_cableway: "🚠",
|
|
1704
|
+
mountain_railway: "🚞",
|
|
1705
|
+
mountain_snow: "🏔",
|
|
1706
|
+
mouse: "🐭",
|
|
1707
|
+
mouse2: "🐁",
|
|
1708
|
+
mouse_trap: "🪤",
|
|
1709
|
+
movie_camera: "🎥",
|
|
1710
|
+
moyai: "🗿",
|
|
1711
|
+
mozambique: "🇲🇿",
|
|
1712
|
+
mrs_claus: "🤶",
|
|
1713
|
+
muscle: "💪",
|
|
1714
|
+
mushroom: "🍄",
|
|
1715
|
+
musical_keyboard: "🎹",
|
|
1716
|
+
musical_note: "🎵",
|
|
1717
|
+
musical_score: "🎼",
|
|
1718
|
+
mute: "🔇",
|
|
1719
|
+
mx_claus: "🧑🎄",
|
|
1720
|
+
myanmar: "🇲🇲",
|
|
1721
|
+
nail_care: "💅",
|
|
1722
|
+
name_badge: "📛",
|
|
1723
|
+
namibia: "🇳🇦",
|
|
1724
|
+
national_park: "🏞",
|
|
1725
|
+
nauru: "🇳🇷",
|
|
1726
|
+
nauseated_face: "🤢",
|
|
1727
|
+
nazar_amulet: "🧿",
|
|
1728
|
+
necktie: "👔",
|
|
1729
|
+
negative_squared_cross_mark: "❎",
|
|
1730
|
+
nepal: "🇳🇵",
|
|
1731
|
+
nerd_face: "🤓",
|
|
1732
|
+
nest_with_eggs: "🪺",
|
|
1733
|
+
nesting_dolls: "🪆",
|
|
1734
|
+
netherlands: "🇳🇱",
|
|
1735
|
+
neutral_face: "😐",
|
|
1736
|
+
new: "🆕",
|
|
1737
|
+
new_caledonia: "🇳🇨",
|
|
1738
|
+
new_moon: "🌑",
|
|
1739
|
+
new_moon_with_face: "🌚",
|
|
1740
|
+
new_zealand: "🇳🇿",
|
|
1741
|
+
newspaper: "📰",
|
|
1742
|
+
newspaper_roll: "🗞",
|
|
1743
|
+
next_track_button: "⏭",
|
|
1744
|
+
ng: "🆖",
|
|
1745
|
+
ng_man: "🙅♂",
|
|
1746
|
+
ng_woman: "🙅♀",
|
|
1747
|
+
nicaragua: "🇳🇮",
|
|
1748
|
+
niger: "🇳🇪",
|
|
1749
|
+
nigeria: "🇳🇬",
|
|
1750
|
+
night_with_stars: "🌃",
|
|
1751
|
+
nine: "9️⃣",
|
|
1752
|
+
ninja: "🥷",
|
|
1753
|
+
niue: "🇳🇺",
|
|
1754
|
+
no_bell: "🔕",
|
|
1755
|
+
no_bicycles: "🚳",
|
|
1756
|
+
no_entry: "⛔",
|
|
1757
|
+
no_entry_sign: "🚫",
|
|
1758
|
+
no_good: "🙅",
|
|
1759
|
+
no_good_man: "🙅♂",
|
|
1760
|
+
no_good_woman: "🙅♀",
|
|
1761
|
+
no_mobile_phones: "📵",
|
|
1762
|
+
no_mouth: "😶",
|
|
1763
|
+
no_pedestrians: "🚷",
|
|
1764
|
+
no_smoking: "🚭",
|
|
1765
|
+
"non-potable_water": "🚱",
|
|
1766
|
+
norfolk_island: "🇳🇫",
|
|
1767
|
+
north_korea: "🇰🇵",
|
|
1768
|
+
northern_mariana_islands: "🇲🇵",
|
|
1769
|
+
norway: "🇳🇴",
|
|
1770
|
+
nose: "👃",
|
|
1771
|
+
notebook: "📓",
|
|
1772
|
+
notebook_with_decorative_cover: "📔",
|
|
1773
|
+
notes: "🎶",
|
|
1774
|
+
nut_and_bolt: "🔩",
|
|
1775
|
+
o: "⭕",
|
|
1776
|
+
o2: "🅾",
|
|
1777
|
+
ocean: "🌊",
|
|
1778
|
+
octopus: "🐙",
|
|
1779
|
+
oden: "🍢",
|
|
1780
|
+
office: "🏢",
|
|
1781
|
+
office_worker: "🧑💼",
|
|
1782
|
+
oil_drum: "🛢",
|
|
1783
|
+
ok: "🆗",
|
|
1784
|
+
ok_hand: "👌",
|
|
1785
|
+
ok_man: "🙆♂",
|
|
1786
|
+
ok_person: "🙆",
|
|
1787
|
+
ok_woman: "🙆♀",
|
|
1788
|
+
old_key: "🗝",
|
|
1789
|
+
older_adult: "🧓",
|
|
1790
|
+
older_man: "👴",
|
|
1791
|
+
older_woman: "👵",
|
|
1792
|
+
olive: "🫒",
|
|
1793
|
+
om: "🕉",
|
|
1794
|
+
oman: "🇴🇲",
|
|
1795
|
+
on: "🔛",
|
|
1796
|
+
oncoming_automobile: "🚘",
|
|
1797
|
+
oncoming_bus: "🚍",
|
|
1798
|
+
oncoming_police_car: "🚔",
|
|
1799
|
+
oncoming_taxi: "🚖",
|
|
1800
|
+
one: "1️⃣",
|
|
1801
|
+
one_piece_swimsuit: "🩱",
|
|
1802
|
+
onion: "🧅",
|
|
1803
|
+
open_book: "📖",
|
|
1804
|
+
open_file_folder: "📂",
|
|
1805
|
+
open_hands: "👐",
|
|
1806
|
+
open_mouth: "😮",
|
|
1807
|
+
open_umbrella: "☂",
|
|
1808
|
+
ophiuchus: "⛎",
|
|
1809
|
+
orange: "🍊",
|
|
1810
|
+
orange_book: "📙",
|
|
1811
|
+
orange_circle: "🟠",
|
|
1812
|
+
orange_heart: "🧡",
|
|
1813
|
+
orange_square: "🟧",
|
|
1814
|
+
orangutan: "🦧",
|
|
1815
|
+
orthodox_cross: "☦",
|
|
1816
|
+
otter: "🦦",
|
|
1817
|
+
outbox_tray: "📤",
|
|
1818
|
+
owl: "🦉",
|
|
1819
|
+
ox: "🐂",
|
|
1820
|
+
oyster: "🦪",
|
|
1821
|
+
package: "📦",
|
|
1822
|
+
page_facing_up: "📄",
|
|
1823
|
+
page_with_curl: "📃",
|
|
1824
|
+
pager: "📟",
|
|
1825
|
+
paintbrush: "🖌",
|
|
1826
|
+
pakistan: "🇵🇰",
|
|
1827
|
+
palau: "🇵🇼",
|
|
1828
|
+
palestinian_territories: "🇵🇸",
|
|
1829
|
+
palm_down_hand: "🫳",
|
|
1830
|
+
palm_tree: "🌴",
|
|
1831
|
+
palm_up_hand: "🫴",
|
|
1832
|
+
palms_up_together: "🤲",
|
|
1833
|
+
panama: "🇵🇦",
|
|
1834
|
+
pancakes: "🥞",
|
|
1835
|
+
panda_face: "🐼",
|
|
1836
|
+
paperclip: "📎",
|
|
1837
|
+
paperclips: "🖇",
|
|
1838
|
+
papua_new_guinea: "🇵🇬",
|
|
1839
|
+
parachute: "🪂",
|
|
1840
|
+
paraguay: "🇵🇾",
|
|
1841
|
+
parasol_on_ground: "⛱",
|
|
1842
|
+
parking: "🅿",
|
|
1843
|
+
parrot: "🦜",
|
|
1844
|
+
part_alternation_mark: "〽",
|
|
1845
|
+
partly_sunny: "⛅",
|
|
1846
|
+
partying_face: "🥳",
|
|
1847
|
+
passenger_ship: "🛳",
|
|
1848
|
+
passport_control: "🛂",
|
|
1849
|
+
pause_button: "⏸",
|
|
1850
|
+
paw_prints: "🐾",
|
|
1851
|
+
pea_pod: "🫛",
|
|
1852
|
+
peace_symbol: "☮",
|
|
1853
|
+
peach: "🍑",
|
|
1854
|
+
peacock: "🦚",
|
|
1855
|
+
peanuts: "🥜",
|
|
1856
|
+
pear: "🍐",
|
|
1857
|
+
pen: "🖊",
|
|
1858
|
+
pencil: "📝",
|
|
1859
|
+
pencil2: "✏",
|
|
1860
|
+
penguin: "🐧",
|
|
1861
|
+
pensive: "😔",
|
|
1862
|
+
people_holding_hands: "🧑🤝🧑",
|
|
1863
|
+
people_hugging: "🫂",
|
|
1864
|
+
performing_arts: "🎭",
|
|
1865
|
+
persevere: "😣",
|
|
1866
|
+
person_bald: "🧑🦲",
|
|
1867
|
+
person_curly_hair: "🧑🦱",
|
|
1868
|
+
person_feeding_baby: "🧑🍼",
|
|
1869
|
+
person_fencing: "🤺",
|
|
1870
|
+
person_in_manual_wheelchair: "🧑🦽",
|
|
1871
|
+
person_in_motorized_wheelchair: "🧑🦼",
|
|
1872
|
+
person_in_tuxedo: "🤵",
|
|
1873
|
+
person_red_hair: "🧑🦰",
|
|
1874
|
+
person_white_hair: "🧑🦳",
|
|
1875
|
+
person_with_crown: "🫅",
|
|
1876
|
+
person_with_probing_cane: "🧑🦯",
|
|
1877
|
+
person_with_turban: "👳",
|
|
1878
|
+
person_with_veil: "👰",
|
|
1879
|
+
peru: "🇵🇪",
|
|
1880
|
+
petri_dish: "🧫",
|
|
1881
|
+
philippines: "🇵🇭",
|
|
1882
|
+
phone: "☎",
|
|
1883
|
+
pick: "⛏",
|
|
1884
|
+
pickup_truck: "🛻",
|
|
1885
|
+
pie: "🥧",
|
|
1886
|
+
pig: "🐷",
|
|
1887
|
+
pig2: "🐖",
|
|
1888
|
+
pig_nose: "🐽",
|
|
1889
|
+
pill: "💊",
|
|
1890
|
+
pilot: "🧑✈",
|
|
1891
|
+
pinata: "🪅",
|
|
1892
|
+
pinched_fingers: "🤌",
|
|
1893
|
+
pinching_hand: "🤏",
|
|
1894
|
+
pineapple: "🍍",
|
|
1895
|
+
ping_pong: "🏓",
|
|
1896
|
+
pink_heart: "🩷",
|
|
1897
|
+
pirate_flag: "🏴☠",
|
|
1898
|
+
pisces: "♓",
|
|
1899
|
+
pitcairn_islands: "🇵🇳",
|
|
1900
|
+
pizza: "🍕",
|
|
1901
|
+
placard: "🪧",
|
|
1902
|
+
place_of_worship: "🛐",
|
|
1903
|
+
plate_with_cutlery: "🍽",
|
|
1904
|
+
play_or_pause_button: "⏯",
|
|
1905
|
+
playground_slide: "🛝",
|
|
1906
|
+
pleading_face: "🥺",
|
|
1907
|
+
plunger: "🪠",
|
|
1908
|
+
point_down: "👇",
|
|
1909
|
+
point_left: "👈",
|
|
1910
|
+
point_right: "👉",
|
|
1911
|
+
point_up: "☝",
|
|
1912
|
+
point_up_2: "👆",
|
|
1913
|
+
poland: "🇵🇱",
|
|
1914
|
+
polar_bear: "🐻❄",
|
|
1915
|
+
police_car: "🚓",
|
|
1916
|
+
police_officer: "👮",
|
|
1917
|
+
policeman: "👮♂",
|
|
1918
|
+
policewoman: "👮♀",
|
|
1919
|
+
poodle: "🐩",
|
|
1920
|
+
poop: "💩",
|
|
1921
|
+
popcorn: "🍿",
|
|
1922
|
+
portugal: "🇵🇹",
|
|
1923
|
+
post_office: "🏣",
|
|
1924
|
+
postal_horn: "📯",
|
|
1925
|
+
postbox: "📮",
|
|
1926
|
+
potable_water: "🚰",
|
|
1927
|
+
potato: "🥔",
|
|
1928
|
+
potted_plant: "🪴",
|
|
1929
|
+
pouch: "👝",
|
|
1930
|
+
poultry_leg: "🍗",
|
|
1931
|
+
pound: "💷",
|
|
1932
|
+
pouring_liquid: "🫗",
|
|
1933
|
+
pout: "😡",
|
|
1934
|
+
pouting_cat: "😾",
|
|
1935
|
+
pouting_face: "🙎",
|
|
1936
|
+
pouting_man: "🙎♂",
|
|
1937
|
+
pouting_woman: "🙎♀",
|
|
1938
|
+
pray: "🙏",
|
|
1939
|
+
prayer_beads: "📿",
|
|
1940
|
+
pregnant_man: "🫃",
|
|
1941
|
+
pregnant_person: "🫄",
|
|
1942
|
+
pregnant_woman: "🤰",
|
|
1943
|
+
pretzel: "🥨",
|
|
1944
|
+
previous_track_button: "⏮",
|
|
1945
|
+
prince: "🤴",
|
|
1946
|
+
princess: "👸",
|
|
1947
|
+
printer: "🖨",
|
|
1948
|
+
probing_cane: "🦯",
|
|
1949
|
+
puerto_rico: "🇵🇷",
|
|
1950
|
+
punch: "👊",
|
|
1951
|
+
purple_circle: "🟣",
|
|
1952
|
+
purple_heart: "💜",
|
|
1953
|
+
purple_square: "🟪",
|
|
1954
|
+
purse: "👛",
|
|
1955
|
+
pushpin: "📌",
|
|
1956
|
+
put_litter_in_its_place: "🚮",
|
|
1957
|
+
qatar: "🇶🇦",
|
|
1958
|
+
question: "❓",
|
|
1959
|
+
rabbit: "🐰",
|
|
1960
|
+
rabbit2: "🐇",
|
|
1961
|
+
raccoon: "🦝",
|
|
1962
|
+
racehorse: "🐎",
|
|
1963
|
+
racing_car: "🏎",
|
|
1964
|
+
radio: "📻",
|
|
1965
|
+
radio_button: "🔘",
|
|
1966
|
+
radioactive: "☢",
|
|
1967
|
+
rage: "😡",
|
|
1968
|
+
railway_car: "🚃",
|
|
1969
|
+
railway_track: "🛤",
|
|
1970
|
+
rainbow: "🌈",
|
|
1971
|
+
rainbow_flag: "🏳🌈",
|
|
1972
|
+
raised_back_of_hand: "🤚",
|
|
1973
|
+
raised_eyebrow: "🤨",
|
|
1974
|
+
raised_hand: "✋",
|
|
1975
|
+
raised_hand_with_fingers_splayed: "🖐",
|
|
1976
|
+
raised_hands: "🙌",
|
|
1977
|
+
raising_hand: "🙋",
|
|
1978
|
+
raising_hand_man: "🙋♂",
|
|
1979
|
+
raising_hand_woman: "🙋♀",
|
|
1980
|
+
ram: "🐏",
|
|
1981
|
+
ramen: "🍜",
|
|
1982
|
+
rat: "🐀",
|
|
1983
|
+
razor: "🪒",
|
|
1984
|
+
receipt: "🧾",
|
|
1985
|
+
record_button: "⏺",
|
|
1986
|
+
recycle: "♻",
|
|
1987
|
+
red_car: "🚗",
|
|
1988
|
+
red_circle: "🔴",
|
|
1989
|
+
red_envelope: "🧧",
|
|
1990
|
+
red_haired_man: "👨🦰",
|
|
1991
|
+
red_haired_woman: "👩🦰",
|
|
1992
|
+
red_square: "🟥",
|
|
1993
|
+
registered: "®",
|
|
1994
|
+
relaxed: "☺",
|
|
1995
|
+
relieved: "😌",
|
|
1996
|
+
reminder_ribbon: "🎗",
|
|
1997
|
+
repeat: "🔁",
|
|
1998
|
+
repeat_one: "🔂",
|
|
1999
|
+
rescue_worker_helmet: "⛑",
|
|
2000
|
+
restroom: "🚻",
|
|
2001
|
+
reunion: "🇷🇪",
|
|
2002
|
+
revolving_hearts: "💞",
|
|
2003
|
+
rewind: "⏪",
|
|
2004
|
+
rhinoceros: "🦏",
|
|
2005
|
+
ribbon: "🎀",
|
|
2006
|
+
rice: "🍚",
|
|
2007
|
+
rice_ball: "🍙",
|
|
2008
|
+
rice_cracker: "🍘",
|
|
2009
|
+
rice_scene: "🎑",
|
|
2010
|
+
right_anger_bubble: "🗯",
|
|
2011
|
+
rightwards_hand: "🫱",
|
|
2012
|
+
rightwards_pushing_hand: "🫸",
|
|
2013
|
+
ring: "💍",
|
|
2014
|
+
ring_buoy: "🛟",
|
|
2015
|
+
ringed_planet: "🪐",
|
|
2016
|
+
robot: "🤖",
|
|
2017
|
+
rock: "🪨",
|
|
2018
|
+
rocket: "🚀",
|
|
2019
|
+
rofl: "🤣",
|
|
2020
|
+
roll_eyes: "🙄",
|
|
2021
|
+
roll_of_paper: "🧻",
|
|
2022
|
+
roller_coaster: "🎢",
|
|
2023
|
+
roller_skate: "🛼",
|
|
2024
|
+
romania: "🇷🇴",
|
|
2025
|
+
rooster: "🐓",
|
|
2026
|
+
rose: "🌹",
|
|
2027
|
+
rosette: "🏵",
|
|
2028
|
+
rotating_light: "🚨",
|
|
2029
|
+
round_pushpin: "📍",
|
|
2030
|
+
rowboat: "🚣",
|
|
2031
|
+
rowing_man: "🚣♂",
|
|
2032
|
+
rowing_woman: "🚣♀",
|
|
2033
|
+
ru: "🇷🇺",
|
|
2034
|
+
rugby_football: "🏉",
|
|
2035
|
+
runner: "🏃",
|
|
2036
|
+
running: "🏃",
|
|
2037
|
+
running_man: "🏃♂",
|
|
2038
|
+
running_shirt_with_sash: "🎽",
|
|
2039
|
+
running_woman: "🏃♀",
|
|
2040
|
+
rwanda: "🇷🇼",
|
|
2041
|
+
sa: "🈂",
|
|
2042
|
+
safety_pin: "🧷",
|
|
2043
|
+
safety_vest: "🦺",
|
|
2044
|
+
sagittarius: "♐",
|
|
2045
|
+
sailboat: "⛵",
|
|
2046
|
+
sake: "🍶",
|
|
2047
|
+
salt: "🧂",
|
|
2048
|
+
saluting_face: "🫡",
|
|
2049
|
+
samoa: "🇼🇸",
|
|
2050
|
+
san_marino: "🇸🇲",
|
|
2051
|
+
sandal: "👡",
|
|
2052
|
+
sandwich: "🥪",
|
|
2053
|
+
santa: "🎅",
|
|
2054
|
+
sao_tome_principe: "🇸🇹",
|
|
2055
|
+
sari: "🥻",
|
|
2056
|
+
sassy_man: "💁♂",
|
|
2057
|
+
sassy_woman: "💁♀",
|
|
2058
|
+
satellite: "📡",
|
|
2059
|
+
satisfied: "😆",
|
|
2060
|
+
saudi_arabia: "🇸🇦",
|
|
2061
|
+
sauna_man: "🧖♂",
|
|
2062
|
+
sauna_person: "🧖",
|
|
2063
|
+
sauna_woman: "🧖♀",
|
|
2064
|
+
sauropod: "🦕",
|
|
2065
|
+
saxophone: "🎷",
|
|
2066
|
+
scarf: "🧣",
|
|
2067
|
+
school: "🏫",
|
|
2068
|
+
school_satchel: "🎒",
|
|
2069
|
+
scientist: "🧑🔬",
|
|
2070
|
+
scissors: "✂",
|
|
2071
|
+
scorpion: "🦂",
|
|
2072
|
+
scorpius: "♏",
|
|
2073
|
+
scotland: "🏴",
|
|
2074
|
+
scream: "😱",
|
|
2075
|
+
scream_cat: "🙀",
|
|
2076
|
+
screwdriver: "🪛",
|
|
2077
|
+
scroll: "📜",
|
|
2078
|
+
seal: "🦭",
|
|
2079
|
+
seat: "💺",
|
|
2080
|
+
secret: "㊙",
|
|
2081
|
+
see_no_evil: "🙈",
|
|
2082
|
+
seedling: "🌱",
|
|
2083
|
+
selfie: "🤳",
|
|
2084
|
+
senegal: "🇸🇳",
|
|
2085
|
+
serbia: "🇷🇸",
|
|
2086
|
+
service_dog: "🐕🦺",
|
|
2087
|
+
seven: "7️⃣",
|
|
2088
|
+
sewing_needle: "🪡",
|
|
2089
|
+
seychelles: "🇸🇨",
|
|
2090
|
+
shaking_face: "🫨",
|
|
2091
|
+
shallow_pan_of_food: "🥘",
|
|
2092
|
+
shamrock: "☘",
|
|
2093
|
+
shark: "🦈",
|
|
2094
|
+
shaved_ice: "🍧",
|
|
2095
|
+
sheep: "🐑",
|
|
2096
|
+
shell: "🐚",
|
|
2097
|
+
shield: "🛡",
|
|
2098
|
+
shinto_shrine: "⛩",
|
|
2099
|
+
ship: "🚢",
|
|
2100
|
+
shirt: "👕",
|
|
2101
|
+
shit: "💩",
|
|
2102
|
+
shoe: "👞",
|
|
2103
|
+
shopping: "🛍",
|
|
2104
|
+
shopping_cart: "🛒",
|
|
2105
|
+
shorts: "🩳",
|
|
2106
|
+
shower: "🚿",
|
|
2107
|
+
shrimp: "🦐",
|
|
2108
|
+
shrug: "🤷",
|
|
2109
|
+
shushing_face: "🤫",
|
|
2110
|
+
sierra_leone: "🇸🇱",
|
|
2111
|
+
signal_strength: "📶",
|
|
2112
|
+
singapore: "🇸🇬",
|
|
2113
|
+
singer: "🧑🎤",
|
|
2114
|
+
sint_maarten: "🇸🇽",
|
|
2115
|
+
six: "6️⃣",
|
|
2116
|
+
six_pointed_star: "🔯",
|
|
2117
|
+
skateboard: "🛹",
|
|
2118
|
+
ski: "🎿",
|
|
2119
|
+
skier: "⛷",
|
|
2120
|
+
skull: "💀",
|
|
2121
|
+
skull_and_crossbones: "☠",
|
|
2122
|
+
skunk: "🦨",
|
|
2123
|
+
sled: "🛷",
|
|
2124
|
+
sleeping: "😴",
|
|
2125
|
+
sleeping_bed: "🛌",
|
|
2126
|
+
sleepy: "😪",
|
|
2127
|
+
slightly_frowning_face: "🙁",
|
|
2128
|
+
slightly_smiling_face: "🙂",
|
|
2129
|
+
slot_machine: "🎰",
|
|
2130
|
+
sloth: "🦥",
|
|
2131
|
+
slovakia: "🇸🇰",
|
|
2132
|
+
slovenia: "🇸🇮",
|
|
2133
|
+
small_airplane: "🛩",
|
|
2134
|
+
small_blue_diamond: "🔹",
|
|
2135
|
+
small_orange_diamond: "🔸",
|
|
2136
|
+
small_red_triangle: "🔺",
|
|
2137
|
+
small_red_triangle_down: "🔻",
|
|
2138
|
+
smile: "😄",
|
|
2139
|
+
smile_cat: "😸",
|
|
2140
|
+
smiley: "😃",
|
|
2141
|
+
smiley_cat: "😺",
|
|
2142
|
+
smiling_face_with_tear: "🥲",
|
|
2143
|
+
smiling_face_with_three_hearts: "🥰",
|
|
2144
|
+
smiling_imp: "😈",
|
|
2145
|
+
smirk: "😏",
|
|
2146
|
+
smirk_cat: "😼",
|
|
2147
|
+
smoking: "🚬",
|
|
2148
|
+
snail: "🐌",
|
|
2149
|
+
snake: "🐍",
|
|
2150
|
+
sneezing_face: "🤧",
|
|
2151
|
+
snowboarder: "🏂",
|
|
2152
|
+
snowflake: "❄",
|
|
2153
|
+
snowman: "⛄",
|
|
2154
|
+
snowman_with_snow: "☃",
|
|
2155
|
+
soap: "🧼",
|
|
2156
|
+
sob: "😭",
|
|
2157
|
+
soccer: "⚽",
|
|
2158
|
+
socks: "🧦",
|
|
2159
|
+
softball: "🥎",
|
|
2160
|
+
solomon_islands: "🇸🇧",
|
|
2161
|
+
somalia: "🇸🇴",
|
|
2162
|
+
soon: "🔜",
|
|
2163
|
+
sos: "🆘",
|
|
2164
|
+
sound: "🔉",
|
|
2165
|
+
south_africa: "🇿🇦",
|
|
2166
|
+
south_georgia_south_sandwich_islands: "🇬🇸",
|
|
2167
|
+
south_sudan: "🇸🇸",
|
|
2168
|
+
space_invader: "👾",
|
|
2169
|
+
spades: "♠",
|
|
2170
|
+
spaghetti: "🍝",
|
|
2171
|
+
sparkle: "❇",
|
|
2172
|
+
sparkler: "🎇",
|
|
2173
|
+
sparkles: "✨",
|
|
2174
|
+
sparkling_heart: "💖",
|
|
2175
|
+
speak_no_evil: "🙊",
|
|
2176
|
+
speaker: "🔈",
|
|
2177
|
+
speaking_head: "🗣",
|
|
2178
|
+
speech_balloon: "💬",
|
|
2179
|
+
speedboat: "🚤",
|
|
2180
|
+
spider: "🕷",
|
|
2181
|
+
spider_web: "🕸",
|
|
2182
|
+
spiral_calendar: "🗓",
|
|
2183
|
+
spiral_notepad: "🗒",
|
|
2184
|
+
sponge: "🧽",
|
|
2185
|
+
spoon: "🥄",
|
|
2186
|
+
squid: "🦑",
|
|
2187
|
+
sri_lanka: "🇱🇰",
|
|
2188
|
+
st_barthelemy: "🇧🇱",
|
|
2189
|
+
st_helena: "🇸🇭",
|
|
2190
|
+
st_kitts_nevis: "🇰🇳",
|
|
2191
|
+
st_lucia: "🇱🇨",
|
|
2192
|
+
st_martin: "🇲🇫",
|
|
2193
|
+
st_pierre_miquelon: "🇵🇲",
|
|
2194
|
+
st_vincent_grenadines: "🇻🇨",
|
|
2195
|
+
stadium: "🏟",
|
|
2196
|
+
standing_man: "🧍♂",
|
|
2197
|
+
standing_person: "🧍",
|
|
2198
|
+
standing_woman: "🧍♀",
|
|
2199
|
+
star: "⭐",
|
|
2200
|
+
star2: "🌟",
|
|
2201
|
+
star_and_crescent: "☪",
|
|
2202
|
+
star_of_david: "✡",
|
|
2203
|
+
star_struck: "🤩",
|
|
2204
|
+
stars: "🌠",
|
|
2205
|
+
station: "🚉",
|
|
2206
|
+
statue_of_liberty: "🗽",
|
|
2207
|
+
steam_locomotive: "🚂",
|
|
2208
|
+
stethoscope: "🩺",
|
|
2209
|
+
stew: "🍲",
|
|
2210
|
+
stop_button: "⏹",
|
|
2211
|
+
stop_sign: "🛑",
|
|
2212
|
+
stopwatch: "⏱",
|
|
2213
|
+
straight_ruler: "📏",
|
|
2214
|
+
strawberry: "🍓",
|
|
2215
|
+
stuck_out_tongue: "😛",
|
|
2216
|
+
stuck_out_tongue_closed_eyes: "😝",
|
|
2217
|
+
stuck_out_tongue_winking_eye: "😜",
|
|
2218
|
+
student: "🧑🎓",
|
|
2219
|
+
studio_microphone: "🎙",
|
|
2220
|
+
stuffed_flatbread: "🥙",
|
|
2221
|
+
sudan: "🇸🇩",
|
|
2222
|
+
sun_behind_large_cloud: "🌥",
|
|
2223
|
+
sun_behind_rain_cloud: "🌦",
|
|
2224
|
+
sun_behind_small_cloud: "🌤",
|
|
2225
|
+
sun_with_face: "🌞",
|
|
2226
|
+
sunflower: "🌻",
|
|
2227
|
+
sunglasses: "😎",
|
|
2228
|
+
sunny: "☀",
|
|
2229
|
+
sunrise: "🌅",
|
|
2230
|
+
sunrise_over_mountains: "🌄",
|
|
2231
|
+
superhero: "🦸",
|
|
2232
|
+
superhero_man: "🦸♂",
|
|
2233
|
+
superhero_woman: "🦸♀",
|
|
2234
|
+
supervillain: "🦹",
|
|
2235
|
+
supervillain_man: "🦹♂",
|
|
2236
|
+
supervillain_woman: "🦹♀",
|
|
2237
|
+
surfer: "🏄",
|
|
2238
|
+
surfing_man: "🏄♂",
|
|
2239
|
+
surfing_woman: "🏄♀",
|
|
2240
|
+
suriname: "🇸🇷",
|
|
2241
|
+
sushi: "🍣",
|
|
2242
|
+
suspension_railway: "🚟",
|
|
2243
|
+
svalbard_jan_mayen: "🇸🇯",
|
|
2244
|
+
swan: "🦢",
|
|
2245
|
+
swaziland: "🇸🇿",
|
|
2246
|
+
sweat: "😓",
|
|
2247
|
+
sweat_drops: "💦",
|
|
2248
|
+
sweat_smile: "😅",
|
|
2249
|
+
sweden: "🇸🇪",
|
|
2250
|
+
sweet_potato: "🍠",
|
|
2251
|
+
swim_brief: "🩲",
|
|
2252
|
+
swimmer: "🏊",
|
|
2253
|
+
swimming_man: "🏊♂",
|
|
2254
|
+
swimming_woman: "🏊♀",
|
|
2255
|
+
switzerland: "🇨🇭",
|
|
2256
|
+
symbols: "🔣",
|
|
2257
|
+
synagogue: "🕍",
|
|
2258
|
+
syria: "🇸🇾",
|
|
2259
|
+
syringe: "💉",
|
|
2260
|
+
"t-rex": "🦖",
|
|
2261
|
+
taco: "🌮",
|
|
2262
|
+
tada: "🎉",
|
|
2263
|
+
taiwan: "🇹🇼",
|
|
2264
|
+
tajikistan: "🇹🇯",
|
|
2265
|
+
takeout_box: "🥡",
|
|
2266
|
+
tamale: "🫔",
|
|
2267
|
+
tanabata_tree: "🎋",
|
|
2268
|
+
tangerine: "🍊",
|
|
2269
|
+
tanzania: "🇹🇿",
|
|
2270
|
+
taurus: "♉",
|
|
2271
|
+
taxi: "🚕",
|
|
2272
|
+
tea: "🍵",
|
|
2273
|
+
teacher: "🧑🏫",
|
|
2274
|
+
teapot: "🫖",
|
|
2275
|
+
technologist: "🧑💻",
|
|
2276
|
+
teddy_bear: "🧸",
|
|
2277
|
+
telephone: "☎",
|
|
2278
|
+
telephone_receiver: "📞",
|
|
2279
|
+
telescope: "🔭",
|
|
2280
|
+
tennis: "🎾",
|
|
2281
|
+
tent: "⛺",
|
|
2282
|
+
test_tube: "🧪",
|
|
2283
|
+
thailand: "🇹🇭",
|
|
2284
|
+
thermometer: "🌡",
|
|
2285
|
+
thinking: "🤔",
|
|
2286
|
+
thong_sandal: "🩴",
|
|
2287
|
+
thought_balloon: "💭",
|
|
2288
|
+
thread: "🧵",
|
|
2289
|
+
three: "3️⃣",
|
|
2290
|
+
thumbsdown: "👎",
|
|
2291
|
+
thumbsup: "👍",
|
|
2292
|
+
ticket: "🎫",
|
|
2293
|
+
tickets: "🎟",
|
|
2294
|
+
tiger: "🐯",
|
|
2295
|
+
tiger2: "🐅",
|
|
2296
|
+
timer_clock: "⏲",
|
|
2297
|
+
timor_leste: "🇹🇱",
|
|
2298
|
+
tipping_hand_man: "💁♂",
|
|
2299
|
+
tipping_hand_person: "💁",
|
|
2300
|
+
tipping_hand_woman: "💁♀",
|
|
2301
|
+
tired_face: "😫",
|
|
2302
|
+
tm: "™",
|
|
2303
|
+
togo: "🇹🇬",
|
|
2304
|
+
toilet: "🚽",
|
|
2305
|
+
tokelau: "🇹🇰",
|
|
2306
|
+
tokyo_tower: "🗼",
|
|
2307
|
+
tomato: "🍅",
|
|
2308
|
+
tonga: "🇹🇴",
|
|
2309
|
+
tongue: "👅",
|
|
2310
|
+
toolbox: "🧰",
|
|
2311
|
+
tooth: "🦷",
|
|
2312
|
+
toothbrush: "🪥",
|
|
2313
|
+
top: "🔝",
|
|
2314
|
+
tophat: "🎩",
|
|
2315
|
+
tornado: "🌪",
|
|
2316
|
+
tr: "🇹🇷",
|
|
2317
|
+
trackball: "🖲",
|
|
2318
|
+
tractor: "🚜",
|
|
2319
|
+
traffic_light: "🚥",
|
|
2320
|
+
train: "🚋",
|
|
2321
|
+
train2: "🚆",
|
|
2322
|
+
tram: "🚊",
|
|
2323
|
+
transgender_flag: "🏳⚧",
|
|
2324
|
+
transgender_symbol: "⚧",
|
|
2325
|
+
triangular_flag_on_post: "🚩",
|
|
2326
|
+
triangular_ruler: "📐",
|
|
2327
|
+
trident: "🔱",
|
|
2328
|
+
trinidad_tobago: "🇹🇹",
|
|
2329
|
+
tristan_da_cunha: "🇹🇦",
|
|
2330
|
+
triumph: "😤",
|
|
2331
|
+
troll: "🧌",
|
|
2332
|
+
trolleybus: "🚎",
|
|
2333
|
+
trophy: "🏆",
|
|
2334
|
+
tropical_drink: "🍹",
|
|
2335
|
+
tropical_fish: "🐠",
|
|
2336
|
+
truck: "🚚",
|
|
2337
|
+
trumpet: "🎺",
|
|
2338
|
+
tshirt: "👕",
|
|
2339
|
+
tulip: "🌷",
|
|
2340
|
+
tumbler_glass: "🥃",
|
|
2341
|
+
tunisia: "🇹🇳",
|
|
2342
|
+
turkey: "🦃",
|
|
2343
|
+
turkmenistan: "🇹🇲",
|
|
2344
|
+
turks_caicos_islands: "🇹🇨",
|
|
2345
|
+
turtle: "🐢",
|
|
2346
|
+
tuvalu: "🇹🇻",
|
|
2347
|
+
tv: "📺",
|
|
2348
|
+
twisted_rightwards_arrows: "🔀",
|
|
2349
|
+
two: "2️⃣",
|
|
2350
|
+
two_hearts: "💕",
|
|
2351
|
+
two_men_holding_hands: "👬",
|
|
2352
|
+
two_women_holding_hands: "👭",
|
|
2353
|
+
u5272: "🈹",
|
|
2354
|
+
u5408: "🈴",
|
|
2355
|
+
u55b6: "🈺",
|
|
2356
|
+
u6307: "🈯",
|
|
2357
|
+
u6708: "🈷",
|
|
2358
|
+
u6709: "🈶",
|
|
2359
|
+
u6e80: "🈵",
|
|
2360
|
+
u7121: "🈚",
|
|
2361
|
+
u7533: "🈸",
|
|
2362
|
+
u7981: "🈲",
|
|
2363
|
+
u7a7a: "🈳",
|
|
2364
|
+
uganda: "🇺🇬",
|
|
2365
|
+
uk: "🇬🇧",
|
|
2366
|
+
ukraine: "🇺🇦",
|
|
2367
|
+
umbrella: "☔",
|
|
2368
|
+
unamused: "😒",
|
|
2369
|
+
underage: "🔞",
|
|
2370
|
+
unicorn: "🦄",
|
|
2371
|
+
united_arab_emirates: "🇦🇪",
|
|
2372
|
+
united_nations: "🇺🇳",
|
|
2373
|
+
unlock: "🔓",
|
|
2374
|
+
up: "🆙",
|
|
2375
|
+
upside_down_face: "🙃",
|
|
2376
|
+
uruguay: "🇺🇾",
|
|
2377
|
+
us: "🇺🇸",
|
|
2378
|
+
us_outlying_islands: "🇺🇲",
|
|
2379
|
+
us_virgin_islands: "🇻🇮",
|
|
2380
|
+
uzbekistan: "🇺🇿",
|
|
2381
|
+
v: "✌",
|
|
2382
|
+
vampire: "🧛",
|
|
2383
|
+
vampire_man: "🧛♂",
|
|
2384
|
+
vampire_woman: "🧛♀",
|
|
2385
|
+
vanuatu: "🇻🇺",
|
|
2386
|
+
vatican_city: "🇻🇦",
|
|
2387
|
+
venezuela: "🇻🇪",
|
|
2388
|
+
vertical_traffic_light: "🚦",
|
|
2389
|
+
vhs: "📼",
|
|
2390
|
+
vibration_mode: "📳",
|
|
2391
|
+
video_camera: "📹",
|
|
2392
|
+
video_game: "🎮",
|
|
2393
|
+
vietnam: "🇻🇳",
|
|
2394
|
+
violin: "🎻",
|
|
2395
|
+
virgo: "♍",
|
|
2396
|
+
volcano: "🌋",
|
|
2397
|
+
volleyball: "🏐",
|
|
2398
|
+
vomiting_face: "🤮",
|
|
2399
|
+
vs: "🆚",
|
|
2400
|
+
vulcan_salute: "🖖",
|
|
2401
|
+
waffle: "🧇",
|
|
2402
|
+
wales: "🏴",
|
|
2403
|
+
walking: "🚶",
|
|
2404
|
+
walking_man: "🚶♂",
|
|
2405
|
+
walking_woman: "🚶♀",
|
|
2406
|
+
wallis_futuna: "🇼🇫",
|
|
2407
|
+
waning_crescent_moon: "🌘",
|
|
2408
|
+
waning_gibbous_moon: "🌖",
|
|
2409
|
+
warning: "⚠",
|
|
2410
|
+
wastebasket: "🗑",
|
|
2411
|
+
watch: "⌚",
|
|
2412
|
+
water_buffalo: "🐃",
|
|
2413
|
+
water_polo: "🤽",
|
|
2414
|
+
watermelon: "🍉",
|
|
2415
|
+
wave: "👋",
|
|
2416
|
+
wavy_dash: "〰",
|
|
2417
|
+
waxing_crescent_moon: "🌒",
|
|
2418
|
+
waxing_gibbous_moon: "🌔",
|
|
2419
|
+
wc: "🚾",
|
|
2420
|
+
weary: "😩",
|
|
2421
|
+
wedding: "💒",
|
|
2422
|
+
weight_lifting: "🏋",
|
|
2423
|
+
weight_lifting_man: "🏋♂",
|
|
2424
|
+
weight_lifting_woman: "🏋♀",
|
|
2425
|
+
western_sahara: "🇪🇭",
|
|
2426
|
+
whale: "🐳",
|
|
2427
|
+
whale2: "🐋",
|
|
2428
|
+
wheel: "🛞",
|
|
2429
|
+
wheel_of_dharma: "☸",
|
|
2430
|
+
wheelchair: "♿",
|
|
2431
|
+
white_check_mark: "✅",
|
|
2432
|
+
white_circle: "⚪",
|
|
2433
|
+
white_flag: "🏳",
|
|
2434
|
+
white_flower: "💮",
|
|
2435
|
+
white_haired_man: "👨🦳",
|
|
2436
|
+
white_haired_woman: "👩🦳",
|
|
2437
|
+
white_heart: "🤍",
|
|
2438
|
+
white_large_square: "⬜",
|
|
2439
|
+
white_medium_small_square: "◽",
|
|
2440
|
+
white_medium_square: "◻",
|
|
2441
|
+
white_small_square: "▫",
|
|
2442
|
+
white_square_button: "🔳",
|
|
2443
|
+
wilted_flower: "🥀",
|
|
2444
|
+
wind_chime: "🎐",
|
|
2445
|
+
wind_face: "🌬",
|
|
2446
|
+
window: "🪟",
|
|
2447
|
+
wine_glass: "🍷",
|
|
2448
|
+
wing: "🪽",
|
|
2449
|
+
wink: "😉",
|
|
2450
|
+
wireless: "🛜",
|
|
2451
|
+
wolf: "🐺",
|
|
2452
|
+
woman: "👩",
|
|
2453
|
+
woman_artist: "👩🎨",
|
|
2454
|
+
woman_astronaut: "👩🚀",
|
|
2455
|
+
woman_beard: "🧔♀",
|
|
2456
|
+
woman_cartwheeling: "🤸♀",
|
|
2457
|
+
woman_cook: "👩🍳",
|
|
2458
|
+
woman_dancing: "💃",
|
|
2459
|
+
woman_facepalming: "🤦♀",
|
|
2460
|
+
woman_factory_worker: "👩🏭",
|
|
2461
|
+
woman_farmer: "👩🌾",
|
|
2462
|
+
woman_feeding_baby: "👩🍼",
|
|
2463
|
+
woman_firefighter: "👩🚒",
|
|
2464
|
+
woman_health_worker: "👩⚕",
|
|
2465
|
+
woman_in_manual_wheelchair: "👩🦽",
|
|
2466
|
+
woman_in_motorized_wheelchair: "👩🦼",
|
|
2467
|
+
woman_in_tuxedo: "🤵♀",
|
|
2468
|
+
woman_judge: "👩⚖",
|
|
2469
|
+
woman_juggling: "🤹♀",
|
|
2470
|
+
woman_mechanic: "👩🔧",
|
|
2471
|
+
woman_office_worker: "👩💼",
|
|
2472
|
+
woman_pilot: "👩✈",
|
|
2473
|
+
woman_playing_handball: "🤾♀",
|
|
2474
|
+
woman_playing_water_polo: "🤽♀",
|
|
2475
|
+
woman_scientist: "👩🔬",
|
|
2476
|
+
woman_shrugging: "🤷♀",
|
|
2477
|
+
woman_singer: "👩🎤",
|
|
2478
|
+
woman_student: "👩🎓",
|
|
2479
|
+
woman_teacher: "👩🏫",
|
|
2480
|
+
woman_technologist: "👩💻",
|
|
2481
|
+
woman_with_headscarf: "🧕",
|
|
2482
|
+
woman_with_probing_cane: "👩🦯",
|
|
2483
|
+
woman_with_turban: "👳♀",
|
|
2484
|
+
woman_with_veil: "👰♀",
|
|
2485
|
+
womans_clothes: "👚",
|
|
2486
|
+
womans_hat: "👒",
|
|
2487
|
+
women_wrestling: "🤼♀",
|
|
2488
|
+
womens: "🚺",
|
|
2489
|
+
wood: "🪵",
|
|
2490
|
+
woozy_face: "🥴",
|
|
2491
|
+
world_map: "🗺",
|
|
2492
|
+
worm: "🪱",
|
|
2493
|
+
worried: "😟",
|
|
2494
|
+
wrench: "🔧",
|
|
2495
|
+
wrestling: "🤼",
|
|
2496
|
+
writing_hand: "✍",
|
|
2497
|
+
x: "❌",
|
|
2498
|
+
x_ray: "🩻",
|
|
2499
|
+
yarn: "🧶",
|
|
2500
|
+
yawning_face: "🥱",
|
|
2501
|
+
yellow_circle: "🟡",
|
|
2502
|
+
yellow_heart: "💛",
|
|
2503
|
+
yellow_square: "🟨",
|
|
2504
|
+
yemen: "🇾🇪",
|
|
2505
|
+
yen: "💴",
|
|
2506
|
+
yin_yang: "☯",
|
|
2507
|
+
yo_yo: "🪀",
|
|
2508
|
+
yum: "😋",
|
|
2509
|
+
zambia: "🇿🇲",
|
|
2510
|
+
zany_face: "🤪",
|
|
2511
|
+
zap: "⚡",
|
|
2512
|
+
zebra: "🦓",
|
|
2513
|
+
zero: "0️⃣",
|
|
2514
|
+
zimbabwe: "🇿🇼",
|
|
2515
|
+
zipper_mouth_face: "🤐",
|
|
2516
|
+
zombie: "🧟",
|
|
2517
|
+
zombie_man: "🧟♂",
|
|
2518
|
+
zombie_woman: "🧟♀",
|
|
2519
|
+
zzz: "💤"
|
|
2520
|
+
};
|
|
2521
|
+
|
|
2522
|
+
//#endregion
|
|
2523
|
+
//#region src/rules/emoji-notation.ts
|
|
2524
|
+
var EmojiData = class {
|
|
2525
|
+
_entries = null;
|
|
2526
|
+
_emojiToColon = null;
|
|
2527
|
+
_colonToEmoji = null;
|
|
2528
|
+
get entries() {
|
|
2529
|
+
return this._entries ??= Object.entries(GH_EMOJI_MAP);
|
|
2530
|
+
}
|
|
2531
|
+
get emojiToColon() {
|
|
2532
|
+
if (this._emojiToColon) return this._emojiToColon;
|
|
2533
|
+
const emojiToCode = this._emojiToColon = Object.create(null);
|
|
2534
|
+
for (const [name$2, unicode] of this.entries) emojiToCode[unicode] = `:${name$2}:`;
|
|
2535
|
+
return emojiToCode;
|
|
2536
|
+
}
|
|
2537
|
+
get colonToEmoji() {
|
|
2538
|
+
if (this._colonToEmoji) return this._colonToEmoji;
|
|
2539
|
+
const colonToEmoji = this._colonToEmoji = Object.create(null);
|
|
2540
|
+
for (const [name$2, unicode] of this.entries) colonToEmoji[`:${name$2}:`] = unicode;
|
|
2541
|
+
return colonToEmoji;
|
|
2542
|
+
}
|
|
2543
|
+
};
|
|
2544
|
+
const emojiData = new EmojiData();
|
|
2545
|
+
var emoji_notation_default = createRule("emoji-notation", {
|
|
2546
|
+
meta: {
|
|
2547
|
+
type: "suggestion",
|
|
2548
|
+
docs: {
|
|
2549
|
+
description: "Enforce consistent emoji notation style in Markdown files.",
|
|
2550
|
+
categories: [],
|
|
2551
|
+
listCategory: "Preference"
|
|
2552
|
+
},
|
|
2553
|
+
fixable: "code",
|
|
2554
|
+
hasSuggestions: false,
|
|
2555
|
+
schema: [{
|
|
2556
|
+
type: "object",
|
|
2557
|
+
properties: {
|
|
2558
|
+
prefer: {
|
|
2559
|
+
enum: ["unicode", "colon"],
|
|
2560
|
+
description: "Preferred emoji notation style."
|
|
2561
|
+
},
|
|
2562
|
+
ignoreUnknown: {
|
|
2563
|
+
type: "boolean",
|
|
2564
|
+
description: "If true, suppress unknown colon-style emoji."
|
|
2565
|
+
},
|
|
2566
|
+
ignoreList: {
|
|
2567
|
+
type: "array",
|
|
2568
|
+
items: { type: "string" },
|
|
2569
|
+
uniqueItems: true,
|
|
2570
|
+
description: "List of colon-style, Unicode emoji, or regex (as string) to suppress."
|
|
2571
|
+
}
|
|
2572
|
+
},
|
|
2573
|
+
additionalProperties: false
|
|
2574
|
+
}],
|
|
2575
|
+
messages: {
|
|
2576
|
+
preferUnicode: "Use Unicode emoji '{{unicode}}' instead of colon-style emoji ('{{colon}}').",
|
|
2577
|
+
preferColon: "Use colon-style emoji '{{colon}}' instead of Unicode emoji ('{{unicode}}').",
|
|
2578
|
+
preferUnknownUnicode: "Use Unicode emoji (e.g. '{{unicode}}') instead of colon-style emoji ('{{colon}}').",
|
|
2579
|
+
preferUnknownColon: "Use colon-style emoji (e.g. '{{colon}}') instead of Unicode emoji ('{{unicode}}')."
|
|
2580
|
+
}
|
|
2581
|
+
},
|
|
2582
|
+
create(context) {
|
|
2583
|
+
const sourceCode = context.sourceCode;
|
|
2584
|
+
const options = context.options?.[0] || {};
|
|
2585
|
+
const prefer = options.prefer || "unicode";
|
|
2586
|
+
const ignoreUnknown = options.ignoreUnknown ?? true;
|
|
2587
|
+
const ignoreList = (options.ignoreList || []).map((s) => toRegExp(s)).flatMap((re) => {
|
|
2588
|
+
const result = [re];
|
|
2589
|
+
for (const [name$2, unicode] of emojiData.entries) if (re.test(`:${name$2}:`) || re.test(unicode)) result.push(toRegExp(`:${name$2}:`), toRegExp(unicode));
|
|
2590
|
+
return result;
|
|
2591
|
+
});
|
|
2592
|
+
const isIgnoreBase = (s) => ignoreList.some((re) => re.test(s));
|
|
2593
|
+
if (prefer === "colon") {
|
|
2594
|
+
let isIgnore$1;
|
|
2595
|
+
if (ignoreUnknown) isIgnore$1 = (s) => isIgnoreBase(s) || !emojiData.emojiToColon[s];
|
|
2596
|
+
else isIgnore$1 = (s) => isIgnoreBase(s);
|
|
2597
|
+
return { text(node) {
|
|
2598
|
+
const re = emojiRegex();
|
|
2599
|
+
const text = sourceCode.getText(node);
|
|
2600
|
+
for (const match of text.matchAll(re)) {
|
|
2601
|
+
const emoji = match[0];
|
|
2602
|
+
if (isIgnore$1(emoji)) continue;
|
|
2603
|
+
const emojiOffset = match.index;
|
|
2604
|
+
const [nodeStart] = sourceCode.getRange(node);
|
|
2605
|
+
const range = [nodeStart + emojiOffset, nodeStart + emojiOffset + emoji.length];
|
|
2606
|
+
const colon = emojiData.emojiToColon[emoji];
|
|
2607
|
+
context.report({
|
|
2608
|
+
node,
|
|
2609
|
+
loc: getSourceLocationFromRange(sourceCode, node, range),
|
|
2610
|
+
messageId: colon ? "preferColon" : "preferUnknownColon",
|
|
2611
|
+
data: {
|
|
2612
|
+
unicode: emoji,
|
|
2613
|
+
colon: colon || ":smile:"
|
|
2614
|
+
},
|
|
2615
|
+
fix: colon ? (fixer) => {
|
|
2616
|
+
return fixer.replaceTextRange(range, colon);
|
|
2617
|
+
} : null
|
|
2618
|
+
});
|
|
2619
|
+
}
|
|
2620
|
+
} };
|
|
2621
|
+
}
|
|
2622
|
+
let isIgnore;
|
|
2623
|
+
if (ignoreUnknown) isIgnore = (s) => isIgnoreBase(s) || !emojiData.colonToEmoji[s];
|
|
2624
|
+
else isIgnore = (s) => isIgnoreBase(s);
|
|
2625
|
+
return { text(node) {
|
|
2626
|
+
const re = /:[^\s\x00-\x0f:\u{7f}]+:/gu;
|
|
2627
|
+
const text = sourceCode.getText(node);
|
|
2628
|
+
for (const match of text.matchAll(re)) {
|
|
2629
|
+
const colon = match[0];
|
|
2630
|
+
if (isIgnore(colon)) continue;
|
|
2631
|
+
const colonOffset = match.index;
|
|
2632
|
+
const [nodeStart] = sourceCode.getRange(node);
|
|
2633
|
+
const range = [nodeStart + colonOffset, nodeStart + colonOffset + colon.length];
|
|
2634
|
+
const emoji = emojiData.colonToEmoji[colon];
|
|
2635
|
+
context.report({
|
|
2636
|
+
node,
|
|
2637
|
+
loc: getSourceLocationFromRange(sourceCode, node, range),
|
|
2638
|
+
messageId: emoji ? "preferUnicode" : "preferUnknownUnicode",
|
|
2639
|
+
data: {
|
|
2640
|
+
unicode: emoji || "😄",
|
|
2641
|
+
colon
|
|
2642
|
+
},
|
|
2643
|
+
fix: emoji ? (fixer) => {
|
|
2644
|
+
return fixer.replaceTextRange(range, emoji);
|
|
2645
|
+
} : null
|
|
2646
|
+
});
|
|
2647
|
+
}
|
|
2648
|
+
} };
|
|
2649
|
+
}
|
|
2650
|
+
});
|
|
2651
|
+
|
|
161
2652
|
//#endregion
|
|
162
2653
|
//#region src/rules/hard-linebreak-style.ts
|
|
163
2654
|
var hard_linebreak_style_default = createRule("hard-linebreak-style", {
|
|
@@ -203,31 +2694,6 @@ var hard_linebreak_style_default = createRule("hard-linebreak-style", {
|
|
|
203
2694
|
}
|
|
204
2695
|
});
|
|
205
2696
|
|
|
206
|
-
//#endregion
|
|
207
|
-
//#region src/utils/regexp.ts
|
|
208
|
-
const RE_REGEXP_STR = /^\/(.+)\/([A-Za-z]*)$/u;
|
|
209
|
-
/**
|
|
210
|
-
* Convert a string to the `RegExp`.
|
|
211
|
-
* Normal strings (e.g. `"foo"`) is converted to `/^foo$/` of `RegExp`.
|
|
212
|
-
* Strings like `"/^foo/i"` are converted to `/^foo/i` of `RegExp`.
|
|
213
|
-
*
|
|
214
|
-
* @param {string} string The string to convert.
|
|
215
|
-
* @returns {RegExp} Returns the `RegExp`.
|
|
216
|
-
*/
|
|
217
|
-
function toRegExp(string) {
|
|
218
|
-
const parts = RE_REGEXP_STR.exec(string);
|
|
219
|
-
if (parts) return new RegExp(parts[1], parts[2]);
|
|
220
|
-
return { test: (s) => s === string };
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Checks whether given string is regexp string
|
|
224
|
-
* @param {string} string
|
|
225
|
-
* @returns {boolean}
|
|
226
|
-
*/
|
|
227
|
-
function isRegExp(string) {
|
|
228
|
-
return Boolean(RE_REGEXP_STR.test(string));
|
|
229
|
-
}
|
|
230
|
-
|
|
231
2697
|
//#endregion
|
|
232
2698
|
//#region src/resources/preserve-words.ts
|
|
233
2699
|
const defaultPreserveWords = [
|
|
@@ -911,12 +3377,8 @@ var heading_casing_default = createRule("heading-casing", {
|
|
|
911
3377
|
function verifyWord(wordAndOffset, expectedWord, wordType = "normal") {
|
|
912
3378
|
const { word, offset } = wordAndOffset;
|
|
913
3379
|
if (word === expectedWord) return;
|
|
914
|
-
const
|
|
915
|
-
const
|
|
916
|
-
const line = nodeLoc.start.line + beforeLines.length - 1;
|
|
917
|
-
const column = (beforeLines.length === 1 ? nodeLoc.start.column : 1) + (beforeLines.at(-1) || "").length;
|
|
918
|
-
const nodeRange = sourceCode.getRange(node);
|
|
919
|
-
const wordRange = [nodeRange[0] + offset, nodeRange[0] + offset + word.length];
|
|
3380
|
+
const [nodeStart] = sourceCode.getRange(node);
|
|
3381
|
+
const range = [nodeStart + offset, nodeStart + offset + word.length];
|
|
920
3382
|
context.report({
|
|
921
3383
|
node,
|
|
922
3384
|
messageId: wordType === "preserved" ? "expectedPreserveWord" : caseStyle === "Title Case" ? wordType === "minor" ? "expectedTitleCaseMinorWord" : "expectedTitleCase" : "expectedSentenceCase",
|
|
@@ -924,18 +3386,9 @@ var heading_casing_default = createRule("heading-casing", {
|
|
|
924
3386
|
actual: word,
|
|
925
3387
|
expected: expectedWord
|
|
926
3388
|
},
|
|
927
|
-
loc:
|
|
928
|
-
start: {
|
|
929
|
-
line,
|
|
930
|
-
column
|
|
931
|
-
},
|
|
932
|
-
end: {
|
|
933
|
-
line,
|
|
934
|
-
column: column + word.length
|
|
935
|
-
}
|
|
936
|
-
},
|
|
3389
|
+
loc: getSourceLocationFromRange(sourceCode, node, range),
|
|
937
3390
|
fix(fixer) {
|
|
938
|
-
return fixer.replaceTextRange(
|
|
3391
|
+
return fixer.replaceTextRange(range, expectedWord);
|
|
939
3392
|
}
|
|
940
3393
|
});
|
|
941
3394
|
}
|
|
@@ -978,58 +3431,6 @@ var heading_casing_default = createRule("heading-casing", {
|
|
|
978
3431
|
}
|
|
979
3432
|
});
|
|
980
3433
|
|
|
981
|
-
//#endregion
|
|
982
|
-
//#region src/utils/lines.ts
|
|
983
|
-
const cache = /* @__PURE__ */ new WeakMap();
|
|
984
|
-
var ParsedLines = class {
|
|
985
|
-
lines;
|
|
986
|
-
constructor(codeText) {
|
|
987
|
-
let offset = 0;
|
|
988
|
-
this.lines = codeText.split(/(?<=\n)/u).map((lineText, index) => {
|
|
989
|
-
const start = offset;
|
|
990
|
-
offset += lineText.length;
|
|
991
|
-
const range = [start, offset];
|
|
992
|
-
let text = lineText;
|
|
993
|
-
let linebreak = "";
|
|
994
|
-
if (text.at(-1) === "\n") {
|
|
995
|
-
text = text.slice(0, -1);
|
|
996
|
-
linebreak = "\n";
|
|
997
|
-
}
|
|
998
|
-
if (text.at(-1) === "\r") {
|
|
999
|
-
text = text.slice(0, -1);
|
|
1000
|
-
linebreak = `\r${linebreak}`;
|
|
1001
|
-
}
|
|
1002
|
-
return {
|
|
1003
|
-
text,
|
|
1004
|
-
range,
|
|
1005
|
-
line: index + 1,
|
|
1006
|
-
linebreak
|
|
1007
|
-
};
|
|
1008
|
-
});
|
|
1009
|
-
}
|
|
1010
|
-
[Symbol.iterator]() {
|
|
1011
|
-
return this.lines[Symbol.iterator]();
|
|
1012
|
-
}
|
|
1013
|
-
get length() {
|
|
1014
|
-
return this.lines.length;
|
|
1015
|
-
}
|
|
1016
|
-
get(lineNumber) {
|
|
1017
|
-
return this.lines[lineNumber - 1];
|
|
1018
|
-
}
|
|
1019
|
-
};
|
|
1020
|
-
/**
|
|
1021
|
-
* Parse the lines of the source code.
|
|
1022
|
-
* @param sourceCode source code to parse
|
|
1023
|
-
* @returns parsed lines
|
|
1024
|
-
*/
|
|
1025
|
-
function parseLines(sourceCode) {
|
|
1026
|
-
const cached = cache.get(sourceCode);
|
|
1027
|
-
if (cached) return cached;
|
|
1028
|
-
const parsedLines = new ParsedLines(sourceCode.text);
|
|
1029
|
-
cache.set(sourceCode, parsedLines);
|
|
1030
|
-
return parsedLines;
|
|
1031
|
-
}
|
|
1032
|
-
|
|
1033
3434
|
//#endregion
|
|
1034
3435
|
//#region src/rules/no-laziness-blockquotes.ts
|
|
1035
3436
|
/**
|
|
@@ -1333,27 +3734,15 @@ var no_text_backslash_linebreak_default = createRule("no-text-backslash-linebrea
|
|
|
1333
3734
|
if (c.trim() !== "") return;
|
|
1334
3735
|
if (c === "\n") break;
|
|
1335
3736
|
}
|
|
1336
|
-
const
|
|
1337
|
-
const beforeLines = sourceCode.text.slice(range[0], range[1] - 1).split(/\n/u);
|
|
1338
|
-
const line = loc.start.line + beforeLines.length - 1;
|
|
1339
|
-
const column = (beforeLines.length === 1 ? loc.start.column : 1) + (beforeLines.at(-1) || "").length;
|
|
3737
|
+
const backslashRange = [range[1] - 1, range[1]];
|
|
1340
3738
|
context.report({
|
|
1341
3739
|
node,
|
|
1342
|
-
loc:
|
|
1343
|
-
start: {
|
|
1344
|
-
line,
|
|
1345
|
-
column
|
|
1346
|
-
},
|
|
1347
|
-
end: {
|
|
1348
|
-
line,
|
|
1349
|
-
column: column + 1
|
|
1350
|
-
}
|
|
1351
|
-
},
|
|
3740
|
+
loc: getSourceLocationFromRange(sourceCode, node, backslashRange),
|
|
1352
3741
|
messageId: "textBackslashWithLinebreak",
|
|
1353
3742
|
suggest: [{
|
|
1354
3743
|
messageId: "removeBackslash",
|
|
1355
3744
|
fix: (fixer) => {
|
|
1356
|
-
return fixer.removeRange(
|
|
3745
|
+
return fixer.removeRange(backslashRange);
|
|
1357
3746
|
}
|
|
1358
3747
|
}]
|
|
1359
3748
|
});
|
|
@@ -1464,54 +3853,6 @@ var no_trailing_spaces_default = createRule("no-trailing-spaces", {
|
|
|
1464
3853
|
}
|
|
1465
3854
|
});
|
|
1466
3855
|
|
|
1467
|
-
//#endregion
|
|
1468
|
-
//#region src/utils/ast.ts
|
|
1469
|
-
/**
|
|
1470
|
-
* Get the kind of code block.
|
|
1471
|
-
*/
|
|
1472
|
-
function getCodeBlockKind(sourceCode, node) {
|
|
1473
|
-
const text = sourceCode.getText(node);
|
|
1474
|
-
return text.startsWith("```") ? "backtick-fenced" : text.startsWith("~~~") ? "tilde-fenced" : "indented";
|
|
1475
|
-
}
|
|
1476
|
-
/**
|
|
1477
|
-
* Get the kind of link.
|
|
1478
|
-
*/
|
|
1479
|
-
function getLinkKind(sourceCode, node) {
|
|
1480
|
-
const text = sourceCode.getText(node);
|
|
1481
|
-
return text.startsWith("[") ? "inline" : text.startsWith("<") && text.endsWith(">") ? "autolink" : "gfm-autolink";
|
|
1482
|
-
}
|
|
1483
|
-
/**
|
|
1484
|
-
* Get the marker of a list item.
|
|
1485
|
-
*/
|
|
1486
|
-
function getListItemMarker(sourceCode, node) {
|
|
1487
|
-
const item = node.type === "list" ? node.children[0] || node : node;
|
|
1488
|
-
const text = sourceCode.getText(item);
|
|
1489
|
-
if (text.startsWith("-")) return {
|
|
1490
|
-
kind: "-",
|
|
1491
|
-
raw: "-"
|
|
1492
|
-
};
|
|
1493
|
-
if (text.startsWith("*")) return {
|
|
1494
|
-
kind: "*",
|
|
1495
|
-
raw: "*"
|
|
1496
|
-
};
|
|
1497
|
-
if (text.startsWith("+")) return {
|
|
1498
|
-
kind: "+",
|
|
1499
|
-
raw: "+"
|
|
1500
|
-
};
|
|
1501
|
-
const matchDot = /^(\d+)\./.exec(text);
|
|
1502
|
-
if (matchDot) return {
|
|
1503
|
-
kind: ".",
|
|
1504
|
-
raw: matchDot[0],
|
|
1505
|
-
sequence: Number(matchDot[1])
|
|
1506
|
-
};
|
|
1507
|
-
const matchParen = /^(\d+)\)/.exec(text);
|
|
1508
|
-
return {
|
|
1509
|
-
kind: ")",
|
|
1510
|
-
raw: matchParen[0],
|
|
1511
|
-
sequence: Number(matchParen[1])
|
|
1512
|
-
};
|
|
1513
|
-
}
|
|
1514
|
-
|
|
1515
3856
|
//#endregion
|
|
1516
3857
|
//#region src/rules/ordered-list-marker-sequence.ts
|
|
1517
3858
|
var ordered_list_marker_sequence_default = createRule("ordered-list-marker-sequence", {
|
|
@@ -1852,23 +4193,11 @@ function* iterateSearchWords({ sourceCode, node, words, ignores }) {
|
|
|
1852
4193
|
if (index < 0) break;
|
|
1853
4194
|
startPosition = index + word.length;
|
|
1854
4195
|
if (!RE_BOUNDARY.test(text[index - 1] || "") || !RE_BOUNDARY.test(text[index + word.length] || "")) continue;
|
|
1855
|
-
const
|
|
1856
|
-
const
|
|
1857
|
-
const line = loc.start.line + beforeLines.length - 1;
|
|
1858
|
-
const column = (beforeLines.length === 1 ? loc.start.column : 1) + (beforeLines.at(-1) || "").length;
|
|
1859
|
-
const range = sourceCode.getRange(node);
|
|
4196
|
+
const [nodeStart] = sourceCode.getRange(node);
|
|
4197
|
+
const range = [nodeStart + index, nodeStart + index + word.length];
|
|
1860
4198
|
yield {
|
|
1861
|
-
loc:
|
|
1862
|
-
|
|
1863
|
-
line,
|
|
1864
|
-
column
|
|
1865
|
-
},
|
|
1866
|
-
end: {
|
|
1867
|
-
line,
|
|
1868
|
-
column: column + word.length
|
|
1869
|
-
}
|
|
1870
|
-
},
|
|
1871
|
-
range: [range[0] + index, range[0] + index + word.length],
|
|
4199
|
+
loc: getSourceLocationFromRange(sourceCode, node, range),
|
|
4200
|
+
range,
|
|
1872
4201
|
word
|
|
1873
4202
|
};
|
|
1874
4203
|
}
|
|
@@ -2565,8 +4894,11 @@ function normalizedURL(url) {
|
|
|
2565
4894
|
//#endregion
|
|
2566
4895
|
//#region src/utils/rules.ts
|
|
2567
4896
|
const rules$1 = [
|
|
4897
|
+
atx_headings_closing_sequence_length_default,
|
|
4898
|
+
atx_headings_closing_sequence_default,
|
|
2568
4899
|
canonical_code_block_language_default,
|
|
2569
4900
|
definitions_last_default,
|
|
4901
|
+
emoji_notation_default,
|
|
2570
4902
|
hard_linebreak_style_default,
|
|
2571
4903
|
heading_casing_default,
|
|
2572
4904
|
no_laziness_blockquotes_default,
|
|
@@ -2620,7 +4952,7 @@ __export(meta_exports, {
|
|
|
2620
4952
|
version: () => version
|
|
2621
4953
|
});
|
|
2622
4954
|
const name = "eslint-plugin-markdown-preferences";
|
|
2623
|
-
const version = "0.
|
|
4955
|
+
const version = "0.13.0";
|
|
2624
4956
|
|
|
2625
4957
|
//#endregion
|
|
2626
4958
|
//#region src/index.ts
|