Tag.action = filter: remove tags, but keep content, validate: keep content as long as it passes rules, remove: remove tag and contents
Attribute.name = id, class, href, align, width, etc.
Attribute.onInvalid = what to do when the attribute is invalid, e.g., remove the tag (removeTag), remove the attribute (removeAttribute), filter the tag (filterTag)
Attribute.description = What rules in English you want to tell the users they can have for this attribute. Include helpful things so they'll be able to tune their HTML
-->
<!--
Some attributes are common to all (or most) HTML tags. There aren't many that qualify for this. You have to make sure there's no
collisions between any of these attribute names with attribute names of other tags that are for different purposes.
-->
<common-attributes>
<attributename="lang"description="The 'lang' attribute tells the browser what language the element's attribute values and content are written in">
<regexp-list>
<regexpvalue="[a-zA-Z]{2,20}"/>
</regexp-list>
</attribute>
<attributename="title"description="The 'title' attribute provides text that shows up in a 'tooltip' when a user hovers their mouse over the element">
<regexp-list>
<regexpname="htmlTitle"/>
</regexp-list>
</attribute>
<attributename="href"onInvalid="filterTag">
<regexp-list>
<regexpname="onsiteURL"/>
<regexpname="offsiteURL"/>
</regexp-list>
</attribute>
<attributename="align"description="The 'align' attribute of an HTML element is a direction word, like 'left', 'right' or 'center'">
<literal-list>
<literalvalue="center"/>
<literalvalue="left"/>
<literalvalue="right"/>
<literalvalue="justify"/>
<literalvalue="char"/>
</literal-list>
</attribute>
</common-attributes>
<!--
This requires normal updates as browsers continue to diverge from the W3C and each other. As long as the browser wars continue
this is going to continue. I'm not sure war is the right word for what's going on. Doesn't somebody have to win a war after
a while?
-->
<global-tag-attributes>
<attributename="title"/>
<attributename="lang"/>
</global-tag-attributes>
<tag-rules>
<!-- Tags related to JavaScript -->
<tagname="script"action="remove"/>
<tagname="noscript"action="remove"/>
<!-- Frame & related tags -->
<tagname="iframe"action="remove"/>
<tagname="frameset"action="remove"/>
<tagname="frame"action="remove"/>
<tagname="noframes"action="remove"/>
<!-- All reasonable formatting tags -->
<tagname="p"action="validate">
<attributename="align"/>
</tag>
<tagname="div"action="validate"/>
<tagname="i"action="validate"/>
<tagname="b"action="validate"/>
<tagname="em"action="validate"/>
<tagname="blockquote"action="validate"/>
<tagname="tt"action="validate"/>
<tagname="br"action="truncate"/>
<!-- Custom Slashdot tags, though we're trimming the idea of having a possible mismatching end tag with the endtag="" attribute -->