Man pages mit TextMaker erzeugen.

Antworten
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54

Man pages mit TextMaker erzeugen.

Beitrag von Michael Uplawski »

DEMO

Siehe auch Thread https://forum.softmaker.de/viewtopic.ph ... 44#p116144 unten in „Sonstiges”.

Erstmal was zum gucken. An diesem Post hängen die Dateien
  • sqlite2dbf_ex_tmdx.gz - Eine man-page, die man mit

    Code: Alles auswählen

    man ./sqlite2dbf_ex_tmdx.gz
    öffnen kann
  • sqlite2dbf.rst.txt - Ein Restructured Text Dokument, das aus einer TextMaker-Datei generiert worden ist (also quasi automatisch).
  • sqlite2dbf.tmdx - Die TextMaker Datei.
Ich muss noch zwei Dateien nachliefern, und dazu einen neuen Beitrag verfassen. Sorry... Fortsetzung unten.

Edits: Kosmetik
Dateianhänge
sqlite2dbf.tmdx
(9.48 KiB) 148-mal heruntergeladen
sqlite2dbf_ex_tmdx.gz
(1.65 KiB) 146-mal heruntergeladen
sqlite2dbf.rst.txt
(3.79 KiB) 151-mal heruntergeladen
Zuletzt geändert von Michael Uplawski am 01.09.2018 13:50:35, insgesamt 4-mal geändert.
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54

Re: Man pages mit TextMaker erzeugen.

Beitrag von Michael Uplawski »

... Fortsetzung.

Noch zwei Dateien:
  • Restructured_Text.tmvx - eine Dokumentvorlage, die die für die Man-Page (nichts anderes) nötigen Vorlagen enthält.
  • tmdx2rst.xsl.txt - Ein XSL-stylesheet, mit dem aus tmdx Restructured Text wird.
Ich hatte leider noch keine Zeit, das Style-Sheet zu kommentieren und werde auch heute nicht mehr dazu kommen. Sollte das jemanden interessieren, kann ich das nochmal in Angriff nehmen.

So.

Wenn man auf die aus TMDX per unzip extrahierte Datei document.xml den folgenden Kommandoaufruf ablässt

Code: Alles auswählen

xsltproc --output sqlite2dbf.rst tmdx2rst.xsl document.xml
Entsteht die Datei sqlite2dbf.rst.

Das ist eigentlich schon alles.
Mit docutils lässt sich daraus dann allerhand machen, man-pages, HTML-Seiten, PDFs oder noch einfacherer Text.

xlltproc sollte mit der Linux-Distribution kommen, sonst ist es hier.
Das gleiche für docutils.

Freilich kann schon das Ursprungsdokument schön gestaltet werden, wovon PDF und HTML profitieren werden. Aber man-pages können mit der XSL Transformation eben nebenbei entstehen.

Es wäre klasse, wenn SoftMaker das Speichern direkt als RST erlauben würden... oder mal darüber (Allmächt) nachdächten.., des Nächtens... Hab' ich recht?
Dateianhänge
Restructured_Text.tmvx
(7.92 KiB) 157-mal heruntergeladen
tmdx2rst.xsl.txt
(4.31 KiB) 155-mal heruntergeladen
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54

Re: Man pages mit TextMaker erzeugen.

Beitrag von Michael Uplawski »

Der nächste Schritt ist vielleicht das Anreichern der originalen TextMaker Datei um solche Elemente, die in der Man-Page nichts verloren haben.., Grafiken zum Beispiel (auch wenn RST Grafiken zulässt), Inhaltsverzeichnisse, Hyperlinks etc. (Dito).

Formatvorlagen können *hinzugefügt* oder dupliziert werden, was der Erzeugung einer man-page nicht im Wege stehen wird, da die betroffenen Vorlagen und Textabsätze ignoriert werden... erm.., das habe ich im Style-Sheet, oben noch gar nicht berücksichtigt, macht aber keine großen Schwierigkeiten.

Ergebnis: 1 Ur-Dokument, aber viele verschiedene Endprodukte, je nach der Rolle, die einem Dokument zugedacht ist, Online-Hilfe, man-page, Homepage, README für den Source-Release.., etc.
Benutzeravatar
Michael Uplawski
Beiträge: 783
Registriert: 09.06.2010 14:27:54

Re: Man pages mit TextMaker erzeugen.

Beitrag von Michael Uplawski »

Ein Style Sheet, das auch mit OOXML-Dokumenten umgehen kann, die zusätzliche Absatz- und/oder Zeichenvorlagen enthalten, also solche, die nicht in eine man-page (via reStructuredText) überführt werden:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
  ©2018-2018 Michael Uplawski <michael.uplawski@uplawski.eu>
  Created with nothing.  
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
  <xsl:output method="txt" omit-xml-declaration="yes"/>

  <!-- match the root-tag -->
  <xsl:template match="/">
    <!-- matches the root-tag -->
    <xsl:message>
      <xsl:text>handling root</xsl:text>
    </xsl:message>
    <xsl:apply-templates select="//w:body"/>
  </xsl:template>

  <!-- traverse the xml-structure to where we want to go.
      This can serve other purposes, later -->
  <xsl:template match="w:body">
    <xsl:message>
      <xsl:text>handling w:body</xsl:text>
    </xsl:message>
    <xsl:apply-templates select="w:p"/>
  </xsl:template>

  <!-- match an actual paragraph -->
  <xsl:template match="w:p">
    <xsl:message>
      <xsl:text>handling w:p </xsl:text>
    </xsl:message>

    <!-- While we only want to process the w:t tag,
         the styles are identified in child structures
         under the w:pPr- and w:r-tags. 

        I just communicate them to the next template. -->
    <xsl:apply-templates select="w:r/w:t">
      <xsl:with-param name="paraStyle" select="w:pPr/w:pStyle/@w:val"/>
      <xsl:with-param name="charStyle" select="w:r/w:rPr/w:rStyle/@w:val"/>
    </xsl:apply-templates>
  </xsl:template> 

  <!-- *** Real Work Starts Here *** -->
  <xsl:template match="w:t">
    <!-- expect two parameters -->
    <xsl:param name="paraStyle"/> 
    <xsl:param name="charStyle"/>
    <!-- Get the actual content of this tag -->
    <xsl:variable name="content" select="."/>

    <xsl:message>
      <xsl:text>handling w:t</xsl:text>
      <xsl:text> pStyle is |</xsl:text>
      <xsl:value-of select="normalize-space($paraStyle)"/> 
      <xsl:text>|</xsl:text>
    </xsl:message>

    <!-- decide, what to do for each of the 
    set style-names. Put another way:
    Produce Restructured Text -->
    <xsl:choose>
      <xsl:when test="$paraStyle='para1'">
        <xsl:text>&#xA;============&#xA;</xsl:text> 
        <xsl:value-of select="$content"/>
        <xsl:text>&#xA;============&#xA;</xsl:text> 
      </xsl:when>
      <xsl:when test="$paraStyle='para2'">
        <xsl:text>&#xA;----------------------------------------------------&#xA;</xsl:text> 
        <xsl:value-of select="normalize-space($content)"/>
        <xsl:text>&#xA;----------------------------------------------------&#xA;</xsl:text> 
      </xsl:when>
      <xsl:when test="$paraStyle='para3'">
        <xsl:text>&#xA;</xsl:text> 
        <xsl:value-of select="normalize-space($content)"/>
        <xsl:text>&#xA;----------------------------------------------------&#xA;</xsl:text> 
      </xsl:when>
      <xsl:when test="$paraStyle='para4'">
        <xsl:text>&#xA;**</xsl:text> 
        <xsl:value-of select="normalize-space($content)"/>
        <xsl:text>**&#xA;</xsl:text> 
      </xsl:when>
      <!-- Definition-lists are always a chore.
      You must know the original xml-file a bit to understand this
      when-branch. An option-list, first -->
      <xsl:when test="$paraStyle='para5'">
        <xsl:choose>
          <!-- Definition Item -->
          <xsl:when test="position()=1 and $charStyle='char1'">
            <xsl:text>&#xA;</xsl:text>
            <xsl:text>**</xsl:text> 
            <xsl:value-of select="normalize-space($content)"/>
            <xsl:text>** </xsl:text> 
          </xsl:when>
          <!-- Not a Definition Item -->
          <xsl:otherwise>
            <xsl:choose>
              <!-- Definition -->
              <xsl:when test="./preceding-sibling::w:tab">
                <xsl:text>           </xsl:text>
                <xsl:value-of select="normalize-space($content)"/>
                <xsl:text>&#xA;</xsl:text> 
              </xsl:when>
              <!-- Something following the item, but not a definition -->
              <xsl:otherwise>
                <xsl:text> </xsl:text>
                <xsl:value-of select="normalize-space($content)"/>
                <xsl:text> </xsl:text>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:when>
      <!-- Now just a field-list. -->
      <xsl:when test="$paraStyle='para7'">
        <xsl:choose>
          <xsl:when test="position()=1 and $charStyle='char2'">
            <xsl:text>&#xA;</xsl:text>
            <xsl:text>*</xsl:text> 
            <xsl:value-of select="normalize-space($content)"/>
            <xsl:text>* </xsl:text> 
          </xsl:when>
          <xsl:otherwise>
            <xsl:choose>
              <xsl:when test="./preceding-sibling::w:tab">
                <xsl:text>           </xsl:text>
                <xsl:value-of select="normalize-space($content)"/>
                <xsl:text>&#xA;</xsl:text> 
              </xsl:when>
              <xsl:otherwise>
                <xsl:text> </xsl:text>
                <xsl:value-of select="normalize-space($content)"/>
                <xsl:text> </xsl:text>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:when>
      <!-- Anything else ist just text.
          paraStyle is in reality == 'para0', but
          only implicitly applied. A test would fail.
      -->
      <xsl:when test="string-length($paraStyle) = 0">
        <xsl:message><xsl:text>    assuming normal text</xsl:text>
        </xsl:message>
        <xsl:text>&#xA;</xsl:text> 
        <xsl:value-of select="normalize-space($content)"/>
        <xsl:text>&#xA;</xsl:text> 
      </xsl:when>
      <!-- The remainder may be unsupported styles. 
      Ignore these -->
      <xsl:otherwise>
        <xsl:message><xsl:text>    Skipping unsupported style</xsl:text></xsl:message>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!-- This is unused... TODO: Keep or remove -->
  <xsl:template match="w:tab">
    <xsl:text>        </xsl:text>
  </xsl:template>
</xsl:stylesheet>
<!-- EOF -->

Antworten

Zurück zu „TextMaker 2018 für Linux“