From 13dfbc049a5d1a6a4f5b6f2453b39542779300b0 Mon Sep 17 00:00:00 2001
From: Christian Heller <c.heller@plomlompom.de>
Date: Mon, 2 Jan 2017 11:31:55 +0100
Subject: [PATCH] Clean up heading logic for .rst and .md interpretation.

---
 README.md                                  | 23 ++++++++++++++--------
 processor/metadata/article.tmpl.do         |  4 ++--
 processor/metadata/default.intermediate.do |  4 ++--
 test/test_files/bar baz.html               |  7 +++++--
 test/test_files/bar baz.md                 |  9 ++++++++-
 test/test_files/feed.xml.ignoring          |  7 +++++++
 test/test_files/foo.html                   |  6 ++++--
 test/test_files/foo.rst                    |  6 ++++++
 test/test_files/test.html                  |  6 ++++--
 test/test_files/test.md                    |  4 ++++
 10 files changed, 57 insertions(+), 19 deletions(-)

diff --git a/README.md b/README.md
index 420c151..a0071b3 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,8 @@
 redo-blog
 =========
 
-small blog system using the redo build system
+small blog system using the redo build system, with blog article files written
+in (pandoc) Markdown or ReStructured Text.
 
 dependencies
 ------------
@@ -29,12 +30,12 @@ These files will be linked to symbolically in a directory ./public/.
 
 Some metadata files will also be generated below ./metadata/: For each article,
 there will be generated a .uuid and a .intermediate file; furthermore, files for
-data used in ./feed.xml and ./index.html will be built there and can be edited
-to customize the blog – namely the files url, author, uuid, title, index.tmpl,
-index_snippet.tmpl, article.tmpl.
+data used in ./feed.xml and ./index.html will, if non-existant, be built there
+and can be edited to customize the blog – namely the files url, author, uuid,
+title, index.tmpl, index_snippet.tmpl, article.tmpl.
 
-recipe to use server-side with git
-----------------------------------
+recipe to remotely manage a redo blog with git
+----------------------------------------------
 
 On your server, install the dependencies listed above. Then set up a repository
 for your blog files. Let's assume we want it to sit in our home directory and be
@@ -76,8 +77,14 @@ Client-side, do this (obviously, replace server and username):
     git commit -m 'set up blog metadata'
     git push origin master
 
-bugs
-----
+bugs and peculiarities
+----------------------
 
 Don't create a index.rst or index.md in the redo-managed directory, that will
 break things.
+
+The article title is derived in .md files from a first line prefixed with "% ",
+while all other headings are treated as sub-headings. In .rst files, the title
+is derived from a heading that must be at the top of the document, and be of an
+adornment style (such as underlining with "=") that must be used only once in
+it.
diff --git a/processor/metadata/article.tmpl.do b/processor/metadata/article.tmpl.do
index 5cf9b3c..7a560ec 100644
--- a/processor/metadata/article.tmpl.do
+++ b/processor/metadata/article.tmpl.do
@@ -9,10 +9,10 @@ cat << EOF
 </head>
 <body>
 <a href="index.html">%BLOG_TITLE%</a>
+<article>
 <h1>%ARTICLE_TITLE_HTML%</h1>
-<section>
 %BODY%
-</section>
+</article>
 </body>
 </html>
 EOF
diff --git a/processor/metadata/default.intermediate.do b/processor/metadata/default.intermediate.do
index adcd2eb..a09d4b2 100644
--- a/processor/metadata/default.intermediate.do
+++ b/processor/metadata/default.intermediate.do
@@ -8,8 +8,8 @@ mdfile="../${1%.intermediate}.md"
 rstfile="../${1%.intermediate}.rst"
 if [ -f "$rstfile" ]; then
   redo-ifchange "$rstfile"
-  pandoc -f rst --template="$template" --mathml -t html5 "$rstfile" > "$3"
+  pandoc -f rst --template="$template" --mathml -t html5 "$rstfile" --base-header-level=2 > "$3"
 elif [ -f "$mdfile" ]; then
   redo-ifchange "$mdfile"
-  pandoc -f markdown --template="$template" --mathml -t html5 "$mdfile" > "$3"
+  pandoc -f markdown --template="$template" --mathml -t html5 "$mdfile" --base-header-level=2 > "$3"
 fi
diff --git a/test/test_files/bar baz.html b/test/test_files/bar baz.html
index f2321f9..418a91b 100644
--- a/test/test_files/bar baz.html	
+++ b/test/test_files/bar baz.html	
@@ -5,9 +5,12 @@
 </head>
 <body>
 <a href="index.html">Yet another blog</a>
+<article>
 <h1>foo</h1>
-<section>
+<h2 id="bar">bar</h2>
 <p>bar</p>
-</section>
+<h3 id="bar-1">bar</h3>
+<p>bar</p>
+</article>
 </body>
 </html>
\ No newline at end of file
diff --git a/test/test_files/bar baz.md b/test/test_files/bar baz.md
index 423430d..ffec597 100644
--- a/test/test_files/bar baz.md	
+++ b/test/test_files/bar baz.md	
@@ -1,2 +1,9 @@
 % foo
-bar 
+
+# bar
+
+bar
+
+## bar
+
+bar
diff --git a/test/test_files/feed.xml.ignoring b/test/test_files/feed.xml.ignoring
index dde4369..364d700 100644
--- a/test/test_files/feed.xml.ignoring
+++ b/test/test_files/feed.xml.ignoring
@@ -15,6 +15,8 @@
 <link href="http://example.org/test.html" />
 <content type="html">
 &lt;p&gt;foo&lt;/p&gt;
+&lt;h2 id=&quot;bar&quot;&gt;bar&lt;/h2&gt;
+&lt;p&gt;baz&lt;/p&gt;
 </content>
 </entry>
 
@@ -25,6 +27,9 @@
 <published>IGNORE</published>
 <link href="http://example.org/bar%20baz.html" />
 <content type="html">
+&lt;h2 id=&quot;bar&quot;&gt;bar&lt;/h2&gt;
+&lt;p&gt;bar&lt;/p&gt;
+&lt;h3 id=&quot;bar-1&quot;&gt;bar&lt;/h3&gt;
 &lt;p&gt;bar&lt;/p&gt;
 </content>
 </entry>
@@ -37,7 +42,9 @@
 <link href="http://example.org/foo.html" />
 <content type="html">
 &lt;p&gt;this text contains some special characters: /;%&#x27;&amp;quot;&amp;gt;&amp;lt;&amp;amp;äöüß&lt;/p&gt;
+&lt;h2 id=&quot;some-sub-heading&quot;&gt;some sub-heading&lt;/h2&gt;
 &lt;p&gt;and more than one paragraph&lt;/p&gt;
+&lt;h2 id=&quot;another-sub-heading&quot;&gt;another sub-heading&lt;/h2&gt;
 &lt;p&gt;note that should be ignored but \ should give a backlash&lt;/p&gt;
 </content>
 </entry>
diff --git a/test/test_files/foo.html b/test/test_files/foo.html
index 61bb939..9eb95f5 100644
--- a/test/test_files/foo.html
+++ b/test/test_files/foo.html
@@ -5,11 +5,13 @@
 </head>
 <body>
 <a href="index.html">Yet another blog</a>
+<article>
 <h1>a title with some nasty characters: &amp;&lt;&gt;&quot;' %BODY%</h1>
-<section>
 <p>this text contains some special characters: /;%'&quot;&gt;&lt;&amp;äöüß</p>
+<h2 id="some-sub-heading">some sub-heading</h2>
 <p>and more than one paragraph</p>
+<h2 id="another-sub-heading">another sub-heading</h2>
 <p>note that should be ignored but \ should give a backlash</p>
-</section>
+</article>
 </body>
 </html>
\ No newline at end of file
diff --git a/test/test_files/foo.rst b/test/test_files/foo.rst
index cf4c2df..039ed41 100644
--- a/test/test_files/foo.rst
+++ b/test/test_files/foo.rst
@@ -3,6 +3,12 @@ a title with some nasty characters: &<>"' %BODY%
 
 this text contains some special characters: /;%'"><&äöüß
 
+some sub-heading
+----------------
+
 and more than one paragraph
 
+another sub-heading
+-------------------
+
 note that \ should be ignored but \\ should give a backlash
diff --git a/test/test_files/test.html b/test/test_files/test.html
index 5915dd7..bd4b81f 100644
--- a/test/test_files/test.html
+++ b/test/test_files/test.html
@@ -5,9 +5,11 @@
 </head>
 <body>
 <a href="index.html">Yet another blog</a>
+<article>
 <h1>foo <em>bar</em> <strong>baz</strong></h1>
-<section>
 <p>foo</p>
-</section>
+<h2 id="bar">bar</h2>
+<p>baz</p>
+</article>
 </body>
 </html>
\ No newline at end of file
diff --git a/test/test_files/test.md b/test/test_files/test.md
index 4416db1..267021a 100644
--- a/test/test_files/test.md
+++ b/test/test_files/test.md
@@ -1,2 +1,6 @@
 % foo *bar* **baz**
 foo
+
+# bar
+
+baz
-- 
2.30.2