1056N/A<?xml version="1.0" encoding="UTF-8"?>
1056N/A<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1276N/A<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>X Logical Font Description Conventions</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot_9276" /><style xmlns="" type="text/css">/*
1276N/A * Copyright (c) 2011 Gaetan Nadon
1276N/A * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
1276N/A *
1276N/A * Permission is hereby granted, free of charge, to any person obtaining a
1276N/A * copy of this software and associated documentation files (the "Software"),
1276N/A * to deal in the Software without restriction, including without limitation
1276N/A * the rights to use, copy, modify, merge, publish, distribute, sublicense,
1276N/A * and/or sell copies of the Software, and to permit persons to whom the
1276N/A * Software is furnished to do so, subject to the following conditions:
1276N/A *
1276N/A * The above copyright notice and this permission notice (including the next
1276N/A * paragraph) shall be included in all copies or substantial portions of the
1276N/A * Software.
1276N/A *
1276N/A * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1276N/A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1276N/A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
1276N/A * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1276N/A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1276N/A * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1276N/A * DEALINGS IN THE SOFTWARE.
1276N/A */
1276N/A
1276N/A/*
1276N/A * Shared stylesheet for X.Org documentation translated to HTML format
1276N/A * http://www.sagehill.net/docbookxsl/UsingCSS.html
1276N/A * http://www.w3schools.com/css/default.asp
1276N/A * https://addons.mozilla.org/en-US/firefox/addon/web-developer/developers
1276N/A * https://addons.mozilla.org/en-US/firefox/addon/font-finder/
1276N/A */
1276N/A
1276N/A/*
1276N/A * The sans-serif fonts are considered more legible on a computer screen
1276N/A * http://dry.sailingissues.com/linux-equivalents-verdana-arial.html
1276N/A *
1276N/A */
1276N/Abody {
1276N/A font-family: "Bitstream Vera Sans", "DejaVu Sans", Tahoma, Geneva, Arial, Sans-serif;
1276N/A /* In support of using "em" font size unit, the w3c recommended method */
1276N/A font-size: 100%;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: all elements requiring mono spaced fonts.
1276N/A *
1276N/A * The family names attempt to match the proportionally spaced font
1276N/A * family names such that the same font name is used for both.
1276N/A * We'd like to use Bitstream, for example, in both proportionally and
1276N/A * mono spaced font text.
1276N/A */
1276N/A.command,
1276N/A.errorcode,
1276N/A.errorname,
1276N/A.errortype,
1276N/A.filename,
1276N/A.funcsynopsis,
1276N/A.function,
1276N/A.parameter,
1276N/A.programlisting,
1276N/A.property,
1276N/A.screen,
1276N/A.structname,
1276N/A.symbol,
1276N/A.synopsis,
1276N/A.type
1276N/A{
1276N/A font-family: "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Courier, "Liberation Mono", Monospace;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Books have a title page, a preface, some chapters and appendices,
1276N/A * a glossary, an index and a bibliography, in that order.
1276N/A *
1276N/A * An Article has no preface and no chapters. It has sections, appendices,
1276N/A * a glossary, an index and a bibliography.
1276N/A */
1276N/A
1276N/A/*
1276N/A * Selection: book main title and subtitle
1276N/A */
1276N/Adiv.book>div.titlepage h1.title,
1276N/Adiv.book>div.titlepage h2.subtitle {
1276N/A text-align: center;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: article main title and subtitle
1276N/A */
1276N/Adiv.article>div.titlepage h2.title,
1276N/Adiv.article>div.titlepage h3.subtitle,
1276N/Adiv.article>div.sect1>div.titlepage h2.title,
1276N/Adiv.article>div.section>div.titlepage h2.title {
1276N/A text-align: center;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: various types of authors and collaborators, individuals or corporate
1276N/A *
1276N/A * These authors are not always contained inside an authorgroup.
1276N/A * They can be contained inside a lot of different parent types where they might
1276N/A * not be centered.
1276N/A * Reducing the margin at the bottom makes a visual separation between authors
1276N/A * We specify here the ones on the title page, others may be added based on merit.
1276N/A */
1276N/Adiv.titlepage .authorgroup,
1276N/Adiv.titlepage .author,
1276N/Adiv.titlepage .collab,
1276N/Adiv.titlepage .corpauthor,
1276N/Adiv.titlepage .corpcredit,
1276N/Adiv.titlepage .editor,
1276N/Adiv.titlepage .othercredit {
1276N/A text-align: center;
1276N/A margin-bottom: 0.25em;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: the affiliation of various types of authors and collaborators,
1276N/A * individuals or corporate.
1276N/A */
1276N/Adiv.titlepage .affiliation {
1276N/A text-align: center;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: product release information (X Version 11, Release 7)
1276N/A *
1276N/A * The releaseinfo element can be contained inside a lot of different parent
1276N/A * types where it might not be centered.
1276N/A * We specify here the one on the title page, others may be added based on merit.
1276N/A */
1276N/Adiv.titlepage p.releaseinfo {
1276N/A font-weight: bold;
1276N/A text-align: center;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: publishing date
1276N/A */
1276N/Adiv.titlepage .pubdate {
1276N/A text-align: center;
1276N/A}
1276N/A
1276N/A/*
1276N/A * The legal notices are displayed in smaller sized fonts
1276N/A * Justification is only supported in IE and therefore not requested.
1276N/A *
1276N/A */
1276N/A.legalnotice {
1276N/A font-size: small;
1276N/A font-style: italic;
1276N/A}
1276N/A
1276N/A/*
1276N/A * For documentation having multiple licenses, the copyright and legalnotice
1276N/A * elements sequence cannot instantiated multiple times.
1276N/A * The copyright notice and license text are therefore coded inside a legalnotice
1276N/A * element. The role attribute on the paragraph is used to allow styling of the
1276N/A * copyright notice text which should not be italicized.
1276N/A */
1276N/Ap.multiLicensing {
1276N/A font-style: normal;
1276N/A font-size: medium;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: book or article main ToC title
1276N/A * A paragraph is generated for the title rather than a level 2 heading.
1276N/A * We do not want to select chapters sub table of contents, only the main one
1276N/A */
1276N/Adiv.book>div.toc>p,
1276N/Adiv.article>div.toc>p {
1276N/A font-size: 1.5em;
1276N/A text-align: center;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: major sections of a book or an article
1276N/A *
1276N/A * Unlike books, articles do not have a titlepage element for appendix.
1276N/A * Using the selector "div.titlepage h2.title" would be too general.
1276N/A */
1276N/Adiv.book>div.preface>div.titlepage h2.title,
1276N/Adiv.book>div.chapter>div.titlepage h2.title,
1276N/Adiv.article>div.sect1>div.titlepage h2.title,
1276N/Adiv.article>div.section>div.titlepage h2.title,
1276N/Adiv.book>div.appendix>div.titlepage h2.title,
1276N/Adiv.article>div.appendix h2.title,
1276N/Adiv.glossary>div.titlepage h2.title,
1276N/Adiv.index>div.titlepage h2.title,
1276N/Adiv.bibliography>div.titlepage h2.title {
1276N/A /* Add a border top over the major parts, just like printed books */
1276N/A /* The Gray color is already used for the ruler over the main ToC. */
1276N/A border-top-style: solid;
1276N/A border-top-width: 2px;
1276N/A border-top-color: Gray;
1276N/A /* Put some space between the border and the title */
1276N/A padding-top: 0.2em;
1276N/A text-align: center;
1276N/A}
1276N/A
1276N/A/*
1276N/A * A Screen is a verbatim environment for displaying text that the user might
1276N/A * see on a computer terminal. It is often used to display the results of a command.
1276N/A *
1276N/A * http://www.css3.info/preview/rounded-border/
1276N/A */
1276N/A.screen {
1276N/A background: #e0ffff;
1276N/A border-width: 1px;
1276N/A border-style: solid;
1276N/A border-color: #B0C4DE;
1276N/A border-radius: 1.0em;
1276N/A /* Browser's vendor properties prior to CSS 3 */
1276N/A -moz-border-radius: 1.0em;
1276N/A -webkit-border-radius: 1.0em;
1276N/A -khtml-border-radius: 1.0em;
1276N/A margin-left: 1.0em;
1276N/A margin-right: 1.0em;
1276N/A padding: 0.5em;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Emphasis program listings with a light shade of gray similar to what
1276N/A * DocBook XSL guide does: http://www.sagehill.net/docbookxsl/ProgramListings.html
1276N/A * Found many C API docs on the web using like shades of gray.
1276N/A */
1276N/A.programlisting {
1276N/A background: #F4F4F4;
1276N/A border-width: 1px;
1276N/A border-style: solid;
1276N/A border-color: Gray;
1276N/A padding: 0.5em;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Emphasis functions synopsis using a darker shade of gray.
1276N/A * Add a border such that it stands out more.
1276N/A * Set the padding so the text does not touch the border.
1276N/A */
1276N/A.funcsynopsis, .synopsis {
1276N/A background: #e6e6fa;
1276N/A border-width: 1px;
1276N/A border-style: solid;
1276N/A border-color: Gray;
1276N/A clear: both;
1276N/A margin: 0.5em;
1276N/A padding: 0.25em;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: paragraphs inside synopsis
1276N/A *
1276N/A * Removes the default browser margin, let the container set the padding.
1276N/A * Paragraphs are not always used in synopsis
1276N/A */
1276N/A.funcsynopsis p,
1276N/A.synopsis p {
1276N/A margin: 0;
1276N/A padding: 0;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: variable lists, informal tables and tables
1276N/A *
1276N/A * Note the parameter name "variablelist.as.table" in xorg-xhtml.xsl
1276N/A * A table with rows and columns is constructed inside div.variablelist
1276N/A *
1276N/A * Set the left margin so it is indented to the right
1276N/A * Display informal tables with single line borders
1276N/A */
1276N/Atable {
1276N/A margin-left: 0.5em;
1276N/A border-collapse: collapse;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Selection: paragraphs inside tables
1276N/A *
1276N/A * Removes the default browser margin, let the container set the padding.
1276N/A * Paragraphs are not always used in tables
1276N/A */
1276N/Atd p {
1276N/A margin: 0;
1276N/A padding: 0;
1276N/A}
1276N/A
1276N/A/*
1276N/A * Add some space between the left and right column.
1276N/A * The vertical alignment helps the reader associate a term
1276N/A * with a multi-line definition.
1276N/A */
1276N/Atd, th {
1276N/A padding-left: 1.0em;
1276N/A padding-right: 1.0em;
1276N/A vertical-align: top;
1276N/A}
1276N/A
1276N/A.warning {
1276N/A border: 1px solid red;
1276N/A background: #FFFF66;
1276N/A padding-left: 0.5em;
1276N/A}
1276N/A</style></head><body><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="xlfd"></a>X Logical Font Description Conventions</h1></div><div><h2 class="subtitle">X Consortium Standard</h2></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname">Jim</span> <span class="surname">Flowers</span></h3><div class="affiliation"><span class="orgname">Digital Equipment Corporation<br /></span></div></div><div class="editor"><h4 class="editedby">Edited by</h4><h3 class="editor"><span class="firstname">Stephen </span> <span class="surname">Gildea</span></h3><div class="affiliation"><span class="orgname">X Consortium<br /></span></div></div></div></div><div><p class="releaseinfo">X Version 11, Release 7.7</p></div><div><p class="releaseinfo">Version 1.5</p></div><div><p class="copyright">Copyright © 1988, 1994 X Consortium</p></div><div><div class="legalnotice"><a id="id2525478"></a><p>
1056N/APermission is hereby granted, free of charge, to any person obtaining
1056N/Aa copy of this software and associated documentation files (the
1056N/A"Software"), to deal in the Software without restriction, including
1056N/Awithout limitation the rights to use, copy, modify, merge, publish,
1056N/Adistribute, sublicense, and/or sell copies of the Software, and to
1056N/Apermit persons to whom the Software is furnished to do so, subject to
1056N/Athe following conditions:
1056N/A</p><p>
1056N/AThe above copyright notice and this permission notice shall be included
1056N/Ain all copies or substantial portions of the Software.
1056N/A</p><p>
1276N/ATHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
1056N/AOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1056N/AMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
1056N/AIN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR
1056N/AOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
1056N/AARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
1056N/AOTHER DEALINGS IN THE SOFTWARE.
1056N/A</p><p>
1056N/AExcept as contained in this notice, the name of the X Consortium shall
1056N/Anot be used in advertising or otherwise to promote the sale, use or
1056N/Aother dealings in this Software without prior written authorization
1056N/Afrom the X Consortium.
1276N/A</p><p>X Window System is a trademark of The Open Group.</p></div></div><div><div class="legalnotice"><a id="id2526154"></a><p class="multiLicensing">
1276N/ACopyright © 1988, 1989
1056N/ADigital Equipment Corporation, Maynard MA. All rights reserved.
1056N/A</p><p>
1056N/APermission to use, copy, modify, and distribute this documentation
1056N/Afor any purpose and without fee is hereby granted, provided
1056N/Athat the above copyright notice and this permission
1056N/Anotice appear in all copies.
1056N/ADigital Equipment Corporation makes no representations
1056N/Aabout the
1056N/Asuitability for any purpose of the information in this document.
1056N/AThis documentation is provided as is without express or implied warranty.
1276N/A</p></div></div><div><div class="legalnotice"><a id="id2524904"></a><p>
1276N/AHelvetica and Times are registered trademarks of Linotype Company.
1276N/A</p><p>
1276N/AITC Avant Garde Gothic is a registered trademark of International
1276N/ATypeface Corporation.
1276N/A</p><p>
1276N/ATimes Roman is a registered trademark of Monotype Corporation.
1276N/A</p><p>
1276N/ABitstream Amerigo is a registered trademark of Bitstream Inc.
1276N/A</p><p>
1276N/AStone is a registered trademark of Adobe Systems Inc.
1276N/A</p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="#Introduction">1. Introduction</a></span></dt><dt><span class="chapter"><a href="#Requirements_and_Goals">2. Requirements and Goals</a></span></dt><dd><dl><dt><span class="sect1"><a href="#Provide_Unique_and_Descriptive_Font_Names">Provide Unique and Descriptive Font Names</a></span></dt><dt><span class="sect1"><a href="#Support_Multiple_Font_Vendors_and_Character_Sets">Support Multiple Font Vendors and Character Sets</a></span></dt><dt><span class="sect1"><a href="#Support_Scalable_and_Polymorphic_Fonts">Support Scalable and Polymorphic Fonts</a></span></dt><dt><span class="sect1"><a href="#Support_Transformations_and_Subsetting_of_Fonts">Support Transformations and Subsetting of Fonts</a></span></dt><dt><span class="sect1"><a href="#Be_Independent_of_X_Server_and_Operating_or_File_System_Implementations">Be Independent of X Server and Operating or File System Implementations</a></span></dt><dt><span class="sect1"><a href="#Support_Arbitrarily_Complex_Font_Matching_and_Substitution">Support Arbitrarily Complex Font Matching and Substitution</a></span></dt><dt><span class="sect1"><a href="#Be_Extensible">Be Extensible</a></span></dt></dl></dd><dt><span class="chapter"><a href="#X_Logical_Font_Description">3. X Logical Font Description</a></span></dt><dd><dl><dt><span class="sect1"><a href="#FontName">FontName</a></span></dt><dd><dl><dt><span class="sect2"><a href="#FontName_Syntax">FontName Syntax</a></span></dt><dt><span class="sect2"><a href="#FontName_Field_Definitions">FontName Field Definitions</a></span></dt><dt><span class="sect2"><a href="#Examples">Examples</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Font_Properties">Font Properties</a></span></dt><dd><dl><dt><span class="sect2"><a href="#FOUNDRY">FOUNDRY</a></span></dt><dt><span class="sect2"><a href="#FAMILY_NAME">FAMILY_NAME</a></span></dt><dt><span class="sect2"><a href="#WEIGHT_NAME">WEIGHT_NAME</a></span></dt><dt><span class="sect2"><a href="#SLANT">SLANT</a></span></dt><dt><span class="sect2"><a href="#SETWIDTH_NAME">SETWIDTH_NAME</a></span></dt><dt><span class="sect2"><a href="#ADD_STYLE_NAME">ADD_STYLE_NAME</a></span></dt><dt><span class="sect2"><a href="#PIXEL_SIZE">PIXEL_SIZE</a></span></dt><dt><span class="sect2"><a href="#POINT_SIZE">POINT_SIZE</a></span></dt><dt><span class="sect2"><a href="#RESOLUTION_X_x">RESOLUTION_X</a></span></dt><dt><span class="sect2"><a href="#RESOLUTION_Y_y">RESOLUTION_Y</a></span></dt><dt><span class="sect2"><a href="#SPACING">SPACING</a></span></dt><dt><span class="sect2"><a href="#AVERAGE_WIDTH">AVERAGE_WIDTH</a></span></dt><dt><span class="sect2"><a href="#CHARSET_REGISTRY">CHARSET_REGISTRY</a></span></dt><dt><span class="sect2"><a href="#CHARSET_ENCODING">CHARSET_ENCODING</a></span></dt><dt><span class="sect2"><a href="#MIN_SPACE">MIN_SPACE</a></span></dt><dt><span class="sect2"><a href="#NORM_SPACE">NORM_SPACE</a></span></dt><dt><span class="sect2"><a href="#MAX_SPACE">MAX_SPACE</a></span></dt><dt><span class="sect2"><a href="#END_SPACE">END_SPACE</a></span></dt><dt><span class="sect2"><a href="#AVG_CAPITAL_WIDTH">AVG_CAPITAL_WIDTH</a></span></dt><dt><span class="sect2"><a href="#AVG_LOWERCASE_WIDTH">AVG_LOWERCASE_WIDTH</a></span></dt><dt><span class="sect2"><a href="#QUAD_WIDTH">QUAD_WIDTH</a></span></dt><dt><span class="sect2"><a href="#FIGURE_WIDTH">FIGURE_WIDTH</a></span></dt><dt><span class="sect2"><a href="#SUPERSCRIPT_X_x">SUPERSCRIPT_X</a></span></dt><dt><span class="sect2"><a href="#SUPERSCRIPT_Y_y">SUPERSCRIPT_Y</a></span></dt><dt><span class="sect2"><a href="#SUBSCRIPT_X_x">SUBSCRIPT_X</a></span></dt><dt><span class="sect2"><a href="#SUBSCRIPT_Y_y">SUBSCRIPT_Y</a></span></dt><dt><span class="sect2"><a href="#SUPERSCRIPT_SIZE">SUPERSCRIPT_SIZE</a></span></dt><dt><span class="sect2"><a href="#SUBSCRIPT_SIZE">SUBSCRIPT_SIZE</a></span></dt><dt><span class="sect2"><a href="#SMALL_CAP_SIZE">SMALL_CAP_SIZE</a></span></dt><dt><span class="sect2"><a href="#UNDERLINE_POSITION">UNDERLINE_POSITION</a></span></dt><dt><span class="sect2"><a href="#UNDERLINE_THICKNESS">UNDERLINE_THICKNESS</a></span></dt><dt><span class="sect2"><a href="#STRIKEOUT_ASCENT">STRIKEOUT_ASCENT</a></span></dt><dt><span class="sect2"><a href="#STRIKEOUT_DESCENT">STRIKEOUT_DESCENT</a></span></dt><dt><span class="sect2"><a href="#ITALIC_ANGLE">ITALIC_ANGLE</a></span></dt><dt><span class="sect2"><a href="#CAP_HEIGHT">CAP_HEIGHT</a></span></dt><dt><span class="sect2"><a href="#X_HEIGHT">X_HEIGHT</a></span></dt><dt><span class="sect2"><a href="#RELATIVE_SETWIDTH">RELATIVE_SETWIDTH</a></span></dt><dt><span class="sect2"><a href="#RELATIVE_WEIGHT">RELATIVE_WEIGHT</a></span></dt><dt><span class="sect2"><a href="#WEIGHT">WEIGHT</a></span></dt><dt><span class="sect2"><a href="#RESOLUTION">RESOLUTION</a></span></dt><dt><span class="sect2"><a href="#Font_support">FONT</a></span></dt><dt><span class="sect2"><a href="#FACE_NAME">FACE_NAME</a></span></dt><dt><span class="sect2"><a href="#FULL_NAME">FULL_NAME</a></span></dt><dt><span class="sect2"><a href="#COPYRIGHT">COPYRIGHT</a></span></dt><dt><span class="sect2"><a href="#NOTICE">NOTICE</a></span></dt><dt><span class="sect2"><a href="#DESTINATION">DESTINATION</a></span></dt><dt><span class="sect2"><a href="#FONT_TYPE">FONT_TYPE</a></span></dt><dt><span class="sect2"><a href="#FONT_VERSION">FONT_VERSION</a></span></dt><dt><span class="sect2"><a href="#RASTERIZER_NAME">RASTERIZER_NAME</a></span></dt><dt><span class="sect2"><a href="#RASTERIZER_VERSION">RASTERIZER_VERSION</a></span></dt><dt><span class="sect2"><a href="#RAW_ASCENT">RAW_ASCENT</a></span></dt><dt><span class="sect2"><a href="#RAW_DESCENT">RAW_DESCENT</a></span></dt><dt><span class="sect2"><a href="#RAW_">RAW_*</a></span></dt><dt><span class="sect2"><a href="#AXIS_NAMES">AXIS_NAMES</a></span></dt><dt><span class="sect2"><a href="#AXIS_LIMITS">AXIS_LIMITS</a></span></dt><dt><span class="sect2"><a href="#AXIS_TYPES">AXIS_TYPES</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Built_in_Font_Property_Atoms">Built-in Font Property Atoms</a></span></dt></dl></dd><dt><span class="chapter"><a href="#Matrix_Transformations">4. Matrix Transformations</a></span></dt><dd><dl><dt><span class="sect1"><a href="#Metrics_and_Font_Properties">Metrics and Font Properties</a></span></dt></dl></dd><dt><span class="chapter"><a href="#Scalable_Fonts">5. Scalable Fonts</a></span></dt><dt><span class="chapter"><a href="#Polymorphic_Fonts">6. Polymorphic Fonts</a></span></dt><dt><span class="chapter"><a href="#Affected_Elements_of_Xlib_and_the_X_Protocol">7. Affected Elements of Xlib and the X Protocol</a></span></dt><dt><span class="chapter"><a href="#BDF_Conformance">8. BDF Conformance</a></span></dt><dd><dl><dt><span class="sect1"><a href="#XLFD_Conformance_Requirements">XLFD Conformance Requirements</a></span></dt><dt><span class="sect1"><a href="#FONT_ASCENT_FONT_DESCENT_and_DEFAULT_CHAR">FONT_ASCENT, FONT_DESCENT, and DEFAULT_CHAR</a></span></dt><dd><dl><dt><span class="sect2"><a href="#FONT_ASCENT">FONT_ASCENT</a></span></dt><dt><span class="sect2"><a href="#FONT_DESCENT">FONT_DESCENT</a></span></dt><dt><span class="sect2"><a href="#DEFAULT_CHAR">DEFAULT_CHAR</a></span></dt></dl></dd></dl></dd></dl></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="Introduction"></a>Chapter 1. Introduction</h2></div></div></div><p>
1056N/AIt is a requirement that X client applications must be portable across server
1056N/Aimplementations, with very different file systems, naming conventions, and
1056N/Afont libraries.
1056N/AHowever, font access requests,
1056N/Aas defined by the <span class="emphasis"><em>X Window System Protocol</em></span>,
1056N/Aneither specify server-independent conventions for font names
1056N/Anor provide adequate font properties for logically describing typographic fonts.
1056N/A</p><p>
1056N/AX clients must be able to dynamically determine the fonts available
1056N/Aon any given server so that understandable information can be presented
1056N/Ato the user or so that intelligent font fallbacks can be chosen.
1056N/AIt is desirable for the most common queries to be accomplished
1056N/Awithout the overhead of opening each font and inspecting font properties,
1056N/Aby means of simple
1056N/A<code class="function">ListFonts</code>
1056N/Arequests.
1056N/AFor example, if a user selected a Helvetica typeface family,
1056N/Aa client application should be able to query the server
1056N/Afor all Helvetica fonts and present only those setwidths, weights, slants,
1056N/Apoint sizes, and character sets available for that family.
1056N/A</p><p>
1056N/AThis document gives a standard logical font description
1056N/A(hereafter referred to as XLFD) and the conventions to be used
1056N/Ain the core protocol so that clients can query and access screen type libraries
1056N/Ain a consistent manner across all X servers.
1056N/AIn addition to completely specifying a given font by means of its
1056N/A<code class="function">FontName</code>,
1056N/Athe XLFD also provides for a standard set of key
1056N/A<code class="function">FontProperties</code>
1056N/Athat describe the font in more detail.
1056N/A</p><p>
1056N/A
1056N/AThe XLFD provides an adequate set of typographic font properties,
1056N/Asuch as CAP_HEIGHT, X_HEIGHT,
1056N/Aand RELATIVE_SETWIDTH,
1056N/Afor publishing and other applications to do intelligent font matching
1056N/Aor substitution when handling documents created on some foreign server
1056N/Athat use potentially unknown fonts.
1056N/AIn addition,
1056N/Athis information is required by certain clients
1056N/Ato position subscripts automatically and determine small capital heights,
1056N/Arecommended leading, word-space values, and so on.
1276N/A</p></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="Requirements_and_Goals"></a>Chapter 2. Requirements and Goals</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="sect1"><a href="#Provide_Unique_and_Descriptive_Font_Names">Provide Unique and Descriptive Font Names</a></span></dt><dt><span class="sect1"><a href="#Support_Multiple_Font_Vendors_and_Character_Sets">Support Multiple Font Vendors and Character Sets</a></span></dt><dt><span class="sect1"><a href="#Support_Scalable_and_Polymorphic_Fonts">Support Scalable and Polymorphic Fonts</a></span></dt><dt><span class="sect1"><a href="#Support_Transformations_and_Subsetting_of_Fonts">Support Transformations and Subsetting of Fonts</a></span></dt><dt><span class="sect1"><a href="#Be_Independent_of_X_Server_and_Operating_or_File_System_Implementations">Be Independent of X Server and Operating or File System Implementations</a></span></dt><dt><span class="sect1"><a href="#Support_Arbitrarily_Complex_Font_Matching_and_Substitution">Support Arbitrarily Complex Font Matching and Substitution</a></span></dt><dt><span class="sect1"><a href="#Be_Extensible">Be Extensible</a></span></dt></dl></div><p>
1056N/AThe XLFD meets the short-term and long-term goals to have a
1056N/Astandard logical font description that:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/AProvides unique, descriptive font names that support simple pattern
1056N/Amatching
1276N/A </p></li><li class="listitem"><p>
1056N/ASupports multiple font vendors, arbitrary character sets, and encodings
1276N/A </p></li><li class="listitem"><p>
1056N/ASupports naming and instancing of scalable and polymorphic fonts
1276N/A </p></li><li class="listitem"><p>
1056N/ASupports transformations and subsetting of fonts
1276N/A </p></li><li class="listitem"><p>
1056N/AIs independent of X server and operating or file system implementations
1276N/A </p></li><li class="listitem"><p>
1056N/ASupports arbitrarily complex font matching or substitution
1276N/A </p></li><li class="listitem"><p>
1056N/AIs extensible
1276N/A </p></li></ul></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Provide_Unique_and_Descriptive_Font_Names"></a>Provide Unique and Descriptive Font Names</h2></div></div></div><p>
1056N/AIt should be possible to have font names that are long enough and
1056N/Adescriptive enough to have a reasonable probability of being unique
1056N/Awithout inventing a new registration organization.
1056N/AResolution and size-dependent font masters, multivendor font libraries,
1056N/Aand so on must be anticipated and handled by the font name alone.
1056N/A</p><p>
1056N/A
1056N/AThe name itself should be structured to be amenable to simple pattern
1056N/Amatching and parsing, thus allowing X clients to restrict font queries to
1056N/Asome subset of all possible fonts in the server.
1276N/A</p></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Support_Multiple_Font_Vendors_and_Character_Sets"></a>Support Multiple Font Vendors and Character Sets</h2></div></div></div><p>
1056N/A
1056N/AThe font name and properties should distinguish between fonts
1056N/Athat were supplied by different font vendors
1056N/Abut that possibly share the same name.
1056N/AWe anticipate a highly competitive font market where users will be able to
1056N/Abuy fonts from many sources according to their particular requirements.
1056N/A</p><p>
1056N/A
1056N/AA number of font vendors deliver each font with all glyphs designed for that
1056N/Afont, where charset mappings are defined by encoding vectors.
1056N/ASome server implementations may force these mappings to proprietary
1056N/Aor standard charsets statically in the font data.
1056N/AOthers may desire to perform the mapping dynamically in the server.
1056N/AProvisions must be made in the font name
1056N/Athat allows a font request to specify or identify specific charset mappings
1056N/Ain server environments where multiple charsets are supported.
1276N/A</p></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Support_Scalable_and_Polymorphic_Fonts"></a>Support Scalable and Polymorphic Fonts</h2></div></div></div><p>
1056N/A
1056N/AIf a font source can be scaled to an arbitrary size or varied in other
1056N/Aways, it should be possible for an application to determine
1056N/Athat fact from the font name, and the
1056N/Aapplication should be able to construct a font name for any specific
1056N/Ainstance.
1276N/A</p></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Support_Transformations_and_Subsetting_of_Fonts"></a>Support Transformations and Subsetting of Fonts</h2></div></div></div><p>
1056N/A
1056N/AArbitrary two-dimensional linear transformations of fonts should be
1056N/Aable to be requested by applications. Since such transformed fonts
1056N/Amay be used for special effects requiring a few characters from each
1056N/Aof many differently transformed fonts, it should be possible to
1056N/Arequest only a few characters from a font for efficiency.
1276N/A</p></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Be_Independent_of_X_Server_and_Operating_or_File_System_Implementations"></a>Be Independent of X Server and Operating or File System Implementations</h2></div></div></div><p>
1056N/A
1056N/AX client applications that require a particular font should be able to use
1056N/Athe descriptive name without knowledge of the file system or other
1056N/Arepository in use by the server.
1056N/AHowever,
1056N/Ait should be possible for servers to translate a given font name
1056N/Ainto a file name syntax that it knows how to deal with,
1056N/Awithout compromising the uniqueness of the font name.
1056N/AThis algorithm should be reversible (exactly how this translation is done is
1056N/Aimplementation dependent).
1276N/A</p></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Support_Arbitrarily_Complex_Font_Matching_and_Substitution"></a>Support Arbitrarily Complex Font Matching and Substitution</h2></div></div></div><p>
1056N/A
1056N/AIn addition to the font name,
1056N/Athe XLFD should define a standard list of descriptive font properties,
1056N/Awith agreed-upon fallbacks for all fonts.
1056N/AThis allows client applications to derive font-specific formatting
1056N/Aor display data and to perform font matching or substitution
1056N/Awhen asked to handle potentially unknown fonts, as required.
1276N/A</p></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Be_Extensible"></a>Be Extensible</h2></div></div></div><p>
1056N/A
1056N/AThe XLFD must be extensible so that new and/or private descriptive font
1056N/Aproperties can be added to conforming fonts without making existing
1056N/AX client or server implementations obsolete.
1276N/A</p></div></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="X_Logical_Font_Description"></a>Chapter 3. X Logical Font Description</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="sect1"><a href="#FontName">FontName</a></span></dt><dd><dl><dt><span class="sect2"><a href="#FontName_Syntax">FontName Syntax</a></span></dt><dt><span class="sect2"><a href="#FontName_Field_Definitions">FontName Field Definitions</a></span></dt><dt><span class="sect2"><a href="#Examples">Examples</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Font_Properties">Font Properties</a></span></dt><dd><dl><dt><span class="sect2"><a href="#FOUNDRY">FOUNDRY</a></span></dt><dt><span class="sect2"><a href="#FAMILY_NAME">FAMILY_NAME</a></span></dt><dt><span class="sect2"><a href="#WEIGHT_NAME">WEIGHT_NAME</a></span></dt><dt><span class="sect2"><a href="#SLANT">SLANT</a></span></dt><dt><span class="sect2"><a href="#SETWIDTH_NAME">SETWIDTH_NAME</a></span></dt><dt><span class="sect2"><a href="#ADD_STYLE_NAME">ADD_STYLE_NAME</a></span></dt><dt><span class="sect2"><a href="#PIXEL_SIZE">PIXEL_SIZE</a></span></dt><dt><span class="sect2"><a href="#POINT_SIZE">POINT_SIZE</a></span></dt><dt><span class="sect2"><a href="#RESOLUTION_X_x">RESOLUTION_X</a></span></dt><dt><span class="sect2"><a href="#RESOLUTION_Y_y">RESOLUTION_Y</a></span></dt><dt><span class="sect2"><a href="#SPACING">SPACING</a></span></dt><dt><span class="sect2"><a href="#AVERAGE_WIDTH">AVERAGE_WIDTH</a></span></dt><dt><span class="sect2"><a href="#CHARSET_REGISTRY">CHARSET_REGISTRY</a></span></dt><dt><span class="sect2"><a href="#CHARSET_ENCODING">CHARSET_ENCODING</a></span></dt><dt><span class="sect2"><a href="#MIN_SPACE">MIN_SPACE</a></span></dt><dt><span class="sect2"><a href="#NORM_SPACE">NORM_SPACE</a></span></dt><dt><span class="sect2"><a href="#MAX_SPACE">MAX_SPACE</a></span></dt><dt><span class="sect2"><a href="#END_SPACE">END_SPACE</a></span></dt><dt><span class="sect2"><a href="#AVG_CAPITAL_WIDTH">AVG_CAPITAL_WIDTH</a></span></dt><dt><span class="sect2"><a href="#AVG_LOWERCASE_WIDTH">AVG_LOWERCASE_WIDTH</a></span></dt><dt><span class="sect2"><a href="#QUAD_WIDTH">QUAD_WIDTH</a></span></dt><dt><span class="sect2"><a href="#FIGURE_WIDTH">FIGURE_WIDTH</a></span></dt><dt><span class="sect2"><a href="#SUPERSCRIPT_X_x">SUPERSCRIPT_X</a></span></dt><dt><span class="sect2"><a href="#SUPERSCRIPT_Y_y">SUPERSCRIPT_Y</a></span></dt><dt><span class="sect2"><a href="#SUBSCRIPT_X_x">SUBSCRIPT_X</a></span></dt><dt><span class="sect2"><a href="#SUBSCRIPT_Y_y">SUBSCRIPT_Y</a></span></dt><dt><span class="sect2"><a href="#SUPERSCRIPT_SIZE">SUPERSCRIPT_SIZE</a></span></dt><dt><span class="sect2"><a href="#SUBSCRIPT_SIZE">SUBSCRIPT_SIZE</a></span></dt><dt><span class="sect2"><a href="#SMALL_CAP_SIZE">SMALL_CAP_SIZE</a></span></dt><dt><span class="sect2"><a href="#UNDERLINE_POSITION">UNDERLINE_POSITION</a></span></dt><dt><span class="sect2"><a href="#UNDERLINE_THICKNESS">UNDERLINE_THICKNESS</a></span></dt><dt><span class="sect2"><a href="#STRIKEOUT_ASCENT">STRIKEOUT_ASCENT</a></span></dt><dt><span class="sect2"><a href="#STRIKEOUT_DESCENT">STRIKEOUT_DESCENT</a></span></dt><dt><span class="sect2"><a href="#ITALIC_ANGLE">ITALIC_ANGLE</a></span></dt><dt><span class="sect2"><a href="#CAP_HEIGHT">CAP_HEIGHT</a></span></dt><dt><span class="sect2"><a href="#X_HEIGHT">X_HEIGHT</a></span></dt><dt><span class="sect2"><a href="#RELATIVE_SETWIDTH">RELATIVE_SETWIDTH</a></span></dt><dt><span class="sect2"><a href="#RELATIVE_WEIGHT">RELATIVE_WEIGHT</a></span></dt><dt><span class="sect2"><a href="#WEIGHT">WEIGHT</a></span></dt><dt><span class="sect2"><a href="#RESOLUTION">RESOLUTION</a></span></dt><dt><span class="sect2"><a href="#Font_support">FONT</a></span></dt><dt><span class="sect2"><a href="#FACE_NAME">FACE_NAME</a></span></dt><dt><span class="sect2"><a href="#FULL_NAME">FULL_NAME</a></span></dt><dt><span class="sect2"><a href="#COPYRIGHT">COPYRIGHT</a></span></dt><dt><span class="sect2"><a href="#NOTICE">NOTICE</a></span></dt><dt><span class="sect2"><a href="#DESTINATION">DESTINATION</a></span></dt><dt><span class="sect2"><a href="#FONT_TYPE">FONT_TYPE</a></span></dt><dt><span class="sect2"><a href="#FONT_VERSION">FONT_VERSION</a></span></dt><dt><span class="sect2"><a href="#RASTERIZER_NAME">RASTERIZER_NAME</a></span></dt><dt><span class="sect2"><a href="#RASTERIZER_VERSION">RASTERIZER_VERSION</a></span></dt><dt><span class="sect2"><a href="#RAW_ASCENT">RAW_ASCENT</a></span></dt><dt><span class="sect2"><a href="#RAW_DESCENT">RAW_DESCENT</a></span></dt><dt><span class="sect2"><a href="#RAW_">RAW_*</a></span></dt><dt><span class="sect2"><a href="#AXIS_NAMES">AXIS_NAMES</a></span></dt><dt><span class="sect2"><a href="#AXIS_LIMITS">AXIS_LIMITS</a></span></dt><dt><span class="sect2"><a href="#AXIS_TYPES">AXIS_TYPES</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Built_in_Font_Property_Atoms">Built-in Font Property Atoms</a></span></dt></dl></div><p>
1056N/A
1056N/AXLFD is divided into two basic components:
1056N/Athe
1056N/A<code class="function">FontName</code>,
1056N/Awhich gives all font information needed to uniquely identify a font
1056N/Ain X protocol requests (for example,
1056N/A<code class="function">OpenFont</code>,
1056N/A<code class="function">ListFonts</code>,
1056N/Aand so on) and a variable list of optional
1056N/A<code class="function">FontProperties</code>,
1056N/Awhich describe a font in more detail.
1056N/A</p><p>
1056N/A
1056N/AThe
1056N/A<code class="function">FontName</code>
1056N/Ais used in font queries and is returned as data in certain X protocol requests.
1056N/AIt is also specified as the data value for the
1056N/A<code class="function">FONT</code>
1056N/Aitem in the X Consortium Character Bitmap Distribution Format Standard
1056N/A(BDF V2.1).
1056N/A</p><p>
1056N/A
1056N/AThe
1056N/A<code class="function">FontProperties</code>
1056N/Aare supplied on a font-by-font basis and are returned
1056N/Aas data in certain X protocol requests as part of the
1056N/A<code class="function">XFontStruct</code>
1056N/Adata structure.
1056N/AThe names and associated data values for each of the
1056N/A<code class="function">FontProperties</code>
1056N/Amay also appear as items of the
1056N/A<code class="function">STARTPROPERTIES</code>...<code class="function">ENDPROPERTIES</code>list
1056N/Ain the BDF V2.1 specification.
1276N/A</p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="FontName"></a>FontName</h2></div></div></div><p>
1056N/A
1056N/AEach
1056N/A<code class="function">FontName</code>
1056N/Ais logically composed of two strings: a
1056N/A<code class="function">FontNameRegistry</code>
1056N/Aprefix that is followed by a
1056N/A<code class="function">FontNameSuffix</code>.
1056N/AThe
1056N/A<code class="function">FontName</code>
1056N/Auses the ISO 8859-1 encoding.
1056N/AThe
1056N/A<code class="function">FontNameRegistry</code>
1056N/Ais an
1056N/A
1056N/Ax-registered-name (a name that has been registered with the X Consortium)
1056N/Athat identifies the registration authority that owns the specified
1056N/A<code class="function">FontNameSuffix</code>
1056N/Asyntax and semantics.
1056N/A</p><p>
1056N/A
1056N/AAll font names that conform to this specification are to use a
1056N/A<code class="function">FontNameRegistry</code>
1056N/Aprefix, which is defined to be the string "-"
1056N/A(HYPHEN).
1056N/AAll
1056N/A<code class="function">FontNameRegistry</code>
1056N/Aprefixes of the form: +<span class="emphasis"><em>version</em></span>-,
1056N/Awhere the specified version indicates some future XLFD specification,
1056N/Aare reserved by the X Consortium for future extensions to XLFD font names.
1056N/AIf required, extensions to the current XLFD font name shall be constructed
1056N/Aby appending new fields to the current structure,
1056N/Aeach delimited by the existing field delimiter.
1056N/AThe availability of other
1056N/A<code class="function">FontNameRegistry</code>
1056N/Aprefixes or fonts that support other registries
1056N/Ais server implementation dependent.
1056N/A</p><p>
1056N/A
1056N/AIn the X protocol specification,
1056N/Athe
1056N/A<code class="function">FontName</code>
1056N/Ais required to be a string;
1056N/Ahence, numeric field values are represented in the name as string equivalents.
1056N/AAll
1056N/A<code class="function">FontNameSuffix</code>
1056N/Afields are also defined as
1056N/A<code class="function">FontProperties</code>;
1056N/Anumeric property values are represented as signed or unsigned integers,
1056N/Aas appropriate.
1276N/A</p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FontName_Syntax"></a>FontName Syntax</h3></div></div></div><p>
1056N/A
1056N/AThe
1056N/A<code class="function">FontName</code>
1056N/Ais a structured, parsable string (of type STRING8)
1056N/Awhose Backus-Naur Form syntax description is as follows:
1276N/A</p><div class="informaltable"><table border="0"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left">FontName ::=</td><td align="left">
1056N/AXFontNameRegistry XFontNameSuffix |
1056N/APrivFontNameRegistry PrivFontNameSuffix
1056N/A </td></tr><tr><td align="left">XFontNameRegistry ::=</td><td align="left">XFNDelim | XFNExtPrefix Version XFNDelim</td></tr><tr><td align="left">XFontNameSuffix ::=</td><td align="left">
1056N/AFOUNDRY XFNDelim FAMILY_NAME XFNDelim WEIGHT_NAME
1056N/AXFNDelim SLANT XFNDelim SETWIDTH_NAME XFNDelim ADD_STYLE_NAME
1056N/AXFNDelim PIXEL_SIZE XFNDelim POINT_SIZE
1056N/AXFNDelim RESOLUTION_X XFNDelim RESOLUTION_Y XFNDelim
1056N/ASPACING XFNDelim AVERAGE_WIDTH XFNDelim CHARSET_REGISTRY
1056N/AXFNDelim CHARSET_ENCODING
1056N/A </td></tr><tr><td align="left">Version ::=</td><td align="left">
1056N/ASTRING8 - the XLFD version that defines an extension
1056N/Ato the font name syntax (for example, "1.4")
1056N/A </td></tr><tr><td align="left">XFNExtPrefix ::=</td><td align="left">OCTET - "+" (PLUS)</td></tr><tr><td align="left">XFNDelim ::=</td><td align="left">OCTET - "-" (HYPHEN)</td></tr><tr><td align="left">PrivFontNameRegistry ::=</td><td align="left">STRING8 - other than those strings reserved by XLFD</td></tr><tr><td align="left">PrivFontNameSuffix ::=</td><td align="left">STRING8</td></tr></tbody></table></div><p>
1056N/A
1056N/AField values are constructed as strings of ISO 8859-1 graphic characters,
1056N/Aexcluding the following:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/A'-' (HYPHEN), the XLFD font name delimiter character
1276N/A </p></li><li class="listitem"><p>
1056N/A'?' (QUESTION MARK) and "*" (ASTERISK), the X protocol
1056N/Afont name wildcard characters
1276N/A </p></li><li class="listitem"><p>
1056N/A',' (COMMA), used by Xlib to separate XLFD font names in a font set.
1276N/A </p></li><li class="listitem"><p>
1056N/A'"' (QUOTATION MARK), used by some commercial products to quote a
1056N/Afont name.
1056N/A </p></li></ul></div><p>
1056N/A
1056N/AAlphabetic case distinctions are allowed but are for human readability
1056N/Aconcerns only.
1056N/AConforming X servers will perform matching on font name query or open requests
1056N/Aindependent of case.
1056N/AThe entire font name string must have no more than 255 characters.
1056N/AIt is recommended that clients construct font name query patterns
1056N/Aby explicitly including all field delimiters to avoid unexpected results.
1056N/ANote that SPACE is a valid character of a
1056N/A<code class="function">FontName</code>
1056N/Afield; for example, the string "ITC Avant Garde Gothic" might be a
1056N/AFAMILY_NAME.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FontName_Field_Definitions"></a>FontName Field Definitions</h3></div></div></div><p>
1056N/A
1056N/AThis section discusses the
1056N/A<code class="function">FontName</code>:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/AFOUNDRY field
1276N/A </p></li><li class="listitem"><p>
1056N/AFAMILY_NAME field
1276N/A </p></li><li class="listitem"><p>
1056N/AWEIGHT_NAME field
1276N/A </p></li><li class="listitem"><p>
1056N/ASLANT field
1276N/A </p></li><li class="listitem"><p>
1056N/ASETWIDTH_NAME field
1276N/A </p></li><li class="listitem"><p>
1056N/AADD_STYLE_NAME field
1276N/A </p></li><li class="listitem"><p>
1056N/APIXEL_SIZE field
1276N/A </p></li><li class="listitem"><p>
1056N/APOINT_SIZE field
1276N/A </p></li><li class="listitem"><p>
1056N/ARESOLUTION_X and RESOLUTION_Y fields
1276N/A </p></li><li class="listitem"><p>
1056N/ASPACING field
1276N/A </p></li><li class="listitem"><p>
1056N/AAVERAGE_WIDTH field
1276N/A </p></li><li class="listitem"><p>
1056N/ACHARSET_REGISTRY and CHARSET_ENCODING fields
1276N/A </p></li></ul></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="FOUNDRY_Field"></a>FOUNDRY Field</h4></div></div></div><p>
1056N/A
1056N/AFOUNDRY is an x-registered-name,
1056N/Athe name or identifier of the digital type foundry
1056N/Athat digitized and supplied the font data,
1056N/Aor if different, the identifier of the organization that last modified
1056N/Athe font shape or metric information.
1056N/A</p><p>
1056N/A
1056N/AThe reason this distinction is necessary is
1056N/Athat a given font design may be licensed from one source (for example, ITC)
1056N/Abut digitized and sold by any number of different type suppliers.
1056N/AEach digital version of the original design, in general, will be somewhat
1056N/Adifferent in metrics and shape from the idealized original font data,
1056N/Abecause each font foundry, for better or for worse, has its own standards
1056N/Aand practices for tweaking a typeface for a particular generation
1056N/Aof output technologies or has its own perception of market needs.
1056N/A</p><p>
1056N/A
1056N/AIt is up to the type supplier to register with the X Consortium a
1056N/Asuitable name for this
1056N/A<code class="function">FontName</code>
1056N/Afield according to the registration procedures defined by the Consortium.
1056N/A</p><p>
1056N/A
1056N/AThe X Consortium shall define procedures for registering foundry
1056N/Aand other names and shall maintain and publish,
1056N/Aas part of its public distribution,
1056N/Aa registry of such registered names for use in XLFD font names and properties.
1056N/A</p><p>
1056N/A
1276N/A</p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="FAMILY_NAME_Field"></a>FAMILY_NAME Field</h4></div></div></div><p>
1056N/A
1056N/AFAMILY_NAME is a string that identifies the range or family of
1056N/Atypeface designs that are all variations of one basic typographic style.
1056N/AThis must be spelled out in full,
1056N/Awith words separated by spaces, as required.
1056N/AThis name must be human-understandable and suitable for presentation to a
1056N/Afont user to identify the typeface family.
1056N/A</p><p>
1056N/A
1056N/AIt is up to the type supplier to supply and maintain a suitable string for
1056N/Athis field and font property, to secure the proper legal title to a given
1056N/Aname, and to guard against the infringement of other's copyrights or
1056N/Atrademarks.
1056N/ABy convention, FAMILY_NAME is not translated.
1056N/AFAMILY_NAME may include an indication of design ownership
1056N/Aif considered a valid part of the
1056N/Atypeface family name.
1056N/A</p><p>
1056N/A
1056N/AThe following are examples of FAMILY_NAME:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/AHelvetica
1276N/A </p></li><li class="listitem"><p>
1056N/AITC Avant Garde Gothic
1276N/A </p></li><li class="listitem"><p>
1056N/ATimes
1276N/A </p></li><li class="listitem"><p>
1056N/ATimes Roman
1276N/A </p></li><li class="listitem"><p>
1056N/ABitstream Amerigo
1276N/A </p></li><li class="listitem"><p>
1056N/AStone
1276N/A </p></li></ul></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="WEIGHT_NAME_Field"></a>WEIGHT_NAME Field</h4></div></div></div><p>
1056N/A
1056N/AWEIGHT_NAME is a string that identifies the font's typographic weight,
1056N/Athat is, the nominal blackness of the font,
1056N/Aaccording to the FOUNDRY's judgment.
1056N/AThis name must be human-understandable and suitable for presentation to a
1056N/Afont user.
1276N/AThe value "0" is used to indicate a polymorphic font (see <a class="xref" href="#Polymorphic_Fonts" title="Chapter 6. Polymorphic Fonts"><em>Polymorphic Fonts</em></a>).
1056N/A</p><p>
1056N/A
1056N/AThe interpretation of this field is somewhat problematic
1056N/Abecause the typographic judgment of weight has traditionally
1056N/Adepended on the overall design of the typeface family in question;
1056N/Athat is, it is possible that the DemiBold weight of one font could be
1056N/Aalmost equivalent in typographic feel to a Bold font from another family.
1056N/A</p><p>
1056N/A
1056N/AWEIGHT_NAME is captured as an arbitrary string
1056N/Abecause it is an important part of a font's complete human-understandable name.
1056N/AHowever, it should not be used for font matching or substitution.
1056N/AFor this purpose,
1056N/AX client applications should use the weight-related font properties
1056N/A(RELATIVE_WEIGHT and WEIGHT) that give the coded relative weight
1056N/Aand the calculated weight, respectively.
1276N/A</p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="SLANT_Field"></a>SLANT Field</h4></div></div></div><p>
1056N/A
1056N/ASLANT is a code-string that indicates the overall posture of the
1056N/Atypeface design used in the font.
1056N/AThe encoding is as follows:
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Code</th><th align="left">English Translation</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">"R"</td><td align="left">Roman</td><td align="left">Upright design</td></tr><tr><td align="left">"I"</td><td align="left">Italic</td><td align="left">Italic design, slanted clockwise from the vertical</td></tr><tr><td align="left">"O"</td><td align="left">Oblique</td><td align="left">Obliqued upright design, slanted clockwise from the vertical</td></tr><tr><td align="left">"RI"</td><td align="left">Reverse Italic</td><td align="left">Italic design, slanted counterclockwise from the vertical</td></tr><tr><td align="left">"RO"</td><td align="left">Reverse Oblique</td><td align="left">Obliqued upright design, slanted counterclockwise from the vertical</td></tr><tr><td align="left">"OT"</td><td align="left">Other</td><td align="left">Other</td></tr><tr><td align="left">numeric</td><td align="left">Polymorphic</td><td align="left">See <a class="xref" href="#Polymorphic_Fonts" title="Chapter 6. Polymorphic Fonts"><em>Polymorphic Fonts</em></a>.</td></tr></tbody></table></div><p>
1056N/A
1056N/AThe SLANT codes are for programming convenience only and usually are
1056N/Aconverted into their equivalent human-understandable form before being
1056N/Apresented to a user.
1276N/A</p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="SETWIDTH_NAME_Field"></a>SETWIDTH_NAME Field</h4></div></div></div><p>
1056N/A
1056N/ASETWIDTH_NAME is a string that gives the font's typographic
1056N/Aproportionate width, that is, the nominal width per horizontal unit of the
1056N/Afont, according to the FOUNDRY's judgment.
1276N/AThe value "0" is used to indicate a polymorphic font (see <a class="xref" href="#Polymorphic_Fonts" title="Chapter 6. Polymorphic Fonts"><em>Polymorphic Fonts</em></a>).
1056N/A</p><p>
1056N/A
1056N/AAs with WEIGHT_NAME, the interpretation of this field or font property is
1056N/Asomewhat problematic, because the designer's judgment of setwidth has
1056N/Atraditionally depended on the overall design of the typeface family in
1056N/Aquestion.
1056N/AFor purposes of font matching or substitution,
1056N/AX client applications should either use the RELATIVE_SETWIDTH font property
1056N/Athat gives the relative coded proportionate width or calculate
1056N/Athe proportionate width.
1056N/A</p><p>
1056N/A
1056N/AThe following are examples of SETWIDTH_NAME:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/ANormal
1276N/A </p></li><li class="listitem"><p>
1056N/ACondensed
1276N/A </p></li><li class="listitem"><p>
1056N/ANarrow
1276N/A </p></li><li class="listitem"><p>
1056N/ADouble Wide
1276N/A </p></li></ul></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="ADD_STYLE_NAME_Field"></a>ADD_STYLE_NAME Field</h4></div></div></div><p>
1056N/A
1056N/AADD_STYLE_NAME is a string that identifies additional typographic
1056N/Astyle information that is not captured by other fields but is needed
1056N/Ato identify the particular font.
1056N/AThe character "[" anywhere in the field is used to indicate a
1276N/Apolymorphic font (see <a class="xref" href="#Polymorphic_Fonts" title="Chapter 6. Polymorphic Fonts"><em>Polymorphic Fonts</em></a>).
1056N/A</p><p>
1056N/A
1056N/AADD_STYLE_NAME is not a typeface classification field
1056N/Aand is only used for uniqueness.
1056N/AIts use, as such, is not limited to typographic style distinctions.
1056N/A</p><p>
1056N/A
1056N/AThe following are examples of ADD_STYLE_NAME:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/ASerif
1276N/A </p></li><li class="listitem"><p>
1056N/ASans Serif
1276N/A </p></li><li class="listitem"><p>
1056N/AInformal
1276N/A </p></li><li class="listitem"><p>
1056N/ADecorated
1276N/A </p></li></ul></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="PIXEL_SIZE_Field"></a>PIXEL_SIZE Field</h4></div></div></div><p>
1056N/A
1056N/APIXEL_SIZE
1056N/Agives the body size of the font at a particular
1056N/APOINT_SIZE and RESOLUTION_Y.
1056N/APIXEL_SIZE is either an integer-string or a string beginning
1056N/Awith "[". A string beginning with "[" represents a matrix
1276N/A(see <a class="xref" href="#Matrix_Transformations" title="Chapter 4. Matrix Transformations"><em>Matrix Transformations</em></a>).
1056N/APIXEL_SIZE usually incorporates additional vertical spacing
1056N/Athat is considered part of the font design.
1056N/A(Note, however, that this value is not necessarily equivalent to the height
1056N/Aof the font bounding box.)
1276N/AZero is used to indicate a scalable font (see <a class="xref" href="#Scalable_Fonts" title="Chapter 5. Scalable Fonts"><em>Scalable Fonts</em></a>).
1056N/A</p><p>
1056N/A
1056N/APIXEL_SIZE usually is used by X client applications that need to
1056N/Aquery fonts according to device-dependent size,
1056N/Aregardless of the point size or vertical resolution
1056N/Afor which the font was designed.
1276N/A</p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="SN_POINT_SIZE_Field"></a>SN POINT_SIZE Field</h4></div></div></div><p>
1056N/A
1056N/APOINT_SIZE gives the body size
1056N/Afor which the font was designed.
1056N/APOINT_SIZE is either an integer-string or a string beginning
1056N/Awith "[". A string beginning with "[" represents a matrix
1276N/A(see <a class="xref" href="#Matrix_Transformations" title="Chapter 4. Matrix Transformations"><em>Matrix Transformations</em></a>).
1056N/AThis field usually incorporates additional vertical spacing
1056N/Athat is considered part of the font design.
1056N/A(Note, however, that POINT_SIZE is not necessarily equivalent to the height
1056N/Aof the font bounding box.)
1056N/APOINT_SIZE is expressed in decipoints (where points are as defined
1056N/Ain the X protocol or 72.27 points equal 1 inch).
1276N/AZero is used to indicate a scalable font (see <a class="xref" href="#Scalable_Fonts" title="Chapter 5. Scalable Fonts"><em>Scalable Fonts</em></a>).
1056N/A</p><p>
1056N/A
1056N/APOINT_SIZE and RESOLUTION_Y are used by X clients to query fonts
1056N/Aaccording to device-independent size to maintain constant text
1056N/Asize on the display regardless of the PIXEL_SIZE used for the font.
1276N/A</p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="RESOLUTION_X_and_RESOLUTION_Y_Fields"></a>RESOLUTION_X and RESOLUTION_Y Fields</h4></div></div></div><p>
1056N/A
1056N/ARESOLUTION_X and RESOLUTION_Y are unsigned integer-strings that give
1056N/Athe horizontal and vertical resolution,
1056N/Ameasured in pixels or dots per inch (dpi),
1056N/Afor which the font was designed.
1276N/AZero is used to indicate a scalable font (see <a class="xref" href="#Scalable_Fonts" title="Chapter 5. Scalable Fonts"><em>Scalable Fonts</em></a>).
1056N/AHorizontal and vertical values are required
1056N/Abecause a separate bitmap font must be designed
1056N/Afor displays with very different aspect ratios
1056N/A(for example, 1:1, 4:3, 2:1, and so on).
1056N/A</p><p>
1056N/A
1056N/AThe separation of pixel or point size and resolution is necessary
1056N/Abecause X allows for servers with very different video characteristics
1056N/A(for example, horizontal and vertical resolution, screen and pixel size,
1056N/Apixel shape, and so on) to potentially access the same font library.
1056N/AThe font name, for example, must differentiate between a 14-point font designed
1056N/Afor 75 dpi (body size of about 14 pixels) or a 14-point font designed
1056N/Afor 150 dpi (body size of about 28 pixels).
1056N/AFurther, in servers that implement some or all fonts as continuously scaled
1056N/Aand scan-converted outlines,
1056N/APOINT_SIZE and RESOLUTION_Y will help the server to differentiate
1056N/Abetween potentially separate font masters for text, title,
1056N/Aand display sizes or for other typographic considerations.
1276N/A</p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="SPACING_Field"></a>SPACING Field</h4></div></div></div><p>
1056N/A
1056N/ASPACING is a code-string that indicates the escapement class of the font,
1056N/Athat is, monospace (fixed pitch), proportional (variable pitch),
1056N/Aor charcell (a special monospaced font that conforms to the traditional
1056N/Adata-processing character cell font model).
1056N/AThe encoding is as follows:
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Code</th><th align="left">English Translation</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">"P"</td><td align="left">Proportional</td><td align="left">
1056N/AA font whose logical character widths vary for each glyph.
1056N/ANote that no other restrictions are placed on the metrics
1056N/Aof a proportional font.
1056N/A </td></tr><tr><td align="left">"M"</td><td align="left">Monospaced</td><td align="left">
1056N/AA font whose logical character widths are constant
1056N/A(that is, every glyph in the font has the same logical width).
1056N/ANo other restrictions are placed on the metrics of a monospaced font.
1056N/A </td></tr><tr><td align="left">"C"</td><td align="left">CharCell</td><td align="left">
1056N/AA monospaced font that follows the standard typewriter character cell model
1056N/A(that is, the glyphs of the font can be modeled by X clients as "boxes"
1056N/Aof the same width and height that are imaged side-by-side
1056N/Ato form text strings or top-to-bottom to form text lines).
1056N/ABy definition,
1056N/Aall glyphs have the same logical character width,
1056N/Aand no glyphs have "ink" outside of the character cell.
1056N/AThere is no kerning (that is, on a per-character basis with positive metrics:
1056N/A0 &lt;= left-bearing &lt;= right-bearing &lt;= width;
1056N/Awith negative metrics: width &lt;= left-bearing &lt;= right-bearing &lt;= zero).
1056N/AAlso, the vertical extents of the font do not exceed the vertical spacing
1056N/A(that is, on a per-character basis:
1056N/Aascent &lt;= font-ascent and descent &lt;= font-descent).
1056N/AThe cell height = font-descent + font-ascent, and the width = AVERAGE_WIDTH.
1276N/A </td></tr></tbody></table></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="AVERAGE_WIDTH_Field"></a>AVERAGE_WIDTH Field</h4></div></div></div><p>
1056N/A
1056N/AAVERAGE_WIDTH is an integer-string typographic metric value
1056N/Athat gives the unweighted arithmetic mean of the absolute value of the
1056N/Awidth of each glyph in the font
1056N/A(measured in tenths of pixels), multiplied by -1 if the dominant
1056N/Awriting direction for the font is right-to-left.
1056N/AA leading "~" (TILDE) indicates a negative value.
1056N/AFor monospaced and character cell fonts,
1056N/Athis is the width of all glyphs in the font.
1276N/AZero is used to indicate a scalable font (see <a class="xref" href="#Scalable_Fonts" title="Chapter 5. Scalable Fonts"><em>Scalable Fonts</em></a>).
1276N/A</p></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="CHARSET_REGISTRY_and_CHARSET_ENCODING_Fields"></a>CHARSET_REGISTRY and CHARSET_ENCODING Fields</h4></div></div></div><p>
1056N/A
1056N/AThe character set used to encode the glyphs of the font (and implicitly
1056N/Athe font's glyph repertoire), as maintained by the X Consortium character
1056N/Aset registry.
1056N/ACHARSET_REGISTRY is an x-registered-name that identifies
1056N/Athe registration authority that owns the specified encoding.
1056N/ACHARSET_ENCODING is a registered name that identifies the coded character set
1056N/Aas defined by that registration authority
1056N/Aand, optionally, a subsetting hint.
1056N/A</p><p>
1056N/A
1056N/AAlthough the X protocol does not explicitly have any knowledge about
1056N/Acharacter set encodings,
1056N/Ait is expected that server implementors will prefer to embed knowledge
1056N/Aof certain proprietary or standard charsets into their font library
1056N/Afor reasons of performance and convenience.
1056N/AThe CHARSET_REGISTRY and CHARSET_ENCODING fields or properties allow
1056N/Aan X client font request to specify a specific charset mapping
1056N/Ain server environments where multiple charsets are supported.
1056N/AThe availability of any particular
1056N/Acharacter set is font and server implementation dependent.
1056N/A</p><p>
1056N/A
1056N/ATo prevent collisions when defining character set names,
1056N/Ait is recommended that CHARSET_REGISTRY and CHARSET_ENCODING name pairs
1056N/Abe constructed according to the following conventions:
1276N/A</p><div class="informaltable"><table border="0"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left">CharsetRegistry ::=</td><td align="left">StdCharsetRegistryName | PrivCharsetRegistryName</td></tr><tr><td align="left">CharsetEncoding ::=</td><td align="left">StdCharsetEncodingName | PrivCharsetEncodingName</td></tr><tr><td align="left">StdCharsetRegistryName ::=</td><td align="left">StdOrganizationId StdNumber | StdOrganizationId StdNumber Dot Year</td></tr><tr><td align="left">PrivCharsetRegistryName ::=</td><td align="left">OrganizationId STRING8</td></tr><tr><td align="left">StdCharsetEncodingName ::=</td><td align="left">STRING8-numeric part number of referenced standard</td></tr><tr><td align="left">PrivCharsetEncodingName ::=</td><td align="left">STRING8</td></tr><tr><td align="left">StdOrganizationId ::=</td><td align="left">STRING8-the registered name or acronym of the referenced standard organization</td></tr><tr><td align="left">StdNumber ::=</td><td align="left">STRING8-referenced standard number</td></tr><tr><td align="left">OrganizationId ::=</td><td align="left">STRING8-the registered name or acronym of the organization</td></tr><tr><td align="left">Dot ::=</td><td align="left">OCTET-"." (FULL STOP)</td></tr><tr><td align="left">Year ::=</td><td align="left">STRING8-numeric year (for example, 1989)</td></tr></tbody></table></div><p>
1056N/A
1056N/AThe X Consortium shall maintain and publish a registry
1056N/Aof such character set names for use in X protocol font names and properties
1056N/Aas specified in XLFD.
1056N/A</p><p>
1056N/A
1056N/AThe ISO Latin-1 character set shall be registered by the X Consortium as the
1056N/ACHARSET_REGISTRY-CHARSET_ENCODING value pair: "ISO8859-1".
1056N/A</p><p>
1056N/A
1056N/AIf the CHARSET_ENCODING contains a "[" (LEFT SQUARE BRACKET),
1056N/Athe "[" and the characters after it up to a "]" (RIGHT SQUARE
1056N/ABRACKET) are a
1056N/Asubsetting hint telling the font source that the client is interested
1056N/Aonly in a subset of the characters of the font.
1056N/AThe font source can, optionally, return a font that
1056N/Acontains only those characters or any superset of those characters. The
1056N/Aclient can expect to obtain valid glyphs and metrics only for those
1056N/Acharacters, and not for any other characters in the font.
1056N/AThe font properties may optionally be calculated by considering only
1056N/Athe characters in the subset.
1056N/A</p><p>
1056N/A
1056N/AThe BNF for the subsetting hint is
1276N/A</p><div class="informaltable"><table border="0"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left">Subset ::=</td><td align="left">LeftBracket RangeList RightBracket</td></tr><tr><td align="left">RangeList ::=</td><td align="left">Range | Range Space RangeList</td></tr><tr><td align="left">Range ::=</td><td align="left">Number | Number Underscore Number</td></tr><tr><td align="left">Number ::=</td><td align="left">"0x" HexNumber | DecNumber</td></tr><tr><td align="left">HexNumber ::=</td><td align="left">HexDigit | HexDigit HexNumber</td></tr><tr><td align="left">DecNumber ::=</td><td align="left">DecDigit | DecDigit DecNumber</td></tr><tr><td align="left">DecDigit ::=</td><td align="left">"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"</td></tr><tr><td align="left">HexDigit ::=</td><td align="left">DecDigit | "a" | "b" | "c" | "d" | "e" | "f"</td></tr><tr><td align="left">LeftBracket ::=</td><td align="left">"[" (LEFT SQUARE BRACKET)</td></tr><tr><td align="left">RightBracket ::=</td><td align="left">"]" (RIGHT SQUARE BRACKET)</td></tr><tr><td align="left">Space ::=</td><td align="left">"\0" (SPACE)</td></tr><tr><td align="left">Underscore ::=</td><td align="left">"_" (LOW LINE)</td></tr></tbody></table></div><p>
1056N/A
1056N/AEach Range specifies characters that are to be part of the subset
1056N/Aincluded in the font.
1056N/AA Range containing two Numbers specifies the first and last character,
1056N/Ainclusively, of a range of characters.
1056N/AA Range that is a single Number specifies a single character to be
1056N/Aincluded in the font.
1056N/AA HexNumber is interpreted as a hexadecimal number.
1056N/AA DecNumber is interpreted as a decimal number.
1056N/AThe font consists of the union of all the Ranges in the
1056N/ARangeList.
1056N/A</p><p>
1056N/A
1056N/AFor example,
1056N/A</p><pre class="literallayout">
1056N/A -misc-fixed-medium-r-normal--0-0-0-0-c-0-iso8859-1[65 70 80_90]
1056N/A</pre><p>
1056N/Atells the font source that the client is interested only in characters
1056N/A65, 70, and 80-90.
1276N/A</p></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="Examples"></a>Examples</h3></div></div></div><p>
1056N/A
1056N/AThe following examples of font names are derived from the screen fonts
1056N/Ashipped with the X Consortium distribution.
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Font</th><th align="left">X FontName</th></tr></thead><tbody><tr><td align="left"><code class="function">75-dpi Fonts</code></td><td class="auto-generated"> </td></tr><tr><td align="left">Charter 12 pt</td><td align="left">-Bitstream-Charter-Medium-R-Normal--12-120-75-75-P-68-ISO8859-1</td></tr><tr><td align="left">Charter Bold 12 pt</td><td align="left">-Bitstream-Charter-Bold-R-Normal--12-120-75-75-P-76-ISO8859-1</td></tr><tr><td align="left">Charter Bold Italic 12 pt</td><td align="left">-Bitstream-Charter-Bold-I-Normal--12-120-75-75-P-75-ISO8859-1</td></tr><tr><td align="left">Charter Italic 12 pt</td><td align="left">-Bitstream-Charter-Medium-I-Normal--12-120-75-75-P-66-ISO8859-1</td></tr><tr><td align="left">Courier 8 pt</td><td align="left">-Adobe-Courier-Medium-R-Normal--8-80-75-75-M-50-ISO8859-1</td></tr><tr><td align="left">Courier 10 pt</td><td align="left">-Adobe-Courier-Medium-R-Normal--10-100-75-75-M-60-ISO8859-1</td></tr><tr><td align="left">Courier 12 pt</td><td align="left">-Adobe-Courier-Medium-R-Normal--12-120-75-75-M-70-ISO8859-1</td></tr><tr><td align="left">Courier 24 pt</td><td align="left">-Adobe-Courier-Medium-R-Normal--24-240-75-75-M-150-ISO8859-1</td></tr><tr><td align="left">Courier Bold 10 pt</td><td align="left">-Adobe-Courier-Bold-R-Normal--10-100-75-75-M-60-ISO8859-1</td></tr><tr><td align="left">Courier Bold Oblique 10 pt</td><td align="left">-Adobe-Courier-Bold-O-Normal--10-100-75-75-M-60-ISO8859-1</td></tr><tr><td align="left">Courier Oblique 10 pt</td><td align="left">-Adobe-Courier-Medium-O-Normal--10-100-75-75-M-60-ISO8859-1</td></tr><tr><td align="left"><code class="function">100-dpi Fonts</code></td><td class="auto-generated"> </td></tr><tr><td align="left">Symbol 10 pt</td><td align="left">-Adobe-Symbol-Medium-R-Normal--14-100-100-100-P-85-Adobe-FONTSPECIFIC</td></tr><tr><td align="left">Symbol 14 pt</td><td align="left">-Adobe-Symbol-Medium-R-Normal--20-140-100-100-P-107-Adobe-FONTSPECIFIC</td></tr><tr><td align="left">Symbol 18 pt</td><td align="left">-Adobe-Symbol-Medium-R-Normal--25-180-100-100-P-142-Adobe-FONTSPECIFIC</td></tr><tr><td align="left">Symbol 24 pt</td><td align="left">-Adobe-Symbol-Medium-R-Normal--34-240-100-100-P-191-Adobe-FONTSPECIFIC</td></tr><tr><td align="left">Times Bold 10 pt</td><td align="left">-Adobe-Times-Bold-R-Normal--14-100-100-100-P-76-ISO8859-1</td></tr><tr><td align="left">Times Bold Italic 10 pt</td><td align="left">-Adobe-Times-Bold-I-Normal--14-100-100-100-P-77-ISO8859-1</td></tr><tr><td align="left">Times Italic 10 pt</td><td align="left">-Adobe-Times-Medium-I-Normal--14-100-100-100-P-73-ISO8859-1</td></tr><tr><td align="left">Times Roman 10 pt</td><td align="left">-Adobe-Times-Medium-R-Normal--14-100-100-100-P-74-ISO8859-1</td></tr></tbody></table></div></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Font_Properties"></a>Font Properties</h2></div></div></div><p>
1056N/A
1056N/AAll font properties are optional but will generally include the
1056N/Afont name fields and, on a font-by-font basis, any other useful font
1056N/Adescriptive and use information that may be required to use the font
1056N/Aintelligently.
1056N/AThe XLFD specifies an extensive set of standard X font properties,
1056N/Atheir interpretation, and fallback rules when the property is not defined
1056N/Afor a given font.
1056N/AThe goal is to provide client applications with enough font information
1056N/Ato be able to make automatic formatting and display decisions
1056N/Awith good typographic results.
1056N/A</p><p>
1056N/A
1056N/AFont property names use the ISO 8859-1 encoding.
1056N/A</p><p>
1056N/A
1056N/AAdditional standard X font property definitions may be defined in the
1056N/Afuture and private properties may exist in X fonts at any time.
1056N/APrivate font properties should be defined to conform to the general mechanism
1056N/Adefined in the X protocol to prevent overlap of name space and ambiguous
1056N/Aproperty names, that is, private font property names are of the form:
1056N/A"_" (LOW LINE),
1056N/Afollowed by the organizational identifier, followed by "_" (LOW LINE),
1056N/Aand terminated with the property name.
1056N/A</p><p>
1056N/A
1056N/AThe Backus-Naur Form syntax description of X font properties is as follows:
1276N/A</p><div class="informaltable"><table border="0"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left">Properties ::=</td><td align="left">OptFontPropList</td></tr><tr><td align="left">OptFontPropList ::=</td><td align="left">NULL | OptFontProp OptFontPropList</td></tr><tr><td align="left">OptFontProp ::=</td><td align="left">PrivateFontProp | XFontProp</td></tr><tr><td align="left">PrivateFontProp ::=</td><td align="left">STRING8 | Underscore OrganizationId Underscore STRING8</td></tr><tr><td align="left">XFontProp ::=</td><td align="left">
1056N/AFOUNDRY | FAMILY_NAME | WEIGHT_NAME | SLANT | SETWIDTH_NAME | ADD_STYLE_NAME
1056N/A| PIXEL_SIZE | POINT_SIZE | RESOLUTION_X | RESOLUTION_Y | SPACING |
1056N/AAVERAGE_WIDTH | CHARSET_REGISTRY | CHARSET_ENCODING | QUAD_WIDTH |
1056N/ARESOLUTION | MIN_SPACE | NORM_SPACE | MAX_SPACE | END_SPACE | SUPERSCRIPT_X |
1056N/ASUPERSCRIPT_Y | SUBSCRIPT_X | SUBSCRIPT_Y | UNDERLINE_POSITION |
1056N/AUNDERLINE_THICKNESS | STRIKEOUT_ASCENT | STRIKEOUT_DESCENT | ITALIC_ANGLE
1056N/A| X_HEIGHT | WEIGHT | FACE_NAME |
1056N/AFULL_NAME | FONT |
1056N/ACOPYRIGHT | AVG_CAPITAL_WIDTH |
1056N/AAVG_LOWERCASE_WIDTH | RELATIVE_SETWIDTH | RELATIVE_WEIGHT | CAP_HEIGHT |
1056N/ASUPERSCRIPT_ SIZE | FIGURE_WIDTH | SUBSCRIPT_SIZE | SMALL_CAP_SIZE |
1056N/ANOTICE | DESTINATION
1056N/A| FONT_TYPE | FONT_VERSION | RASTERIZER_NAME | RASTERIZER_VERSION |
1056N/ARAW_ASCENT | RAW_DESCENT | RAW_* | AXIS_NAMES | AXIS_LIMITS |
1276N/AAXIS_TYPES</td></tr><tr><td align="left">Underscore ::=</td><td align="left">OCTET-"_" (LOW LINE)</td></tr><tr><td align="left">OrganizationId ::=</td><td align="left">STRING8-the registered name of the organization</td></tr></tbody></table></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FOUNDRY"></a>FOUNDRY</h3></div></div></div><p>
1056N/A
1056N/AFOUNDRY is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/AFOUNDRY cannot be calculated or defaulted if not supplied as a font property.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FAMILY_NAME"></a>FAMILY_NAME</h3></div></div></div><p>
1056N/A
1056N/AFAMILY_NAME is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/AFAMILY_NAME cannot be calculated or defaulted if not supplied as a font
1056N/Aproperty.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="WEIGHT_NAME"></a>WEIGHT_NAME</h3></div></div></div><p>
1056N/A
1056N/AWEIGHT_NAME is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/AWEIGHT_NAME can be defaulted if not supplied as a font property, as follows:
1056N/A</p><pre class="literallayout">
1056N/Aif (WEIGHT_NAME undefined) then
1056N/A WEIGHT_NAME = ATOM("Medium")
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SLANT"></a>SLANT</h3></div></div></div><p>
1056N/A
1056N/ASLANT is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/ASLANT can be defaulted if not supplied as a font property, as follows:
1056N/A</p><pre class="literallayout">
1056N/Aif (SLANT undefined) then
1056N/A SLANT = ATOM("R")
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SETWIDTH_NAME"></a>SETWIDTH_NAME</h3></div></div></div><p>
1056N/A
1056N/ASETWIDTH_NAME is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/ASETWIDTH_NAME can be defaulted if not supplied as a font property, as follows:
1056N/A</p><pre class="literallayout">
1056N/Aif (SETWIDTH_NAME undefined) then
1056N/A SETWIDTH_NAME = ATOM("Normal")
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="ADD_STYLE_NAME"></a>ADD_STYLE_NAME</h3></div></div></div><p>
1056N/A
1056N/AADD_STYLE_NAME is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/AADD_STYLE_NAME can be defaulted if not supplied as a font property, as follows:
1056N/A</p><pre class="literallayout">
1056N/Aif (ADD_STYLE_NAME undefined) then
1056N/A ADD_STYLE_NAME = ATOM("")
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="PIXEL_SIZE"></a>PIXEL_SIZE</h3></div></div></div><p>
1056N/A
1056N/APIXEL_SIZE is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is INT32.
1056N/A</p><p>
1056N/A
1056N/AX clients requiring pixel values for the various typographic fixed
1056N/Aspaces (em space, en space, and thin space) can use the following
1056N/Aalgorithm for computing these values from other properties specified
1056N/Afor a font:
1056N/A</p><pre class="literallayout">
1056N/A DeciPointsPerInch = 722.7
1056N/A EMspace = ROUND ((RESOLUTION_X * POINT_SIZE) / DeciPointsPerInch)
1056N/A ENspace = ROUND (EMspace / 2)
1056N/A THINspace = ROUND (EMspace / 3)\fP
1056N/A</pre><p>
1056N/A
1056N/Awhere a slash (/) denotes real division,
1056N/Aan asterisk (*) denotes real multiplication,
1056N/Aand ROUND denotes a function that rounds its real argument
1056N/A<span class="emphasis"><em>a</em></span> up or down
1056N/Ato the next integer.
1056N/AThis rounding is done according to X = FLOOR (
1056N/A<span class="emphasis"><em>a</em></span> + 0.5),
1056N/Awhere FLOOR is a function that rounds its real argument down to the
1056N/Anearest integer.
1056N/A</p><p>
1056N/A
1056N/APIXEL_SIZE can be approximated if not supplied as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/ADeciPointsPerInch = 722.7
1056N/Aif (PIXEL_SIZE undefined) then
1056N/A PIXEL_SIZE = ROUND ((RESOLUTION_Y * POINT_SIZE) / DeciPointsPerInch)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="POINT_SIZE"></a>POINT_SIZE</h3></div></div></div><p>
1056N/A
1056N/APOINT_SIZE is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is INT32.
1056N/A</p><p>
1056N/A
1056N/AX clients requiring device-independent values for em space,
1056N/Aen space, and thin space can use the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/A EMspace = ROUND (POINT_SIZE / 10)
1056N/A ENspace = ROUND (POINT_SIZE / 20)
1056N/A THINspace = ROUND (POINT_SIZE / 30)
1056N/A</pre><p>
1056N/A
1056N/ADesign POINT_SIZE cannot be calculated or approximated.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RESOLUTION_X_x"></a>RESOLUTION_X</h3></div></div></div><p>
1056N/A
1056N/ARESOLUTION_X is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is CARD32.
1056N/A</p><p>
1056N/A
1056N/ARESOLUTION_X cannot be calculated or approximated.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RESOLUTION_Y_y"></a>RESOLUTION_Y</h3></div></div></div><p>
1056N/A
1056N/ARESOLUTION_Y is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is CARD32.
1056N/A</p><p>
1056N/A
1056N/ARESOLUTION_X cannot be calculated or approximated.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SPACING"></a>SPACING</h3></div></div></div><p>
1056N/A
1056N/ASPACING is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/ASPACING can be calculated if not supplied as a font property,
1056N/Aaccording to the definitions given above for the
1056N/A<code class="function">FontName</code>.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="AVERAGE_WIDTH"></a>AVERAGE_WIDTH</h3></div></div></div><p>
1056N/A
1056N/AAVERAGE_WIDTH is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is INT32.
1056N/A</p><p>
1056N/A
1056N/AAVERAGE_WIDTH can be calculated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (AVERAGE_WIDTH undefined) then
1056N/A AVERAGE_WIDTH = ROUND (MEAN (ABS (width of each glyph in font)) * 10)
1056N/A * (if (dominant writing direction L-to-R) then 1 else -1)
1056N/A</pre><p>
1056N/A
1056N/Awhere MEAN is a function that returns the arithmetic mean of its arguments.
1056N/A</p><p>
1056N/A
1056N/AX clients that require values for the number of characters per inch (pitch)
1056N/Aof a monospaced font can use the following algorithm using the
1056N/AAVERAGE_WIDTH and RESOLUTION_X font properties:
1056N/A</p><pre class="literallayout">
1056N/Aif (SPACING not proportional) then
1056N/A CharPitch = (RESOLUTION_X * 10) / AVERAGE_WIDTH
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="CHARSET_REGISTRY"></a>CHARSET_REGISTRY</h3></div></div></div><p>
1056N/A
1056N/ACHARSET_REGISTRY is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/ACHARSET_REGISTRY cannot be defaulted if not supplied as a font property.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="CHARSET_ENCODING"></a>CHARSET_ENCODING</h3></div></div></div><p>
1056N/A
1056N/ACHARSET_ENCODING is as defined in the
1056N/A<code class="function">FontName</code>
1056N/Aexcept that the property type is ATOM.
1056N/A</p><p>
1056N/A
1056N/ACHARSET_ENCODING cannot be defaulted if not supplied as a font property.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="MIN_SPACE"></a>MIN_SPACE</h3></div></div></div><p>
1056N/A
1056N/AMIN_SPACE is an integer value (of type INT32)
1056N/Athat gives the recommended minimum word-space value to be used with this font.
1056N/A</p><p>
1056N/A
1056N/AMIN_SPACE can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (MIN_SPACE undefined) then
1056N/A MIN_SPACE = ROUND(0.75 * NORM_SPACE)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="NORM_SPACE"></a>NORM_SPACE</h3></div></div></div><p>
1056N/A
1056N/ANORM_SPACE is an integer value (of type INT32)
1056N/Athat gives the recommended normal word-space value to be used with this font.
1056N/A</p><p>
1056N/A
1056N/ANORM_SPACE can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/ADeciPointsPerInch = 722.7
1056N/Aif (NORM_SPACE undefined) then
1056N/A if (SPACE glyph exists) then
1056N/A NORM_SPACE = width of SPACE
1056N/A else NORM_SPACE = ROUND((0.33 * RESOLUTION_X * POINT_SIZE)/ DeciPointsPerInch)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="MAX_SPACE"></a>MAX_SPACE</h3></div></div></div><p>
1056N/A
1056N/AMAX_SPACE is an integer value (of type INT32)
1056N/Athat gives the recommended maximum word-space value to be used with this font.
1056N/A</p><p>
1056N/A
1056N/AMAX_SPACE can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (MAX_SPACE undefined) then
1056N/A MAX_SPACE = ROUND(1.5 * NORM_SPACE)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="END_SPACE"></a>END_SPACE</h3></div></div></div><p>
1056N/A
1056N/AEND_SPACE is an integer value (of type INT32)
1056N/Athat gives the recommended spacing at the end of sentences.
1056N/A</p><p>
1056N/A
1056N/AEND_SPACE can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (END_SPACE undefined) then
1056N/A END_SPACE = NORM_SPACE
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="AVG_CAPITAL_WIDTH"></a>AVG_CAPITAL_WIDTH</h3></div></div></div><p>
1056N/A
1056N/AAVG_CAPITAL_WIDTH is an integer value (of type INT32)
1056N/Athat gives the unweighted arithmetic mean of the absolute value of the
1056N/Awidth of each capital glyph in the font, in tenths of pixels,
1056N/Amultiplied by -1 if the dominant
1056N/Awriting direction for the font is right-to-left.
1056N/AThis property applies to both Latin and non-Latin fonts.
1056N/AFor Latin fonts,
1056N/Acapitals are the glyphs A through Z.
1056N/AThis property is usually used for font matching or substitution.
1056N/A</p><p>
1056N/A
1056N/AAVG_CAPITAL_WIDTH can be calculated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (AVG_CAPITAL_WIDTH undefined) then
1056N/A if (capitals exist) then
1056N/A AVG_CAPITAL_WIDTH = ROUND (MEAN
1056N/A (ABS (width of each capital glyph)) * 10)
1056N/A * (if (dominant writing direction L-to-R) then 1 else -1)
1056N/A else AVG_CAPITAL_WIDTH undefined
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="AVG_LOWERCASE_WIDTH"></a>AVG_LOWERCASE_WIDTH</h3></div></div></div><p>
1056N/A
1056N/AAVG_LOWERCASE_WIDTH is an integer value (of type INT32)
1056N/Athat gives the unweighted arithmetic mean width of the absolute value
1056N/Aof the width of each lowercase glyph in the font in tenths of pixels,
1056N/Amultiplied by -1 if the dominant
1056N/Awriting direction for the font is right-to-left.
1056N/AFor Latin fonts,
1056N/Alowercase are the glyphs a through z.
1056N/AThis property is usually used for font matching or substitution.
1056N/A</p><p>
1056N/A
1056N/AWhere appropriate,
1056N/AAVG_LOWERCASE_WIDTH can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (AVG_LOWERCASE_WIDTH undefined) then
1056N/A if (lowercase exists) then
1056N/A AVG_LOWERCASE_WIDTH = ROUND (MEAN
1056N/A (ABS (width of each lowercase glyph)) * 10)
1056N/A * (if (dominant writing direction L-to-R) then 1 else -1)
1056N/A else AVG_LOWERCASE_WIDTH undefined
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="QUAD_WIDTH"></a>QUAD_WIDTH</h3></div></div></div><p>
1056N/A
1056N/AQUAD_WIDTH is an integer typographic metric (of type INT32)
1056N/Athat gives the width of a quad (em) space.
1056N/A</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
1056N/A
1056N/ABecause all typographic fixed spaces (em, en, and thin) are constant
1056N/Afor a given font size (that is, they do not vary according to setwidth),
1056N/Athe use of this font property has been deprecated.
1056N/AX clients that require typographic fixed space values are encouraged
1056N/Ato discontinue use of QUAD_WIDTH and compute these values
1056N/Afrom other font properties (for example, PIXEL_SIZE).
1056N/AX clients that require a font-dependent width value should use either
1056N/Athe FIGURE_WIDTH or one of the average character width font properties
1056N/A(AVERAGE_WIDTH, AVG_CAPITAL_WIDTH or AVG_LOWERCASE_WIDTH).
1276N/A</p></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FIGURE_WIDTH"></a>FIGURE_WIDTH</h3></div></div></div><p>
1056N/A
1056N/AFIGURE_WIDTH is an integer typographic metric (of type INT32)
1056N/Athat gives the width of the tabular figures and the dollar sign,
1056N/Aif suitable for tabular setting (all widths equal).
1056N/AFor Latin fonts, these tabular figures are the Arabic numerals 0 through 9.
1056N/A</p><p>
1056N/A
1056N/AFIGURE_WIDTH can be approximated if not supplied as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (numerals and DOLLAR sign are defined &amp; widths are equal) then
1056N/A FIGURE_WIDTH = width of DOLLAR
1056N/Aelse FIGURE_WIDTH property undefined
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SUPERSCRIPT_X_x"></a>SUPERSCRIPT_X</h3></div></div></div><p>
1056N/A
1056N/ASUPERSCRIPT_X is an integer value (of type INT32)
1056N/Athat gives the recommended horizontal offset in pixels
1056N/Afrom the position point to the X origin of synthetic superscript text.
1056N/AIf the current position point is at [X,Y],
1056N/Athen superscripts should begin at [X + SUPERSCRIPT_X, Y - SUPERSCRIPT_Y].
1056N/A</p><p>
1056N/A
1056N/ASUPERSCRIPT_X can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (SUPERSCRIPT_X undefined) then
1056N/A if (TANGENT(ITALIC_ANGLE) defined) then
1056N/A SUPERSCRIPT_X = ROUND((0.40 * CAP_HEIGHT) / TANGENT(ITALIC_ANGLE))
1056N/A else SUPERSCRIPT_X = ROUND(0.40 * CAP_HEIGHT)
1056N/A</pre><p>
1056N/A
1056N/Awhere TANGENT is a trigonometric function that returns the tangent of
1056N/Aits argument, which is in 1/64 degrees.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SUPERSCRIPT_Y_y"></a>SUPERSCRIPT_Y</h3></div></div></div><p>
1056N/A
1056N/ASUPERSCRIPT_Y is an integer value (of type INT32)
1056N/Athat gives the recommended vertical offset in pixels
1056N/Afrom the position point to the Y origin of synthetic superscript text.
1056N/AIf the current position point is at [X,Y],
1056N/Athen superscripts should begin at [X + SUPERSCRIPT_X, Y - SUPERSCRIPT_Y].
1056N/A</p><p>
1056N/A
1056N/ASUPERSCRIPT_Y can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (SUPERSCRIPT_Y undefined) then
1056N/A SUPERSCRIPT_Y = ROUND(0.40 * CAP_HEIGHT)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SUBSCRIPT_X_x"></a>SUBSCRIPT_X</h3></div></div></div><p>
1056N/A
1056N/ASUBSCRIPT_X is an integer value (of type INT32)
1056N/Athat gives the recommended horizontal offset in pixels
1056N/Afrom the position point to the X origin of synthetic subscript text.
1056N/AIf the current position point is at [X,Y],
1056N/Athen subscripts should begin at [X + SUBSCRIPT_X, Y + SUBSCRIPT_Y].
1056N/A</p><p>
1056N/A
1056N/ASUBSCRIPT_X can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (SUBSCRIPT_X undefined) then
1056N/A if (TANGENT(ITALIC_ANGLE) defined) then
1056N/A SUBSCRIPT_X = ROUND((0.40 * CAP_HEIGHT) / TANGENT(ITALIC_ANGLE))
1056N/A else SUBSCRIPT_X = ROUND(0.40 * CAP_HEIGHT)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SUBSCRIPT_Y_y"></a>SUBSCRIPT_Y</h3></div></div></div><p>
1056N/A
1056N/ASUBSCRIPT_Y is an integer value (of type INT32)
1056N/Athat gives the recommended vertical offset in pixels
1056N/Afrom the position point to the Y origin of synthetic subscript text.
1056N/AIf the current position point is at [X,Y],
1056N/Athen subscripts should begin at [X + SUBSCRIPT_X, Y + SUBSCRIPT_Y].
1056N/A</p><p>
1056N/A
1056N/ASUBSCRIPT_Y can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (SUBSCRIPT_Y undefined) then
1056N/A SUBSCRIPT_Y = ROUND(0.40 * CAP_HEIGHT)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SUPERSCRIPT_SIZE"></a>SUPERSCRIPT_SIZE</h3></div></div></div><p>
1056N/A
1056N/ASUPERSCRIPT_SIZE is an integer value (of type INT32)
1056N/Athat gives the recommended body size of synthetic superscripts
1056N/Ato be used with this font, in pixels.
1056N/AThis will generally be smaller than the size of the current font;
1056N/Athat is, superscripts are imaged from a smaller font
1056N/Aoffset according to SUPERSCRIPT_X and SUPERSCRIPT_Y.
1056N/A</p><p>
1056N/A
1056N/ASUPERSCRIPT_SIZE can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (SUPERSCRIPT_SIZE undefined) then
1056N/A SUPERSCRIPT_SIZE = ROUND(0.60 * PIXEL_SIZE)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SUBSCRIPT_SIZE"></a>SUBSCRIPT_SIZE</h3></div></div></div><p>
1056N/A
1056N/ASUBSCRIPT_SIZE is an integer value (of type INT32)
1056N/Athat gives the recommended body size of synthetic subscripts
1056N/Ato be used with this font, in pixels.
1056N/AAs with SUPERSCRIPT_SIZE,
1056N/Athis will generally be smaller than the size of the current font;
1056N/Athat is, subscripts are imaged from a smaller
1056N/Afont offset according to SUBSCRIPT_X and SUBSCRIPT_Y.
1056N/A</p><p>
1056N/A
1056N/ASUBSCRIPT_SIZE can be approximated if not provided as a font property,
1056N/Aaccording to the algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (SUBSCRIPT_SIZE undefined) then
1056N/A SUBSCRIPT_SIZE = ROUND(0.60 * PIXEL_SIZE)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="SMALL_CAP_SIZE"></a>SMALL_CAP_SIZE</h3></div></div></div><p>
1056N/A
1056N/ASMALL_CAP_SIZE is an integer value (of type INT32)
1056N/Athat gives the recommended body size of synthetic small capitals
1056N/Ato be used with this font, in pixels.
1056N/ASmall capitals are generally imaged from a smaller font
1056N/Aof slightly more weight.
1056N/ANo offset [X,Y] is necessary.
1056N/A</p><p>
1056N/A
1056N/ASMALL_CAP_SIZE can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (SMALL_CAP_SIZE undefined) then
1056N/A SMALL_CAP_SIZE = ROUND(PIXEL_SIZE * ((X_HEIGHT
1056N/A + ((CAP_HEIGHT - X_HEIGHT) / 3)) / CAP_HEIGHT))
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="UNDERLINE_POSITION"></a>UNDERLINE_POSITION</h3></div></div></div><p>
1056N/A
1056N/AUNDERLINE_POSITION is an integer value (of type INT32)
1056N/Athat gives the recommended vertical offset in pixels
1056N/Afrom the baseline to the top of the underline.
1056N/AIf the current position point is at [X,Y],
1056N/Athe top of the baseline is given by [X, Y + UNDERLINE_POSITION].
1056N/A</p><p>
1056N/A
1056N/AUNDERLINE_POSITION can be approximated if not provided as a font
1056N/Aproperty, according to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (UNDERLINE_POSITION undefined) then
1056N/A UNDERLINE_POSITION = ROUND((maximum descent) / 2)
1056N/A</pre><p>
1056N/Awhere <span class="emphasis"><em>maximum descent</em></span>
1056N/Ais the maximum descent (below the baseline)
1056N/Ain pixels of any glyph in the font.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="UNDERLINE_THICKNESS"></a>UNDERLINE_THICKNESS</h3></div></div></div><p>
1056N/A
1056N/AUNDERLINE_THICKNESS is an integer value (of type INT32)
1056N/Athat gives the recommended underline thickness, in pixels.
1056N/A</p><p>
1056N/A
1056N/AUNDERLINE_THICKNESS can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/ACapStemWidth = average width of the stems of capitals
1056N/Aif (UNDERLINE_THICKNESS undefined) then
1056N/A UNDERLINE_THICKNESS = CapStemWidth
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="STRIKEOUT_ASCENT"></a>STRIKEOUT_ASCENT</h3></div></div></div><p>
1056N/A
1056N/ASTRIKEOUT_ASCENT is an integer value (of type INT32)
1056N/Athat gives the vertical ascent for boxing or voiding glyphs in this font.
1056N/AIf the current position is at [X,Y] and the string extent is EXTENT,
1056N/Athe upper-left corner of the strikeout box is at [X, Y - STRIKEOUT_ASCENT]
1056N/Aand the lower-right corner of the box is at [X + EXTENT, Y + STRIKEOUT_DESCENT].
1056N/A</p><p>
1056N/A
1056N/ASTRIKEOUT_ASCENT can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (STRIKEOUT_ASCENT undefined)
1056N/A STRIKEOUT_ASCENT = maximum ascent
1056N/A</pre><p>
1056N/Awhere <span class="emphasis"><em>maximum ascent</em></span>
1056N/Ais the maximum ascent (above the baseline)
1056N/Ain pixels of any glyph in the font.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="STRIKEOUT_DESCENT"></a>STRIKEOUT_DESCENT</h3></div></div></div><p>
1056N/A
1056N/ASTRIKEOUT_DESCENT is an integer value (of type INT32)
1056N/Athat gives the vertical descent for boxing or voiding glyphs in this font.
1056N/AIf the current position is at [X,Y] and the string extent is EXTENT,
1056N/Athe upper-left corner of the strikeout box is at [X, Y - STRIKEOUT_ASCENT]
1056N/Aand the lower-right corner of the box is at
1056N/A[X + EXTENT, Y + STRIKEOUT_DESCENT].
1056N/A</p><p>
1056N/A
1056N/ASTRIKEOUT_DESCENT can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (STRIKEOUT_DESCENT undefined)
1056N/A STRIKEOUT_DESCENT = maximum descent
1056N/A</pre><p>
1056N/Awhere <span class="emphasis"><em>maximum descent</em></span> is the maximum
1056N/Adescent (below the baseline)
1056N/Ain pixels of any glyph in the font.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="ITALIC_ANGLE"></a>ITALIC_ANGLE</h3></div></div></div><p>
1056N/A
1056N/AITALIC_ANGLE is an integer value (of type INT32)
1056N/Athat gives the nominal posture angle of the typeface design, in 1/64 degrees,
1056N/Ameasured from the glyph origin counterclockwise from the three o'clock position.
1056N/A</p><p>
1056N/A
1056N/AITALIC_ANGLE can be defaulted if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (ITALIC_ANGLE undefined) then
1056N/A ITALIC_ANGLE = (90 * 64)
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="CAP_HEIGHT"></a>CAP_HEIGHT</h3></div></div></div><p>
1056N/A
1056N/ACAP_HEIGHT is an integer value (of type INT32)
1056N/Athat gives the nominal height of the capital letters contained in the font,
1056N/Aas specified by the FOUNDRY or typeface designer.
1056N/A</p><p>
1056N/A
1056N/ACertain clients require CAP_HEIGHT to compute scale factors and
1056N/Apositioning offsets for synthesized glyphs where this
1056N/Ainformation or designed glyphs are not explicitly provided by the font
1056N/A(for example, small capitals, superiors, inferiors, and so on).
1056N/ACAP_HEIGHT is also a critical factor in font matching and substitution.
1056N/A</p><p>
1056N/A
1056N/ACAP_HEIGHT can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (CAP_HEIGHT undefined) then
1056N/A if (Latin font) then
1056N/A CAP_HEIGHT = XCharStruct.ascent[glyph X]
1056N/A else if (capitals exist) then
1056N/A CAP_HEIGHT = XCharStruct.ascent[some unaccented capital glyph]
1056N/A else CAP_HEIGHT undefined
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="X_HEIGHT"></a>X_HEIGHT</h3></div></div></div><p>
1056N/A
1056N/AX_HEIGHT is an integer value (of type INT32)
1056N/Athat gives the nominal height above the baseline of the lowercase glyphs
1056N/Acontained in the font,
1056N/Aas specified by the FOUNDRY or typeface designer.
1056N/A</p><p>
1056N/A
1056N/AAs with CAP_HEIGHT,
1056N/AX_HEIGHT is required by certain clients to compute scale factors
1056N/Afor synthesized small capitals where this information is not explicitly
1056N/Aprovided by the font resource.
1056N/AX_HEIGHT is a critical factor in font matching and substitution.
1056N/A</p><p>
1056N/A
1056N/AX_HEIGHT can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (X_HEIGHT undefined) then
1056N/A if (Latin font) then
1056N/A X_HEIGHT = XCharStruct.ascent[glyph x]
1056N/A else if (lowercase exists) then
1056N/A X_HEIGHT = XCharStruct.ascent[some unaccented lc glyph without an ascender]
1056N/A else X_HEIGHT undefined
1276N/A</pre></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RELATIVE_SETWIDTH"></a>RELATIVE_SETWIDTH</h3></div></div></div><p>
1056N/A
1056N/ARELATIVE_SETWIDTH is an unsigned integer value (of type CARD32)
1056N/Athat gives the coded proportionate width of the font,
1056N/Arelative to all known fonts of the same typeface family,
1056N/Aaccording to the type designer's or FOUNDRY's judgment.
1056N/A</p><p>
1056N/A
1056N/ARELATIVE_SETWIDTH ranges from 10 to 90 or is 0 if undefined or unknown.
1056N/AThe following reference values are defined:
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Code</th><th align="left">English Translation</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">Undefined</td><td align="left">Undefined or unknown</td></tr><tr><td align="left">10</td><td align="left">UltraCondensed</td><td align="left">The lowest ratio of average width to height</td></tr><tr><td align="left">20</td><td align="left">ExtraCondensed</td><td class="auto-generated"> </td></tr><tr><td align="left">30</td><td align="left">Condensed</td><td align="left">Condensed, Narrow, Compressed, ...</td></tr><tr><td align="left">40</td><td align="left">SemiCondensed</td><td class="auto-generated"> </td></tr><tr><td align="left">50</td><td align="left">Medium</td><td align="left">Medium, Normal, Regular, ...</td></tr><tr><td align="left">60</td><td align="left">SemiExpanded</td><td align="left">SemiExpanded, DemiExpanded, ...</td></tr><tr><td align="left">70</td><td align="left">Expanded</td><td class="auto-generated"> </td></tr><tr><td align="left">80</td><td align="left">ExtraExpanded</td><td align="left">ExtraExpanded, Wide, ...</td></tr><tr><td align="left">90</td><td align="left">UltraExpanded</td><td align="left">The highest ratio of average width to height</td></tr></tbody></table></div><p>
1056N/A
1056N/ARELATIVE_SETWIDTH can be defaulted if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (RELATIVE_SETWIDTH undefined) then
1056N/A RELATIVE_SETWIDTH = 50
1056N/A</pre><p>
1056N/A
1056N/AFor polymorphic fonts, RELATIVE_SETWIDTH is not necessarily a
1056N/Alinear function of the font's setwidth axis.
1056N/A</p><p>
1056N/A
1056N/AX clients that want to obtain a calculated proportionate width of the
1056N/Afont (that is, a font-independent way of identifying the proportionate
1056N/Awidth across all fonts and all font vendors) can use the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/ASETWIDTH = AVG_CAPITAL_WIDTH / (CAP_HEIGHT * 10)
1056N/A</pre><p>
1056N/A
1056N/Awhere SETWIDTH is a real number with zero being the narrowest
1056N/Acalculated setwidth.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RELATIVE_WEIGHT"></a>RELATIVE_WEIGHT</h3></div></div></div><p>
1056N/A
1056N/ARELATIVE_WEIGHT is an unsigned integer value (of type CARD32)
1056N/Athat gives the coded weight of the font,
1056N/Arelative to all known fonts of the same typeface family,
1056N/Aaccording to the type designer's or FOUNDRY's judgment.
1056N/A</p><p>
1056N/A
1056N/ARELATIVE_WEIGHT ranges from 10 to 90 or is 0 if undefined or unknown.
1056N/AThe following reference values are defined:
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Code</th><th align="left">English Translation</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">Undefined</td><td align="left">Undefined or unknown</td></tr><tr><td align="left">10</td><td align="left">UltraLight</td><td align="left">The lowest ratio of stem width to height</td></tr><tr><td align="left">20</td><td align="left">ExtraLight</td><td class="auto-generated"> </td></tr><tr><td align="left">30</td><td align="left">Light</td><td class="auto-generated"> </td></tr><tr><td align="left">40</td><td align="left">SemiLight</td><td align="left">SemiLight, Book, ...</td></tr><tr><td align="left">50</td><td align="left">Medium</td><td align="left">Medium, Normal, Regular,...</td></tr><tr><td align="left">60</td><td align="left">SemiBold</td><td align="left">SemiBold, DemiBold, ...</td></tr><tr><td align="left">70</td><td align="left">Bold</td><td class="auto-generated"> </td></tr><tr><td align="left">80</td><td align="left">ExtraBold</td><td align="left">ExtraBold, Heavy, ...</td></tr><tr><td align="left">90</td><td align="left">UltraBold</td><td align="left">
1056N/AUltraBold, Black, ..., the highest ratio of stem width to height
1056N/A </td></tr></tbody></table></div><p>
1056N/A
1056N/ARELATIVE_WEIGHT can be defaulted if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (RELATIVE_WEIGHT undefined) then
1056N/A RELATIVE_WEIGHT = 50
1056N/A</pre><p>
1056N/A
1056N/AFor polymorphic fonts, RELATIVE_WEIGHT is not necessarily a
1056N/Alinear function of the font's weight axis.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="WEIGHT"></a>WEIGHT</h3></div></div></div><p>
1056N/A
1056N/ACalculated WEIGHT is an unsigned integer value (of type CARD32)
1056N/Athat gives the calculated weight of the font,
1056N/Acomputed as the ratio of capital stem width to CAP_HEIGHT,
1056N/Ain the range 0 to 1000, where 0 is the lightest weight.
1056N/A</p><p>
1056N/A
1056N/AWEIGHT can be calculated if not supplied as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/ACapStemWidth = average width of the stems of capitals
1056N/Aif (WEIGHT undefined) then
1056N/A WEIGHT = ROUND ((CapStemWidth * 1000) / CAP_HEIGHT)
1056N/A</pre><p>
1056N/A
1056N/AA calculated value for weight is necessary when matching fonts from
1056N/Adifferent families because both the RELATIVE_WEIGHT and the WEIGHT_NAME are
1056N/Aassigned by the typeface supplier, according to its tradition and practice,
1056N/Aand therefore, are somewhat subjective.
1056N/ACalculated WEIGHT provides a font-independent way of identifying
1056N/Athe weight across all fonts and all font vendors.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RESOLUTION"></a>RESOLUTION</h3></div></div></div><p>
1056N/A
1056N/ARESOLUTION is an integer value (of type INT32)
1056N/Athat gives the resolution for which this font was created,
1056N/Ameasured in 1/100 pixels per point.
1056N/A</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
1056N/A
1056N/AAs independent horizontal and vertical design resolution components
1056N/Aare required to accommodate displays with nonsquare aspect ratios,
1056N/Athe use of this font property has been deprecated,
1056N/Aand independent RESOLUTION_X and RESOLUTION_Y font name fields/properties
1056N/Ahave been defined (see sections 3.1.2.9 and 3.1.2.10).
1056N/AX clients are encouraged to discontinue use of the RESOLUTION property
1056N/Aand are encouraged to use the appropriate X,Y resolution properties,
1056N/Aas required.
1056N/A
1276N/A</p></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="Font_support"></a>FONT</h3></div></div></div><p>
1056N/A
1056N/AFONT is a string (of type ATOM) that gives the full XLFD name of the
1056N/Afont-that is, the value can be used to open another
1056N/Ainstance of the same font.
1056N/A</p><p>
1056N/A
1056N/AIf not provided, the FONT property cannot be calculated.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FACE_NAME"></a>FACE_NAME</h3></div></div></div><p>
1056N/A
1056N/AFACE_NAME is a human-understandable string (of type ATOM)
1056N/Athat gives the full device-independent typeface name,
1056N/Aincluding the owner, weight, slant, set, and so on
1056N/Abut not the resolution, size, and so on.
1056N/AThis property may be used as feedback during font selection.
1056N/A</p><p>
1056N/A
1056N/AFACE_NAME cannot be calculated or approximated if not provided as a font
1056N/Aproperty.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FULL_NAME"></a>FULL_NAME</h3></div></div></div><p>
1056N/A
1056N/AFULL_NAME is the same as FACE_NAME.
1056N/AIts use is deprecated, but it is found on some old fonts.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="COPYRIGHT"></a>COPYRIGHT</h3></div></div></div><p>
1056N/A
1056N/ACOPYRIGHT is a human-understandable string (of type ATOM)
1056N/Athat gives the copyright information of the legal owner
1056N/Aof the digital font data.
1056N/A</p><p>
1056N/A
1056N/AThis information is a required component of a font
1056N/Abut is independent of the particular format used to represent it
1056N/A(that is, it cannot be captured as a comment that could later
1056N/Abe thrown away for efficiency reasons).
1056N/A</p><p>
1056N/A
1056N/ACOPYRIGHT cannot be calculated or approximated if not provided as a font
1056N/Aproperty.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="NOTICE"></a>NOTICE</h3></div></div></div><p>
1056N/A
1056N/ANOTICE is a human-understandable string (of type ATOM)
1056N/Athat gives the copyright information of the legal owner of the font design
1056N/Aor, if not applicable, the trademark information for the typeface FAMILY_NAME.
1056N/A</p><p>
1056N/A
1056N/ATypeface design and trademark protection laws vary from country to country,
1056N/Athe USA having no design copyright protection currently
1056N/Awhile various countries in Europe offer both design and typeface family name
1056N/Atrademark protection.
1056N/AAs with COPYRIGHT,
1056N/Athis information is a required component of a font
1056N/Abut is independent of the particular format used to represent it.
1056N/A</p><p>
1056N/A
1056N/ANOTICE cannot be calculated or approximated if not provided as
1056N/Aa font property.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="DESTINATION"></a>DESTINATION</h3></div></div></div><p>
1056N/A
1056N/ADESTINATION is an unsigned integer code (of type CARD32)
1056N/Athat gives the font design destination,
1056N/Athat is, whether it was designed as a screen proofing font to match
1056N/Aprinter font glyph widths (WYSIWYG), as an optimal video font (possibly with
1056N/Acorresponding printer font) for extended screen viewing (video text), and so on.
1056N/A</p><p>
1056N/A
1056N/AThe font design considerations are very different,
1056N/Aand at current display resolutions,
1056N/Athe readability and legibility of these two kinds of screen fonts
1056N/Aare very different.
1056N/ADESTINATION allows publishing clients that use X to model the printed page
1056N/Aand video text clients, such as on-line documentation browsers,
1056N/Ato query for X screen fonts that suit their particular requirements.
1056N/A</p><p>
1056N/A
1056N/AThe encoding is as follows:
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Code</th><th align="left">English Translation</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">0</td><td align="left">WYSIWYG</td><td align="left">
1056N/AThe font is optimized to match the typographic design and metrics of an
1056N/Aequivalent printer font.
1056N/A </td></tr><tr><td align="left">1</td><td align="left">Video text</td><td align="left">
1056N/AThe font is optimized for screen legibility and readability.
1276N/A </td></tr></tbody></table></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FONT_TYPE"></a>FONT_TYPE</h3></div></div></div><p>
1056N/A
1056N/AFONT_TYPE is a human-understandable string (of type ATOM) that
1056N/Adescribes the format of
1056N/Athe font data as they are read from permanent storage by the current font source.
1056N/AIt is a static attribute of the source data. It can be used
1056N/Aby clients to select a type of bitmap or outline font
1056N/Awithout regard to the rasterizer used to render the font.
1056N/A</p><p>
1056N/A
1056N/APredefined values are as follows:
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Value</th><th align="left">When applicable</th></tr></thead><tbody><tr><td align="left">"Bitmap"</td><td align="left">
1056N/AHand-tuned bitmap fonts. Some attempt has been made to optimize the visual
1056N/Aappearance of the font for the requested size and resolution.
1276N/A </td></tr><tr><td align="left">"Prebuilt"</td><td align="left">
1056N/AAll bitmap format fonts that cannot be described as "Bitmap", that is,
1056N/Ahandtuned.
1056N/AFor example, a bitmap format font that was generated mechanically using
1056N/Aa scalable font rasterizer would be considered "Prebuilt", not "Bitmap".
1276N/A </td></tr><tr><td align="left">"Type 1"</td><td align="left">Any Type 1 font.</td></tr><tr><td align="left">"TrueType"</td><td align="left">Any TrueType font.</td></tr><tr><td align="left">"Speedo"</td><td align="left">Any Speedo font.</td></tr><tr><td align="left">"F3"</td><td align="left">Any F3 font.</td></tr></tbody></table></div><p>
1056N/AOther values may be registered with the X Consortium.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FONT_VERSION"></a>FONT_VERSION</h3></div></div></div><p>
1056N/A
1056N/AFONT_VERSION is a human-understandable string (of type ATOM)
1056N/Athat describes the formal or informal version of the font.
1056N/A<code class="function">None</code> is a valid value.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RASTERIZER_NAME"></a>RASTERIZER_NAME</h3></div></div></div><p>
1056N/A
1056N/ARASTERIZER_NAME is a human-understandable string (of type ATOM)
1056N/Athat is the specific name of the
1056N/Arasterizer that has performed some rasterization operation
1056N/A(such as scaling from outlines) on this font.
1056N/A</p><p>
1056N/A
1056N/ATo define a RASTERIZER_NAME, the following format is
1056N/Arecommended:
1276N/A</p><div class="informaltable"><table border="0"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left">RasterizerName ::=</td><td align="left">OrganizationId Space Rasterizer</td></tr><tr><td align="left">OrganizationId ::=</td><td align="left">
1056N/ASTRING8—the X Registry ORGANIZATION name of the rasterizer
1056N/Aimplementor or maintainer.
1056N/A </td></tr><tr><td align="left">Rasterizer ::=</td><td align="left">
1056N/Athe case-sensitive, human-understandable product name of the rasterizer.
1056N/AWords within this name should be separated by a single SPACE.
1056N/A </td></tr><tr><td align="left">Space ::=</td><td align="left">OCTET−" " (SPACE)</td></tr></tbody></table></div><p>
1056N/A
1056N/AExamples:
1056N/A</p><pre class="literallayout">
1056N/A X Consortium Bit Scaler
1056N/A X Consortium Type 1 Rasterizer
1056N/A X Consortium Speedo Rasterizer
1056N/A Adobe Type Manager
1056N/A Sun TypeScaler
1056N/A</pre><p>
1056N/A
1056N/AIf RASTERIZER_NAME is not defined, or is <code class="function">None</code>, no
1056N/Arasterization operation has been applied to the FONT_TYPE.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RASTERIZER_VERSION"></a>RASTERIZER_VERSION</h3></div></div></div><p>
1056N/A
1056N/ARASTERIZER_VERSION is a human-understandable string (of type
1056N/AATOM) that represents the formal or informal version of a
1056N/Afont rasterizer.
1056N/AThe RASTERIZER_VERSION should match the corresponding
1056N/Aproduct version number known to users, when applicable.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RAW_ASCENT"></a>RAW_ASCENT</h3></div></div></div><p>
1056N/A
1056N/AFor a font with a transformation matrix, RAW_ASCENT is the font ascent
1056N/Ain 1000 pixel metrics
1276N/A(see <a class="xref" href="#Metrics_and_Font_Properties" title="Metrics and Font Properties">Metrics and Font Properties</a>).
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RAW_DESCENT"></a>RAW_DESCENT</h3></div></div></div><p>
1056N/A
1056N/AFor a font with a transformation matrix, RAW_DESCENT is the font
1056N/Adescent in 1000 pixel metrics
1276N/A(see <a class="xref" href="#Metrics_and_Font_Properties" title="Metrics and Font Properties">Metrics and Font Properties</a>).
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="RAW_"></a>RAW_*</h3></div></div></div><p>
1056N/A
1056N/AFor a font with a transformation matrix,
1056N/Aall font properties that represent horizontal or vertical sizes or
1056N/Adisplacements will be accompanied by a new property, named as the
1056N/Aoriginal except prefixed with "RAW_", that is computed as
1276N/Adescribed in <a class="xref" href="#Metrics_and_Font_Properties" title="Metrics and Font Properties">Metrics and Font Properties</a>.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="AXIS_NAMES"></a>AXIS_NAMES</h3></div></div></div><p>
1056N/A
1056N/AAXIS_NAMES is a list of all the
1056N/Anames of the axes for a polymorphic font, separated by a null (0) byte.
1056N/AThese names are suitable for presentation in a user interface
1056N/A(see section 6).
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="AXIS_LIMITS"></a>AXIS_LIMITS</h3></div></div></div><p>
1056N/A
1056N/AAXIS_LIMITS is a list of integers, two for each axis,
1056N/Agiving the minimum and maximum allowable values for that axis of a
1056N/Apolymorphic font
1276N/A(see <a class="xref" href="#Polymorphic_Fonts" title="Chapter 6. Polymorphic Fonts"><em>Polymorphic Fonts</em></a>).
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="AXIS_TYPES"></a>AXIS_TYPES</h3></div></div></div><p>
1056N/A
1056N/AAXIS_TYPES is like AXIS_NAMES,
1056N/Abut can be registered as having specific semantics
1056N/A(see section 6).
1276N/A</p></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Built_in_Font_Property_Atoms"></a>Built-in Font Property Atoms</h2></div></div></div><p>
1056N/A
1056N/AThe following font property atom definitions were predefined in the initial
1056N/Aversion of the core protocol:
1276N/A</p><div class="informaltable"><table border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Font Property/Atom Name</th><th align="left">Property Type</th></tr></thead><tbody><tr><td align="left">MIN_SPACE</td><td align="left">INT32</td></tr><tr><td align="left">NORM_SPACE</td><td align="left">INT32</td></tr><tr><td align="left">MAX_SPACE</td><td align="left">INT32</td></tr><tr><td align="left">END_SPACE</td><td align="left">INT32</td></tr><tr><td align="left">SUPERSCRIPT_X</td><td align="left">INT32</td></tr><tr><td align="left">SUPERSCRIPT_Y</td><td align="left">INT32</td></tr><tr><td align="left">SUBSCRIPT_X</td><td align="left">INT32</td></tr><tr><td align="left">SUBSCRIPT_Y</td><td align="left">INT32</td></tr><tr><td align="left">UNDERLINE_POSITION</td><td align="left">INT32</td></tr><tr><td align="left">UNDERLINE_THICKNESS</td><td align="left">INT32</td></tr><tr><td align="left">STRIKEOUT_ASCENT</td><td align="left">INT32</td></tr><tr><td align="left">STRIKEOUT_DESCENT</td><td align="left">INT32</td></tr><tr><td align="left">FONT_ASCENT</td><td align="left">INT32</td></tr><tr><td align="left">FONT_DESCENT</td><td align="left">INT32</td></tr><tr><td align="left">ITALIC_ANGLE</td><td align="left">INT32</td></tr><tr><td align="left">X_HEIGHT</td><td align="left">INT32</td></tr><tr><td align="left">QUAD_WIDTH</td><td align="left">INT32 −<sup>deprecated</sup></td></tr><tr><td align="left">WEIGHT</td><td align="left">CARD32</td></tr><tr><td align="left">POINT_SIZE</td><td align="left">INT32</td></tr><tr><td align="left">RESOLUTION</td><td align="left">CARD32 −<sup>deprecated</sup></td></tr><tr><td align="left">COPYRIGHT</td><td align="left">ATOM</td></tr><tr><td align="left">FULL_NAME</td><td align="left">ATOM −<sup>deprecated</sup></td></tr><tr><td align="left">FAMILY_NAME</td><td align="left">ATOM</td></tr><tr><td align="left">DEFAULT_CHAR</td><td align="left">CARD32</td></tr></tbody></table></div></div></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="Matrix_Transformations"></a>Chapter 4. Matrix Transformations</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="sect1"><a href="#Metrics_and_Font_Properties">Metrics and Font Properties</a></span></dt></dl></div><p>
1056N/A
1056N/AAn XLFD name presented to the server can have the POINT_SIZE or PIXEL_SIZE
1056N/Afield begin with the character "[". If the first character of the field
1056N/Ais "[", the character must be followed with ASCII representations of
1056N/Afour floating point numbers and a trailing "]", with white space
1056N/Aseparating the numbers and optional white space separating the numbers
1056N/Afrom the "[" and "]" characters. Numbers use standard floating point
1056N/Asyntax but use the character "~" to represent a minus sign in the mantissa
1056N/Aor exponent.
1056N/A</p><p>
1056N/A
1056N/AThe BNF for a matrix transformation string is as follows:
1276N/A</p><div class="informaltable"><table border="0"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left">MatrixString ::=</td><td align="left">
1056N/ALeftBracket OptionalSpace Float Space Float Space
1056N/AFloat Space Float OptionalSpace RightBracket
1056N/A </td></tr><tr><td align="left">OptionalSpace ::=</td><td align="left">"" | Space</td></tr><tr><td align="left">Space ::=</td><td align="left">SpaceChar | SpaceChar Space</td></tr><tr><td align="left">Float ::=</td><td align="left">Mantissa | Mantissa Exponent</td></tr><tr><td align="left">Mantissa ::=</td><td align="left">Sign Number | Number</td></tr><tr><td align="left">Sign ::=</td><td align="left">Plus | Tilde</td></tr><tr><td align="left">Number ::=</td><td align="left">Integer | Integer Dot Integer | Dot Integer</td></tr><tr><td align="left">Integer ::=</td><td align="left">Digit | Digit Integer</td></tr><tr><td align="left">Digit ::=</td><td align="left">
1056N/A"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
1056N/A </td></tr><tr><td align="left">Exponent ::=</td><td align="left">"e" SignedInteger | "E" SignedInteger</td></tr><tr><td align="left">SignedInteger ::=</td><td align="left">Sign Integer | Integer</td></tr><tr><td align="left">LeftBracket ::=</td><td align="left">OCTET − "[" (LEFT SQUARE BRACKET)</td></tr><tr><td align="left">RightBracket ::=</td><td align="left">OCTET − "]" (RIGHT SQUARE BRACKET)</td></tr><tr><td align="left">SpaceChar ::=</td><td align="left">OCTET − " " (SPACE)</td></tr><tr><td align="left">Tilde ::=</td><td align="left">OCTET − "˜" (TILDE)</td></tr><tr><td align="left">Plus ::=</td><td align="left">OCTET − "+" (PLUS)</td></tr><tr><td align="left">Dot ::=</td><td align="left">OCTET − "." (FULL STOP)</td></tr></tbody></table></div><p>
1056N/A
1056N/AThe string "[a b c d]" represents a graphical transformation of the glyphs
1056N/Ain the font by the matrix
1276N/A</p><div class="informaltable"><table border="0"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left">[ a b 0 ]</td></tr><tr><td align="left">[ c d 0 ]</td></tr><tr><td align="left">[ 0 0 1 ]</td></tr></tbody></table></div><p>
1056N/A
1056N/AAll transformations occur around the origin of the glyph. The
1056N/Arelationship between the current scalar values and the matrix
1056N/Atransformation values is that the scalar value "N" in the POINT_SIZE field
1056N/Aproduces the same glyphs as the matrix "[N/10 0 0 N/10]" in that field,
1056N/Aand the scalar value "N" in the PIXEL_SIZE field produces the same glyphs
1056N/Aas the matrix "[N*RESOLUTION_X/RESOLUTION_Y 0 0 N]" in that field.
1056N/A</p><p>
1056N/A
1056N/AIf matrices are specified for both the POINT_SIZE and PIXEL_SIZE, they
1056N/Amust bear the following relationship to each other within an
1056N/Aimplementation-specific tolerance:
1056N/A</p><div class="blockquote"><blockquote class="blockquote"><p>
1056N/A PIXEL_SIZE_MATRIX = [Sx 0 0 Sy] * POINT_SIZE_MATRIX
1056N/A</p></blockquote></div><p>
1056N/Awhere
1056N/A</p><div class="blockquote"><blockquote class="blockquote"><p>
1056N/A Sx = RESOLUTION_X / 72.27
1056N/A</p><p>
1056N/A Sy = RESOLUTION_Y / 72.27
1056N/A</p></blockquote></div><p>
1056N/A
1056N/AIf either the POINT_SIZE or PIXEL_SIZE field is unspecified (either "0" or
1056N/Awildcarded), the preceding formulas can be used to compute one from the
1056N/Aother.
1276N/A</p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Metrics_and_Font_Properties"></a>Metrics and Font Properties</h2></div></div></div><p>
1056N/A
1056N/AIn this section, the phrase "1000 pixel metrics" means the
1056N/Ametrics that would be obtained if the rasterizer took the base untransformed
1056N/Adesign used to generate the transformed font and scaled it linearly to a
1056N/Aheight of 1000 pixels, with no rotation component. Note that there may be no
1056N/Away for the application to actually request this font since the rasterizer
1056N/Amay use different outlines or rasterization techniques at that size from the
1056N/Aones used to generate the transformed font.
1056N/A</p><p>
1056N/A
1056N/ANotes on properties and metrics:
1056N/A</p><p>
1056N/A
1056N/AThe per-char ink metrics (lbearing, rbearing, ascent, and descent)
1056N/Arepresent the ink extent of the transformed glyph around its origin.
1056N/A</p><p>
1056N/A
1056N/AThe per-char width is the x component of the transformed character width.
1056N/A</p><p>
1056N/A
1056N/AThe font ascent and descent are the y component of the transformed font
1056N/Aascent or descent.
1056N/A</p><p>
1056N/A
1056N/AThe FONT property returns a name reflecting the matrix being
1056N/Aused-that is, the name returned can be used to open another
1056N/Ainstance of the same font. The returned name is not necessarily an
1056N/Aexact copy of the requested name. If, for example, the user
1056N/Arequests
1056N/A</p><pre class="literallayout">
1056N/A -misc-fixed-medium-r-normal--0-[2e1 0 0.0 +10.0]-72-72-c-0-iso8859-1
1056N/A</pre><p>
1056N/Athe resulting FONT property might be
1056N/A</p><pre class="literallayout">
1056N/A -misc-fixed-medium-r-normal--[19.9 0 0 10]-[20 0 0 10]-72-72-c-0-iso8859-1
1056N/A</pre><p>
1056N/AThe FONT property will always include matrices in both the PIXEL_SIZE
1056N/Aand the POINT_SIZE fields.
1056N/A</p><p>
1056N/A
1056N/ATo allow accurate client positioning of transformed characters, the
1056N/Aattributes field of the XCharInfo contains the width of the character in
1056N/A1000 pixel metrics. This attributes field should be interpreted as a signed
1056N/Ainteger.
1056N/A</p><p>
1056N/A
1056N/AThere will always be 2 new font properties defined, RAW_ASCENT and
1056N/ARAW_DESCENT, that hold the ascent and descent in 1000 pixel metrics.
1056N/A</p><p>
1056N/A
1056N/AAll font properties that represent horizontal widths or displacements
1056N/Ahave as their value the x component of the transformed width or
1056N/Adisplacement. All font properties that represent vertical heights or
1056N/Adisplacements have as their value the y component of the transformed
1056N/Aheight or displacement. Each such property will be accompanied by a new
1056N/Aproperty, named as the original except prefixed with "RAW_", that gives
1056N/Athe value of the width, height, or displacement in 1000 pixel metrics.
1276N/A</p></div></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="Scalable_Fonts"></a>Chapter 5. Scalable Fonts</h2></div></div></div><p>
1056N/A
1056N/AThe XLFD is designed to support scalable fonts. A scalable font is a
1056N/Afont source from which instances of arbitrary size can be derived.
1056N/AA scalable font source might be one or more outlines
1056N/Atogether with zero or more hand-tuned bitmap fonts at specific sizes and
1056N/Aresolutions, or it might be a programmatic description together with
1056N/Azero or more bitmap fonts, or some other format
1056N/A(perhaps even just a single bitmap font).
1056N/A</p><p>
1056N/A
1056N/AThe following definitions are useful for discussing scalable fonts:
1056N/A</p><p>
1056N/A
1056N/A<code class="function">Well-formed XLFD pattern</code>
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/A<span class="bold"><strong>Well-formed XLFD pattern</strong></span>
1056N/A </p><p>
1056N/AA pattern string containing 14 hyphens, one of which is
1056N/Athe first character of the pattern. Wildcard characters are permitted
1056N/Ain the fields of a well-formed XLFD pattern.
1276N/A </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/A<code class="function">Scalable font name</code>
1056N/A</p><p>
1056N/AA well-formed XLFD pattern containing no wildcards and containing the
1056N/Adigit "0" in the PIXEL_SIZE, POINT_SIZE, and AVERAGE_WIDTH fields.
1276N/A </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/A<code class="function">Scalable fields</code>
1056N/A</p><p>
1056N/AThe XLFD fields PIXEL_SIZE, POINT_SIZE, RESOLUTION_X,
1056N/ARESOLUTION_Y, and AVERAGE_WIDTH.
1276N/A </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/A<code class="function">Derived instance</code>
1056N/A</p><p>
1056N/AThe result of replacing the scalable fields of a font name
1056N/Awith values to yield a font name that could actually be
1056N/Aproduced from the font source. A scaling engine is
1056N/Apermitted, but not required, to interpret the scalable
1056N/Afields in font names to support anamorphic scaling.
1276N/A </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/A<code class="function">Global list</code>
1056N/A </p><p>
1056N/AThe list of names that would be returned by an X server for a
1056N/A<code class="function">ListFonts</code>
1056N/Aprotocol request on the pattern "*" if there were no protocol
1056N/Arestrictions on the total number of names returned.
1056N/A </p></li></ul></div><p>
1056N/A
1056N/AThe global list consists of font names derived from font sources.
1056N/AIf a single font source can support multiple character sets (specified
1056N/Ain the CHARSET_REGISTRY and CHARSET_ENCODING fields), each such character
1056N/Aset should be used to form a separate font name in the list.
1056N/AFor a nonscalable font source, the simple font name
1056N/Afor each character set is included in the global list.
1056N/AFor a scalable font source, a scalable font name for each character set
1056N/Ais included in the list. In addition to the scalable font name,
1056N/Aspecific derived instance names may also be included in the list.
1056N/AThe relative order of derived instances with respect to the scalable
1056N/Afont name is not constrained. Finally, font name aliases may also be included
1056N/Ain the list. The relative order of aliases
1056N/Awith respect to the real font name is not constrained.
1056N/A</p><p>
1056N/A
1056N/AThe values of the RESOLUTION_X and RESOLUTION_Y fields of a scalable font name
1056N/Aare implementation dependent,
1056N/Abut to maximize backward compatibility, they
1056N/Ashould be reasonable nonzero values, for example, a resolution close to that
1056N/Aprovided by the screen (in a single-screen server).
1056N/ABecause some existing
1056N/Aapplications rely on seeing a collection of point and pixel sizes,
1056N/Aserver vendors are strongly encouraged in the near term to
1056N/Aprovide a mechanism for including, for each scalable font name,
1056N/Aa set of specific derived instance names. For font sources that contain
1056N/Aa collection of hand-tuned bitmap fonts, including names of these instances
1056N/Ain the global list is recommended and sufficient.
1056N/A</p><p>
1056N/A
1056N/AThe X protocol request
1056N/A<code class="function">OpenFont</code>
1056N/Aon a scalable font name returns a font corresponding to an
1056N/Aimplementation-dependent derived instance of that font name.
1056N/A</p><p>
1056N/A
1056N/AThe X protocol request
1056N/A<code class="function">ListFonts</code>
1056N/Aon a well-formed XLFD pattern returns the following.
1056N/AStarting with the global list, if the actual pattern argument
1056N/Ahas values containing no wildcards in scalable fields,
1056N/Athen substitute each such field into the corresponding
1056N/Afield in each scalable font name in the list. For each resulting font name,
1056N/Aif the remaining scalable fields cannot be replaced with values to produce a
1056N/Aderived instance, remove the font name from the list. Now take the modified
1056N/Alist, and perform a simple pattern match against the pattern argument.
1056N/A<code class="function">ListFonts</code>
1056N/Areturns the resulting list.
1056N/A</p><p>
1056N/AFor example, given the global list:
1056N/A</p><pre class="literallayout">
1056N/A-Linotype-Times-Bold-I-Normal--0-0-100-100-P-0-ISO8859-1
1056N/A-Linotype-Times-Bold-R-Normal--0-0-100-100-P-0-ISO8859-1
1056N/A-Linotype-Times-Medium-I-Normal--0-0-100-100-P-0-ISO8859-1
1056N/A-Linotype-Times-Medium-R-Normal--0-0-100-100-P-0-ISO8859-1
1056N/A</pre><p>
1056N/Aa <code class="function">ListFonts</code> request with the pattern:
1056N/A</p><pre class="literallayout">
1056N/A-*-Times-*-R-Normal--*-120-100-100-P-*-ISO8859-1
1056N/A</pre><p>
1056N/Awould return:
1056N/A</p><pre class="literallayout">
1056N/A-Linotype-Times-Bold-R-Normal--0-120-100-100-P-0-ISO8859-1
1056N/A-Linotype-Times-Medium-R-Normal--0-120-100-100-P-0-ISO8859-1
1056N/A</pre><p>
1056N/A<code class="function">ListFonts</code>
1056N/Aon a pattern containing wildcards that is not a well-formed XLFD
1056N/Apattern is only required to return the list obtained by performing
1056N/Aa simple pattern match against the global list.
1056N/AX servers are permitted, but not required,
1056N/Ato use a more sophisticated matching algorithm.
1276N/A</p></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="Polymorphic_Fonts"></a>Chapter 6. Polymorphic Fonts</h2></div></div></div><p>
1056N/A
1056N/AFonts that can be varied in ways other than size or resolution are called
1056N/A<span class="emphasis"><em>polymorphic fonts.</em></span> Multiple Master Type 1 font programs are one type of
1056N/Aa polymorphic font. Current examples of axes along which the fonts can be
1056N/Avaried are width, weight, and optical size; others might include formality
1056N/Aor x-height.
1056N/A</p><p>
1056N/ATo support polymorphic fonts, special values indicating variability are
1056N/Adefined for the following XLFD fields:
1056N/A</p><div class="blockquote"><blockquote class="blockquote"><p>
1056N/A
1056N/A WEIGHT_NAME
1056N/A</p><p>
1056N/A SLANT
1056N/A</p><p>
1056N/A SETWIDTH_NAME
1056N/A</p><p>
1056N/A ADD_STYLE_NAME
1056N/A</p></blockquote></div><p>
1056N/A
1056N/AThe string "0" is the special polymorphic value. In the
1056N/AWEIGHT_NAME, SLANT, or SETWIDTH_NAME field, "0" must be the
1056N/Aentire field.
1056N/AThere may be multiple polymorphic values
1056N/Ain the ADD_STYLE_NAME field.
1056N/AThey are surrounded by "[" and "]" and separated by a Space,
1056N/Aas "[0\00]". The polymorphic values may coexist with
1056N/Aother data in the field.
1056N/AIt is recommended that the polymorphic values
1056N/Abe at the end of the ADD_STYLE_NAME field.
1056N/A</p><p>
1056N/A
1056N/AThe font-matching algorithms for a font with polymorphic fields are
1056N/Aidentical to the matching algorithms for a font with scalable fields.
1056N/A</p><p>
1056N/A
1056N/AThere are three new font properties to describe the axes of variation,
1056N/AAXIS_NAMES, AXIS_LIMITS, and AXIS_TYPES. AXIS_NAMES is a list of all the
1056N/Anames of the axes for the font, separated by a null (0) byte.
1056N/AThese names are suitable for presentation in
1056N/Aa user interface. AXIS_LIMITS is a list of integers, two for each axis,
1056N/Agiving the minimum and maximum allowable values for that axis.
1056N/AAXIS_TYPES is like AXIS_NAMES,
1056N/Abut can be registered as having specific semantics.
1056N/A</p><p>
1056N/A
1056N/AThe axes are listed in the properties in the same order as they
1056N/Aappear in the font name. They are matched with font name fields by
1056N/Alooking for the special polymorphic values in the font name.
1056N/A</p><p>
1056N/A
1056N/AExamples:
1056N/A</p><p>
1056N/A
1056N/AThe Adobe Myriad MM font program has width and weight axes. Weight can
1056N/Avary from 215 to 830, and width from 300 to 700.
1056N/A</p><pre class="literallayout">
1056N/AName:
1056N/A -Adobe-Myriad MM-0-R-0--0-0-0-0-P-0-ISO8859-1
1056N/AAXIS_NAMES:
1056N/A Weight, Width
1056N/AAXIS_LIMITS:
1056N/A 215, 830, 300, 700
1056N/AAXIS_TYPES:
1056N/A Adobe-Weight, Adobe-Width
1056N/ASample derived instance:
1056N/A -Adobe-Myriad MM-412-R-575--*-120-100-100-P-*-ISO8859-1
1056N/A</pre><p>
1056N/AThe Adobe Minion MM Italic font program has width, weight, and optical
1056N/Asize axes.
1056N/A</p><pre class="literallayout">
1056N/AName:
1056N/A -Adobe-Minion MM-0-I-0-[0]-0-0-0-0-P-0-ISO8859-1
1056N/AAXIS_NAMES:
1056N/A Weight, Width, Optical size
1056N/AAXIS_LIMITS:
1056N/A 345, 620, 450, 600, 6, 72
1056N/AAXIS_TYPES:
1056N/A Adobe-Weight, Adobe-Width, Adobe-OpticalSize
1056N/ASample derived instance:
1056N/A -Adobe-Minion MM-550-I-480-[18]-*-180-100-100-P-*-ISO8859-1
1056N/A</pre><p>
1056N/AThe Adobe Minion MM Swash Italic font program has the same axes and
1056N/Avalues. This shows how "[0]" in the ADD_STYLE_NAME field can
1056N/Acoexist with other words.
1056N/A</p><pre class="literallayout">
1056N/AName:
1056N/A -Adobe-Minion MM-0-I-0-Swash[0]-0-0-0-0-P-0-ISO8859-1
1056N/AAXIS_NAMES:
1056N/A Weight, Width, Optical size
1056N/AAXIS_LIMITS:
1056N/A 345, 620, 450, 600, 6, 72
1056N/AAXIS_TYPES:
1056N/A Adobe-Weight, Adobe-Width, Adobe-OpticalSize
1056N/ASample derived instance:
1056N/A -Adobe-Minion MM-550-I-480-Swash[18]-*-180-100-100-P-*-ISO8859-1
1056N/A</pre><p>
1056N/AThe XYZ Abc font, a hypothetical font, has optical size and x-height axes.
1056N/AThis shows how there can be more than one polymorphic value in the
1056N/AADD_STYLE_NAME field.
1056N/A</p><pre class="literallayout">
1056N/AName:
1056N/A -XYZ-Abc-Medium-R-Normal-[0 0]-0-0-0-0-P-0-ISO8859-1
1056N/AAXIS_NAMES:
1056N/A Optical size, X-height
1056N/AAXIS_LIMITS:
1056N/A 6, 72, 400, 600
1056N/AAXIS_TYPES:
1056N/A XYZ-OpticalSize, XYZ-Xheight
1056N/ASample derived instance:
1056N/A -XYZ-Abc-Medium-R-Normal-[14 510]-*-140-100-100-P-*-ISO8859-1
1056N/A</pre><p>
1056N/AIf an axis allows negative values, a client requests a negative value by
1056N/Ausing "~" (TILDE) as a minus sign.
1056N/A</p><p>
1056N/AAxis types can be registered with the X Consortium, along with their
1056N/Asemantics.
1056N/A</p><p>
1056N/AIf a font name that contains the polymorphic value or a wildcard in a
1056N/Apolymorphic field is presented to a font source, the font source is free
1056N/Ato substitute any value that is convenient. However, font sources should
1056N/Atry to use a value that would be considered
1056N/A<span class="emphasis"><em>normal</em></span> or
1056N/A<span class="emphasis"><em>medium</em></span> for the
1056N/Aparticular font. For example, if an optical size variable is unresolved,
1056N/Athe font source should provide a value appropriate to the size of the
1056N/Afont.
1056N/A</p><p>
1056N/AThe result of specifying an out-of-range value for a polymorphic field is
1056N/Aundefined. The font source may treat this as a
1056N/A<code class="function">BadName</code> error, treat the
1056N/Avalue as if it were the closest legal value, or extrapolate to try to
1056N/Aaccommodate the value.
1276N/A</p></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="Affected_Elements_of_Xlib_and_the_X_Protocol"></a>Chapter 7. Affected Elements of Xlib and the X Protocol</h2></div></div></div><p>
1056N/A
1056N/AThe following X protocol requests must support the XLFD conventions:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/A<code class="function">OpenFont</code>
1056N/A- for the name argument
1276N/A </p></li><li class="listitem"><p>
1056N/A<code class="function">ListFonts</code>
1056N/A- for the pattern argument
1276N/A </p></li><li class="listitem"><p>
1056N/A<code class="function">ListFontsWithInfo</code>
1056N/A- for the pattern argument
1056N/A </p></li></ul></div><p>
1056N/A
1056N/AIn addition,
1056N/Athe following Xlib functions must support the XLFD conventions:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1276N/A<a href="/libX11/libX11/libX11.html#XLoadFont" class="olink"><code class="function">XLoadFont</code></a>
1056N/A- for the name argument
1276N/A </p></li><li class="listitem"><p>
1276N/A<a href="/libX11/libX11/libX11.html#XListFontsWithInfo" class="olink"><code class="function">XListFontsWithInfo</code></a>
1056N/A- for the pattern argument
1276N/A </p></li><li class="listitem"><p>
1276N/A<a href="/libX11/libX11/libX11.html#XLoadQueryFont" class="olink"><code class="function">XLoadQueryFont</code></a>
1056N/A- for the name argument
1276N/A </p></li><li class="listitem"><p>
1276N/A<a href="/libX11/libX11/libX11.html#XListFonts" class="olink"><code class="function">XListFonts</code></a>
1056N/A- for the pattern argument
1276N/A </p></li></ul></div></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="BDF_Conformance"></a>Chapter 8. BDF Conformance</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="sect1"><a href="#XLFD_Conformance_Requirements">XLFD Conformance Requirements</a></span></dt><dt><span class="sect1"><a href="#FONT_ASCENT_FONT_DESCENT_and_DEFAULT_CHAR">FONT_ASCENT, FONT_DESCENT, and DEFAULT_CHAR</a></span></dt><dd><dl><dt><span class="sect2"><a href="#FONT_ASCENT">FONT_ASCENT</a></span></dt><dt><span class="sect2"><a href="#FONT_DESCENT">FONT_DESCENT</a></span></dt><dt><span class="sect2"><a href="#DEFAULT_CHAR">DEFAULT_CHAR</a></span></dt></dl></dd></dl></div><p>
1056N/A
1056N/AThe bitmap font distribution and interchange format adopted by the
1056N/AX Consortium (BDF V2.1) provides a general mechanism for identifying the
1056N/Afont name of an X font and a variable list of font properties,
1056N/Abut it does not mandate the syntax or semantics of the font name
1056N/Aor the semantics of the font properties that might be provided in a BDF font.
1056N/AThis section identifies the requirements for BDF fonts that conform to XLFD.
1276N/A</p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="XLFD_Conformance_Requirements"></a>XLFD Conformance Requirements</h2></div></div></div><p>
1056N/A
1056N/AA BDF font conforms to the XLFD specification if and only if the
1056N/Afollowing conditions are satisfied:
1276N/A</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
1056N/AThe value for the BDF item <code class="function">FONT</code> conforms to the syntax
1056N/Aand semantic definition of a XLFD
1056N/A<code class="function">FontName</code>
1056N/Astring.
1276N/A </p></li><li class="listitem"><p>
1056N/AThe
1056N/A<code class="function">FontName</code>
1056N/Abegins with the X
1056N/A<code class="function">FontNameRegistry</code>
1056N/Aprefix: "-".
1276N/A </p></li><li class="listitem"><p>
1056N/AAll XLFD
1056N/A<code class="function">FontName</code>
1056N/Afields are defined.
1276N/A </p></li><li class="listitem"><p>
1056N/AAny FontProperties provided conform in name and semantics to the XLFD
1056N/A<code class="function">FontProperty</code>
1056N/Adefinitions.
1056N/A </p></li></ul></div><p>
1056N/A
1056N/AA simple method of testing for conformance would entail verifying that the
1056N/A<code class="function">FontNameRegistry</code>
1056N/Aprefix is the string "-",
1056N/Athat the number of field delimiters in the string and coded field values
1056N/Aare valid,
1056N/Aand that each font property name either matches a standard XLFD property name
1056N/Aor follows the definition of a private property.
1276N/A</p></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="FONT_ASCENT_FONT_DESCENT_and_DEFAULT_CHAR"></a>FONT_ASCENT, FONT_DESCENT, and DEFAULT_CHAR</h2></div></div></div><p>
1056N/A
1056N/AFONT_ASCENT, FONT_DESCENT, and DEFAULT_CHAR are provided in the BDF
1056N/Aspecification as properties that are moved to the
1056N/A<code class="function">XFontStruct</code>
1056N/Aby the BDF font compiler in generating the X server-specific
1056N/Abinary font encoding.
1056N/AIf present,
1056N/Athese properties shall comply with the following semantic definitions.
1276N/A</p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FONT_ASCENT"></a>FONT_ASCENT</h3></div></div></div><p>
1056N/A
1056N/AFONT_ASCENT is an integer value (of type INT32)
1056N/Athat gives the recommended typographic ascent above the baseline
1056N/Afor determining interline spacing.
1056N/ASpecific glyphs of the font may extend beyond this.
1056N/AIf the current position point for line <span class="emphasis"><em>n</em></span> is at [X,Y],
1056N/Athen the origin of the next line <span class="emphasis"><em>m = n + 1</em></span>
1056N/A(allowing for a possible font change) is
1056N/A[X, Y + FONT_DESCENTn + FONT_ASCENTm].
1056N/A</p><p>
1056N/A
1056N/AFONT_ASCENT can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (FONT_ASCENT undefined) then
1056N/A FONT_ASCENT = maximum ascent
1056N/A</pre><p>
1056N/Awhere maximum ascent is the maximum ascent (above the baseline)
1056N/Ain pixels of any glyph in the font.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="FONT_DESCENT"></a>FONT_DESCENT</h3></div></div></div><p>
1056N/A
1056N/AFONT_DESCENT is an integer value (of type INT32)
1056N/Athat gives the recommended typographic descent below the baseline
1056N/Afor determining interline spacing.
1056N/ASpecific glyphs of the font may extend beyond this.
1056N/AIf the current position point for line
1056N/A<span class="emphasis"><em>n</em></span> is at [X,Y],
1056N/Athen the origin of the next line <span class="emphasis"><em>m = n+1</em></span>
1056N/A(allowing for a possible font change) is
1056N/A[X, Y + FONT_DESCENTn + FONT_ASCENTm].
1056N/A</p><p>
1056N/AThe logical extent of the font is inclusive between the Y-coordinate values:
1056N/AY - FONT_ASCENT and Y + FONT_DESCENT + 1.
1056N/A</p><p>
1056N/AFONT_DESCENT can be approximated if not provided as a font property,
1056N/Aaccording to the following algorithm:
1056N/A</p><pre class="literallayout">
1056N/Aif (FONT_DESCENT undefined) then
1056N/A FONT_DESCENT = maximum descent
1056N/A</pre><p>
1056N/Awhere maximum descent is the maximum descent (below the baseline)
1056N/Ain pixels of any glyph in the font.
1276N/A</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="DEFAULT_CHAR"></a>DEFAULT_CHAR</h3></div></div></div><p>
1056N/A
1056N/AThe DEFAULT_CHAR is an unsigned integer value (of type CARD32)
1056N/Athat specifies the index
1056N/Aof the default character to be used by the X server when an attempt
1056N/Ais made to display an undefined or nonexistent character in the font.
1056N/A(For a font using a 2-byte matrix format,
1056N/Athe index bytes are encoded in the integer as byte1 * 65536 + byte2.)
1056N/AIf the DEFAULT_CHAR itself specifies an undefined or nonexistent character
1056N/Ain the font,
1056N/Athen no display is performed.
1056N/A</p><p>
1056N/A
1056N/ADEFAULT_CHAR cannot be approximated if not provided as a font property.
1056N/A
1056N/A
1056N/A
1056N/A
1056N/A
1056N/A
1056N/A</p></div></div></div></div></body></html>