[Fontconfig] Configuration file for Persian fonts

Behdad Esfahbod behdad at cs.toronto.edu
Tue Aug 30 07:46:46 EST 2005


Hi,

A few months ago I spent some time figuring out how fontconfig
works and to write a configuration file for Persian fonts.

The most confusing part I found was the change in the DTD, namely
the accept/reject lists, and the change form size to pixelsize,
or is it a change in another library that has been triggering me?

Anyway, I have attached my config file for review.  It basically
tries to handle transliteration variants of all Persian family
names, but doesn't support native names yet.

I'm interested in getting feedback on how the default config of
other scripts is supposed to look like.  Should it be in a
separate file, or simply list the families in fonts.conf, like
some are already listed.  Etc.


Thanks in advance,

--behdad
http://behdad.org/
-------------- next part --------------
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!--
  /etc/fonts/conf.d/fonts-persian.conf file to configure
  Persian fonts from FarsiWeb Project.

  Copyright (C) 2005  Sharif FarsiWeb, Inc. <license at farsiweb.info>

  ChangeLog:
    2005-04-03  Behdad Esfahbod:  Initial revision.


  Todo:
    Add generic font "fantasy".  Add some fonts into that category.
    Maybe add a "cursive" generic font.
  -->
<fontconfig>


<!--
  We don't want weak bindings.  So got to use the syntactical expansion
  of alias tag to do binding=same :(.  Please support that in alias.
  -->


<!-- Deprecated fonts are discouraged -->

	<!-- Nesf[2] is officially deprecated and has problematic tables -->
	<match>
		<test name="family">
			<string>Nesf</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Nesf2</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Nesf2</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Persian_sansserif_default</string>
		</edit>
	</match>

	<!-- Tahoma looks awful -->
	<match>
		<test name="family">
			<string>Tahoma</string>
		</test>
		<edit name="family" mode="prepend" binding="same">
			<string>Persian_sansserif_default</string>
		</edit>
	</match>

<!-- Name changes and spelling variant aliases -->

	<!-- Changed due to trademark problems -->
	<match>
		<test name="family">
			<string>Nazanin</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Nazli</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Lotus</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Lotoos</string>
		</edit>
	</match>

	<!-- Changed due to transcription orthography -->
	<match>
		<test name="family">
			<string>Yaqut</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Yaghoot</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Yagut</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Yaghoot</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Yaghut</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Yaghoot</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Traffic</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Terafik</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Ferdowsi</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Ferdosi</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Fantezy</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Fantezi</string>
		</edit>
	</match>


<!-- Classify fonts. -->

	<!-- Persian_title class -->
	<match>
		<test name="family">
			<string>Jadid</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_title</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Titr</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_title</string>
		</edit>
	</match>

	<!-- Persian_fantasy class -->
	<match>
		<test name="family">
			<string>Kamran</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Homa</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Persian_fantasy</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Homa</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Kamran</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Persian_fantasy</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Fantezi</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_fantasy</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Tabassom</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_fantasy</string>
		</edit>
	</match>

	<!-- Persian_square class -->
	<match>
		<test name="family">
			<string>Arshia</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_square</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Nasim</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_square</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Elham</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Farnaz</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Persian_square</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Farnaz</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Elham</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Persian_square</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Sina</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_square</string>
		</edit>
	</match>

<!-- Font ordering per class -->

	<!-- Persian_title class -->
	<match>
		<test name="family">
			<string>Persian_title</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_serif</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Jadid</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Titr</string>
		</edit>
	</match>

	<!-- Persian_fantasy class -->
	<match>
		<test name="family">
			<string>Persian_fantasy</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_square</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Tabassom</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Fantezi</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Kamran</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Homa</string>
		</edit>
	</match>

	<!-- Persian_square class -->
	<match>
		<test name="family">
			<string>Persian_square</string>
		</test>
		<edit name="family" mode="append" binding="same">
			<string>Persian_serif</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Sina</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Nasim</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Farnaz</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Elham</string>
		</edit>
		<edit name="family" mode="append" binding="same">
			<string>Arshia</string>
		</edit>
	</match>

<!-- Register the fonts that we actually do have -->

	<match target="font">
		<test name="family">
			<string>Elham</string>
		</test>
		<edit name="foundry">
			<string>farsiweb</string>
		</edit>
	</match>

	<match target="font">
		<test name="family">
			<string>Homa</string>
		</test>
		<edit name="foundry">
			<string>farsiweb</string>
		</edit>
		<edit name="embolden">
			<bool>true</bool>
		</edit>
	</match>

	<match target="font">
		<test name="family">
			<string>Koodak</string>
		</test>
		<edit name="foundry">
			<string>farsiweb</string>
		</edit>
		<edit name="embolden">
			<bool>true</bool>
		</edit>
	</match>

	<match target="font">
		<test name="family">
			<string>Nazli</string>
		</test>
		<edit name="foundry">
			<string>farsiweb</string>
		</edit>
	</match>

	<match target="font">
		<test name="family">
			<string>Roya</string>
		</test>
		<edit name="foundry">
			<string>farsiweb</string>
		</edit>
	</match>

	<match target="font">
		<test name="family">
			<string>Terafik</string>
		</test>
		<edit name="foundry">
			<string>farsiweb</string>
		</edit>
	</match>

	<match target="font">
		<test name="family">
			<string>Titr</string>
		</test>
		<edit name="foundry">
			<string>farsiweb</string>
		</edit>
	</match>


<!-- Our fonts should oblique to the other side -->

	<match target="font">
		<test name="foundry">
			<string>farsiweb</string>
		</test>
		<!-- check to see if the font is roman -->
		<test name="slant">
			<const>roman</const>
		</test>
		<!-- check to see if the pattern requested non-roman -->
		<test target="pattern" name="slant" compare="not_eq">
			<const>roman</const>
		</test>
		<!-- multiply the matrix to slant the font -->
		<edit name="matrix" mode="assign">
			<times>
				<name>matrix</name>
				<matrix><double>1</double><double>-0.2</double>
					<double>0</double><double>1</double>
				</matrix>
			</times>
		</edit>
		<!-- pretend the font is oblique now -->
		<edit name="slant" mode="assign">
			<const>oblique</const>
		</edit>
	</match>


<!--
  We can't hint our fonts well, so turn off hinting.
  Moreover, the bitmaps we have designed (well, they
  have designed), suck, so disable them too.
  -->

	<match target="font">
		<test name="foundry">
			<string>farsiweb</string>
		</test>
		<edit name="autohint">
			<bool>false</bool>
		</edit>
		<edit name="hinting">
			<bool>false</bool>
		</edit>
 		<edit name="rh_prefer_bitmaps">
 			<bool>false</bool>
 		</edit>
	</match>


<!-- Alias our fonts to common families -->

	<!-- Persian serif fonts -->
	<alias>
		<family>serif</family>
		<accept>
			<family>Nazli</family>
			<family>Lotoos</family>
			<family>Mitra</family>
			<family>Ferdosi</family>
			<family>Badr</family>
			<family>Zar</family>
		</accept>
	</alias>

	<!-- Persian sans-serif fonts -->
	<alias>
		<family>sans-serif</family>
		<accept>
			<family>Roya</family>
			<family>Koodak</family>
			<family>Terafik</family>
		</accept>
	</alias>

	<!-- Persian monospace fonts -->
	<alias>
		<family>monospace</family>
		<accept>
			<!-- Not really monospace -->
			<family>Terafik</family>
		</accept>
	</alias>


<!-- Use Titr in titles -->

	<!-- Both serif... -->
	<match>
		<test name="family">
			<string>serif</string>
		</test>
		<test name="weight" compare="more_eq">
			<int>200</int>
		</test>
		<test name="size" compare="more_eq">
			<double>18</double>
		</test>
		<edit name="family" mode="prepend">
			<string>Titr</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>serif</string>
		</test>
		<test name="weight" compare="more_eq">
			<int>200</int>
		</test>
		<test name="pixelsize" compare="more_eq">
			<double>18</double>
		</test>
		<edit name="family" mode="prepend">
			<string>Titr</string>
		</edit>
	</match>

	<!-- and sans-serif. -->
	<match>
		<test name="family">
			<string>sans-serif</string>
		</test>
		<test name="weight" compare="more_eq">
			<int>200</int>
		</test>
		<test name="size" compare="more_eq">
			<double>18</double>
		</test>
		<edit name="family" mode="prepend">
			<string>Titr</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>sans-serif</string>
		</test>
		<test name="weight" compare="more_eq">
			<int>200</int>
		</test>
		<test name="pixelsize" compare="more_eq">
			<double>18</double>
		</test>
		<edit name="family" mode="prepend">
			<string>Titr</string>
		</edit>
	</match>

	<!-- and more. -->
	<match>
		<test name="family">
			<string>Persian_sansserif_default</string>
		</test>
		<test name="weight" compare="more_eq">
			<int>200</int>
		</test>
		<test name="size" compare="more_eq">
			<double>18</double>
		</test>
		<edit name="family" mode="prepend" binding="same">
			<string>Titr</string>
		</edit>
	</match>
	<match>
		<test name="family">
			<string>Persian_sansserif_default</string>
		</test>
		<test name="weight" compare="more_eq">
			<int>200</int>
		</test>
		<test name="pixelsize" compare="more_eq">
			<double>18</double>
		</test>
		<edit name="family" mode="prepend" binding="same">
			<string>Titr</string>
		</edit>
	</match>


<!-- Default substituted for deprecated sans-serif fonts -->

	<match>
		<test name="family">
			<string>Persian_sansserif_default</string>
		</test>
		<edit name="family" mode="assign" binding="same">
			<string>Roya</string>
		</edit>
	</match>

</fontconfig>


More information about the Fontconfig mailing list