2. How it works

2.1. Putting named styles to work

Named styles are specified in an XML file conforming to the styles.xsd schema. The recommended extension for this kind of file is ".xfc". Simple example, sample0.xfc:

<styles xmlns="http://www.xmlmind.com/foconverter/xsl/extensions"
        xmlns:xfc="http://www.xmlmind.com/foconverter/xsl/extensions">

  <text-style name="Warning" font-weight="bold" color="red" />

</styles>

The location of the .xfc file containing the style definitions must be passed as the value of the styles parameter to XFC, for example by the means of the -styles command-line option .

The named styled is referenced by the means of the xfc:user-style extension attribute. Simple example, sample0.fo:

<fo:block>During take-off and landing, 
  <fo:inline xfc:user-style="Warning">always keep your seat belt 
  fastened</fo:inline>.</fo:block>

Command-line example:

fo2docx -styles=sample0.xfc sample0.fo sample0.docx

2.2. The effect of the xfc:user-style extension attribute on an XSL-FO element

If set on a fo:inline element, attribute xfc:user-style must reference the name of an existing xfc:text-style element. If set on a fo:block element, attribute xfc:user-style must reference the name of an existing xfc:paragraph-style element.

The following fo:inline element

<fo:inline xfc:user-style="Warning">always keep your seat belt 
fastened</fo:inline>

is rendered by the target word processor exactly as if it was specified as[10]:

<fo:inline font-weight="bold" color="red">always keep your seat belt 
fastened</fo:inline>

The main difference between the two specifications is that, with the first specification, the user of the word processor may use the style editor to specify, for example, that all warning text runs are to be rendered in orange rather than in red.

Figure 6.1. The style editor of MS-Word 2007
The style editor of MS-Word 2007

The second specification is said to generate direct style properties on the resulting text run. When this is the case, there is no way for the user of the word processor to use the style editor to specify that all warning text runs are to be rendered in orange rather than in red.

It's of course possible, and often useful, to mix xfc:user-style with standard XSL-FO attributes:

  • In the following example, redundant attributes such as font-weight="bold" an color="red" (already contained in the "Warning" text-style) are simply ignored by XFC:

    <fo:inline xfc:user-style="Warning"
               font-weight="bold" color="red">always keep your seat belt 
    fastened</fo:inline>

    This is an important feature as we'll see it in Section 5, “Adding named styles support to an existing XSLT stylesheet”.

  • With the following snippet, the resulting warning text run will be rendered using a bold, italic, font and a red color:

    <fo:inline xfc:user-style="Warning"
               font-style="italic">always keep your seat belt 
    fastened</fo:inline>
  • With the following snippet, the resulting warning text run will be rendered using a bold font and a blue color:

    <fo:inline xfc:user-style="Warning"
               color="blue">always keep your seat belt 
    fastened</fo:inline>

    Directly specified attribute color="blue" overrides the color="red" attribute found in the "Warning" text-style.

  • With the following snippet, the resulting warning text run will be rendered using a bold, italic, larger font and a red color:

    <fo:block font-weight="normal"
              font-style="italic" font-size="larger">During take-off and landing, 
      <fo:inline xfc:user-style="Warning">always keep your seat belt 
      fastened</fo:inline>.</fo:block>

    Attributes font-weight="normal", font-style="italic" and font-size="larger" are inherited by the fo:inline from its parent fo:block. However, inherited attribute font-weight="normal" has no effect on the resulting warning text run as the "Warning" text-style contains attribute font-weight="bold".



[10] XFC named styles are similar to XSLT xsl:attribute-sets. However xsl:attribute-set elements are processed by the XSLT engine, while text-style and paragraph-style elements are processed by XFC (which is an XSL-FO processor, and not an XSLT engine).