summaryrefslogtreecommitdiffstats
path: root/3rdparty/htmlpurifier/smoketests
diff options
context:
space:
mode:
authorBernhard Posselt <nukeawhale@gmail.com>2013-05-04 00:15:41 +0200
committerBernhard Posselt <nukeawhale@gmail.com>2013-05-04 00:15:41 +0200
commit10831dd274ff65d4852b47dbc398adae61845206 (patch)
tree9f9397bb7433fd53bfacf88d8c8b3cf2ef50e27d /3rdparty/htmlpurifier/smoketests
parent7b628a3e4d105f2e571d0fe142d59f201d6a10d0 (diff)
use html purifier for sanitation
Diffstat (limited to '3rdparty/htmlpurifier/smoketests')
-rw-r--r--3rdparty/htmlpurifier/smoketests/all.php44
-rw-r--r--3rdparty/htmlpurifier/smoketests/attrTransform.php72
-rw-r--r--3rdparty/htmlpurifier/smoketests/attrTransform.xml192
-rw-r--r--3rdparty/htmlpurifier/smoketests/basic.php73
-rw-r--r--3rdparty/htmlpurifier/smoketests/basic/allElements.css50
-rw-r--r--3rdparty/htmlpurifier/smoketests/basic/allElements.html82
-rw-r--r--3rdparty/htmlpurifier/smoketests/basic/legacy.css73
-rw-r--r--3rdparty/htmlpurifier/smoketests/basic/legacy.html127
-rw-r--r--3rdparty/htmlpurifier/smoketests/cacheConfig.php15
-rw-r--r--3rdparty/htmlpurifier/smoketests/common.php37
-rw-r--r--3rdparty/htmlpurifier/smoketests/configForm.php77
-rw-r--r--3rdparty/htmlpurifier/smoketests/dataScheme.php37
-rw-r--r--3rdparty/htmlpurifier/smoketests/extractStyleBlocks.php73
-rw-r--r--3rdparty/htmlpurifier/smoketests/img.pngbin0 -> 2138 bytes
-rw-r--r--3rdparty/htmlpurifier/smoketests/innerHTML.html33
-rw-r--r--3rdparty/htmlpurifier/smoketests/innerHTML.js51
-rw-r--r--3rdparty/htmlpurifier/smoketests/preserveYouTube.php72
-rw-r--r--3rdparty/htmlpurifier/smoketests/printDefinition.php119
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Directive.Allowed.txt6
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Directive.Deprecated.txt7
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Directive.txt3
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.bool.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.float.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.hash.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.int.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.istring.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.itext.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.list.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.lookup.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.mixed.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.nullbool.txt7
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.nullstring.txt9
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.string.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.text.txt5
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/Type.txt3
-rw-r--r--3rdparty/htmlpurifier/smoketests/test-schema/info.ini3
-rw-r--r--3rdparty/htmlpurifier/smoketests/variableWidthAttack.php57
-rw-r--r--3rdparty/htmlpurifier/smoketests/xssAttacks.php99
-rw-r--r--3rdparty/htmlpurifier/smoketests/xssAttacks.xml1307
39 files changed, 2783 insertions, 0 deletions
diff --git a/3rdparty/htmlpurifier/smoketests/all.php b/3rdparty/htmlpurifier/smoketests/all.php
new file mode 100644
index 000000000..0f3f33d55
--- /dev/null
+++ b/3rdparty/htmlpurifier/smoketests/all.php
@@ -0,0 +1,44 @@
+<?php
+
+require_once 'common.php';
+
+header('Content-type: text/html; charset=UTF-8');
+echo '<?xml version="1.0" encoding="UTF-8" ?>';
+
+?><!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-loose.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>HTML Purifier: All Smoketests</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <style type="text/css">
+ #content {margin:5em;}
+ iframe {width:100%;height:30em;}
+ </style>
+</head>
+<body>
+<h1>HTML Purifier: All Smoketests</h1>
+<div id="content">
+<?php
+
+$dir = './';
+$dh = opendir($dir);
+while (false !== ($filename = readdir($dh))) {
+ if ($filename[0] == '.') continue;
+ if (strpos($filename, '.php') === false) continue;
+ if ($filename == 'common.php') continue;
+ if ($filename == 'all.php') continue;
+ if ($filename == 'testSchema.php') continue;
+ ?>
+ <iframe src="<?php echo escapeHTML($filename); if (isset($_GET['standalone'])) {echo '?standalone';} ?>"></iframe>
+ <?php
+}
+
+?>
+</div>
+</body>
+</html>
+<?php
+
+// vim: et sw=4 sts=4
diff --git a/3rdparty/htmlpurifier/smoketests/attrTransform.php b/3rdparty/htmlpurifier/smoketests/attrTransform.php
new file mode 100644
index 000000000..e8a607d6d
--- /dev/null
+++ b/3rdparty/htmlpurifier/smoketests/attrTransform.php
@@ -0,0 +1,72 @@
+<?php
+
+require 'common.php';
+
+?><!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-loose.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>HTML Purifier Attribute Transformation Smoketest</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <style type="text/css">
+ div.container {position:relative;height:120px;border:1px solid #CCC;
+ margin-bottom:1em; width:225px; float:left; margin-top:1em;
+ margin-right:1em;}
+ h2 {clear:left;margin-bottom:0;}
+ div.container.legend .test {text-align:center;line-height:100px;}
+ div.test {width:100px;height:100px;border:1px solid black;
+ position:absolute;top:10px;overflow:auto;}
+ div.test.html {left:10px;border-right:none;background:#FCC;}
+ div.test.css {left:110px;background:#CFC;}
+ img.marked {border:1px solid #000;background:#FFF;}
+ table.bright {background-color:#F00;}
+ hr.short {width:50px;}
+ </style>
+</head>
+<body>
+<h1>HTML Purifier Attribute Transformation Smoketest</h1>
+<div class="container legend">
+<div class="test html">
+ HTML
+</div>
+<div class="test css">
+ CSS
+</div>
+</div>
+<?php
+
+if (version_compare(PHP_VERSION, '5', '<')) exit('<p>Requires PHP 5.</p>');
+
+$xml = simplexml_load_file('attrTransform.xml');
+
+// attr transform enabled HTML Purifier
+$config = HTMLPurifier_Config::createDefault();
+$config->set('HTML.Doctype', 'XHTML 1.0 Strict');
+$purifier = new HTMLPurifier($config);
+
+$title = isset($_GET['title']) ? $_GET['title'] : true;
+
+foreach ($xml->group as $group) {
+ echo '<h2>' . $group['title'] . '</h2>';
+ foreach ($group->sample as $sample) {
+ $sample = (string) $sample;
+?>
+<div class="container">
+<div class="test html">
+ <?php echo $sample; ?>
+</div>
+<div class="test css">
+ <?php echo $purifier->purify($sample); ?>
+</div>
+</div>
+<?php
+ }
+}
+
+?>
+</body>
+</html>
+<?php
+
+// vim: et sw=4 sts=4
diff --git a/3rdparty/htmlpurifier/smoketests/attrTransform.xml b/3rdparty/htmlpurifier/smoketests/attrTransform.xml
new file mode 100644
index 000000000..97fc98fc7
--- /dev/null
+++ b/3rdparty/htmlpurifier/smoketests/attrTransform.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0"?>
+<samples>
+ <group title="menu,dir">
+ <sample><![CDATA[<menu><li>menu</li></menu>]]></sample>
+ <sample><![CDATA[<dir><li>dir</li></dir>]]></sample>
+ </group>
+ <group title="font">
+ <sample><![CDATA[<font color="red">Red</font>]]></sample>
+ <sample><![CDATA[<font color="#0000FF">#0000FF</font>]]></sample>
+ <sample><![CDATA[<font face="Arial">Arial</font>]]></sample>
+ </group>
+ <group title="font.size">
+ <sample><![CDATA[<font size="-2">-2</font>]]></sample>
+ <sample><![CDATA[<font size="-1">-1</font>]]></sample>
+ <sample><![CDATA[<font size="0">0</font>]]></sample>
+ <sample><![CDATA[<font size="1">1</font>]]></sample>
+ <sample><![CDATA[<font size="2">2</font>]]></sample>
+ <sample><![CDATA[<font size="3">3</font>]]></sample>
+ <sample><![CDATA[<font size="4">4</font>]]></sample>
+ <sample><![CDATA[<font size="5">5</font>]]></sample>
+ <sample><![CDATA[<font size="6">6</font>]]></sample>
+ <sample><![CDATA[<font size="7">7</font>]]></sample>
+ <sample><![CDATA[<font size="8">8</font>]]></sample>
+ <sample><![CDATA[<font size="+1">+1</font>]]></sample>
+ <sample><![CDATA[<font size="+2">+2</font>]]></sample>
+ <sample><![CDATA[<font size="+3">+3</font>]]></sample>
+ <sample><![CDATA[<font size="+4">+4</font>]]></sample>
+ <sample><![CDATA[<font size="+5">+5</font>]]></sample>
+ </group>
+ <group title="center">
+ <sample><![CDATA[<center>Centered</center>]]></sample>
+ </group>
+ <group title="p.align">
+ <sample><![CDATA[<p align="left">Left</p>]]></sample>
+ <sample><![CDATA[<p align="center">Center</p>]]></sample>
+ <sample><![CDATA[<p align="right">Right</p>]]></sample>
+ </group>
+ <group title="table.bgcolor">
+ <sample><![CDATA[
+ <table bgcolor="black" cellspacing="2" cellpadding="2" border="1">
+ <tr bgcolor="red">
+ <th bgcolor="green">To</th>
+ <td bgcolor="blue">Be</td>
+ </tr>
+ <tr>
+ <th bgcolor="green">Or</th>
+ <td>Not</td>
+ </tr>
+ <tr bgcolor="red">
+ <th>To</th>
+ <td>Be</td>
+ </tr>
+ </table>
+ ]]></sample>
+ <sample><![CDATA[
+ <table class="bright" bgcolor="black" cellspacing="2" cellpadding="2" border="1">
+ <tr>
+ <th bgcolor="green">Or</th>
+ <td>Not</td>
+ </tr>
+ <tr bgcolor="blue">
+ <th bgcolor="green">To</th>
+ <td>Be</td>
+ </tr>
+ </table>
+ ]]></sample>
+ </group>
+ <group title="img.border">
+ <sample><![CDATA[<img src="img.png" alt="I" border="2" />]]></sample>
+ <sample><![CDATA[<a href="http://example.com/"><img src="img.png" alt="I" border="2" /></a>]]></sample>
+ </group>
+ <group title="td,th,hr.width">
+ <sample><![CDATA[
+ <table border="1">
+ <tr>
+ <th width="20">x1</th>
+ <td width="40">x2</td>
+ </tr>
+ </table>
+ ]]></sample>
+ <sample><![CDATA[
+ <table border="1">
+ <tr>
+ <th width="33%">x1</th>
+ <td width="67%">x2</td>
+ </tr>
+ </table>
+ ]]></sample>
+ <sample><![CDATA[<hr width="70%" /><hr width="30" />]]></sample>
+ </group>
+ <group title="td,th.nowrap">
+ <sample><![CDATA[
+ <table border="1">
+ <tr>
+ <th>This wants to wrap</th>
+ <td>really badly yes it does</td>
+ </tr>
+ </table>
+ ]]></sample>
+ <sample><![CDATA[
+ <table border="1">
+ <tr>
+ <th nowrap>This wants to wrap</th>
+ <td nowrap>really badly yes it does</td>
+ </tr>
+ </table>
+ ]]></sample>
+ </group>
+ <group title="td,th.height">
+ <sample><![CDATA[<table border="1"><tr><td height="60">tall</td></tr></table>]]></sample>
+ </group>
+ <group title="img.vspace,hspace">
+ <sample><![CDATA[a<img src="img.png" alt="I" class="marked" hspace="7" />a]]></sample>
+ <sample><![CDATA[<img src="img.png" alt="I" class="marked" vspace="7" /><br />o]]></sample>
+ </group>
+ <group title="hr">
+ <sample><![CDATA[<hr size="4" />]]></sample>
+ <sample><![CDATA[<hr size="50" noshade />]]></sample>
+ </group>
+ <group title="br.clear">
+ <sample><![CDATA[<img src="img.png" alt="I" align="right" />B<br />A]]></sample>
+ <sample><![CDATA[<img src="img.png" alt="I" align="right" />B<br clear="right" />A]]></sample>
+ <sample><![CDATA[<img src="img.png" alt="I" align="right" /><img src="img.png" alt="I" align="left" />B<br />A]]></sample>
+ <sample><![CDATA[<img src="img.png" alt="I" align="right" /><img src="img.png" alt="I" align="left" />B<br clear="all" />A]]></sample>
+ </group>
+ <group title="caption.align">
+ <sample><![CDATA[
+ <table border="1">
+ <caption align="left">Left</caption>
+ <tr><td>1.1</td><td>1.2</td></tr>
+ </table>
+ ]]></sample>
+ <sample><![CDATA[
+ <table border="1">
+ <caption align="right">Right</caption>
+ <tr><td>1.1</td><td>1.2</td></tr>
+ </table>
+ ]]></sample>
+ <sample><![CDATA[
+ <table border="1">
+ <caption align="top">Top</caption>
+ <tr><td>1.1</td><td>1.2</td></tr>
+ </table>
+ ]]></sample>
+ <sample><![CDATA[
+ <table border="1">
+ <caption align="bottom">Bottom</caption>
+ <tr><td>1.1</td><td>1.2</td></tr>
+ </table>
+ ]]></sample>
+ </group>
+ <group title="img.align">
+ <sample><![CDATA[left<img src="img.png" alt="I" class="marked" align="left" />]]></sample>
+ <sample><![CDATA[right<img src="img.png" alt="I" class="marked" align="right" />]]></sample>
+ <sample><![CDATA[o<img src="img.png" alt="I" class="marked" align="top" /> top]]></sample>
+ <sample><![CDATA[o<img src="img.png" alt="I" class="marked" align="bottom" /> bottom]]></sample>
+ <sample><![CDATA[o<img src="img.png" alt="I" class="marked" align="middle" /> middle]]></sample>
+ </group>
+ <group title="table.align">
+ <sample><![CDATA[a<table align="left" class="bright"><tr><td>left</td></tr></table>a]]></sample>
+ <sample><![CDATA[a<table align="center" class="bright"><tr><td>center</td></tr></table>a]]></sample>
+ <sample><![CDATA[a<table align="right" class="bright"><tr><td>right</td></tr></table>a]]></sample>
+ </group>
+ <group title="hr.align">
+ <sample><![CDATA[<hr align="left" class="short" />left]]></sample>
+ <sample><![CDATA[<hr align="center" class="short" />center]]></sample>
+ <sample><![CDATA[<hr align="right" class="short" />right]]></sample>
+ </group>
+ <group title="ul,ol,li.type">
+ <sample><![CDATA[<ul type="disc"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ul type="square"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ul type="circle"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ol type="a"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ol type="A"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ol type="i"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ol type="I"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ol type="1"><li>1</li><li>2</li></ul>]]></sample>
+ <sample><![CDATA[<ol><li type="a">1</li><li type="I">2</li></ul>]]></sample>
+ </group>
+
+
+ <!-- sample
+ <group title="">
+ <sample><![CDATA[]]></sample>
+ <sample><![CDATA[]]></sample>
+ <sample><![CDATA[]]></sample>
+ </group>
+ -->
+</samples>
+
+<!-- vim: et sw=4 sts=4
+-->
diff --git a/3rdparty/htmlpurifier/smoketests/basic.php b/3rdparty/htmlpurifier/smoketests/basic.php
new file mode 100644
index 000000000..96d3c78d7
--- /dev/null
+++ b/3rdparty/htmlpurifier/smoketests/basic.php
@@ -0,0 +1,73 @@
+<?php
+
+require_once 'common.php';
+
+// todo : modularize the HTML in to separate files
+
+$allowed = array(
+ 'allElements' => true,
+ 'legacy' => true
+);
+
+$page = isset($_GET['p']) ? $_GET['p'] : false;
+if (!isset($allowed[$page])) $page = false;
+
+$strict = isset($_GET['d']) ? (bool) $_GET['d'] : false;
+
+echo '<?xml version="1.0" encoding="UTF-8" ?>';
+?>
+<?php if ($strict) { ?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1- Strict.dtd">
+<?php } else { ?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-loose.dtd">
+<?php } ?>
+<html>
+<head>
+ <title>HTML Purifier Basic Smoketest</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<?php
+ if ($page) {
+ if (file_exists("basic/$page.css")) {
+ ?><link rel="stylesheet" href="basic/<?php echo $page ?>.css" type="text/css" /><?php
+ }
+ }
+?>
+</head>
+<body>
+<?php
+
+if ($page) {
+?>
+<div style="float:right;"><div><?php echo $strict ? 'Strict' : 'Loose'; ?>:
+<a href="?d=<?php echo (int) !$strict; ?>&amp;p=<?php echo $page ?>">Swap</a></div>
+<a href="http://validator.w3.org/check?uri=referer"><img
+ src="http://www.w3.org/Icons/valid-xhtml10"
+ alt="Valid XHTML 1.0 Transitional" height="31" width="88" style="border:0;" /></a>
+</div>
+<?php
+ $config = HTMLPurifier_Config::createDefault();
+ $config->set('Attr.EnableID', true);
+ $config->set('HTML.Strict', $strict);
+ $purifier = new HTMLPurifier($config);
+ echo $purifier->purify(file_get_contents("basic/$page.html"));
+} else {
+ ?>
+ <h1>HTML Purifier Basic Smoketest Index</h1>
+ <ul>
+ <?php
+ foreach ($allowed as $val => $b) {
+ ?><li><a href="?p=<?php echo $val ?>"><?php echo $val ?></a></li><?php
+ }
+ ?></ul><?php
+}
+
+?>
+</body>
+</html>
+<?php
+
+// vim: et sw=4 sts=4
diff --git a/3rdparty/htmlpurifier/smoketests/basic/allElements.css b/3rdparty/htmlpurifier/smoketests/basic/allElements.css
new file mode 100644
index 000000000..1c611938e
--- /dev/null
+++ b/3rdparty/htmlpurifier/smoketests/basic/allElements.css
@@ -0,0 +1,50 @@
+div > * {background:#F00; color:#FFF; font-weight:bold; padding:0.2em; margin:0.1em;}
+#core-attributes #core-attributes-id,
+#core-attributes .core-attributes-class,
+#core-attributes div[title='tooltip'],
+#core-attributes div[lang='en'],
+#core-attributes div[onclick="alert('foo');"],
+#module-text abbr,
+#module-text acronym,
+#module-text div blockquote,
+#module-text blockquote[cite='http://www.example.com'],
+#module-text br,
+#module-text cite,
+#module-text code,
+#module-text dfn,
+#module-text em,
+#module-text h1,
+#module-text h2,
+#module-text h3,
+#module-text h4,
+#module-text h5,
+#module-text h6,
+#module-text kbd,
+#module-text p,
+#module-text pre,
+#module-text span q,
+#module-text q[cite='http://www.example.com'],
+#module-text samp,
+#module-text strong,
+#module-text var,
+#module-hypertext span a,
+#module-hypertext a[accesskey='q'],
+#module-hypertext a[charset='UTF-8'],
+#module-hypertext a[href='http://www.example.com/'],
+#module-hypertext a[hreflang='en'],
+#module-hypertext a[rel='nofollow'],
+#module-hypertext a[rev='index'],
+#module-hypertext a[tabindex='1'],
+#module-hypertext a[type='text/plain'],
+#module-list dl,
+#module-list ul,
+#module-list ol,
+#module-list li,
+#module-list dd,
+#module-list dt,
+.insert-declarations-above
+ {background:#008000; margin:0; padding:0.2em;}
+#module-text span, #module-text div {padding:0; margin:0.1em;}
+#module-list li, #module-list dd, #module-list dt {border:1px solid #FFF;}
+
+/* vim: et sw=4 sts=4 */
diff --git a/3rdparty/htmlpurifier/smoketests/basic/allElements.html b/3rdparty/htmlpurifier/smoketests/basic/allElements.html
new file mode 100644
index 000000000..7995b7856
--- /dev/null
+++ b/3rdparty/htmlpurifier/smoketests/basic/allElements.html
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-loose.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>HTML Purifier All Elements Smoketest</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link rel="stylesheet" href="allElements.css" type="text/css" />
+</head>
+<body>
+
+<h1>HTML Purifier All Elements Smoketest</h1>
+
+<p>This is the all elements smoke
+test. It is divided by XHTML 1.1 style modules. Make sure
+<code>div</code>, <code>span</code> and <code>id</code> are allowed,
+otherwise there will be problems.</p>
+
+<h2>Core attributes</h2>
+<div id="core-attributes">
+ <div id="core-attributes-id">id</div>
+ <div class="core-attributes-class">class</div>
+ <div title="tooltip">title</div>
+ <div lang="en">lang</div>
+ <div xml:lang="en">xml:lang (green when lang also present)</div>
+ <div style="background:#008000">style</div>
+ <div onclick="alert('foo');">onclick (and other event handlers)</div>
+</div>
+
+<h2>Text module</h2>
+<div id="module-text">
+ <abbr>abbr</abbr>
+ <acronym>acronym</acronym>
+ <div><blockquote>blockquote</blockquote></div>
+ <blockquote cite="http://www.example.com">blockquote@cite</blockquote>
+ <br />
+ <cite>cite</cite>
+ <code>code</code>
+ <dfn>dfn</dfn>
+ <em>em</em>
+ <h1>h1</h1>
+ <h2>h2</h2>
+ <h3>h3</h3>
+ <h4>h4</h4>
+ <h5>h5</h5>
+ <h6>h6</h6>
+ <kbd>kbd</kbd>
+ <p>p</p>
+ <pre>pre</pre>
+ <span><q>q</q></span>
+ <q cite="http://www.example.com">q@cite</q>
+ <samp>samp</samp>
+ <strong>strong</strong>
+ <var>var</var>
+</div>
+
+<h2>Hypertext module</h2>
+<div id="module-hypertext">
+ <span><a>a</a><