permalink

8

Der Weg vom Manuskript auf die Website

Etwa ein hal­bes Jahr lang habe ich dafür gebraucht, die fer­tige Ein­füh­rung in XHTML, CSS und Web­de­sign ins Web zu über­tra­gen. Das liegt daran, dass es mir nicht gelun­gen ist, den Weg kom­plett zu auto­ma­ti­sie­ren. Ich konnte mich dem gewünsch­ten Ergeb­nis in meh­re­ren Schrit­ten annä­hern, aber um letzte, manu­elle Arbei­ten kam ich nicht herum – wochen­lange Fließ­band­ar­beit mit immer den­sel­ben Ände­run­gen, Kor­rek­tu­ren und Aus­zeich­nun­gen. Wer mir bei Twit­ter folgt, hat viel­leicht mit­be­kom­men, wie ich mich hin und wie­der dar­über beklagt habe. Als kleine Ent­schä­di­gung dafür beschreibe ich in die­sem Arti­kel kurz, wie der Weg vom Manu­skript auf die Web­site genau verlief.

Zum Sei­ten­an­fang

Das Manu­skript

Addison-Wesley bie­tet sei­nen Auto­ren For­mat­vor­la­gen für ver­schie­de­nen Pro­gramme und Sys­teme an, mit deren Hilfe sie ihr Buch­ma­nu­skript erstel­len kön­nen. Als ich mit der Arbeit am Manu­skript der ers­ten Auf­lage begann, hatte ich mich für eine For­mat­vor­lage für Micro­soft Word ent­schie­den. Es war rela­tiv ein­fach, die in der Online-Version bereits fer­tige Ein­füh­rung in das Manu­skript zu kopie­ren und dort alle not­wen­di­gen Ände­run­gen, Ergän­zun­gen und For­mat­aus­zeich­nun­gen vor­zu­neh­men. Die zweite Auf­lage ent­stand aus dem­sel­ben Manu­skript. Abbil­dung 1 zeigt einen Aus­schnitt dar­aus: Kapi­tel 7.2.2 »Hin­ter­grund­farbe: Die Eigen­schaft background-color«.


Abb. 1: Manu­skript

Zum Sei­ten­an­fang

Ers­ter Schritt: HTML-Export und Tidy

Der erste Schritt vom Manu­skript zur Web­site bestand darin, den Inhalt des Manu­skripts als XML- oder HTML-Dokument abzu­spei­chern, um es wei­ter­ver­ar­bei­ten zu kön­nen. Der XML-Output von Micro­soft Word 2003 erschien mir zu kom­pli­ziert und das Spei­chern als »Web­site« oder »Web­seite, gefil­tert« stellte mich eben­falls nicht zufrie­den. Erfolg­ver­spre­chen­der erschien mir der Weg über Open​Of​fice​.org Wri­ter. Der HTML-Export erzeugte eine HTML-Datei von »nur noch« knapp 37.000 Zei­len Quell­text – immer­hin bes­ser als 54.000 Zei­len Word-Output. Anschlie­ßend ließ ich Tidy über das Manu­skript lau­fen, um einige For­ma­tie­run­gen zu kor­ri­gie­ren und mir die Gewiss­heit zu ver­schaf­fen, es mit zwar fürch­ter­lich schlech­tem, aber immer­hin for­mal gül­ti­gem HTML zu tun haben. Lis­ting 1 zeigt das Ergeb­nis des ers­ten Schritts.

<h3 class="western">7.2.2Hintergrundfarbe: Die Eigenschaft
background-color</h3>
<p class="western"><span id="Rahmen509" dir="ltr" style="position: absolute; top: 0cm; left: 0.25cm; width: 3.5cm; height: 0.37cm; border: none; padding: 0cm; background: #c0c0c0">
</span></p>
<ol start="178">
  <li>
    <span id="Rahmen509" dir="ltr" style="position: absolute; top: 0cm; left: 0.25cm; width: 3.5cm; height: 0.37cm; border: none; padding: 0cm; background: #c0c0c0">
    </span>
    <p align="center" style="background: #c0c0c0; line-height: 0.53cm; page-break-after: avoid">
    <span id="Rahmen509" dir="ltr" style="position: absolute; top: 0cm; left: 0.25cm; width: 3.5cm; height: 0.37cm; border: none; padding: 0cm; background: #c0c0c0">
    <font color="#FFFFFF"><font face="Arial, sans-serif"><font size="1" style="font-size: 8pt"><b>Icon
    INFO</b></font></font></font></span></p>
  </li>
</ol>Die <font color="#800000"><b>Eigenschaft</b></font>
<font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="de-DE"><b>background-color</b></span></font></font></font>
bestimmt die Hintergrundfarbe eines Elements.
<p style="border-top: none; border-bottom: 1.00pt solid #ff0000; border-left: 1.00pt solid #ff0000; border-right: 1.00pt solid #ff0000; padding-top: 0cm; padding-bottom: 0.04cm; padding-left: 0.14cm; padding-right: 0.14cm">
<br/>
<br/></p>
<table width="494" border="1" bordercolor="#000000" cellpadding="7" cellspacing="0">
  <col width="77"/>
  <col width="387"/>
  <tr valign="top">
    <td width="77">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><b>Werte</b></font></p>
    </td>
    <td width="387">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">&lt;Farbe&gt;</span></font></font></font>, <font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">transparent</span></font></font></font>,
      <font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">inherit</span></font></font></font></font></p>
    </td>
  </tr>
  <tr valign="top">
    <td width="77">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><b>Initialwert</b></font></p>
    </td>
    <td width="387">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">transparent</span></font></font></font></font></p>
    </td>
  </tr>
  <tr valign="top">
    <td width="77">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><b>Vererbung</b></font></p>
    </td>
    <td width="387">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt">nein</font></p>
    </td>
  </tr>
  <tr valign="top">
    <td width="77">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><b>Anwendung</b></font></p>
    </td>
    <td width="387">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt">global</font></p>
    </td>
  </tr>
</table>
<p lang="en-GB" class="western"><br/>
<br/></p>
<p lang="en-GB" class="western">Beispiel:</p>
<p lang="" align="left"><font color="#000080"><font face="Courier New, monospace"><font size="2" style="font-size: 9pt"><span lang="en-GB">p.warnung {</span><span lang="en-GB"><br/>
color: red;<br/></span> <font color="#800000"><b><span lang="en-GB">background-color: white;</span></b></font><span lang="en-GB"><br/>
}</span></font></font></font></p>
<p class="western">Das Schlüsselwort <font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">transparent</span></font></font></font> legt
fest, dass ein Element einen transparenten Hintergrund hat,
darunterliegende Farben und Inhalte somit durchscheinen.</p>
<p class="western">Die Eigenschaften <font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">color</span></font></font></font> und
<font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">background-color</span></font></font></font> sollten Sie immer
zusammen angeben. Angenommen, Sie deklarieren für ein
Element eine Hintergrundfarbe, die in Ton und Helligkeit der
Farbe ähnelt, die ein Besucher Ihrer Seite in seinem Browser
für die Vordergrundfarbe eingestellt hat. Der Nutzer
würde dann nichts mehr lesen können. Achten Sie daher
darauf, dass Vorder- und Hintergrundfarben stets ausreichend
kontrastieren.</p>
<p align="left" style="margin-top: 0.71cm; border-top: 1.00pt solid #008080; border-bottom: none; border-left: 1.00pt solid #008080; border-right: 1.00pt solid #008080; padding-top: 0.11cm; padding-bottom: 0cm; padding-left: 0.14cm; padding-right: 0.14cm; page-break-inside: avoid; page-break-after: avoid">
<font color="#008080"><font face="Arial, sans-serif"><font size="4"><b>Browserunterstützung</b></font></font></font></p>
<p class="western">Die Eigenschaft <font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">background-color</span></font></font></font>
wird von allen modernen Browsern unterstützt mit folgender
Einschränkung:</p>
<table width="321" border="1" bordercolor="#000000" cellpadding="7" cellspacing="0">
  <col width="59"/>
  <col width="232"/>
  <tr valign="top">
    <td width="59">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><b>Browser</b></font></p>
    </td>
    <td width="232">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><b>Anmerkung</b></font></p>
    </td>
  </tr>
  <tr valign="top">
    <td width="59">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt"><font color="#808000"><ie6&gt;
      <ie7&gt;</font> </font></p>
    </td>
    <td width="232">
      <p style="margin-top: 0.11cm"><font size="2" style="font-size: 9pt">IE ignoriert bis Version 7 den Wert
      <font color="#800000"><font face="Courier New, monospace"><font size="2"><span lang="">inherit</span></font></font></font>.</font></p>
    </td>
  </tr>
</table>
<p align="left" style="margin-bottom: 0.71cm; border-top: none; border-bottom: 1.00pt solid #008080; border-left: 1.00pt solid #008080; border-right: 1.00pt solid #008080; padding-top: 0cm; padding-bottom: 0.04cm; padding-left: 0.14cm; padding-right: 0.14cm; font-weight: normal; page-break-inside: avoid; page-break-after: auto">
<br/>
<br/></p>
Lis­ting 1: Open​Of​fice​.org Wri­ter: Spei­chern als HTML-Dokument, Säu­be­rung mit Tidy

Zum Sei­ten­an­fang

Zwei­ter Schritt: XSL-Transformationen mit onion​.net

Im nächs­ten Schritt habe ich den Quell­text in onion​.net, dem Content-Management-System, auf dem der größte Teil der Web­site läuft, abge­spei­chert und XSL-Transformationen geschrie­ben, die den Tidy-Output in mein Ziel-Markup trans­for­mie­ren. Die Trans­for­ma­ti­ons­da­tei besteht aus einer gan­zen Reihe von Tem­pla­tes, ver­ein­facht gesagt Regeln, die jeweils auf bestimmte Ele­ment­ty­pen ange­wen­det wer­den und deren Inhalt unter­su­chen und in die gewünschte Aus­gabe umwan­deln. Der Grund­ge­danke dabei ist, typi­sche Aus­zeich­nun­gen zu erken­nen und in das kor­rekte Markup zu über­füh­ren. Auf Abbil­dung 1 ist zu sehen, dass Quell­texte blau und in der Schrift »Cou­rier New« dar­stellt wer­den. Im Tidy-Output wurde dar­aus ein p-Ele­ment mit ver­schach­tel­ten font-Elementen.

<p lang="" align="left"><font color="#000080"><font face="Courier New, monospace"><font size="2" style="font-size: 9pt"><span lang="en-GB">p.warnung {</span><span lang="en-GB"><br/>
color: red;<br/></span> <font color="#800000"><b><span lang="en-GB">background-color: white;</span></b></font><span lang="en-GB"><br/>
}</span></font></font></font></p>

Anhand die­ser Mus­ter konnte ich bestimmte Aus­zeich­nungs­ele­mente erken­nen – oder viel­mehr erah­nen – und deren Inhalt in das gewünschte Ziel-Markup ein­bet­ten. Lis­ting 2 zeigt einen Aus­schnitt der Trans­for­ma­ti­ons­da­tei, genauer gesagt das Tem­plate, das Ele­mente vom Typ p behan­delt. Lis­ting 3 zeigt das Ergeb­nis der Trans­for­ma­tion, das ziem­lich nahe am End­er­geb­nis ist.

<xsl:template match="p" mode="output">
  <xsl:choose>
    <!-- Leere Absätze -->
    <xsl:when test="normalize-space(.) = ''"></xsl:when>
    <!-- Marginalien -->
    <xsl:when test="span/font/@face = 'Times Roman, Times New Roman, serif' and span/font/i and span/font/i/b">
      <h3><xsl:value-of select="normalize-space(.)" /></h3>
      <xsl:value-of select="'&#10;'" />
    </xsl:when>
    <!-- Listings -->
    <xsl:when test="font/@color = '#000080' and font/font/@face = 'Courier New, monospace' and font/font/font/@size = '2' and font/font/font/@style = 'font-size: 9pt'">
      <div class="code brush">
        <pre class="brush:xml;"><xsl:value-of select="." /></pre>
        <div class="caption">TODO</div>
      </div>
    </xsl:when>
    <xsl:otherwise>
      <p><xsl:apply-templates mode="output" /></p>
      <xsl:value-of select="'&#10;'" />
    </xsl:otherwise>
  </xsl:choose>
  <xsl:value-of select="'&#10;'" />
</xsl:template>
Lis­ting 2: Aus­schnitt aus der Trans­for­ma­ti­ons­da­tei: Behand­lung von Ele­men­ten vom Typ p
<h2 id="">7.2.2Hintergrundfarbe: Die Eigenschaft
background-color</h2>
<ol>
  <li>
    <p><div class="definition"><p>TODO</p></div></p>
</li>
</ol>
Die <dfn>Eigenschaft</dfn><code>background-color</code>
bestimmt die Hintergrundfarbe eines Elements.
<table class="data">
  <tr>
    <td>Werte</td>
    <td>&lt;Farbe&gt;, transparent, inherit</td>
  </tr>
  <tr>
    <td>Initialwert</td>
    <td>transparent</td>
  </tr>
  <tr>
    <td>Vererbung</td>
    <td>nein</td>
  </tr>
  <tr>
    <td>Anwendung</td>
    <td>global</td>
  </tr>
</table>
<p>Beispiel:</p>
<div class="code brush"><pre class="brush:xml;">p.warnung {
color: red;background-color: white;
}</pre><div class="caption">TODO</div></div>
<p>Das Schlüsselwort <code>transparent</code> legt
fest, dass ein Element einen transparenten Hintergrund hat,
darunterliegende Farben und Inhalte somit durchscheinen.</p>
<p>Die Eigenschaften <code>color</code> und
<code>background-color</code> sollten Sie immer
zusammen angeben. Angenommen, Sie deklarieren für ein
Element eine Hintergrundfarbe, die in Ton und Helligkeit der
Farbe ähnelt, die ein Besucher Ihrer Seite in seinem Browser
für die Vordergrundfarbe eingestellt hat. Der Nutzer
würde dann nichts mehr lesen können. Achten Sie daher
darauf, dass Vorder- und Hintergrundfarben stets ausreichend
kontrastieren.</p>
<p>Browserunterstützung</p>
<p>Die Eigenschaft <code>background-color</code>
wird von allen modernen Browsern unterstützt mit folgender
Einschränkung:</p>
<table id="tab" class="data">
  <tr>
    <td>Browser</td>
    <td>Anmerkung</td>
  </tr>
  <tr>
    <td><ie6&gt; <ie7&gt;</td>
    <td>IE ignoriert bis Version 7 den Wert inherit.</td>
  </tr>
</table>
Lis­ting 3: Ergeb­nis der XSL-Transformation in onion​.net

Zum Sei­ten­an­fang

Schritt 4: Manu­elle Korrekturen

Im letz­ten Schritt folgte nun die Arbeit, die mich am meis­ten Zeit gekos­tet hat: die letz­ten Kor­rek­tu­ren und Ergän­zun­gen. Ich musste IDs und Klas­sen hin­zu­fü­gen, redun­dante Ele­mente ent­fer­nen, Aus­zeich­nun­gen hin­zu­fü­gen, die bei den Trans­for­ma­tio­nen (oder schon beim Abspei­chern des Manu­skripts als HTML) ver­lo­ren gegan­gen sind, einige For­ma­tie­run­gen kor­ri­gie­ren, Ele­mente hin­zu­fü­gen, Links und Abbil­dun­gen ein­bauen. Eini­ges davon ging per Suchen-und-Ersetzen, das meiste jedoch nicht. Lis­ting 4 zeigt das Ergeb­nis die­ser Handarbeit.

<h2 id="background-color">Hintergrundfarbe: Die Eigenschaft background-color</h2>
<p class="definition">Die <dfn>Eigenschaft <code>background-color</code></dfn> bestimmt die Hintergrundfarbe eines Elements.</p>
<table class="data">
  <tr>
    <th>Werte</th>
    <td><a href="http://jendryschik.de/wsdev/einfuehrung/eigenschaften/#farbe">&lt;Farbe&gt;</a>, <code>transparent</code>, <a href="http://jendryschik.de/wsdev/einfuehrung/eigenschaften/#inherit">inherit</a></td>
  </tr>
  <tr>
    <th>Initialwert</th>
    <td><code>transparent</code></td>
  </tr>
  <tr>
    <th>Vererbung</th>
    <td>nein</td>
  </tr>
  <tr>
    <th>Anwendung</th>
    <td>global</td>
  </tr>
</table>
<p>Beispiel:</p>
<div class="code brush">
  <pre class="brush:css;">p.warnung {
  color: red;
  background-color: white;
}</pre>
</div>
<p>Das Schlüsselwort <code>transparent</code> legt fest, dass ein Element einen transparenten Hintergrund hat, darunterliegende Farben und Inhalte somit durchscheinen.</p><p>Die Eigenschaften <code>color</code> und <code>background-color</code> sollten Sie immer zusammen angeben. Angenommen, Sie deklarieren für ein Element eine Hintergrundfarbe, die in Ton und Helligkeit der Farbe ähnelt, die ein Besucher Ihrer Seite in seinem Browser für die Vordergrundfarbe eingestellt hat. Der Nutzer würde dann nichts mehr lesen können. Achten Sie daher darauf, dass Vorder- und Hintergrundfarben stets ausreichend kontrastieren.</p>
<div class="browser">
  <h3>Browserunterstützung</h3>
  <p>Die Eigenschaft <code>background-color</code> wird von allen modernen Browsern unterstützt mit folgender Einschränkung:</p>
  <dl class="browser">
    <dt class="ie7">Internet Explorer 6 und 7</dt>
    <dd>IE ignoriert bis Version 7 den Wert <code>inherit</code>.</dd>
  </dl>
</div>
<p class="top"><a href="#top">Zum Seitenanfang</a></p>
Lis­ting 4: End­er­geb­nis nach manu­el­len Korrekturen

Ich bin mir ziem­lich sicher, dass der Weg, den ich ein­ge­schla­gen habe, um mein Buch online zu brin­gen, nicht der beste gewe­sen ist – dafür dau­er­ten die manu­el­len Kor­rek­tu­ren im letz­ten Schritt ein­fach zu lange. Hätte ich den Auf­wand rich­tig ein­ge­schätzt, dann hätte ich viel­leicht einen ande­ren Weg gewählt. Aber wel­chen? Wer von Ihnen hatte schon die Auf­gabe, aus einem auf­wän­dig for­ma­tier­ten Word-Dokument seman­ti­sche hoch­wer­ti­ges HTML zu erzeu­gen und wie haben Sie die Auf­gabe gelöst?

8 Kommentare

  1. Hallo Michael,

    also erst mal noch einen Glück­wunsch zur Ver­sion 4. Ist wirk­lich toll gewor­den, inhalt­lich wie optisch!

    Ich arbeite gerade daran, "Little Boxes Teil 1" online zu stel­len, habe als Basis auch eine Word-Vorlage von Pear­son, mich aber für einen ganz ande­ren Weg ent­schie­den, nicht zuletzt weil ich die auto­ma­ti­schen Kon­ver­tie­run­gen von Wri­ter und Word auch nicht akzep­ta­bel fand und ich von XSLT & Co. nicht wirk­lich was ver­stehe. Für ein funk­tio­nie­ren­des "sin­gle input - mul­ti­ple out­put" brau­chen wir wahr­schein­lich einen ande­ren Aus­gangs­punkt als eine Word-Vorlage. ;-)

    Mein Weg ist manu­ell, tech­nisch ziem­lich sim­pel aber es funktioniert:

    1. Site erstel­len (mit TYPO­light und YAML)
    2. Inhalte aus der PDF-Fahne ins CMS kopie­ren (manuell).

    Auch das ist viel Arbeit, aber die manu­elle Kor­rek­tur des Quell­tex­tes nehme ich direkt beim Ein­fü­gen des Inhalts in das CMS vor. TYPO­light teilt den Inhalt einer Seite in "con­tent ele­ments" genannte "Scheib­chen" ein (Über­schrif­ten, Fließ­text, ToDo-Kästchen, TIPP-Kästen, Tabel­le­netc.), denen ich bei Bedarf zur Gestal­tung Klas­sen zuwei­sen kann. Das erleich­tert die Sache erheblich.

  2. Du bringst »Little Boxes« online? Klasse! Ich hoffe, du wirst die Leser, die bei dir ein­stei­gen, zu mir wei­ter rei­chen, wenn sie mit dei­nem Buch durch sind. ;-)

    Der kom­plett manu­elle Weg ist auch eine Mög­lich­keit. onion​.net bie­tet mir eben­falls an, Inhalte über Mas­ken ein­zu­ge­ben, die ich (über XML Schema) sogar selbst defi­nie­ren kann. Ich habe auch über­legt, ob ich so vor­ge­hen will, aber ehr­lich gesagt konnte und kann ich es mir nicht vor­stel­len, über 500 Sei­ten Buch­in­halt über Kopieren-und-Einfügen in Mas­ken zu übertragen.

  3. > Du bringst »Little Boxes« online?
    Yep. Den ers­ten Teil, also den CSS-Grundlagenkurs. Ich lese ab und an in CSS-Foren mit und würde oft als Ant­wort am liebs­ten einen Ver­weis zu einem bestimm­ten Abschnitt aus dem Buch schrei­ben. Und das geht online ent­schie­den besser ;-)

    > Ich hoffe, du wirst die Leser, die bei dir ein­stei­gen, zu mir wei­ter rei­chen
    Wor­auf du dich ver­las­sen kannst. Wie sagt Chubby Che­cker: "Let's link again, like we did last summer …"

    > ehr­lich gesagt konnte und kann ich es mir nicht vor­stel­len,
    > über 500 Sei­ten Buch­in­halt über Kopieren-und-Einfügen
    > in Mas­ken zu über­tra­gen.
    Ich auch nicht, des­halb bin ich gleich damit ange­fan­gen, bevor ich es mir anders über­lege. Reine Fleiß­ar­beit, und ich hab ja auch "nur" 381 Seiten ;-)

  4. Hallo Michael, als Besit­zer der Erst­auf­lage des Buches, das mir von Beginn an wirk­lich wert­volle Dienste geleis­tet hat, ist diese Form der Bereit­stel­lung natür­lich ein Traum. Unfass­bar das Du dir diese Arbeit gemacht hast. Mei­ner­seits gibt es zumin­dest einen Bei­trag im Blog um ein wenig zur Bekannt­heit beizutragen …

    Klasse Arbeit, herz­li­chen Dank und Dir viel Erfolg …
    Markus

  5. folgt auf mei­ner Seite unter web​-funk​.de sobald ich mal 20min. Zeit finde ;-) kannst Dich aber dar­auf ver­las­sen, Deine Arbeit hier ist es auf jeden Fall wert …

  6. Pingback: Einführung in XHTML, CSS und Webdesign mit Michael Jendryschik Aktionsraum Internet

  7. Hallo,
    wollte nur mal vie­len Dank dafür sagen, dass du das Buch online zur Ver­fü­gung stellst, obwohl dies ja, wie man lesen kann, mit nicht uner­heb­li­cher zusätz­li­cher Arbeit ver­bun­den ist. Ich habe mir erlaubt, auf mei­ner klei­nen Web­seite einen Link anzubringen.

    Ich hoffe, du fin­dest viel Zuspruch für das Ange­bot und man­che Nach­ah­mer. Einer arbei­tet ja schon dran, wie man lesen kann.
    :-)

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.

*