Blob Blame History Raw
<?xml version="1.0" encoding="UTF-8"?>
<!-- Registers DejaVu fonts in fonts.conf
     © 2003-2006 Nicolas Mailhot <nicolas.mailhot at laposte.net>
     This file is distributed under the terms of the GNU General
     Public License (GPL) version 2. Copies of the GPL can be obtained from:
     http://www.gnu.org/licenses/gpl.html
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:strip-space elements="*"/>
  <xsl:output method="xml" indent="yes" encoding="UTF-8" doctype-system="fonts.dtd"/>
<!-- Preserve most nodes -->
  <xsl:template match="*" priority="0">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
  </xsl:template>
<!-- Preserve attributes and comments -->
  <xsl:template match="@*|comment()">
    <xsl:copy/>
  </xsl:template>
<!-- Take care of default families -->
<!-- sans-serif -->
  <xsl:template match="fontconfig/alias[default[family = 'sans-serif'] and not(family = 'DejaVu Sans')]/family[1]" priority="1">
    <family>DejaVu Sans</family>
      <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates select="*|text()|comment()"/>
      </xsl:copy>
  </xsl:template>
<!-- serif -->
  <xsl:template match="fontconfig/alias[default[family = 'serif'] and not(family = 'DejaVu Serif')]/family[1]" priority="1">
    <family>DejaVu Serif</family>
      <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates select="*|text()|comment()"/>
      </xsl:copy>
  </xsl:template>
<!-- monospace -->
  <xsl:template match="fontconfig/alias[default[family = 'monospace'] and not(family = 'DejaVu Sans Mono')]/family[1]" priority="1">
    <family>DejaVu Sans Mono</family>
      <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates select="*|text()|comment()"/>
      </xsl:copy>
  </xsl:template>
<!-- Take care of alias priorities -->
<!-- Registers serif alias -->
  <xsl:template match="fontconfig/alias[family = 'serif']/prefer[not(family='DejaVu Serif') and not(family='Bitstream Vera Serif')]/family[1]" priority="2">
    <family>DejaVu Serif</family>
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="fontconfig/alias[family = 'serif']/prefer[not(family='DejaVu Serif')]/family[text()='Bitstream Vera Serif']" priority="1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
    <family>DejaVu Serif</family>
  </xsl:template>
<!-- Registers sans-serif alias -->
  <xsl:template match="fontconfig/alias[family = 'sans-serif']/prefer[not(family='DejaVu Sans') and not(family='Bitstream Vera Sans')]/family[1]" priority="2">
    <family>DejaVu Sans</family>
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="fontconfig/alias[family = 'sans-serif']/prefer[not(family='DejaVu Sans')]/family[text()='Bitstream Vera Sans']" priority="1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
    <family>DejaVu Sans</family>
  </xsl:template>
<!-- Registers monospace alias -->
  <xsl:template match="fontconfig/alias[family = 'monospace']/prefer[not(family='DejaVu Sans Mono') and not(family='Bitstream Vera Sans Mono')]/family[1]" priority="2">
    <family>DejaVu Sans Mono</family>
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="fontconfig/alias[family = 'monospace']/prefer[not(family='DejaVu Sans Mono')]/family[text()='Bitstream Vera Sans Mono']" priority="1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
    <family>DejaVu Sans Mono</family>
  </xsl:template>
<!-- Create Vera aliases -->
  <xsl:template match="fontconfig/alias[family='Bitstream Vera Sans']/accept[not(family='DejaVu Sans')]/family[position()=last()]" priority="1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
    <family>DejaVu Sans</family> 
  </xsl:template>
  <xsl:template match="fontconfig/alias[family='Bitstream Vera Serif']/accept[not(family='DejaVu Serif')]/family[position()=last()]" priority="1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
    <family>DejaVu Serif</family>
  </xsl:template>
  <xsl:template match="fontconfig/alias[family='Bitstream Vera Sans Mono']/accept[not(family='DejaVu Sans Mono')]/family[position()=last()]" priority="1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
    <family>DejaVu Sans Mono</family>
  </xsl:template>
  <xsl:template match="fontconfig/alias[accept][position()=last()]" priority="1">
    <xsl:copy>
      <xsl:apply-templates select="@*"/>
      <xsl:apply-templates select="*|text()|comment()"/>
    </xsl:copy>
    <xsl:if test="not(/fontconfig/alias[family='Bitstream Vera Sans']/accept)">
      <alias>
        <family>Bitstream Vera Sans</family>
        <accept>
          <family>Bitstream Vera Sans</family>
          <family>DejaVu Sans</family>
        </accept>
      </alias>
    </xsl:if>
    <xsl:if test="not(/fontconfig/alias[family='Bitstream Vera Serif']/accept)">
      <alias>
        <family>Bitstream Vera Serif</family>
        <accept>
          <family>Bitstream Vera Serif</family>
          <family>DejaVu Serif</family>
        </accept>
      </alias>
    </xsl:if>
    <xsl:if test="not(/fontconfig/alias[family='Bitstream Vera Sans Mono']/accept)">
      <alias>
        <family>Bitstream Vera Sans Mono</family>
        <accept>
          <family>Bitstream Vera Sans Mono</family>
          <family>DejaVu Sans Mono</family>
        </accept>
      </alias>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>