<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Netz - Rettung - Recht (Artikel mit Tag markdown)</title>
    <link>https://netz-rettung-recht.de/</link>
    <description>Netzleben, Rettungs- und Rechtswesen</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 2.5.0 - http://www.s9y.org/</generator>
    <pubDate>Mon, 31 Jul 2017 05:31:06 GMT</pubDate>

    <image>
    <url>https://netz-rettung-recht.de/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Netz - Rettung - Recht - Netzleben, Rettungs- und Rechtswesen</title>
    <link>https://netz-rettung-recht.de/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Markup mit HAML</title>
    <link>https://netz-rettung-recht.de/archives/1990-Markup-mit-HAML.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1990-Markup-mit-HAML.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1990</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1990</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Websites bestehen - hoffentlich - in der Regel aus (wenigen) Templates, die dann mit (vielen verschiedenen) Inhalten gefüllt werden. So arbeiten Blogs und CMS, so arbeitet auch ein &lt;em&gt;static site generator&lt;/em&gt;. Die Templates können dabei HTML-Dateien sein - müssen es aber nicht, wie ich schon anno 2015&amp;#160;&lt;a href=&quot;https://netz-rettung-recht.de/archives/1821-Templates-und-Template-Engines.html&quot; title=&quot;&quot;&gt;beschrieb&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Bei der Arbeit mit meinen Webseiten habe ich mit HTML-Templates angefangen, die ich dann in der Regel mit &lt;i&gt;Markdown&lt;/i&gt; gefüllt habe - oder, um in der Diktion von &lt;i&gt;nanoc&lt;/i&gt;, dem von mir verwendeten &lt;em&gt;static site generator&lt;/em&gt;, zu bleiben: die Layouts in &lt;code&gt;layouts/&lt;/code&gt; waren HTML-Dateien, die Inhalte in &lt;code&gt;content/&lt;/code&gt; in der Regel &lt;i&gt;Markdown&lt;/i&gt;, beides (soweit erforderlich) kombiniert mit &lt;em&gt;embedded ruby&lt;/em&gt; (&lt;em&gt;ERB&lt;/em&gt;). Beim Compilieren durchliefen die Layouts dementsprechend einen &lt;em&gt;ERB&lt;/em&gt;-Filter, die Inhalte zwei Filter (&lt;i&gt;Markdown&lt;/i&gt; und &lt;em&gt;ERB&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Direkt mit HTML macht die Arbeit aber - gerade bei ein wenig komplexeren Gestaltungen - auf die Dauer nur wenig Spaß: ständig muss man Tags öffnen und schließen (gut, dabei unterstützen Editoren), und die Übersicht leidet. Daher habe ich mich nach kurzer Zeit entschieden, statt auf HTML auf &lt;a href=&quot;http://haml.info/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;i&gt;HAML&lt;/i&gt;&lt;/a&gt; zu setzen, eine Template-Sprache, die von HTML abstrahiert.&lt;/p&gt;

&lt;p&gt;Ein typisches Seitengerüst wie&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&#039;de&#039;&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta charset=&#039;utf-8&#039;&amp;gt;
    &amp;lt;meta content=&#039;IE=edge&#039; http-equiv=&#039;X-UA-Compatible&#039;&amp;gt;
    &amp;lt;meta content=&#039;width=device-width, initial-scale=1&#039; name=&#039;viewport&#039;&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;%= @item[:title] %&amp;gt;&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;header&amp;gt;
      &amp;lt;div class=&#039;header-container&#039;&amp;gt;
        &amp;lt;div class=&#039;row&#039;&amp;gt;
           [...]
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/header&amp;gt;
    &amp;lt;div class=&#039;main&#039;&amp;gt;
      &amp;lt;h1&amp;gt;Überschrift&amp;lt;/h1&amp;gt;
      &amp;lt;p&amp;gt;
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
        diam nonumy eirmod tempor invidunt ut labore et dolore magna
        aliquyam erat, sed diam voluptua. At vero eos et accusam et
        justo duo dolores et ea rebum. Stet clita kasd gubergren, no
        sea takimata sanctus est. 
      &amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;footer class=&#039;footer&#039;&amp;gt;
      [...]
    &amp;lt;/footer&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;sieht in &lt;i&gt;HAML&lt;/i&gt; so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;!!!
%html{:lang =&amp;gt; &quot;de&quot;}
  %head
    %meta{:charset =&amp;gt; &quot;utf-8&quot;}
    %meta{:content =&amp;gt; &quot;IE=edge&quot;, &quot;http-equiv&quot; =&amp;gt; &quot;X-UA-Compatible&quot;}
    %meta{:content =&amp;gt; &quot;width=device-width, initial-scale=1&quot;, :name =&amp;gt; &quot;viewport&quot;}
    %title #{@item[:title]}
  %body
    %header
      .header-container
        .row
          [...]
    .main
      %h1 Überschrift
      %p
        Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed
        diam nonumy eirmod tempor invidunt ut labore et dolore magna
        aliquyam erat, sed diam voluptua. At vero eos et accusam et
        justo duo dolores et ea rebum. Stet clita kasd gubergren, no
        sea takimata sanctus est. 
    %footer
      [...]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das ist kürzer, klarer strukturiert - und die logische Struktur wird unmittelbar erkennbar. Außerdem wird das Ende eines Elements nicht durch ein schließendes Tag, sondern das Zeilenende (beziehungsweise das Ende einer Einrückungsebene) gekennzeichnet. &lt;i&gt;HAML&lt;/i&gt; schließt Tags im generierten HTML daher selbständig. Nie mehr vergessene Tags, die sich öffnen, aber nicht wieder schließen! Fehler kann man im Prinzip nur noch beim Einrücken machen - aber fehlerhafte Einrückungen führen zu einem Fehler beim Compilieren und werden daher sofort erkannt. Zudem erhält das aus dem Template generierte HTML wunderbare Einrückungen, die es ebenfalls gut lesbar machen.&lt;/p&gt;

&lt;p&gt;Für Templates ist &lt;i&gt;HAML&lt;/i&gt; demnach hervorragend geeignet - für Inhalte allerdings &lt;a href=&quot;http://chriseppstein.github.io/blog/2010/02/08/haml-sucks-for-content/&quot; title=&quot;Haml Sucks for Content&quot;&gt;nicht so sehr&lt;/a&gt;. Die große Stärke - die klaren Einrückungen - wird bei Texten, die immer wieder innerhalb von Blöcken Textauszeichnungen enthalten, zu einer großen Schwäche.&lt;/p&gt;

&lt;p&gt;Man denke an folgendes Beispiel:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;p&amp;gt;
  Lorem ipsum dolor sit amet, consetetur &amp;lt;strong&amp;gt;sadipscing&amp;lt;/strong&amp;gt;
  elitr, sed diam nonumy eirmod tempor invidunt ut labore et
  &amp;lt;em&amp;gt;dolore magna&amp;lt;/em&amp;gt; aliquyam erat, sed diam voluptua. At
  &amp;lt;a href=&quot;https://netz-rettung-recht.de/vero/&quot;&amp;gt;&amp;lt;strong&amp;gt;vero&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt; eos et accusam et justo duo
  dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus
  est. 
&amp;lt;/p&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das sieht in &lt;i&gt;HAML&lt;/i&gt; dann so aus:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;%p
  Lorem ipsum dolor sit amet, consetetur
  %strong sadipscing
  elitr, sed diam nonumy eirmod tempor invidunt ut labore et
  %em dolore magna
  aliquyam erat, sed diam voluptua. At
  %a{:href =&amp;gt; &quot;/vero/&quot;}
    %strong vero
  eos et accusam et justo duo
  dolores et ea rebum. Stet clita kasd gubergren, no sea takimata
  sanctus est.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Das ist &amp;#8230; weniger schön, und beim Schreiben nicht mehr angenehm, sondern schnell die Hölle.&lt;/p&gt;

&lt;p&gt;Es fragt sich also, was man am besten tut, wenn &lt;i&gt;Markdown&lt;/i&gt; allein für Inhalte nicht genügt, weil es bspw. keine Elemente wie &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; oder &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; kennt und auch Tabellen nicht ohne weiteres abgebildet werden können. Man könnte natürlich wieder auf HTML zurückgreifen, das sich bekanntlich mit &lt;i&gt;Markdown&lt;/i&gt; mischen lässt.&lt;/p&gt;

&lt;p&gt;Oder man nutzt ein weiteres Feature von &lt;i&gt;HAML&lt;/i&gt;: es unterstützt nämlich Filter, d.h. die Verwendung anderer Markupsprachen innerhalb eines Templates. So kann man die Verwendung von &lt;i&gt;HAML&lt;/i&gt; auf die Templates und Strukturen beschränken und die Inhalte - bspw. - in &lt;i&gt;Markdown&lt;/i&gt; beisteuern:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  %body
    %header
      .header-container
        .row
          [...]
    .main
      %h1 Überschrift
      :markdown
        Lorem ipsum dolor sit amet, consetetur **sadipscing** elitr,
        sed diam nonumy eirmod tempor invidunt ut labore et *dolore
        magna* aliquyam erat, sed diam voluptua. At [**vero**](/vero/)
        eos et accusam et justo duo dolores et ea rebum. Stet clita
        kasd gubergren, no sea takimata sanctus est.
    %footer
      [...]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Best of both worlds!&lt;/p&gt;

&lt;p&gt;Außerdem unterstützt &lt;i&gt;HAML&lt;/i&gt; &lt;em&gt;embedded ruby&lt;/em&gt; - statt HTML-Templates und &lt;i&gt;Markdown&lt;/i&gt;-Inhalten bleiben also nur noch &lt;code&gt;.haml&lt;/code&gt;-Dateien, die einen &lt;i&gt;HAML&lt;/i&gt;-Filter durchlaufen. Fertig - &lt;i&gt;Markdown&lt;/i&gt; und &lt;em&gt;ERB&lt;/em&gt; gibt es quasi gratis dazu. (Und &lt;i&gt;Textile&lt;/i&gt;, LESS, SASS und vieles andere, wenn man das möchte, auch.)&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/151573aa979b477cb6673642efd6dcaf&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Mon, 08 May 2017 07:15:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1990-guid.html</guid>
    <category>haml</category>
<category>markdown</category>
<category>webdesign</category>

</item>
<item>
    <title>Serendipity und das Markdown-Plugin</title>
    <link>https://netz-rettung-recht.de/archives/1985-Serendipity-und-das-Markdown-Plugin.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1985-Serendipity-und-das-Markdown-Plugin.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1985</wfw:comment>

    <slash:comments>13</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1985</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Bereits seit dem &lt;a href=&quot;https://netz-rettung-recht.de/archives/1703-Netz-Rettung-Recht-Relaunch-des-Blogs.html&quot; title=&quot;&quot;&gt;Relaunch meines Blogs&lt;/a&gt; anno 2014 nutze ich - wie schon &lt;a href=&quot;https://netz-rettung-recht.de/archives/1725-Blogs-und-Editoren.html&quot; title=&quot;&quot;&gt;berichtet&lt;/a&gt; - &lt;em&gt;Markdown&lt;/em&gt; zur Eingabe meiner Blogbeiträge. Ich entwerfe sie in der Regel in einem externen Editor (&lt;a href=&quot;https://netz-rettung-recht.de/archives/1746-MarkdownPad.html&quot; title=&quot;&quot;&gt;MarkdownPad&lt;/a&gt; auf meinen Rechnern oder online mit &lt;a href=&quot;https://draftin.com/&quot; title=&quot;&quot;&gt;Draft&lt;/a&gt;, wenn ich unterwegs bin) und kopiere sie dann in das Backend von &lt;em&gt;Serendipity&lt;/em&gt;, getrennt in &amp;#8220;Eintrag&amp;#8221; und &amp;#8220;erweiterter Eintrag&amp;#8221;. Dabei nutze ich seit einigen Monaten &amp;#8220;Eintrag&amp;#8221; nur noch als Teaser, mit der Folge, dass die Beiträge auf der Startseite und bei Suchergebnissen auch nur noch &amp;#8220;angeteasert&amp;#8221; werden; bringt mehr Übersicht und eine handlichere Startseite, erfordert andererseits aber für jeden Beitrag einen weiteren Klick, um ihn zu lesen, ermöglicht es also nicht ohne weiteres, sich &amp;#8220;an einem Stück&amp;#8221; durch das Blogarchiv zu lesen.&lt;/p&gt;

&lt;p&gt;Sei dem, wie dem sei - mir geht es heute um das Markdown-Plugin für &lt;em&gt;Serendipity&lt;/em&gt; namens &lt;code&gt;serendipity_event_markdown&lt;/code&gt;. Intern verwendet das Plugin &lt;a href=&quot;https://michelf.ca/projects/php-markdown/&quot; title=&quot;PHP Markdown&quot;&gt;PHP Markdown&lt;/a&gt; von &lt;em&gt;Michel Fortin&lt;/em&gt; und bietet (aus mir nicht ganz klaren, wohl vor allem historischen Gründen) zwei Varianten (oder, wie es in der Konfiguration heißt: Versionen) des Markdown-Parsers an: einmal ein &amp;#8220;klassisches&amp;#8221; Plugin &amp;#8220;für Wordpress, Smarty, etc.&amp;#8221;, das aber durch den Autor seit Februar 2013 nicht mehr unterstützt wird, und die &lt;em&gt;PHP Markdown Lib&lt;/em&gt;, die immerhin 2015 zuletzt released wurde. Auch werden zwei &amp;#8220;Geschmacksrichtungen&amp;#8221; unterstützt: das originale Markdown von &lt;a href=&quot;https://daringfireball.net/projects/markdown/&quot; title=&quot;Daring Fireball: Markdown&quot;&gt;&lt;em&gt;John Gruber&lt;/em&gt;&lt;/a&gt; und eine erweiterte Version, &lt;a href=&quot;https://michelf.ca/projects/php-markdown/extra/&quot; title=&quot;PHP Markdown Extra&quot;&gt;PHP Markdown Extra&lt;/a&gt;, von &lt;em&gt;Michael Fortin&lt;/em&gt; selbst, die - ähnlich wie &lt;em&gt;MultiMarkdown&lt;/em&gt; oder &lt;em&gt;GitHub Flavored Markdown&lt;/em&gt; - einige Erweiterungen unterstützt, namentlich Tabellen, Definitionslisten, HTML-IDs und -Klassen und Fußnoten.&lt;/p&gt;

&lt;p&gt;Ich habe bisher immer die &lt;em&gt;PHP Markdown Lib&lt;/em&gt; verwendet, mich aber darüber gewundert, dass - trotz Aktivierung von &lt;em&gt;Markdown Extra&lt;/em&gt; in der Konfiguration - die erweiterten Funktionen nicht richtig umgesetzt wurden. Im Nachgang zum &lt;a href=&quot;https://netz-rettung-recht.de/archives/1980-s9ycamp2017.html&quot; title=&quot;&quot;&gt;Serendipity-Camp 2017&lt;/a&gt; hatte ich mir vergangene Woche dann einmal den entsprechenden Code des Plugins näher angesehen und den Grund für das Problem gefunden: das &amp;#8220;klassische&amp;#8221; Plugin stellt, je nach eingebundener Markdown-Geschmacksrichtung, über dieselben Funktionsaufrufe &lt;em&gt;Markdown&lt;/em&gt; und &lt;em&gt;Markdown Extra&lt;/em&gt; bereit, je nachdem. Die &lt;em&gt;PHP Markdown Lib&lt;/em&gt; hingegen bietet zwei verschiedene Funktionsaufrufe; es muss also nicht nur die richtige Library eingebunden werden, es muss zusätzlich auch die Markdown-Extra-Funktion (und nicht die Markdown-Funktion) aufgerufen werden, damit die zusätzlichen Möglichkeiten von &lt;em&gt;Markdown Extra&lt;/em&gt; zur Verfügung stehen.&lt;/p&gt;

&lt;p&gt;Das habe ich dann im Code entsprechend umgesetzt und zugleich die derzeit aktuellste Version der &lt;em&gt;PHP Markdown Lib&lt;/em&gt; in das Plugin eingebunden. Jetzt lassen sich endlich mit einfach Mitteln &amp;#8220;Sprungmarken&amp;#8221; im Text setzen und Fußnoten verwenden (und Tabellen usw. natürlich auch)!&lt;/p&gt;

&lt;p&gt;Die Verwendung von Fußnoten zieht noch zwei weitere Probleme nach sich, die beide darin begründet liegen, dass die Fußnote im Text mit einem Link zum Fußnotentext hinterlegt wird und der Fußnotentext - am Ende des Beitrags eingefügt - dann einen Link zurück zur Fußnoten enthält. Eines der Probleme entsteht, wenn (bspw. auf der Startseite oder in einem Suchergebnis) mehrere Beiträge angezeigt werden, die Fußnoten enthalten. Dann gibt es nämlich mehrere identische Fußnoten (bspw. &amp;#8220;1&amp;#8221;) und damit auch mehrere identische Sprungmarken (IDs), und ein Klick auf die Fußnoten führt in der Regel zum falschen Fußnotentext, nämlich immer zu dem der ersten Fußnote &amp;#8220;1&amp;#8221; auf der Seite. Dieses Problem lässt sich lösen, indem die Fußnotenlinks jeweils um die interne Nummer des Beitrags ergänzt werden, zu dem sie gehören. Für die &lt;em&gt;PHP Markdown Lib&lt;/em&gt; habe ich das implementiert; das &amp;#8220;klassische&amp;#8221; Plugin ermöglicht eine solche Funktionalität hingegen nicht (und müsste ggf. gepatcht werden, wenn man es nicht schlicht aus dem Code entfernen will, was m.E. näher liegt).&lt;/p&gt;

&lt;p&gt;Das andere Problem ergibt sich aus der Designentscheidung, in &lt;em&gt;Serendipity&lt;/em&gt; den &amp;#8220;Eintrag&amp;#8221; und den &amp;#8220;erweiterten Eintrag&amp;#8221; als getrennte Textfelder zu realisieren. Das führt dazu, dass auch für Plugins &amp;#8220;Eintrag&amp;#8221; und &amp;#8220;erweiterter Eintrag&amp;#8221; getrennte Textelemente sind, und dementsprechend Fußnoten im &amp;#8220;Eintrag&amp;#8221; an dessen Ende - also vor dem &amp;#8220;erweiterten Eintrag&amp;#8221; eingefügt werden. Andererseits hat das den Vorteil, dass man nicht das Problem von &lt;em&gt;Wordpress&lt;/em&gt; und anderen Blogsystemen hat, die &amp;#8220;Eintrag&amp;#8221; und &amp;#8220;erweiterten Eintrag&amp;#8221; einfach durch eine spezielle Markierung wie &lt;code&gt;&amp;lt;!-- more --&amp;gt;&lt;/code&gt; voneinander trennen; dann kann es nämlich passieren, dass man die Fußnote sieht, aber den Fußnotentext nicht anspringen kann, da dieser hinter &lt;code&gt;&amp;lt;!-- more --&amp;gt;&lt;/code&gt; steht und daher nicht angezeigt wird.&lt;/p&gt;

&lt;p&gt;Insgesamt freue ich mich aber, dass &lt;em&gt;Markdown Extra&lt;/em&gt; nun auch in &lt;em&gt;Serendipity&lt;/em&gt; zuverlässig zur Verfügung steht.&lt;sup id=&quot;fnref:1985_1&quot;&gt;&lt;a href=&quot;#fn:1985_1&quot; class=&quot;footnote-ref&quot; role=&quot;doc-noteref&quot; title=&quot;&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; (Wie soll man auch bloß Texte verfassen können, ohne sie mit Dutzenden, ja Hunderten von Fußnoten zu schmücken?! Einem Juristen muss das schon von Berufs wegen völlig unverständlich sein.)&lt;/p&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
&lt;hr /&gt;
&lt;ol&gt;

&lt;li id=&quot;fn:1985_1&quot; role=&quot;doc-endnote&quot;&gt;
&lt;p&gt;Jedenfalls, sobald der entsprechende &lt;a href=&quot;https://github.com/s9y/additional_plugins/pull/54&quot; title=&quot;Update PHP Markdown lib and get MarkdownExtra working. by th-h · Pull Request #54 · s9y/additional_plugins · GitHub&quot;&gt;Pull Request&lt;/a&gt; akzeptiert wird. :-)&amp;#160;&lt;a href=&quot;#fnref:1985_1&quot; class=&quot;footnote-backref&quot; role=&quot;doc-backlink&quot; title=&quot;&quot;&gt;&amp;#8617;&amp;#xFE0E;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/52db66c1ba004207a57bd58cb97be367&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 19 Apr 2017 07:55:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1985-guid.html</guid>
    <category>markdown</category>
<category>s9y</category>

</item>
<item>
    <title> Markup-Formate konvertieren</title>
    <link>https://netz-rettung-recht.de/archives/1823-Markup-Formate-konvertieren.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1823-Markup-Formate-konvertieren.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1823</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1823</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;In meiner Reihe &amp;#8220;&lt;a href=&quot;https://netz-rettung-recht.de/archives/1810-Webdesign-anno-2015.html&quot; title=&quot;&quot;&gt;Webdesign anno 2015&lt;/a&gt;&amp;#8221; habe ich versucht, einen Überblick über Techniken und Tools zu geben, die letztlich jedermann die Gestaltung moderner, gut aussehender Webseiten ermöglichen. Das hatte natürlich einen konkreten Anlass: ich bin dabei, allmählich und sehr langsam - im Rahmen der mir bleibenden zeitlichen Möglichkeiten - verschiedene ältere Webpräsenzen zu überarbeiten und inhaltlich wie optisch und technisch auf den heutigen Stand zu bringen.&lt;/p&gt;

&lt;p&gt;Eine große Erleichterung ist dabei die automatische Konvertierung von &amp;#8220;klassischem&amp;#8221; &lt;em&gt;HTML&lt;/em&gt; in &lt;em&gt;HAML&lt;/em&gt; und/oder &lt;em&gt;Markdown&lt;/em&gt;. Ein machtvolles Werkzeug für solche Konvertierungsaufgaben ist &lt;a href=&quot;http://johnmacfarlane.net/pandoc/&quot; title=&quot;302 Found&quot;&gt;&lt;strong&gt;pandoc&lt;/strong&gt;&lt;/a&gt;; es geht aber oft auch eine Nummer kleiner, ganz simpel per &lt;em&gt;cut &amp;amp; paste&lt;/em&gt; online:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://htmltohaml.com/&quot; title=&quot;htmltohaml - htmltohaml&quot;&gt;Convert HTML to HAML&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;HTML&lt;/em&gt; zu &lt;em&gt;Markdown&lt;/em&gt; konvertieren:&lt;br /&gt;
&lt;a href=&quot;https://domchristie.github.io/to-markdown/&quot; title=&quot;Site not found &amp;middot; GitHub Pages&quot;&gt;to-markdown&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wenn nur eine Handvoll Seiten - oder Teile einer Seite - zu konvertieren sind, reicht (mir) das vollständig aus.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Mon, 16 Feb 2015 05:55:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1823-guid.html</guid>
    <category>haml</category>
<category>markdown</category>
<category>webdesign</category>

</item>
<item>
    <title>Generatoren für statische Websites</title>
    <link>https://netz-rettung-recht.de/archives/1755-Generatoren-fuer-statische-Websites.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1755-Generatoren-fuer-statische-Websites.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1755</wfw:comment>

    <slash:comments>10</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1755</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ganz früher bestand eine Homepage, bestanden Webseiten allgemein im wesentlichen aus HTML-Dokumenten. Auf dem Weg zum Web 2.0 kamen zunächst CGI-Scripts für bestimmte Anwendungen auf; insbesondere aber mit der Verbreitung von PHP wurden Webseiten deutlich interaktiver. Blogs, Gästebücher, Kontaktformulare wären anders auch kaum vorstellbar. Nicht immer aber ist Interaktivität wirklich erforderlich. Manche eigentlich statische Seite wird nur deshalb dynamisch via PHP - oder auf vergleichbare Weise - erzeugt, weil es so bequem ist, die Erstellung einer Navigation und der Grundstruktur der Seiten zu automatisieren und Änderungen nur an einer Stelle vornehmen zu müssen. Das kann durch Installation eines CMS - oder eines dafür &amp;#8220;zweckentfremdeten&amp;#8221; Blogs oder Wikis - erfolgen; man kann auch wie ich schlicht die bisherigen HTML-Dokumente durch PHP-Scripts ersetzen, die im wesentlichen nichts anderes tun als vorgefertigte Funktionen für die Generierung des Seitengerüsts und der Navigation aufzurufen und ansonsten praktisch nur aus HTML bestehen. Meistens wäre es aber eigentlich gar nicht erforderlich, die Webseiten für jeden Aufruf neu zu generieren, weil sie sich nicht oder doch nur selten ändern. Ausreichend wäre es vielmehr, die Erstellung der an und für sich statischen Seiten aus Vorlagen - Templates - zu automatisieren und dabei ggf. auch automatisch die nötige Navigation zu erstellen.&lt;/p&gt;

&lt;p&gt;Das leisten - in verschiedensten Variationen - &lt;em&gt;static site generators&lt;/em&gt;, also Scripts oder Programmpakete, die man mit Schablonen (Templates) und Inhalten füttert und die daraus - ergänzt um eigene Programmschnipsel - die fertige Website erstellen. Vorteilhaft daran ist, dass die Webpräsenz im wesentlichen aus statischen HTML-Seiten bestehen kann, nur dort durch Scripts ergänzt, wo das auch tatsächlich für Interaktivität notwendig ist. Auf dem Webserver wird die Last deutlich verringert, weil nicht für jeden Seitenaufruf ein PHP-Interpreter gestartet werden muss; auch bestehen weniger Angriffsmöglichkeiten, weil kein ausführbarer Code mehr &amp;#8220;live&amp;#8221; auf dem Webserver laufen muss. Eine gewisse Interaktivität lässt sich auch durch tägliche, halbtägliche oder sogar stündliche Neuerzeugung der Webseiten erreichen; das macht für ein Forum oder auch ein Blog mit Kommentaren sicher wenig Sinn, aber wenn &amp;#8220;nur&amp;#8221; ein RSS-Feed oder die aktuellsten Tweets eingeblendet werden sollen, reicht das oft aus. Zudem lassen sich bspw. Kommentare auch durch externe Systeme wie &lt;em&gt;&lt;a href=&quot;https://disqus.com/&quot; title=&quot;&quot;&gt;Disqus&lt;/a&gt;&lt;/em&gt; vermittels &lt;em&gt;Javascript&lt;/em&gt; einbinden.&lt;/p&gt;

&lt;p&gt;Das Angebot an solchen Generatoren ist - wie bei Blogs, Wikis, CMS, Bugtrackern usw. - einigermaßen unüberschaubar geworden, wie man einer beliebigen &lt;a href=&quot;http://staticsitegenerators.net/&quot; title=&quot;301 Moved Permanently&quot;&gt;Liste von &lt;em&gt;Static Site Generators&lt;/em&gt;&lt;/a&gt; entnehmen kann. Gute Erfahrungen habe ich mit &lt;strong&gt;&lt;a href=&quot;http://nanoc.ws/&quot; title=&quot;&quot;&gt;nanoc&lt;/a&gt;&lt;/strong&gt; gemacht, mit dem auch der &lt;a href=&quot;http://www.cccs.de/&quot; title=&quot;&quot;&gt;CCCS&lt;/a&gt; seine Website generiert; &lt;strong&gt;&lt;a href=&quot;http://jekyllrb.com/&quot; title=&quot;Jekyll • Simple, blog-aware, static sites | Transform your plain text into static websites and blogs&quot;&gt;Jekyll&lt;/a&gt;&lt;/strong&gt; wird bspw. bei &lt;em&gt;GitHub&lt;/em&gt; genutzt, um dort Webseiten - direkt aus Git heraus - zu generieren. Der einzige Nachteil bei beiden ist ggf., dass sie in &lt;em&gt;Ruby&lt;/em&gt; geschrieben sind und daher eigene Scripts und Erweiterungen sinnvollerweise ebenfalls in dieser Sprache zu halten sind. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Das Grundprinzip ist bei allen Generatoren immer dasselbe: Es wird ein Grundgerüst für die Seiten in Form eines oder mehrerer Templates aufgebaut, gerne in HTML 5 und &amp;#8220;responsive&amp;#8221;, die dabei Platzhalter oder sogar entsprechend fortgeschrittenere Funktionen enthalten. Das Design erfolgt über CSS, wobei auch CSS-Präprozessoren wie LESS oder SASS zur Anwendung kommen können. Die einzelnen Webseiten schließlich können als HTML-Dokumente, aber besser noch in einfacheren Auszeichnungssprachen wie &lt;em&gt;MarkDown&lt;/em&gt;, &lt;em&gt;Textile&lt;/em&gt;, &lt;em&gt;Asciidoc&lt;/em&gt; usw. angelegt werden. Dann gibt es in der Regel noch eine Konfigurationsdatei, aus der sich ergibt, wie die einzelnen Bausteine - Templates, CSS, Seiteninhalte - &amp;#8220;bearbeitet&amp;#8221; und zusammengefügt werden sollen. Aus diesen Anweisungen und Bausteinen generiert der &lt;em&gt;Site Generator&lt;/em&gt; dann statische HTML-Dokumente (oder auch PHP-Scripts, oder Dokumente, die &lt;em&gt;Javascript&lt;/em&gt; enthalten, oder &amp;#8230;). In der Regel sind dabei eine Vielzahl von Filtern zur Interpretation von &lt;em&gt;Markdown&lt;/em&gt;, LESS und Co. bereits enthalten; die eigenen Seiten und Designs lassen sich daher quasi aus einem Baukasten zusammensetzen, zumal als Basis für das Grundgerüst der Seiten auf Systeme wie &lt;em&gt;&lt;a href=&quot;http://getbootstrap.com/&quot; title=&quot;&quot;&gt;Bootstrap&lt;/a&gt;&lt;/em&gt; oder &lt;em&gt;&lt;a href=&quot;http://html5boilerplate.com/&quot; title=&quot;&quot;&gt;HTML5 Boilerplate&lt;/a&gt;&lt;/em&gt; zurückgegriffen werden kann, die eigene Schriftarten, Icons und/oder &lt;em&gt;Javascript&lt;/em&gt; direkt mitbringen oder zumindest entsprechende Anregungen enthalten. Mit verhältnismäßig wenig Aufwand lassen sich so die eigenen Inhalte hübsch, technisch modern und auf den verschiedensten Geräten vom Smartphone über das Tablet bis zum Laptop oder großen Desktopbildschirm ansehnlich darstellen.&lt;/p&gt;

&lt;p&gt;Wenn man möchte, kann man auch die Quelldokumente in einem Versionsverwaltungssystem wie Git verwalten und bei jeder Änderung daraus automatisch eine neue Version der Webseiten erzeugen. Auf diese Weise ist ein Blogbeitrag, aber auch eine neue Seite der eigenen Homepage schnell in &lt;em&gt;Markdown&lt;/em&gt; geschrieben, mit einem Vorspann - mit den notwendigen Informationen wie Titel, Autor, Erstellungsdatum, Typ pp., bspw. in YAML - versehen und im Git-Repository gespeichert; daraus erzeugt dann der Generator automatisch die neue Seite und passt - gleichfalls automatisch - alle davon betroffenen anderen Seiten (Inhaltsverzeichnis/Sitemap, Navigation, RSS-Feed, &amp;#8230;) an und erzeugt sie, soweit nötig, neu.&lt;/p&gt;

&lt;p&gt;Ich finde das sehr praktisch für alle Anwendungsfälle, die keine &amp;#8220;Webapplikation&amp;#8221; darstellen, sondern im wesentlichen statische Inhalte enthalten, die sich nicht minütlich oder stündlich, sondern eher täglich, wöchentlich oder auch nur alle Jubeljahre einmal ändern. Durchaus lässt sich aber auch ein Blog so betreiben, wenn man denn die interaktiven Elemente wie Kommentare pp. &amp;#8220;outsourced&amp;#8221;, bspw. an Anbieter wie &lt;em&gt;Disqus&lt;/em&gt;. Mit ausreichend Zeit - ja, genau da liegt der Knackpunkt &amp;#8230; &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt; - plane ich, zumindest einige der von mir betreuten Webseiten in der Zukunft entsprechend umzustellen.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/3013ddca5b7e43269611ec8172fc45ea&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Fri, 22 Aug 2014 08:30:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1755-guid.html</guid>
    <category>jekyll</category>
<category>markdown</category>
<category>nanoc</category>
<category>webdesign</category>

</item>
<item>
    <title>MarkdownPad</title>
    <link>https://netz-rettung-recht.de/archives/1746-MarkdownPad.html</link>
            <category>Bits'n'Bytes</category>
            <category>Rezensionen</category>
    
    <comments>https://netz-rettung-recht.de/archives/1746-MarkdownPad.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1746</wfw:comment>

    <slash:comments>5</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1746</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Über &lt;em&gt;Markdown&lt;/em&gt; habe ich in diesem Blog schon mehrfach &lt;a href=&quot;https://netz-rettung-recht.de/plugin/tag/markdown&quot; title=&quot;&quot;&gt;geschrieben&lt;/a&gt;. Ich nutze diese simple Auszeichnungssprache nicht nur für meine Blogbeiträge, sondern auch für FAQs, die sowohl als einfacher Text - bspw. für Postings im Usenet - als auch als HTML - bspw. im Web - veröffentlicht werden sollen, als Quelle für daraus generierte Webseiten oder bei Anbietern, die gleichfalls auf diese Auszeichnungssprache setzen, wie bspw. &lt;em&gt;Github&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Bislang habe ich &lt;em&gt;Markdown&lt;/em&gt; in meinem Standardeditor &lt;em&gt;Sublime Edit 2&lt;/em&gt; verfasst (oder ggf. in &lt;em&gt;Notetab Pro&lt;/em&gt;), schließlich handelt es sich letztlich um einfachen Klartext, und den Text dann veröffentlicht und notfalls einmal nachbearbeitet. Wenn ich einmal wirklich eine Vorschau sehen wollte, habe ich einen der im Web vorhandenen Online-Konverter wie &lt;em&gt;&lt;a href=&quot;http://markdownlivepreview.com/&quot; title=&quot;&quot;&gt;Markdown Live Preview&lt;/a&gt;&lt;/em&gt; benutzt, bei dem man links in ein Fenster seinen Text einfügen kann und der rechts daneben dann live die Umsetzung in HTML darstellt. Wenn man allerdings mit einer langsamen Internetanbindung irgendwo an der Küste sitzt - oder gar offline arbeiten möchte -, ist das kein optimaler Workflow. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Daher bin ich jetzt - nach kurzer Suche über Google - auf den Markdown-Editor &lt;strong&gt;&lt;a href=&quot;http://markdownpad.com/&quot; title=&quot;MarkdownPad - The Markdown Editor for Windows&quot;&gt;MarkdownPad 2&lt;/a&gt;&lt;/strong&gt; gestoßen, der einem im Prinzip das, was &lt;em&gt;Markdown Live Preview&lt;/em&gt; online kann, offline bietet: links der Text in &lt;em&gt;Markdown&lt;/em&gt;, rechts daneben das gerenderte HTML. Außerdem gibt es die bereits sattsam aus Web-Editoren wie in Wikis oder Blogs bekannten Buttons, mit denen man das entsprechende Markup generieren kann - eigentlich nicht nötig, weil das schöne an &lt;em&gt;Markdown&lt;/em&gt; ja gerade ist, dass man es ganz natürlich tippen kann, aber mal ganz praktisch, wenn man nach einer Schaffenspause mal wieder ein spezielleres Markup vergessen hat und sich den Ausflug zu einer Syntaxübersicht sparen möchte. Außerdem kann man auf einfache Weise das generierte HTML direkt exportieren, wenn man das möchte.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MarkdownPad&lt;/strong&gt; ist kostenlos; die 15 Dollar teure &amp;#8220;Professional&amp;#8221;-Version beherrscht u.a. Tabellen in &lt;em&gt;Markdown Extra&lt;/em&gt; und den Export in ein PDF. Ich finde das sehr praktisch und werde dieses Tool zukünftig für meine &lt;em&gt;Markdown&lt;/em&gt;-Texte verwenden.&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/ccb017720833429f92eadb7f71c72cca&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 20 Aug 2014 06:17:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1746-guid.html</guid>
    <category>markdown</category>

</item>
<item>
    <title>Blogs und Editoren</title>
    <link>https://netz-rettung-recht.de/archives/1725-Blogs-und-Editoren.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1725-Blogs-und-Editoren.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1725</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1725</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Wer ein Blog betreibt, kennt vermutlich die Frage danach, welcher Editor für die Einträge am sinnvollsten verwendet werden sollte.&lt;/p&gt;

&lt;p&gt;Meine erste Blogengine, &lt;em&gt;sunlog&lt;/em&gt;, bot meiner Erinnerung nach bloß ein Eingabefeld, in das man entweder HTML eingeben oder darauf setzen konnte, dass der ansonsten nicht weiter bearbeitete Text schon irgendwie ausgegeben werden würde.&lt;/p&gt;

&lt;p&gt;Nach dem Umstieg auf &lt;em&gt;Serendipity&lt;/em&gt; habe ich auch erst einmal den Standard-Editor verwendet, wozu braucht man schließlich WYSIWYG, wenn man HTML beherrscht? Das war auf die Dauer dann aber doch eher anstrengend: um jeden Absatz herum &lt;code&gt;&amp;lt;p&amp;gt;...&amp;lt;/p&amp;gt;&lt;/code&gt; schreiben, Hervorhebungen korrekt mit &lt;code&gt;&amp;lt;strong&amp;gt;...&amp;lt;/strong&amp;gt;&lt;/code&gt; einbauen, Links von Hand setzen &amp;#8230; Das macht keinen wirklichen Spaß. Und der Einbau von Bildern ist von Hand auch eher eine Strafe als ein Vergnügen.&lt;/p&gt;

&lt;p&gt;Also bin ich später auf den WYSIWYG-Editor von &lt;em&gt;Serendipity&lt;/em&gt; gewechselt; ich glaube, ich habe sogar nacheinander verschiedene solche benutzt. So richtig zufrieden war ich damit aber auch nicht; das daraus generierte HTML erschien teilweise suboptimal, zwischendurch hatte das Gerät aufgrund irgendeiner (vermutlich von mir irrtümlich getroffenen) Einstellung die Neigung, alle Texte per &lt;code&gt;&amp;lt;font&amp;gt;&lt;/code&gt;-Tag mit weißem Hintergrund zu hinterlegen und Spielereien dieser Art mehr. Außerdem war es so mit nicht unerheblichem Aufwand verbunden, Einträge in einem Texteditor vorzubereiten und später per &lt;em&gt;copy &amp;amp; paste&lt;/em&gt; ins Blog zu übernehmen, bedurfte es dann doch eines zweiten Schrittes, in dem Formatierungen und Links hinzugefügt wurden, wie auch &lt;a href=&quot;http://blog.l3r.de/archives/27-Markdown-und-die-Nutzung-in-Serendipity.html&quot; title=&quot;301 Moved Permanently&quot;&gt;lx4r&lt;/a&gt; in einem vergleichbaren Blogbeitrag berichtet. Wenn ich stattdessen direkt im Editor schrieb, ereilte mich gerne ein Missgeschick wie &amp;#8220;langen Blogeintrag geschrieben, abgeschickt, mittlerweile aber ausgeloggt&amp;#8221; (worauf &lt;em&gt;Serendipity&lt;/em&gt; den Beitrag üblicherweise hungrig verspeist und man ihn neu schreiben darf) oder, noch schlimmer, ich komme an eine Tastenkombination, die eine Browseraktion auslöst und dann den Browser den Text verschlucken lässt. Gut, dagegen hilft &lt;a href=&quot;https://addons.mozilla.org/de/firefox/addon/lazarus-form-recovery/&quot; title=&quot;&quot;&gt;&lt;em&gt;Lazarus&lt;/em&gt;&lt;/a&gt;, aber der wahre Jakob ist das trotzdem nicht, ganz abgesehen davon, dass man eben so nicht sinnvoll offline arbeiten (oder auch nur die Annehmlichkeiten eines guten Texteditors nutzen) kann.&lt;/p&gt;

&lt;p&gt;Mit dem Relaunch des Blogs habe ich auch dafür eine Lösung gefunden: ich verwende den simplen Standardeditor von &lt;em&gt;Serenditpity&lt;/em&gt; zusammen mit dem &lt;em&gt;Markdown&lt;/em&gt;-Plugin. Wieder eine für mich sehr hilfreiche Anwendung von &lt;a href=&quot;https://netz-rettung-recht.de/archives/1723-Markdown-HTML-aus-Text-erzeugen.html&quot; title=&quot;&quot;&gt;&lt;em&gt;Markdown&lt;/em&gt;&lt;/a&gt;. Jetzt kann ich flüssig Texte schreiben, sie ggf. per &lt;em&gt;copy &amp;amp; paste&lt;/em&gt; ins Blog übernehmen und muss mich nie wieder um seltsame Formatierungen kümmern. Passt. Das ist ein Workflow, der Spaß macht.&lt;/p&gt;

&lt;p&gt;(Um zu verhindern, dass ältere Einträge durch das &lt;em&gt;Markdown&lt;/em&gt;-Plugin zerhackt werden, kann man dieses Plugin für die älteren Einträge - jeweils einzeln pro Eintrag - deaktivieren. Jedenfalls dann, wenn man das Plugin &amp;#8220;erweiterte Eigenschaften für Artikel&amp;#8221; &lt;code&gt;[serendipity_event_entryproperties]&lt;/code&gt; installiert hat. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;)&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/0b06fa5772a54aaab8abb5a81c64483d&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Wed, 28 May 2014 02:43:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1725-guid.html</guid>
    <category>markdown</category>
<category>s9y</category>

</item>
<item>
    <title>Markdown: HTML aus Text erzeugen</title>
    <link>https://netz-rettung-recht.de/archives/1723-Markdown-HTML-aus-Text-erzeugen.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1723-Markdown-HTML-aus-Text-erzeugen.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1723</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1723</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Der erste längere (Erläuterungs-)Text, den ich zur Veröffentlichung im Netz verfasst habe, war im September 1998 die &lt;a href=&quot;http://th-h.de/faq/headerfaq.php&quot; title=&quot;302 Found&quot;&gt;Header-FAQ&lt;/a&gt;, deren erster Entwurf am 18.09.1998 in der Newsgroup de.admin.net-abuse.mail &lt;a href=&quot;https://groups.google.com/forum/#!original/de.admin.net-abuse.mail/d2ZVUXwQz-Y/LpBjyuxuB6sJ&quot; title=&quot;Redirecting to Google Groups&quot;&gt;veröffentlicht&lt;/a&gt; wurde und die dann seit dem &lt;a href=&quot;https://groups.google.com/forum/#!original/de.admin.net-abuse.mail/YoHW_rh3DJo/XYO8J_hNTH8J&quot; title=&quot;Redirecting to Google Groups&quot;&gt;15.10.1998&lt;/a&gt; unter dem Titel &amp;#8220;&lt;strong&gt;E-Mail-Header lesen und verstehen&lt;/strong&gt;&amp;#8221; dort über viele Jahre lang monatlich erschien.&lt;/p&gt;

&lt;h3 id=&quot;text-und-html-version&quot;&gt;Text- und HTML-Version&lt;/h3&gt;

&lt;p&gt;Natürlich sollte es zu der monatlich geposteten FAQ auch eine Web-Version geben, die bereits im Oktober entstanden war und deren URL im November 1998 das erste Mal in der FAQ &lt;a href=&quot;https://groups.google.com/forum/#!original/de.admin.net-abuse.mail/DPpa1YLx_Q8/YIAM6XVVMIgJ&quot; title=&quot;Redirecting to Google Groups&quot;&gt;genannt&lt;/a&gt; wurde. Und natürlich sollte diese Version auch mit allem Annehmlichkeiten, die HTML für Optik und Funktion bietet, also namentlich Formatierungen und Verlinkungen, ausgestattet sein. Das bedeutete dann umgekehrt aber auch, dass zwei völlig getrennte Versionen desselben Textes zu pflegen waren; insbesondere bei größeren Änderungen und Ergänzung keine wirklich gute Idee. Es musste also eine andere Lösung her: die eine Fassung sollte aus der anderen Fassung generiert werden, oder ggf. beide Fassungen aus demselben Rohtext.&lt;/p&gt;

&lt;h4 id=&quot;html-dokumente-aus-textdokumenten-erzeugen&quot;&gt;HTML-Dokumente aus Textdokumenten erzeugen&lt;/h4&gt;

&lt;p&gt;Da mir das Usenet als Publikationsmedium (damals) deutlich näher lag, hatte ich zuerst den Gedanken, die Webseite - also das HTML-Dokument - zumindest im wesentlichen aus dem Textdokument der geposteten FAQ zu erzeugen. Bei entsprechenden Recherchen stieß ich dann auch auf das Tool &lt;a href=&quot;http://www.jafsoft.com/asctohtm/&quot; title=&quot;Access Denied&quot;&gt;&lt;em&gt;AscToHTM&lt;/em&gt;&lt;/a&gt;, das genau diesem Zweck diente und sich auch insbesondere an FAQ-Autoren richtete. Eine Zeit lang habe ich damit auch gearbeitet (und das erzeuge HTML-Dokument dann quasi mit Header und Footer versehen, um es optisch und organisatorisch - Navigation! - in meine damalige Webseitenstruktur einzubinden), aber so wirklich überzeugend war das nicht. Es bedurfte einiger Kompromisse im Layout des geposteten Textes, um die HTML-Generierung überzeugend hinzubekommen, und der Aufwand war doch vergleichsweise groß.&lt;/p&gt;

&lt;h4 id=&quot;textdokumente-aus-html-dokumenten-erzeugen&quot;&gt;Textdokumente aus HTML-Dokumenten erzeugen&lt;/h4&gt;

&lt;p&gt;Daher habe ich mich - theoretisch im übrigen völlig richtig - in der Folge davon überzeugen lassen, dass die Vorgehensweise, aus (letztlich) unstrukturiertem Text strukturierten Text (mit Markup) zu erzeugen, bereits gedanklich verfehlt ist und keinen dauerhaften Erfolg haben könne: HTML enthält gegenüber &lt;em&gt;text/plain&lt;/em&gt; zusätzlichen Informationsgehalt, Struktur, Markup eben, und aus der Gestaltung des Rohtextes das Markup zu &amp;#8220;erraten&amp;#8221;, ist keine brauchbare Lösung. Daher bin ich danach dann eben den umgekehrten Weg gegangen und habe beschlossen, dass nunmehr die Webversion der FAQ das &amp;#8220;Master-Dokument&amp;#8221; (oder die Quelle) sein sollte und ich den geposteten Text daraus erzeuge. Information und optische Gestaltung zu kürzen sollte ja vergleichsweise trivial sein. &amp;#8212; Ganz so war es dann erwartungsgemäß doch nicht, denn auch der gepostete &amp;#8220;reine&amp;#8221; Text sollte ja einigermaßen apart formatiert sein, mit dem was, man an &amp;#8220;Formatierungen&amp;#8221; in E-Mail und Usenet so gewohnt ist: Zitate eingeleitet mit &amp;#8220;|&amp;#8221; am Zeilenfang, Hervorhebungen und Betonungen durch &amp;#42;Sternchen&amp;#42; o.ä. und dieser Dinge mehr. Für den Anfang half dazu &lt;a href=&quot;http://www.mbayer.de/html2text/&quot; title=&quot;html2text | mbayer.de&quot;&gt;&lt;em&gt;html2text&lt;/em&gt;&lt;/a&gt;, damals in C++ geschrieben, mittlerweile durch den verstorbenen &lt;a href=&quot;http://de.wikipedia.org/wiki/Aaron_Swartz&quot; title=&quot;&quot;&gt;Aaron Swartz&lt;/a&gt; auch in PYthon &lt;a href=&quot;http://www.aaronsw.com/2002/html2text/&quot; title=&quot;html2text: THE ASCIINATOR (aka html2txt)&quot;&gt;reimplementiert&lt;/a&gt;, aber ganz zufrieden war ich mit dem Output noch nicht.&lt;/p&gt;

&lt;p&gt;Einiges Experimentieren führte dann zu dem folgenden Workflow:&lt;/p&gt;

&lt;p&gt;&lt;div class=&quot;bash geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #c20cb9; font-weight: bold;&quot;&gt;wget&lt;/span&gt; http:&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;//&lt;/span&gt;th-h.de&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;faq&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #007800;&quot;&gt;$1&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-O&lt;/span&gt; output.html&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;html2text &lt;span style=&quot;color: #660033;&quot;&gt;-nobs&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-width&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;70&lt;/span&gt; &lt;span style=&quot;color: #660033;&quot;&gt;-rcfile&lt;/span&gt; html2text.rc output.html &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; output.txt&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;.&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;/&lt;/span&gt;wrap.pl &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;amp;&lt;/span&gt;lt; output.txt &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt; wrapped.txt&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Und &lt;code&gt;wrap.pl&lt;/code&gt;, das (daher der Name) vor allem für den Umbruch auf 70 Zeichen pro Zeile unter Beachtung von (nicht zu umbrechenden Zitaten) zuständig war, sah folgendermaßen aus:&lt;/p&gt;

&lt;p&gt;&lt;div class=&quot;perl geshi&quot; style=&quot;text-align: left&quot;&gt;&lt;ol&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#!/usr/bin/perl&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #009999;&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;use&lt;/span&gt; Text&lt;span style=&quot;color: #339933;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #006600;&quot;&gt;Wrap&lt;/span&gt; &lt;a href=&quot;http://perldoc.perl.org/functions/qw.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;qw&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;amp;amp&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;wrap &lt;span style=&quot;color: #0000ff;&quot;&gt;$columns&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$columns&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;70&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;lt;/&lt;/span&gt;p&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #009999;&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;lt&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;a href=&quot;http://perldoc.perl.org/functions/chomp.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;chomp&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/[-\/]$/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$zeile&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$rest&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/(.+\s)(\S+)$/&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;$zeile\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; JOINLOOP&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;lt&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #0000ff;&quot;&gt;$rest&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;.=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$_&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;last&lt;/span&gt; JOINLOOP &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^$/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$rest&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=~&lt;/span&gt; &lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;s/\n/ /g&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #0000ff;&quot;&gt;$_&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; wrap&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8221;, &amp;amp;#8221;, $rest).&amp;amp;#8221;\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$_&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^[|&amp;gt;:]/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; QUOTELOOP&lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #b1b100;&quot;&gt;lt&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;a href=&quot;http://perldoc.perl.org/functions/chomp.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;chomp&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^$/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;span style=&quot;color: #b1b100;&quot;&gt;last&lt;/span&gt; QUOTELOOP&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;elsif&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009966; font-style: italic;&quot;&gt;/^[|&amp;gt;:]/&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;\n$&amp;lt;em&amp;gt;&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160; &lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;/&lt;/span&gt;em&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&amp;#160;&lt;a href=&quot;http://perldoc.perl.org/functions/print.html&quot; title=&quot;&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;print&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #339933;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;#8220;\n&amp;amp;#8221;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style=&quot;font-weight: normal; vertical-align:top;&quot;&gt;&lt;div style=&quot;font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Das ließ sich jetzt durchaus automatisieren; andererseits gefiel es mir nicht wirklich, dass die Quelle des Textes nun ein HTML-Dokument war und ich erst längere Konversionsprozesse laufen lassen musste, um zu überprüfen, ob auch die (aus meiner Sicht immer noch primäre) Textfassung ordentlich aussah. Und HTML schreiben ist auch deutlich aufwendiger als &amp;#8220;Klartext&amp;#8221;, selbst wenn man sich durch geeignete Editoren beim Einfügen der passenden Tags (und deren Schließen!) unterstützen lässt.&lt;/p&gt;

&lt;h4 id=&quot;die-l-sung-&quot;&gt;Die Lösung?&lt;/h4&gt;

&lt;p&gt;Am Ende habe ich, glaube ich, einfach wieder beide Texte getrennt gepflegt oder, wahrscheinlicher, die FAQ (erst einige Zeit nicht mehr richtig aktualisiert und dann) gar nicht mehr gepostet; sowohl das Spam-Problem (jedenfalls der Wunsch, Spam nachzuverfolgen und zu melden) als auch das Usenet waren dabei, in die Bedeutungslosigkeit abzurutschen.&lt;/p&gt;

&lt;h3 id=&quot;what-would-i-today-do-&quot;&gt;What would I today do?&lt;/h3&gt;

&lt;p&gt;(Ja, das ist kein Englisch. Nein, das ist Absicht. Ja, das spielt auf WWJD an.)&lt;/p&gt;

&lt;p&gt;Inzwischen sind bald 16 Jahre ins Land gegangen, und es gibt damit natürlich ganz andere technische Möglichkeiten, dieses Problem zu lösen. Über manche habe ich zwischendurch nachgedacht, bspw. über &lt;a href=&quot;http://www.docbook.org/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;Docbook&lt;/em&gt;&lt;/a&gt; und die zugehörige Toolchain, wenn ich mich recht erinnere, sogar einmal kurz damit gebastelt, aber mich nie ernsthaft damit beschäftigt. Richtig lange, umfangreiche Texte würde ich heute vermutlich in &lt;a href=&quot;http://www.methods.co.nz/asciidoc/&quot; title=&quot;&quot;&gt;&lt;em&gt;AsciiDoc&lt;/em&gt;&lt;/a&gt; zu schreiben versuchen. Beides sind Varianten der Technik &amp;#8220;mehrere Formate aus einem Quelltext erzeugen&amp;#8221;.&lt;/p&gt;

&lt;h4 id=&quot;markdown&quot;&gt;Markdown&lt;/h4&gt;

&lt;p&gt;Insbesondere für kürzere Texte und als generische Lösung bietet sich aber mittlerweile sozusagen ein Königsweg an, der auch entsprechende Verbreitung gefunden hat: &lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;strong&gt;Markdown&lt;/strong&gt;&lt;/a&gt;. Die Idee setzt wieder dort an, wo auch ich damals - ganz instinktiv - angefangen hatte, nämlich bei der Erzeugung eines HTML-Dokuments aus einem entsprechend formatierten Textdokument, wobei aber eben durchaus &amp;#8220;optische&amp;#8221; Formatierungen eingebaut werden, die sich erkennen, parsen und in strukturiertes Markup umsetzen lassen. Wir kennen das - mittlerweile - auch aus Wikis. Das schöne an &lt;em&gt;Markdown&lt;/em&gt; ist dabei, dass sich die Formatierungen dem E-Mail- und Usenet-Nutzer zumeist unmittelbar erschließen und die &lt;a href=&quot;http://daringfireball.net/projects/markdown/syntax&quot; title=&quot;301 Moved Permanently&quot;&gt;Syntax&lt;/a&gt; leicht erlernbar ist, die Texte selbst weitgehend lesbar bleiben und keiner großen Nachbearbeitung mehr bedürfen und auch (insbesondere bei der Verwendung von Erweiterungen wie &lt;em&gt;Markdown Extra&lt;/em&gt; oder &lt;a href=&quot;http://fletcherpenney.net/multimarkdown/&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;MultiMarkdown&lt;/em&gt;&lt;/a&gt;) nahezu alle Formatierungen, die man sich im generierten HTML nur wünschen kann, machbar sind. Wenn man die Möglichkeiten dazunimmt, die modernes CSS bei der optischen Gestaltung von Webseiten bietet, bleiben kaum mehr Wünsche offen.&lt;/p&gt;

&lt;h4 id=&quot;ein-beispiel&quot;&gt;Ein Beispiel&lt;/h4&gt;

&lt;p&gt;Für längere oder komplexere Texte wird man sich möglicherweise ergänzende Gedanken machen müssen, aber zumindest kurze Postings lassen sich so ohne großen Aufwand elegant ins Web stellen. So sieht bspw. der gepostete und leicht lesbare Text &lt;a href=&quot;http://code.th-h.de/?p=faqs/misc.git;a=blob_plain;f=den-info.txt;hb=HEAD&quot; title=&quot;301 Moved Permanently&quot;&gt;&lt;em&gt;Willkommen in de.etc.notfallrettung!&lt;/em&gt;&lt;/a&gt; auch in der &lt;a href=&quot;http://th-h.de/faq/den-info.php&quot; title=&quot;302 Found&quot;&gt;Webversion&lt;/a&gt; entsprechend aus, und diese Webversion kann jederzeit automatisiert erzeugt werden. Ich plane durchaus, auch meine längeren FAQs - die bisher auch im Web nur als Textversionen abrufbar sind - zukünftig auf diese Weise formatiert verfügbar zu machen, nehme aber an, dass insoweit noch einige Nacharbeiten erforderlich sein werden.&lt;/p&gt;

&lt;h4 id=&quot;weitere-vorteile&quot;&gt;Weitere Vorteile&lt;/h4&gt;

&lt;p&gt;Insbesondere in Verbindung mit Versionsverwaltungssystemen wie &lt;em&gt;Git&lt;/em&gt; zahlt es sich m.E. darüber hinaus aus, wenn der Quelltext möglichst gut lesbar ist und nicht mit Formatierungen oder HTTML-Tags überladen ist; aus einem &lt;em&gt;Markdown&lt;/em&gt;-Dokument kann ich überdies bei jeder Änderung automatisch den zu postenden Text und die Webversion ohne zusätzlichen Aufwand aus dem &lt;em&gt;Git&lt;/em&gt;-Repository erzeugen, kann mich also auf das Schreiben der Texte konzentrieren, ohne mich mit Routineaufgaben belasten zu müssen. (So jedenfalls die Theorie; ich strebe zukünftig auch eine entsprechende Automatisierung an. &lt;img src=&quot;https://netz-rettung-recht.de/plugins/serendipity_event_emoticate/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; class=&quot;emoticon&quot; /&gt;)&lt;/p&gt;

&lt;p&gt;Noch ein Vorteil ist, dass &lt;em&gt;Markdown&lt;/em&gt; (wie auch Wiki-Syntax) vergleichsweise leicht zu erlernen ist und ggf. (wie in Wikis) mit entsprechenden Editoren gekoppelt werden kann, in denen Buttons entsprechendes &amp;#8220;Markup&amp;#8221; erzeugen. Die Barriere für das Verfassen von Web-Texten wird damit abgesenkt.&lt;/p&gt;

&lt;h3 id=&quot;schlusswort&quot;&gt;Schlusswort&lt;/h3&gt;

&lt;p&gt;Insgesamt kann ich jedem nur raten: probiert &lt;em&gt;Markdown&lt;/em&gt; einmal aus!&lt;/p&gt;

&lt;p&gt;Die Texte schreiben sich darin sehr flüssig, und für die meisten CMS und Blogsysteme gibt es entsprechende Plugins. Nicht umsonst setzt bspw. auch &lt;a href=&quot;https://github.com/&quot; title=&quot;GitHub · Change is constant. GitHub keeps you ahead. · GitHub&quot;&gt;&lt;em&gt;Github&lt;/em&gt;&lt;/a&gt; sehr intensiv auf &lt;em&gt;Markdown&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;(Wie ich gerade bemerke, hatte ich darüber übrigens vor vier Jahren &lt;a href=&quot;https://netz-rettung-recht.de/archives/1593-markdown-Text-in-HTML-verwandeln.html&quot; title=&quot;&quot;&gt;schon einmal geschrieben&lt;/a&gt;. Manchmal dauert eben alles etwas länger &amp;#8230;)&lt;/p&gt;
&lt;img src=&quot;https://ssl-vg03.met.vgwort.de/na/044e2765f2784e3eb30d89291c726209&quot; width=&quot;1&quot; height=&quot;1&quot; alt=&quot;&quot;&gt; 
    </content:encoded>

    <pubDate>Sat, 24 May 2014 15:19:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1723-guid.html</guid>
    <category>markdown</category>
<category>perl</category>

</item>
<item>
    <title>markdown: Text in HTML verwandeln</title>
    <link>https://netz-rettung-recht.de/archives/1593-markdown-Text-in-HTML-verwandeln.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>https://netz-rettung-recht.de/archives/1593-markdown-Text-in-HTML-verwandeln.html#comments</comments>
    <wfw:comment>https://netz-rettung-recht.de/wfwcomment.php?cid=1593</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>https://netz-rettung-recht.de/rss.php?version=2.0&amp;type=comments&amp;cid=1593</wfw:commentRss>
    

    <author>nospam@example.com (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Auf dem Umweg über &lt;em&gt;&lt;a href=&quot;http://ikiwiki.info/&quot; title=&quot;ikiwiki&quot;&gt;ikiwiki&lt;/a&gt;&lt;/em&gt; - was vielleicht zukünftig einmal einen eigenen Beitrag wert ist - bin ich letzte Woche auf &lt;strong&gt;&lt;a href=&quot;http://daringfireball.net/projects/markdown/&quot; title=&quot;301 Moved Permanently&quot;&gt;markdown&lt;/a&gt;&lt;/strong&gt; gestoßen - ein Perl-Script, das einen strukturierten Klartext in (X)HTML verwandelt. Das ist, wie ich finde, eine tolle Sache, weil auf diese Weise der Quellcode der HTML-Seite für sich als Text lesbar bleibt. Es ist sogar möglich, auf diese Weise eine Text- und HTML-Version eines Dokuments parallel zu nutzen (um den Preis, daß Links in der Textversion etwas eigenartig wirken, und der HTML-Version eine interne Navigation fehlt).&lt;/p&gt;

&lt;p&gt;Beispielsweise habe ich den Einführungstext in die Newsgroup &lt;a href=&quot;https://netz-rettung-recht.de/den/&quot; title=&quot;de.etc.notfallrettung&quot;&gt;de.etc.notfallrettung&lt;/a&gt;, der regelmäßig in die Gruppe gepostet werden soll, auf diese Weise verfaßt. Der &lt;a href=&quot;http://groups.google.de/group/de.etc.notfallrettung/msg/23daff797f7f2dca?dmode=source&quot; title=&quot;&amp;quot;Willkommen in de.etc.notfallrettung!&amp;quot; vom 15.05.2010 via Googlegroups&quot;&gt;Text&lt;/a&gt; - der in genau dieser Fassung auch gepostet wird - ist gut lesbar, und &lt;em&gt;markdown&lt;/em&gt; erstellt daraus ohne weiteren Aufwand die &lt;a href=&quot;http://th-h.de/faq/den-info.php&quot; title=&quot;&amp;quot;Willkommen in de.etc.notfallrettung!&amp;quot; als Webseite&quot;&gt;HTML-Version&lt;/a&gt;. (Das erfolgt automatisch durch ein Script, das die entsprechende Fassung des Textes aus dem Git-Repository auscheckt, durch &lt;em&gt;markdown &lt;/em&gt;laufen läßt und dann an den richtigen Ort auf meinem Webserver verschiebt.)&lt;br /&gt;&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sun, 16 May 2010 12:17:00 +0000</pubDate>
    <guid isPermaLink="false">https://netz-rettung-recht.de/archives/1593-guid.html</guid>
    <category>markdown</category>

</item>

</channel>
</rss>
