Generalize documentation helpers

Change-Id: Iaba69a433f25d2160857694b0b434c51c02c0367
diff --git a/templates/de/doc/data/annotation.html.ep b/templates/de/doc/data/annotation.html.ep
index fc09157..9893a33 100644
--- a/templates/de/doc/data/annotation.html.ep
+++ b/templates/de/doc/data/annotation.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Annotationen';
 
-<h2 id="tutorial-top">Annotationen</h2>
+%= page_title
 
 <p>KorAP bietet Zugriff auf mehrere Ebenen von Annotationen, die aus mehreren Ressourcen stammen, so genannten <em>foundries</em>.</p>
 
@@ -41,7 +41,7 @@
   <p>DeReKo Annotationen unterstützen die folgenden Layer für das <code>dereko</code> Präfix:</p>
   <dl>
     <dt><abbr data-type="token" title="Structure">s</abbr></dt>
-    <dd>Dokument Struktur, wie sie im <%= doc_ext_link_to 'I5 Textmodell', 'http://www1.ids-mannheim.de/kl/projekte/korpora/textmodell.html' %> definiert ist.</dd>
+    <dd>Dokument Struktur, wie sie im <%= ext_link_to 'I5 Textmodell', 'http://www1.ids-mannheim.de/kl/projekte/korpora/textmodell.html' %> definiert ist.</dd>
   </dl>
   %= doc_query poliqarp => 'startsWith(<dereko/s=s>, Fragestunde)', cutoff => 1
 </section>
@@ -54,7 +54,7 @@
     <dt><abbr data-type="token" title="Part-of-Speech">p</abbr></dt>
     <dd>Part-of-Speech-Informationen werden in Großbuchstaben geschrieben und basieren auf STTS</dd>
     <dt><abbr data-type="token" title="Constituency">c</abbr></dt>
-    <dd>Konstituenten Informationen folgen den Annotationen des <%= doc_ext_link_to 'negr@ Korpus', 'http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html' %>.</dd>
+    <dd>Konstituenten Informationen folgen den Annotationen des <%= ext_link_to 'negr@ Korpus', 'http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html' %>.</dd>
     <dt><abbr data-type="token" title="Named Entity">ne</abbr></dt>
     <dd>Enthält benannte Entitäten wie <code>I-PER</code>, <code>I-ORG</code> etc.</dd>
     <dt><abbr data-type="token" title="Named Entity">ne_hgc_175m_600</abbr></dt>
diff --git a/templates/de/doc/korap/kalamar.html.ep b/templates/de/doc/korap/kalamar.html.ep
index 93f34c5..52b7877 100644
--- a/templates/de/doc/korap/kalamar.html.ep
+++ b/templates/de/doc/korap/kalamar.html.ep
@@ -1,11 +1,11 @@
 % layout 'main', title => 'KorAP: Kalamar';
 
-<h2 id="tutorial-top">Kalamar</h2>
+%= page_title
 
 %= korap_overview 'kalamar'
 
 <p><strong>Hauptentwickler:</strong> Nils Diewald</p>
 
-<p>Kalamar ist das wichtigste User-Frontend von KorAP. Es basiert auf <%= doc_ext_link_to 'Mojolicious', "http://mojolicio.us/" %> und ist in Perl und JavaScript geschrieben.</p>
+<p>Kalamar ist das wichtigste User-Frontend von KorAP. Es basiert auf <%= ext_link_to 'Mojolicious', "http://mojolicio.us/" %> und ist in Perl und JavaScript geschrieben.</p>
 
-<p>Kalamar ist Open Source und steht unter <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Kalamar"%> zur Verfügung.</p>
+<p>Kalamar ist Open Source und steht unter <%= ext_link_to 'GitHub', "https://github.com/KorAP/Kalamar"%> zur Verfügung.</p>
diff --git a/templates/de/doc/korap/karang.html.ep b/templates/de/doc/korap/karang.html.ep
index 345b417..f7fd2d3 100644
--- a/templates/de/doc/korap/karang.html.ep
+++ b/templates/de/doc/korap/karang.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Karang';
 
-<h2 id="tutorial-top">Karang</h2>
+%= page_title
 
 %= korap_overview 'karang'
 
diff --git a/templates/de/doc/korap/koral.html.ep b/templates/de/doc/korap/koral.html.ep
index 5273106..861eb52 100644
--- a/templates/de/doc/korap/koral.html.ep
+++ b/templates/de/doc/korap/koral.html.ep
@@ -1,11 +1,11 @@
 % layout 'main', title => 'KorAP: Koral';
 
-<h2 id="tutorial-top">Koral</h2>
+%= page_title
 
 %= korap_overview 'koral'
 
 <p><strong>Hauptentwickler:</strong> Joachim Bingel</p>
 
-<p>Koral ist eine Bibliothek, die für die Übersetzung verschiedener Korpus-Abfragesprachen nach <%= doc_link_to('KoralQuery', 'api', 'koralquery')%> konzipiert ist. Derzeit unterstützte Abfragesprachen sind <%= doc_link_to 'Cosmas II', 'ql', 'cosmas2'%>, <%= doc_link_to('Annis QL', 'ql', 'annis')%>, <%= doc_link_to ( 'Poliqarp +', 'ql', 'poliqarp-plus')%> (eine erweiterte Version von Poliqarp) und <%= doc_link_to('CQL', 'ql', 'cql')%>.
+<p>Koral ist eine Bibliothek, die für die Übersetzung verschiedener Korpus-Abfragesprachen nach <%= embedded_link_to('KoralQuery', 'api', 'koralquery')%> konzipiert ist. Derzeit unterstützte Abfragesprachen sind <%= embedded_link_to 'Cosmas II', 'ql', 'cosmas2'%>, <%= embedded_link_to('Annis QL', 'ql', 'annis')%>, <%= embedded_link_to ( 'Poliqarp +', 'ql', 'poliqarp-plus')%> (eine erweiterte Version von Poliqarp) und <%= embedded_link_to('CQL', 'ql', 'cql')%>.
 
-<p>Koral ist Open Source und steht unter <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Koral"%> zur Verfügung.</p>
+<p>Koral ist Open Source und steht unter <%= ext_link_to 'GitHub', "https://github.com/KorAP/Koral"%> zur Verfügung.</p>
diff --git a/templates/de/doc/korap/krill.html.ep b/templates/de/doc/korap/krill.html.ep
index ca497b4..64aab10 100644
--- a/templates/de/doc/korap/krill.html.ep
+++ b/templates/de/doc/korap/krill.html.ep
@@ -1,11 +1,11 @@
 % layout 'main', title => 'KorAP: Krill';
 
-<h2 id="tutorial-top">Krill</h2>
+%= page_title
 
 %= korap_overview 'krill'
 
 <p><strong>Hauptentwickler:</strong> Nils Diewald, Eliza Margaretha</p>
 
-<p>Krill ist eine <%= doc_ext_link_to 'Lucene', "https://lucene.apache.org/"%> basierte Suchmaschine für große kommentierte Korpora, die als Backend-Komponente für KorAP verwendet wird. Es ist die Referenzimplementierung für <%= doc_link_to('KoralQuery', 'api', 'koralquery')%>, die die meisten Protokolleigenschaften abdeckt.</p>
+<p>Krill ist eine <%= ext_link_to 'Lucene', "https://lucene.apache.org/"%> basierte Suchmaschine für große kommentierte Korpora, die als Backend-Komponente für KorAP verwendet wird. Es ist die Referenzimplementierung für <%= embedded_link_to('KoralQuery', 'api', 'koralquery')%>, die die meisten Protokolleigenschaften abdeckt.</p>
 
-<p>Krill ist Open Source und steht unter <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Krill"%> zur Verfügung.</p>
+<p>Krill ist Open Source und steht unter <%= ext_link_to 'GitHub', "https://github.com/KorAP/Krill"%> zur Verfügung.</p>
diff --git a/templates/de/doc/korap/kustvakt.html.ep b/templates/de/doc/korap/kustvakt.html.ep
index ab60f33..4340101 100644
--- a/templates/de/doc/korap/kustvakt.html.ep
+++ b/templates/de/doc/korap/kustvakt.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Kustvakt';
 
-<h2 id="tutorial-top">Kustvakt</h2>
+%= page_title
 
 %= korap_overview 'kustvakt'
 
diff --git a/templates/de/doc/ql/poliqarp-plus.html.ep b/templates/de/doc/ql/poliqarp-plus.html.ep
index 04fd507..9080f8e 100644
--- a/templates/de/doc/ql/poliqarp-plus.html.ep
+++ b/templates/de/doc/ql/poliqarp-plus.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Poliqarp+';
 
-<h2 id="tutorial-top">Poliqarp+</h2>
+%= page_title
 
 <p>Die folgende Dokumentation präsentiert alle Funktionen, die unsere Version der Poliqarp Abfragesprache zur Verfügung stellt und enthält zusätzlich einige spezifische KorAP Erweiterungen.</p>
 
@@ -23,7 +23,7 @@
 
   <h4 id="regexp">Reguläre Ausdrücke</h4>
 
-  <p>Segmente können auch durch <%= doc_link_to 'Reguläre Ausdrücke', 'ql', 'regexp' %> abgefragt werden - indem das Segment mit doppelten Anführungszeichen umschlossen wird.</p>
+  <p>Segmente können auch durch <%= embedded_link_to 'Reguläre Ausdrücke', 'ql', 'regexp' %> abgefragt werden - indem das Segment mit doppelten Anführungszeichen umschlossen wird.</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_re', '** "r(u|a)n"'), cutoff => 1
 
@@ -72,12 +72,12 @@
 
   %= doc_query poliqarp => loc('Q_poliqarp_complexre', '** [orth="r(u|a)n"/xi]'), cutoff => 1
 
-  <p>Ein weiterer spezieller Schlüssel ist <code>base</code>, bezogen auf die Lemma-Annotation der <%= doc_link_to 'Standard-Foundry', 'data', 'annotation'%>.
+  <p>Ein weiterer spezieller Schlüssel ist <code>base</code>, bezogen auf die Lemma-Annotation der <%= embedded_link_to 'Standard-Foundry', 'data', 'annotation'%>.
     Die folgende Abfrage findet alle Vorkommen von Segmenten, die mit dem eingegebenen Lemma in der Standard-Foundry annotiert wurden.</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_complexlemma', '** [base=Tree]'), cutoff => 1
 
-  <p>Der dritte Sonderschlüssel ist <code>pos</code> und bezieht sich auf die Wortarten-Annotation der <%= doc_link_to 'Standard-Foundry', 'data', 'annotation'%>.
+  <p>Der dritte Sonderschlüssel ist <code>pos</code> und bezieht sich auf die Wortarten-Annotation der <%= embedded_link_to 'Standard-Foundry', 'data', 'annotation'%>.
     Die folgende Abfrage findet alle attributiven Adjektive:</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_complexpos', '** [pos=ADJA]'), cutoff => 1
@@ -99,7 +99,7 @@
 
   <blockquote class="warning">
     <p>Vorsicht: Negierte komplexe Segmente können nicht alleinstehend gesucht werden.
-      Allerdings funktionieren sie, wenn sie Teil einer <%= doc_link_to 'Sequenz', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence'%> sind.</p>
+      Allerdings funktionieren sie, wenn sie Teil einer <%= embedded_link_to 'Sequenz', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence'%> sind.</p>
   </blockquote>
 
   <h4 id="empty-segments">Leere Segmente</h4>
@@ -108,11 +108,11 @@
 
   %= doc_query poliqarp => '[]', cutoff => 1
 
-  <p>Leere Segmente sind nützlich, um Abstände von Wörtern auszudrücken, indem sie <%= doc_link_to 'Wiederholungen', 'ql', 'poliqarp-plus#syntagmatic-operators-repetitions' %> verwenden.</p>
+  <p>Leere Segmente sind nützlich, um Abstände von Wörtern auszudrücken, indem sie <%= embedded_link_to 'Wiederholungen', 'ql', 'poliqarp-plus#syntagmatic-operators-repetitions' %> verwenden.</p>
 
   <blockquote class="warning">
     <p>Vorsicht: Leere Segmente können nicht alleinstehend gesucht werden. 
-      Allerdings funktionieren sie, wenn sie Teil einer <%= doc_link_to 'Sequenz', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %> sind.</p>
+      Allerdings funktionieren sie, wenn sie Teil einer <%= embedded_link_to 'Sequenz', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %> sind.</p>
   </blockquote>
 </section>
 
@@ -193,7 +193,7 @@
 
   <h4 id="syntagmatic-operators-repetitions">Wiederholungen</h4>
 
-  <p>Wiederholungen in Poliqarp werden wie in <%= doc_link_to 'regulären Ausdrücken', 'ql', 'regexp'%> realisiert, indem Quantifizierer in geschweifte Klammern gesetzt werden.</p>
+  <p>Wiederholungen in Poliqarp werden wie in <%= embedded_link_to 'regulären Ausdrücken', 'ql', 'regexp'%> realisiert, indem Quantifizierer in geschweifte Klammern gesetzt werden.</p>
 
     <p>Um eine Sequenz von drei Vorkommen eines Wortes zu suchen, können Sie Ihre Abfrage auf eine der folgenden Arten formulieren - sie werden die selben Ergebnisse erhalten:</p>
 
@@ -234,7 +234,7 @@
     <p>Denken Sie daran, dass Optionalität auf unterschiedliche Arten <i>vererbt</i> sein kann, zum Beispiel wird eine ganze Abfrage optional, sobald ein Segment der Alternative optional ist.</p>
   </blockquote>
 
-  <p>Die Wiederholung kann auch verwendet werden, um Distanzen zwischen Segmenten auszudrücken, indem Sie <%= doc_link_to 'leere Segmente', 'ql', 'poliqarp-plus # leere Segmente'%> verwenden.</p>
+  <p>Die Wiederholung kann auch verwendet werden, um Distanzen zwischen Segmenten auszudrücken, indem Sie <%= embedded_link_to 'leere Segmente', 'ql', 'poliqarp-plus # leere Segmente'%> verwenden.</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_seqdistance1', '** [base=the][][base=Tree]'), cutoff => 1
   %= doc_query poliqarp => loc('Q_poliqarp_seqdistance2', '** [base=the][]{2}[base=Tree]'), cutoff => 1
@@ -249,7 +249,7 @@
     
   <h4>Positionen</h4>
 
-    <p>Sequenzen wie oben können in weiteren komplexen Abfragen verschachtelt und als Unterabfragen behandelt werden (siehe <%= doc_link_to 'Klassenoperatoren', 'ql', 'poliqarp-plus#class-operator' %>, um direkten Zugriff auf Unterabfragen zu erhalten).</p>
+    <p>Sequenzen wie oben können in weiteren komplexen Abfragen verschachtelt und als Unterabfragen behandelt werden (siehe <%= embedded_link_to 'Klassenoperatoren', 'ql', 'poliqarp-plus#class-operator' %>, um direkten Zugriff auf Unterabfragen zu erhalten).</p>
     
     <p>Positionsoperatoren vergleichen zwei Treffer von Unterabfragen und ergeben einen Treffer, falls eine bestimmte Bedingung bezüglich der Position von beiden wahr ist.</p>
 
diff --git a/templates/doc/api.html.ep b/templates/doc/api.html.ep
index df5bcea..6aad5cb 100644
--- a/templates/doc/api.html.ep
+++ b/templates/doc/api.html.ep
@@ -1,9 +1,9 @@
 % layout 'main', title => 'KorAP: Application Programming Interface';
 
-<h2 id="tutorial-top">Application Programming Interface</h2>
+%= page_title
 
 <p>Internally the communication between KorAP components is done using the KoralQuery protocol.
-  The specification for KoralQuery is available on <%= doc_ext_link_to 'GitHub', "http://korap.github.io/Koral" %>.
+  The specification for KoralQuery is available on <%= ext_link_to 'GitHub', "http://korap.github.io/Koral" %>.
   All API endpoints either use KoralQuery or are (more or lest) REST-ful web APIs.</p>
 
-<p>All publicly available API endpoints including their requests and responses are described in the <%= doc_ext_link_to 'GitHub Wiki', "https://github.com/KorAP/Kustvakt/wiki" %> of <%= doc_link_to 'Kustvakt', 'korap', 'kustvakt' %>.</p>
+<p>All publicly available API endpoints including their requests and responses are described in the <%= ext_link_to 'GitHub Wiki', "https://github.com/KorAP/Kustvakt/wiki" %> of <%= embedded_link_to 'Kustvakt', 'korap', 'kustvakt' %>.</p>
diff --git a/templates/doc/contact.html.ep b/templates/doc/contact.html.ep
index 411a8f8..7d5ea31 100644
--- a/templates/doc/contact.html.ep
+++ b/templates/doc/contact.html.ep
@@ -1,5 +1,5 @@
 % layout 'main', title => 'KorAP: Contact us!';
 
-<h2 id="tutorial-top">KorAP: Contact us</h2>
+%= page_title
 
 <p>You can send us an email at <code>korap</code> at the domain <code>ids-mannheim.de</code>!</p>
diff --git a/templates/doc/data.html.ep b/templates/doc/data.html.ep
index 4fd992c..514a461 100644
--- a/templates/doc/data.html.ep
+++ b/templates/doc/data.html.ep
@@ -1,14 +1,15 @@
 % layout 'main', title => 'KorAP: Data';
 
-<h2 id="tutorial-top">Data</h2>
+%= page_title
+
 <p>KorAP is developed as being the main access point to
-  <%= doc_ext_link_to 'DeReKo', 'http://www1.ids-mannheim.de/kl/projekte/korpora' %>,
-  being the successor of <%= doc_ext_link_to 'COSMAS II', 'https://cosmas2.ids-mannheim.de/cosmas2-web/' %> in that regard.
-  But KorAP is not focussed on any specific corpus, it is, for example, now also used for the Romanian national corpus <%= doc_ext_link_to 'CoRoLa', 'http://corola.racai.ro/' %>.</p>
+  <%= ext_link_to 'DeReKo', 'http://www1.ids-mannheim.de/kl/projekte/korpora' %>,
+  being the successor of <%= ext_link_to 'COSMAS II', 'https://cosmas2.ids-mannheim.de/cosmas2-web/' %> in that regard.
+  But KorAP is not focussed on any specific corpus, it is, for example, now also used for the Romanian national corpus <%= ext_link_to 'CoRoLa', 'http://corola.racai.ro/' %>.</p>
 
 <p>In KorAP, corpus texts are allowed to have arbitrary metadata information, that partially can be used to create subcorpora (so-called virtual corpora).</p>
 
-<p>KorAP also supports an arbitrary number of <%= doc_link_to 'Annotations', 'data', 'annotation' %> from different sources (called <em>foundries</em>) with different <em>layers</em>.</p>
+<p>KorAP also supports an arbitrary number of <%= embedded_link_to 'Annotations', 'data', 'annotation' %> from different sources (called <em>foundries</em>) with different <em>layers</em>.</p>
 
 <dl>
   <p>Annotations of the following kind are supported:</p>
diff --git a/templates/doc/data/annotation.html.ep b/templates/doc/data/annotation.html.ep
index 656323e..0fd87f0 100644
--- a/templates/doc/data/annotation.html.ep
+++ b/templates/doc/data/annotation.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Annotations';
 
-<h2 id="tutorial-top">Annotations</h2>
+%= page_title
 
 <p>KorAP provides access to multiple levels of annotations originating from multiple resources, so called <em>foundries</em>.</p>
 
@@ -41,7 +41,7 @@
   <p>DeReKo annotations provide the following layer for the <code>dereko</code> prefix:</p>
   <dl>
     <dt><abbr data-type="token" title="Structure">s</abbr></dt>
-    <dd>Document structure as encoded in the <%= doc_ext_link_to 'I5 text document', 'http://www1.ids-mannheim.de/kl/projekte/korpora/textmodell.html' %>.</dd>
+    <dd>Document structure as encoded in the <%= ext_link_to 'I5 text document', 'http://www1.ids-mannheim.de/kl/projekte/korpora/textmodell.html' %>.</dd>
   </dl>
   %= doc_query poliqarp => 'startsWith(<dereko/s=s>, Fragestunde)', cutoff => 1
 </section>
@@ -54,7 +54,7 @@
     <dt><abbr data-type="token" title="Part-of-Speech">p</abbr></dt>
     <dd>Part-of-speech information is written in capital letters and is based on STTS</dd>
     <dt><abbr data-type="token" title="Constituency">c</abbr></dt>
-    <dd>Constituency information follows the annotations of the <%= doc_ext_link_to 'negr@ corpus', 'http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html' %>.</dd>
+    <dd>Constituency information follows the annotations of the <%= ext_link_to 'negr@ corpus', 'http://www.coli.uni-saarland.de/projects/sfb378/negra-corpus/negra-corpus.html' %>.</dd>
     <dt><abbr data-type="token" title="Named Entity">ne</abbr></dt>
     <dd>Contains named entities like <code>I-PER</code>, <code>I-ORG</code> etc.</dd>
     <dt><abbr data-type="token" title="Named Entity">ne_hgc_175m_600</abbr></dt>
diff --git a/templates/doc/faq.html.ep b/templates/doc/faq.html.ep
index 26eb0a3..c44ea22 100644
--- a/templates/doc/faq.html.ep
+++ b/templates/doc/faq.html.ep
@@ -1,12 +1,12 @@
 % layout 'main', title => 'KorAP: Frequently Asked Questions';
 
-<h2 id="tutorial-top">Frequently Asked Questions</h2>
+%= page_title
 
 <p>This document puts together the most frequent questions and issues that we have encountered so far. Please feel welcome to ask further questions via <%= mail_to_chiffre join('@', 'korap', 'ids-mannheim.de'), subject => 'Question via Kalamar', begin %>e-mail<% end %>.
 
 <section>
   <h3>Where is the source code?</h3>
-  <p>Parts of KorAP are already available on <%= doc_ext_link_to 'GitHub', 'https://github.com/KorAP' %>, and we will publish more components in the future.</p>
+  <p>Parts of KorAP are already available on <%= ext_link_to 'GitHub', 'https://github.com/KorAP' %>, and we will publish more components in the future.</p>
 </section>
 
 <section>
@@ -16,7 +16,7 @@
 
 <section>
   <h3>I want to report an issue, how do I do it?</h3>
-  <p>Please refer to our public ticketing system <%= doc_ext_link_to 'for the frontend at GitHub', 'https://github.com/KorAP/Kalamar/issues' %>, to report on any issues. If you don't have a GitHub account, please send us an <%= mail_to_chiffre join('@', 'korap', 'ids-mannheim.de'), subject => 'I found an issue', begin %>e-mail<% end %>.</p>
+  <p>Please refer to our public ticketing system <%= ext_link_to 'for the frontend at GitHub', 'https://github.com/KorAP/Kalamar/issues' %>, to report on any issues. If you don't have a GitHub account, please send us an <%= mail_to_chiffre join('@', 'korap', 'ids-mannheim.de'), subject => 'I found an issue', begin %>e-mail<% end %>.</p>
   %# This option is the preferred one because it gathers some (and will in time gather more) important versioning data.
 </section>
 
diff --git a/templates/doc/korap.html.ep b/templates/doc/korap.html.ep
index 3f29cc1..d38e4ae 100644
--- a/templates/doc/korap.html.ep
+++ b/templates/doc/korap.html.ep
@@ -1,28 +1,28 @@
 % layout 'main', title => 'KorAP: Overview';
 
-<h2 id="tutorial-top">KorAP: An Overview</h2>
+%= page_title
 
 %= korap_overview 'korap'
 
-<p>The KorAP project was launched in 2011 at the <%= doc_ext_link_to 'Leibniz Institute for the German Language (IDS)', "http://www.ids-mannheim.de/" %> in Mannheim, Germany. KorAP is a Corpus Analysis Platform, with an extensible and scalable architecture. It consists of multiple components, that are exchangable due to well defined APIs.</p>
+<p>The KorAP project was launched in 2011 at the <%= ext_link_to 'Leibniz Institute for the German Language (IDS)', "http://www.ids-mannheim.de/" %> in Mannheim, Germany. KorAP is a Corpus Analysis Platform, with an extensible and scalable architecture. It consists of multiple components, that are exchangable due to well defined APIs.</p>
 
 <dl>
-  <dt><%= doc_link_to('Kalamar', 'korap', 'kalamar') %></dt>
+  <dt><%= embedded_link_to('Kalamar', 'korap', 'kalamar') %></dt>
   <dd>Kalamar is the user frontend. Most users will access the search and analysis capabilities of KorAP through the user frontend. The user will formulate queries in one of several query languages that are passed to Kustvakt.</dd>
 
-  <dt><%= doc_link_to('API', 'api') %></dt>
+  <dt><%= embedded_link_to('API', 'api') %></dt>
   <dd>As an alternative to the user frontend, queries can be initiated using a REST web interface directly with Kustvakt.</dd>
 
-  <dt><%= doc_link_to('Kustvakt', 'korap', 'kustvakt') %></dt>
-  <dd>Kustvakt is the central user and policy management service. It takes a query and rewrites it to restrict the scope of a search to documents the user is allowed to. It may also inject further properties the user has set up, like preferred annotation layers. To transfer a query written in a certain query language to the internal general query protocol <%= doc_link_to('KoralQuery', 'api', 'koralquery') %>, Kustvakt uses <%= doc_link_to('Koral', 'korap', 'koral') %>.</dd>
+  <dt><%= embedded_link_to('Kustvakt', 'korap', 'kustvakt') %></dt>
+  <dd>Kustvakt is the central user and policy management service. It takes a query and rewrites it to restrict the scope of a search to documents the user is allowed to. It may also inject further properties the user has set up, like preferred annotation layers. To transfer a query written in a certain query language to the internal general query protocol <%= embedded_link_to('KoralQuery', 'api', 'koralquery') %>, Kustvakt uses <%= embedded_link_to('Koral', 'korap', 'koral') %>.</dd>
 
-  <dt><%= doc_link_to('Koral', 'korap', 'koral') %></dt>
-  <dd>Koral is a library that translates queries written in one of several implemented query languages into a general query protocol, called <%= doc_link_to('KoralQuery', 'api', 'koralquery') %>.</dd>
+  <dt><%= embedded_link_to('Koral', 'korap', 'koral') %></dt>
+  <dd>Koral is a library that translates queries written in one of several implemented query languages into a general query protocol, called <%= embedded_link_to('KoralQuery', 'api', 'koralquery') %>.</dd>
 
-  <dt><%= doc_link_to('Krill', 'korap', 'krill') %></dt>
-  <dd>Krill is a Lucene based backend engine that can search large corpora for occurrences of search patterns formulated in <%= doc_link_to('KoralQuery', 'api', 'koralquery') %>.</dd>
+  <dt><%= embedded_link_to('Krill', 'korap', 'krill') %></dt>
+  <dd>Krill is a Lucene based backend engine that can search large corpora for occurrences of search patterns formulated in <%= embedded_link_to('KoralQuery', 'api', 'koralquery') %>.</dd>
 
-  <dt><%= doc_link_to('Karang', 'korap', 'karang') %></dt>
+  <dt><%= embedded_link_to('Karang', 'korap', 'karang') %></dt>
   <dd>Karang is a Neo4j based backend engine that can traverse large corpora represented as graphs.</dd>
 </dl>
 
@@ -31,37 +31,37 @@
 <dl>
   <dt>Head</dt>
   <dd>
-    <%= doc_ext_link_to 'Marc Kupietz', "http://www.ids-mannheim.de/direktion/personal/kupietz.html" %>,
-    <%= doc_ext_link_to 'Andreas Witt', "http://www.ids-mannheim.de/direktion/personal/witt.html" %>
+    <%= ext_link_to 'Marc Kupietz', "http://www.ids-mannheim.de/direktion/personal/kupietz.html" %>,
+    <%= ext_link_to 'Andreas Witt', "http://www.ids-mannheim.de/direktion/personal/witt.html" %>
   </dd>
 
   <dt>Scientific Staff</dt>
   <dd>
-    <%= doc_ext_link_to 'Franck Bodmer', "http://www.ids-mannheim.de/direktion/personal/bodmer.html" %>,
-    <%= doc_ext_link_to 'Nils Diewald', "http://nils-diewald.de/" %>,
-    <%= doc_ext_link_to 'Peter Harders', "http://www.ids-mannheim.de/direktion/personal/harders.html" %>,
-    <%= doc_ext_link_to 'Eliza Margaretha', "http://www.ids-mannheim.de/direktion/personal/margaretha/" %>,
-    <%= doc_ext_link_to 'Helge Stallkamp', "http://www.ids-mannheim.de/direktion/personal/krause.html" %>
+    <%= ext_link_to 'Franck Bodmer', "http://www.ids-mannheim.de/direktion/personal/bodmer.html" %>,
+    <%= ext_link_to 'Nils Diewald', "http://nils-diewald.de/" %>,
+    <%= ext_link_to 'Peter Harders', "http://www.ids-mannheim.de/direktion/personal/harders.html" %>,
+    <%= ext_link_to 'Eliza Margaretha', "http://www.ids-mannheim.de/direktion/personal/margaretha/" %>,
+    <%= ext_link_to 'Helge Stallkamp', "http://www.ids-mannheim.de/direktion/personal/krause.html" %>
   </dd>
 
   <dt>Translations</dt>
   <dd>
-    <%= doc_ext_link_to 'Susanne Feix', "http://www.ids-mannheim.de/direktion/personal/bergmann.html" %>
+    <%= ext_link_to 'Susanne Feix', "http://www.ids-mannheim.de/direktion/personal/bergmann.html" %>
   </dd>
 
   <dt>Past Project Members</dt>
   <dd>
-    <%= doc_ext_link_to 'Piotr Bański', "http://www.ids-mannheim.de/direktion/personal/banski.html" %>,
+    <%= ext_link_to 'Piotr Bański', "http://www.ids-mannheim.de/direktion/personal/banski.html" %>,
     Joachim Bingel,
-    <%= doc_ext_link_to 'Elena Frick', "http://www.ids-mannheim.de/direktion/personal/frick/" %>,
+    <%= ext_link_to 'Elena Frick', "http://www.ids-mannheim.de/direktion/personal/frick/" %>,
     Michael Hanl,
-    <%= doc_ext_link_to 'Carsten Schnober', "http://www.ids-mannheim.de/direktion/personal/ehemalige/schnober.html" %>
+    <%= ext_link_to 'Carsten Schnober', "http://www.ids-mannheim.de/direktion/personal/ehemalige/schnober.html" %>
   </dd>
 
   <dt>Consulting</dt>
   <dd>
-    <%= doc_ext_link_to 'Cyril Belica', "http://www.ids-mannheim.de/direktion/personal/belica.html" %>,
+    <%= ext_link_to 'Cyril Belica', "http://www.ids-mannheim.de/direktion/personal/belica.html" %>,
 		Piotr Pęzik,
-    <%= doc_ext_link_to 'Oliver Schonefeld', "http://www.ids-mannheim.de/direktion/personal/schonefeld/" %>
+    <%= ext_link_to 'Oliver Schonefeld', "http://www.ids-mannheim.de/direktion/personal/schonefeld/" %>
   </dd>
 </dl>
diff --git a/templates/doc/korap/kalamar.html.ep b/templates/doc/korap/kalamar.html.ep
index 5022456..04c458b 100644
--- a/templates/doc/korap/kalamar.html.ep
+++ b/templates/doc/korap/kalamar.html.ep
@@ -1,11 +1,11 @@
 % layout 'main', title => 'KorAP: Kalamar';
 
-<h2 id="tutorial-top">Kalamar</h2>
+%= page_title
 
 %= korap_overview 'kalamar'
 
 <p><strong>Main developer:</strong> Nils Diewald, Helge Stallkamp</p>
 
-<p>Kalamar is the main user frontend of KorAP. It is based on <%= doc_ext_link_to 'Mojolicious', "http://mojolicio.us/" %> and written in Perl and JavaScript.</p>
+<p>Kalamar is the main user frontend of KorAP. It is based on <%= ext_link_to 'Mojolicious', "http://mojolicio.us/" %> and written in Perl and JavaScript.</p>
 
-<p>Kalamar is open source and available on <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Kalamar" %>.</p>
+<p>Kalamar is open source and available on <%= ext_link_to 'GitHub', "https://github.com/KorAP/Kalamar" %>.</p>
diff --git a/templates/doc/korap/karang.html.ep b/templates/doc/korap/karang.html.ep
index 5c60d48..820a12b 100644
--- a/templates/doc/korap/karang.html.ep
+++ b/templates/doc/korap/karang.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Karang';
 
-<h2 id="tutorial-top">Karang</h2>
+%= page_title
 
 %= korap_overview 'karang'
 
diff --git a/templates/doc/korap/koral.html.ep b/templates/doc/korap/koral.html.ep
index 54539df..9af7508 100644
--- a/templates/doc/korap/koral.html.ep
+++ b/templates/doc/korap/koral.html.ep
@@ -1,11 +1,11 @@
 % layout 'main', title => 'KorAP: Koral';
 
-<h2 id="tutorial-top">Koral</h2>
+%= page_title
 
 %= korap_overview 'koral'
 
 <p><strong>Main developer:</strong> Joachim Bingel</p>
 
-<p>Koral is a library designed for the translation of different corpus query languages to <%= doc_link_to('KoralQuery', 'api', 'koralquery') %>. Currently supported query languages include <%= doc_link_to 'Cosmas II', 'ql', 'cosmas2' %>, <%= doc_link_to('Annis QL', 'ql', 'annis') %>, <%= doc_link_to('Poliqarp+', 'ql', 'poliqarp-plus') %> (an extended version of Poliqarp) and <%= doc_link_to('CQL', 'ql', 'cql') %>.</p>
+<p>Koral is a library designed for the translation of different corpus query languages to <%= embedded_link_to('KoralQuery', 'api', 'koralquery') %>. Currently supported query languages include <%= embedded_link_to 'Cosmas II', 'ql', 'cosmas2' %>, <%= embedded_link_to('Annis QL', 'ql', 'annis') %>, <%= embedded_link_to('Poliqarp+', 'ql', 'poliqarp-plus') %> (an extended version of Poliqarp) and <%= embedded_link_to('CQL', 'ql', 'cql') %>.</p>
 
-<p>Koral is open source and available on <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Koral" %>.</p>
+<p>Koral is open source and available on <%= ext_link_to 'GitHub', "https://github.com/KorAP/Koral" %>.</p>
diff --git a/templates/doc/korap/krill.html.ep b/templates/doc/korap/krill.html.ep
index c6898fc..dcf1fe0 100644
--- a/templates/doc/korap/krill.html.ep
+++ b/templates/doc/korap/krill.html.ep
@@ -1,11 +1,11 @@
 % layout 'main', title => 'KorAP: Krill';
 
-<h2 id="tutorial-top">Krill</h2>
+%= page_title
 
 %= korap_overview 'krill'
 
 <p><strong>Main developer:</strong> Nils Diewald, Eliza Margaretha</p>
 
-<p>Krill is a <%= doc_ext_link_to 'Lucene', "https://lucene.apache.org/" %> based search engine for large annotated corpora, used as a backend component for KorAP. It is the reference implementation for <%= doc_link_to('KoralQuery', 'api', 'koralquery') %>, covering most of the protocols features.</p>
+<p>Krill is a <%= ext_link_to 'Lucene', "https://lucene.apache.org/" %> based search engine for large annotated corpora, used as a backend component for KorAP. It is the reference implementation for <%= embedded_link_to('KoralQuery', 'api', 'koralquery') %>, covering most of the protocols features.</p>
 
-<p>Krill is open source and available on <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Krill" %>.</p>
+<p>Krill is open source and available on <%= ext_link_to 'GitHub', "https://github.com/KorAP/Krill" %>.</p>
diff --git a/templates/doc/korap/kustvakt.html.ep b/templates/doc/korap/kustvakt.html.ep
index b2803ca..4a1de8f 100644
--- a/templates/doc/korap/kustvakt.html.ep
+++ b/templates/doc/korap/kustvakt.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Kustvakt';
 
-<h2 id="tutorial-top">Kustvakt</h2>
+%= page_title
 
 %= korap_overview 'kustvakt'
 
@@ -8,5 +8,5 @@
 
 <p>Kustvakt is a user and policy management software, that is capable of rewriting queries for policy based document restrictions.</p>
 
-<p>Kustvakt is open source and available on <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Kustvakt" %>.</p>
+<p>Kustvakt is open source and available on <%= ext_link_to 'GitHub', "https://github.com/KorAP/Kustvakt" %>.</p>
 
diff --git a/templates/doc/ql.html.ep b/templates/doc/ql.html.ep
index 5cfcfa0..d09eeb6 100644
--- a/templates/doc/ql.html.ep
+++ b/templates/doc/ql.html.ep
@@ -4,39 +4,39 @@
 %# This should be stored when clicking on a specific query
 %# but the remembered section contains the id - not the query
 
-<h2 id="tutorial-top">Query Languages</h2>
+%= page_title
 
 <section id="examples">
   <h3>Example Queries</h3>
   
-  <p><strong><%= doc_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %></strong>: Find all occurrences of the lemma &quot;baum&quot; as annotated by the <%= doc_link_to 'default foundry', 'data', 'annotation' %>.</p>
+  <p><strong><%= embedded_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %></strong>: Find all occurrences of the lemma &quot;baum&quot; as annotated by the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>.</p>
   %= doc_query poliqarp => '[base=Baum]'
 
-  <p><strong><%= doc_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %></strong>: Find all sequences of adjectives as annotated by Treetagger, that are repeated 3 to 5 times in a row.</p>
+  <p><strong><%= embedded_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %></strong>: Find all sequences of adjectives as annotated by Treetagger, that are repeated 3 to 5 times in a row.</p>
   %= doc_query poliqarp => '[tt/p=ADJA]{3,5}'
 
-  <p><strong><%= doc_link_to 'Cosmas-II', 'ql', 'cosmas-2' %></strong>: Find all occurrences of the words &quot;der&quot; and &quot;Baum&quot;, in case they are in a maximum distance of 5 tokens. The order is not relevant.</p>
+  <p><strong><%= embedded_link_to 'Cosmas-II', 'ql', 'cosmas-2' %></strong>: Find all occurrences of the words &quot;der&quot; and &quot;Baum&quot;, in case they are in a maximum distance of 5 tokens. The order is not relevant.</p>
   %= doc_query cosmas2 => 'der /w5 Baum'
 
-  <p><strong><%= doc_link_to 'Cosmas-II', 'ql', 'cosmas-2' %></strong>: Find all sequences of a word starting with a &quot;d&quot; (using a wildcard) followed by an adjective as annotated in the mate foundry, followed by the word &quot;Baum&quot; (ignore the case), that is in a sentence element annotated by the <%= doc_link_to 'default foundry', 'data', 'annotation' %>.</p>
+  <p><strong><%= embedded_link_to 'Cosmas-II', 'ql', 'cosmas-2' %></strong>: Find all sequences of a word starting with a &quot;d&quot; (using a wildcard) followed by an adjective as annotated in the mate foundry, followed by the word &quot;Baum&quot; (ignore the case), that is in a sentence element annotated by the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>.</p>
   <p><em>Be aware</em>: Minor incompatibilities with implemented languages may be announced with warnings.</p>
   %= doc_query cosmas2 => 'd* MORPH(mate/p=ADJA) $Baum #IN #ELEM(s)'
 
-  <p><strong><%= doc_link_to 'Poliqarp+', 'ql', 'poliqarp-plus' %></strong>: Find all nominal phrases as annotated using CoreNLP, that contain an adverb as annotated by OpenNLP, that is annotated as something starting with an &quot;A&quot; using regular expressions in Treetagger.</p>
+  <p><strong><%= embedded_link_to 'Poliqarp+', 'ql', 'poliqarp-plus' %></strong>: Find all nominal phrases as annotated using CoreNLP, that contain an adverb as annotated by OpenNLP, that is annotated as something starting with an &quot;A&quot; using regular expressions in Treetagger.</p>
   %= doc_query poliqarp => 'contains(<corenlp/c=NP>,{[opennlp/p=ADV & tt/p="A.*"]})', cutoff => 1
 
-  <p><strong><%= doc_link_to 'Poliqarp+', 'ql', 'poliqarp-plus' %></strong>: Find all sentences as annotated by the base foundry that start with a sequence of one token in present tense as annotated by Marmot and the lemma &quot;die&quot; annotated by the <%= doc_link_to 'default foundry', 'data', 'annotation' %>. Highlight both terms of the sequence.</p>
+  <p><strong><%= embedded_link_to 'Poliqarp+', 'ql', 'poliqarp-plus' %></strong>: Find all sentences as annotated by the base foundry that start with a sequence of one token in present tense as annotated by Marmot and the lemma &quot;die&quot; annotated by the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>. Highlight both terms of the sequence.</p>
   %= doc_query poliqarp => 'startswith(<base/s=s>, {1:[marmot/m=tense:pres]}{2:[base=die]})', cutoff => 1
 
-  <p><strong><%= doc_link_to 'Poliqarp+', 'ql', 'poliqarp-plus' %></strong>: Find all sequences of an article, followed by three to four adjectives and a noun as annotated by the Treetagger foundry, that finish a sentence. Highlight all parts of the sequence.</p>
+  <p><strong><%= embedded_link_to 'Poliqarp+', 'ql', 'poliqarp-plus' %></strong>: Find all sequences of an article, followed by three to four adjectives and a noun as annotated by the Treetagger foundry, that finish a sentence. Highlight all parts of the sequence.</p>
   %= doc_query poliqarp => 'focus(3:endswith(<base/s=s>,{3:[tt/p=ART]{1:{2:[tt/p=ADJA]{3,4}}[tt/p=NN]}}))', cutoff => 1
 
-  <p><strong><%= doc_link_to 'Annis', 'ql', 'annis' %></strong>: Find all occurrences of the sequence of two tokens annotated as adverbs by the <%= doc_link_to 'default foundry', 'data', 'annotation' %>.</p>
+  <p><strong><%= embedded_link_to 'Annis', 'ql', 'annis' %></strong>: Find all occurrences of the sequence of two tokens annotated as adverbs by the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>.</p>
   %= doc_query annis => 'pos="ADV" & pos="ADV" & #1 . #2'
 
-  <p><strong><%= doc_link_to 'Annis', 'ql', 'annis' %></strong>: Find all determiner relations with the label <code>DET</code> by MALT where the relation sources are attributive possesive pronouns annotated by Tree Tagger.</p>
+  <p><strong><%= embedded_link_to 'Annis', 'ql', 'annis' %></strong>: Find all determiner relations with the label <code>DET</code> by MALT where the relation sources are attributive possesive pronouns annotated by Tree Tagger.</p>
   %= doc_query annis => 'tt/p="PPOSAT" ->malt/d[func="DET"] node'
 
-  <p><strong><%= doc_link_to 'CQL', 'ql', 'cql' %></strong>: Find all occurrences of the sequence &quot;der alte Mann&quot;.</p>
+  <p><strong><%= embedded_link_to 'CQL', 'ql', 'cql' %></strong>: Find all occurrences of the sequence &quot;der alte Mann&quot;.</p>
   %= doc_query cql => '"der alte Mann"'	
 </section>
diff --git a/templates/doc/ql/annis.html.ep b/templates/doc/ql/annis.html.ep
index e3ca663..24a2145 100644
--- a/templates/doc/ql/annis.html.ep
+++ b/templates/doc/ql/annis.html.ep
@@ -1,15 +1,15 @@
 % layout 'main', title => 'KorAP: Annis QL';
 
-<h2 id="tutorial-top">Annis QL</h2>
+%= page_title
 
-<p><%= doc_ext_link_to 'ANNIS Query Language (Annis QL or AQL)', "https://corpus-tools.org/annis/aql.html" %>
-  is a query language of the <%= doc_ext_link_to 'ANNIS corpus search system', "https://corpus-tools.org/annis/" %>
+<p><%= ext_link_to 'ANNIS Query Language (Annis QL or AQL)', "https://corpus-tools.org/annis/aql.html" %>
+  is a query language of the <%= ext_link_to 'ANNIS corpus search system', "https://corpus-tools.org/annis/" %>
   designed particularly to deal with complex linguistic corpora with multiple
   annotation layers (e.g. morphology) and various annotation types (e.g. attribute-value
   pairs, relations). The concept of AQL is similar to searching node elements and edges
   between them, where a node element can be a token or an attribute-value pair.</p>
 
-<p>KorAP supports the following keywords by using the <%= doc_link_to 'default foundries', 'data', 'annotation' %>: </p>
+<p>KorAP supports the following keywords by using the <%= embedded_link_to 'default foundries', 'data', 'annotation' %>: </p>
 <dl>
   <dt><code>node</code></dt>
   <dd>a node element</dd>
diff --git a/templates/doc/ql/cosmas-2.html.ep b/templates/doc/ql/cosmas-2.html.ep
index e7fba99..d320eb3 100644
--- a/templates/doc/ql/cosmas-2.html.ep
+++ b/templates/doc/ql/cosmas-2.html.ep
@@ -1,8 +1,8 @@
 % layout 'main', title => 'KorAP: COSMAS II';
 
-<h2 id="tutorial-top">COSMAS II</h2>
+%= page_title
 
-<p>The following documentation introduces some features provided by our version of the COSMAS II Query Language. For more information, please visit the <%= doc_ext_link_to 'online help of COSMAS II', "http://www.ids-mannheim.de/cosmas2/web-app/hilfe/suchanfrage/eingabe-zeile/syntax/allgemein.html" %>.</p>
+<p>The following documentation introduces some features provided by our version of the COSMAS II Query Language. For more information, please visit the <%= ext_link_to 'online help of COSMAS II', "http://www.ids-mannheim.de/cosmas2/web-app/hilfe/suchanfrage/eingabe-zeile/syntax/allgemein.html" %>.</p>
 
 <section id="queryterms">
   <h3>Query Terms</h3>
@@ -30,7 +30,7 @@
 
   <h4>Lemma Operator</h4>
   
-  <p>Instead of searching for the surface form of a word, a lemma (as annotated by the <%= doc_link_to 'default foundry', 'data', 'annotation' %>) can be requested by prepending the term with the <code>&amp;</code> operator. The form of the lemma is dependent on the annotation.</p>
+  <p>Instead of searching for the surface form of a word, a lemma (as annotated by the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>) can be requested by prepending the term with the <code>&amp;</code> operator. The form of the lemma is dependent on the annotation.</p>
   <%= doc_query cosmas2 => '&laufen' %>
 
   <h4>Case Insensitivity Operator</h4>
@@ -40,11 +40,11 @@
 
   <h4>Regular Expression Operator</h4>
 
-  <p>By using the <code>#REG(...)</code> operator, query terms can be formulated using <%= doc_link_to 'regular expressions', 'ql', 'regexp' %>.</p>
+  <p>By using the <code>#REG(...)</code> operator, query terms can be formulated using <%= embedded_link_to 'regular expressions', 'ql', 'regexp' %>.</p>
   
 
   <blockquote class="bug">
-    <p>Regular expressions in COSMAS II are not yet properly implemented in KorAP. If you want to use regular expressions, please refer to <%= doc_link_to 'Poliqarp', 'ql', 'poliqarp-plus#regexp' %>.</p>
+    <p>Regular expressions in COSMAS II are not yet properly implemented in KorAP. If you want to use regular expressions, please refer to <%= embedded_link_to 'Poliqarp', 'ql', 'poliqarp-plus#regexp' %>.</p>
   </blockquote>
 
 </section>
@@ -81,10 +81,10 @@
   <p>Distance operators accept the definition of a distance interval by appending numerical values. If only a single numerical value is given (e.g. in <code>/+s4</code>), the defined distance is considered a maximum distance. So both operands can or can not occur in a distance equal or lower the given value. If two numerical values are given separated by the <code>:</code> symbol (e.g. in <code>/+s4:2</code>), they define an interval, in which the distance is valid.</p>
 
 %#  <blockquote class="warning">
-%#    <p>Currently, intervals are interpreted as MIN:MAX only, while COSMAS 2 defines intervals as being MAX:MIN, while taking the smaller number as being the minimum value of the interval and the greater number as being the maximum value of the interval. <%= doc_ext_link_to 'KorAP will adopt the behaviour of COSMAS II in the near future', "https://github.com/KorAP/Koral/issues/67" %>.</p>
+%#    <p>Currently, intervals are interpreted as MIN:MAX only, while COSMAS 2 defines intervals as being MAX:MIN, while taking the smaller number as being the minimum value of the interval and the greater number as being the maximum value of the interval. <%= ext_link_to 'KorAP will adopt the behaviour of COSMAS II in the near future', "https://github.com/KorAP/Koral/issues/67" %>.</p>
 %#  </blockquote>
   
-  <p>Distance operators rely on the <%= doc_link_to 'default foundry', 'data', 'annotation' %> annotation for document structures.</p>
+  <p>Distance operators rely on the <%= embedded_link_to 'default foundry', 'data', 'annotation' %> annotation for document structures.</p>
 
   <h4>Word Distance Operator</h4>
 
@@ -105,7 +105,7 @@
   <h4>Sentence Distance Operator</h4>
 
   <p>The sentence distance operator <code>s</code> defines how many sentences are allowed or are not allowed in-between two search operands.</p>
-  <p>The sentence distance relies on the <%= doc_link_to 'default foundry', 'data', 'annotation' %> annotation for document structures.</p>
+  <p>The sentence distance relies on the <%= embedded_link_to 'default foundry', 'data', 'annotation' %> annotation for document structures.</p>
 
   <p>Search for two operands occuring in the same or a following sentence in arbitrary order:</p>
   %= doc_query cosmas2 => 'offen /s1 Geschäft'
@@ -119,7 +119,7 @@
   <h4>Paragraph Distance Operator</h4>
 
   <p>The paragraph distance operator <code>p</code> defines how many paragraphs are allowed or are not allowed in-between two search operands.</p>
-  <p>The paragraph distance relies on the <%= doc_link_to 'default foundry', 'data', 'annotation' %> annotation for document structures.</p>
+  <p>The paragraph distance relies on the <%= embedded_link_to 'default foundry', 'data', 'annotation' %> annotation for document structures.</p>
 
   <p>Search for two operands occuring in the same or a following paragraph in arbitrary order:</p>
   %= doc_query cosmas2 => 'offen /p1 Geschäft'
@@ -136,7 +136,7 @@
 
   <h4>Multiple Distance Operators</h4>
 
-  %= doc_uc
+  %= under_construction
 
   <h4>Nesting of multiple Distance Operations</h4>
   
@@ -147,18 +147,18 @@
 
 <section id="annotation-operators">
   <h3>Annotation Operators</h3>
-  %= doc_uc
+  %= under_construction
   %# MORPH and ELEM
 </section>
 
 <section id="combination-operators">
   <h3>Combination Operators</h3>
-  %= doc_uc
+  %= under_construction
   %# IN and OV
 </section>
 
 <section id="area-operators">
   <h3>Area Operators</h3>
-  %= doc_uc
+  %= under_construction
   %# LINKS, RECHTS, INKLUSIVE, EXKLUSIVE, BED
 </section>
diff --git a/templates/doc/ql/cql.html.ep b/templates/doc/ql/cql.html.ep
index cf580de..5c51e1e 100644
--- a/templates/doc/ql/cql.html.ep
+++ b/templates/doc/ql/cql.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: CQL';
 
-<h2 id="tutorial-top">CQL</h2>
+%= page_title
 
 <p>CQL stands for Contextual Query Language. The main purpose of CQL is to represent queries
     to information retrieval systems. In fact, CQL is commonly used together with the Search
@@ -27,6 +27,6 @@
 
 <section id="References">
     <h3>References: </h3>
-    <p><%= doc_ext_link_to 'searchRetrieve: Part 5', "http://docs.oasis-open.org/search-ws/searchRetrieve/v1.0/os/part5-cql/searchRetrieve-v1.0-os-part5-cql.doc" %>.
-      <%= doc_ext_link_to 'CQL: The Contextual Query Language version 1.0', "https://www.loc.gov/standards/sru/cql/" %>, OASIS, January 2013</p>
+    <p><%= ext_link_to 'searchRetrieve: Part 5', "http://docs.oasis-open.org/search-ws/searchRetrieve/v1.0/os/part5-cql/searchRetrieve-v1.0-os-part5-cql.doc" %>.
+      <%= ext_link_to 'CQL: The Contextual Query Language version 1.0', "https://www.loc.gov/standards/sru/cql/" %>, OASIS, January 2013</p>
 </section>
diff --git a/templates/doc/ql/fcsql.html.ep b/templates/doc/ql/fcsql.html.ep
index fdd4d9d..843438e 100644
--- a/templates/doc/ql/fcsql.html.ep
+++ b/templates/doc/ql/fcsql.html.ep
@@ -1,12 +1,12 @@
 % layout 'main', title => 'KorAP: FCSQL';
 
-<h2 id="tutorial-top">FCSQL</h2>
+%= page_title
 
 <p>FCS-QL is a query language specifically developed to accomodate advanced search in
-  <%= doc_ext_link_to 'Clarin Federated Content Search (FCS)', "https://www.clarin.eu/content/federated-content-search-clarin-fcs" %>,
+  <%= ext_link_to 'Clarin Federated Content Search (FCS)', "https://www.clarin.eu/content/federated-content-search-clarin-fcs" %>,
   that allows searching through annotated data.
 Accordingly, FCS-QL is primarily intended to represent queries involving annotation layers
-such as part-of-speech and lemma. FCS-QL grammar is fairly similar to <%= doc_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %> since it was
+such as part-of-speech and lemma. FCS-QL grammar is fairly similar to <%= embedded_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %> since it was
 built heavily based on Poliqarp/CQP.</p>
 
 <p>In FCS-QL, foundries are called qualifiers. A combination of a foundry and a layer is
@@ -43,7 +43,7 @@
   %= doc_query fcsql => '[text = "Semmel"]', cutoff => 1
   %= doc_query fcsql => '[text = "essen"/c]', cutoff => 1
 	
-	<p>Querying adverbs from the <%= doc_link_to 'default foundry', 'data', 'annotation' %>.</p>
+	<p>Querying adverbs from the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>.</p>
   %= doc_query fcsql => '[pos="ADV"]', cutoff => 1
 	
 
@@ -72,7 +72,7 @@
 	
 
   <h4>Empty token</h4>
-	<p>Like in <%= doc_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %>, an empty token is signified by <code>[]</code>
+	<p>Like in <%= embedded_link_to 'Poliqarp', 'ql', 'poliqarp-plus' %>, an empty token is signified by <code>[]</code>
     which means any token. Due to the
 	excessive number of results, empty token is not allowed to be used independently, but in
 	combination with other tokens, for instance in a sequence query.</p>
diff --git a/templates/doc/ql/poliqarp-plus.html.ep b/templates/doc/ql/poliqarp-plus.html.ep
index 912b485..6dabcbc 100644
--- a/templates/doc/ql/poliqarp-plus.html.ep
+++ b/templates/doc/ql/poliqarp-plus.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Poliqarp+';
 
-<h2 id="tutorial-top">Poliqarp+</h2>
+%= page_title
 
 <p>The following documentation introduces all features provided by our version of the Poliqarp Query Language and some KorAP specific extensions.</p>
 
@@ -24,7 +24,7 @@
 
   <h4 id="regexp">Regular Expressions</h4>
 
-  <p>Segments can also be queried using <%= doc_link_to 'regular expressions', 'ql', 'regexp' %> - by surrounding the segment with double quotes.</p>
+  <p>Segments can also be queried using <%= embedded_link_to 'regular expressions', 'ql', 'regexp' %> - by surrounding the segment with double quotes.</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_re', '** "r(u|a)n"'), cutoff => 1
 
@@ -70,12 +70,12 @@
 
   %= doc_query poliqarp => loc('Q_poliqarp_complexre', '** [orth="r(u|a)n"/xi]'), cutoff => 1
 
-  <p>Another special key is <code>base</code>, refering to the lemma annotation of the <%= doc_link_to 'default foundry', 'data', 'annotation' %>.
+  <p>Another special key is <code>base</code>, refering to the lemma annotation of the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>.
     The following query finds all occurrences of segments annotated as a specified lemma by the default foundry.</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_complexlemma', '** [base=Tree]'), cutoff => 1
 
-  <p>The third special key is <code>pos</code>, refering to the part-of-speech annotation of the <%= doc_link_to 'default foundry', 'data', 'annotation' %>.
+  <p>The third special key is <code>pos</code>, refering to the part-of-speech annotation of the <%= embedded_link_to 'default foundry', 'data', 'annotation' %>.
     The following query finds all attributive adjectives:</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_complexpos', '** [pos=ADJA]'), cutoff => 1
@@ -97,7 +97,7 @@
 
   <blockquote class="warning">
     <p>Beware: Negated complex segments can't be searched as a single statement.
-      However, they work in case they are part of a <%= doc_link_to 'sequence', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %>.</p>
+      However, they work in case they are part of a <%= embedded_link_to 'sequence', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %>.</p>
   </blockquote>
 
   <h4 id="empty-segments">Empty Segments</h4>
@@ -106,11 +106,11 @@
 
   %= doc_query poliqarp => '[]', cutoff => 1
 
-  <p>Empty segments are useful to express distances of words by using <%= doc_link_to 'repetitions', 'ql', 'poliqarp-plus#syntagmatic-operators-repetitions' %>.</p>
+  <p>Empty segments are useful to express distances of words by using <%= embedded_link_to 'repetitions', 'ql', 'poliqarp-plus#syntagmatic-operators-repetitions' %>.</p>
 
   <blockquote class="warning">
     <p>Beware: Empty segments can't be searched as a single statement.
-      However, they work in case they are part of a <%= doc_link_to 'sequence', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %>.</p>
+      However, they work in case they are part of a <%= embedded_link_to 'sequence', 'ql', 'poliqarp-plus#syntagmatic-operators-sequence' %>.</p>
   </blockquote>
 </section>
 
@@ -191,7 +191,7 @@
 
   <h4 id="syntagmatic-operators-repetitions">Repetition</h4>
 
-  <p>Repetitions in Poliqarp are realized as in <%= doc_link_to 'regular expressions', 'ql', 'regexp' %>, by giving quantifieres in curly brackets.</p>
+  <p>Repetitions in Poliqarp are realized as in <%= embedded_link_to 'regular expressions', 'ql', 'regexp' %>, by giving quantifieres in curly brackets.</p>
   <p>To search for a sequence of three occurrences of a defined string, you can formulate your query in any of the following ways - they will have the same results:</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_repmanual', '** the the the'), cutoff => 1
@@ -231,7 +231,7 @@
     <p>Keep in mind that optionality may be somehow <i>inherited</i>, for example an entire query becomes optional as soon as one segment of an alternation is optional.</p>
   </blockquote>
 
-  <p>Repetition can also be used to express distances between segments by using <%= doc_link_to 'empty segments', 'ql', 'poliqarp-plus#empty-segments' %>.</p>
+  <p>Repetition can also be used to express distances between segments by using <%= embedded_link_to 'empty segments', 'ql', 'poliqarp-plus#empty-segments' %>.</p>
 
   %= doc_query poliqarp => loc('Q_poliqarp_seqdistance1', '** [base=the][][base=Tree]'), cutoff => 1
   %= doc_query poliqarp => loc('Q_poliqarp_seqdistance2', '** [base=the][]{2}[base=Tree]'), cutoff => 1
@@ -246,7 +246,7 @@
     
   <h4>Position</h4>
 
-  <p>Sequences as shown above can all be nested in further complex queries and treated as subqueries (see <%= doc_link_to 'class operators', 'ql', 'poliqarp-plus#class-operators' %> on how to later access these subqueries directly).</p>
+  <p>Sequences as shown above can all be nested in further complex queries and treated as subqueries (see <%= embedded_link_to 'class operators', 'ql', 'poliqarp-plus#class-operators' %> on how to later access these subqueries directly).</p>
   <p>Positional operators compare two matches of subqueries and will match, in case a certain condition regarding the position of both is true.</p>
   <p>The <code>contains()</code> operation will match, when a second subquery matches inside the span of a first subquery.</p>
 
diff --git a/templates/doc/ql/regexp.html.ep b/templates/doc/ql/regexp.html.ep
index 095d622..f1a5995 100644
--- a/templates/doc/ql/regexp.html.ep
+++ b/templates/doc/ql/regexp.html.ep
@@ -1,6 +1,6 @@
 % layout 'main', title => 'KorAP: Regular Expressions';
 
-<h2 id="tutorial-top">Regular Expressions</h2>
+%= page_title
 
 <p>Regular expressions are patterns describing a set of strings.</p>
 <p>In the KorAP backend a wide range of operators is supported, but only the following are guaranteed to be stable throughout the system:</p>