OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: DOCBOOK-APPS: Word to Docbook using Perl?


I use a hodgepodge document system with this tool chain.  First, the
document is written in Word 2000 using a (homegrown) docbook stylesheet.
Then a small army of scripts run to end up with docbook XSL:

   * doc2txt converts the DOC to HTML
   * wh2fo converts the HTML to XML
   * Saxon processes homemade XSL to generate mostly valid docbook XML
   * Saxon processes docbook XML into FO using docbook xsl stylesheets
   * FOP processes docbook FO into PDF
   * All glued somewhat precariously together with make

It's certainly not perfect but supports enough elements to fit my needs.
Below is what I use to process a Word table.

HTH -


-- Andy

<?xml version="1.0" ?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:output method="xml"/>

  <xsl:template match="paragraph[@class='tablecaption']">
  <xsl:variable name="passid">
  <xsl:if test="reference">
     <xsl:value-of select="reference[substring(@id,1,5)='refid']/@id"/>
  </xsl:if>
  </xsl:variable>

   <xsl:if test="name(preceding-sibling::*[position()=1]) = 'table'">
      <xsl:apply-templates select="preceding-sibling::table[position()=1]">

 <xsl:with-param name="refid"><xsl:value-of
select="$passid"/></xsl:with-param></xsl:apply-templates>
    </xsl:if>
  </xsl:template>

  <xsl:template match="table">
    <xsl:param name="refid"/>
    <xsl:variable name="numcols" select="count(child::row[1]/cell)"/>
    <xsl:variable name="tabcap"
select="following-sibling::paragraph[@class='tablecaption'][1]"/>
    <table>
      <xsl:choose>
 <xsl:when test="not($refid='')">
   <xsl:attribute name="id"><xsl:value-of select="$refid"/>
   </xsl:attribute>
 </xsl:when>
 <xsl:otherwise>
   <xsl:attribute name="id"><xsl:value-of
select="generate-id()"/></xsl:attribute>
   </xsl:otherwise>
 </xsl:choose>
      <xsl:attribute name="frame">all</xsl:attribute>
      <title>
 <xsl:value-of select="$tabcap"/>
      </title>
      <tgroup>
 <xsl:attribute name="cols"><xsl:value-of
select="$numcols"/></xsl:attribute>
 <xsl:attribute name="align">left</xsl:attribute>
 <xsl:attribute name="colsep">1</xsl:attribute>
 <xsl:attribute name="rowsep">1</xsl:attribute>
 <thead>
   <row>
     <xsl:for-each select="child::row[1]/cell">
       <entry><xsl:apply-templates/></entry>
     </xsl:for-each>
   </row>
 </thead>
 <tbody>
   <xsl:apply-templates select="row[position() > 1]"/>
 </tbody>
      </tgroup>
    </table>
  </xsl:template>

  <xsl:template match="row">
    <row>
      <xsl:apply-templates select="cell"/>
    </row>
  </xsl:template>

  <xsl:template match="cell">
    <entry>
      <xsl:apply-templates select="paragraph[contains(@class,'item')][1]"
mode="table" />
      <xsl:apply-templates
select="paragraph[not(contains(@class,'item'))]"/>
    </entry>
  </xsl:template>

</xsl:stylesheet>

Corey Wells Arnold wrote:

> Has anyone ever run across a Perl program that can process MS Word
> tables into Docbook tables?  I am putting together a document that is
> being written by many people who will be using Word.  Any ideas on what
> is the best way to convert it to Docbook XML?  I have tried using the
> Open Office filter, but it lacks support for some tags and doesn't seem
> to process tables correctly.
>
> Thanks,
>
> Corey






[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]