Commits

Oben Sonne committed 625d57a

Update tests to latest changes

  • Participants
  • Parent commits e84de36

Comments (0)

Files changed (16)

File tests/expected/input/blog.2010-02-22.Doctors_in_my_penguin.md

-
-
----
-## {{ page["post"] }}
-
-*Posted at
-<!--%
-from datetime import datetime
-print datetime.strptime(page["date"], "%Y-%m-%d").strftime("%B %d, %Y")
-%-->*
-
-There is a bank in my eel, your argument is invalid.
-
-More nonsense at <http://automeme.net/>.
-
-No-ASCII characters like `öäüß` are no problems as long as input files are
-encoded in UTF8.

File tests/expected/input/blog.2010-03-01.I_ate_all the pokemans.md

-
-
-## {{ page["post"] }}
-
-*Posted at <!--{ page["date"] }-->.*
-
-What *are* interior crocodile alligators? We just don't know.
-
-More nonsense at <http://automeme.net/>.

File tests/expected/input/blog.2013-04-01.Holy_Grail.md

+
+
+## {{ page["post"] }}
+
+*Posted at <!--{ page["date"] }-->.*
+
+Knights of Ni, we are but simple travelers who seek the enchanter who lives
+beyond these woods. A newt? Did you dress her up like this? On second thoughts,
+let's not go there. It is a silly place. You don't vote for kings. Knights of
+Ni, we are but simple travelers who seek the enchanter who lives beyond these
+woods.
+
+### Bridgekeeper ###
+
+Camelot! What do you mean? And this isn't my nose. This is a false one. Ah, now
+we see the violence inherent in the system!
+
+You don't frighten us, English pig-dogs! Go and boil your bottoms, sons of a
+silly person! I blow my nose at you, so-called Ah-thoor Keeng, you and all your
+silly English K-n-n-n-n-n-n-n-niggits! I don't want to talk to you no more, you
+empty-headed animal food trough water! I fart in your general direction! Your
+mother was a hamster and your father smelt of elderberries! Now leave before I
+am forced to taunt you a second time! Shh! Knights, I bid you welcome to your
+new home. Let us ride to Camelot! Now, look here, my good man.
+
+### What a strange ###
+
+She looks like one. Why do you think that she is a witch? Look, my liege! Bring
+her forward!
+
+[Ni!](http://chrisvalleskey.com/fillerama/)

File tests/expected/input/blog.2013-04-08.Lorem_Ipsum.md

+
+
+---
+## {{ page["post"] }}
+
+*Posted at
+<!--%
+from datetime import datetime
+print datetime.strptime(page["date"], "%Y-%m-%d").strftime("%B %d, %Y")
+%-->*
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed pretium arcu.
+Nullam eu leo ut justo egestas condimentum sed id dolor. In suscipit est eu
+tellus lacinia congue. Nunc tincidunt posuere nibh vitae accumsan. Suspendisse
+quis justo quis nulla rhoncus venenatis. Cum sociis natoque penatibus et magnis
+dis parturient montes, nascetur ridiculus mus. Suspendisse potenti.
+
+Nullam luctus tortor ac libero eleifend interdum nec eget dolor. Aliquam quis
+massa metus, id fringilla odio. Fusce lobortis sollicitudin gravida. Donec
+porttitor metus aliquam diam consectetur vitae tristique ligula aliquet. Nulla
+facilisi. Mauris eleifend erat id velit eleifend facilisis. Proin orci lacus,
+imperdiet eu mollis ac, cursus sit amet ligula. Ut id neque urna, sed dignissim
+urna. Cras sit amet sodales orci. In at lacus dui. Duis mi neque, posuere ut
+congue non, ornare a magna. Fusce massa ligula, vestibulum sed vulputate quis,
+sodales at massa.
+
+No-ASCII characters like `öäüß` are no problems as long as input files are
+encoded in UTF8.

File tests/expected/input/layout.md

 menu-position: 3
 ---
 Every page of a poole site is based on *one global template file*, `page.html`.
-All you need to adjust the site layout is to
-
- * edit the page template `page.html` and
- * extend or edit the style file `input/poole.css`.
+All you need to adjust the site layout is to edit the page template
+`page.html`.

File tests/expected/input/poole.css

-
-body {
-    font-family: sans;
-    width: 800px;
-    margin: 1em auto;
-    color: #2e3436;
-}
-div#box {
-    border: solid #2e3436 1px;
-}
-div#header, div#menu, div#content, div#footer {
-    padding: 1em;
-}
-div#menu {
-    background-color: #2e3436;
-    padding: 0.6em 0 0.6em 0;
-}
-#menu span {
-    background-color: #2e3436;
-    font-weight: bold;
-    padding: 0.6em;
-}
-#menu span.current {
-    background-color: #555753;
-}
-#menu a {
-    color: #fefefc;
-    text-decoration: none;
-}
-div#footer {
-    color: gray;
-    text-align: center;
-    font-size: small;
-}
-div#footer a {
-    color: gray;
-    text-decoration: none;
-}
-pre {
-    border: dotted black 1px;
-    background: #eeeeec;
-    font-size: small;
-    padding: 1em;
-}
-

File tests/expected/output/blog.2010-02-22.Doctors_in_my_penguin.html

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>poole - blog</title>
-    <meta name="description" content="a poole site" />
-    <meta name="keywords" content="poole" />
-    <link rel="stylesheet" type="text/css" href="/poole.css" />
-</head>
-<body>
-    <div id="box">
-    <div id="header">
-         <h1>a poole site</h1>
-         <h2>blog</h2>
-    </div>
-    <div id="menu">
-    <span class=""><a href="/index.html">home</a></span>
-<span class=""><a href="/layout.html">layout</a></span>
-<span class=""><a href="/logic.html">logic</a></span>
-<span class="current"><a href="/blog.html">blog</a></span>
-    </div>
-    <div id="content"><h2>Doctors in my penguin</h2>
-<p><em>Posted at
-February 22, 2010</em></p>
-<p>There is a bank in my eel, your argument is invalid.</p>
-<p>More nonsense at <a href="http://automeme.net/">http://automeme.net/</a>.</p>
-<p>No-ASCII characters like <code>öäüß</code> are no problems as long as input files are
-encoded in UTF8.</p></div>
-    </div>
-    <div id="footer">
-        Built with <a href="http://bitbucket.org/obensonne/poole">Poole</a>
-        &middot;
-        Licensed as <a href="http://creativecommons.org/licenses/by-sa/3.0">CC-SA</a>
-        &middot;
-        <a href="http://validator.w3.org/check?uri=referer">Validate me</a>
-    </div>
-</body>
-</html>

File tests/expected/output/blog.2010-03-01.I_ate_all the pokemans.html

-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-<head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>poole - blog</title>
-    <meta name="description" content="a poole site" />
-    <meta name="keywords" content="poole" />
-    <link rel="stylesheet" type="text/css" href="/poole.css" />
-</head>
-<body>
-    <div id="box">
-    <div id="header">
-         <h1>a poole site</h1>
-         <h2>blog</h2>
-    </div>
-    <div id="menu">
-    <span class=""><a href="/index.html">home</a></span>
-<span class=""><a href="/layout.html">layout</a></span>
-<span class=""><a href="/logic.html">logic</a></span>
-<span class="current"><a href="/blog.html">blog</a></span>
-    </div>
-    <div id="content"><h2>I ate all the pokemans</h2>
-<p><em>Posted at 2010-03-01.</em></p>
-<p>What <em>are</em> interior crocodile alligators? We just don't know.</p>
-<p>More nonsense at <a href="http://automeme.net/">http://automeme.net/</a>.</p></div>
-    </div>
-    <div id="footer">
-        Built with <a href="http://bitbucket.org/obensonne/poole">Poole</a>
-        &middot;
-        Licensed as <a href="http://creativecommons.org/licenses/by-sa/3.0">CC-SA</a>
-        &middot;
-        <a href="http://validator.w3.org/check?uri=referer">Validate me</a>
-    </div>
-</body>
-</html>

File tests/expected/output/blog.2013-04-01.Holy_Grail.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>poole - blog</title>
+    <meta name="description" content="a poole site" />
+    <meta name="keywords" content="poole" />
+    <style type="text/css">
+        body {
+            font-family: sans;
+            width: 800px;
+            margin: 1em auto;
+            color: #2e3436;
+        }
+        div#box {
+        }
+        div#header, div#menu, div#content, div#footer {
+            padding: 1em;
+        }
+        div#menu {
+            background-color: #eeeeec;
+            padding: 0.6em 0 0.6em 0;
+        }
+        #menu span {
+            font-weight: bold;
+            padding: 0.6em;
+        }
+        #menu span.current {
+            background-color: #ffffff;
+            border: 1px solid #eeeeec;
+        }
+        #menu a {
+            color: #000000;
+            text-decoration: none;
+        }
+        div#footer {
+            color: gray;
+            text-align: center;
+            font-size: small;
+        }
+        div#footer a {
+            color: gray;
+            text-decoration: none;
+        }
+        pre {
+            border: dotted black 1px;
+            background: #eeeeec;
+            font-size: small;
+            padding: 1em;
+        }
+    </style>
+</head>
+<body>
+    <div id="box">
+    <div id="header">
+         <h1>a poole site</h1>
+         <h2>blog</h2>
+    </div>
+    <div id="menu">
+    <span class=""><a href="/index.html">home</a></span>
+<span class=""><a href="/layout.html">layout</a></span>
+<span class=""><a href="/logic.html">logic</a></span>
+<span class="current"><a href="/blog.html">blog</a></span>
+    </div>
+    <div id="content"><h2>Holy Grail</h2>
+<p><em>Posted at 2013-04-01.</em></p>
+<p>Knights of Ni, we are but simple travelers who seek the enchanter who lives
+beyond these woods. A newt? Did you dress her up like this? On second thoughts,
+let's not go there. It is a silly place. You don't vote for kings. Knights of
+Ni, we are but simple travelers who seek the enchanter who lives beyond these
+woods.</p>
+<h3>Bridgekeeper</h3>
+<p>Camelot! What do you mean? And this isn't my nose. This is a false one. Ah, now
+we see the violence inherent in the system!</p>
+<p>You don't frighten us, English pig-dogs! Go and boil your bottoms, sons of a
+silly person! I blow my nose at you, so-called Ah-thoor Keeng, you and all your
+silly English K-n-n-n-n-n-n-n-niggits! I don't want to talk to you no more, you
+empty-headed animal food trough water! I fart in your general direction! Your
+mother was a hamster and your father smelt of elderberries! Now leave before I
+am forced to taunt you a second time! Shh! Knights, I bid you welcome to your
+new home. Let us ride to Camelot! Now, look here, my good man.</p>
+<h3>What a strange</h3>
+<p>She looks like one. Why do you think that she is a witch? Look, my liege! Bring
+her forward!</p>
+<p><a href="http://chrisvalleskey.com/fillerama/">Ni!</a></p></div>
+    </div>
+    <div id="footer">
+        Built with <a href="http://bitbucket.org/obensonne/poole">Poole</a>
+        &middot;
+        Licensed as <a href="http://creativecommons.org/licenses/by-sa/3.0">CC-SA</a>
+        &middot;
+        <a href="http://validator.w3.org/check?uri=referer">Validate me</a>
+    </div>
+</body>
+</html>

File tests/expected/output/blog.2013-04-08.Lorem_Ipsum.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>poole - blog</title>
+    <meta name="description" content="a poole site" />
+    <meta name="keywords" content="poole" />
+    <style type="text/css">
+        body {
+            font-family: sans;
+            width: 800px;
+            margin: 1em auto;
+            color: #2e3436;
+        }
+        div#box {
+        }
+        div#header, div#menu, div#content, div#footer {
+            padding: 1em;
+        }
+        div#menu {
+            background-color: #eeeeec;
+            padding: 0.6em 0 0.6em 0;
+        }
+        #menu span {
+            font-weight: bold;
+            padding: 0.6em;
+        }
+        #menu span.current {
+            background-color: #ffffff;
+            border: 1px solid #eeeeec;
+        }
+        #menu a {
+            color: #000000;
+            text-decoration: none;
+        }
+        div#footer {
+            color: gray;
+            text-align: center;
+            font-size: small;
+        }
+        div#footer a {
+            color: gray;
+            text-decoration: none;
+        }
+        pre {
+            border: dotted black 1px;
+            background: #eeeeec;
+            font-size: small;
+            padding: 1em;
+        }
+    </style>
+</head>
+<body>
+    <div id="box">
+    <div id="header">
+         <h1>a poole site</h1>
+         <h2>blog</h2>
+    </div>
+    <div id="menu">
+    <span class=""><a href="/index.html">home</a></span>
+<span class=""><a href="/layout.html">layout</a></span>
+<span class=""><a href="/logic.html">logic</a></span>
+<span class="current"><a href="/blog.html">blog</a></span>
+    </div>
+    <div id="content"><h2>Lorem Ipsum</h2>
+<p><em>Posted at
+April 08, 2013</em></p>
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sed pretium arcu.
+Nullam eu leo ut justo egestas condimentum sed id dolor. In suscipit est eu
+tellus lacinia congue. Nunc tincidunt posuere nibh vitae accumsan. Suspendisse
+quis justo quis nulla rhoncus venenatis. Cum sociis natoque penatibus et magnis
+dis parturient montes, nascetur ridiculus mus. Suspendisse potenti.</p>
+<p>Nullam luctus tortor ac libero eleifend interdum nec eget dolor. Aliquam quis
+massa metus, id fringilla odio. Fusce lobortis sollicitudin gravida. Donec
+porttitor metus aliquam diam consectetur vitae tristique ligula aliquet. Nulla
+facilisi. Mauris eleifend erat id velit eleifend facilisis. Proin orci lacus,
+imperdiet eu mollis ac, cursus sit amet ligula. Ut id neque urna, sed dignissim
+urna. Cras sit amet sodales orci. In at lacus dui. Duis mi neque, posuere ut
+congue non, ornare a magna. Fusce massa ligula, vestibulum sed vulputate quis,
+sodales at massa.</p>
+<p>No-ASCII characters like <code>öäüß</code> are no problems as long as input files are
+encoded in UTF8.</p></div>
+    </div>
+    <div id="footer">
+        Built with <a href="http://bitbucket.org/obensonne/poole">Poole</a>
+        &middot;
+        Licensed as <a href="http://creativecommons.org/licenses/by-sa/3.0">CC-SA</a>
+        &middot;
+        <a href="http://validator.w3.org/check?uri=referer">Validate me</a>
+    </div>
+</body>
+</html>

File tests/expected/output/blog.html

     <title>poole - blog</title>
     <meta name="description" content="a poole site" />
     <meta name="keywords" content="poole" />
-    <link rel="stylesheet" type="text/css" href="/poole.css" />
+    <style type="text/css">
+        body {
+            font-family: sans;
+            width: 800px;
+            margin: 1em auto;
+            color: #2e3436;
+        }
+        div#box {
+        }
+        div#header, div#menu, div#content, div#footer {
+            padding: 1em;
+        }
+        div#menu {
+            background-color: #eeeeec;
+            padding: 0.6em 0 0.6em 0;
+        }
+        #menu span {
+            font-weight: bold;
+            padding: 0.6em;
+        }
+        #menu span.current {
+            background-color: #ffffff;
+            border: 1px solid #eeeeec;
+        }
+        #menu a {
+            color: #000000;
+            text-decoration: none;
+        }
+        div#footer {
+            color: gray;
+            text-align: center;
+            font-size: small;
+        }
+        div#footer a {
+            color: gray;
+            text-decoration: none;
+        }
+        pre {
+            border: dotted black 1px;
+            background: #eeeeec;
+            font-size: small;
+            padding: 1em;
+        }
+    </style>
 </head>
 <body>
     <div id="box">
 Poole recognizes the date and post title and sets them as attributes of the
 page. These attributes can then be used to generate a list of blog posts:</p>
 <ul>
-<li><strong><a href="/blog.2010-03-01.I_ate_all the pokemans.html">I ate all the pokemans</a></strong> - March 01, 2010</li>
-<li><strong><a href="/blog.2010-02-22.Doctors_in_my_penguin.html">Doctors in my penguin</a></strong> - February 22, 2010</li>
+<li><strong><a href="/blog.2013-04-08.Lorem_Ipsum.html">Lorem Ipsum</a></strong> - April 08, 2013</li>
+<li><strong><a href="/blog.2013-04-01.Holy_Grail.html">Holy Grail</a></strong> - April 01, 2013</li>
 </ul>
 <p>Have a look into <code>input/blog.md</code> to see how it works. Feel free to adjust it
 to your needs.</p></div>

File tests/expected/output/index.html

     <title>poole - home</title>
     <meta name="description" content="a poole site" />
     <meta name="keywords" content="poole" />
-    <link rel="stylesheet" type="text/css" href="/poole.css" />
+    <style type="text/css">
+        body {
+            font-family: sans;
+            width: 800px;
+            margin: 1em auto;
+            color: #2e3436;
+        }
+        div#box {
+        }
+        div#header, div#menu, div#content, div#footer {
+            padding: 1em;
+        }
+        div#menu {
+            background-color: #eeeeec;
+            padding: 0.6em 0 0.6em 0;
+        }
+        #menu span {
+            font-weight: bold;
+            padding: 0.6em;
+        }
+        #menu span.current {
+            background-color: #ffffff;
+            border: 1px solid #eeeeec;
+        }
+        #menu a {
+            color: #000000;
+            text-decoration: none;
+        }
+        div#footer {
+            color: gray;
+            text-align: center;
+            font-size: small;
+        }
+        div#footer a {
+            color: gray;
+            text-decoration: none;
+        }
+        pre {
+            border: dotted black 1px;
+            background: #eeeeec;
+            font-size: small;
+            padding: 1em;
+        }
+    </style>
 </head>
 <body>
     <div id="box">

File tests/expected/output/layout.html

     <title>poole - layout</title>
     <meta name="description" content="a poole site" />
     <meta name="keywords" content="poole" />
-    <link rel="stylesheet" type="text/css" href="/poole.css" />
+    <style type="text/css">
+        body {
+            font-family: sans;
+            width: 800px;
+            margin: 1em auto;
+            color: #2e3436;
+        }
+        div#box {
+        }
+        div#header, div#menu, div#content, div#footer {
+            padding: 1em;
+        }
+        div#menu {
+            background-color: #eeeeec;
+            padding: 0.6em 0 0.6em 0;
+        }
+        #menu span {
+            font-weight: bold;
+            padding: 0.6em;
+        }
+        #menu span.current {
+            background-color: #ffffff;
+            border: 1px solid #eeeeec;
+        }
+        #menu a {
+            color: #000000;
+            text-decoration: none;
+        }
+        div#footer {
+            color: gray;
+            text-align: center;
+            font-size: small;
+        }
+        div#footer a {
+            color: gray;
+            text-decoration: none;
+        }
+        pre {
+            border: dotted black 1px;
+            background: #eeeeec;
+            font-size: small;
+            padding: 1em;
+        }
+    </style>
 </head>
 <body>
     <div id="box">
 <span class=""><a href="/blog.html">blog</a></span>
     </div>
     <div id="content"><p>Every page of a poole site is based on <em>one global template file</em>, <code>page.html</code>.
-All you need to adjust the site layout is to</p>
-<ul>
-<li>edit the page template <code>page.html</code> and</li>
-<li>extend or edit the style file <code>input/poole.css</code>.</li>
-</ul></div>
+All you need to adjust the site layout is to edit the page template
+<code>page.html</code>.</p></div>
     </div>
     <div id="footer">
         Built with <a href="http://bitbucket.org/obensonne/poole">Poole</a>

File tests/expected/output/logic.html

     <title>poole - logic</title>
     <meta name="description" content="a poole site" />
     <meta name="keywords" content="poole" />
-    <link rel="stylesheet" type="text/css" href="/poole.css" />
+    <style type="text/css">
+        body {
+            font-family: sans;
+            width: 800px;
+            margin: 1em auto;
+            color: #2e3436;
+        }
+        div#box {
+        }
+        div#header, div#menu, div#content, div#footer {
+            padding: 1em;
+        }
+        div#menu {
+            background-color: #eeeeec;
+            padding: 0.6em 0 0.6em 0;
+        }
+        #menu span {
+            font-weight: bold;
+            padding: 0.6em;
+        }
+        #menu span.current {
+            background-color: #ffffff;
+            border: 1px solid #eeeeec;
+        }
+        #menu a {
+            color: #000000;
+            text-decoration: none;
+        }
+        div#footer {
+            color: gray;
+            text-align: center;
+            font-size: small;
+        }
+        div#footer a {
+            color: gray;
+            text-decoration: none;
+        }
+        pre {
+            border: dotted black 1px;
+            background: #eeeeec;
+            font-size: small;
+            padding: 1em;
+        }
+    </style>
 </head>
 <body>
     <div id="box">

File tests/expected/output/poole.css

-
-body {
-    font-family: sans;
-    width: 800px;
-    margin: 1em auto;
-    color: #2e3436;
-}
-div#box {
-    border: solid #2e3436 1px;
-}
-div#header, div#menu, div#content, div#footer {
-    padding: 1em;
-}
-div#menu {
-    background-color: #2e3436;
-    padding: 0.6em 0 0.6em 0;
-}
-#menu span {
-    background-color: #2e3436;
-    font-weight: bold;
-    padding: 0.6em;
-}
-#menu span.current {
-    background-color: #555753;
-}
-#menu a {
-    color: #fefefc;
-    text-decoration: none;
-}
-div#footer {
-    color: gray;
-    text-align: center;
-    font-size: small;
-}
-div#footer a {
-    color: gray;
-    text-decoration: none;
-}
-pre {
-    border: dotted black 1px;
-    background: #eeeeec;
-    font-size: small;
-    padding: 1em;
-}
-

File tests/expected/page.html

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
-    <meta http-equiv="Content-Type" content="text/html; charset={{ htmlspecialchars(__encoding__) }}" />
-    <title>poole - {{ htmlspecialchars(page["title"]) }}</title>
-    <meta name="description" content="{{ htmlspecialchars(page.get("description", "a poole site")) }}" />
-    <meta name="keywords" content="{{ htmlspecialchars(page.get("keywords", "poole")) }}" />
-    <link rel="stylesheet" type="text/css" href="poole.css" />
+    <meta http-equiv="Content-Type" content="text/html; charset={{ __encoding__ }}" />
+    <title>poole - {{ hx(page["title"]) }}</title>
+    <meta name="description" content="{{ hx(page.get("description", "a poole site")) }}" />
+    <meta name="keywords" content="{{ hx(page.get("keywords", "poole")) }}" />
+    <style type="text/css">
+        body {
+            font-family: sans;
+            width: 800px;
+            margin: 1em auto;
+            color: #2e3436;
+        }
+        div#box {
+        }
+        div#header, div#menu, div#content, div#footer {
+            padding: 1em;
+        }
+        div#menu {
+            background-color: #eeeeec;
+            padding: 0.6em 0 0.6em 0;
+        }
+        #menu span {
+            font-weight: bold;
+            padding: 0.6em;
+        }
+        #menu span.current {
+            background-color: #ffffff;
+            border: 1px solid #eeeeec;
+        }
+        #menu a {
+            color: #000000;
+            text-decoration: none;
+        }
+        div#footer {
+            color: gray;
+            text-align: center;
+            font-size: small;
+        }
+        div#footer a {
+            color: gray;
+            text-decoration: none;
+        }
+        pre {
+            border: dotted black 1px;
+            background: #eeeeec;
+            font-size: small;
+            padding: 1em;
+        }
+    </style>
 </head>
 <body>
     <div id="box">
     <div id="header">
          <h1>a poole site</h1>
-         <h2>{{ htmlspecialchars(page["title"]) }}</h2>
+         <h2>{{ hx(page["title"]) }}</h2>
     </div>
     <div id="menu">
     <!--%
         mpages.sort(key=lambda p: int(p["menu-position"]))
         entry = '<span class="%s"><a href="%s">%s</a></span>'
         for p in mpages:
-            style = p["title"] == page["title"] and "current" or ""
-            print(entry % (style, htmlspecialchars(p["url"]), htmlspecialchars(p["title"])))
+            style = "current" if p["title"] == page["title"] else ""
+            print(entry % (style, p["url"], hx(p["title"])))
     %-->
     </div>
     <div id="content">{{ __content__ }}</div>