1<!-- This is the Document Type Definition for font configuration files -->
2<!ELEMENT fontconfig (dir |
3		      cache |
4		      cachedir |
5		      include |
6		      config |
7		      selectfont |
8		      match |
9		      alias)* >
10
11<!--
12    Add a directory that provides fonts
13-->
14<!ELEMENT dir (#PCDATA)>
15<!ATTLIST dir
16	  prefix    CDATA       "default"
17	  xml:space (default|preserve) 'preserve'>
18
19<!--
20    Define the per-user file that holds cache font information.
21
22    If the filename begins with '~', it is replaced with the users
23    home directory path.
24-->
25<!ELEMENT cache (#PCDATA)>
26<!ATTLIST cache xml:space (default|preserve) 'preserve'>
27
28<!--
29    Add a directory that is searched for font cache files.
30    These hold per-directory cache data and are searched in
31    order for each directory. When writing cache files, the first
32    directory which allows the cache file to be created is used.
33
34    A leading '~' in a directory name is replaced with the users
35    home directory path.
36-->
37<!ELEMENT cachedir (#PCDATA)>
38<!ATTLIST cachedir
39	  prefix    CDATA      "default"
40	  xml:space (default|preserve) 'preserve'>
41
42<!--
43    Reference another configuration file; note that this
44    is another complete font configuration file and not
45    just a file included by the XML parser.
46
47    Set 'ignore_missing' to 'yes' if errors are to be ignored.
48
49    If the filename begins with '~', it is replaced with the users
50    home directory path.
51-->
52<!ELEMENT include (#PCDATA)>
53<!ATTLIST include
54	  ignore_missing    (no|yes)		"no"
55	  prefix	    CDATA               "default"
56	  deprecated	    (yes|no)		"no"
57	  xml:space	    (default|preserve)	"preserve">
58
59<!--
60    Global library configuration data
61 -->
62<!ELEMENT config (blank|rescan)*>
63
64<!--
65    Specify the set of Unicode encoding values which
66    represent glyphs that are allowed to contain no
67    data.  With this list, fontconfig can examine
68    fonts for broken glyphs and eliminate them from
69    the set of valid Unicode chars.  This idea
70    was borrowed from Mozilla
71 -->
72<!ELEMENT blank (int|range)*>
73
74<!--
75    Aliases are just a special case for multiple match elements
76
77    They are syntactically equivalent to:
78
79    <match>
80	<test name="family">
81	    <string value=[family]/>
82	</test>
83	<edit name="family" mode="prepend">
84	    <string value=[prefer]/>
85	    ...
86	</edit>
87	<edit name="family" mode="append">
88	    <string value=[accept]/>
89	    ...
90	</edit>
91	<edit name="family" mode="append_last">
92	    <string value=[default]/>
93	    ...
94	</edit>
95    </match>
96-->
97<!--
98    Periodically rescan the font configuration and
99    directories to synch internal state with filesystem
100 -->
101<!ELEMENT rescan (int)>
102
103<!--
104    Edit list of available fonts at startup/reload time
105 -->
106<!ELEMENT selectfont (rejectfont | acceptfont)* >
107
108<!ELEMENT rejectfont (glob | pattern)*>
109
110<!ELEMENT acceptfont (glob | pattern)*>
111
112<!ELEMENT glob (#PCDATA)>
113
114<!ELEMENT pattern (patelt)*>
115
116<!ENTITY % constant 'int|double|string|matrix|bool|charset|langset|const'>
117
118<!ELEMENT patelt (%constant;)*>
119<!ATTLIST patelt
120	  name CDATA	#REQUIRED>
121
122<!ELEMENT alias (test?, family*, prefer?, accept?, default?)>
123<!ATTLIST alias
124	  binding (weak|strong|same) "weak">
125<!ELEMENT prefer (family)*>
126<!ELEMENT accept (family)*>
127<!ELEMENT default (family)*>
128<!ELEMENT family (#PCDATA)>
129<!ATTLIST family xml:space (default|preserve) 'preserve'>
130
131<!ENTITY % expr 'int|double|string|matrix|bool|charset|langset
132		|name|const
133		|or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
134		|plus|minus|times|divide|not|if|floor|ceil|round|trunc'>
135
136<!--
137    Match and edit patterns.
138
139    If 'target' is 'pattern', execute the match before selecting a font.
140    if 'target' is 'font', execute the match on the result of a font
141    selection.
142-->
143<!ELEMENT match (test|edit)+>
144<!ATTLIST match
145	  target (pattern|font|scan) "pattern">
146
147<!--
148    Match a field in a pattern
149
150    if 'qual' is 'any', then the match succeeds if any value in the field matches.
151    if 'qual' is 'all', then the match succeeds only if all values match.
152    if 'qual' is 'first', then the match succeeds only if the first value matches.
153    if 'qual' is 'not_first', then the match succeeds only if any value other than
154    	the first matches.
155    For match elements with target=font, if test 'target' is 'pattern',
156    then the test is applied to the pattern used in matching rather than
157    to the resulting font.
158
159    Match elements with target=scan are applied as fonts are scanned.
160    They edit the pattern generated from the scanned font and affect
161    what the fontconfig database contains.
162-->
163<!ELEMENT test (%expr;)*>
164<!ATTLIST test
165	  qual (any|all|first|not_first)    "any"
166	  name CDATA	    #REQUIRED
167	  target (pattern|font|default)		"default"
168	  ignore-blanks (true|false)	"false"
169	  compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains)	"eq">
170
171<!--
172    Edit a field in a pattern
173
174    The enclosed values are used together to edit the list of values
175    associated with 'name'.
176
177    If 'name' matches one of those used in a test element for this match element:
178	if 'mode' is 'assign', replace the matched value.
179	if 'mode' is 'assign_replace', replace all of the values
180	if 'mode' is 'prepend', insert before the matched value
181	if 'mode' is 'append', insert after the matched value
182	if 'mode' is 'prepend_first', insert before all of the values
183	if 'mode' is 'append_last', insert after all of the values
184    If 'name' doesn't match any of those used in a test element:
185	if 'mode' is 'assign' or 'assign_replace, replace all of the values
186	if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
187	if 'mode' is 'append' or 'append_last', insert after all of the values
188-->
189<!ELEMENT edit (%expr;)*>
190<!ATTLIST edit
191	  name CDATA	    #REQUIRED
192	  mode (assign|assign_replace|prepend|append|prepend_first|append_last|delete|delete_all) "assign"
193	  binding (weak|strong|same) "weak">
194
195<!--
196    Elements of expressions follow
197-->
198<!ELEMENT int (#PCDATA)>
199<!ATTLIST int xml:space (default|preserve) 'preserve'>
200<!ELEMENT double (#PCDATA)>
201<!ATTLIST double xml:space (default|preserve) 'preserve'>
202<!ELEMENT string (#PCDATA)>
203<!ATTLIST string xml:space (default|preserve) 'preserve'>
204<!ELEMENT matrix ((%expr;), (%expr;), (%expr;), (%expr;))>
205<!ELEMENT bool (#PCDATA)>
206<!ELEMENT charset (int|range)*>
207<!ELEMENT range (int,int)>
208<!ELEMENT langset (string)*>
209<!ELEMENT name (#PCDATA)>
210<!ATTLIST name xml:space (default|preserve) 'preserve'
211	  target (default|font|pattern) 'default'>
212<!ELEMENT const (#PCDATA)>
213<!ATTLIST const xml:space (default|preserve) 'preserve'>
214<!ELEMENT or (%expr;)*>
215<!ELEMENT and (%expr;)*>
216<!ELEMENT eq ((%expr;), (%expr;))>
217<!ELEMENT not_eq ((%expr;), (%expr;))>
218<!ELEMENT less ((%expr;), (%expr;))>
219<!ELEMENT less_eq ((%expr;), (%expr;))>
220<!ELEMENT more ((%expr;), (%expr;))>
221<!ELEMENT more_eq ((%expr;), (%expr;))>
222<!ELEMENT contains ((%expr;), (%expr;))>
223<!ELEMENT not_contains ((%expr;), (%expr;))>
224<!ELEMENT plus (%expr;)*>
225<!ELEMENT minus (%expr;)*>
226<!ELEMENT times (%expr;)*>
227<!ELEMENT divide (%expr;)*>
228<!ELEMENT not (%expr;)>
229<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
230<!ELEMENT floor (%expr;)>
231<!ELEMENT ceil (%expr;)>
232<!ELEMENT round (%expr;)>
233<!ELEMENT trunc (%expr;)>
234