123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.isIntegrationPoint = exports.adjustTokenSVGTagName = exports.adjustTokenXMLAttrs = exports.adjustTokenSVGAttrs = exports.adjustTokenMathMLAttrs = exports.causesExit = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = void 0;
- const html_js_1 = require("./html.js");
- //MIME types
- const MIME_TYPES = {
- TEXT_HTML: 'text/html',
- APPLICATION_XML: 'application/xhtml+xml',
- };
- //Attributes
- const DEFINITION_URL_ATTR = 'definitionurl';
- const ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';
- const SVG_ATTRS_ADJUSTMENT_MAP = new Map([
- 'attributeName',
- 'attributeType',
- 'baseFrequency',
- 'baseProfile',
- 'calcMode',
- 'clipPathUnits',
- 'diffuseConstant',
- 'edgeMode',
- 'filterUnits',
- 'glyphRef',
- 'gradientTransform',
- 'gradientUnits',
- 'kernelMatrix',
- 'kernelUnitLength',
- 'keyPoints',
- 'keySplines',
- 'keyTimes',
- 'lengthAdjust',
- 'limitingConeAngle',
- 'markerHeight',
- 'markerUnits',
- 'markerWidth',
- 'maskContentUnits',
- 'maskUnits',
- 'numOctaves',
- 'pathLength',
- 'patternContentUnits',
- 'patternTransform',
- 'patternUnits',
- 'pointsAtX',
- 'pointsAtY',
- 'pointsAtZ',
- 'preserveAlpha',
- 'preserveAspectRatio',
- 'primitiveUnits',
- 'refX',
- 'refY',
- 'repeatCount',
- 'repeatDur',
- 'requiredExtensions',
- 'requiredFeatures',
- 'specularConstant',
- 'specularExponent',
- 'spreadMethod',
- 'startOffset',
- 'stdDeviation',
- 'stitchTiles',
- 'surfaceScale',
- 'systemLanguage',
- 'tableValues',
- 'targetX',
- 'targetY',
- 'textLength',
- 'viewBox',
- 'viewTarget',
- 'xChannelSelector',
- 'yChannelSelector',
- 'zoomAndPan',
- ].map((attr) => [attr.toLowerCase(), attr]));
- const XML_ATTRS_ADJUSTMENT_MAP = new Map([
- ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: html_js_1.NS.XLINK }],
- ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: html_js_1.NS.XLINK }],
- ['xlink:href', { prefix: 'xlink', name: 'href', namespace: html_js_1.NS.XLINK }],
- ['xlink:role', { prefix: 'xlink', name: 'role', namespace: html_js_1.NS.XLINK }],
- ['xlink:show', { prefix: 'xlink', name: 'show', namespace: html_js_1.NS.XLINK }],
- ['xlink:title', { prefix: 'xlink', name: 'title', namespace: html_js_1.NS.XLINK }],
- ['xlink:type', { prefix: 'xlink', name: 'type', namespace: html_js_1.NS.XLINK }],
- ['xml:base', { prefix: 'xml', name: 'base', namespace: html_js_1.NS.XML }],
- ['xml:lang', { prefix: 'xml', name: 'lang', namespace: html_js_1.NS.XML }],
- ['xml:space', { prefix: 'xml', name: 'space', namespace: html_js_1.NS.XML }],
- ['xmlns', { prefix: '', name: 'xmlns', namespace: html_js_1.NS.XMLNS }],
- ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: html_js_1.NS.XMLNS }],
- ]);
- //SVG tag names adjustment map
- exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([
- 'altGlyph',
- 'altGlyphDef',
- 'altGlyphItem',
- 'animateColor',
- 'animateMotion',
- 'animateTransform',
- 'clipPath',
- 'feBlend',
- 'feColorMatrix',
- 'feComponentTransfer',
- 'feComposite',
- 'feConvolveMatrix',
- 'feDiffuseLighting',
- 'feDisplacementMap',
- 'feDistantLight',
- 'feFlood',
- 'feFuncA',
- 'feFuncB',
- 'feFuncG',
- 'feFuncR',
- 'feGaussianBlur',
- 'feImage',
- 'feMerge',
- 'feMergeNode',
- 'feMorphology',
- 'feOffset',
- 'fePointLight',
- 'feSpecularLighting',
- 'feSpotLight',
- 'feTile',
- 'feTurbulence',
- 'foreignObject',
- 'glyphRef',
- 'linearGradient',
- 'radialGradient',
- 'textPath',
- ].map((tn) => [tn.toLowerCase(), tn]));
- //Tags that causes exit from foreign content
- const EXITS_FOREIGN_CONTENT = new Set([
- html_js_1.TAG_ID.B,
- html_js_1.TAG_ID.BIG,
- html_js_1.TAG_ID.BLOCKQUOTE,
- html_js_1.TAG_ID.BODY,
- html_js_1.TAG_ID.BR,
- html_js_1.TAG_ID.CENTER,
- html_js_1.TAG_ID.CODE,
- html_js_1.TAG_ID.DD,
- html_js_1.TAG_ID.DIV,
- html_js_1.TAG_ID.DL,
- html_js_1.TAG_ID.DT,
- html_js_1.TAG_ID.EM,
- html_js_1.TAG_ID.EMBED,
- html_js_1.TAG_ID.H1,
- html_js_1.TAG_ID.H2,
- html_js_1.TAG_ID.H3,
- html_js_1.TAG_ID.H4,
- html_js_1.TAG_ID.H5,
- html_js_1.TAG_ID.H6,
- html_js_1.TAG_ID.HEAD,
- html_js_1.TAG_ID.HR,
- html_js_1.TAG_ID.I,
- html_js_1.TAG_ID.IMG,
- html_js_1.TAG_ID.LI,
- html_js_1.TAG_ID.LISTING,
- html_js_1.TAG_ID.MENU,
- html_js_1.TAG_ID.META,
- html_js_1.TAG_ID.NOBR,
- html_js_1.TAG_ID.OL,
- html_js_1.TAG_ID.P,
- html_js_1.TAG_ID.PRE,
- html_js_1.TAG_ID.RUBY,
- html_js_1.TAG_ID.S,
- html_js_1.TAG_ID.SMALL,
- html_js_1.TAG_ID.SPAN,
- html_js_1.TAG_ID.STRONG,
- html_js_1.TAG_ID.STRIKE,
- html_js_1.TAG_ID.SUB,
- html_js_1.TAG_ID.SUP,
- html_js_1.TAG_ID.TABLE,
- html_js_1.TAG_ID.TT,
- html_js_1.TAG_ID.U,
- html_js_1.TAG_ID.UL,
- html_js_1.TAG_ID.VAR,
- ]);
- //Check exit from foreign content
- function causesExit(startTagToken) {
- const tn = startTagToken.tagID;
- const isFontWithAttrs = tn === html_js_1.TAG_ID.FONT &&
- startTagToken.attrs.some(({ name }) => name === html_js_1.ATTRS.COLOR || name === html_js_1.ATTRS.SIZE || name === html_js_1.ATTRS.FACE);
- return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);
- }
- exports.causesExit = causesExit;
- //Token adjustments
- function adjustTokenMathMLAttrs(token) {
- for (let i = 0; i < token.attrs.length; i++) {
- if (token.attrs[i].name === DEFINITION_URL_ATTR) {
- token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;
- break;
- }
- }
- }
- exports.adjustTokenMathMLAttrs = adjustTokenMathMLAttrs;
- function adjustTokenSVGAttrs(token) {
- for (let i = 0; i < token.attrs.length; i++) {
- const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
- if (adjustedAttrName != null) {
- token.attrs[i].name = adjustedAttrName;
- }
- }
- }
- exports.adjustTokenSVGAttrs = adjustTokenSVGAttrs;
- function adjustTokenXMLAttrs(token) {
- for (let i = 0; i < token.attrs.length; i++) {
- const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
- if (adjustedAttrEntry) {
- token.attrs[i].prefix = adjustedAttrEntry.prefix;
- token.attrs[i].name = adjustedAttrEntry.name;
- token.attrs[i].namespace = adjustedAttrEntry.namespace;
- }
- }
- }
- exports.adjustTokenXMLAttrs = adjustTokenXMLAttrs;
- function adjustTokenSVGTagName(token) {
- const adjustedTagName = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);
- if (adjustedTagName != null) {
- token.tagName = adjustedTagName;
- token.tagID = (0, html_js_1.getTagID)(token.tagName);
- }
- }
- exports.adjustTokenSVGTagName = adjustTokenSVGTagName;
- //Integration points
- function isMathMLTextIntegrationPoint(tn, ns) {
- return ns === html_js_1.NS.MATHML && (tn === html_js_1.TAG_ID.MI || tn === html_js_1.TAG_ID.MO || tn === html_js_1.TAG_ID.MN || tn === html_js_1.TAG_ID.MS || tn === html_js_1.TAG_ID.MTEXT);
- }
- function isHtmlIntegrationPoint(tn, ns, attrs) {
- if (ns === html_js_1.NS.MATHML && tn === html_js_1.TAG_ID.ANNOTATION_XML) {
- for (let i = 0; i < attrs.length; i++) {
- if (attrs[i].name === html_js_1.ATTRS.ENCODING) {
- const value = attrs[i].value.toLowerCase();
- return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;
- }
- }
- }
- return ns === html_js_1.NS.SVG && (tn === html_js_1.TAG_ID.FOREIGN_OBJECT || tn === html_js_1.TAG_ID.DESC || tn === html_js_1.TAG_ID.TITLE);
- }
- function isIntegrationPoint(tn, ns, attrs, foreignNS) {
- return (((!foreignNS || foreignNS === html_js_1.NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||
- ((!foreignNS || foreignNS === html_js_1.NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));
- }
- exports.isIntegrationPoint = isIntegrationPoint;
- //# sourceMappingURL=foreign-content.js.map
|