1b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik'use strict'; 2b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 3b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar Tokenizer = require('../tokenization/tokenizer'), 4b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik HTML = require('./html'); 5b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 6b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//Aliases 7b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar $ = HTML.TAG_NAMES, 8b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik NS = HTML.NAMESPACES, 9b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ATTRS = HTML.ATTRS; 10b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 11b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 12b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//MIME types 13b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar MIME_TYPES = { 14b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik TEXT_HTML: 'text/html', 15b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik APPLICATION_XML: 'application/xhtml+xml' 16b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 17b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 18b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//Attributes 19b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar DEFINITION_URL_ATTR = 'definitionurl', 20b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL', 21b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik SVG_ATTRS_ADJUSTMENT_MAP = { 22b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'attributename': 'attributeName', 23b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'attributetype': 'attributeType', 24b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'basefrequency': 'baseFrequency', 25b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'baseprofile': 'baseProfile', 26b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'calcmode': 'calcMode', 27b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'clippathunits': 'clipPathUnits', 28b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'contentscripttype': 'contentScriptType', 29b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'contentstyletype': 'contentStyleType', 30b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'diffuseconstant': 'diffuseConstant', 31b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'edgemode': 'edgeMode', 32b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'externalresourcesrequired': 'externalResourcesRequired', 33b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'filterres': 'filterRes', 34b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'filterunits': 'filterUnits', 35b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'glyphref': 'glyphRef', 36b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'gradienttransform': 'gradientTransform', 37b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'gradientunits': 'gradientUnits', 38b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'kernelmatrix': 'kernelMatrix', 39b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'kernelunitlength': 'kernelUnitLength', 40b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'keypoints': 'keyPoints', 41b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'keysplines': 'keySplines', 42b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'keytimes': 'keyTimes', 43b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'lengthadjust': 'lengthAdjust', 44b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'limitingconeangle': 'limitingConeAngle', 45b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'markerheight': 'markerHeight', 46b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'markerunits': 'markerUnits', 47b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'markerwidth': 'markerWidth', 48b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'maskcontentunits': 'maskContentUnits', 49b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'maskunits': 'maskUnits', 50b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'numoctaves': 'numOctaves', 51b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'pathlength': 'pathLength', 52b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'patterncontentunits': 'patternContentUnits', 53b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'patterntransform': 'patternTransform', 54b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'patternunits': 'patternUnits', 55b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'pointsatx': 'pointsAtX', 56b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'pointsaty': 'pointsAtY', 57b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'pointsatz': 'pointsAtZ', 58b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'preservealpha': 'preserveAlpha', 59b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'preserveaspectratio': 'preserveAspectRatio', 60b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'primitiveunits': 'primitiveUnits', 61b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'refx': 'refX', 62b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'refy': 'refY', 63b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'repeatcount': 'repeatCount', 64b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'repeatdur': 'repeatDur', 65b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'requiredextensions': 'requiredExtensions', 66b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'requiredfeatures': 'requiredFeatures', 67b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'specularconstant': 'specularConstant', 68b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'specularexponent': 'specularExponent', 69b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'spreadmethod': 'spreadMethod', 70b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'startoffset': 'startOffset', 71b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'stddeviation': 'stdDeviation', 72b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'stitchtiles': 'stitchTiles', 73b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'surfacescale': 'surfaceScale', 74b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'systemlanguage': 'systemLanguage', 75b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'tablevalues': 'tableValues', 76b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'targetx': 'targetX', 77b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'targety': 'targetY', 78b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'textlength': 'textLength', 79b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'viewbox': 'viewBox', 80b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'viewtarget': 'viewTarget', 81b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xchannelselector': 'xChannelSelector', 82b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'ychannelselector': 'yChannelSelector', 83b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'zoomandpan': 'zoomAndPan' 84b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik }, 85b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik XML_ATTRS_ADJUSTMENT_MAP = { 86b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xlink:actuate': {prefix: 'xlink', name: 'actuate', namespace: NS.XLINK}, 87b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xlink:arcrole': {prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK}, 88b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xlink:href': {prefix: 'xlink', name: 'href', namespace: NS.XLINK}, 89b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xlink:role': {prefix: 'xlink', name: 'role', namespace: NS.XLINK}, 90b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xlink:show': {prefix: 'xlink', name: 'show', namespace: NS.XLINK}, 91b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xlink:title': {prefix: 'xlink', name: 'title', namespace: NS.XLINK}, 92b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xlink:type': {prefix: 'xlink', name: 'type', namespace: NS.XLINK}, 93b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xml:base': {prefix: 'xml', name: 'base', namespace: NS.XML}, 94b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xml:lang': {prefix: 'xml', name: 'lang', namespace: NS.XML}, 95b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xml:space': {prefix: 'xml', name: 'space', namespace: NS.XML}, 96b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xmlns': {prefix: '', name: 'xmlns', namespace: NS.XMLNS}, 97b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'xmlns:xlink': {prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS} 98b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 99b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik }; 100b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 101b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//SVG tag names adjustment map 102b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar SVG_TAG_NAMES_ADJUSTMENT_MAP = { 103b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'altglyph': 'altGlyph', 104b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'altglyphdef': 'altGlyphDef', 105b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'altglyphitem': 'altGlyphItem', 106b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'animatecolor': 'animateColor', 107b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'animatemotion': 'animateMotion', 108b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'animatetransform': 'animateTransform', 109b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'clippath': 'clipPath', 110b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'feblend': 'feBlend', 111b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fecolormatrix': 'feColorMatrix', 112b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fecomponenttransfer': 'feComponentTransfer', 113b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fecomposite': 'feComposite', 114b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'feconvolvematrix': 'feConvolveMatrix', 115b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fediffuselighting': 'feDiffuseLighting', 116b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fedisplacementmap': 'feDisplacementMap', 117b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fedistantlight': 'feDistantLight', 118b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'feflood': 'feFlood', 119b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fefunca': 'feFuncA', 120b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fefuncb': 'feFuncB', 121b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fefuncg': 'feFuncG', 122b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fefuncr': 'feFuncR', 123b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fegaussianblur': 'feGaussianBlur', 124b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'feimage': 'feImage', 125b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'femerge': 'feMerge', 126b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'femergenode': 'feMergeNode', 127b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'femorphology': 'feMorphology', 128b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'feoffset': 'feOffset', 129b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fepointlight': 'fePointLight', 130b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fespecularlighting': 'feSpecularLighting', 131b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fespotlight': 'feSpotLight', 132b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'fetile': 'feTile', 133b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'feturbulence': 'feTurbulence', 134b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'foreignobject': 'foreignObject', 135b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'glyphref': 'glyphRef', 136b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'lineargradient': 'linearGradient', 137b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'radialgradient': 'radialGradient', 138b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'textpath': 'textPath' 139b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 140b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 141b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//Tags that causes exit from foreign content 142b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikvar EXITS_FOREIGN_CONTENT = {}; 143b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 144b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.B] = true; 145b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.BIG] = true; 146b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.BLOCKQUOTE] = true; 147b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.BODY] = true; 148b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.BR] = true; 149b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.CENTER] = true; 150b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.CODE] = true; 151b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.DD] = true; 152b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.DIV] = true; 153b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.DL] = true; 154b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.DT] = true; 155b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.EM] = true; 156b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.EMBED] = true; 157b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.H1] = true; 158b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.H2] = true; 159b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.H3] = true; 160b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.H4] = true; 161b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.H5] = true; 162b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.H6] = true; 163b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.HEAD] = true; 164b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.HR] = true; 165b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.I] = true; 166b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.IMG] = true; 167b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.LI] = true; 168b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.LISTING] = true; 169b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.MENU] = true; 170b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.META] = true; 171b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.NOBR] = true; 172b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.OL] = true; 173b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.P] = true; 174b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.PRE] = true; 175b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.RUBY] = true; 176b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.S] = true; 177b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.SMALL] = true; 178b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.SPAN] = true; 179b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.STRONG] = true; 180b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.STRIKE] = true; 181b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.SUB] = true; 182b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.SUP] = true; 183b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.TABLE] = true; 184b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.TT] = true; 185b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.U] = true; 186b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.UL] = true; 187b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris CraikEXITS_FOREIGN_CONTENT[$.VAR] = true; 188b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 189b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//Check exit from foreign content 190b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexports.causesExit = function (startTagToken) { 191b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var tn = startTagToken.tagName; 192b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 193b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (tn === $.FONT && (Tokenizer.getTokenAttr(startTagToken, ATTRS.COLOR) !== null || 194b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik Tokenizer.getTokenAttr(startTagToken, ATTRS.SIZE) !== null || 195b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik Tokenizer.getTokenAttr(startTagToken, ATTRS.FACE) !== null)) { 196b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return true; 197b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 198b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 199b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return EXITS_FOREIGN_CONTENT[tn]; 200b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 201b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 202b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//Token adjustments 203b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexports.adjustTokenMathMLAttrs = function (token) { 204b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for (var i = 0; i < token.attrs.length; i++) { 205b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (token.attrs[i].name === DEFINITION_URL_ATTR) { 206b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR; 207b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik break; 208b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 209b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 210b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 211b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 212b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexports.adjustTokenSVGAttrs = function (token) { 213b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for (var i = 0; i < token.attrs.length; i++) { 214b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP[token.attrs[i].name]; 215b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 216b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (adjustedAttrName) 217b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik token.attrs[i].name = adjustedAttrName; 218b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 219b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 220b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 221b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexports.adjustTokenXMLAttrs = function (token) { 222b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for (var i = 0; i < token.attrs.length; i++) { 223b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP[token.attrs[i].name]; 224b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 225b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (adjustedAttrEntry) { 226b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik token.attrs[i].prefix = adjustedAttrEntry.prefix; 227b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik token.attrs[i].name = adjustedAttrEntry.name; 228b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik token.attrs[i].namespace = adjustedAttrEntry.namespace; 229b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 230b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 231b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 232b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 233b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexports.adjustTokenSVGTagName = function (token) { 234b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP[token.tagName]; 235b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 236b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (adjustedTagName) 237b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik token.tagName = adjustedTagName; 238b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 239b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 240b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik//Integration points 241b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexports.isMathMLTextIntegrationPoint = function (tn, ns) { 242b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT); 243b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 244b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 245b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikexports.isHtmlIntegrationPoint = function (tn, ns, attrs) { 246b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (ns === NS.MATHML && tn === $.ANNOTATION_XML) { 247b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik for (var i = 0; i < attrs.length; i++) { 248b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if (attrs[i].name === ATTRS.ENCODING) { 249b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik var value = attrs[i].value.toLowerCase(); 250b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 251b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML; 252b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 253b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 254b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik } 255b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 256b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE); 257b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik}; 258