html-validate 7.7.1 → 7.8.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/dist/cjs/browser.d.ts +4 -2
- package/dist/cjs/browser.js +11 -7
- package/dist/cjs/browser.js.map +1 -1
- package/dist/cjs/cli.js +2 -0
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/core.d.ts +26 -67
- package/dist/cjs/core.js +189 -2388
- package/dist/cjs/core.js.map +1 -1
- package/dist/cjs/elements.js +3704 -0
- package/dist/cjs/elements.js.map +1 -0
- package/dist/cjs/html-validate.js +3 -0
- package/dist/cjs/html-validate.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -3
- package/dist/cjs/index.js +11 -7
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/jest-lib.js +1 -0
- package/dist/cjs/jest-lib.js.map +1 -1
- package/dist/cjs/jest.d.ts +1 -1
- package/dist/cjs/jest.js +3 -0
- package/dist/cjs/jest.js.map +1 -1
- package/dist/cjs/meta-helper.d.ts +27 -0
- package/dist/cjs/meta-helper.js +64 -0
- package/dist/cjs/meta-helper.js.map +1 -0
- package/dist/cjs/rules-helper.d.ts +45 -0
- package/dist/cjs/rules-helper.js +408 -0
- package/dist/cjs/rules-helper.js.map +1 -0
- package/dist/cjs/test-utils.d.ts +1 -1
- package/dist/es/browser.d.ts +4 -2
- package/dist/es/browser.js +4 -2
- package/dist/es/browser.js.map +1 -1
- package/dist/es/cli.js +3 -1
- package/dist/es/cli.js.map +1 -1
- package/dist/es/core.d.ts +26 -67
- package/dist/es/core.js +156 -2357
- package/dist/es/core.js.map +1 -1
- package/dist/es/elements.js +3701 -0
- package/dist/es/elements.js.map +1 -0
- package/dist/es/html-validate.js +3 -1
- package/dist/es/html-validate.js.map +1 -1
- package/dist/es/index.d.ts +5 -3
- package/dist/es/index.js +4 -2
- package/dist/es/index.js.map +1 -1
- package/dist/es/jest-lib.js +2 -1
- package/dist/es/jest-lib.js.map +1 -1
- package/dist/es/jest.d.ts +1 -1
- package/dist/es/jest.js +3 -1
- package/dist/es/jest.js.map +1 -1
- package/dist/es/meta-helper.d.ts +27 -0
- package/dist/es/meta-helper.js +61 -0
- package/dist/es/meta-helper.js.map +1 -0
- package/dist/es/rules-helper.d.ts +45 -0
- package/dist/es/rules-helper.js +398 -0
- package/dist/es/rules-helper.js.map +1 -0
- package/dist/es/test-utils.d.ts +1 -1
- package/elements/html5.js +1 -2119
- package/package.json +9 -8
- package/elements/README.md +0 -49
- package/elements/entities.json +0 -1724
package/dist/es/core.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import betterAjvErrors from '@sidvind/better-ajv-errors';
|
|
3
|
+
import { C as CaseStyle, n as naturalJoin, c as classifyNodeText, T as TextClassification, h as hasAltText, i as isHTMLHidden, a as isAriaHidden, b as hasAccessibleName, d as inAccessibilityTree, e as hasAriaLabel } from './rules-helper.js';
|
|
3
4
|
import Ajv from 'ajv';
|
|
4
5
|
import deepmerge from 'deepmerge';
|
|
5
6
|
import * as espree from 'espree';
|
|
@@ -7,7 +8,7 @@ import * as walk from 'acorn-walk';
|
|
|
7
8
|
import path from 'path';
|
|
8
9
|
import semver from 'semver';
|
|
9
10
|
import kleur from 'kleur';
|
|
10
|
-
import {
|
|
11
|
+
import { e as entities$1, b as bundledElements } from './elements.js';
|
|
11
12
|
import { createRequire } from 'module';
|
|
12
13
|
import { codeFrameColumns } from '@babel/code-frame';
|
|
13
14
|
import stylishImpl from '@html-validate/stylish';
|
|
@@ -243,104 +244,6 @@ var ajvSchemaDraft = {
|
|
|
243
244
|
}
|
|
244
245
|
};
|
|
245
246
|
|
|
246
|
-
function stringify(value) {
|
|
247
|
-
if (typeof value === "string") {
|
|
248
|
-
return String(value);
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
return JSON.stringify(value);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* Represents an `Error` created from arbitrary values.
|
|
256
|
-
*
|
|
257
|
-
* @public
|
|
258
|
-
*/
|
|
259
|
-
class WrappedError extends Error {
|
|
260
|
-
constructor(message) {
|
|
261
|
-
super(stringify(message));
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Ensures the value is an Error.
|
|
267
|
-
*
|
|
268
|
-
* If the passed value is not an `Error` instance a [[WrappedError]] is
|
|
269
|
-
* constructed with the stringified value.
|
|
270
|
-
*
|
|
271
|
-
* @internal
|
|
272
|
-
*/
|
|
273
|
-
function ensureError(value) {
|
|
274
|
-
if (value instanceof Error) {
|
|
275
|
-
return value;
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
return new WrappedError(value);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
class NestedError extends Error {
|
|
283
|
-
constructor(message, nested) {
|
|
284
|
-
super(message);
|
|
285
|
-
Error.captureStackTrace(this, NestedError);
|
|
286
|
-
if (nested && nested.stack) {
|
|
287
|
-
this.stack += `\nCaused by: ${nested.stack}`;
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* @public
|
|
294
|
-
*/
|
|
295
|
-
class UserError extends NestedError {
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
function getSummary(schema, obj, errors) {
|
|
299
|
-
const output = betterAjvErrors(schema, obj, errors, {
|
|
300
|
-
format: "js",
|
|
301
|
-
});
|
|
302
|
-
// istanbul ignore next: for safety only
|
|
303
|
-
return output.length > 0 ? output[0].error : "unknown validation error";
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* @public
|
|
307
|
-
*/
|
|
308
|
-
class SchemaValidationError extends UserError {
|
|
309
|
-
constructor(filename, message, obj, schema, errors) {
|
|
310
|
-
const summary = getSummary(schema, obj, errors);
|
|
311
|
-
super(`${message}: ${summary}`);
|
|
312
|
-
this.filename = filename;
|
|
313
|
-
this.obj = obj;
|
|
314
|
-
this.schema = schema;
|
|
315
|
-
this.errors = errors;
|
|
316
|
-
}
|
|
317
|
-
prettyError() {
|
|
318
|
-
const json = this.getRawJSON();
|
|
319
|
-
return betterAjvErrors(this.schema, this.obj, this.errors, {
|
|
320
|
-
format: "cli",
|
|
321
|
-
indent: 2,
|
|
322
|
-
json,
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
getRawJSON() {
|
|
326
|
-
if (this.filename && fs.existsSync(this.filename)) {
|
|
327
|
-
return fs.readFileSync(this.filename, "utf-8");
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
return null;
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* Helper function to assist IDE with completion and type-checking.
|
|
337
|
-
*
|
|
338
|
-
* @public
|
|
339
|
-
*/
|
|
340
|
-
function defineMetadata(metatable) {
|
|
341
|
-
return metatable;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
247
|
/**
|
|
345
248
|
* @public
|
|
346
249
|
*/
|
|
@@ -1697,273 +1600,94 @@ class DOMTree {
|
|
|
1697
1600
|
}
|
|
1698
1601
|
}
|
|
1699
1602
|
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
/**
|
|
1704
|
-
* Tests if this element is present in the accessibility tree.
|
|
1705
|
-
*
|
|
1706
|
-
* In practice it tests whenever the element or its parents has
|
|
1707
|
-
* `role="presentation"` or `aria-hidden="false"`. Dynamic values counts as
|
|
1708
|
-
* visible since the element might be in the visibility tree sometimes.
|
|
1709
|
-
*/
|
|
1710
|
-
function inAccessibilityTree(node) {
|
|
1711
|
-
return !isAriaHidden(node) && !isPresentation(node);
|
|
1712
|
-
}
|
|
1713
|
-
function isAriaHiddenImpl(node) {
|
|
1714
|
-
const isHidden = (node) => {
|
|
1715
|
-
const ariaHidden = node.getAttribute("aria-hidden");
|
|
1716
|
-
return Boolean(ariaHidden && ariaHidden.value === "true");
|
|
1717
|
-
};
|
|
1718
|
-
return {
|
|
1719
|
-
byParent: node.parent ? isAriaHidden(node.parent) : false,
|
|
1720
|
-
bySelf: isHidden(node),
|
|
1721
|
-
};
|
|
1722
|
-
}
|
|
1723
|
-
function isAriaHidden(node, details) {
|
|
1724
|
-
const cached = node.cacheGet(ARIA_HIDDEN_CACHE);
|
|
1725
|
-
if (cached) {
|
|
1726
|
-
return details ? cached : cached.byParent || cached.bySelf;
|
|
1603
|
+
function stringify(value) {
|
|
1604
|
+
if (typeof value === "string") {
|
|
1605
|
+
return String(value);
|
|
1727
1606
|
}
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
}
|
|
1731
|
-
function isHTMLHiddenImpl(node) {
|
|
1732
|
-
const isHidden = (node) => {
|
|
1733
|
-
const hidden = node.getAttribute("hidden");
|
|
1734
|
-
return hidden !== null && hidden.isStatic;
|
|
1735
|
-
};
|
|
1736
|
-
return {
|
|
1737
|
-
byParent: node.parent ? isHTMLHidden(node.parent) : false,
|
|
1738
|
-
bySelf: isHidden(node),
|
|
1739
|
-
};
|
|
1740
|
-
}
|
|
1741
|
-
function isHTMLHidden(node, details) {
|
|
1742
|
-
const cached = node.cacheGet(HTML_HIDDEN_CACHE);
|
|
1743
|
-
if (cached) {
|
|
1744
|
-
return details ? cached : cached.byParent || cached.bySelf;
|
|
1607
|
+
else {
|
|
1608
|
+
return JSON.stringify(value);
|
|
1745
1609
|
}
|
|
1746
|
-
const result = node.cacheSet(HTML_HIDDEN_CACHE, isHTMLHiddenImpl(node));
|
|
1747
|
-
return details ? result : result.byParent || result.bySelf;
|
|
1748
1610
|
}
|
|
1749
1611
|
/**
|
|
1750
|
-
*
|
|
1612
|
+
* Represents an `Error` created from arbitrary values.
|
|
1751
1613
|
*
|
|
1752
|
-
* Dynamic values yields `false` just as if the attribute wasn't present.
|
|
1753
|
-
*/
|
|
1754
|
-
function isPresentation(node) {
|
|
1755
|
-
if (node.cacheExists(ROLE_PRESENTATION_CACHE)) {
|
|
1756
|
-
return Boolean(node.cacheGet(ROLE_PRESENTATION_CACHE));
|
|
1757
|
-
}
|
|
1758
|
-
let cur = node;
|
|
1759
|
-
do {
|
|
1760
|
-
const role = cur.getAttribute("role");
|
|
1761
|
-
/* role="presentation" */
|
|
1762
|
-
if (role && role.value === "presentation") {
|
|
1763
|
-
return cur.cacheSet(ROLE_PRESENTATION_CACHE, true);
|
|
1764
|
-
}
|
|
1765
|
-
/* sanity check: break if no parent is present, normally not an issue as the
|
|
1766
|
-
* root element should be found first */
|
|
1767
|
-
if (!cur.parent) {
|
|
1768
|
-
break;
|
|
1769
|
-
}
|
|
1770
|
-
/* check parents */
|
|
1771
|
-
cur = cur.parent;
|
|
1772
|
-
} while (!cur.isRootElement());
|
|
1773
|
-
return node.cacheSet(ROLE_PRESENTATION_CACHE, false);
|
|
1774
|
-
}
|
|
1775
|
-
|
|
1776
|
-
const cachePrefix = classifyNodeText.name;
|
|
1777
|
-
const HTML_CACHE_KEY = Symbol(`${cachePrefix}|html`);
|
|
1778
|
-
const A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y`);
|
|
1779
|
-
const IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY = Symbol(`${cachePrefix}|html|ignore-hidden-root`);
|
|
1780
|
-
const IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY = Symbol(`${cachePrefix}|a11y|ignore-hidden-root`);
|
|
1781
|
-
/**
|
|
1782
1614
|
* @public
|
|
1783
1615
|
*/
|
|
1784
|
-
|
|
1785
|
-
(
|
|
1786
|
-
|
|
1787
|
-
TextClassification[TextClassification["DYNAMIC_TEXT"] = 1] = "DYNAMIC_TEXT";
|
|
1788
|
-
TextClassification[TextClassification["STATIC_TEXT"] = 2] = "STATIC_TEXT";
|
|
1789
|
-
})(TextClassification || (TextClassification = {}));
|
|
1790
|
-
function getCachekey(options = {}) {
|
|
1791
|
-
const { accessible = false, ignoreHiddenRoot = false } = options;
|
|
1792
|
-
if (accessible && ignoreHiddenRoot) {
|
|
1793
|
-
return IGNORE_HIDDEN_ROOT_A11Y_CACHE_KEY;
|
|
1794
|
-
}
|
|
1795
|
-
else if (ignoreHiddenRoot) {
|
|
1796
|
-
return IGNORE_HIDDEN_ROOT_HTML_CACHE_KEY;
|
|
1797
|
-
}
|
|
1798
|
-
else if (accessible) {
|
|
1799
|
-
return A11Y_CACHE_KEY;
|
|
1800
|
-
}
|
|
1801
|
-
else {
|
|
1802
|
-
return HTML_CACHE_KEY;
|
|
1616
|
+
class WrappedError extends Error {
|
|
1617
|
+
constructor(message) {
|
|
1618
|
+
super(stringify(message));
|
|
1803
1619
|
}
|
|
1804
1620
|
}
|
|
1805
|
-
|
|
1806
|
-
* element kinda acts as if there is no text content, most particularly it
|
|
1807
|
-
* doesn't receive and accessible name. The `.textContent` property does
|
|
1808
|
-
* however include the <option> childrens text. But for the sake of the
|
|
1809
|
-
* validator it is probably best if the classification acts as if there is no
|
|
1810
|
-
* text as I think that is what is expected of the return values. Might have
|
|
1811
|
-
* to revisit this at some point or if someone could clarify what section of
|
|
1812
|
-
* the standard deals with this. */
|
|
1813
|
-
function isSpecialEmpty(node) {
|
|
1814
|
-
return node.is("select") || node.is("textarea");
|
|
1815
|
-
}
|
|
1621
|
+
|
|
1816
1622
|
/**
|
|
1817
|
-
*
|
|
1818
|
-
*
|
|
1819
|
-
* Any text is considered including text from descendant elements. Whitespace is
|
|
1820
|
-
* ignored.
|
|
1623
|
+
* Ensures the value is an Error.
|
|
1821
1624
|
*
|
|
1822
|
-
* If
|
|
1625
|
+
* If the passed value is not an `Error` instance a [[WrappedError]] is
|
|
1626
|
+
* constructed with the stringified value.
|
|
1823
1627
|
*
|
|
1824
|
-
* @
|
|
1628
|
+
* @internal
|
|
1825
1629
|
*/
|
|
1826
|
-
function
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
if (node.cacheExists(cacheKey)) {
|
|
1830
|
-
return node.cacheGet(cacheKey);
|
|
1831
|
-
}
|
|
1832
|
-
if (!ignoreHiddenRoot && isHTMLHidden(node)) {
|
|
1833
|
-
return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
|
|
1834
|
-
}
|
|
1835
|
-
if (!ignoreHiddenRoot && accessible && isAriaHidden(node)) {
|
|
1836
|
-
return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
|
|
1837
|
-
}
|
|
1838
|
-
if (isSpecialEmpty(node)) {
|
|
1839
|
-
return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
|
|
1840
|
-
}
|
|
1841
|
-
const text = findTextNodes(node, {
|
|
1842
|
-
...options,
|
|
1843
|
-
ignoreHiddenRoot: false,
|
|
1844
|
-
});
|
|
1845
|
-
/* if any text is dynamic classify as dynamic */
|
|
1846
|
-
if (text.some((cur) => cur.isDynamic)) {
|
|
1847
|
-
return node.cacheSet(cacheKey, TextClassification.DYNAMIC_TEXT);
|
|
1848
|
-
}
|
|
1849
|
-
/* if any text has non-whitespace character classify as static */
|
|
1850
|
-
if (text.some((cur) => cur.textContent.match(/\S/) !== null)) {
|
|
1851
|
-
return node.cacheSet(cacheKey, TextClassification.STATIC_TEXT);
|
|
1852
|
-
}
|
|
1853
|
-
/* default to empty */
|
|
1854
|
-
return node.cacheSet(cacheKey, TextClassification.EMPTY_TEXT);
|
|
1855
|
-
}
|
|
1856
|
-
function findTextNodes(node, options) {
|
|
1857
|
-
const { accessible = false } = options;
|
|
1858
|
-
let text = [];
|
|
1859
|
-
for (const child of node.childNodes) {
|
|
1860
|
-
if (isTextNode(child)) {
|
|
1861
|
-
text.push(child);
|
|
1862
|
-
}
|
|
1863
|
-
else if (isElementNode(child)) {
|
|
1864
|
-
if (isHTMLHidden(child, true).bySelf) {
|
|
1865
|
-
continue;
|
|
1866
|
-
}
|
|
1867
|
-
if (accessible && isAriaHidden(child, true).bySelf) {
|
|
1868
|
-
continue;
|
|
1869
|
-
}
|
|
1870
|
-
text = text.concat(findTextNodes(child, options));
|
|
1871
|
-
}
|
|
1630
|
+
function ensureError(value) {
|
|
1631
|
+
if (value instanceof Error) {
|
|
1632
|
+
return value;
|
|
1872
1633
|
}
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
function hasAltText(image) {
|
|
1877
|
-
const alt = image.getAttribute("alt");
|
|
1878
|
-
/* missing or boolean */
|
|
1879
|
-
if (alt === null || alt.value === null) {
|
|
1880
|
-
return false;
|
|
1634
|
+
else {
|
|
1635
|
+
return new WrappedError(value);
|
|
1881
1636
|
}
|
|
1882
|
-
return alt.isDynamic || alt.value.toString() !== "";
|
|
1883
1637
|
}
|
|
1884
1638
|
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1639
|
+
class NestedError extends Error {
|
|
1640
|
+
constructor(message, nested) {
|
|
1641
|
+
super(message);
|
|
1642
|
+
Error.captureStackTrace(this, NestedError);
|
|
1643
|
+
if (nested && nested.stack) {
|
|
1644
|
+
this.stack += `\nCaused by: ${nested.stack}`;
|
|
1645
|
+
}
|
|
1890
1646
|
}
|
|
1891
|
-
return label.isDynamic || label.value.toString() !== "";
|
|
1892
1647
|
}
|
|
1893
1648
|
|
|
1894
1649
|
/**
|
|
1895
|
-
*
|
|
1896
|
-
*
|
|
1897
|
-
* - `["foo"]` becomes `"foo"`
|
|
1898
|
-
* - `["foo", "bar"]` becomes `"foo or bar"`
|
|
1899
|
-
* - `["foo", "bar", "baz"]` becomes `"foo, bar or baz"`
|
|
1900
|
-
* - and so on...
|
|
1901
|
-
*
|
|
1902
|
-
* @internal
|
|
1903
|
-
* @param values - List of words to join
|
|
1904
|
-
* @param conjunction - Conjunction for the last element.
|
|
1905
|
-
* @returns String with the words naturally joined with a conjunction.
|
|
1650
|
+
* @public
|
|
1906
1651
|
*/
|
|
1907
|
-
|
|
1908
|
-
switch (values.length) {
|
|
1909
|
-
case 0:
|
|
1910
|
-
return "";
|
|
1911
|
-
case 1:
|
|
1912
|
-
return values[0];
|
|
1913
|
-
case 2:
|
|
1914
|
-
return `${values[0]} ${conjunction} ${values[1]}`;
|
|
1915
|
-
default:
|
|
1916
|
-
return `${values.slice(0, -1).join(", ")} ${conjunction} ${values.slice(-1)[0]}`;
|
|
1917
|
-
}
|
|
1652
|
+
class UserError extends NestedError {
|
|
1918
1653
|
}
|
|
1919
1654
|
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
return null;
|
|
1927
|
-
}
|
|
1928
|
-
const expected = naturalJoin(attr.map((it) => `"${it}"`));
|
|
1929
|
-
return `requires ${expected} attribute to be present`;
|
|
1930
|
-
};
|
|
1931
|
-
}
|
|
1932
|
-
/**
|
|
1933
|
-
* @internal
|
|
1934
|
-
*/
|
|
1935
|
-
function allowedIfAttributeIsAbsent(...attr) {
|
|
1936
|
-
return (node) => {
|
|
1937
|
-
const present = attr.filter((it) => node.hasAttribute(it));
|
|
1938
|
-
if (present.length === 0) {
|
|
1939
|
-
return null;
|
|
1940
|
-
}
|
|
1941
|
-
const expected = naturalJoin(present.map((it) => `"${it}"`));
|
|
1942
|
-
return `cannot be used at the same time as ${expected}`;
|
|
1943
|
-
};
|
|
1655
|
+
function getSummary(schema, obj, errors) {
|
|
1656
|
+
const output = betterAjvErrors(schema, obj, errors, {
|
|
1657
|
+
format: "js",
|
|
1658
|
+
});
|
|
1659
|
+
// istanbul ignore next: for safety only
|
|
1660
|
+
return output.length > 0 ? output[0].error : "unknown validation error";
|
|
1944
1661
|
}
|
|
1945
1662
|
/**
|
|
1946
|
-
* @
|
|
1663
|
+
* @public
|
|
1947
1664
|
*/
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
const
|
|
1951
|
-
|
|
1952
|
-
|
|
1665
|
+
class SchemaValidationError extends UserError {
|
|
1666
|
+
constructor(filename, message, obj, schema, errors) {
|
|
1667
|
+
const summary = getSummary(schema, obj, errors);
|
|
1668
|
+
super(`${message}: ${summary}`);
|
|
1669
|
+
this.filename = filename;
|
|
1670
|
+
this.obj = obj;
|
|
1671
|
+
this.schema = schema;
|
|
1672
|
+
this.errors = errors;
|
|
1673
|
+
}
|
|
1674
|
+
prettyError() {
|
|
1675
|
+
const json = this.getRawJSON();
|
|
1676
|
+
return betterAjvErrors(this.schema, this.obj, this.errors, {
|
|
1677
|
+
format: "cli",
|
|
1678
|
+
indent: 2,
|
|
1679
|
+
json,
|
|
1680
|
+
});
|
|
1681
|
+
}
|
|
1682
|
+
getRawJSON() {
|
|
1683
|
+
if (this.filename && fs.existsSync(this.filename)) {
|
|
1684
|
+
return fs.readFileSync(this.filename, "utf-8");
|
|
1953
1685
|
}
|
|
1954
|
-
|
|
1955
|
-
if (actualValue && expectedValue.includes(actualValue.toLocaleLowerCase())) {
|
|
1686
|
+
else {
|
|
1956
1687
|
return null;
|
|
1957
1688
|
}
|
|
1958
|
-
|
|
1959
|
-
return `"${key}" attribute must be ${expected}`;
|
|
1960
|
-
};
|
|
1689
|
+
}
|
|
1961
1690
|
}
|
|
1962
|
-
const metadataHelper = {
|
|
1963
|
-
allowedIfAttributeIsPresent,
|
|
1964
|
-
allowedIfAttributeIsAbsent,
|
|
1965
|
-
allowedIfAttributeHasValue,
|
|
1966
|
-
};
|
|
1967
1691
|
|
|
1968
1692
|
/**
|
|
1969
1693
|
* Computes hash for given string.
|
|
@@ -1991,9 +1715,7 @@ function cyrb53(str) {
|
|
|
1991
1715
|
}
|
|
1992
1716
|
const computeHash = cyrb53;
|
|
1993
1717
|
|
|
1994
|
-
const
|
|
1995
|
-
const legacyRequire = createRequire(import.meta.url);
|
|
1996
|
-
const distFolder = path.resolve(projectRoot, "dist/es");
|
|
1718
|
+
const legacyRequire = createRequire(import.meta.url);
|
|
1997
1719
|
|
|
1998
1720
|
/**
|
|
1999
1721
|
* Similar to `require(..)` but removes the cached copy first.
|
|
@@ -3502,16 +3224,6 @@ var TRANSFORMER_API;
|
|
|
3502
3224
|
TRANSFORMER_API[TRANSFORMER_API["VERSION"] = 1] = "VERSION";
|
|
3503
3225
|
})(TRANSFORMER_API || (TRANSFORMER_API = {}));
|
|
3504
3226
|
|
|
3505
|
-
/* generated file, changes will be overwritten */
|
|
3506
|
-
/** @public */
|
|
3507
|
-
const name = "html-validate";
|
|
3508
|
-
/** @public */
|
|
3509
|
-
const version = "7.7.1";
|
|
3510
|
-
/** @public */
|
|
3511
|
-
const homepage = "https://html-validate.org";
|
|
3512
|
-
/** @public */
|
|
3513
|
-
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
3514
|
-
|
|
3515
3227
|
/**
|
|
3516
3228
|
* @public
|
|
3517
3229
|
*/
|
|
@@ -3820,20 +3532,6 @@ class Rule {
|
|
|
3820
3532
|
return null;
|
|
3821
3533
|
}
|
|
3822
3534
|
}
|
|
3823
|
-
/**
|
|
3824
|
-
* @internal
|
|
3825
|
-
*/
|
|
3826
|
-
function ruleDocumentationUrl(filename) {
|
|
3827
|
-
/* during bundling all "@/rule.ts"'s are converted to paths relative to the src
|
|
3828
|
-
* folder and with the @/ prefix, by replacing the @ with the dist folder we
|
|
3829
|
-
* can resolve the path properly */
|
|
3830
|
-
filename = filename.replace("@", distFolder);
|
|
3831
|
-
const p = path.parse(filename);
|
|
3832
|
-
const root = path.join(distFolder, "rules");
|
|
3833
|
-
const rel = path.relative(root, path.join(p.dir, p.name));
|
|
3834
|
-
const normalized = rel.replace(/\\/g, "/");
|
|
3835
|
-
return `${homepage}/rules/${normalized}.html`;
|
|
3836
|
-
}
|
|
3837
3535
|
|
|
3838
3536
|
const defaults$t = {
|
|
3839
3537
|
allowExternal: true,
|
|
@@ -3914,7 +3612,7 @@ class AllowedLinks extends Rule {
|
|
|
3914
3612
|
const message = description[context] || "This link type is not allowed by current configuration";
|
|
3915
3613
|
return {
|
|
3916
3614
|
description: message,
|
|
3917
|
-
url:
|
|
3615
|
+
url: "https://html-validate.org/rules/allowed-links.html",
|
|
3918
3616
|
};
|
|
3919
3617
|
}
|
|
3920
3618
|
setup() {
|
|
@@ -4077,7 +3775,7 @@ class AreaAlt extends Rule {
|
|
|
4077
3775
|
documentation(context) {
|
|
4078
3776
|
return {
|
|
4079
3777
|
description: getDescription(context).join("\n"),
|
|
4080
|
-
url:
|
|
3778
|
+
url: "https://html-validate.org/rules/area-alt.html",
|
|
4081
3779
|
};
|
|
4082
3780
|
}
|
|
4083
3781
|
setup() {
|
|
@@ -4129,7 +3827,7 @@ class AriaHiddenBody extends Rule {
|
|
|
4129
3827
|
documentation() {
|
|
4130
3828
|
return {
|
|
4131
3829
|
description: "`aria-hidden` must not be used on the `<body>` element as it makes the page inaccessible to assistive technology such as screenreaders",
|
|
4132
|
-
url:
|
|
3830
|
+
url: "https://html-validate.org/rules/aria-hidden-body.html",
|
|
4133
3831
|
};
|
|
4134
3832
|
}
|
|
4135
3833
|
setup() {
|
|
@@ -4182,7 +3880,7 @@ class AriaLabelMisuse extends Rule {
|
|
|
4182
3880
|
const lines = valid.map((it) => `- ${it}\n`).join("");
|
|
4183
3881
|
return {
|
|
4184
3882
|
description: `\`aria-label\` can only be used on:\n\n${lines}`,
|
|
4185
|
-
url:
|
|
3883
|
+
url: "https://html-validate.org/rules/aria-label-misuse.html",
|
|
4186
3884
|
};
|
|
4187
3885
|
}
|
|
4188
3886
|
setup() {
|
|
@@ -4229,60 +3927,6 @@ class AriaLabelMisuse extends Rule {
|
|
|
4229
3927
|
class ConfigError extends UserError {
|
|
4230
3928
|
}
|
|
4231
3929
|
|
|
4232
|
-
/**
|
|
4233
|
-
* Represents casing for a name, e.g. lowercase, uppercase, etc.
|
|
4234
|
-
*/
|
|
4235
|
-
class CaseStyle {
|
|
4236
|
-
/**
|
|
4237
|
-
* @param style - Name of a valid case style.
|
|
4238
|
-
*/
|
|
4239
|
-
constructor(style, ruleId) {
|
|
4240
|
-
if (!Array.isArray(style)) {
|
|
4241
|
-
style = [style];
|
|
4242
|
-
}
|
|
4243
|
-
if (style.length === 0) {
|
|
4244
|
-
throw new ConfigError(`Missing style for ${ruleId} rule`);
|
|
4245
|
-
}
|
|
4246
|
-
this.styles = this.parseStyle(style, ruleId);
|
|
4247
|
-
}
|
|
4248
|
-
/**
|
|
4249
|
-
* Test if a text matches this case style.
|
|
4250
|
-
*/
|
|
4251
|
-
match(text) {
|
|
4252
|
-
return this.styles.some((style) => text.match(style.pattern));
|
|
4253
|
-
}
|
|
4254
|
-
get name() {
|
|
4255
|
-
const names = this.styles.map((style) => style.name);
|
|
4256
|
-
switch (this.styles.length) {
|
|
4257
|
-
case 1:
|
|
4258
|
-
return names[0];
|
|
4259
|
-
case 2:
|
|
4260
|
-
return names.join(" or ");
|
|
4261
|
-
default: {
|
|
4262
|
-
const last = names.slice(-1);
|
|
4263
|
-
const rest = names.slice(0, -1);
|
|
4264
|
-
return `${rest.join(", ")} or ${last[0]}`;
|
|
4265
|
-
}
|
|
4266
|
-
}
|
|
4267
|
-
}
|
|
4268
|
-
parseStyle(style, ruleId) {
|
|
4269
|
-
return style.map((cur) => {
|
|
4270
|
-
switch (cur.toLowerCase()) {
|
|
4271
|
-
case "lowercase":
|
|
4272
|
-
return { pattern: /^[a-z]*$/, name: "lowercase" };
|
|
4273
|
-
case "uppercase":
|
|
4274
|
-
return { pattern: /^[A-Z]*$/, name: "uppercase" };
|
|
4275
|
-
case "pascalcase":
|
|
4276
|
-
return { pattern: /^[A-Z][A-Za-z]*$/, name: "PascalCase" };
|
|
4277
|
-
case "camelcase":
|
|
4278
|
-
return { pattern: /^[a-z][A-Za-z]*$/, name: "camelCase" };
|
|
4279
|
-
default:
|
|
4280
|
-
throw new ConfigError(`Invalid style "${cur}" for ${ruleId} rule`);
|
|
4281
|
-
}
|
|
4282
|
-
});
|
|
4283
|
-
}
|
|
4284
|
-
}
|
|
4285
|
-
|
|
4286
3930
|
const defaults$r = {
|
|
4287
3931
|
style: "lowercase",
|
|
4288
3932
|
ignoreForeign: true,
|
|
@@ -4321,7 +3965,7 @@ class AttrCase extends Rule {
|
|
|
4321
3965
|
description: Array.isArray(style)
|
|
4322
3966
|
? [`Attribute name must be in one of:`, "", ...style.map((it) => `- ${it}`)].join("\n")
|
|
4323
3967
|
: `Attribute name must be in ${style}.`,
|
|
4324
|
-
url:
|
|
3968
|
+
url: "https://html-validate.org/rules/attr-case.html",
|
|
4325
3969
|
};
|
|
4326
3970
|
}
|
|
4327
3971
|
setup() {
|
|
@@ -4614,7 +4258,7 @@ class AttrDelimiter extends Rule {
|
|
|
4614
4258
|
documentation() {
|
|
4615
4259
|
return {
|
|
4616
4260
|
description: `Attribute value must not be separated by whitespace.`,
|
|
4617
|
-
url:
|
|
4261
|
+
url: "https://html-validate.org/rules/attr-delimiter.html",
|
|
4618
4262
|
};
|
|
4619
4263
|
}
|
|
4620
4264
|
setup() {
|
|
@@ -4694,7 +4338,7 @@ class AttrPattern extends Rule {
|
|
|
4694
4338
|
}
|
|
4695
4339
|
return {
|
|
4696
4340
|
description,
|
|
4697
|
-
url:
|
|
4341
|
+
url: "https://html-validate.org/rules/attr-pattern.html",
|
|
4698
4342
|
};
|
|
4699
4343
|
}
|
|
4700
4344
|
setup() {
|
|
@@ -4799,7 +4443,7 @@ class AttrQuotes extends Rule {
|
|
|
4799
4443
|
];
|
|
4800
4444
|
return {
|
|
4801
4445
|
description: description.join("\n"),
|
|
4802
|
-
url:
|
|
4446
|
+
url: "https://html-validate.org/rules/attr-quotes.html",
|
|
4803
4447
|
};
|
|
4804
4448
|
}
|
|
4805
4449
|
setup() {
|
|
@@ -4867,7 +4511,7 @@ class AttrSpacing extends Rule {
|
|
|
4867
4511
|
documentation() {
|
|
4868
4512
|
return {
|
|
4869
4513
|
description: `No space between attributes. At least one whitespace character (commonly space) must be used to separate attributes.`,
|
|
4870
|
-
url:
|
|
4514
|
+
url: "https://html-validate.org/rules/attr-spacing.html",
|
|
4871
4515
|
};
|
|
4872
4516
|
}
|
|
4873
4517
|
setup() {
|
|
@@ -4895,7 +4539,7 @@ class AttributeAllowedValues extends Rule {
|
|
|
4895
4539
|
documentation(context) {
|
|
4896
4540
|
const docs = {
|
|
4897
4541
|
description: "Attribute has invalid value.",
|
|
4898
|
-
url:
|
|
4542
|
+
url: "https://html-validate.org/rules/attribute-allowed-values.html",
|
|
4899
4543
|
};
|
|
4900
4544
|
if (!context) {
|
|
4901
4545
|
return docs;
|
|
@@ -4988,7 +4632,7 @@ class AttributeBooleanStyle extends Rule {
|
|
|
4988
4632
|
documentation() {
|
|
4989
4633
|
return {
|
|
4990
4634
|
description: "Require a specific style when writing boolean attributes.",
|
|
4991
|
-
url:
|
|
4635
|
+
url: "https://html-validate.org/rules/attribute-boolean-style.html",
|
|
4992
4636
|
};
|
|
4993
4637
|
}
|
|
4994
4638
|
setup() {
|
|
@@ -5069,7 +4713,7 @@ class AttributeEmptyStyle extends Rule {
|
|
|
5069
4713
|
documentation() {
|
|
5070
4714
|
return {
|
|
5071
4715
|
description: "Require a specific style for attributes with empty values.",
|
|
5072
|
-
url:
|
|
4716
|
+
url: "https://html-validate.org/rules/attribute-empty-style.html",
|
|
5073
4717
|
};
|
|
5074
4718
|
}
|
|
5075
4719
|
setup() {
|
|
@@ -5150,7 +4794,7 @@ class AttributeMisuse extends Rule {
|
|
|
5150
4794
|
documentation(context) {
|
|
5151
4795
|
return {
|
|
5152
4796
|
description: ruleDescription(context),
|
|
5153
|
-
url:
|
|
4797
|
+
url: "https://html-validate.org/rules/attribute-misuse.html",
|
|
5154
4798
|
};
|
|
5155
4799
|
}
|
|
5156
4800
|
setup() {
|
|
@@ -5230,7 +4874,7 @@ class ClassPattern extends Rule {
|
|
|
5230
4874
|
const pattern = describePattern(this.options.pattern);
|
|
5231
4875
|
return {
|
|
5232
4876
|
description: `For consistency all classes are required to match the pattern ${pattern}.`,
|
|
5233
|
-
url:
|
|
4877
|
+
url: "https://html-validate.org/rules/class-pattern.html",
|
|
5234
4878
|
};
|
|
5235
4879
|
}
|
|
5236
4880
|
setup() {
|
|
@@ -5255,7 +4899,7 @@ class CloseAttr extends Rule {
|
|
|
5255
4899
|
documentation() {
|
|
5256
4900
|
return {
|
|
5257
4901
|
description: "HTML disallows end tags to have attributes.",
|
|
5258
|
-
url:
|
|
4902
|
+
url: "https://html-validate.org/rules/close-attr.html",
|
|
5259
4903
|
};
|
|
5260
4904
|
}
|
|
5261
4905
|
setup() {
|
|
@@ -5281,7 +4925,7 @@ class CloseOrder extends Rule {
|
|
|
5281
4925
|
documentation() {
|
|
5282
4926
|
return {
|
|
5283
4927
|
description: "HTML requires elements to be closed in the same order as they were opened.",
|
|
5284
|
-
url:
|
|
4928
|
+
url: "https://html-validate.org/rules/close-order.html",
|
|
5285
4929
|
};
|
|
5286
4930
|
}
|
|
5287
4931
|
setup() {
|
|
@@ -5366,7 +5010,7 @@ class Deprecated extends Rule {
|
|
|
5366
5010
|
documentation(context) {
|
|
5367
5011
|
const doc = {
|
|
5368
5012
|
description: "This element is deprecated and should not be used in new code.",
|
|
5369
|
-
url:
|
|
5013
|
+
url: "https://html-validate.org/rules/deprecated.html",
|
|
5370
5014
|
};
|
|
5371
5015
|
if (context) {
|
|
5372
5016
|
const text = [];
|
|
@@ -5453,7 +5097,7 @@ class DeprecatedRule extends Rule {
|
|
|
5453
5097
|
const preamble = context ? `The rule "${context}"` : "This rule";
|
|
5454
5098
|
return {
|
|
5455
5099
|
description: `${preamble} is deprecated and should not be used any longer, consult documentation for further information.`,
|
|
5456
|
-
url:
|
|
5100
|
+
url: "https://html-validate.org/rules/deprecated-rule.html",
|
|
5457
5101
|
};
|
|
5458
5102
|
}
|
|
5459
5103
|
setup() {
|
|
@@ -5481,7 +5125,7 @@ let NoStyleTag$1 = class NoStyleTag extends Rule {
|
|
|
5481
5125
|
"<!DOCTYPE html>",
|
|
5482
5126
|
"```",
|
|
5483
5127
|
].join("\n"),
|
|
5484
|
-
url:
|
|
5128
|
+
url: "https://html-validate.org/rules/doctype-html.html",
|
|
5485
5129
|
};
|
|
5486
5130
|
}
|
|
5487
5131
|
setup() {
|
|
@@ -5512,7 +5156,7 @@ class DoctypeStyle extends Rule {
|
|
|
5512
5156
|
documentation(context) {
|
|
5513
5157
|
const doc = {
|
|
5514
5158
|
description: `While DOCTYPE is case-insensitive in the standard the current configuration requires a specific style.`,
|
|
5515
|
-
url:
|
|
5159
|
+
url: "https://html-validate.org/rules/doctype-style.html",
|
|
5516
5160
|
};
|
|
5517
5161
|
if (context) {
|
|
5518
5162
|
doc.description = `While DOCTYPE is case-insensitive in the standard the current configuration requires it to be ${context.style}`;
|
|
@@ -5565,7 +5209,7 @@ class ElementCase extends Rule {
|
|
|
5565
5209
|
description: Array.isArray(style)
|
|
5566
5210
|
? [`Element tagname must be in one of:`, "", ...style.map((it) => `- ${it}`)].join("\n")
|
|
5567
5211
|
: `Element tagname must be in ${style}.`,
|
|
5568
|
-
url:
|
|
5212
|
+
url: "https://html-validate.org/rules/element-case.html",
|
|
5569
5213
|
};
|
|
5570
5214
|
}
|
|
5571
5215
|
setup() {
|
|
@@ -5635,7 +5279,7 @@ class ElementName extends Rule {
|
|
|
5635
5279
|
documentation(context) {
|
|
5636
5280
|
return {
|
|
5637
5281
|
description: this.documentationMessages(context).join("\n"),
|
|
5638
|
-
url:
|
|
5282
|
+
url: "https://html-validate.org/rules/element-name.html",
|
|
5639
5283
|
};
|
|
5640
5284
|
}
|
|
5641
5285
|
documentationMessages(context) {
|
|
@@ -5741,7 +5385,7 @@ class ElementPermittedContent extends Rule {
|
|
|
5741
5385
|
documentation(context) {
|
|
5742
5386
|
return {
|
|
5743
5387
|
description: getRuleDescription$2(context).join("\n"),
|
|
5744
|
-
url:
|
|
5388
|
+
url: "https://html-validate.org/rules/element-permitted-content.html",
|
|
5745
5389
|
};
|
|
5746
5390
|
}
|
|
5747
5391
|
setup() {
|
|
@@ -5834,7 +5478,7 @@ class ElementPermittedOccurrences extends Rule {
|
|
|
5834
5478
|
documentation() {
|
|
5835
5479
|
return {
|
|
5836
5480
|
description: "Some elements may only be used a fixed amount of times in given context.",
|
|
5837
|
-
url:
|
|
5481
|
+
url: "https://html-validate.org/rules/element-permitted-occurrences.html",
|
|
5838
5482
|
};
|
|
5839
5483
|
}
|
|
5840
5484
|
setup() {
|
|
@@ -5868,7 +5512,7 @@ class ElementPermittedOrder extends Rule {
|
|
|
5868
5512
|
documentation() {
|
|
5869
5513
|
return {
|
|
5870
5514
|
description: "Some elements has a specific order the children must use.",
|
|
5871
|
-
url:
|
|
5515
|
+
url: "https://html-validate.org/rules/element-permitted-order.html",
|
|
5872
5516
|
};
|
|
5873
5517
|
}
|
|
5874
5518
|
setup() {
|
|
@@ -5936,7 +5580,7 @@ class ElementPermittedParent extends Rule {
|
|
|
5936
5580
|
documentation(context) {
|
|
5937
5581
|
return {
|
|
5938
5582
|
description: getRuleDescription$1(context).join("\n"),
|
|
5939
|
-
url:
|
|
5583
|
+
url: "https://html-validate.org/rules/element-permitted-parent.html",
|
|
5940
5584
|
};
|
|
5941
5585
|
}
|
|
5942
5586
|
setup() {
|
|
@@ -5999,7 +5643,7 @@ class ElementRequiredAncestor extends Rule {
|
|
|
5999
5643
|
documentation(context) {
|
|
6000
5644
|
return {
|
|
6001
5645
|
description: getRuleDescription(context).join("\n"),
|
|
6002
|
-
url:
|
|
5646
|
+
url: "https://html-validate.org/rules/element-required-ancestor.html",
|
|
6003
5647
|
};
|
|
6004
5648
|
}
|
|
6005
5649
|
setup() {
|
|
@@ -6042,7 +5686,7 @@ class ElementRequiredAttributes extends Rule {
|
|
|
6042
5686
|
documentation(context) {
|
|
6043
5687
|
const docs = {
|
|
6044
5688
|
description: "Element is missing a required attribute",
|
|
6045
|
-
url:
|
|
5689
|
+
url: "https://html-validate.org/rules/element-required-attributes.html",
|
|
6046
5690
|
};
|
|
6047
5691
|
if (context) {
|
|
6048
5692
|
docs.description = `The <${context.element}> element is required to have a "${context.attribute}" attribute.`;
|
|
@@ -6079,13 +5723,13 @@ class ElementRequiredContent extends Rule {
|
|
|
6079
5723
|
const { element, missing } = context;
|
|
6080
5724
|
return {
|
|
6081
5725
|
description: `The \`${element}\` element requires a \`${missing}\` to be present as content.`,
|
|
6082
|
-
url:
|
|
5726
|
+
url: "https://html-validate.org/rules/element-required-content.html",
|
|
6083
5727
|
};
|
|
6084
5728
|
}
|
|
6085
5729
|
else {
|
|
6086
5730
|
return {
|
|
6087
5731
|
description: "Some elements has requirements on content that must be present.",
|
|
6088
|
-
url:
|
|
5732
|
+
url: "https://html-validate.org/rules/element-required-content.html",
|
|
6089
5733
|
};
|
|
6090
5734
|
}
|
|
6091
5735
|
}
|
|
@@ -6116,7 +5760,7 @@ class ElementRequiredContent extends Rule {
|
|
|
6116
5760
|
}
|
|
6117
5761
|
|
|
6118
5762
|
const selector = ["h1", "h2", "h3", "h4", "h5", "h6"].join(",");
|
|
6119
|
-
function hasImgAltText
|
|
5763
|
+
function hasImgAltText(node) {
|
|
6120
5764
|
if (node.is("img")) {
|
|
6121
5765
|
return hasAltText(node);
|
|
6122
5766
|
}
|
|
@@ -6131,7 +5775,7 @@ class EmptyHeading extends Rule {
|
|
|
6131
5775
|
documentation() {
|
|
6132
5776
|
return {
|
|
6133
5777
|
description: `Assistive technology such as screen readers require textual content in headings. Whitespace only is considered empty.`,
|
|
6134
|
-
url:
|
|
5778
|
+
url: "https://html-validate.org/rules/empty-heading.html",
|
|
6135
5779
|
};
|
|
6136
5780
|
}
|
|
6137
5781
|
setup() {
|
|
@@ -6145,7 +5789,7 @@ class EmptyHeading extends Rule {
|
|
|
6145
5789
|
validateHeading(heading) {
|
|
6146
5790
|
const images = heading.querySelectorAll("img, svg");
|
|
6147
5791
|
for (const child of images) {
|
|
6148
|
-
if (hasImgAltText
|
|
5792
|
+
if (hasImgAltText(child)) {
|
|
6149
5793
|
return;
|
|
6150
5794
|
}
|
|
6151
5795
|
}
|
|
@@ -6173,7 +5817,7 @@ class EmptyTitle extends Rule {
|
|
|
6173
5817
|
"",
|
|
6174
5818
|
"Whitespace is ignored.",
|
|
6175
5819
|
].join("\n"),
|
|
6176
|
-
url:
|
|
5820
|
+
url: "https://html-validate.org/rules/empty-title.html",
|
|
6177
5821
|
};
|
|
6178
5822
|
}
|
|
6179
5823
|
setup() {
|
|
@@ -6267,7 +5911,7 @@ class HeadingLevel extends Rule {
|
|
|
6267
5911
|
}
|
|
6268
5912
|
return {
|
|
6269
5913
|
description: text.join("\n"),
|
|
6270
|
-
url:
|
|
5914
|
+
url: "https://html-validate.org/rules/heading-level.html",
|
|
6271
5915
|
};
|
|
6272
5916
|
}
|
|
6273
5917
|
setup() {
|
|
@@ -6406,7 +6050,7 @@ class IdPattern extends Rule {
|
|
|
6406
6050
|
const pattern = describePattern(this.options.pattern);
|
|
6407
6051
|
return {
|
|
6408
6052
|
description: `For consistency all IDs are required to match the pattern ${pattern}.`,
|
|
6409
|
-
url:
|
|
6053
|
+
url: "https://html-validate.org/rules/id-pattern.html",
|
|
6410
6054
|
};
|
|
6411
6055
|
}
|
|
6412
6056
|
setup() {
|
|
@@ -6538,13 +6182,13 @@ class InputAttributes extends Rule {
|
|
|
6538
6182
|
const list = (_b = (_a = restricted.get(attribute)) === null || _a === void 0 ? void 0 : _a.map((it) => `- \`${it}\``)) !== null && _b !== void 0 ? _b : [];
|
|
6539
6183
|
return {
|
|
6540
6184
|
description: [summary, details, ...list].join("\n"),
|
|
6541
|
-
url:
|
|
6185
|
+
url: "https://html-validate.org/rules/input-attributes.html",
|
|
6542
6186
|
};
|
|
6543
6187
|
}
|
|
6544
6188
|
else {
|
|
6545
6189
|
return {
|
|
6546
6190
|
description: `This attribute cannot be used with this input type.`,
|
|
6547
|
-
url:
|
|
6191
|
+
url: "https://html-validate.org/rules/input-attributes.html",
|
|
6548
6192
|
};
|
|
6549
6193
|
}
|
|
6550
6194
|
}
|
|
@@ -6575,126 +6219,6 @@ class InputAttributes extends Rule {
|
|
|
6575
6219
|
}
|
|
6576
6220
|
}
|
|
6577
6221
|
|
|
6578
|
-
const HAS_ACCESSIBLE_TEXT_CACHE = Symbol(hasAccessibleName.name);
|
|
6579
|
-
function isHidden(node, context) {
|
|
6580
|
-
const { reference } = context;
|
|
6581
|
-
if (reference && reference.isSameNode(node)) {
|
|
6582
|
-
return false;
|
|
6583
|
-
}
|
|
6584
|
-
else {
|
|
6585
|
-
return isHTMLHidden(node) || !inAccessibilityTree(node);
|
|
6586
|
-
}
|
|
6587
|
-
}
|
|
6588
|
-
function hasImgAltText(node, context) {
|
|
6589
|
-
if (node.is("img")) {
|
|
6590
|
-
return hasAltText(node);
|
|
6591
|
-
}
|
|
6592
|
-
else if (node.is("svg")) {
|
|
6593
|
-
return node.textContent.trim() !== "";
|
|
6594
|
-
}
|
|
6595
|
-
else {
|
|
6596
|
-
for (const img of node.querySelectorAll("img, svg")) {
|
|
6597
|
-
const hasName = hasAccessibleNameImpl(img, context);
|
|
6598
|
-
if (hasName) {
|
|
6599
|
-
return true;
|
|
6600
|
-
}
|
|
6601
|
-
}
|
|
6602
|
-
return false;
|
|
6603
|
-
}
|
|
6604
|
-
}
|
|
6605
|
-
function hasLabel(node) {
|
|
6606
|
-
var _a;
|
|
6607
|
-
const value = (_a = node.getAttributeValue("aria-label")) !== null && _a !== void 0 ? _a : "";
|
|
6608
|
-
return Boolean(value.trim());
|
|
6609
|
-
}
|
|
6610
|
-
function isLabelledby(node, context) {
|
|
6611
|
-
const { document, reference } = context;
|
|
6612
|
-
/* if we already have resolved one level of reference we don't resolve another
|
|
6613
|
-
* level (as per accname step 2B) */
|
|
6614
|
-
if (reference) {
|
|
6615
|
-
return false;
|
|
6616
|
-
}
|
|
6617
|
-
const ariaLabelledby = node.ariaLabelledby;
|
|
6618
|
-
/* consider dynamic aria-labelledby as having a name as we cannot resolve it
|
|
6619
|
-
* so no way to prove correctness */
|
|
6620
|
-
if (ariaLabelledby instanceof DynamicValue) {
|
|
6621
|
-
return true;
|
|
6622
|
-
}
|
|
6623
|
-
/* ignore elements without aria-labelledby */
|
|
6624
|
-
if (ariaLabelledby === null) {
|
|
6625
|
-
return false;
|
|
6626
|
-
}
|
|
6627
|
-
return ariaLabelledby.some((id) => {
|
|
6628
|
-
const selector = generateIdSelector(id);
|
|
6629
|
-
return document.querySelectorAll(selector).some((child) => {
|
|
6630
|
-
return hasAccessibleNameImpl(child, {
|
|
6631
|
-
document,
|
|
6632
|
-
reference: child,
|
|
6633
|
-
});
|
|
6634
|
-
});
|
|
6635
|
-
});
|
|
6636
|
-
}
|
|
6637
|
-
/**
|
|
6638
|
-
* This algorithm is based on ["Accessible Name and Description Computation
|
|
6639
|
-
* 1.2"][accname] with some exceptions:
|
|
6640
|
-
*
|
|
6641
|
-
* It doesn't compute the actual name but only the presence of one, e.g. if a
|
|
6642
|
-
* non-empty flat string is present the algorithm terminates with a positive
|
|
6643
|
-
* result.
|
|
6644
|
-
*
|
|
6645
|
-
* It takes some optimization shortcuts such as starting with step F as it
|
|
6646
|
-
* would be more common usage and as there is no actual name being computed
|
|
6647
|
-
* the order wont matter.
|
|
6648
|
-
*
|
|
6649
|
-
* [accname]: https://w3c.github.io/accname
|
|
6650
|
-
*/
|
|
6651
|
-
function hasAccessibleNameImpl(current, context) {
|
|
6652
|
-
const { reference } = context;
|
|
6653
|
-
/* if this element is hidden (see function for exceptions) it does not have an accessible name */
|
|
6654
|
-
if (isHidden(current, context)) {
|
|
6655
|
-
return false;
|
|
6656
|
-
}
|
|
6657
|
-
/* special case: when this element is directly referenced by aria-labelledby
|
|
6658
|
-
* we ignore `hidden` */
|
|
6659
|
-
const ignoreHiddenRoot = Boolean(reference && reference.isSameNode(current));
|
|
6660
|
-
const text = classifyNodeText(current, { accessible: true, ignoreHiddenRoot });
|
|
6661
|
-
if (text !== TextClassification.EMPTY_TEXT) {
|
|
6662
|
-
return true;
|
|
6663
|
-
}
|
|
6664
|
-
if (hasImgAltText(current, context)) {
|
|
6665
|
-
return true;
|
|
6666
|
-
}
|
|
6667
|
-
if (hasLabel(current)) {
|
|
6668
|
-
return true;
|
|
6669
|
-
}
|
|
6670
|
-
if (isLabelledby(current, context)) {
|
|
6671
|
-
return true;
|
|
6672
|
-
}
|
|
6673
|
-
return false;
|
|
6674
|
-
}
|
|
6675
|
-
/**
|
|
6676
|
-
* Returns `true` if the element has an accessible name.
|
|
6677
|
-
*
|
|
6678
|
-
* It does not yet consider if the elements role prohibits naming, e.g. a `<p>`
|
|
6679
|
-
* element will still show up as having an accessible name.
|
|
6680
|
-
*
|
|
6681
|
-
* @public
|
|
6682
|
-
* @param document - Document element.
|
|
6683
|
-
* @param current - The element to get accessible name for
|
|
6684
|
-
* @returns `true` if the element has an accessible name.
|
|
6685
|
-
*/
|
|
6686
|
-
function hasAccessibleName(document, current) {
|
|
6687
|
-
/* istanbul ignore next: we're not testing cache */
|
|
6688
|
-
if (current.cacheExists(HAS_ACCESSIBLE_TEXT_CACHE)) {
|
|
6689
|
-
return Boolean(current.cacheGet(HAS_ACCESSIBLE_TEXT_CACHE));
|
|
6690
|
-
}
|
|
6691
|
-
const result = hasAccessibleNameImpl(current, {
|
|
6692
|
-
document,
|
|
6693
|
-
reference: null,
|
|
6694
|
-
});
|
|
6695
|
-
return current.cacheSet(HAS_ACCESSIBLE_TEXT_CACHE, result);
|
|
6696
|
-
}
|
|
6697
|
-
|
|
6698
6222
|
function isIgnored(node) {
|
|
6699
6223
|
var _a;
|
|
6700
6224
|
if (node.is("input")) {
|
|
@@ -6717,7 +6241,7 @@ class InputMissingLabel extends Rule {
|
|
|
6717
6241
|
" - Use a nested `<label>` as parent element.",
|
|
6718
6242
|
" - Use `aria-label` or `aria-labelledby` attributes.",
|
|
6719
6243
|
].join("\n"),
|
|
6720
|
-
url:
|
|
6244
|
+
url: "https://html-validate.org/rules/input-missing-label.html",
|
|
6721
6245
|
};
|
|
6722
6246
|
}
|
|
6723
6247
|
setup() {
|
|
@@ -6812,7 +6336,7 @@ class LongTitle extends Rule {
|
|
|
6812
6336
|
documentation() {
|
|
6813
6337
|
return {
|
|
6814
6338
|
description: `Search engines truncates titles with long text, possibly down-ranking the page in the process.`,
|
|
6815
|
-
url:
|
|
6339
|
+
url: "https://html-validate.org/rules/long-title.html",
|
|
6816
6340
|
};
|
|
6817
6341
|
}
|
|
6818
6342
|
setup() {
|
|
@@ -6832,7 +6356,7 @@ class MetaRefresh extends Rule {
|
|
|
6832
6356
|
documentation() {
|
|
6833
6357
|
return {
|
|
6834
6358
|
description: `Meta refresh directive must use the \`0;url=...\` format. Non-zero values for time interval is disallowed as people with assistive technology might be unable to read and understand the page content before automatically reloading. For the same reason skipping the url is disallowed as it would put the browser in an infinite loop reloading the same page over and over again.`,
|
|
6835
|
-
url:
|
|
6359
|
+
url: "https://html-validate.org/rules/meta-refresh.html",
|
|
6836
6360
|
};
|
|
6837
6361
|
}
|
|
6838
6362
|
setup() {
|
|
@@ -6886,7 +6410,7 @@ class MissingDoctype extends Rule {
|
|
|
6886
6410
|
documentation() {
|
|
6887
6411
|
return {
|
|
6888
6412
|
description: "Requires that the document contains a doctype.",
|
|
6889
|
-
url:
|
|
6413
|
+
url: "https://html-validate.org/rules/missing-doctype.html",
|
|
6890
6414
|
};
|
|
6891
6415
|
}
|
|
6892
6416
|
setup() {
|
|
@@ -6907,7 +6431,7 @@ class MultipleLabeledControls extends Rule {
|
|
|
6907
6431
|
documentation() {
|
|
6908
6432
|
return {
|
|
6909
6433
|
description: `A \`<label>\` element can only be associated with one control at a time.`,
|
|
6910
|
-
url:
|
|
6434
|
+
url: "https://html-validate.org/rules/multiple-labeled-controls.html",
|
|
6911
6435
|
};
|
|
6912
6436
|
}
|
|
6913
6437
|
setup() {
|
|
@@ -6962,7 +6486,7 @@ class NoAutoplay extends Rule {
|
|
|
6962
6486
|
"Autoplaying content can be disruptive for users and has accessibilty concerns.",
|
|
6963
6487
|
"Prefer to let the user control playback.",
|
|
6964
6488
|
].join("\n"),
|
|
6965
|
-
url:
|
|
6489
|
+
url: "https://html-validate.org/rules/no-autoplay.html",
|
|
6966
6490
|
};
|
|
6967
6491
|
}
|
|
6968
6492
|
static schema() {
|
|
@@ -7022,7 +6546,7 @@ class NoConditionalComment extends Rule {
|
|
|
7022
6546
|
documentation() {
|
|
7023
6547
|
return {
|
|
7024
6548
|
description: "Microsoft Internet Explorer previously supported using special HTML comments (conditional comments) for targeting specific versions of IE but since IE 10 it is deprecated and not supported in standards mode.",
|
|
7025
|
-
url:
|
|
6549
|
+
url: "https://html-validate.org/rules/no-conditional-comment.html",
|
|
7026
6550
|
};
|
|
7027
6551
|
}
|
|
7028
6552
|
setup() {
|
|
@@ -7036,7 +6560,7 @@ class NoDeprecatedAttr extends Rule {
|
|
|
7036
6560
|
documentation() {
|
|
7037
6561
|
return {
|
|
7038
6562
|
description: "HTML5 deprecated many old attributes.",
|
|
7039
|
-
url:
|
|
6563
|
+
url: "https://html-validate.org/rules/no-deprecated-attr.html",
|
|
7040
6564
|
};
|
|
7041
6565
|
}
|
|
7042
6566
|
setup() {
|
|
@@ -7064,7 +6588,7 @@ class NoDupAttr extends Rule {
|
|
|
7064
6588
|
documentation() {
|
|
7065
6589
|
return {
|
|
7066
6590
|
description: "HTML disallows two or more attributes with the same (case-insensitive) name.",
|
|
7067
|
-
url:
|
|
6591
|
+
url: "https://html-validate.org/rules/no-dup-attr.html",
|
|
7068
6592
|
};
|
|
7069
6593
|
}
|
|
7070
6594
|
setup() {
|
|
@@ -7091,7 +6615,7 @@ class NoDupClass extends Rule {
|
|
|
7091
6615
|
documentation() {
|
|
7092
6616
|
return {
|
|
7093
6617
|
description: "Prevents unnecessary duplication of class names.",
|
|
7094
|
-
url:
|
|
6618
|
+
url: "https://html-validate.org/rules/no-dup-class.html",
|
|
7095
6619
|
};
|
|
7096
6620
|
}
|
|
7097
6621
|
setup() {
|
|
@@ -7116,7 +6640,7 @@ class NoDupID extends Rule {
|
|
|
7116
6640
|
documentation() {
|
|
7117
6641
|
return {
|
|
7118
6642
|
description: "The ID of an element must be unique.",
|
|
7119
|
-
url:
|
|
6643
|
+
url: "https://html-validate.org/rules/no-dup-id.html",
|
|
7120
6644
|
};
|
|
7121
6645
|
}
|
|
7122
6646
|
setup() {
|
|
@@ -7163,7 +6687,7 @@ class NoImplicitClose extends Rule {
|
|
|
7163
6687
|
description: `Some elements in HTML has optional end tags. When an optional tag is omitted a browser must handle it as if the end tag was present.
|
|
7164
6688
|
|
|
7165
6689
|
Omitted end tags can be ambigious for humans to read and many editors have trouble formatting the markup.`,
|
|
7166
|
-
url:
|
|
6690
|
+
url: "https://html-validate.org/rules/no-implicit-close.html",
|
|
7167
6691
|
};
|
|
7168
6692
|
}
|
|
7169
6693
|
setup() {
|
|
@@ -7249,7 +6773,7 @@ class NoInlineStyle extends Rule {
|
|
|
7249
6773
|
}
|
|
7250
6774
|
return {
|
|
7251
6775
|
description: text.join("\n"),
|
|
7252
|
-
url:
|
|
6776
|
+
url: "https://html-validate.org/rules/no-inline-style.html",
|
|
7253
6777
|
};
|
|
7254
6778
|
}
|
|
7255
6779
|
setup() {
|
|
@@ -7310,13 +6834,13 @@ class NoMissingReferences extends Rule {
|
|
|
7310
6834
|
if (context) {
|
|
7311
6835
|
return {
|
|
7312
6836
|
description: `The element ID "${context.value}" referenced by the ${context.key} attribute must point to an existing element.`,
|
|
7313
|
-
url:
|
|
6837
|
+
url: "https://html-validate.org/rules/no-missing-references.html",
|
|
7314
6838
|
};
|
|
7315
6839
|
}
|
|
7316
6840
|
else {
|
|
7317
6841
|
return {
|
|
7318
6842
|
description: `The element ID referenced by the attribute must point to an existing element.`,
|
|
7319
|
-
url:
|
|
6843
|
+
url: "https://html-validate.org/rules/no-missing-references.html",
|
|
7320
6844
|
};
|
|
7321
6845
|
}
|
|
7322
6846
|
}
|
|
@@ -7386,7 +6910,7 @@ class NoMultipleMain extends Rule {
|
|
|
7386
6910
|
"",
|
|
7387
6911
|
"Multiple `<main>` can be present in the DOM as long the others are hidden using the HTML5 `hidden` attribute.",
|
|
7388
6912
|
].join("\n"),
|
|
7389
|
-
url:
|
|
6913
|
+
url: "https://html-validate.org/rules/no-multiple-main.html",
|
|
7390
6914
|
};
|
|
7391
6915
|
}
|
|
7392
6916
|
setup() {
|
|
@@ -7432,7 +6956,7 @@ class NoRawCharacters extends Rule {
|
|
|
7432
6956
|
documentation() {
|
|
7433
6957
|
return {
|
|
7434
6958
|
description: `Some characters such as \`<\`, \`>\` and \`&\` hold special meaning in HTML and must be escaped using a character reference (html entity).`,
|
|
7435
|
-
url:
|
|
6959
|
+
url: "https://html-validate.org/rules/no-raw-characters.html",
|
|
7436
6960
|
};
|
|
7437
6961
|
}
|
|
7438
6962
|
setup() {
|
|
@@ -7497,7 +7021,7 @@ class NoRedundantFor extends Rule {
|
|
|
7497
7021
|
documentation() {
|
|
7498
7022
|
return {
|
|
7499
7023
|
description: `When the \`<label>\` element wraps the labelable control the \`for\` attribute is redundant and better left out.`,
|
|
7500
|
-
url:
|
|
7024
|
+
url: "https://html-validate.org/rules/no-redundant-for.html",
|
|
7501
7025
|
};
|
|
7502
7026
|
}
|
|
7503
7027
|
setup() {
|
|
@@ -7559,7 +7083,7 @@ class NoRedundantRole extends Rule {
|
|
|
7559
7083
|
documentation(context) {
|
|
7560
7084
|
const doc = {
|
|
7561
7085
|
description: `Using this role is redundant as it is already implied by the element.`,
|
|
7562
|
-
url:
|
|
7086
|
+
url: "https://html-validate.org/rules/no-redundant-role.html",
|
|
7563
7087
|
};
|
|
7564
7088
|
if (context) {
|
|
7565
7089
|
doc.description = `Using the "${context.role}" role is redundant as it is already implied by the <${context.tagname}> element.`;
|
|
@@ -7619,7 +7143,7 @@ class NoSelfClosing extends Rule {
|
|
|
7619
7143
|
tagName = tagName || "element";
|
|
7620
7144
|
return {
|
|
7621
7145
|
description: `Self-closing elements are disallowed. Use regular end tag <${tagName}></${tagName}> instead of self-closing <${tagName}/>.`,
|
|
7622
|
-
url:
|
|
7146
|
+
url: "https://html-validate.org/rules/no-self-closing.html",
|
|
7623
7147
|
};
|
|
7624
7148
|
}
|
|
7625
7149
|
setup() {
|
|
@@ -7663,7 +7187,7 @@ class NoStyleTag extends Rule {
|
|
|
7663
7187
|
documentation() {
|
|
7664
7188
|
return {
|
|
7665
7189
|
description: "Prefer to use external stylesheets with the `<link>` tag instead of inlining the styling.",
|
|
7666
|
-
url:
|
|
7190
|
+
url: "https://html-validate.org/rules/no-style-tag.html",
|
|
7667
7191
|
};
|
|
7668
7192
|
}
|
|
7669
7193
|
setup() {
|
|
@@ -7680,7 +7204,7 @@ class NoTrailingWhitespace extends Rule {
|
|
|
7680
7204
|
documentation() {
|
|
7681
7205
|
return {
|
|
7682
7206
|
description: "Lines with trailing whitespace cause unnessecary diff when using version control and usually serve no special purpose in HTML.",
|
|
7683
|
-
url:
|
|
7207
|
+
url: "https://html-validate.org/rules/no-trailing-whitespace.html",
|
|
7684
7208
|
};
|
|
7685
7209
|
}
|
|
7686
7210
|
setup() {
|
|
@@ -7697,7 +7221,7 @@ class NoUnknownElements extends Rule {
|
|
|
7697
7221
|
const element = context ? ` <${context}>` : "";
|
|
7698
7222
|
return {
|
|
7699
7223
|
description: `An unknown element${element} was used. If this is a Custom Element you need to supply element metadata for it.`,
|
|
7700
|
-
url:
|
|
7224
|
+
url: "https://html-validate.org/rules/no-unknown-elements.html",
|
|
7701
7225
|
};
|
|
7702
7226
|
}
|
|
7703
7227
|
setup() {
|
|
@@ -7714,7 +7238,7 @@ class NoUtf8Bom extends Rule {
|
|
|
7714
7238
|
documentation() {
|
|
7715
7239
|
return {
|
|
7716
7240
|
description: `This file is saved with the UTF-8 byte order mark (BOM) present. It is neither required or recommended to use.\n\nInstead the document should be served with the \`Content-Type: application/javascript; charset=utf-8\` header.`,
|
|
7717
|
-
url:
|
|
7241
|
+
url: "https://html-validate.org/rules/no-utf8-bom.html",
|
|
7718
7242
|
};
|
|
7719
7243
|
}
|
|
7720
7244
|
setup() {
|
|
@@ -7777,7 +7301,7 @@ class PreferButton extends Rule {
|
|
|
7777
7301
|
documentation(context) {
|
|
7778
7302
|
const doc = {
|
|
7779
7303
|
description: `Prefer to use the generic \`<button>\` element instead of \`<input>\`.`,
|
|
7780
|
-
url:
|
|
7304
|
+
url: "https://html-validate.org/rules/prefer-button.html",
|
|
7781
7305
|
};
|
|
7782
7306
|
if (context) {
|
|
7783
7307
|
const src = `<input type="${context.type}">`;
|
|
@@ -7885,7 +7409,7 @@ class PreferNativeElement extends Rule {
|
|
|
7885
7409
|
documentation(context) {
|
|
7886
7410
|
const doc = {
|
|
7887
7411
|
description: `Instead of using WAI-ARIA roles prefer to use the native HTML elements.`,
|
|
7888
|
-
url:
|
|
7412
|
+
url: "https://html-validate.org/rules/prefer-native-element.html",
|
|
7889
7413
|
};
|
|
7890
7414
|
if (context) {
|
|
7891
7415
|
doc.description = `Instead of using the WAI-ARIA role "${context.role}" prefer to use the native <${context.replacement}> element.`;
|
|
@@ -7948,7 +7472,7 @@ class PreferTbody extends Rule {
|
|
|
7948
7472
|
documentation() {
|
|
7949
7473
|
return {
|
|
7950
7474
|
description: `While \`<tbody>\` is optional is relays semantic information about its contents. Where applicable it should also be combined with \`<thead>\` and \`<tfoot>\`.`,
|
|
7951
|
-
url:
|
|
7475
|
+
url: "https://html-validate.org/rules/prefer-tbody.html",
|
|
7952
7476
|
};
|
|
7953
7477
|
}
|
|
7954
7478
|
setup() {
|
|
@@ -7996,7 +7520,7 @@ class RequireCSPNonce extends Rule {
|
|
|
7996
7520
|
"The nonce should be unique per each request and set to a cryptography secure random token.",
|
|
7997
7521
|
"It is used to prevent cross site scripting (XSS) by preventing malicious actors from injecting scripts onto the page.",
|
|
7998
7522
|
].join("\n"),
|
|
7999
|
-
url:
|
|
7523
|
+
url: "https://html-validate.org/rules/require-csp-nonce.html",
|
|
8000
7524
|
};
|
|
8001
7525
|
}
|
|
8002
7526
|
setup() {
|
|
@@ -8075,7 +7599,7 @@ class RequireSri extends Rule {
|
|
|
8075
7599
|
documentation() {
|
|
8076
7600
|
return {
|
|
8077
7601
|
description: `Subresource Integrity (SRI) \`integrity\` attribute is required to prevent manipulation from Content Delivery Networks or other third-party hosting.`,
|
|
8078
|
-
url:
|
|
7602
|
+
url: "https://html-validate.org/rules/require-sri.html",
|
|
8079
7603
|
};
|
|
8080
7604
|
}
|
|
8081
7605
|
setup() {
|
|
@@ -8121,7 +7645,7 @@ class ScriptElement extends Rule {
|
|
|
8121
7645
|
documentation() {
|
|
8122
7646
|
return {
|
|
8123
7647
|
description: "The end tag for `<script>` is a hard requirement and must never be omitted even when using the `src` attribute.",
|
|
8124
|
-
url:
|
|
7648
|
+
url: "https://html-validate.org/rules/script-element.html",
|
|
8125
7649
|
};
|
|
8126
7650
|
}
|
|
8127
7651
|
setup() {
|
|
@@ -8148,7 +7672,7 @@ class ScriptType extends Rule {
|
|
|
8148
7672
|
documentation() {
|
|
8149
7673
|
return {
|
|
8150
7674
|
description: "While valid the HTML5 standard encourages authors to omit the type element for JavaScript resources.",
|
|
8151
|
-
url:
|
|
7675
|
+
url: "https://html-validate.org/rules/script-type.html",
|
|
8152
7676
|
};
|
|
8153
7677
|
}
|
|
8154
7678
|
setup() {
|
|
@@ -8179,7 +7703,7 @@ class SvgFocusable extends Rule {
|
|
|
8179
7703
|
documentation() {
|
|
8180
7704
|
return {
|
|
8181
7705
|
description: `Inline SVG elements in IE are focusable by default which may cause issues with tab-ordering. The \`focusable\` attribute should explicitly be set to avoid unintended behaviour.`,
|
|
8182
|
-
url:
|
|
7706
|
+
url: "https://html-validate.org/rules/svg-focusable.html",
|
|
8183
7707
|
};
|
|
8184
7708
|
}
|
|
8185
7709
|
setup() {
|
|
@@ -8292,7 +7816,7 @@ class TelNonBreaking extends Rule {
|
|
|
8292
7816
|
"",
|
|
8293
7817
|
...replacements,
|
|
8294
7818
|
].join("\n"),
|
|
8295
|
-
url:
|
|
7819
|
+
url: "https://html-validate.org/rules/tel-non-breaking.html",
|
|
8296
7820
|
};
|
|
8297
7821
|
}
|
|
8298
7822
|
setup() {
|
|
@@ -8439,7 +7963,7 @@ class TextContent extends Rule {
|
|
|
8439
7963
|
documentation(context) {
|
|
8440
7964
|
const doc = {
|
|
8441
7965
|
description: `The textual content for this element is not valid.`,
|
|
8442
|
-
url:
|
|
7966
|
+
url: "https://html-validate.org/rules/text-content.html",
|
|
8443
7967
|
};
|
|
8444
7968
|
if (context === null || context === void 0 ? void 0 : context.textContent) {
|
|
8445
7969
|
switch (context.textContent) {
|
|
@@ -8528,1737 +8052,12 @@ class TextContent extends Rule {
|
|
|
8528
8052
|
}
|
|
8529
8053
|
}
|
|
8530
8054
|
|
|
8531
|
-
var entities$1 = [
|
|
8532
|
-
"á",
|
|
8533
|
-
"ă",
|
|
8534
|
-
"∾",
|
|
8535
|
-
"∿",
|
|
8536
|
-
"&ace;",
|
|
8537
|
-
"â",
|
|
8538
|
-
"´",
|
|
8539
|
-
"а",
|
|
8540
|
-
"æ",
|
|
8541
|
-
"⁡",
|
|
8542
|
-
"𝔞",
|
|
8543
|
-
"à",
|
|
8544
|
-
"ℵ",
|
|
8545
|
-
"ℵ",
|
|
8546
|
-
"α",
|
|
8547
|
-
"ā",
|
|
8548
|
-
"⨿",
|
|
8549
|
-
"&",
|
|
8550
|
-
"∧",
|
|
8551
|
-
"⩕",
|
|
8552
|
-
"⩜",
|
|
8553
|
-
"⩘",
|
|
8554
|
-
"⩚",
|
|
8555
|
-
"∠",
|
|
8556
|
-
"⦤",
|
|
8557
|
-
"∠",
|
|
8558
|
-
"∡",
|
|
8559
|
-
"⦨",
|
|
8560
|
-
"⦩",
|
|
8561
|
-
"⦪",
|
|
8562
|
-
"⦫",
|
|
8563
|
-
"⦬",
|
|
8564
|
-
"⦭",
|
|
8565
|
-
"⦮",
|
|
8566
|
-
"⦯",
|
|
8567
|
-
"∟",
|
|
8568
|
-
"⊾",
|
|
8569
|
-
"⦝",
|
|
8570
|
-
"∢",
|
|
8571
|
-
"Å",
|
|
8572
|
-
"⍼",
|
|
8573
|
-
"ą",
|
|
8574
|
-
"𝕒",
|
|
8575
|
-
"≈",
|
|
8576
|
-
"⩯",
|
|
8577
|
-
"≊",
|
|
8578
|
-
"≋",
|
|
8579
|
-
"'",
|
|
8580
|
-
"&applyfunction;",
|
|
8581
|
-
"≈",
|
|
8582
|
-
"≊",
|
|
8583
|
-
"å",
|
|
8584
|
-
"𝒶",
|
|
8585
|
-
"&assign;",
|
|
8586
|
-
"*",
|
|
8587
|
-
"≈",
|
|
8588
|
-
"≍",
|
|
8589
|
-
"ã",
|
|
8590
|
-
"ä",
|
|
8591
|
-
"∳",
|
|
8592
|
-
"⨑",
|
|
8593
|
-
"≌",
|
|
8594
|
-
"϶",
|
|
8595
|
-
"‵",
|
|
8596
|
-
"∽",
|
|
8597
|
-
"⋍",
|
|
8598
|
-
"&backslash;",
|
|
8599
|
-
"&barv;",
|
|
8600
|
-
"⊽",
|
|
8601
|
-
"⌅",
|
|
8602
|
-
"⌅",
|
|
8603
|
-
"⎵",
|
|
8604
|
-
"⎶",
|
|
8605
|
-
"≌",
|
|
8606
|
-
"б",
|
|
8607
|
-
"„",
|
|
8608
|
-
"∵",
|
|
8609
|
-
"∵",
|
|
8610
|
-
"⦰",
|
|
8611
|
-
"϶",
|
|
8612
|
-
"ℬ",
|
|
8613
|
-
"&bernoullis;",
|
|
8614
|
-
"β",
|
|
8615
|
-
"ℶ",
|
|
8616
|
-
"≬",
|
|
8617
|
-
"𝔟",
|
|
8618
|
-
"⋂",
|
|
8619
|
-
"◯",
|
|
8620
|
-
"⋃",
|
|
8621
|
-
"⨀",
|
|
8622
|
-
"⨁",
|
|
8623
|
-
"⨂",
|
|
8624
|
-
"⨆",
|
|
8625
|
-
"★",
|
|
8626
|
-
"▽",
|
|
8627
|
-
"△",
|
|
8628
|
-
"⨄",
|
|
8629
|
-
"⋁",
|
|
8630
|
-
"⋀",
|
|
8631
|
-
"⤍",
|
|
8632
|
-
"⧫",
|
|
8633
|
-
"▪",
|
|
8634
|
-
"▴",
|
|
8635
|
-
"▾",
|
|
8636
|
-
"◂",
|
|
8637
|
-
"▸",
|
|
8638
|
-
"␣",
|
|
8639
|
-
"▒",
|
|
8640
|
-
"░",
|
|
8641
|
-
"▓",
|
|
8642
|
-
"█",
|
|
8643
|
-
"=⃥",
|
|
8644
|
-
"≡⃥",
|
|
8645
|
-
"⌐",
|
|
8646
|
-
"𝕓",
|
|
8647
|
-
"⊥",
|
|
8648
|
-
"⊥",
|
|
8649
|
-
"⋈",
|
|
8650
|
-
"⧉",
|
|
8651
|
-
"┐",
|
|
8652
|
-
"┌",
|
|
8653
|
-
"─",
|
|
8654
|
-
"┬",
|
|
8655
|
-
"┴",
|
|
8656
|
-
"⊟",
|
|
8657
|
-
"⊞",
|
|
8658
|
-
"⊠",
|
|
8659
|
-
"┘",
|
|
8660
|
-
"└",
|
|
8661
|
-
"│",
|
|
8662
|
-
"┼",
|
|
8663
|
-
"┤",
|
|
8664
|
-
"├",
|
|
8665
|
-
"‵",
|
|
8666
|
-
"˘",
|
|
8667
|
-
"¦",
|
|
8668
|
-
"𝒷",
|
|
8669
|
-
"⁏",
|
|
8670
|
-
"∽",
|
|
8671
|
-
"⋍",
|
|
8672
|
-
"\",
|
|
8673
|
-
"⧅",
|
|
8674
|
-
"⟈",
|
|
8675
|
-
"•",
|
|
8676
|
-
"•",
|
|
8677
|
-
"≎",
|
|
8678
|
-
"≏",
|
|
8679
|
-
"≏",
|
|
8680
|
-
"ć",
|
|
8681
|
-
"∩",
|
|
8682
|
-
"⩄",
|
|
8683
|
-
"⩉",
|
|
8684
|
-
"⩋",
|
|
8685
|
-
"⩇",
|
|
8686
|
-
"⩀",
|
|
8687
|
-
"&capitaldifferentiald;",
|
|
8688
|
-
"∩︀",
|
|
8689
|
-
"⁁",
|
|
8690
|
-
"ˇ",
|
|
8691
|
-
"&cayleys;",
|
|
8692
|
-
"⩍",
|
|
8693
|
-
"č",
|
|
8694
|
-
"ç",
|
|
8695
|
-
"ĉ",
|
|
8696
|
-
"&cconint;",
|
|
8697
|
-
"⩌",
|
|
8698
|
-
"⩐",
|
|
8699
|
-
"ċ",
|
|
8700
|
-
"¸",
|
|
8701
|
-
"¸la;",
|
|
8702
|
-
"⦲",
|
|
8703
|
-
"¢",
|
|
8704
|
-
"·",
|
|
8705
|
-
"𝔠",
|
|
8706
|
-
"ч",
|
|
8707
|
-
"✓",
|
|
8708
|
-
"✓",
|
|
8709
|
-
"χ",
|
|
8710
|
-
"○",
|
|
8711
|
-
"ˆ",
|
|
8712
|
-
"≗",
|
|
8713
|
-
"↺",
|
|
8714
|
-
"↻",
|
|
8715
|
-
"⊛",
|
|
8716
|
-
"⊚",
|
|
8717
|
-
"⊝",
|
|
8718
|
-
"&circledot;",
|
|
8719
|
-
"&circledr;",
|
|
8720
|
-
"&circleds;",
|
|
8721
|
-
"&circleminus;",
|
|
8722
|
-
"&circleplus;",
|
|
8723
|
-
"&circletimes;",
|
|
8724
|
-
"≗",
|
|
8725
|
-
"⨐",
|
|
8726
|
-
"⫯",
|
|
8727
|
-
"⧂",
|
|
8728
|
-
"&clockwisecontourintegral;",
|
|
8729
|
-
"&closecurlydoublequote;",
|
|
8730
|
-
"&closecurlyquote;",
|
|
8731
|
-
"♣",
|
|
8732
|
-
"♣",
|
|
8733
|
-
":",
|
|
8734
|
-
"≔",
|
|
8735
|
-
"≔",
|
|
8736
|
-
",",
|
|
8737
|
-
"@",
|
|
8738
|
-
"∁",
|
|
8739
|
-
"∘",
|
|
8740
|
-
"∁",
|
|
8741
|
-
"ℂ",
|
|
8742
|
-
"≅",
|
|
8743
|
-
"⩭",
|
|
8744
|
-
"&congruent;",
|
|
8745
|
-
"∮",
|
|
8746
|
-
"&contourintegral;",
|
|
8747
|
-
"𝕔",
|
|
8748
|
-
"∐",
|
|
8749
|
-
"&coproduct;",
|
|
8750
|
-
"©",
|
|
8751
|
-
"℗",
|
|
8752
|
-
"&counterclockwisecontourintegral;",
|
|
8753
|
-
"↵",
|
|
8754
|
-
"✗",
|
|
8755
|
-
"𝒸",
|
|
8756
|
-
"⫏",
|
|
8757
|
-
"⫑",
|
|
8758
|
-
"⫐",
|
|
8759
|
-
"⫒",
|
|
8760
|
-
"⋯",
|
|
8761
|
-
"⤸",
|
|
8762
|
-
"⤵",
|
|
8763
|
-
"⋞",
|
|
8764
|
-
"⋟",
|
|
8765
|
-
"↶",
|
|
8766
|
-
"⤽",
|
|
8767
|
-
"∪",
|
|
8768
|
-
"⩈",
|
|
8769
|
-
"⩆",
|
|
8770
|
-
"⩊",
|
|
8771
|
-
"⊍",
|
|
8772
|
-
"⩅",
|
|
8773
|
-
"∪︀",
|
|
8774
|
-
"↷",
|
|
8775
|
-
"⤼",
|
|
8776
|
-
"⋞",
|
|
8777
|
-
"⋟",
|
|
8778
|
-
"⋎",
|
|
8779
|
-
"⋏",
|
|
8780
|
-
"¤",
|
|
8781
|
-
"↶",
|
|
8782
|
-
"↷",
|
|
8783
|
-
"⋎",
|
|
8784
|
-
"⋏",
|
|
8785
|
-
"∲",
|
|
8786
|
-
"∱",
|
|
8787
|
-
"⌭",
|
|
8788
|
-
"†",
|
|
8789
|
-
"ℸ",
|
|
8790
|
-
"↓",
|
|
8791
|
-
"‐",
|
|
8792
|
-
"⊣",
|
|
8793
|
-
"⤏",
|
|
8794
|
-
"˝",
|
|
8795
|
-
"ď",
|
|
8796
|
-
"д",
|
|
8797
|
-
"ⅆ",
|
|
8798
|
-
"‡",
|
|
8799
|
-
"⇊",
|
|
8800
|
-
"&ddotrahd;",
|
|
8801
|
-
"⩷",
|
|
8802
|
-
"°",
|
|
8803
|
-
"&del;",
|
|
8804
|
-
"δ",
|
|
8805
|
-
"⦱",
|
|
8806
|
-
"⥿",
|
|
8807
|
-
"𝔡",
|
|
8808
|
-
"&dhar;",
|
|
8809
|
-
"⇃",
|
|
8810
|
-
"⇂",
|
|
8811
|
-
"&diacriticalacute;",
|
|
8812
|
-
"&diacriticaldot;",
|
|
8813
|
-
"&diacriticaldoubleacute;",
|
|
8814
|
-
"&diacriticalgrave;",
|
|
8815
|
-
"&diacriticaltilde;",
|
|
8816
|
-
"⋄",
|
|
8817
|
-
"⋄",
|
|
8818
|
-
"♦",
|
|
8819
|
-
"♦",
|
|
8820
|
-
"¨",
|
|
8821
|
-
"&differentiald;",
|
|
8822
|
-
"ϝ",
|
|
8823
|
-
"⋲",
|
|
8824
|
-
"÷",
|
|
8825
|
-
"÷",
|
|
8826
|
-
"⋇",
|
|
8827
|
-
"⋇",
|
|
8828
|
-
"ђ",
|
|
8829
|
-
"⌞",
|
|
8830
|
-
"⌍",
|
|
8831
|
-
"$",
|
|
8832
|
-
"𝕕",
|
|
8833
|
-
"˙",
|
|
8834
|
-
"&dotdot;",
|
|
8835
|
-
"≐",
|
|
8836
|
-
"≑",
|
|
8837
|
-
"&dotequal;",
|
|
8838
|
-
"∸",
|
|
8839
|
-
"∔",
|
|
8840
|
-
"⊡",
|
|
8841
|
-
"⌆",
|
|
8842
|
-
"&doublecontourintegral;",
|
|
8843
|
-
"&doubledot;",
|
|
8844
|
-
"&doubledownarrow;",
|
|
8845
|
-
"&doubleleftarrow;",
|
|
8846
|
-
"&doubleleftrightarrow;",
|
|
8847
|
-
"&doublelefttee;",
|
|
8848
|
-
"&doublelongleftarrow;",
|
|
8849
|
-
"&doublelongleftrightarrow;",
|
|
8850
|
-
"&doublelongrightarrow;",
|
|
8851
|
-
"&doublerightarrow;",
|
|
8852
|
-
"&doublerighttee;",
|
|
8853
|
-
"&doubleuparrow;",
|
|
8854
|
-
"&doubleupdownarrow;",
|
|
8855
|
-
"&doubleverticalbar;",
|
|
8856
|
-
"↓",
|
|
8857
|
-
"&downarrowbar;",
|
|
8858
|
-
"&downarrowuparrow;",
|
|
8859
|
-
"&downbreve;",
|
|
8860
|
-
"⇊",
|
|
8861
|
-
"⇃",
|
|
8862
|
-
"⇂",
|
|
8863
|
-
"&downleftrightvector;",
|
|
8864
|
-
"&downleftteevector;",
|
|
8865
|
-
"&downleftvector;",
|
|
8866
|
-
"&downleftvectorbar;",
|
|
8867
|
-
"&downrightteevector;",
|
|
8868
|
-
"&downrightvector;",
|
|
8869
|
-
"&downrightvectorbar;",
|
|
8870
|
-
"&downtee;",
|
|
8871
|
-
"&downteearrow;",
|
|
8872
|
-
"⤐",
|
|
8873
|
-
"⌟",
|
|
8874
|
-
"⌌",
|
|
8875
|
-
"𝒹",
|
|
8876
|
-
"ѕ",
|
|
8877
|
-
"⧶",
|
|
8878
|
-
"đ",
|
|
8879
|
-
"⋱",
|
|
8880
|
-
"▿",
|
|
8881
|
-
"▾",
|
|
8882
|
-
"⇵",
|
|
8883
|
-
"⥯",
|
|
8884
|
-
"⦦",
|
|
8885
|
-
"џ",
|
|
8886
|
-
"⟿",
|
|
8887
|
-
"é",
|
|
8888
|
-
"⩮",
|
|
8889
|
-
"ě",
|
|
8890
|
-
"≖",
|
|
8891
|
-
"ê",
|
|
8892
|
-
"≕",
|
|
8893
|
-
"э",
|
|
8894
|
-
"&eddot;",
|
|
8895
|
-
"ė",
|
|
8896
|
-
"ⅇ",
|
|
8897
|
-
"&efdot;",
|
|
8898
|
-
"𝔢",
|
|
8899
|
-
"⪚",
|
|
8900
|
-
"è",
|
|
8901
|
-
"⪖",
|
|
8902
|
-
"⪘",
|
|
8903
|
-
"⪙",
|
|
8904
|
-
"&element;",
|
|
8905
|
-
"⏧",
|
|
8906
|
-
"ℓ",
|
|
8907
|
-
"⪕",
|
|
8908
|
-
"⪗",
|
|
8909
|
-
"ē",
|
|
8910
|
-
"∅",
|
|
8911
|
-
"∅",
|
|
8912
|
-
"&emptysmallsquare;",
|
|
8913
|
-
"∅",
|
|
8914
|
-
"&emptyverysmallsquare;",
|
|
8915
|
-
" ",
|
|
8916
|
-
" ",
|
|
8917
|
-
" ",
|
|
8918
|
-
"ŋ",
|
|
8919
|
-
" ",
|
|
8920
|
-
"ę",
|
|
8921
|
-
"𝕖",
|
|
8922
|
-
"⋕",
|
|
8923
|
-
"⧣",
|
|
8924
|
-
"⩱",
|
|
8925
|
-
"ε",
|
|
8926
|
-
"ε",
|
|
8927
|
-
"ϵ",
|
|
8928
|
-
"≖",
|
|
8929
|
-
"≕",
|
|
8930
|
-
"≂",
|
|
8931
|
-
"⪖",
|
|
8932
|
-
"⪕",
|
|
8933
|
-
"&equal;",
|
|
8934
|
-
"=",
|
|
8935
|
-
"&equaltilde;",
|
|
8936
|
-
"≟",
|
|
8937
|
-
"&equilibrium;",
|
|
8938
|
-
"≡",
|
|
8939
|
-
"&equivdd;",
|
|
8940
|
-
"⧥",
|
|
8941
|
-
"⥱",
|
|
8942
|
-
"&erdot;",
|
|
8943
|
-
"ℯ",
|
|
8944
|
-
"≐",
|
|
8945
|
-
"≂",
|
|
8946
|
-
"η",
|
|
8947
|
-
"ð",
|
|
8948
|
-
"ë",
|
|
8949
|
-
"€",
|
|
8950
|
-
"!",
|
|
8951
|
-
"∃",
|
|
8952
|
-
"&exists;",
|
|
8953
|
-
"ℰ",
|
|
8954
|
-
"ⅇ",
|
|
8955
|
-
"≒",
|
|
8956
|
-
"ф",
|
|
8957
|
-
"♀",
|
|
8958
|
-
"ffi",
|
|
8959
|
-
"ff",
|
|
8960
|
-
"ffl",
|
|
8961
|
-
"𝔣",
|
|
8962
|
-
"fi",
|
|
8963
|
-
"&filledsmallsquare;",
|
|
8964
|
-
"&filledverysmallsquare;",
|
|
8965
|
-
"fj",
|
|
8966
|
-
"♭",
|
|
8967
|
-
"fl",
|
|
8968
|
-
"▱",
|
|
8969
|
-
"ƒ",
|
|
8970
|
-
"𝕗",
|
|
8971
|
-
"∀",
|
|
8972
|
-
"⋔",
|
|
8973
|
-
"⫙",
|
|
8974
|
-
"&fouriertrf;",
|
|
8975
|
-
"⨍",
|
|
8976
|
-
"½",
|
|
8977
|
-
"⅓",
|
|
8978
|
-
"¼",
|
|
8979
|
-
"⅕",
|
|
8980
|
-
"⅙",
|
|
8981
|
-
"⅛",
|
|
8982
|
-
"⅔",
|
|
8983
|
-
"⅖",
|
|
8984
|
-
"¾",
|
|
8985
|
-
"⅗",
|
|
8986
|
-
"⅜",
|
|
8987
|
-
"⅘",
|
|
8988
|
-
"⅚",
|
|
8989
|
-
"⅝",
|
|
8990
|
-
"⅞",
|
|
8991
|
-
"⁄",
|
|
8992
|
-
"⌢",
|
|
8993
|
-
"𝒻",
|
|
8994
|
-
"ǵ",
|
|
8995
|
-
"γ",
|
|
8996
|
-
"ϝ",
|
|
8997
|
-
"⪆",
|
|
8998
|
-
"ğ",
|
|
8999
|
-
"&gcedil;",
|
|
9000
|
-
"ĝ",
|
|
9001
|
-
"г",
|
|
9002
|
-
"ġ",
|
|
9003
|
-
"≥",
|
|
9004
|
-
"⋛",
|
|
9005
|
-
"≥",
|
|
9006
|
-
"≧",
|
|
9007
|
-
"⩾",
|
|
9008
|
-
"⩾",
|
|
9009
|
-
"⪩",
|
|
9010
|
-
"⪀",
|
|
9011
|
-
"⪂",
|
|
9012
|
-
"⪄",
|
|
9013
|
-
"⋛︀",
|
|
9014
|
-
"⪔",
|
|
9015
|
-
"𝔤",
|
|
9016
|
-
"≫",
|
|
9017
|
-
"⋙",
|
|
9018
|
-
"ℷ",
|
|
9019
|
-
"ѓ",
|
|
9020
|
-
"≷",
|
|
9021
|
-
"⪥",
|
|
9022
|
-
"&gle;",
|
|
9023
|
-
"⪤",
|
|
9024
|
-
"⪊",
|
|
9025
|
-
"⪊",
|
|
9026
|
-
"⪈",
|
|
9027
|
-
"⪈",
|
|
9028
|
-
"≩",
|
|
9029
|
-
"⋧",
|
|
9030
|
-
"𝕘",
|
|
9031
|
-
"`",
|
|
9032
|
-
"&greaterequal;",
|
|
9033
|
-
"&greaterequalless;",
|
|
9034
|
-
"&greaterfullequal;",
|
|
9035
|
-
"&greatergreater;",
|
|
9036
|
-
"&greaterless;",
|
|
9037
|
-
"&greaterslantequal;",
|
|
9038
|
-
"&greatertilde;",
|
|
9039
|
-
"ℊ",
|
|
9040
|
-
"≳",
|
|
9041
|
-
"⪎",
|
|
9042
|
-
"⪐",
|
|
9043
|
-
">",
|
|
9044
|
-
"⪧",
|
|
9045
|
-
"⩺",
|
|
9046
|
-
"⋗",
|
|
9047
|
-
">lpar;",
|
|
9048
|
-
"⩼",
|
|
9049
|
-
"⪆",
|
|
9050
|
-
"⥸",
|
|
9051
|
-
"⋗",
|
|
9052
|
-
"⋛",
|
|
9053
|
-
"⪌",
|
|
9054
|
-
"≷",
|
|
9055
|
-
"≳",
|
|
9056
|
-
"≩︀",
|
|
9057
|
-
"&gvne;",
|
|
9058
|
-
"&hacek;",
|
|
9059
|
-
" ",
|
|
9060
|
-
"½",
|
|
9061
|
-
"ℋ",
|
|
9062
|
-
"ъ",
|
|
9063
|
-
"↔",
|
|
9064
|
-
"⥈",
|
|
9065
|
-
"↭",
|
|
9066
|
-
"&hat;",
|
|
9067
|
-
"ℏ",
|
|
9068
|
-
"ĥ",
|
|
9069
|
-
"♥",
|
|
9070
|
-
"♥",
|
|
9071
|
-
"…",
|
|
9072
|
-
"⊹",
|
|
9073
|
-
"𝔥",
|
|
9074
|
-
"&hilbertspace;",
|
|
9075
|
-
"⤥",
|
|
9076
|
-
"⤦",
|
|
9077
|
-
"⇿",
|
|
9078
|
-
"∻",
|
|
9079
|
-
"↩",
|
|
9080
|
-
"↪",
|
|
9081
|
-
"𝕙",
|
|
9082
|
-
"―",
|
|
9083
|
-
"&horizontalline;",
|
|
9084
|
-
"𝒽",
|
|
9085
|
-
"ℏ",
|
|
9086
|
-
"ħ",
|
|
9087
|
-
"&humpdownhump;",
|
|
9088
|
-
"&humpequal;",
|
|
9089
|
-
"⁃",
|
|
9090
|
-
"‐",
|
|
9091
|
-
"í",
|
|
9092
|
-
"⁣",
|
|
9093
|
-
"î",
|
|
9094
|
-
"и",
|
|
9095
|
-
"&idot;",
|
|
9096
|
-
"е",
|
|
9097
|
-
"¡",
|
|
9098
|
-
"⇔",
|
|
9099
|
-
"𝔦",
|
|
9100
|
-
"ì",
|
|
9101
|
-
"ⅈ",
|
|
9102
|
-
"⨌",
|
|
9103
|
-
"∭",
|
|
9104
|
-
"⧜",
|
|
9105
|
-
"℩",
|
|
9106
|
-
"ij",
|
|
9107
|
-
"&im;",
|
|
9108
|
-
"ī",
|
|
9109
|
-
"ℑ",
|
|
9110
|
-
"&imaginaryi;",
|
|
9111
|
-
"ℐ",
|
|
9112
|
-
"ℑ",
|
|
9113
|
-
"ı",
|
|
9114
|
-
"⊷",
|
|
9115
|
-
"Ƶ",
|
|
9116
|
-
"&implies;",
|
|
9117
|
-
"∈",
|
|
9118
|
-
"℅",
|
|
9119
|
-
"∞",
|
|
9120
|
-
"⧝",
|
|
9121
|
-
"ı",
|
|
9122
|
-
"∫",
|
|
9123
|
-
"⊺",
|
|
9124
|
-
"ℤ",
|
|
9125
|
-
"&integral;",
|
|
9126
|
-
"⊺",
|
|
9127
|
-
"&intersection;",
|
|
9128
|
-
"⨗",
|
|
9129
|
-
"⨼",
|
|
9130
|
-
"&invisiblecomma;",
|
|
9131
|
-
"&invisibletimes;",
|
|
9132
|
-
"ё",
|
|
9133
|
-
"į",
|
|
9134
|
-
"𝕚",
|
|
9135
|
-
"ι",
|
|
9136
|
-
"⨼",
|
|
9137
|
-
"¿",
|
|
9138
|
-
"𝒾",
|
|
9139
|
-
"∈",
|
|
9140
|
-
"⋵",
|
|
9141
|
-
"&isine;",
|
|
9142
|
-
"⋴",
|
|
9143
|
-
"⋳",
|
|
9144
|
-
"∈",
|
|
9145
|
-
"⁢",
|
|
9146
|
-
"ĩ",
|
|
9147
|
-
"і",
|
|
9148
|
-
"ï",
|
|
9149
|
-
"ĵ",
|
|
9150
|
-
"й",
|
|
9151
|
-
"𝔧",
|
|
9152
|
-
"ȷ",
|
|
9153
|
-
"𝕛",
|
|
9154
|
-
"𝒿",
|
|
9155
|
-
"ј",
|
|
9156
|
-
"є",
|
|
9157
|
-
"κ",
|
|
9158
|
-
"ϰ",
|
|
9159
|
-
"ķ",
|
|
9160
|
-
"к",
|
|
9161
|
-
"𝔨",
|
|
9162
|
-
"ĸ",
|
|
9163
|
-
"х",
|
|
9164
|
-
"ќ",
|
|
9165
|
-
"𝕜",
|
|
9166
|
-
"𝓀",
|
|
9167
|
-
"&laarr;",
|
|
9168
|
-
"ĺ",
|
|
9169
|
-
"⦴",
|
|
9170
|
-
"ℒ",
|
|
9171
|
-
"λ",
|
|
9172
|
-
"⟨",
|
|
9173
|
-
"⦑",
|
|
9174
|
-
"⟨",
|
|
9175
|
-
"⪅",
|
|
9176
|
-
"&laplacetrf;",
|
|
9177
|
-
"«",
|
|
9178
|
-
"←",
|
|
9179
|
-
"⇤",
|
|
9180
|
-
"⤟",
|
|
9181
|
-
"⤝",
|
|
9182
|
-
"↩",
|
|
9183
|
-
"↫",
|
|
9184
|
-
"⤹",
|
|
9185
|
-
"⥳",
|
|
9186
|
-
"↢",
|
|
9187
|
-
"⪫",
|
|
9188
|
-
"⤙",
|
|
9189
|
-
"⪭",
|
|
9190
|
-
"⪭︀",
|
|
9191
|
-
"⤌",
|
|
9192
|
-
"❲",
|
|
9193
|
-
"{",
|
|
9194
|
-
"[",
|
|
9195
|
-
"⦋",
|
|
9196
|
-
"⦏",
|
|
9197
|
-
"⦍",
|
|
9198
|
-
"ľ",
|
|
9199
|
-
"ļ",
|
|
9200
|
-
"⌈",
|
|
9201
|
-
"{",
|
|
9202
|
-
"л",
|
|
9203
|
-
"⤶",
|
|
9204
|
-
"“",
|
|
9205
|
-
"„",
|
|
9206
|
-
"⥧",
|
|
9207
|
-
"⥋",
|
|
9208
|
-
"↲",
|
|
9209
|
-
"≤",
|
|
9210
|
-
"&leftanglebracket;",
|
|
9211
|
-
"←",
|
|
9212
|
-
"&leftarrowbar;",
|
|
9213
|
-
"&leftarrowrightarrow;",
|
|
9214
|
-
"↢",
|
|
9215
|
-
"&leftceiling;",
|
|
9216
|
-
"&leftdoublebracket;",
|
|
9217
|
-
"&leftdownteevector;",
|
|
9218
|
-
"&leftdownvector;",
|
|
9219
|
-
"&leftdownvectorbar;",
|
|
9220
|
-
"&leftfloor;",
|
|
9221
|
-
"↽",
|
|
9222
|
-
"↼",
|
|
9223
|
-
"⇇",
|
|
9224
|
-
"↔",
|
|
9225
|
-
"⇆",
|
|
9226
|
-
"⇋",
|
|
9227
|
-
"↭",
|
|
9228
|
-
"&leftrightvector;",
|
|
9229
|
-
"&lefttee;",
|
|
9230
|
-
"&leftteearrow;",
|
|
9231
|
-
"&leftteevector;",
|
|
9232
|
-
"⋋",
|
|
9233
|
-
"&lefttriangle;",
|
|
9234
|
-
"&lefttrianglebar;",
|
|
9235
|
-
"&lefttriangleequal;",
|
|
9236
|
-
"&leftupdownvector;",
|
|
9237
|
-
"&leftupteevector;",
|
|
9238
|
-
"&leftupvector;",
|
|
9239
|
-
"&leftupvectorbar;",
|
|
9240
|
-
"&leftvector;",
|
|
9241
|
-
"&leftvectorbar;",
|
|
9242
|
-
"⋚",
|
|
9243
|
-
"≤",
|
|
9244
|
-
"≦",
|
|
9245
|
-
"⩽",
|
|
9246
|
-
"⩽",
|
|
9247
|
-
"⪨",
|
|
9248
|
-
"⩿",
|
|
9249
|
-
"⪁",
|
|
9250
|
-
"⪃",
|
|
9251
|
-
"⋚︀",
|
|
9252
|
-
"⪓",
|
|
9253
|
-
"⪅",
|
|
9254
|
-
"⋖",
|
|
9255
|
-
"⋚",
|
|
9256
|
-
"⪋",
|
|
9257
|
-
"&lessequalgreater;",
|
|
9258
|
-
"&lessfullequal;",
|
|
9259
|
-
"&lessgreater;",
|
|
9260
|
-
"≶",
|
|
9261
|
-
"&lessless;",
|
|
9262
|
-
"≲",
|
|
9263
|
-
"&lessslantequal;",
|
|
9264
|
-
"&lesstilde;",
|
|
9265
|
-
"⥼",
|
|
9266
|
-
"⌊",
|
|
9267
|
-
"𝔩",
|
|
9268
|
-
"≶",
|
|
9269
|
-
"&lge;",
|
|
9270
|
-
"&lhar;",
|
|
9271
|
-
"↽",
|
|
9272
|
-
"↼",
|
|
9273
|
-
"⥪",
|
|
9274
|
-
"▄",
|
|
9275
|
-
"љ",
|
|
9276
|
-
"≪",
|
|
9277
|
-
"⇇",
|
|
9278
|
-
"⌞",
|
|
9279
|
-
"&lleftarrow;",
|
|
9280
|
-
"⥫",
|
|
9281
|
-
"◺",
|
|
9282
|
-
"ŀ",
|
|
9283
|
-
"⎰",
|
|
9284
|
-
"⎰",
|
|
9285
|
-
"⪉",
|
|
9286
|
-
"⪉",
|
|
9287
|
-
"⪇",
|
|
9288
|
-
"⪇",
|
|
9289
|
-
"≨",
|
|
9290
|
-
"⋦",
|
|
9291
|
-
"⟬",
|
|
9292
|
-
"⇽",
|
|
9293
|
-
"⟦",
|
|
9294
|
-
"⟵",
|
|
9295
|
-
"⟷",
|
|
9296
|
-
"⟼",
|
|
9297
|
-
"⟶",
|
|
9298
|
-
"↫",
|
|
9299
|
-
"↬",
|
|
9300
|
-
"⦅",
|
|
9301
|
-
"𝕝",
|
|
9302
|
-
"⨭",
|
|
9303
|
-
"⨴",
|
|
9304
|
-
"∗",
|
|
9305
|
-
"_",
|
|
9306
|
-
"&lowerleftarrow;",
|
|
9307
|
-
"&lowerrightarrow;",
|
|
9308
|
-
"◊",
|
|
9309
|
-
"◊",
|
|
9310
|
-
"⧫",
|
|
9311
|
-
"(",
|
|
9312
|
-
"⦓",
|
|
9313
|
-
"⇆",
|
|
9314
|
-
"⌟",
|
|
9315
|
-
"⇋",
|
|
9316
|
-
"⥭",
|
|
9317
|
-
"‎",
|
|
9318
|
-
"⊿",
|
|
9319
|
-
"‹",
|
|
9320
|
-
"𝓁",
|
|
9321
|
-
"↰",
|
|
9322
|
-
"≲",
|
|
9323
|
-
"⪍",
|
|
9324
|
-
"⪏",
|
|
9325
|
-
"[",
|
|
9326
|
-
"‘",
|
|
9327
|
-
"‚",
|
|
9328
|
-
"ł",
|
|
9329
|
-
"<",
|
|
9330
|
-
"⪦",
|
|
9331
|
-
"⩹",
|
|
9332
|
-
"⋖",
|
|
9333
|
-
"⋋",
|
|
9334
|
-
"⋉",
|
|
9335
|
-
"⥶",
|
|
9336
|
-
"⩻",
|
|
9337
|
-
"◃",
|
|
9338
|
-
"⊴",
|
|
9339
|
-
"◂",
|
|
9340
|
-
"<rpar;",
|
|
9341
|
-
"⥊",
|
|
9342
|
-
"⥦",
|
|
9343
|
-
"≨︀",
|
|
9344
|
-
"&lvne;",
|
|
9345
|
-
"¯",
|
|
9346
|
-
"♂",
|
|
9347
|
-
"✠",
|
|
9348
|
-
"✠",
|
|
9349
|
-
"↦",
|
|
9350
|
-
"↦",
|
|
9351
|
-
"↧",
|
|
9352
|
-
"↤",
|
|
9353
|
-
"↥",
|
|
9354
|
-
"▮",
|
|
9355
|
-
"⨩",
|
|
9356
|
-
"м",
|
|
9357
|
-
"—",
|
|
9358
|
-
"&mddot;",
|
|
9359
|
-
"∡",
|
|
9360
|
-
"&mediumspace;",
|
|
9361
|
-
"&mellintrf;",
|
|
9362
|
-
"𝔪",
|
|
9363
|
-
"℧",
|
|
9364
|
-
"µ",
|
|
9365
|
-
"∣",
|
|
9366
|
-
"*",
|
|
9367
|
-
"⫰",
|
|
9368
|
-
"·",
|
|
9369
|
-
"−",
|
|
9370
|
-
"⊟",
|
|
9371
|
-
"∸",
|
|
9372
|
-
"⨪",
|
|
9373
|
-
"&minusplus;",
|
|
9374
|
-
"⫛",
|
|
9375
|
-
"…",
|
|
9376
|
-
"∓",
|
|
9377
|
-
"⊧",
|
|
9378
|
-
"𝕞",
|
|
9379
|
-
"∓",
|
|
9380
|
-
"𝓂",
|
|
9381
|
-
"∾",
|
|
9382
|
-
"μ",
|
|
9383
|
-
"⊸",
|
|
9384
|
-
"⊸",
|
|
9385
|
-
"∇",
|
|
9386
|
-
"ń",
|
|
9387
|
-
"∠⃒",
|
|
9388
|
-
"≉",
|
|
9389
|
-
"&nape;",
|
|
9390
|
-
"≋̸",
|
|
9391
|
-
"ʼn",
|
|
9392
|
-
"≉",
|
|
9393
|
-
"♮",
|
|
9394
|
-
"♮",
|
|
9395
|
-
"ℕ",
|
|
9396
|
-
" ",
|
|
9397
|
-
"≎̸",
|
|
9398
|
-
"≏̸",
|
|
9399
|
-
"⩃",
|
|
9400
|
-
"ň",
|
|
9401
|
-
"ņ",
|
|
9402
|
-
"≇",
|
|
9403
|
-
"⩭̸",
|
|
9404
|
-
"⩂",
|
|
9405
|
-
"н",
|
|
9406
|
-
"–",
|
|
9407
|
-
"≠",
|
|
9408
|
-
"⤤",
|
|
9409
|
-
"↗",
|
|
9410
|
-
"↗",
|
|
9411
|
-
"≐̸",
|
|
9412
|
-
"&negativemediumspace;",
|
|
9413
|
-
"&negativethickspace;",
|
|
9414
|
-
"&negativethinspace;",
|
|
9415
|
-
"&negativeverythinspace;",
|
|
9416
|
-
"≢",
|
|
9417
|
-
"⤨",
|
|
9418
|
-
"≂̸",
|
|
9419
|
-
"&nestedgreatergreater;",
|
|
9420
|
-
"&nestedlessless;",
|
|
9421
|
-
"&newline;",
|
|
9422
|
-
"∄",
|
|
9423
|
-
"∄",
|
|
9424
|
-
"𝔫",
|
|
9425
|
-
"≱",
|
|
9426
|
-
"≱",
|
|
9427
|
-
"≧̸",
|
|
9428
|
-
"⩾̸",
|
|
9429
|
-
"⩾̸",
|
|
9430
|
-
"&ngg;",
|
|
9431
|
-
"≵",
|
|
9432
|
-
"≯",
|
|
9433
|
-
"≯",
|
|
9434
|
-
"&ngtv;",
|
|
9435
|
-
"↮",
|
|
9436
|
-
"⫲",
|
|
9437
|
-
"∋",
|
|
9438
|
-
"⋼",
|
|
9439
|
-
"⋺",
|
|
9440
|
-
"∋",
|
|
9441
|
-
"њ",
|
|
9442
|
-
"↚",
|
|
9443
|
-
"‥",
|
|
9444
|
-
"≰",
|
|
9445
|
-
"↚",
|
|
9446
|
-
"↮",
|
|
9447
|
-
"≰",
|
|
9448
|
-
"≦̸",
|
|
9449
|
-
"⩽̸",
|
|
9450
|
-
"⩽̸",
|
|
9451
|
-
"≮",
|
|
9452
|
-
"&nll;",
|
|
9453
|
-
"≴",
|
|
9454
|
-
"≮",
|
|
9455
|
-
"⋪",
|
|
9456
|
-
"⋬",
|
|
9457
|
-
"&nltv;",
|
|
9458
|
-
"∤",
|
|
9459
|
-
"&nobreak;",
|
|
9460
|
-
"&nonbreakingspace;",
|
|
9461
|
-
"𝕟",
|
|
9462
|
-
"¬",
|
|
9463
|
-
"¬congruent;",
|
|
9464
|
-
"¬cupcap;",
|
|
9465
|
-
"¬doubleverticalbar;",
|
|
9466
|
-
"¬element;",
|
|
9467
|
-
"¬equal;",
|
|
9468
|
-
"¬equaltilde;",
|
|
9469
|
-
"¬exists;",
|
|
9470
|
-
"¬greater;",
|
|
9471
|
-
"¬greaterequal;",
|
|
9472
|
-
"¬greaterfullequal;",
|
|
9473
|
-
"¬greatergreater;",
|
|
9474
|
-
"¬greaterless;",
|
|
9475
|
-
"¬greaterslantequal;",
|
|
9476
|
-
"¬greatertilde;",
|
|
9477
|
-
"¬humpdownhump;",
|
|
9478
|
-
"¬humpequal;",
|
|
9479
|
-
"∉",
|
|
9480
|
-
"⋵̸",
|
|
9481
|
-
"¬ine;",
|
|
9482
|
-
"∉",
|
|
9483
|
-
"⋷",
|
|
9484
|
-
"⋶",
|
|
9485
|
-
"¬lefttriangle;",
|
|
9486
|
-
"¬lefttrianglebar;",
|
|
9487
|
-
"¬lefttriangleequal;",
|
|
9488
|
-
"¬less;",
|
|
9489
|
-
"¬lessequal;",
|
|
9490
|
-
"¬lessgreater;",
|
|
9491
|
-
"¬lessless;",
|
|
9492
|
-
"¬lessslantequal;",
|
|
9493
|
-
"¬lesstilde;",
|
|
9494
|
-
"¬nestedgreatergreater;",
|
|
9495
|
-
"¬nestedlessless;",
|
|
9496
|
-
"∌",
|
|
9497
|
-
"∌",
|
|
9498
|
-
"⋾",
|
|
9499
|
-
"⋽",
|
|
9500
|
-
"¬precedes;",
|
|
9501
|
-
"¬precedesequal;",
|
|
9502
|
-
"¬precedesslantequal;",
|
|
9503
|
-
"¬reverseelement;",
|
|
9504
|
-
"¬righttriangle;",
|
|
9505
|
-
"¬righttrianglebar;",
|
|
9506
|
-
"¬righttriangleequal;",
|
|
9507
|
-
"¬squaresubset;",
|
|
9508
|
-
"¬squaresubsetequal;",
|
|
9509
|
-
"¬squaresuperset;",
|
|
9510
|
-
"¬squaresupersetequal;",
|
|
9511
|
-
"¬subset;",
|
|
9512
|
-
"¬subsetequal;",
|
|
9513
|
-
"¬succeeds;",
|
|
9514
|
-
"¬succeedsequal;",
|
|
9515
|
-
"¬succeedsslantequal;",
|
|
9516
|
-
"¬succeedstilde;",
|
|
9517
|
-
"¬superset;",
|
|
9518
|
-
"¬supersetequal;",
|
|
9519
|
-
"¬tilde;",
|
|
9520
|
-
"¬tildeequal;",
|
|
9521
|
-
"¬tildefullequal;",
|
|
9522
|
-
"¬tildetilde;",
|
|
9523
|
-
"¬verticalbar;",
|
|
9524
|
-
"∦",
|
|
9525
|
-
"∦",
|
|
9526
|
-
"⫽⃥",
|
|
9527
|
-
"∂̸",
|
|
9528
|
-
"⨔",
|
|
9529
|
-
"⊀",
|
|
9530
|
-
"⋠",
|
|
9531
|
-
"⪯̸",
|
|
9532
|
-
"⊀",
|
|
9533
|
-
"⪯̸",
|
|
9534
|
-
"↛",
|
|
9535
|
-
"⤳̸",
|
|
9536
|
-
"↝̸",
|
|
9537
|
-
"↛",
|
|
9538
|
-
"⋫",
|
|
9539
|
-
"⋭",
|
|
9540
|
-
"⊁",
|
|
9541
|
-
"⋡",
|
|
9542
|
-
"⪰̸",
|
|
9543
|
-
"𝓃",
|
|
9544
|
-
"∤",
|
|
9545
|
-
"∦",
|
|
9546
|
-
"≁",
|
|
9547
|
-
"≄",
|
|
9548
|
-
"≄",
|
|
9549
|
-
"∤",
|
|
9550
|
-
"∦",
|
|
9551
|
-
"⋢",
|
|
9552
|
-
"⋣",
|
|
9553
|
-
"⊄",
|
|
9554
|
-
"⊈",
|
|
9555
|
-
"⊂⃒",
|
|
9556
|
-
"⊈",
|
|
9557
|
-
"⫅̸",
|
|
9558
|
-
"⊁",
|
|
9559
|
-
"⪰̸",
|
|
9560
|
-
"⊅",
|
|
9561
|
-
"⊉",
|
|
9562
|
-
"⊃⃒",
|
|
9563
|
-
"⊉",
|
|
9564
|
-
"⫆̸",
|
|
9565
|
-
"≹",
|
|
9566
|
-
"ñ",
|
|
9567
|
-
"≸",
|
|
9568
|
-
"⋪",
|
|
9569
|
-
"⋬",
|
|
9570
|
-
"⋫",
|
|
9571
|
-
"⋭",
|
|
9572
|
-
"ν",
|
|
9573
|
-
"#",
|
|
9574
|
-
"№",
|
|
9575
|
-
" ",
|
|
9576
|
-
"≍⃒",
|
|
9577
|
-
"⊬",
|
|
9578
|
-
"≥⃒",
|
|
9579
|
-
">⃒",
|
|
9580
|
-
"&nvharr;",
|
|
9581
|
-
"⧞",
|
|
9582
|
-
"&nvlarr;",
|
|
9583
|
-
"≤⃒",
|
|
9584
|
-
"<⃒",
|
|
9585
|
-
"⊴⃒",
|
|
9586
|
-
"&nvrarr;",
|
|
9587
|
-
"⊵⃒",
|
|
9588
|
-
"∼⃒",
|
|
9589
|
-
"⤣",
|
|
9590
|
-
"↖",
|
|
9591
|
-
"↖",
|
|
9592
|
-
"⤧",
|
|
9593
|
-
"ó",
|
|
9594
|
-
"⊛",
|
|
9595
|
-
"⊚",
|
|
9596
|
-
"ô",
|
|
9597
|
-
"о",
|
|
9598
|
-
"⊝",
|
|
9599
|
-
"ő",
|
|
9600
|
-
"⨸",
|
|
9601
|
-
"⊙",
|
|
9602
|
-
"⦼",
|
|
9603
|
-
"œ",
|
|
9604
|
-
"⦿",
|
|
9605
|
-
"𝔬",
|
|
9606
|
-
"˛",
|
|
9607
|
-
"ò",
|
|
9608
|
-
"⧁",
|
|
9609
|
-
"⦵",
|
|
9610
|
-
"Ω",
|
|
9611
|
-
"∮",
|
|
9612
|
-
"↺",
|
|
9613
|
-
"⦾",
|
|
9614
|
-
"⦻",
|
|
9615
|
-
"‾",
|
|
9616
|
-
"⧀",
|
|
9617
|
-
"ō",
|
|
9618
|
-
"ω",
|
|
9619
|
-
"ο",
|
|
9620
|
-
"⦶",
|
|
9621
|
-
"⊖",
|
|
9622
|
-
"𝕠",
|
|
9623
|
-
"⦷",
|
|
9624
|
-
"&opencurlydoublequote;",
|
|
9625
|
-
"&opencurlyquote;",
|
|
9626
|
-
"⦹",
|
|
9627
|
-
"⊕",
|
|
9628
|
-
"∨",
|
|
9629
|
-
"↻",
|
|
9630
|
-
"⩝",
|
|
9631
|
-
"ℴ",
|
|
9632
|
-
"ℴ",
|
|
9633
|
-
"ª",
|
|
9634
|
-
"º",
|
|
9635
|
-
"⊶",
|
|
9636
|
-
"⩖",
|
|
9637
|
-
"⩗",
|
|
9638
|
-
"⩛",
|
|
9639
|
-
"&os;",
|
|
9640
|
-
"ℴ",
|
|
9641
|
-
"ø",
|
|
9642
|
-
"⊘",
|
|
9643
|
-
"õ",
|
|
9644
|
-
"⊗",
|
|
9645
|
-
"⨶",
|
|
9646
|
-
"ö",
|
|
9647
|
-
"⌽",
|
|
9648
|
-
"&overbar;",
|
|
9649
|
-
"&overbrace;",
|
|
9650
|
-
"&overbracket;",
|
|
9651
|
-
"&overparenthesis;",
|
|
9652
|
-
"∥",
|
|
9653
|
-
"¶",
|
|
9654
|
-
"∥",
|
|
9655
|
-
"⫳",
|
|
9656
|
-
"⫽",
|
|
9657
|
-
"∂",
|
|
9658
|
-
"&partiald;",
|
|
9659
|
-
"п",
|
|
9660
|
-
"%",
|
|
9661
|
-
".",
|
|
9662
|
-
"‰",
|
|
9663
|
-
"⊥",
|
|
9664
|
-
"‱",
|
|
9665
|
-
"𝔭",
|
|
9666
|
-
"φ",
|
|
9667
|
-
"ϕ",
|
|
9668
|
-
"ℳ",
|
|
9669
|
-
"☎",
|
|
9670
|
-
"π",
|
|
9671
|
-
"⋔",
|
|
9672
|
-
"ϖ",
|
|
9673
|
-
"ℏ",
|
|
9674
|
-
"ℎ",
|
|
9675
|
-
"ℏ",
|
|
9676
|
-
"+",
|
|
9677
|
-
"⨣",
|
|
9678
|
-
"⊞",
|
|
9679
|
-
"⨢",
|
|
9680
|
-
"∔",
|
|
9681
|
-
"⨥",
|
|
9682
|
-
"⩲",
|
|
9683
|
-
"&plusminus;",
|
|
9684
|
-
"±",
|
|
9685
|
-
"⨦",
|
|
9686
|
-
"⨧",
|
|
9687
|
-
"±",
|
|
9688
|
-
"&poincareplane;",
|
|
9689
|
-
"⨕",
|
|
9690
|
-
"𝕡",
|
|
9691
|
-
"£",
|
|
9692
|
-
"≺",
|
|
9693
|
-
"⪷",
|
|
9694
|
-
"≼",
|
|
9695
|
-
"⪯",
|
|
9696
|
-
"≺",
|
|
9697
|
-
"⪷",
|
|
9698
|
-
"≼",
|
|
9699
|
-
"&precedes;",
|
|
9700
|
-
"&precedesequal;",
|
|
9701
|
-
"&precedesslantequal;",
|
|
9702
|
-
"&precedestilde;",
|
|
9703
|
-
"⪯",
|
|
9704
|
-
"⪹",
|
|
9705
|
-
"⪵",
|
|
9706
|
-
"⋨",
|
|
9707
|
-
"≾",
|
|
9708
|
-
"′",
|
|
9709
|
-
"ℙ",
|
|
9710
|
-
"⪹",
|
|
9711
|
-
"&prne;",
|
|
9712
|
-
"⋨",
|
|
9713
|
-
"∏",
|
|
9714
|
-
"&product;",
|
|
9715
|
-
"⌮",
|
|
9716
|
-
"⌒",
|
|
9717
|
-
"⌓",
|
|
9718
|
-
"∝",
|
|
9719
|
-
"&proportion;",
|
|
9720
|
-
"&proportional;",
|
|
9721
|
-
"∝",
|
|
9722
|
-
"≾",
|
|
9723
|
-
"⊰",
|
|
9724
|
-
"𝓅",
|
|
9725
|
-
"ψ",
|
|
9726
|
-
" ",
|
|
9727
|
-
"𝔮",
|
|
9728
|
-
"⨌",
|
|
9729
|
-
"𝕢",
|
|
9730
|
-
"⁗",
|
|
9731
|
-
"𝓆",
|
|
9732
|
-
"ℍ",
|
|
9733
|
-
"⨖",
|
|
9734
|
-
"?",
|
|
9735
|
-
"≟",
|
|
9736
|
-
""",
|
|
9737
|
-
"&raarr;",
|
|
9738
|
-
"∽̱",
|
|
9739
|
-
"ŕ",
|
|
9740
|
-
"√",
|
|
9741
|
-
"⦳",
|
|
9742
|
-
"⟩",
|
|
9743
|
-
"⦒",
|
|
9744
|
-
"⦥",
|
|
9745
|
-
"⟩",
|
|
9746
|
-
"»",
|
|
9747
|
-
"→",
|
|
9748
|
-
"⥵",
|
|
9749
|
-
"⇥",
|
|
9750
|
-
"⤠",
|
|
9751
|
-
"⤳",
|
|
9752
|
-
"⤞",
|
|
9753
|
-
"↪",
|
|
9754
|
-
"↬",
|
|
9755
|
-
"⥅",
|
|
9756
|
-
"⥴",
|
|
9757
|
-
"↣",
|
|
9758
|
-
"↝",
|
|
9759
|
-
"⤚",
|
|
9760
|
-
"∶",
|
|
9761
|
-
"ℚ",
|
|
9762
|
-
"⤍",
|
|
9763
|
-
"❳",
|
|
9764
|
-
"}",
|
|
9765
|
-
"]",
|
|
9766
|
-
"⦌",
|
|
9767
|
-
"⦎",
|
|
9768
|
-
"⦐",
|
|
9769
|
-
"ř",
|
|
9770
|
-
"ŗ",
|
|
9771
|
-
"⌉",
|
|
9772
|
-
"}",
|
|
9773
|
-
"р",
|
|
9774
|
-
"⤷",
|
|
9775
|
-
"⥩",
|
|
9776
|
-
"”",
|
|
9777
|
-
"”",
|
|
9778
|
-
"↳",
|
|
9779
|
-
"&re;",
|
|
9780
|
-
"ℜ",
|
|
9781
|
-
"ℛ",
|
|
9782
|
-
"ℜ",
|
|
9783
|
-
"ℝ",
|
|
9784
|
-
"▭",
|
|
9785
|
-
"®",
|
|
9786
|
-
"&reverseelement;",
|
|
9787
|
-
"&reverseequilibrium;",
|
|
9788
|
-
"&reverseupequilibrium;",
|
|
9789
|
-
"⥽",
|
|
9790
|
-
"⌋",
|
|
9791
|
-
"𝔯",
|
|
9792
|
-
"&rhar;",
|
|
9793
|
-
"⇁",
|
|
9794
|
-
"⇀",
|
|
9795
|
-
"⥬",
|
|
9796
|
-
"ρ",
|
|
9797
|
-
"ϱ",
|
|
9798
|
-
"&rightanglebracket;",
|
|
9799
|
-
"→",
|
|
9800
|
-
"&rightarrowbar;",
|
|
9801
|
-
"&rightarrowleftarrow;",
|
|
9802
|
-
"↣",
|
|
9803
|
-
"&rightceiling;",
|
|
9804
|
-
"&rightdoublebracket;",
|
|
9805
|
-
"&rightdownteevector;",
|
|
9806
|
-
"&rightdownvector;",
|
|
9807
|
-
"&rightdownvectorbar;",
|
|
9808
|
-
"&rightfloor;",
|
|
9809
|
-
"⇁",
|
|
9810
|
-
"⇀",
|
|
9811
|
-
"⇄",
|
|
9812
|
-
"⇌",
|
|
9813
|
-
"⇉",
|
|
9814
|
-
"↝",
|
|
9815
|
-
"&righttee;",
|
|
9816
|
-
"&rightteearrow;",
|
|
9817
|
-
"&rightteevector;",
|
|
9818
|
-
"⋌",
|
|
9819
|
-
"&righttriangle;",
|
|
9820
|
-
"&righttrianglebar;",
|
|
9821
|
-
"&righttriangleequal;",
|
|
9822
|
-
"&rightupdownvector;",
|
|
9823
|
-
"&rightupteevector;",
|
|
9824
|
-
"&rightupvector;",
|
|
9825
|
-
"&rightupvectorbar;",
|
|
9826
|
-
"&rightvector;",
|
|
9827
|
-
"&rightvectorbar;",
|
|
9828
|
-
"˚",
|
|
9829
|
-
"≓",
|
|
9830
|
-
"⇄",
|
|
9831
|
-
"⇌",
|
|
9832
|
-
"‏",
|
|
9833
|
-
"⎱",
|
|
9834
|
-
"⎱",
|
|
9835
|
-
"⫮",
|
|
9836
|
-
"⟭",
|
|
9837
|
-
"⇾",
|
|
9838
|
-
"⟧",
|
|
9839
|
-
"⦆",
|
|
9840
|
-
"𝕣",
|
|
9841
|
-
"⨮",
|
|
9842
|
-
"⨵",
|
|
9843
|
-
"&roundimplies;",
|
|
9844
|
-
")",
|
|
9845
|
-
"⦔",
|
|
9846
|
-
"⨒",
|
|
9847
|
-
"⇉",
|
|
9848
|
-
"&rrightarrow;",
|
|
9849
|
-
"›",
|
|
9850
|
-
"𝓇",
|
|
9851
|
-
"↱",
|
|
9852
|
-
"]",
|
|
9853
|
-
"’",
|
|
9854
|
-
"’",
|
|
9855
|
-
"⋌",
|
|
9856
|
-
"⋊",
|
|
9857
|
-
"▹",
|
|
9858
|
-
"⊵",
|
|
9859
|
-
"▸",
|
|
9860
|
-
"⧎",
|
|
9861
|
-
"&ruledelayed;",
|
|
9862
|
-
"⥨",
|
|
9863
|
-
"℞",
|
|
9864
|
-
"ś",
|
|
9865
|
-
"‚",
|
|
9866
|
-
"≻",
|
|
9867
|
-
"⪸",
|
|
9868
|
-
"š",
|
|
9869
|
-
"≽",
|
|
9870
|
-
"⪰",
|
|
9871
|
-
"ş",
|
|
9872
|
-
"ŝ",
|
|
9873
|
-
"⪺",
|
|
9874
|
-
"&scne;",
|
|
9875
|
-
"⋩",
|
|
9876
|
-
"⨓",
|
|
9877
|
-
"≿",
|
|
9878
|
-
"с",
|
|
9879
|
-
"⋅",
|
|
9880
|
-
"⊡",
|
|
9881
|
-
"⩦",
|
|
9882
|
-
"⤥",
|
|
9883
|
-
"↘",
|
|
9884
|
-
"↘",
|
|
9885
|
-
"§",
|
|
9886
|
-
";",
|
|
9887
|
-
"⤩",
|
|
9888
|
-
"∖",
|
|
9889
|
-
"∖",
|
|
9890
|
-
"✶",
|
|
9891
|
-
"𝔰",
|
|
9892
|
-
"⌢",
|
|
9893
|
-
"♯",
|
|
9894
|
-
"щ",
|
|
9895
|
-
"ш",
|
|
9896
|
-
"&shortdownarrow;",
|
|
9897
|
-
"&shortleftarrow;",
|
|
9898
|
-
"∣",
|
|
9899
|
-
"∥",
|
|
9900
|
-
"&shortrightarrow;",
|
|
9901
|
-
"&shortuparrow;",
|
|
9902
|
-
"­",
|
|
9903
|
-
"σ",
|
|
9904
|
-
"ς",
|
|
9905
|
-
"ς",
|
|
9906
|
-
"∼",
|
|
9907
|
-
"⩪",
|
|
9908
|
-
"≃",
|
|
9909
|
-
"≃",
|
|
9910
|
-
"⪞",
|
|
9911
|
-
"&simge;",
|
|
9912
|
-
"⪝",
|
|
9913
|
-
"&simle;",
|
|
9914
|
-
"≆",
|
|
9915
|
-
"⨤",
|
|
9916
|
-
"⥲",
|
|
9917
|
-
"←",
|
|
9918
|
-
"&smallcircle;",
|
|
9919
|
-
"∖",
|
|
9920
|
-
"⨳",
|
|
9921
|
-
"⧤",
|
|
9922
|
-
"∣",
|
|
9923
|
-
"⌣",
|
|
9924
|
-
"⪪",
|
|
9925
|
-
"⪬",
|
|
9926
|
-
"⪬︀",
|
|
9927
|
-
"ь",
|
|
9928
|
-
"/",
|
|
9929
|
-
"⧄",
|
|
9930
|
-
"⌿",
|
|
9931
|
-
"𝕤",
|
|
9932
|
-
"♠",
|
|
9933
|
-
"♠",
|
|
9934
|
-
"∥",
|
|
9935
|
-
"⊓",
|
|
9936
|
-
"⊓︀",
|
|
9937
|
-
"⊔",
|
|
9938
|
-
"⊔︀",
|
|
9939
|
-
"&sqrt;",
|
|
9940
|
-
"⊏",
|
|
9941
|
-
"⊑",
|
|
9942
|
-
"⊏",
|
|
9943
|
-
"⊑",
|
|
9944
|
-
"⊐",
|
|
9945
|
-
"⊒",
|
|
9946
|
-
"⊐",
|
|
9947
|
-
"⊒",
|
|
9948
|
-
"□",
|
|
9949
|
-
"□",
|
|
9950
|
-
"&squareintersection;",
|
|
9951
|
-
"&squaresubset;",
|
|
9952
|
-
"&squaresubsetequal;",
|
|
9953
|
-
"&squaresuperset;",
|
|
9954
|
-
"&squaresupersetequal;",
|
|
9955
|
-
"&squareunion;",
|
|
9956
|
-
"▪",
|
|
9957
|
-
"▪",
|
|
9958
|
-
"→",
|
|
9959
|
-
"𝓈",
|
|
9960
|
-
"∖",
|
|
9961
|
-
"⌣",
|
|
9962
|
-
"⋆",
|
|
9963
|
-
"☆",
|
|
9964
|
-
"★",
|
|
9965
|
-
"ϵ",
|
|
9966
|
-
"ϕ",
|
|
9967
|
-
"¯",
|
|
9968
|
-
"⊂",
|
|
9969
|
-
"⪽",
|
|
9970
|
-
"⊆",
|
|
9971
|
-
"⫃",
|
|
9972
|
-
"⫁",
|
|
9973
|
-
"⊊",
|
|
9974
|
-
"⪿",
|
|
9975
|
-
"⥹",
|
|
9976
|
-
"⊂",
|
|
9977
|
-
"⊆",
|
|
9978
|
-
"⫅",
|
|
9979
|
-
"&subsetequal;",
|
|
9980
|
-
"⊊",
|
|
9981
|
-
"⫋",
|
|
9982
|
-
"⫇",
|
|
9983
|
-
"⫕",
|
|
9984
|
-
"⫓",
|
|
9985
|
-
"≻",
|
|
9986
|
-
"⪸",
|
|
9987
|
-
"≽",
|
|
9988
|
-
"&succeeds;",
|
|
9989
|
-
"&succeedsequal;",
|
|
9990
|
-
"&succeedsslantequal;",
|
|
9991
|
-
"&succeedstilde;",
|
|
9992
|
-
"⪰",
|
|
9993
|
-
"⪺",
|
|
9994
|
-
"⪶",
|
|
9995
|
-
"⋩",
|
|
9996
|
-
"≿",
|
|
9997
|
-
"&suchthat;",
|
|
9998
|
-
"∑",
|
|
9999
|
-
"♪",
|
|
10000
|
-
"¹",
|
|
10001
|
-
"²",
|
|
10002
|
-
"³",
|
|
10003
|
-
"⊃",
|
|
10004
|
-
"⪾",
|
|
10005
|
-
"⫘",
|
|
10006
|
-
"⊇",
|
|
10007
|
-
"⫄",
|
|
10008
|
-
"&superset;",
|
|
10009
|
-
"&supersetequal;",
|
|
10010
|
-
"⟉",
|
|
10011
|
-
"⫗",
|
|
10012
|
-
"⥻",
|
|
10013
|
-
"⫂",
|
|
10014
|
-
"⊋",
|
|
10015
|
-
"⫀",
|
|
10016
|
-
"⊃",
|
|
10017
|
-
"⊇",
|
|
10018
|
-
"⫆",
|
|
10019
|
-
"⊋",
|
|
10020
|
-
"⫌",
|
|
10021
|
-
"⫈",
|
|
10022
|
-
"⫔",
|
|
10023
|
-
"⫖",
|
|
10024
|
-
"⤦",
|
|
10025
|
-
"↙",
|
|
10026
|
-
"↙",
|
|
10027
|
-
"⤪",
|
|
10028
|
-
"ß",
|
|
10029
|
-
"&tab;",
|
|
10030
|
-
"⌖",
|
|
10031
|
-
"τ",
|
|
10032
|
-
"⎴",
|
|
10033
|
-
"ť",
|
|
10034
|
-
"ţ",
|
|
10035
|
-
"т",
|
|
10036
|
-
"⃛",
|
|
10037
|
-
"⌕",
|
|
10038
|
-
"𝔱",
|
|
10039
|
-
"∴",
|
|
10040
|
-
"∴",
|
|
10041
|
-
"θ",
|
|
10042
|
-
"ϑ",
|
|
10043
|
-
"ϑ",
|
|
10044
|
-
"≈",
|
|
10045
|
-
"∼",
|
|
10046
|
-
"&thickspace;",
|
|
10047
|
-
" ",
|
|
10048
|
-
"&thinspace;",
|
|
10049
|
-
"≈",
|
|
10050
|
-
"∼",
|
|
10051
|
-
"þ",
|
|
10052
|
-
"˜",
|
|
10053
|
-
"&tildeequal;",
|
|
10054
|
-
"&tildefullequal;",
|
|
10055
|
-
"&tildetilde;",
|
|
10056
|
-
"×",
|
|
10057
|
-
"⊠",
|
|
10058
|
-
"⨱",
|
|
10059
|
-
"⨰",
|
|
10060
|
-
"∭",
|
|
10061
|
-
"⤨",
|
|
10062
|
-
"⊤",
|
|
10063
|
-
"⌶",
|
|
10064
|
-
"⫱",
|
|
10065
|
-
"𝕥",
|
|
10066
|
-
"⫚",
|
|
10067
|
-
"⤩",
|
|
10068
|
-
"‴",
|
|
10069
|
-
"™",
|
|
10070
|
-
"▵",
|
|
10071
|
-
"▿",
|
|
10072
|
-
"◃",
|
|
10073
|
-
"⊴",
|
|
10074
|
-
"≜",
|
|
10075
|
-
"▹",
|
|
10076
|
-
"⊵",
|
|
10077
|
-
"◬",
|
|
10078
|
-
"≜",
|
|
10079
|
-
"⨺",
|
|
10080
|
-
"&tripledot;",
|
|
10081
|
-
"⨹",
|
|
10082
|
-
"⧍",
|
|
10083
|
-
"⨻",
|
|
10084
|
-
"⏢",
|
|
10085
|
-
"𝓉",
|
|
10086
|
-
"ц",
|
|
10087
|
-
"ћ",
|
|
10088
|
-
"ŧ",
|
|
10089
|
-
"≬",
|
|
10090
|
-
"↞",
|
|
10091
|
-
"↠",
|
|
10092
|
-
"ú",
|
|
10093
|
-
"↑",
|
|
10094
|
-
"&uarrocir;",
|
|
10095
|
-
"ў",
|
|
10096
|
-
"ŭ",
|
|
10097
|
-
"û",
|
|
10098
|
-
"у",
|
|
10099
|
-
"⇅",
|
|
10100
|
-
"ű",
|
|
10101
|
-
"⥮",
|
|
10102
|
-
"⥾",
|
|
10103
|
-
"𝔲",
|
|
10104
|
-
"ù",
|
|
10105
|
-
"&uhar;",
|
|
10106
|
-
"↿",
|
|
10107
|
-
"↾",
|
|
10108
|
-
"▀",
|
|
10109
|
-
"⌜",
|
|
10110
|
-
"⌜",
|
|
10111
|
-
"⌏",
|
|
10112
|
-
"◸",
|
|
10113
|
-
"ū",
|
|
10114
|
-
"¨",
|
|
10115
|
-
"&underbar;",
|
|
10116
|
-
"&underbrace;",
|
|
10117
|
-
"&underbracket;",
|
|
10118
|
-
"&underparenthesis;",
|
|
10119
|
-
"&union;",
|
|
10120
|
-
"&unionplus;",
|
|
10121
|
-
"ų",
|
|
10122
|
-
"𝕦",
|
|
10123
|
-
"↑",
|
|
10124
|
-
"&uparrowbar;",
|
|
10125
|
-
"&uparrowdownarrow;",
|
|
10126
|
-
"↕",
|
|
10127
|
-
"&upequilibrium;",
|
|
10128
|
-
"↿",
|
|
10129
|
-
"↾",
|
|
10130
|
-
"⊎",
|
|
10131
|
-
"&upperleftarrow;",
|
|
10132
|
-
"&upperrightarrow;",
|
|
10133
|
-
"υ",
|
|
10134
|
-
"ϒ",
|
|
10135
|
-
"υ",
|
|
10136
|
-
"&uptee;",
|
|
10137
|
-
"&upteearrow;",
|
|
10138
|
-
"⇈",
|
|
10139
|
-
"⌝",
|
|
10140
|
-
"⌝",
|
|
10141
|
-
"⌎",
|
|
10142
|
-
"ů",
|
|
10143
|
-
"◹",
|
|
10144
|
-
"𝓊",
|
|
10145
|
-
"⋰",
|
|
10146
|
-
"ũ",
|
|
10147
|
-
"▵",
|
|
10148
|
-
"▴",
|
|
10149
|
-
"⇈",
|
|
10150
|
-
"ü",
|
|
10151
|
-
"⦧",
|
|
10152
|
-
"⦜",
|
|
10153
|
-
"ϵ",
|
|
10154
|
-
"ϰ",
|
|
10155
|
-
"∅",
|
|
10156
|
-
"ϕ",
|
|
10157
|
-
"ϖ",
|
|
10158
|
-
"∝",
|
|
10159
|
-
"↕",
|
|
10160
|
-
"ϱ",
|
|
10161
|
-
"ς",
|
|
10162
|
-
"⊊︀",
|
|
10163
|
-
"⫋︀",
|
|
10164
|
-
"⊋︀",
|
|
10165
|
-
"⫌︀",
|
|
10166
|
-
"ϑ",
|
|
10167
|
-
"⊲",
|
|
10168
|
-
"⊳",
|
|
10169
|
-
"&vbar;",
|
|
10170
|
-
"&vbarv;",
|
|
10171
|
-
"в",
|
|
10172
|
-
"⊢",
|
|
10173
|
-
"&vdashl;",
|
|
10174
|
-
"∨",
|
|
10175
|
-
"⊻",
|
|
10176
|
-
"≚",
|
|
10177
|
-
"⋮",
|
|
10178
|
-
"|",
|
|
10179
|
-
"|",
|
|
10180
|
-
"&verticalbar;",
|
|
10181
|
-
"&verticalline;",
|
|
10182
|
-
"&verticalseparator;",
|
|
10183
|
-
"&verticaltilde;",
|
|
10184
|
-
"&verythinspace;",
|
|
10185
|
-
"𝔳",
|
|
10186
|
-
"⊲",
|
|
10187
|
-
"⊂⃒",
|
|
10188
|
-
"⊃⃒",
|
|
10189
|
-
"𝕧",
|
|
10190
|
-
"∝",
|
|
10191
|
-
"⊳",
|
|
10192
|
-
"𝓋",
|
|
10193
|
-
"⊊︀",
|
|
10194
|
-
"⊋︀",
|
|
10195
|
-
"&vvdash;",
|
|
10196
|
-
"⦚",
|
|
10197
|
-
"ŵ",
|
|
10198
|
-
"⩟",
|
|
10199
|
-
"∧",
|
|
10200
|
-
"≙",
|
|
10201
|
-
"℘",
|
|
10202
|
-
"𝔴",
|
|
10203
|
-
"𝕨",
|
|
10204
|
-
"℘",
|
|
10205
|
-
"≀",
|
|
10206
|
-
"≀",
|
|
10207
|
-
"𝓌",
|
|
10208
|
-
"⋂",
|
|
10209
|
-
"◯",
|
|
10210
|
-
"⋃",
|
|
10211
|
-
"▽",
|
|
10212
|
-
"𝔵",
|
|
10213
|
-
"⟷",
|
|
10214
|
-
"ξ",
|
|
10215
|
-
"⟵",
|
|
10216
|
-
"⟼",
|
|
10217
|
-
"⋻",
|
|
10218
|
-
"⨀",
|
|
10219
|
-
"𝕩",
|
|
10220
|
-
"⨁",
|
|
10221
|
-
"⨂",
|
|
10222
|
-
"⟶",
|
|
10223
|
-
"𝓍",
|
|
10224
|
-
"⨆",
|
|
10225
|
-
"⨄",
|
|
10226
|
-
"△",
|
|
10227
|
-
"⋁",
|
|
10228
|
-
"⋀",
|
|
10229
|
-
"ý",
|
|
10230
|
-
"я",
|
|
10231
|
-
"ŷ",
|
|
10232
|
-
"ы",
|
|
10233
|
-
"¥",
|
|
10234
|
-
"𝔶",
|
|
10235
|
-
"ї",
|
|
10236
|
-
"𝕪",
|
|
10237
|
-
"𝓎",
|
|
10238
|
-
"ю",
|
|
10239
|
-
"ÿ",
|
|
10240
|
-
"ź",
|
|
10241
|
-
"ž",
|
|
10242
|
-
"з",
|
|
10243
|
-
"ż",
|
|
10244
|
-
"ℨ",
|
|
10245
|
-
"&zerowidthspace;",
|
|
10246
|
-
"ζ",
|
|
10247
|
-
"𝔷",
|
|
10248
|
-
"ж",
|
|
10249
|
-
"⇝",
|
|
10250
|
-
"𝕫",
|
|
10251
|
-
"𝓏",
|
|
10252
|
-
"‍",
|
|
10253
|
-
"‌"
|
|
10254
|
-
];
|
|
10255
|
-
|
|
10256
8055
|
const regexp$1 = /&([a-z0-9]+|#x?[0-9a-f]+);/gi;
|
|
10257
8056
|
class UnknownCharReference extends Rule {
|
|
10258
8057
|
documentation(context) {
|
|
10259
8058
|
return {
|
|
10260
8059
|
description: `HTML defines a set of valid character references but ${context || "this"} is not a valid one.`,
|
|
10261
|
-
url:
|
|
8060
|
+
url: "https://html-validate.org/rules/unrecognized-char-ref.html",
|
|
10262
8061
|
};
|
|
10263
8062
|
}
|
|
10264
8063
|
setup() {
|
|
@@ -10343,7 +8142,7 @@ class ValidID extends Rule {
|
|
|
10343
8142
|
" - ID must not contain any whitespace characters",
|
|
10344
8143
|
...relaxedDescription,
|
|
10345
8144
|
].join("\n"),
|
|
10346
|
-
url:
|
|
8145
|
+
url: "https://html-validate.org/rules/valid-id.html",
|
|
10347
8146
|
};
|
|
10348
8147
|
}
|
|
10349
8148
|
setup() {
|
|
@@ -10418,7 +8217,7 @@ class Void extends Rule {
|
|
|
10418
8217
|
documentation() {
|
|
10419
8218
|
return {
|
|
10420
8219
|
description: "HTML void elements cannot have any content and must not have an end tag.",
|
|
10421
|
-
url:
|
|
8220
|
+
url: "https://html-validate.org/rules/void.html",
|
|
10422
8221
|
};
|
|
10423
8222
|
}
|
|
10424
8223
|
setup() {
|
|
@@ -10474,7 +8273,7 @@ class VoidContent extends Rule {
|
|
|
10474
8273
|
documentation(tagName) {
|
|
10475
8274
|
const doc = {
|
|
10476
8275
|
description: "HTML void elements cannot have any content and must not have content or end tag.",
|
|
10477
|
-
url:
|
|
8276
|
+
url: "https://html-validate.org/rules/void-content.html",
|
|
10478
8277
|
};
|
|
10479
8278
|
if (tagName) {
|
|
10480
8279
|
doc.description = `<${tagName}> is a void element and must not have content or end tag.`;
|
|
@@ -10521,7 +8320,7 @@ class VoidStyle extends Rule {
|
|
|
10521
8320
|
documentation(context) {
|
|
10522
8321
|
const doc = {
|
|
10523
8322
|
description: "The current configuration requires a specific style for ending void elements.",
|
|
10524
|
-
url:
|
|
8323
|
+
url: "https://html-validate.org/rules/void-style.html",
|
|
10525
8324
|
};
|
|
10526
8325
|
if (context) {
|
|
10527
8326
|
const [desc, end] = styleDescription(context.style);
|
|
@@ -10591,7 +8390,7 @@ class H30 extends Rule {
|
|
|
10591
8390
|
documentation() {
|
|
10592
8391
|
return {
|
|
10593
8392
|
description: "WCAG 2.1 requires each `<a>` anchor link to have a text describing the purpose of the link using either plain text or an `<img>` with the `alt` attribute set.",
|
|
10594
|
-
url:
|
|
8393
|
+
url: "https://html-validate.org/rules/wcag/h30.html",
|
|
10595
8394
|
};
|
|
10596
8395
|
}
|
|
10597
8396
|
setup() {
|
|
@@ -10627,7 +8426,7 @@ class H32 extends Rule {
|
|
|
10627
8426
|
documentation() {
|
|
10628
8427
|
return {
|
|
10629
8428
|
description: "WCAG 2.1 requires each `<form>` element to have at least one submit button.",
|
|
10630
|
-
url:
|
|
8429
|
+
url: "https://html-validate.org/rules/wcag/h32.html",
|
|
10631
8430
|
};
|
|
10632
8431
|
}
|
|
10633
8432
|
setup() {
|
|
@@ -10684,7 +8483,7 @@ class H36 extends Rule {
|
|
|
10684
8483
|
documentation() {
|
|
10685
8484
|
return {
|
|
10686
8485
|
description: 'WCAG 2.1 requires all images used as submit buttons to have a textual description using the alt attribute. The alt text cannot be empty (`alt=""`).',
|
|
10687
|
-
url:
|
|
8486
|
+
url: "https://html-validate.org/rules/wcag/h36.html",
|
|
10688
8487
|
};
|
|
10689
8488
|
}
|
|
10690
8489
|
setup() {
|
|
@@ -10754,7 +8553,7 @@ class H37 extends Rule {
|
|
|
10754
8553
|
documentation() {
|
|
10755
8554
|
return {
|
|
10756
8555
|
description: "Both HTML5 and WCAG 2.0 requires images to have a alternative text for each image.",
|
|
10757
|
-
url:
|
|
8556
|
+
url: "https://html-validate.org/rules/wcag/h37.html",
|
|
10758
8557
|
};
|
|
10759
8558
|
}
|
|
10760
8559
|
setup() {
|
|
@@ -10795,7 +8594,7 @@ class H67 extends Rule {
|
|
|
10795
8594
|
documentation() {
|
|
10796
8595
|
return {
|
|
10797
8596
|
description: "A decorative image cannot have a title attribute. Either remove `title` or add a descriptive `alt` text.",
|
|
10798
|
-
url:
|
|
8597
|
+
url: "https://html-validate.org/rules/wcag/h67.html",
|
|
10799
8598
|
};
|
|
10800
8599
|
}
|
|
10801
8600
|
setup() {
|
|
@@ -10824,7 +8623,7 @@ class H71 extends Rule {
|
|
|
10824
8623
|
documentation() {
|
|
10825
8624
|
return {
|
|
10826
8625
|
description: "H71: Providing a description for groups of form controls using fieldset and legend elements",
|
|
10827
|
-
url:
|
|
8626
|
+
url: "https://html-validate.org/rules/wcag/h71.html",
|
|
10828
8627
|
};
|
|
10829
8628
|
}
|
|
10830
8629
|
setup() {
|
|
@@ -11406,15 +9205,14 @@ class Config {
|
|
|
11406
9205
|
metaTable.loadFromObject(entry);
|
|
11407
9206
|
continue;
|
|
11408
9207
|
}
|
|
11409
|
-
let filename;
|
|
11410
9208
|
/* try searching builtin metadata */
|
|
11411
|
-
|
|
11412
|
-
if (
|
|
11413
|
-
metaTable.
|
|
9209
|
+
const bundled = bundledElements[entry];
|
|
9210
|
+
if (bundled) {
|
|
9211
|
+
metaTable.loadFromObject(bundled);
|
|
11414
9212
|
continue;
|
|
11415
9213
|
}
|
|
11416
9214
|
/* try as regular file */
|
|
11417
|
-
filename = entry.replace("<rootDir>", this.rootDir);
|
|
9215
|
+
const filename = entry.replace("<rootDir>", this.rootDir);
|
|
11418
9216
|
if (fs.existsSync(filename)) {
|
|
11419
9217
|
metaTable.loadFromFile(filename);
|
|
11420
9218
|
continue;
|
|
@@ -13148,6 +10946,14 @@ class HtmlValidate {
|
|
|
13148
10946
|
}
|
|
13149
10947
|
}
|
|
13150
10948
|
|
|
10949
|
+
/* generated file, changes will be overwritten */
|
|
10950
|
+
/** @public */
|
|
10951
|
+
const name = "html-validate";
|
|
10952
|
+
/** @public */
|
|
10953
|
+
const version = "7.8.0";
|
|
10954
|
+
/** @public */
|
|
10955
|
+
const bugs = "https://gitlab.com/html-validate/html-validate/issues/new";
|
|
10956
|
+
|
|
13151
10957
|
const defaults$1 = {
|
|
13152
10958
|
silent: false,
|
|
13153
10959
|
version,
|
|
@@ -13573,17 +11379,10 @@ const availableFormatters = {
|
|
|
13573
11379
|
stylish: formatter$1,
|
|
13574
11380
|
text: formatter,
|
|
13575
11381
|
};
|
|
13576
|
-
/**
|
|
13577
|
-
* Get formatter function by name.
|
|
13578
|
-
*
|
|
13579
|
-
* @internal
|
|
13580
|
-
* @param name - Name of formatter.
|
|
13581
|
-
* @returns Formatter function or null if it doesn't exist.
|
|
13582
|
-
*/
|
|
13583
11382
|
function getFormatter(name) {
|
|
13584
11383
|
var _a;
|
|
13585
11384
|
return (_a = availableFormatters[name]) !== null && _a !== void 0 ? _a : null;
|
|
13586
11385
|
}
|
|
13587
11386
|
|
|
13588
|
-
export { Config as C, DynamicValue as D, EventHandler as E, FileSystemConfigLoader as F, HtmlValidate as H, MetaTable as M, NodeClosed as N, Parser as P, Rule as R, Severity as S, TextNode as T, UserError as U, WrappedError as W, ConfigError as a, ConfigLoader as b, StaticConfigLoader as c, HtmlElement as d, SchemaValidationError as e, NestedError as f, MetaCopyableProperty as g,
|
|
11387
|
+
export { Config as C, DynamicValue as D, EventHandler as E, FileSystemConfigLoader as F, HtmlValidate as H, MetaTable as M, NodeClosed as N, Parser as P, Rule as R, Severity as S, TextNode as T, UserError as U, WrappedError as W, ConfigError as a, ConfigLoader as b, StaticConfigLoader as c, HtmlElement as d, SchemaValidationError as e, NestedError as f, MetaCopyableProperty as g, Reporter as h, TemplateExtractor as i, getFormatter as j, ensureError as k, legacyRequire as l, configDataFromFile as m, compatibilityCheck as n, codeframe as o, presets as p, isTextNode as q, ruleExists as r, sliceLocation as s, isElementNode as t, generateIdSelector as u, version as v, name as w, bugs as x };
|
|
13589
11388
|
//# sourceMappingURL=core.js.map
|