WEB-61988 HTML: get rid of outdated HtmlDescriptorsTable and replace it with generated Html5TagAndAttributeNamesProvider

GitOrigin-RevId: 3c044b78e79fe22af84db09fb0228675dc425e8d
This commit is contained in:
Piotr Tomiak
2023-07-19 12:27:16 +02:00
committed by intellij-monorepo-bot
parent cadfc7ef20
commit 2e8df282b5
15 changed files with 810 additions and 4816 deletions

View File

@@ -1,6 +1,8 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.xml.util.documentation;
import com.intellij.documentation.mdn.MdnApiNamespace;
import com.intellij.documentation.mdn.MdnDocumentationKt;
import com.intellij.documentation.mdn.MdnSymbolDocumentation;
import com.intellij.lang.Language;
import com.intellij.lang.LanguageDocumentation;
@@ -127,9 +129,10 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
private static boolean checkProvider(@Nullable DocumentationProvider provider) {
if (provider == null) return false;
if (provider instanceof CompositeDocumentationProvider
&& ContainerUtil.or(((CompositeDocumentationProvider)provider).getAllProviders(), p -> p instanceof HtmlDocumentationProvider)) {
&& ContainerUtil.or(((CompositeDocumentationProvider)provider).getAllProviders(), p -> p instanceof HtmlDocumentationProvider)) {
Logger.getInstance(HtmlDocumentationProvider.class)
.error("An 'HtmlDocumentationProvider' is most likely registered through 'com.intellij.documentationProvider' extension point instead of 'com.intellij.lang.documentationProvider'. Recurrent behaviour has been prevented.");
.error(
"An 'HtmlDocumentationProvider' is most likely registered through 'com.intellij.documentationProvider' extension point instead of 'com.intellij.lang.documentationProvider'. Recurrent behaviour has been prevented.");
return false;
}
return true;
@@ -185,15 +188,6 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
return result;
}
private static HtmlAttributeDescriptor getDescriptor(String name, XmlTag context) {
HtmlAttributeDescriptor attributeDescriptor = HtmlDescriptorsTable.getAttributeDescriptor(name);
if (attributeDescriptor instanceof CompositeAttributeTagDescriptor) {
return ((CompositeAttributeTagDescriptor)attributeDescriptor).findHtmlAttributeInContext(context);
}
return attributeDescriptor;
}
@Nls
private String generateDocForHtml(PsiElement element, PsiElement originalElement) {
MdnSymbolDocumentation documentation = getDocumentation(element, originalElement);
@@ -215,9 +209,12 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
return null;
}
String key = StringUtil.toLowerCase(text);
final HtmlTagDescriptor descriptor = HtmlDescriptorsTable.getTagDescriptor(key);
final boolean isStdTag = key != null
&& (MdnDocumentationKt.getHtmlMdnTagDocumentation(MdnApiNamespace.Html, key) != null
|| MdnDocumentationKt.getHtmlMdnTagDocumentation(MdnApiNamespace.Svg, key) != null
|| MdnDocumentationKt.getHtmlMdnTagDocumentation(MdnApiNamespace.MathML, key) != null);
if (descriptor != null && !isAttributeContext(context)) {
if (isStdTag && !isAttributeContext(context)) {
try {
final XmlTag tagFromText =
XmlElementFactory.getInstance(psiManager.getProject()).createTagFromText("<" + key + " xmlns=\"" + XmlUtil.XHTML_URI + "\"/>");
@@ -228,9 +225,7 @@ public class HtmlDocumentationProvider implements DocumentationProvider {
}
else {
XmlTag tagContext = findTagContext(context);
HtmlAttributeDescriptor myAttributeDescriptor = getDescriptor(key, tagContext);
if (myAttributeDescriptor != null && tagContext != null) {
if (tagContext != null) {
XmlElementDescriptor tagDescriptor = tagContext.getDescriptor();
return tagDescriptor != null ? tagDescriptor.getAttributeDescriptor(text, tagContext) : null;
}

View File

@@ -1,6 +1,7 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.xml.util.documentation;
import com.intellij.documentation.mdn.MdnDocumentationKt;
import com.intellij.lang.Language;
import com.intellij.lang.documentation.DocumentationProvider;
import com.intellij.lang.documentation.DocumentationUtil;
@@ -40,7 +41,6 @@ public class XmlDocumentationProvider implements DocumentationProvider {
private static final Logger LOG = Logger.getInstance(XmlDocumentationProvider.class);
@NonNls private static final String NAME_ATTR_NAME = "name";
@NonNls private static final String BASE_SITEPOINT_URL = "http://reference.sitepoint.com/html/";
@Override
@@ -289,13 +289,11 @@ public class XmlDocumentationProvider implements DocumentationProvider {
append = language == XHTMLLanguage.INSTANCE;
}
if (tag != null) {
EntityDescriptor descriptor = HtmlDescriptorsTable.getTagDescriptor(tag.getName());
if (descriptor != null && append) {
if (tag != null && append) {
var documentation = MdnDocumentationKt.getHtmlMdnDocumentation(tag, tag);
if (documentation != null && documentation.getUrl() != null) {
buf.append("<br>");
buf.append(XmlBundle.message("html.quickdoc.additional.template",
descriptor.getHelpRef(),
BASE_SITEPOINT_URL + tag.getName()));
buf.append(XmlBundle.message("html.quickdoc.additional.template", documentation.getUrl()));
}
}
}

View File

@@ -36,7 +36,7 @@ html.inspections.check.empty.tag=Empty tag
html.inspections.check.valid.script.tag=Malformed content of 'script' tag
html.related.linked.files.group=Linked Files
html.quickdoc.additional.template=More info on <a href="{0}">W3C website</a>, <a href="{1}">SitePoint Reference website</a>.
html.quickdoc.additional.template=More info on <a href="{0}">MDN website</a>.
web.editor.configuration.title=HTML/CSS

View File

@@ -0,0 +1,280 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.html
import com.intellij.lang.html.HTMLLanguage
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.psi.PsiFileFactory
import com.intellij.psi.PsiManager
import com.intellij.psi.impl.source.html.HtmlFileImpl
import com.intellij.psi.util.siblings
import com.intellij.psi.xml.XmlFile
import com.intellij.psi.xml.XmlTag
import com.intellij.rt.execution.junit.FileComparisonFailure
import com.intellij.testFramework.PlatformTestUtil
import com.intellij.testFramework.fixtures.BasePlatformTestCase
import com.intellij.util.asSafely
import com.intellij.xml.Html5SchemaProvider
import java.io.File
import java.io.FileNotFoundException
class Html5TagAndAttributeNamesProviderTest : BasePlatformTestCase() {
fun testHtml5TagAndAttributeNamesProvider() {
val location = PlatformTestUtil.getCommunityPath().replace(File.separatorChar, '/') +
"/xml/xml-psi-impl/gen/com/intellij/xml/util/Html5TagAndAttributeNamesProvider.kt"
val contents = FileUtil.loadFile(File(location), "UTF-8", false)
val version = Regex("VERSION = ([0-9]+)").find(contents)?.groups?.get(1)?.value?.toIntOrNull() ?: 0
val expectedContents = generateFile(version)
if (expectedContents != contents) {
throw FileComparisonFailure(
"Looks like HTML5 schema was updated, so Html5TagAndAttributeNamesProvider needs to be updated as well. Copy version change!!!",
contents, generateFile(version + 1), location)
}
}
private fun generateFile(version: Int): String {
val location = Html5SchemaProvider.getHtml5SchemaLocation()
val descriptor = (PsiManager.getInstance(project).findFile(
VfsUtil.findFileByIoFile(File(location), true)
?: throw FileNotFoundException(location)
) as XmlFile).document!!.metaData as RelaxedHtmlNSDescriptor
val htmlTags = descriptor.getRootElementsDescriptors(null)
val htmlFile = PsiFileFactory.getInstance(project).createFileFromText(
"test.html", HTMLLanguage.INSTANCE, "<svg></svg><math></math>") as HtmlFileImpl
val svg = htmlFile.document?.rootTag?.asSafely<XmlTag>()!!
val math = svg.siblings(withSelf = false).firstNotNullOf { it as? XmlTag }
val map = sequenceOf("HTML" to htmlTags,
"SVG" to svg.descriptor!!.getElementsDescriptors(svg),
"MathML" to math.descriptor!!.getElementsDescriptors(math)
).associate { (namespace, tags) ->
Pair(namespace,
tags.sortedBy { it.name }.associate { tag ->
Pair(tag.name, tag.getAttributesDescriptors(null).map { it.name }.filter { !it.startsWith("aria-") }
.distinct()
.sorted())
})
}
val htmlMap = map["HTML"]!!
val dlAttrs = htmlMap["dl"]!!.toSet()
val acronymAttrs = htmlMap["acronym"]!!.toSet()
val htmlAttrs = htmlMap["div"]!!.filter { dlAttrs.contains(it) && acronymAttrs.contains(it) }.toSet()
val baseHtmlAttrs = htmlMap["frame"]!!.filter { htmlAttrs.contains(it) }.toSet()
val svgMap = map["SVG"]!!
val svgBasicAttrs = setOf("base", "id", "space")
val gAttrs = svgMap["g"]!!.toSet()
val animateAttrs = svgMap["animate"]!!.toSet()
val svgAttrs = svgMap["marker"]!!.filter { gAttrs.contains(it) && animateAttrs.contains(it) }.toSet()
assert(svgAttrs.containsAll(svgBasicAttrs))
val lineAttrs = svgMap["line"]!!.toSet()
val defsAttrs = svgMap["defs"]!!.toSet()
val circleAttrs = svgMap["circle"]!!.toSet()
val textAttrs = svgMap["text"]!!.toSet()
val svgGraphicAttrs = svgMap["filter"]!!.filter {
lineAttrs.contains(it)
&& defsAttrs.contains(it)
&& circleAttrs.contains(it)
&& textAttrs.contains(it)
}.toSet()
assert(svgGraphicAttrs.containsAll(svgAttrs))
val svgTextAttrs = svgMap["filter"]!!.filter { defsAttrs.contains(it) && textAttrs.contains(it) }.toSet()
assert(svgTextAttrs.containsAll(svgGraphicAttrs))
val mathMap = map["MathML"]!!
val mathBasicAttrs = setOf("class", "href", "id", "xref")
val mathAttrs = mathMap["factorial"]!!.toSet()
assert(mathAttrs.containsAll(mathBasicAttrs))
return """
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.xml.util
import com.intellij.psi.tree.IStubFileElementType
import com.intellij.util.containers.CollectionFactory
import com.intellij.util.containers.Interner
import java.util.*
/**
* This utility object provides names for all known HTML, SVG and MathML elements and attributes. It is created
* statically and can be used in parsers or lexers. Any stubbed file element types, which are created by parsers
* using information provided by this class should include [Html5TagAndAttributeNamesProvider.VERSION] in
* [IStubFileElementType.getStubVersion] version calculations.
*/
object Html5TagAndAttributeNamesProvider {
/**
* Version of the information, should be used to calculate stub version,
* if parser or lexer depends on the information from this object.
*/
const val VERSION = $version
/**
* Retrieves the set of all known HTML, SVG or MathML attributes of tags with a particular name.
*
* @param namespace tag's namespace - HTML, SVG or MathML
* @param tagName
* @param caseSensitive specifies whether the returned attribute names set should be case sensitive or not
* @return a set containing [String] objects, or [null] if tag was not found. The set's contains check respects
* `caseSensitive` parameter.
*/
@JvmStatic
fun getTagAttributes(namespace: Namespace, tagName: CharSequence, caseSensitive: Boolean): Set<CharSequence>? =
getMap(namespace, caseSensitive).let { it[tagName] }
/**
* Retrieves the set of all known HTML, SVG and MathML attributes of tags with a particular name.
*
* @param tagName
* @param caseSensitive specifies whether the returned attribute names set should be case sensitive or not
* @return a set containing [String] objects, or [null] if tag was not found. The set's contains check respects
* `caseSensitive` parameter.
*/
@JvmStatic
fun getTagAttributes(tagName: CharSequence, caseSensitive: Boolean): Set<CharSequence>? =
getMap(caseSensitive).let { it[tagName] }
/**
* Retrieves the set of all known HTML, SVG or MathML tags
*
* @param namespace tag's namespace - HTML, SVG or MathML
* @param caseSensitive specifies whether the returned tag names set should be case sensitive or not
* @return a set containing [String] objects. The set's contains check respects [caseSensitive] parameter.
*/
@JvmStatic
fun getTags(namespace: Namespace, caseSensitive: Boolean): Set<CharSequence> =
getMap(namespace, caseSensitive).keys
/**
* Retrieves the set of all known HTML, SVG and MathML tags
*
* @param caseSensitive specifies whether the returned tag names set should be case sensitive or not
* @return a set containing [String] objects. The set's contains check respects [caseSensitive] parameter.
*/
@JvmStatic
fun getTags(caseSensitive: Boolean): Set<CharSequence> =
getMap(caseSensitive).keys
enum class Namespace {
HTML,
SVG,
MathML
}
private fun getMap(namespace: Namespace, caseSensitive: Boolean): Map<CharSequence, Set<CharSequence>> =
(if (caseSensitive) namespacedTagToAttributeMapCaseSensitive else namespacedTagToAttributeMapCaseInsensitive)[namespace]!!
private fun getMap(caseSensitive: Boolean): Map<CharSequence, Set<CharSequence>> =
if (caseSensitive) tagToAttributeMapCaseSensitive else tagToAttributeMapCaseInsensitive
private val baseHtmlAttrs = listOf(
${baseHtmlAttrs.joinToString { '"' + it + '"' }}
)
private val htmlAttrs = baseHtmlAttrs + listOf(
${(htmlAttrs - baseHtmlAttrs).joinToString { '"' + it + '"' }}
)
private val svgBasicAttrs = listOf(
${svgBasicAttrs.joinToString { '"' + it + '"' }}
)
private val svgAttrs = svgBasicAttrs + listOf(
${(svgAttrs - svgBasicAttrs).joinToString { '"' + it + '"' }}
)
private val svgGraphicAttrs = svgAttrs + listOf(
${(svgGraphicAttrs - svgAttrs).joinToString { '"' + it + '"' }}
)
private val svgTextAttrs = svgGraphicAttrs + listOf(
${(svgTextAttrs - svgGraphicAttrs).joinToString { '"' + it + '"' }}
)
private val mathBasicAttrs = listOf(
${mathBasicAttrs.joinToString { '"' + it + '"' }}
)
private val mathAttrs = mathBasicAttrs + listOf(
${(mathAttrs - mathBasicAttrs).joinToString { '"' + it + '"' }}
)
private val namespacedTagToAttributeMapCaseSensitive: Map<Namespace, Map<CharSequence, Set<CharSequence>>> =
createMap(true)
private val namespacedTagToAttributeMapCaseInsensitive: Map<Namespace, Map<CharSequence, Set<CharSequence>>> =
createMap(false)
private val tagToAttributeMapCaseSensitive: Map<CharSequence, Set<CharSequence>> =
createMergedMap(true)
private val tagToAttributeMapCaseInsensitive: Map<CharSequence, Set<CharSequence>> =
createMergedMap(false)
private fun createMergedMap(caseSensitive: Boolean): Map<CharSequence, Set<CharSequence>> =
namespacedTagToAttributeMapCaseSensitive
.flatMap { (_, tags) ->
tags.entries.map { Pair(it.key.toString(), it.value) }
}
.groupingBy { it.first }
.aggregateTo(CollectionFactory.createCharSequenceMap<MutableSet<CharSequence>>(caseSensitive)) { _, result, (_, attrs), _ ->
(result ?: CollectionFactory.createCharSequenceSet(caseSensitive)).also { it.addAll(attrs) }
}
.mapValues { Collections.unmodifiableSet(it.value) as Set<CharSequence> }
.let { Collections.unmodifiableMap(it) }
private fun createMap(caseSensitive: Boolean): Map<Namespace, Map<CharSequence, Set<CharSequence>>> {
val interner = Interner.createStringInterner()
fun attrs(base: List<String>, vararg items: String): Set<CharSequence> =
Collections.unmodifiableSet(
CollectionFactory.createCharSequenceSet(caseSensitive).apply { addAll((base + items).map { interner.intern(it) }) }
)
fun tags(vararg items: Pair<String, Set<CharSequence>>): Map<CharSequence, Set<CharSequence>> =
items.toMap(CollectionFactory.createCharSequenceMap<Set<CharSequence>>(caseSensitive))
.let { Collections.unmodifiableMap(it) }
return mapOf(
${
map.entries.joinToString(",\n ") { (namespace, tags) ->
"Namespace.${namespace} to tags(\n " +
tags.entries.filter { it.value.isNotEmpty() }.joinToString(",\n ") { (tagName, attrs) ->
val (tag, list) = if (attrs.containsAll(htmlAttrs))
Pair("htmlAttrs", attrs - htmlAttrs)
else if (attrs.containsAll(baseHtmlAttrs))
Pair("baseHtmlAttrs", attrs - baseHtmlAttrs)
else if (attrs.containsAll(svgTextAttrs))
Pair("svgTextAttrs", attrs - svgTextAttrs)
else if (attrs.containsAll(svgGraphicAttrs))
Pair("svgGraphicAttrs", attrs - svgGraphicAttrs)
else if (attrs.containsAll(svgAttrs))
Pair("svgAttrs", attrs - svgAttrs)
else if (attrs.containsAll(mathAttrs))
Pair("mathAttrs", attrs - mathAttrs)
else if (attrs.containsAll(svgBasicAttrs))
Pair("svgBasicAttrs", attrs - svgBasicAttrs)
else if (attrs.containsAll(mathBasicAttrs))
Pair("mathBasicAttrs", attrs - mathBasicAttrs)
else
Pair("emptyList()", attrs)
""" "${tagName}" to attrs($tag, ${list.joinToString { '"' + it + '"' }})"""
} + "\n )"
}
}
)
}
}
""".trimIndent()
}
}

View File

@@ -0,0 +1,492 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.xml.util
import com.intellij.psi.tree.IStubFileElementType
import com.intellij.util.containers.CollectionFactory
import com.intellij.util.containers.Interner
import java.util.*
/**
* This utility object provides names for all known HTML, SVG and MathML elements and attributes. It is created
* statically and can be used in parsers or lexers. Any stubbed file element types, which are created by parsers
* using information provided by this class should include [Html5TagAndAttributeNamesProvider.VERSION] in
* [IStubFileElementType.getStubVersion] version calculations.
*/
object Html5TagAndAttributeNamesProvider {
/**
* Version of the information, should be used to calculate stub version,
* if parser or lexer depends on the information from this object.
*/
const val VERSION = 1
/**
* Retrieves the set of all known HTML, SVG or MathML attributes of tags with a particular name.
*
* @param namespace tag's namespace - HTML, SVG or MathML
* @param tagName
* @param caseSensitive specifies whether the returned attribute names set should be case sensitive or not
* @return a set containing [String] objects, or [null] if tag was not found. The set's contains check respects
* `caseSensitive` parameter.
*/
@JvmStatic
fun getTagAttributes(namespace: Namespace, tagName: CharSequence, caseSensitive: Boolean): Set<CharSequence>? =
getMap(namespace, caseSensitive).let { it[tagName] }
/**
* Retrieves the set of all known HTML, SVG and MathML attributes of tags with a particular name.
*
* @param tagName
* @param caseSensitive specifies whether the returned attribute names set should be case sensitive or not
* @return a set containing [String] objects, or [null] if tag was not found. The set's contains check respects
* `caseSensitive` parameter.
*/
@JvmStatic
fun getTagAttributes(tagName: CharSequence, caseSensitive: Boolean): Set<CharSequence>? =
getMap(caseSensitive).let { it[tagName] }
/**
* Retrieves the set of all known HTML, SVG or MathML tags
*
* @param namespace tag's namespace - HTML, SVG or MathML
* @param caseSensitive specifies whether the returned tag names set should be case sensitive or not
* @return a set containing [String] objects. The set's contains check respects [caseSensitive] parameter.
*/
@JvmStatic
fun getTags(namespace: Namespace, caseSensitive: Boolean): Set<CharSequence> =
getMap(namespace, caseSensitive).keys
/**
* Retrieves the set of all known HTML, SVG and MathML tags
*
* @param caseSensitive specifies whether the returned tag names set should be case sensitive or not
* @return a set containing [String] objects. The set's contains check respects [caseSensitive] parameter.
*/
@JvmStatic
fun getTags(caseSensitive: Boolean): Set<CharSequence> =
getMap(caseSensitive).keys
enum class Namespace {
HTML,
SVG,
MathML
}
private fun getMap(namespace: Namespace, caseSensitive: Boolean): Map<CharSequence, Set<CharSequence>> =
(if (caseSensitive) namespacedTagToAttributeMapCaseSensitive else namespacedTagToAttributeMapCaseInsensitive)[namespace]!!
private fun getMap(caseSensitive: Boolean): Map<CharSequence, Set<CharSequence>> =
if (caseSensitive) tagToAttributeMapCaseSensitive else tagToAttributeMapCaseInsensitive
private val baseHtmlAttrs = listOf(
"accesskey", "autocapitalize", "autofocus", "base", "class", "contenteditable", "dir", "draggable", "enterkeyhint", "hidden", "id", "inert", "inputmode", "is", "lang", "nonce", "onabort", "onauxclick", "onbeforeinput", "onbeforematch", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextlost", "oncontextmenu", "oncontextrestored", "oncopy", "oncuechange", "oncut", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "onfocusin", "onfocusout", "onformdata", "ongotpointercapture", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onlostpointercapture", "onmousedown", "onmouseenter", "onmouseleave", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onpaste", "onpause", "onplay", "onplaying", "onpointercancel", "onpointerdown", "onpointerenter", "onpointerleave", "onpointermove", "onpointerout", "onpointerover", "onpointerrawupdate", "onpointerup", "onprogress", "onratechange", "onreset", "onresize", "onscroll", "onscrollend", "onsecuritypolicyviolation", "onseeked", "onseeking", "onselect", "onslotchange", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "ontoggle", "ontransitioncancel", "ontransitionend", "ontransitionrun", "ontransitionstart", "onvolumechange", "onwaiting", "onwheel", "slot", "space", "spellcheck", "style", "tabindex", "title", "translate"
)
private val htmlAttrs = baseHtmlAttrs + listOf(
"about", "content", "datatype", "inlist", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "prefix", "property", "rel", "resource", "rev", "typeof", "vocab"
)
private val svgBasicAttrs = listOf(
"base", "id", "space"
)
private val svgAttrs = svgBasicAttrs + listOf(
"externalResourcesRequired", "fill", "focusable", "lang", "tabindex"
)
private val svgGraphicAttrs = svgAttrs + listOf(
"class", "clip-path", "clip-rule", "color", "color-interpolation", "color-rendering", "cursor", "display", "fill-opacity", "fill-rule", "filter", "image-rendering", "mask", "opacity", "pointer-events", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "style", "text-rendering", "visibility"
)
private val svgTextAttrs = svgGraphicAttrs + listOf(
"alignment-baseline", "baseline-shift", "direction", "dominant-baseline", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "glyph-orientation-horizontal", "glyph-orientation-vertical", "kerning", "letter-spacing", "text-anchor", "text-decoration", "unicode-bidi", "word-spacing", "writing-mode"
)
private val mathBasicAttrs = listOf(
"class", "href", "id", "xref"
)
private val mathAttrs = mathBasicAttrs + listOf(
"definitionURL", "encoding", "other", "style"
)
private val namespacedTagToAttributeMapCaseSensitive: Map<Namespace, Map<CharSequence, Set<CharSequence>>> =
createMap(true)
private val namespacedTagToAttributeMapCaseInsensitive: Map<Namespace, Map<CharSequence, Set<CharSequence>>> =
createMap(false)
private val tagToAttributeMapCaseSensitive: Map<CharSequence, Set<CharSequence>> =
createMergedMap(true)
private val tagToAttributeMapCaseInsensitive: Map<CharSequence, Set<CharSequence>> =
createMergedMap(false)
private fun createMergedMap(caseSensitive: Boolean): Map<CharSequence, Set<CharSequence>> =
namespacedTagToAttributeMapCaseSensitive
.flatMap { (_, tags) ->
tags.entries.map { Pair(it.key.toString(), it.value) }
}
.groupingBy { it.first }
.aggregateTo(CollectionFactory.createCharSequenceMap<MutableSet<CharSequence>>(caseSensitive)) { _, result, (_, attrs), _ ->
(result ?: CollectionFactory.createCharSequenceSet(caseSensitive)).also { it.addAll(attrs) }
}
.mapValues { Collections.unmodifiableSet(it.value) as Set<CharSequence> }
.let { Collections.unmodifiableMap(it) }
private fun createMap(caseSensitive: Boolean): Map<Namespace, Map<CharSequence, Set<CharSequence>>> {
val interner = Interner.createStringInterner()
fun attrs(base: List<String>, vararg items: String): Set<CharSequence> =
Collections.unmodifiableSet(
CollectionFactory.createCharSequenceSet(caseSensitive).apply { addAll((base + items).map { interner.intern(it) }) }
)
fun tags(vararg items: Pair<String, Set<CharSequence>>): Map<CharSequence, Set<CharSequence>> =
items.toMap(CollectionFactory.createCharSequenceMap<Set<CharSequence>>(caseSensitive))
.let { Collections.unmodifiableMap(it) }
return mapOf(
Namespace.HTML to tags(
"a" to attrs(htmlAttrs, "charset", "coords", "download", "href", "hreflang", "methods", "name", "referrerpolicy", "role", "shape", "target", "type", "urn"),
"abbr" to attrs(htmlAttrs, "role"),
"acronym" to attrs(htmlAttrs, ),
"address" to attrs(htmlAttrs, "role"),
"applet" to attrs(htmlAttrs, "alt", "archive", "code", "codebase", "height", "name", "width"),
"area" to attrs(htmlAttrs, "alt", "coords", "download", "href", "hreflang", "nohref", "role", "shape", "target", "type"),
"article" to attrs(htmlAttrs, "role"),
"aside" to attrs(htmlAttrs, "role"),
"audio" to attrs(htmlAttrs, "autoplay", "controls", "crossorigin", "loop", "muted", "preload", "role", "src"),
"b" to attrs(htmlAttrs, "role"),
"base" to attrs(baseHtmlAttrs, "about", "content", "datatype", "href", "inlist", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "prefix", "property", "resource", "rev", "target", "typeof", "vocab"),
"basefont" to attrs(htmlAttrs, "color", "face", "size"),
"bdi" to attrs(htmlAttrs, "role"),
"bdo" to attrs(htmlAttrs, "role"),
"big" to attrs(htmlAttrs, ),
"blockquote" to attrs(htmlAttrs, "cite", "role"),
"body" to attrs(htmlAttrs, "alink", "background", "bgcolor", "bottommargin", "leftmargin", "link", "marginheight", "marginwidth", "onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onlanguagechange", "onmessage", "onmessageerror", "onoffline", "ononline", "onpagehide", "onpageshow", "onpopstate", "onrejectionhandled", "onstorage", "onunhandledrejection", "onunload", "rightmargin", "role", "text", "topmargin", "vlink"),
"br" to attrs(htmlAttrs, "clear", "role"),
"button" to attrs(htmlAttrs, "datafld", "dataformatas", "datasrc", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "role", "type", "value"),
"canvas" to attrs(htmlAttrs, "height", "role", "width"),
"caption" to attrs(htmlAttrs, "align"),
"center" to attrs(htmlAttrs, ),
"cite" to attrs(htmlAttrs, "role"),
"code" to attrs(htmlAttrs, "role"),
"col" to attrs(htmlAttrs, "align", "char", "charoff", "span", "valign", "width"),
"colgroup" to attrs(htmlAttrs, "align", "char", "charoff", "span", "valign", "width"),
"data" to attrs(htmlAttrs, "role", "value"),
"datalist" to attrs(htmlAttrs, "role"),
"dd" to attrs(htmlAttrs, "role"),
"del" to attrs(htmlAttrs, "cite", "datetime", "role"),
"details" to attrs(htmlAttrs, "open", "role"),
"dfn" to attrs(htmlAttrs, "role"),
"dialog" to attrs(htmlAttrs, "open", "role"),
"dir" to attrs(htmlAttrs, "compact"),
"div" to attrs(htmlAttrs, "align", "datafld", "dataformatas", "datasrc", "role"),
"dl" to attrs(htmlAttrs, "compact", "role"),
"dt" to attrs(htmlAttrs, "role"),
"em" to attrs(htmlAttrs, "role"),
"embed" to attrs(emptyList(), "base", "lang", "onbeforeinput", "role", "space"),
"fieldset" to attrs(htmlAttrs, "disabled", "form", "name", "role"),
"figcaption" to attrs(htmlAttrs, "role"),
"figure" to attrs(htmlAttrs, "role"),
"font" to attrs(htmlAttrs, "color", "face", "role", "size"),
"footer" to attrs(htmlAttrs, "role"),
"form" to attrs(htmlAttrs, "accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "role", "target"),
"frame" to attrs(baseHtmlAttrs, "frameborder", "longdesc", "marginheight", "marginwidth", "name", "noresize", "scrolling", "src"),
"frameset" to attrs(htmlAttrs, "columns", "onunload", "rows"),
"h1" to attrs(htmlAttrs, "align", "role"),
"h2" to attrs(htmlAttrs, "align", "role"),
"h3" to attrs(htmlAttrs, "align", "role"),
"h4" to attrs(htmlAttrs, "align", "role"),
"h5" to attrs(htmlAttrs, "align", "role"),
"h6" to attrs(htmlAttrs, "align", "role"),
"head" to attrs(htmlAttrs, "profile"),
"header" to attrs(htmlAttrs, "role"),
"hgroup" to attrs(htmlAttrs, "role"),
"hr" to attrs(htmlAttrs, "align", "color", "noshade", "role", "size", "width"),
"html" to attrs(htmlAttrs, "manifest", "version"),
"i" to attrs(htmlAttrs, "role"),
"iframe" to attrs(htmlAttrs, "align", "allow", "allowfullscreen", "allowtransparency", "frameborder", "height", "hspace", "loading", "longdesc", "marginheight", "marginwidth", "name", "referrerpolicy", "role", "sandbox", "scrolling", "src", "srcdoc", "vspace", "width"),
"img" to attrs(htmlAttrs, "align", "alt", "border", "crossorigin", "decoding", "generator-unable-to-provide-required-alt", "height", "hspace", "ismap", "loading", "longdesc", "name", "referrerpolicy", "role", "sizes", "src", "srcset", "usemap", "vspace", "width"),
"input" to attrs(htmlAttrs, "accept", "align", "alt", "autocomplete", "capture", "checked", "datafld", "dataformatas", "datasrc", "dirname", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "hspace", "list", "max", "maxlength", "min", "minlength", "multiple", "name", "pattern", "placeholder", "readonly", "required", "role", "size", "src", "step", "type", "usemap", "value", "vspace", "width"),
"ins" to attrs(htmlAttrs, "cite", "datetime", "role"),
"kbd" to attrs(htmlAttrs, "role"),
"label" to attrs(htmlAttrs, "for"),
"legend" to attrs(htmlAttrs, "align"),
"li" to attrs(htmlAttrs, "role", "type", "value"),
"link" to attrs(htmlAttrs, "as", "blocking", "charset", "color", "crossorigin", "disabled", "href", "hreflang", "imagesizes", "imagesrcset", "integrity", "media", "methods", "referrerpolicy", "role", "scope", "sizes", "target", "type", "updateviacache", "urn", "workertype"),
"main" to attrs(htmlAttrs, "role"),
"map" to attrs(htmlAttrs, "name"),
"mark" to attrs(htmlAttrs, "role"),
"math" to attrs(mathBasicAttrs, "accent", "accentunder", "align", "alignmentscope", "altimg", "altimg-height", "altimg-valign", "altimg-width", "alttext", "bevelled", "cdgroup", "charalign", "charspacing", "close", "columnalign", "columnlines", "columnspacing", "columnspan", "columnwidth", "crossout", "decimalpoint", "denomalign", "depth", "dir", "display", "displaystyle", "edge", "equalcolumns", "equalrows", "fence", "form", "frame", "framespacing", "groupalign", "height", "indentalign", "indentalignfirst", "indentalignlast", "indentshift", "indentshiftfirst", "indentshiftlast", "indenttarget", "infixlinebreakstyle", "largeop", "leftoverhang", "length", "linebreak", "linebreakmultchar", "linebreakstyle", "lineleading", "linethickness", "location", "longdivstyle", "lquote", "lspace", "macros", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "maxwidth", "minlabelspacing", "minsize", "mode", "movablelimits", "mslinethickness", "notation", "numalign", "open", "other", "overflow", "position", "rightoverhang", "role", "rowalign", "rowlines", "rowspacing", "rowspan", "rquote", "rspace", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "shift", "side", "stackalign", "stretchy", "style", "subscriptshift", "superscriptshift", "symmetric", "valign", "width"),
"menu" to attrs(htmlAttrs, "compact", "role"),
"meta" to attrs(baseHtmlAttrs, "about", "charset", "content", "datatype", "http-equiv", "inlist", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "media", "name", "prefix", "property", "resource", "role", "scheme", "typeof", "vocab"),
"meter" to attrs(htmlAttrs, "high", "low", "max", "min", "optimum", "value"),
"nav" to attrs(htmlAttrs, "role"),
"noframes" to attrs(htmlAttrs, ),
"noscript" to attrs(htmlAttrs, ),
"object" to attrs(htmlAttrs, "align", "archive", "border", "classid", "code", "codebase", "codetype", "data", "datafld", "dataformatas", "datasrc", "declare", "form", "height", "hspace", "name", "role", "standby", "type", "usemap", "vspace", "width"),
"ol" to attrs(htmlAttrs, "compact", "reversed", "role", "start", "type"),
"optgroup" to attrs(htmlAttrs, "disabled", "label", "role"),
"option" to attrs(htmlAttrs, "disabled", "label", "name", "role", "selected", "value"),
"output" to attrs(htmlAttrs, "for", "form", "name", "role"),
"p" to attrs(htmlAttrs, "align", "role"),
"param" to attrs(htmlAttrs, "name", "type", "value", "valuetype"),
"picture" to attrs(htmlAttrs, ),
"pre" to attrs(htmlAttrs, "role", "width"),
"progress" to attrs(htmlAttrs, "max", "role", "value"),
"q" to attrs(htmlAttrs, "cite", "role"),
"rb" to attrs(htmlAttrs, "role"),
"rp" to attrs(htmlAttrs, "role"),
"rt" to attrs(htmlAttrs, "role"),
"rtc" to attrs(htmlAttrs, "role"),
"ruby" to attrs(htmlAttrs, "role"),
"s" to attrs(htmlAttrs, "role"),
"samp" to attrs(htmlAttrs, "role"),
"script" to attrs(htmlAttrs, "async", "blocking", "charset", "crossorigin", "defer", "event", "for", "integrity", "language", "nomodule", "referrerpolicy", "src", "type"),
"section" to attrs(htmlAttrs, "role"),
"select" to attrs(htmlAttrs, "autocomplete", "datafld", "dataformatas", "datasrc", "disabled", "form", "multiple", "name", "required", "role", "size"),
"slot" to attrs(htmlAttrs, "name", "role"),
"small" to attrs(htmlAttrs, "role"),
"source" to attrs(htmlAttrs, "height", "media", "sizes", "src", "srcset", "type", "width"),
"span" to attrs(htmlAttrs, "datafld", "dataformatas", "datasrc", "role"),
"strike" to attrs(htmlAttrs, ),
"strong" to attrs(htmlAttrs, "role"),
"style" to attrs(htmlAttrs, "blocking", "media", "type"),
"sub" to attrs(htmlAttrs, "role"),
"summary" to attrs(htmlAttrs, "role"),
"sup" to attrs(htmlAttrs, "role"),
"svg" to attrs(svgTextAttrs, "baseProfile", "clip", "color-interpolation-filters", "color-profile", "contentScriptType", "contentStyleType", "enable-background", "flood-color", "flood-opacity", "height", "lighting-color", "marker-end", "marker-mid", "marker-start", "onabort", "onactivate", "onclick", "onerror", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onresize", "onscroll", "onunload", "onzoom", "overflow", "preserveAspectRatio", "requiredExtensions", "requiredFeatures", "role", "stop-color", "stop-opacity", "systemLanguage", "version", "viewBox", "width", "x", "y", "zoomAndPan"),
"table" to attrs(htmlAttrs, "align", "bgcolor", "border", "cellpadding", "cellspacing", "datafld", "dataformatas", "datapagesize", "datasrc", "frame", "role", "rules", "summary", "valign", "width"),
"tbody" to attrs(htmlAttrs, "align", "char", "charoff", "role", "valign"),
"td" to attrs(htmlAttrs, "abbr", "align", "axis", "bgcolor", "char", "charoff", "colspan", "headers", "height", "nowrap", "role", "rowspan", "scope", "valign", "width"),
"template" to attrs(htmlAttrs, "span", "src"),
"textarea" to attrs(htmlAttrs, "autocomplete", "cols", "datafld", "dataformatas", "datasrc", "dirname", "disabled", "form", "maxlength", "minlength", "name", "placeholder", "readonly", "required", "role", "rows", "wrap"),
"tfoot" to attrs(htmlAttrs, "align", "char", "charoff", "role", "valign"),
"th" to attrs(htmlAttrs, "abbr", "align", "axis", "bgcolor", "char", "charoff", "colspan", "headers", "height", "nowrap", "role", "rowspan", "scope", "valign", "width"),
"thead" to attrs(htmlAttrs, "align", "char", "charoff", "role", "valign"),
"time" to attrs(htmlAttrs, "datetime", "role"),
"title" to attrs(htmlAttrs, ),
"tr" to attrs(htmlAttrs, "align", "bgcolor", "char", "charoff", "role", "valign"),
"track" to attrs(htmlAttrs, "default", "kind", "label", "src", "srclang"),
"tt" to attrs(htmlAttrs, ),
"u" to attrs(htmlAttrs, "role"),
"ul" to attrs(htmlAttrs, "compact", "role", "type"),
"var" to attrs(htmlAttrs, "role"),
"video" to attrs(htmlAttrs, "autoplay", "controls", "crossorigin", "height", "loop", "muted", "playsinline", "poster", "preload", "role", "src", "width"),
"wbr" to attrs(htmlAttrs, "role")
),
Namespace.SVG to tags(
"a" to attrs(svgTextAttrs, "actuate", "arcrole", "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "href", "lighting-color", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "overflow", "rel", "requiredExtensions", "requiredFeatures", "role", "show", "stop-color", "stop-opacity", "systemLanguage", "target", "title", "transform", "type"),
"altGlyphDef" to attrs(svgBasicAttrs, "focusable", "lang", "tabindex"),
"animate" to attrs(svgAttrs, "accumulate", "actuate", "additive", "arcrole", "attributeName", "attributeType", "begin", "by", "calcMode", "dur", "end", "from", "href", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "role", "show", "systemLanguage", "title", "to", "type", "values"),
"animateColor" to attrs(svgAttrs, "accumulate", "actuate", "additive", "arcrole", "attributeName", "attributeType", "begin", "by", "calcMode", "dur", "end", "from", "href", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "role", "show", "systemLanguage", "title", "to", "type", "values"),
"animateMotion" to attrs(svgAttrs, "accumulate", "actuate", "additive", "arcrole", "begin", "by", "calcMode", "dur", "end", "from", "href", "keyPoints", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "origin", "path", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "role", "rotate", "show", "systemLanguage", "title", "to", "type", "values"),
"animateTransform" to attrs(svgAttrs, "accumulate", "actuate", "additive", "arcrole", "attributeName", "attributeType", "begin", "by", "calcMode", "dur", "end", "from", "href", "keySplines", "keyTimes", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "role", "show", "systemLanguage", "title", "to", "type", "values"),
"circle" to attrs(svgGraphicAttrs, "cx", "cy", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "r", "requiredExtensions", "requiredFeatures", "role", "systemLanguage", "transform", "vector-effect"),
"clipPath" to attrs(svgTextAttrs, "clipPathUnits", "requiredExtensions", "requiredFeatures", "systemLanguage", "transform"),
"color-profile" to attrs(svgBasicAttrs, "actuate", "arcrole", "focusable", "href", "lang", "local", "name", "rendering-intent", "role", "show", "tabindex", "title", "type"),
"cursor" to attrs(svgBasicAttrs, "actuate", "arcrole", "externalResourcesRequired", "focusable", "href", "lang", "requiredExtensions", "requiredFeatures", "role", "show", "systemLanguage", "tabindex", "title", "type", "x", "y"),
"defs" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "lighting-color", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "overflow", "requiredExtensions", "requiredFeatures", "stop-color", "stop-opacity", "systemLanguage", "transform"),
"desc" to attrs(svgBasicAttrs, "class", "focusable", "lang", "style", "tabindex"),
"ellipse" to attrs(svgGraphicAttrs, "cx", "cy", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "role", "rx", "ry", "systemLanguage", "transform", "vector-effect"),
"filter" to attrs(svgTextAttrs, "actuate", "arcrole", "clip", "color-interpolation-filters", "color-profile", "enable-background", "filterRes", "filterUnits", "flood-color", "flood-opacity", "height", "href", "lighting-color", "marker-end", "marker-mid", "marker-start", "overflow", "primitiveUnits", "role", "show", "stop-color", "stop-opacity", "title", "type", "width", "x", "y"),
"font" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "horiz-adv-x", "horiz-origin-x", "horiz-origin-y", "lighting-color", "marker-end", "marker-mid", "marker-start", "overflow", "stop-color", "stop-opacity", "vert-adv-y", "vert-origin-x", "vert-origin-y"),
"font-face" to attrs(svgBasicAttrs, "accent-height", "alphabetic", "ascent", "bbox", "cap-height", "descent", "focusable", "font-family", "font-size", "font-stretch", "font-style", "font-variant", "font-weight", "hanging", "ideographic", "lang", "mathematical", "overline-position", "overline-thickness", "panose-1", "slope", "stemh", "stemv", "strikethrough-position", "strikethrough-thickness", "tabindex", "underline-position", "underline-thickness", "unicode-range", "units-per-em", "v-alphabetic", "v-hanging", "v-ideographic", "v-mathematical", "widths", "x-height"),
"foreignObject" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "height", "lighting-color", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "overflow", "requiredExtensions", "requiredFeatures", "role", "stop-color", "stop-opacity", "systemLanguage", "transform", "vector-effect", "width", "x", "y"),
"g" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "lighting-color", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "overflow", "requiredExtensions", "requiredFeatures", "role", "stop-color", "stop-opacity", "systemLanguage", "transform"),
"image" to attrs(svgBasicAttrs, "actuate", "arcrole", "class", "clip", "clip-path", "clip-rule", "color", "color-interpolation", "color-profile", "color-rendering", "cursor", "display", "externalResourcesRequired", "fill-opacity", "filter", "focusable", "height", "href", "image-rendering", "lang", "mask", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "opacity", "overflow", "pointer-events", "preserveAspectRatio", "requiredExtensions", "requiredFeatures", "role", "shape-rendering", "show", "stroke-opacity", "style", "systemLanguage", "tabindex", "text-rendering", "title", "transform", "type", "vector-effect", "visibility", "width", "x", "y"),
"line" to attrs(svgGraphicAttrs, "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "role", "systemLanguage", "transform", "vector-effect", "x1", "x2", "y1", "y2"),
"linearGradient" to attrs(svgBasicAttrs, "actuate", "arcrole", "class", "color", "color-interpolation", "color-rendering", "externalResourcesRequired", "focusable", "gradientTransform", "gradientUnits", "href", "lang", "role", "show", "spreadMethod", "stop-color", "stop-opacity", "style", "tabindex", "title", "type", "x1", "x2", "y1", "y2"),
"marker" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "lighting-color", "marker-end", "marker-mid", "marker-start", "markerHeight", "markerUnits", "markerWidth", "orient", "overflow", "preserveAspectRatio", "refX", "refY", "stop-color", "stop-opacity", "viewBox"),
"mask" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "height", "lighting-color", "marker-end", "marker-mid", "marker-start", "maskContentUnits", "maskUnits", "overflow", "requiredExtensions", "requiredFeatures", "stop-color", "stop-opacity", "systemLanguage", "width", "x", "y"),
"metadata" to attrs(svgBasicAttrs, "focusable", "lang", "tabindex"),
"path" to attrs(svgGraphicAttrs, "d", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "pathLength", "requiredExtensions", "requiredFeatures", "role", "systemLanguage", "transform", "vector-effect"),
"pattern" to attrs(svgTextAttrs, "actuate", "arcrole", "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "height", "href", "lighting-color", "marker-end", "marker-mid", "marker-start", "overflow", "patternContentUnits", "patternTransform", "patternUnits", "preserveAspectRatio", "requiredExtensions", "requiredFeatures", "role", "show", "stop-color", "stop-opacity", "systemLanguage", "title", "type", "viewBox", "width", "x", "y"),
"polygon" to attrs(svgGraphicAttrs, "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "points", "requiredExtensions", "requiredFeatures", "role", "systemLanguage", "transform", "vector-effect"),
"polyline" to attrs(svgGraphicAttrs, "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "points", "requiredExtensions", "requiredFeatures", "role", "systemLanguage", "transform", "vector-effect"),
"radialGradient" to attrs(svgBasicAttrs, "actuate", "arcrole", "class", "color", "color-interpolation", "color-rendering", "cx", "cy", "externalResourcesRequired", "focusable", "fx", "fy", "gradientTransform", "gradientUnits", "href", "lang", "r", "role", "show", "spreadMethod", "stop-color", "stop-opacity", "style", "tabindex", "title", "type"),
"rect" to attrs(svgGraphicAttrs, "height", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "role", "rx", "ry", "systemLanguage", "transform", "vector-effect", "width", "x", "y"),
"script" to attrs(svgBasicAttrs, "actuate", "arcrole", "externalResourcesRequired", "focusable", "href", "lang", "role", "show", "tabindex", "title", "type"),
"set" to attrs(svgAttrs, "actuate", "arcrole", "attributeName", "attributeType", "begin", "dur", "end", "href", "max", "min", "onbegin", "onend", "onload", "onrepeat", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "restart", "role", "show", "systemLanguage", "title", "to", "type"),
"style" to attrs(svgBasicAttrs, "lang", "media", "title", "type"),
"svg" to attrs(svgTextAttrs, "baseProfile", "clip", "color-interpolation-filters", "color-profile", "contentScriptType", "contentStyleType", "enable-background", "flood-color", "flood-opacity", "height", "lighting-color", "marker-end", "marker-mid", "marker-start", "onabort", "onactivate", "onclick", "onerror", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onresize", "onscroll", "onunload", "onzoom", "overflow", "preserveAspectRatio", "requiredExtensions", "requiredFeatures", "role", "stop-color", "stop-opacity", "systemLanguage", "version", "viewBox", "width", "x", "y", "zoomAndPan"),
"switch" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "lighting-color", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "overflow", "requiredExtensions", "requiredFeatures", "stop-color", "stop-opacity", "systemLanguage", "transform"),
"symbol" to attrs(svgTextAttrs, "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "height", "lighting-color", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "overflow", "preserveAspectRatio", "role", "stop-color", "stop-opacity", "viewBox", "width"),
"text" to attrs(svgTextAttrs, "dx", "dy", "lengthAdjust", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "requiredExtensions", "requiredFeatures", "role", "rotate", "systemLanguage", "textLength", "transform", "vector-effect", "x", "y"),
"title" to attrs(svgBasicAttrs, "class", "focusable", "lang", "style", "tabindex"),
"use" to attrs(svgTextAttrs, "actuate", "arcrole", "clip", "color-interpolation-filters", "color-profile", "enable-background", "flood-color", "flood-opacity", "height", "href", "lighting-color", "marker-end", "marker-mid", "marker-start", "onactivate", "onclick", "onfocusin", "onfocusout", "onload", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "overflow", "requiredExtensions", "requiredFeatures", "role", "show", "stop-color", "stop-opacity", "systemLanguage", "title", "transform", "type", "vector-effect", "width", "x", "y"),
"view" to attrs(svgBasicAttrs, "externalResourcesRequired", "focusable", "lang", "preserveAspectRatio", "tabindex", "viewBox", "viewTarget", "zoomAndPan")
),
Namespace.MathML to tags(
"abs" to attrs(mathAttrs, ),
"and" to attrs(mathAttrs, ),
"apply" to attrs(mathBasicAttrs, "other", "style"),
"approx" to attrs(mathAttrs, ),
"arccos" to attrs(mathAttrs, ),
"arccosh" to attrs(mathAttrs, ),
"arccot" to attrs(mathAttrs, ),
"arccoth" to attrs(mathAttrs, ),
"arccsc" to attrs(mathAttrs, ),
"arccsch" to attrs(mathAttrs, ),
"arcsec" to attrs(mathAttrs, ),
"arcsech" to attrs(mathAttrs, ),
"arcsin" to attrs(mathAttrs, ),
"arcsinh" to attrs(mathAttrs, ),
"arctan" to attrs(mathAttrs, ),
"arctanh" to attrs(mathAttrs, ),
"arg" to attrs(mathAttrs, ),
"bind" to attrs(mathBasicAttrs, "other", "style"),
"card" to attrs(mathAttrs, ),
"cartesianproduct" to attrs(mathAttrs, ),
"cbytes" to attrs(mathAttrs, ),
"ceiling" to attrs(mathAttrs, ),
"cerror" to attrs(mathBasicAttrs, "other", "style"),
"ci" to attrs(mathAttrs, "type"),
"cn" to attrs(mathAttrs, "base", "type"),
"codomain" to attrs(mathAttrs, ),
"complexes" to attrs(mathAttrs, ),
"compose" to attrs(mathAttrs, ),
"conjugate" to attrs(mathAttrs, ),
"cos" to attrs(mathAttrs, ),
"cosh" to attrs(mathAttrs, ),
"cot" to attrs(mathAttrs, ),
"coth" to attrs(mathAttrs, ),
"cs" to attrs(mathAttrs, ),
"csc" to attrs(mathAttrs, ),
"csch" to attrs(mathAttrs, ),
"csymbol" to attrs(mathAttrs, "cd", "type"),
"curl" to attrs(mathAttrs, ),
"declare" to attrs(emptyList(), "definitionURL", "encoding", "nargs", "occurrence", "scope", "type"),
"determinant" to attrs(mathAttrs, ),
"diff" to attrs(mathAttrs, ),
"divergence" to attrs(mathAttrs, ),
"divide" to attrs(mathAttrs, ),
"domain" to attrs(mathAttrs, ),
"emptyset" to attrs(mathAttrs, ),
"eq" to attrs(mathAttrs, ),
"equivalent" to attrs(mathAttrs, ),
"eulergamma" to attrs(mathAttrs, ),
"exists" to attrs(mathAttrs, ),
"exp" to attrs(mathAttrs, ),
"exponentiale" to attrs(mathAttrs, ),
"factorial" to attrs(mathAttrs, ),
"factorof" to attrs(mathAttrs, ),
"false" to attrs(mathAttrs, ),
"floor" to attrs(mathAttrs, ),
"forall" to attrs(mathAttrs, ),
"gcd" to attrs(mathAttrs, ),
"geq" to attrs(mathAttrs, ),
"grad" to attrs(mathAttrs, ),
"gt" to attrs(mathAttrs, ),
"ident" to attrs(mathAttrs, ),
"image" to attrs(mathAttrs, ),
"imaginary" to attrs(mathAttrs, ),
"imaginaryi" to attrs(mathAttrs, ),
"implies" to attrs(mathAttrs, ),
"in" to attrs(mathAttrs, ),
"infinity" to attrs(mathAttrs, ),
"int" to attrs(mathAttrs, ),
"integers" to attrs(mathAttrs, ),
"intersect" to attrs(mathAttrs, ),
"interval" to attrs(mathAttrs, "closure"),
"inverse" to attrs(mathAttrs, ),
"lambda" to attrs(mathAttrs, ),
"laplacian" to attrs(mathAttrs, ),
"lcm" to attrs(mathAttrs, ),
"leq" to attrs(mathAttrs, ),
"limit" to attrs(mathAttrs, ),
"list" to attrs(mathAttrs, "order"),
"ln" to attrs(mathAttrs, ),
"log" to attrs(mathAttrs, ),
"lt" to attrs(mathAttrs, ),
"maction" to attrs(mathBasicAttrs, "actiontype", "mathbackground", "mathcolor", "other", "selection", "style"),
"maligngroup" to attrs(mathBasicAttrs, "groupalign", "mathbackground", "mathcolor", "other", "style"),
"malignmark" to attrs(mathBasicAttrs, "edge", "mathbackground", "mathcolor", "other", "style"),
"matrix" to attrs(mathAttrs, ),
"matrixrow" to attrs(mathAttrs, ),
"max" to attrs(mathAttrs, ),
"mean" to attrs(mathAttrs, ),
"median" to attrs(mathAttrs, ),
"menclose" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "notation", "other", "style"),
"merror" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style"),
"mfenced" to attrs(mathBasicAttrs, "close", "mathbackground", "mathcolor", "open", "other", "separators", "style"),
"mfrac" to attrs(mathBasicAttrs, "bevelled", "denomalign", "linethickness", "mathbackground", "mathcolor", "numalign", "other", "style"),
"mi" to attrs(mathBasicAttrs, "background", "color", "dir", "fontfamily", "fontsize", "fontstyle", "fontweight", "mathbackground", "mathcolor", "mathsize", "mathvariant", "other", "style"),
"min" to attrs(mathAttrs, ),
"minus" to attrs(mathAttrs, ),
"mlongdiv" to attrs(mathBasicAttrs, "longdivstyle", "mathbackground", "mathcolor", "other", "position", "shift", "style"),
"mmultiscripts" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style", "subscriptshift", "superscriptshift"),
"mn" to attrs(mathBasicAttrs, "background", "color", "dir", "fontfamily", "fontsize", "fontstyle", "fontweight", "mathbackground", "mathcolor", "mathsize", "mathvariant", "other", "style"),
"mo" to attrs(mathBasicAttrs, "accent", "background", "color", "dir", "fence", "fontfamily", "fontsize", "fontstyle", "fontweight", "form", "indentalign", "indentalignfirst", "indentalignlast", "indentshift", "indentshiftfirst", "indentshiftlast", "indenttarget", "largeop", "linebreak", "linebreakmultchar", "linebreakstyle", "lineleading", "lspace", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "other", "rspace", "separator", "stretchy", "style", "symmetric"),
"mode" to attrs(mathAttrs, ),
"moment" to attrs(mathAttrs, ),
"mover" to attrs(mathBasicAttrs, "accent", "align", "mathbackground", "mathcolor", "other", "style"),
"mpadded" to attrs(mathBasicAttrs, "depth", "height", "lspace", "mathbackground", "mathcolor", "other", "style", "voffset", "width"),
"mphantom" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style"),
"mroot" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style"),
"mrow" to attrs(mathBasicAttrs, "dir", "mathbackground", "mathcolor", "other", "style"),
"ms" to attrs(mathBasicAttrs, "background", "color", "dir", "fontfamily", "fontsize", "fontstyle", "fontweight", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "other", "rquote", "style"),
"mspace" to attrs(mathBasicAttrs, "background", "color", "depth", "dir", "fontfamily", "fontsize", "fontstyle", "fontweight", "height", "indentalign", "indentalignfirst", "indentalignlast", "indentshift", "indentshiftfirst", "indentshiftlast", "indenttarget", "linebreak", "mathbackground", "mathcolor", "mathsize", "mathvariant", "other", "style", "width"),
"msqrt" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style"),
"mstack" to attrs(mathBasicAttrs, "align", "charalign", "charspacing", "mathbackground", "mathcolor", "other", "stackalign", "style"),
"mstyle" to attrs(mathBasicAttrs, "accent", "accentunder", "align", "alignmentscope", "background", "bevelled", "charalign", "charspacing", "close", "color", "columnalign", "columnlines", "columnspacing", "columnspan", "columnwidth", "crossout", "decimalpoint", "denomalign", "depth", "dir", "displaystyle", "edge", "equalcolumns", "equalrows", "fence", "fontfamily", "fontsize", "fontstyle", "fontweight", "form", "frame", "framespacing", "groupalign", "height", "indentalign", "indentalignfirst", "indentalignlast", "indentshift", "indentshiftfirst", "indentshiftlast", "indenttarget", "infixlinebreakstyle", "largeop", "leftoverhang", "length", "linebreak", "linebreakmultchar", "linebreakstyle", "lineleading", "linethickness", "location", "longdivstyle", "lquote", "lspace", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "mediummathspace", "minlabelspacing", "minsize", "movablelimits", "mslinethickness", "notation", "numalign", "open", "other", "position", "rightoverhang", "rowalign", "rowlines", "rowspacing", "rowspan", "rquote", "rspace", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "shift", "side", "stackalign", "stretchy", "style", "subscriptshift", "superscriptshift", "symmetric", "thickmathspace", "thinmathspace", "valign", "verythickmathspace", "verythinmathspace", "veryverythickmathspace", "veryverythinmathspace", "width"),
"msub" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style", "subscriptshift"),
"msubsup" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style", "subscriptshift", "superscriptshift"),
"msup" to attrs(mathBasicAttrs, "mathbackground", "mathcolor", "other", "style", "superscriptshift"),
"mtable" to attrs(mathBasicAttrs, "align", "alignmentscope", "columnalign", "columnlines", "columnspacing", "columnwidth", "displaystyle", "equalcolumns", "equalrows", "frame", "framespacing", "groupalign", "mathbackground", "mathcolor", "minlabelspacing", "other", "rowalign", "rowlines", "rowspacing", "side", "style", "width"),
"mtext" to attrs(mathBasicAttrs, "background", "color", "dir", "fontfamily", "fontsize", "fontstyle", "fontweight", "mathbackground", "mathcolor", "mathsize", "mathvariant", "other", "style"),
"munder" to attrs(mathBasicAttrs, "accentunder", "align", "mathbackground", "mathcolor", "other", "style"),
"munderover" to attrs(mathBasicAttrs, "accent", "accentunder", "align", "mathbackground", "mathcolor", "other", "style"),
"naturalnumbers" to attrs(mathAttrs, ),
"neq" to attrs(mathAttrs, ),
"not" to attrs(mathAttrs, ),
"notanumber" to attrs(mathAttrs, ),
"notin" to attrs(mathAttrs, ),
"notprsubset" to attrs(mathAttrs, ),
"notsubset" to attrs(mathAttrs, ),
"or" to attrs(mathAttrs, ),
"outerproduct" to attrs(mathAttrs, ),
"partialdiff" to attrs(mathAttrs, ),
"pi" to attrs(mathAttrs, ),
"piecewise" to attrs(mathAttrs, ),
"plus" to attrs(mathAttrs, ),
"power" to attrs(mathAttrs, ),
"primes" to attrs(mathAttrs, ),
"product" to attrs(mathAttrs, ),
"prsubset" to attrs(mathAttrs, ),
"quotient" to attrs(mathAttrs, ),
"rationals" to attrs(mathAttrs, ),
"real" to attrs(mathAttrs, ),
"reals" to attrs(mathAttrs, ),
"rem" to attrs(mathAttrs, ),
"root" to attrs(mathAttrs, ),
"scalarproduct" to attrs(mathAttrs, ),
"sdev" to attrs(mathAttrs, ),
"sec" to attrs(mathAttrs, ),
"sech" to attrs(mathAttrs, ),
"selector" to attrs(mathAttrs, ),
"semantics" to attrs(mathAttrs, "cd", "name"),
"set" to attrs(mathAttrs, "type"),
"setdiff" to attrs(mathAttrs, ),
"share" to attrs(mathBasicAttrs, "other", "src", "style"),
"sin" to attrs(mathAttrs, ),
"sinh" to attrs(mathAttrs, ),
"subset" to attrs(mathAttrs, ),
"sum" to attrs(mathAttrs, ),
"tan" to attrs(mathAttrs, ),
"tanh" to attrs(mathAttrs, ),
"tendsto" to attrs(mathAttrs, "type"),
"times" to attrs(mathAttrs, ),
"transpose" to attrs(mathAttrs, ),
"true" to attrs(mathAttrs, ),
"union" to attrs(mathAttrs, ),
"variance" to attrs(mathAttrs, ),
"vector" to attrs(mathAttrs, ),
"vectorproduct" to attrs(mathAttrs, ),
"xor" to attrs(mathAttrs, )
)
)
}
}

View File

@@ -16,6 +16,7 @@
package com.intellij.psi.impl.source.resolve.reference.impl.manipulators;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.AbstractElementManipulator;
import com.intellij.psi.PsiElement;
@@ -30,10 +31,10 @@ import com.intellij.util.CharTable;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import static com.intellij.xml.util.documentation.HtmlDescriptorsTable.LOG;
public class XmlProcessingInstructionManipulator extends AbstractElementManipulator<XmlProcessingInstruction> {
private static final Logger LOG = Logger.getInstance(XmlProcessingInstructionManipulator.class);
@Override
public XmlProcessingInstruction handleContentChange(@NotNull XmlProcessingInstruction element, @NotNull TextRange range, String newContent) throws IncorrectOperationException {
CheckUtil.checkWritable(element);

View File

@@ -1,41 +0,0 @@
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.xml.util.documentation;
import com.intellij.psi.xml.XmlTag;
import java.util.LinkedList;
import java.util.List;
/**
* @author maxim
*/
class CompositeAttributeTagDescriptor extends HtmlAttributeDescriptor {
final List<HtmlAttributeDescriptor> attributes = new LinkedList<>();
HtmlAttributeDescriptor findHtmlAttributeInContext(XmlTag tag) {
if (tag == null) return null;
String contextName = tag.getName();
for (final HtmlAttributeDescriptor attributeDescriptor : attributes) {
if (attributeDescriptor.isValidParentTagName(contextName)) {
return attributeDescriptor;
}
}
return null;
}
}

View File

@@ -1,61 +0,0 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.xml.util.documentation;
/**
* @author maxim
*/
class EntityDescriptor {
private String description;
private String helpRef;
private String name;
private char dtd;
static final char LOOSE_DTD = 'L';
static final char FRAME_DTD = 'D';
char getDtd() {
return dtd;
}
void setDtd(char dtd) {
this.dtd = dtd;
}
String getDescription() {
return description;
}
void setDescription(String description) {
this.description = description;
}
String getHelpRef() {
return helpRef;
}
void setHelpRef(String helpRef) {
this.helpRef = helpRef;
}
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
}

View File

@@ -1,65 +0,0 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.xml.util.documentation;
import java.util.Arrays;
/**
* @author maxim
*/
class HtmlAttributeDescriptor extends EntityDescriptor {
private String myType;
private boolean myHasDefaultValue;
private String[] mySetOfParentTags;
private boolean myParentSetIsExclusionSet;
boolean isValidParentTagName(String str) {
boolean containsInSet = Arrays.binarySearch(mySetOfParentTags, str) >= 0;
return containsInSet == !myParentSetIsExclusionSet;
}
String getType() {
return myType;
}
void setType(String type) {
this.myType = type;
}
boolean isHasDefaultValue() {
return myHasDefaultValue;
}
void setHasDefaultValue(boolean hasDefaultValue) {
this.myHasDefaultValue = hasDefaultValue;
}
String[] getSetOfParentTags() {
return mySetOfParentTags;
}
boolean isParentSetIsExclusionSet() {
return myParentSetIsExclusionSet;
}
void setParentSetIsExclusionSet(boolean _parentSetIsExclusionSet) {
myParentSetIsExclusionSet = _parentSetIsExclusionSet;
}
void setSetOfParentTags(String[] _setOfParentTags) {
mySetOfParentTags = _setOfParentTags;
}
}

View File

@@ -1,179 +1,31 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.xml.util.documentation;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.JDOMUtil;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jetbrains.annotations.NonNls;
import com.intellij.xml.util.Html5TagAndAttributeNamesProvider;
import java.io.IOException;
import java.util.*;
import java.util.Collections;
import java.util.Locale;
import java.util.Set;
import java.util.stream.Collectors;
import static com.intellij.util.ObjectUtils.notNull;
/**
* @author maxim
* @deprecated Use {@link Html5TagAndAttributeNamesProvider} instead
*/
@Deprecated(forRemoval = true)
public final class HtmlDescriptorsTable {
public static final Logger LOG = Logger.getInstance(HtmlDescriptorsTable.class);
private static final HashMap<String,HtmlTagDescriptor> ourTagTable = new HashMap<>();
private static final HashMap<String,HtmlAttributeDescriptor> ourAttributeTable = new HashMap<>();
@NonNls
public static final String HTMLTABLE_RESOURCE_NAME = "htmltable.xml";
@NonNls
public static final String HTML5TABLE_RESOURCE_NAME = "html5table.xml";
@NonNls
private static final String MATHML_RESOURCE_NAME = "mathmltable.xml";
@NonNls
private static final String SVG_RESOURCE_NAME = "svgtable.xml";
@NonNls
public static final String TAG_ELEMENT_NAME = "tag";
@NonNls
public static final String BASE_HELP_REF_ATTR = "baseHelpRef";
@NonNls
public static final String NAME_ATTR = "name";
@NonNls
public static final String HELPREF_ATTR = "helpref";
@NonNls
public static final String DESCRIPTION_ATTR = "description";
@NonNls public static final String STARTTAG_ATTR = "startTag";
@NonNls public static final String ENDTAG_ATTR = "endTag";
@NonNls public static final String EMPTY_ATTR = "empty";
@NonNls public static final String DTD_ATTR = "dtd";
@NonNls public static final String ATTRIBUTE_ELEMENT_NAME = "attribute";
@NonNls public static final String TYPE_ATTR = "type";
@NonNls public static final String DEFAULT_ATTR = "default";
@NonNls public static final String RELATED_TAGS_ATTR = "relatedTags";
private HtmlDescriptorsTable() {
}
static {
try {
Set<String> htmlTagNames = new HashSet<>();
loadHtmlElements(HTMLTABLE_RESOURCE_NAME, htmlTagNames);
loadHtmlElements(HTML5TABLE_RESOURCE_NAME, htmlTagNames);
loadHtmlElements(MATHML_RESOURCE_NAME, htmlTagNames);
loadHtmlElements(SVG_RESOURCE_NAME, htmlTagNames);
} catch (Exception ex) {
LOG.error(ex);
}
}
private static void loadHtmlElements(final String resourceName, Collection<? super String> htmlTagNames) throws JDOMException, IOException {
final Element rootElement = JDOMUtil.load(HtmlDescriptorsTable.class.getResourceAsStream(resourceName));
final List<Element> elements = rootElement.getChildren(TAG_ELEMENT_NAME);
final String baseHtmlExtDocUrl = rootElement.getAttribute(BASE_HELP_REF_ATTR).getValue();
for (Element element : elements) {
String htmlTagName = element.getAttributeValue(NAME_ATTR);
htmlTagNames.add(htmlTagName);
HtmlTagDescriptor value = new HtmlTagDescriptor();
ourTagTable.put(htmlTagName, value);
value.setHelpRef(baseHtmlExtDocUrl + element.getAttributeValue(HELPREF_ATTR));
value.setDescription(element.getAttributeValue(DESCRIPTION_ATTR));
value.setName(htmlTagName);
value.setHasStartTag(element.getAttribute(STARTTAG_ATTR).getBooleanValue());
value.setHasEndTag(element.getAttribute(ENDTAG_ATTR).getBooleanValue());
value.setEmpty(element.getAttribute(EMPTY_ATTR).getBooleanValue());
String attributeValue = element.getAttributeValue(DTD_ATTR);
if (attributeValue.length() > 0) {
value.setDtd(attributeValue.charAt(0));
}
}
final List<Element> attributes = rootElement.getChildren(ATTRIBUTE_ELEMENT_NAME);
for (Element element : attributes) {
String attrName = element.getAttributeValue(NAME_ATTR);
HtmlAttributeDescriptor value = new HtmlAttributeDescriptor();
HtmlAttributeDescriptor previousDescriptor = ourAttributeTable.get(attrName);
if (previousDescriptor == null) {
ourAttributeTable.put(attrName, value);
}
else {
CompositeAttributeTagDescriptor parentDescriptor;
if (!(previousDescriptor instanceof CompositeAttributeTagDescriptor)) {
parentDescriptor = new CompositeAttributeTagDescriptor();
ourAttributeTable.put(attrName, parentDescriptor);
parentDescriptor.attributes.add(previousDescriptor);
}
else {
parentDescriptor = (CompositeAttributeTagDescriptor)previousDescriptor;
}
parentDescriptor.attributes.add(value);
}
value.setHelpRef(baseHtmlExtDocUrl + element.getAttributeValue(HELPREF_ATTR));
value.setDescription(element.getAttributeValue(DESCRIPTION_ATTR));
value.setName(attrName);
String attributeValue = element.getAttributeValue(DTD_ATTR);
if (attributeValue.length() > 0) {
value.setDtd(attributeValue.charAt(0));
}
value.setType(element.getAttributeValue(TYPE_ATTR));
value.setHasDefaultValue(element.getAttribute(DEFAULT_ATTR).getBooleanValue());
StringTokenizer tokenizer = new StringTokenizer(element.getAttributeValue(RELATED_TAGS_ATTR), ",");
int tokenCount = tokenizer.countTokens();
for (int i = 0; i < tokenCount; ++i) {
final String s = tokenizer.nextToken();
if (s.equals("!")) {
value.setParentSetIsExclusionSet(true);
}
else {
if (value.getSetOfParentTags() == null) {
value.setSetOfParentTags(new String[tokenCount - (value.isParentSetIsExclusionSet() ? 1 : 0)]);
}
value.getSetOfParentTags()[i - (value.isParentSetIsExclusionSet() ? 1 : 0)] = s;
}
}
Arrays.sort(value.getSetOfParentTags());
}
}
public static HtmlTagDescriptor getTagDescriptor(String tagName) {
return ourTagTable.get(tagName);
}
public static HtmlAttributeDescriptor getAttributeDescriptor(String attributeName) {
return ourAttributeTable.get(attributeName);
}
private static final Set<String> knownAttributes = Html5TagAndAttributeNamesProvider.getTags(false)
.stream().flatMap(tag -> notNull(Html5TagAndAttributeNamesProvider.getTagAttributes(tag, false), Collections.<CharSequence>emptySet()).stream())
.map(attr -> attr.toString())
.collect(Collectors.toSet());
/**
* @deprecated Use {@link Html5TagAndAttributeNamesProvider} instead
*/
@Deprecated(forRemoval = true)
public static boolean isKnownAttributeDescriptor(String attributeName) {
return getAttributeDescriptor(attributeName) != null;
return knownAttributes.contains(attributeName.toLowerCase(Locale.US));
}
}

View File

@@ -1,49 +0,0 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.xml.util.documentation;
/**
* @author maxim
*/
class HtmlTagDescriptor extends EntityDescriptor {
boolean isHasStartTag() {
return hasStartTag;
}
void setHasStartTag(boolean hasStartTag) {
this.hasStartTag = hasStartTag;
}
boolean isHasEndTag() {
return hasEndTag;
}
void setHasEndTag(boolean hasEndTag) {
this.hasEndTag = hasEndTag;
}
boolean isEmpty() {
return empty;
}
void setEmpty(boolean empty) {
this.empty = empty;
}
private boolean hasStartTag;
private boolean hasEndTag;
private boolean empty;
}

View File

@@ -1,210 +0,0 @@
<html-property-table baseHelpRef="http://www.w3.org/TR/mathml-for-css/">
<tag name = "mi"
helpref = "#mi"
description = "represents a mathematical identifier; its rendering consists of the text content displayed in a typeface corresponding to the mathvariant attribute"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mn"
helpref = "#mn"
description = "represents a numeric literal or other data that should be rendered as a numeric literal"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mo"
helpref = "#mo"
description = "represents an operator or anything that should be rendered as an operator"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mtext"
helpref = "#mtext"
description = "intended to denote commentary text"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mspace"
helpref = "#mspace"
description = "represents a blank space of any desired size, as set by its attributes"
startTag = "true"
endTag = "true"
empty = "true"
dtd = ""
/>
<tag name = "ms"
helpref = "#ms"
description = "used to represent string literals in expressions meant to be interpreted by computer algebra systems or other systems containing programming languages"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mfrac"
helpref = "#mfrac"
description = "used for fractions"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "msqrt"
helpref = "#msqrt"
description = "used for square roots"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mroot"
helpref = "#mroot"
description = "used to draw radicals with indices"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "merror"
helpref = "#merror"
description = "displays its contents as an error message"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mphantom"
helpref = "#mphantom"
description = "renders its content as invisible, but with the same size and other dimensions, including baseline position, that its contents would have if they were rendered normally"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mfenced"
helpref = "#mfenced"
description = "provides a convenient way of expressing common constructs involving fences (i.e., braces, brackets, and parentheses)"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "menclose"
helpref = "#menclose"
description = "renders its content inside the enclosing notation specified by its notation attribute, menclose accepts any number of arguments"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "msup"
helpref = "#msup"
description = "used to attach a superscript to a base"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "msubsup"
helpref = "#msubsup"
description = "used to attach both a subscript and a superscript to a base expression"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "munder"
helpref = "#munder"
description = "used to attach an underscript below a base"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mover"
helpref = "#mover"
description = "used to attach an overscript over a base"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "munderover"
helpref = "#munderover"
description = "used to attach both an underscript and an overscript to a base"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mmultiscripts"
helpref = "#mmultiscripts"
description = "allows adding pairs of prescripts to one base expression"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mtable"
helpref = "#mtable"
description = "a matrix or table is specified using the mtable element"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mtr"
helpref = "#mtr"
description = "represents one row in a table or matrix"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mtd"
helpref = "#mtd"
description = "represents one entry, or cell, in a table or matrix"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mrow"
helpref = "#mrow"
description = "used to add operator before last operand in elementary math notations such as 2D addition, subtraction and multiplication"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mlongdiv"
helpref = "#mlongdiv"
description = "elementary math notations for long division can be produced using mlongdiv layout schemata"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "maction"
helpref = "#maction"
description = "to provide a mechanism for binding actions to expressions, MathML provides the maction element"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "semantics"
helpref = "#semantics"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
</html-property-table>

View File

@@ -1,634 +0,0 @@
<html-property-table baseHelpRef="http://www.w3.org/TR/SVG/">
<tag name = "a"
helpref = "linking.html#AElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "altGlyph"
helpref = "text.html#AltGlyphElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "altGlyphDef"
helpref = "text.html#AltGlyphDefElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "altGlyphItem"
helpref = "text.html#AltGlyphItemElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "animate"
helpref = "animate.html#AnimateElement"
description = "heading"
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "animateColor"
helpref = "animate.html#AnimateColorElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "animateMotion"
helpref = "animate.html#AnimateMotionElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "animateTransform"
helpref = "animate.html#AnimateTransformElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "circle"
helpref = "shapes.html#CircleElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "clipPath"
helpref = "masking.html#ClipPathElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "color-profile"
helpref = "color.html#ColorProfileElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "cursor"
helpref = "interact.html#CursorElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "defs"
helpref = "struct.html#DefsElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "desc"
helpref = "struct.html#DescElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "ellipse"
helpref = "shapes.html#EllipseElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feBlend"
helpref = "filters.html#feBlendElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feColorMatrix"
helpref = "filters.html#feColorMatrixElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feComponentTransfer"
helpref = "filters.html#feComponentTransferElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feComposite"
helpref = "filters.html#feCompositeElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feConvolveMatrix"
helpref = "filters.html#feConvolveMatrixElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feDiffuseLighting"
helpref = "filters.html#feDiffuseLightingElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feDisplacementMap"
helpref = "filters.html#feDisplacementMapElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feDistantLight"
helpref = "filters.html#feDistantLightElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feFlood"
helpref = "filters.html#feFloodElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feFuncA"
helpref = "filters.html#feFuncAElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feFuncB"
helpref = "filters.html#feFuncBElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feFuncG"
helpref = "filters.html#feFuncGElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feFuncR"
helpref = "filters.html#feFuncRElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feGaussianBlur"
helpref = "filters.html#feGaussianBlurElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feImage"
helpref = "filters.html#feImageElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feMerge"
helpref = "filters.html#feMergeElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feMergeNode"
helpref = "filters.html#feMergeNodeElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feMorphology"
helpref = "filters.html#feMorphologyElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feOffset"
helpref = "filters.html#feOffsetElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "fePointLight"
helpref = "filters.html#fePointLightElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feSpecularLighting"
helpref = "filters.html#feSpecularLightingElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feSpotLight"
helpref = "filters.html#feSpotLightElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feTile"
helpref = "filters.html#feTileElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "feTurbulence"
helpref = "filters.html#feTurbulenceElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "filter"
helpref = "filters.html#FilterElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "font"
helpref = "fonts.html#FontElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "font-face"
helpref = "fonts.html#FontFaceElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "font-face-format"
helpref = "fonts.html#FontFaceFormatElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "font-face-name"
helpref = "fonts.html#FontFaceNamecElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "font-face-src"
helpref = "fonts.html#FontFaceSrcElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "font-face-uri"
helpref = "fonts.html#FontFaceURIElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "foreignObject"
helpref = "extend.html#ForeignObjectElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "g"
helpref = "struct.html#GElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "glyph"
helpref = "fonts.html#GlyphElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "glyphRef"
helpref = "text.html#GlyphRefElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "hkern"
helpref = "fonts.html#HKernElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "image"
helpref = "struct.html#ImageElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "line"
helpref = "shapes.html#LineElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "linearGradient"
helpref = "pservers.html#LinearGradientElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "marker"
helpref = "painting.html#MarkerElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mask"
helpref = "masking.html#MaskElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "metadata"
helpref = "metadata.html#MetadataElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "missing-glyph"
helpref = "fonts.html#MissingGlyphElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "mpath"
helpref = "animate.html#MPathElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "path"
helpref = "paths.html#PathElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "pattern"
helpref = "pservers.html#PatternElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "polygon"
helpref = "shapes.html#PolygonElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "polyline"
helpref = "shapes.html#PolylineElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "radialGradient"
helpref = "pservers.html#RadialGradientElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "rect"
helpref = "shapes.html#RectElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "set"
helpref = "animate.html#SetElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "stop"
helpref = "pservers.html#StopElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "style"
helpref = "styling.html#StyleElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "svg"
helpref = "struct.html#SVGElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "switch"
helpref = "struct.html#SwitchElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "symbol"
helpref = "struct.html#SymbolElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "text"
helpref = "text.html#TextElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "textPath"
helpref = "text.html#TextPathElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "title"
helpref = "struct.html#TitleElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "tref"
helpref = "text.html#TRefElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "tspan"
helpref = "text.html#TSpanElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "use"
helpref = "struct.html#UseElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "view"
helpref = "linking.html#ViewElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
<tag name = "vkern"
helpref = "fonts.html#VKernElement"
description = ""
startTag = "true"
endTag = "true"
empty = "false"
dtd = ""
/>
</html-property-table>