?? xhtml2fo.xsl
字號:
<xsl:attribute name="font-family">monospace</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="kbd">
<xsl:attribute name="font-family">monospace</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="samp">
<xsl:attribute name="font-family">monospace</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="big">
<xsl:attribute name="font-size">larger</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="small">
<xsl:attribute name="font-size">smaller</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="sub">
<xsl:attribute name="baseline-shift">sub</xsl:attribute>
<xsl:attribute name="font-size">smaller</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="sup">
<xsl:attribute name="baseline-shift">super</xsl:attribute>
<xsl:attribute name="font-size">smaller</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="s">
<xsl:attribute name="text-decoration">line-through</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="strike">
<xsl:attribute name="text-decoration">line-through</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="del">
<xsl:attribute name="text-decoration">line-through</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="u">
<xsl:attribute name="text-decoration">underline</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="ins">
<xsl:attribute name="text-decoration">underline</xsl:attribute>
</xsl:attribute-set>
<xsl:attribute-set name="abbr">
<!-- e.g.,
<xsl:attribute name="font-variant">small-caps</xsl:attribute>
<xsl:attribute name="letter-spacing">0.1em</xsl:attribute>
-->
</xsl:attribute-set>
<xsl:attribute-set name="acronym">
<!-- e.g.,
<xsl:attribute name="font-variant">small-caps</xsl:attribute>
<xsl:attribute name="letter-spacing">0.1em</xsl:attribute>
-->
</xsl:attribute-set>
<xsl:attribute-set name="q"/>
<xsl:attribute-set name="q-nested"/>
<!--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Image
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
<xsl:attribute-set name="img">
</xsl:attribute-set>
<xsl:attribute-set name="img-link">
<xsl:attribute name="border">2px solid</xsl:attribute>
</xsl:attribute-set>
<!--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Link
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
<xsl:attribute-set name="a-link">
<xsl:attribute name="text-decoration">underline</xsl:attribute>
<xsl:attribute name="color">blue</xsl:attribute>
</xsl:attribute-set>
<!--======================================================================
Templates
=======================================================================-->
<!--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Root
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
<xsl:template match="html">
<fo:root xsl:use-attribute-sets="root">
<xsl:call-template name="process-common-attributes"/>
<xsl:call-template name="make-layout-master-set"/>
<xsl:apply-templates/>
</fo:root>
</xsl:template>
<xsl:template name="make-layout-master-set">
<fo:layout-master-set>
<fo:simple-page-master master-name="all-pages"
xsl:use-attribute-sets="page">
<fo:region-body margin-top="{$page-margin-top}"
margin-right="{$page-margin-right}"
margin-bottom="{$page-margin-bottom}"
margin-left="{$page-margin-left}"
column-count="{$column-count}"
column-gap="{$column-gap}"/>
<xsl:choose>
<xsl:when test="$writing-mode = 'tb-rl'">
<fo:region-before extent="{$page-margin-right}"
precedence="true"/>
<fo:region-after extent="{$page-margin-left}"
precedence="true"/>
<fo:region-start region-name="page-header"
extent="{$page-margin-top}"
writing-mode="lr-tb"
display-align="before"/>
<fo:region-end region-name="page-footer"
extent="{$page-margin-bottom}"
writing-mode="lr-tb"
display-align="after"/>
</xsl:when>
<xsl:when test="$writing-mode = 'rl-tb'">
<fo:region-before region-name="page-header"
extent="{$page-margin-top}"
display-align="before"/>
<fo:region-after region-name="page-footer"
extent="{$page-margin-bottom}"
display-align="after"/>
<fo:region-start extent="{$page-margin-right}"/>
<fo:region-end extent="{$page-margin-left}"/>
</xsl:when>
<xsl:otherwise><!-- $writing-mode = 'lr-tb' -->
<fo:region-before region-name="page-header"
extent="{$page-margin-top}"
display-align="before"/>
<fo:region-after region-name="page-footer"
extent="{$page-margin-bottom}"
display-align="after"/>
<fo:region-start extent="{$page-margin-left}"/>
<fo:region-end extent="{$page-margin-bottom}"/>
</xsl:otherwise>
</xsl:choose>
</fo:simple-page-master>
</fo:layout-master-set>
</xsl:template>
<xsl:template match="head | script"/>
<xsl:template match="body">
<fo:page-sequence master-reference="all-pages">
<fo:title>
<xsl:value-of select="/html/head/title"/>
</fo:title>
<fo:static-content flow-name="page-header">
<fo:block space-before.conditionality="retain"
space-before="{$page-header-margin}"
xsl:use-attribute-sets="page-header">
<xsl:if test="$title-print-in-header = 'true'">
<xsl:value-of select="/html/head/title"/>
</xsl:if>
</fo:block>
</fo:static-content>
<fo:static-content flow-name="page-footer">
<fo:block space-after.conditionality="retain"
space-after="{$page-footer-margin}"
xsl:use-attribute-sets="page-footer">
<xsl:if test="$page-number-print-in-footer = 'true'">
<xsl:text>- </xsl:text>
<fo:page-number/>
<xsl:text> -</xsl:text>
</xsl:if>
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block xsl:use-attribute-sets="body">
<xsl:call-template name="process-common-attributes"/>
<xsl:apply-templates/>
</fo:block>
</fo:flow>
</fo:page-sequence>
</xsl:template>
<!--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
process common attributes and children
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
<xsl:template name="process-common-attributes-and-children">
<xsl:call-template name="process-common-attributes"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template name="process-common-attributes">
<xsl:attribute name="role">
<xsl:value-of select="concat('', local-name())"/>
</xsl:attribute>
<xsl:choose>
<xsl:when test="@xml:lang">
<xsl:attribute name="xml:lang">
<xsl:value-of select="@xml:lang"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="@lang">
<xsl:attribute name="xml:lang">
<xsl:value-of select="@lang"/>
</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="@id">
<xsl:attribute name="id">
<xsl:value-of select="@id"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="self::a/@name">
<xsl:attribute name="id">
<xsl:value-of select="@name"/>
</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:if test="@align">
<xsl:choose>
<xsl:when test="self::caption">
</xsl:when>
<xsl:when test="self::img or self::object">
<xsl:if test="@align = 'bottom' or @align = 'middle' or @align = 'top'">
<xsl:attribute name="vertical-align">
<xsl:value-of select="@align"/>
</xsl:attribute>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="process-cell-align">
<xsl:with-param name="align" select="@align"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="@valign">
<xsl:call-template name="process-cell-valign">
<xsl:with-param name="valign" select="@valign"/>
</xsl:call-template>
</xsl:if>
<xsl:if test="@style">
<xsl:call-template name="process-style">
<xsl:with-param name="style" select="@style"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="process-style">
<xsl:param name="style"/>
<!-- e.g., style="text-align: center; color: red"
converted to text-align="center" color="red" -->
<xsl:variable name="name"
select="normalize-space(substring-before($style, ':'))"/>
<xsl:if test="$name">
<xsl:variable name="value-and-rest"
select="normalize-space(substring-after($style, ':'))"/>
<xsl:variable name="value">
<xsl:choose>
<xsl:when test="contains($value-and-rest, ';')">
<xsl:value-of select="normalize-space(substring-before(
$value-and-rest, ';'))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$value-and-rest"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:choose>
<xsl:when test="$name = 'width' and (self::col or self::colgroup)">
<xsl:attribute name="column-width">
<xsl:value-of select="$value"/>
</xsl:attribute>
</xsl:when>
<xsl:when test="$name = 'vertical-align' and (
self::table or self::caption or
self::thead or self::tfoot or
self::tbody or self::colgroup or
self::col or self::tr or
self::th or self::td)">
<xsl:choose>
<xsl:when test="$value = 'top'">
<xsl:attribute name="display-align">before</xsl:attribute>
</xsl:when>
<xsl:when test="$value = 'bottom'">
<xsl:attribute name="display-align">after</xsl:attribute>
</xsl:when>
<xsl:when test="$value = 'middle'">
<xsl:attribute name="display-align">center</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="display-align">auto</xsl:attribute>
<xsl:attribute name="relative-align">baseline</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="{$name}">
<xsl:value-of select="$value"/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:variable name="rest"
select="normalize-space(substring-after($style, ';'))"/>
<xsl:if test="$rest">
<xsl:call-template name="process-style">
<xsl:with-param name="style" select="$rest"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<!--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Block-level
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-->
<xsl:template match="h1">
<fo:block xsl:use-attribute-sets="h1">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<xsl:template match="h2">
<fo:block xsl:use-attribute-sets="h2">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<xsl:template match="h3">
<fo:block xsl:use-attribute-sets="h3">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<xsl:template match="h4">
<fo:block xsl:use-attribute-sets="h4">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<xsl:template match="h5">
<fo:block xsl:use-attribute-sets="h5">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<xsl:template match="h6">
<fo:block xsl:use-attribute-sets="h6">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<xsl:template match="p">
<fo:block xsl:use-attribute-sets="p">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<!-- initial paragraph, preceded by h1..6 or div -->
<xsl:template match="p[preceding-sibling::*[1][
self::h1 or self::h2 or self::h3 or
self::h4 or self::h5 or self::h6 or
self::div]]">
<fo:block xsl:use-attribute-sets="p-initial">
<xsl:call-template name="process-common-attributes-and-children"/>
</fo:block>
</xsl:template>
<!-- initial paragraph, first child of div, body or td -->
<xsl:template match="p[not(preceding-sibling::*) and (
parent::div or parent::body or
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -