[xep-support] Support of special types of spaces
Jirka Kosek
jirka at kosek.cz
Thu Oct 20 01:55:58 PDT 2005
Broberg, Mats wrote:
> fact that one even needs to discuss it is beyond my imagination. How it
> is solved technically is of less importance to the typesetter, but the
> fixed spaces need to be easily entered, correctly processed and properly
> output at the desired width. Period.
Indeed. You can use Unicode characters to specify these fine tuned
spacing and add following XSLT code into transformation to get proper
spacing in output.
<xsl:template match="text()">
<xsl:call-template name="space.2000.subst">
<xsl:with-param name="string" select="."/>
</xsl:call-template>
</xsl:template>
<!-- You can adjust width of spaces by parameters. Empty value means
that space is not converted to fo:leader -->
<xsl:param name="space.enquad.width">0.5em</xsl:param> <!-- U+2000 -->
<xsl:param name="space.emquad.width">1em</xsl:param> <!-- U+2001 -->
<xsl:param name="space.enspace.width">0.5em</xsl:param><!-- U+2002 -->
<xsl:param name="space.emspace.width">1em</xsl:param><!-- U+2003 -->
<xsl:param name="space.3emspace.width">0.33em</xsl:param><!-- U+2004 -->
<xsl:param name="space.4emspace.width">0.25em</xsl:param><!-- U+2005 -->
<xsl:param name="space.6emspace.width">0.16em</xsl:param><!-- U+2006 -->
<xsl:param name="space.figspace.width"></xsl:param><!-- U+2007 -->
<xsl:param name="space.punctspace.width"></xsl:param><!-- U+2008 -->
<xsl:param name="space.thinspace.width">0.2em</xsl:param><!-- U+2009 -->
<xsl:param name="space.hairspace.width">0.1em</xsl:param><!-- U+200A -->
<xsl:template name="space.2000.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.enquad.width != ''">
<xsl:call-template name="space.2001.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.enquad.width}"/>
<xsl:call-template name="space.2000.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2001.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2001.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.emquad.width != ''">
<xsl:call-template name="space.2002.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.emquad.width}"/>
<xsl:call-template name="space.2001.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2002.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2002.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.enspace.width != ''">
<xsl:call-template name="space.2003.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.enspace.width}"/>
<xsl:call-template name="space.2002.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2003.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2003.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.emspace.width != ''">
<xsl:call-template name="space.2004.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.emspace.width}"/>
<xsl:call-template name="space.2003.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2004.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2004.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.3emspace.width != ''">
<xsl:call-template name="space.2005.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.3emspace.width}"/>
<xsl:call-template name="space.2004.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2005.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2005.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.4emspace.width != ''">
<xsl:call-template name="space.2006.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.4emspace.width}"/>
<xsl:call-template name="space.2005.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2006.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2006.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.6emspace.width != ''">
<xsl:call-template name="space.2007.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.6emspace.width}"/>
<xsl:call-template name="space.2006.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2007.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2007.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.figspace.width != ''">
<xsl:call-template name="space.2008.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.figspace.width}"/>
<xsl:call-template name="space.2007.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2008.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2008.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.punctspace.width != ''">
<xsl:call-template name="space.2009.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.punctspace.width}"/>
<xsl:call-template name="space.2008.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.2009.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.2009.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.thinspace.width != ''">
<xsl:call-template name="space.200A.subst">
<xsl:with-param name="string" select="substring-before($string,
' ')"/>
</xsl:call-template>
<fo:leader leader-length="{$space.thinspace.width}"/>
<xsl:call-template name="space.2009.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="space.200A.subst">
<xsl:with-param name="string" select="$string"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="space.200A.subst">
<xsl:param name="string"/>
<xsl:choose>
<xsl:when test="contains($string, ' ') and
$space.hairspace.width != ''">
<xsl:value-of select="substring-before($string, ' ')"/>
<fo:leader leader-length="{$space.hairspace.width}"/>
<xsl:call-template name="space.200A.subst">
<xsl:with-param name="string" select="substring-after($string,
' ')"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
I will add this code into the DocBook XSL stylesheets, so it will just
works for them.
Jirka
--
------------------------------------------------------------------
Jirka Kosek e-mail: jirka at kosek.cz http://www.kosek.cz
------------------------------------------------------------------
Profesionální školení a poradenství v oblasti technologií XML.
Podívejte se na náš nově spuštěný web http://DocBook.cz
Podrobný přehled školení http://xmlguru.cz/skoleni/
------------------------------------------------------------------
Nejbližší termíny školení: DocBook 5.-7.12. * XSL-FO 19.-20.12.
XSLT 17.-20.10. * XML schémata (včetně RELAX NG) 7.-9.11.
------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3158 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.renderx.com/pipermail/xep-support/attachments/20051020/04fc859e/attachment.bin>
More information about the Xep-support
mailing list