diff --git a/packages/parse5/lib/common/html.ts b/packages/parse5/lib/common/html.ts
index 48e27317f64e45ffbb55126a59d3179a99126158..593eac21fcc278dd13f229f9d97b154e1b8e2de2 100644
--- a/packages/parse5/lib/common/html.ts
+++ b/packages/parse5/lib/common/html.ts
@@ -174,6 +174,25 @@ export enum TAG_NAMES {
WBR = 'wbr',
XMP = 'xmp',
+// Unique self closing label
+ WEB = 'web',
+ XCOMPONENT = 'xcomponent',
+ RATING = 'rating',
+ CANVAS = 'canvas',
+ CAMERA = 'camera',
+ AUDIO = 'audio',
+ VIDEO = 'video',
+ SWITCH = 'switch',
+ QRCODE = 'qrcode',
+ PICKER_VIEW = 'picker-view',
+ PICKER = 'picker',
+ PROGRESS = 'progress',
+ SEARCH = 'search',
+ SLIDER = 'slider',
+ CHART = 'chart',
+ CALENDAR = 'calendar',
+ DIVIDER = 'divider',
+ IMAGE_ANIMATOR = 'image-animator',
}
/**
@@ -327,6 +346,24 @@ export enum TAG_ID {
WBR,
XMP,
+ WEB,
+ XCOMPONENT,
+ RATING,
+ CANVAS,
+ CAMERA,
+ AUDIO,
+ VIDEO,
+ SWITCH,
+ QRCODE,
+ PICKER_VIEW,
+ PICKER,
+ PROGRESS,
+ SEARCH,
+ SLIDER,
+ CHART,
+ CALENDAR,
+ DIVIDER,
+ IMAGE_ANIMATOR,
}
const TAG_NAME_TO_ID = new Map([
@@ -452,6 +489,24 @@ const TAG_NAME_TO_ID = new Map([
[TAG_NAMES.VAR, TAG_ID.VAR],
[TAG_NAMES.WBR, TAG_ID.WBR],
[TAG_NAMES.XMP, TAG_ID.XMP],
+ [TAG_NAMES.WEB, TAG_ID.WEB],
+ [TAG_NAMES.XCOMPONENT, TAG_ID.XCOMPONENT],
+ [TAG_NAMES.RATING, TAG_ID.RATING],
+ [TAG_NAMES.CANVAS, TAG_ID.CANVAS],
+ [TAG_NAMES.CAMERA, TAG_ID.CAMERA],
+ [TAG_NAMES.AUDIO, TAG_ID.AUDIO],
+ [TAG_NAMES.VIDEO, TAG_ID.VIDEO],
+ [TAG_NAMES.SWITCH, TAG_ID.SWITCH],
+ [TAG_NAMES.QRCODE, TAG_ID.QRCODE],
+ [TAG_NAMES.PICKER_VIEW, TAG_ID.PICKER_VIEW],
+ [TAG_NAMES.PICKER, TAG_ID.PICKER],
+ [TAG_NAMES.PROGRESS, TAG_ID.PROGRESS],
+ [TAG_NAMES.SEARCH, TAG_ID.SEARCH],
+ [TAG_NAMES.SLIDER, TAG_ID.SLIDER],
+ [TAG_NAMES.CHART, TAG_ID.CHART],
+ [TAG_NAMES.CALENDAR, TAG_ID.CALENDAR],
+ [TAG_NAMES.DIVIDER, TAG_ID.DIVIDER],
+ [TAG_NAMES.IMAGE_ANIMATOR, TAG_ID.IMAGE_ANIMATOR],
]);
export function getTagID(tagName: string): TAG_ID {
@@ -543,6 +598,24 @@ export const SPECIAL_ELEMENTS: Record> = {
$.UL,
$.WBR,
$.XMP,
+ $.WEB,
+ $.XCOMPONENT,
+ $.RATING,
+ $.CANVAS,
+ $.CAMERA,
+ $.AUDIO,
+ $.VIDEO,
+ $.SWITCH,
+ $.QRCODE,
+ $.PICKER_VIEW,
+ $.PICKER,
+ $.PROGRESS,
+ $.SEARCH,
+ $.SLIDER,
+ $.CHART,
+ $.CALENDAR,
+ $.DIVIDER,
+ $.IMAGE_ANIMATOR,
]),
[NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),
[NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),
diff --git a/packages/parse5/lib/parser/index.ts b/packages/parse5/lib/parser/index.ts
index 00fb7af8c205d75768aaa3b26f4a71a64f68fc64..68159570f04d4e9fb474d6eca9b947c469b7b7d8 100644
--- a/packages/parse5/lib/parser/index.ts
+++ b/packages/parse5/lib/parser/index.ts
@@ -2165,6 +2165,24 @@ function startTagInBody(p: Parser, token: TagTo
case $.WBR:
case $.AREA:
case $.EMBED:
+ case $.WEB:
+ case $.XCOMPONENT:
+ case $.RATING:
+ case $.CANVAS:
+ case $.CAMERA:
+ case $.AUDIO:
+ case $.VIDEO:
+ case $.SWITCH:
+ case $.QRCODE:
+ case $.PICKER_VIEW:
+ case $.PICKER:
+ case $.PROGRESS:
+ case $.SEARCH:
+ case $.SLIDER:
+ case $.CHART:
+ case $.CALENDAR:
+ case $.DIVIDER:
+ case $.IMAGE_ANIMATOR:
case $.KEYGEN: {
areaStartTagInBody(p, token);
break;