241 lines
10 KiB
HTML
241 lines
10 KiB
HTML
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Glyphnames versus GLIF-names</title>
|
||
|
<link href="../default.css" type="text/css" rel="stylesheet" />
|
||
|
</head><body>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<script type="text/javascript" src="http://www.google-analytics.com/urchin.js"></script>
|
||
|
<script type="text/javascript">
|
||
|
_uacct = "UA-2044310-2";
|
||
|
urchinTracker();
|
||
|
</script>
|
||
|
|
||
|
<div id="modellogo">
|
||
|
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
|
||
|
</div>
|
||
|
<div class="leftcontent">
|
||
|
<h1 class="crb-seealso">
|
||
|
RoboFab
|
||
|
</h1>
|
||
|
<p class="menu">
|
||
|
<a href="../index.html">
|
||
|
Home
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../download/index.html">
|
||
|
Download v1.1.1
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../intro.html">
|
||
|
Intro
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../install.html">
|
||
|
Install Notes
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../history.html">
|
||
|
History
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../executive.html">
|
||
|
Summary
|
||
|
</a>
|
||
|
</p>
|
||
|
|
||
|
<p class="menu">
|
||
|
<a href="index.html">
|
||
|
How to's
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../talks/index.html">
|
||
|
Step by step
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../tools/dialogs.html">
|
||
|
Fab Dialogs
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../objects/index.html">
|
||
|
Object reference
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../objects/model.html">
|
||
|
Object map
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../tools/index.html">
|
||
|
Tools
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../ufo/index.html">
|
||
|
UFO Overview
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../ufo/specification.html">
|
||
|
UFO Spec
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../limitations.html">
|
||
|
Fab Limitations
|
||
|
</a>
|
||
|
|
||
|
<a href="../links/index.html">
|
||
|
Links
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../credits.html">
|
||
|
Credits
|
||
|
</a>
|
||
|
</p>
|
||
|
|
||
|
<h1 class="crb-seealso">
|
||
|
Support RoboFab
|
||
|
</h1>
|
||
|
|
||
|
|
||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||
|
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but21.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
|
||
|
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
||
|
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----
|
||
|
">
|
||
|
</form>
|
||
|
|
||
|
|
||
|
|
||
|
<h2 class="crb-seealso">
|
||
|
Up
|
||
|
</h2>
|
||
|
|
||
|
<p class="menu">
|
||
|
<p class="bonbon_uplink"><a href="index.html">Back to How To</a></p>
|
||
|
</p>
|
||
|
|
||
|
<h2 class="crb-seealso">
|
||
|
See also
|
||
|
</h2>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<p class="menu">
|
||
|
|
||
|
</p>
|
||
|
</div>
|
||
|
|
||
|
<div class="footer">
|
||
|
<a href="../feedback.html">
|
||
|
Feedback
|
||
|
</a>
|
||
|
<br />
|
||
|
<a href="../map.html">
|
||
|
Sitemap
|
||
|
</a>
|
||
|
<br />
|
||
|
Please also refer to the
|
||
|
<a href="../download/license.html">
|
||
|
Legal
|
||
|
</a>
|
||
|
<br />
|
||
|
Copyright 2003-2006 RoboFab
|
||
|
<br />
|
||
|
version 1.1.1
|
||
|
</div>
|
||
|
|
||
|
<div class="google">
|
||
|
|
||
|
|
||
|
<h2>RoboFab Mailinglist</h2>
|
||
|
<p>
|
||
|
Join the RoboFab users community at Google groups.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<img src="http://groups.google.com/groups/img/3nb/groups_bar.gif" alt="Google Groups" height="26" width="132" />
|
||
|
|
||
|
<p>
|
||
|
<form action="http://groups.google.com/group/robofab/boxsubscribe">
|
||
|
Email: <input type="text" name="../email" />
|
||
|
<input type="submit" name="../sub" value="Subscribe" />
|
||
|
</form>
|
||
|
</p>
|
||
|
<p>
|
||
|
<a href="http://groups.google.com/group/robofab">Visit this group</a>
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<h2>RoboFab Sponsors</h2>
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
|
||
|
|
||
|
google_ad_client = "pub-3703953449723704";
|
||
|
google_ad_width = 120;
|
||
|
google_ad_height = 600;
|
||
|
google_ad_format = "120x600_as";
|
||
|
google_ad_type = "text_image";
|
||
|
google_ad_channel ="";
|
||
|
google_color_border = "336699";
|
||
|
google_color_bg = "FFFFFF";
|
||
|
google_color_link = "0000FF";
|
||
|
google_color_url = "008000";
|
||
|
google_color_text = "000000";
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
</script>
|
||
|
|
||
|
|
||
|
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
|
||
|
|
||
|
|
||
|
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<div class="content">
|
||
|
<h1>Glyphnames versus GLIF-names</h1>
|
||
|
<p>
|
||
|
The names of the GLIF xml files, in the UFO are related to the glyph names. It used to be a 1:1 relationship, but then glyphnames grew really long and some file systems don't support long filenames. So something had to give.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<h2>GlyphNamingSchemes</h2>
|
||
|
<p>
|
||
|
The objectsFL.RFont.writeUFO() method can take a special callback function in order to convert the actual glyphname to a suitable filename. The goal is to create unique filenames so that glyphs won't overwrite each other's exports, also comply to certain filesystems which require filenames to be shorter than a certain number of characters, while retaining a high level of human-readability. Have a look at robofab/tools/glyphNameSchemes.py for the currently available callbacks. With glyphNameSchemes, the glyphName and the glif filename no longer have a direct relationship.
|
||
|
</p>
|
||
|
|
||
|
<h3>glyphNameToShortFileName(glyphName, glyphSet)</h3>
|
||
|
<p>
|
||
|
Features a garuanteed maximum filename (default 31 characters) for really long glyphnames, and clash testing.
|
||
|
</p>
|
||
|
<ul>
|
||
|
<li>all non-ascii characters are converted to "_" (underscore), including "."</li>
|
||
|
<li>all glyphnames which are too long are truncated and a hash is added at the end</li>
|
||
|
<li>the hash is generated from the whole glyphname</li>
|
||
|
<li>finally, the candidate glyphname is checked against the contents.plist
|
||
|
and a incrementing number is added at the end if there is a glyph with that name already.</li>
|
||
|
</ul>
|
||
|
|
||
|
<p>
|
||
|
glyphNameToShortFileName is the <strong>default naming scheme</strong> for exporting UFOs from FontLab. For most everyday use, this callback does all the work and there is no need to tweak it. Below are some examples to give you an idea of what the callback does:
|
||
|
|
||
|
</p>
|
||
|
|
||
|
<div class="pythonsource"><pre># robofab manual<br># Glifnames howto<br># glyphNameToShortFileName examples<br> <br><br># examples of glyphname to glif name transformations<br><span class="py_res">from</span> <span class="py_key">robofab</span>.<span class="py_key">tools</span>.<span class="py_key">glyphNameSchemes</span> <span class="py_res">import</span> <span class="py_key">glyphNameToShortFileName</span><br> <br># a short name<br><span class="py_res">print</span> <span class="py_key">glyphNameToShortFileName</span>(<span class="py_str">"accent"</span>, <span class="py_key">None</span>)<br> <br># a short name, starting with capital letter<br><span class="py_res">print</span> <span class="py_key">glyphNameToShortFileName</span>(<span class="py_str">"Accent"</span>, <span class="py_key">None</span>)<br> <br># a really long name - note the hexadecimal hash at the end<br><span class="py_res">print</span> <span class="py_key">glyphNameToShortFileName</span>(<span class="py_str">"this_is_a_very_long_glyph_name.altswash2"</span>, <span class="py_key">None</span>)<br> <br># a name with a period in it, 1<br><span class="py_res">print</span> <span class="py_key">glyphNameToShortFileName</span>(<span class="py_str">"a.alt"</span>, <span class="py_key">None</span>)<br> <br># a name with a period in it, 2<br><span class="py_res">print</span> <span class="py_key">glyphNameToShortFileName</span>(<span class="py_str">".notdef"</span>, <span class="py_key">None</span>)<br></pre></div><div class="pythonsourcetitle"><a href="examples/usageGlifnames.py" target="new">download examples/usageGlifnames.py</a></div>
|
||
|
|
||
|
<div class="pythonoutput"><pre><span class="py_str">"accent.glif"</span><br> <span class="py_str">"A_ccent.glif"</span><br> <span class="py_str">"this_is_a_very_lon340a8fa5.glif"</span><br> <span class="py_str">"a_alt.glif"</span><br> <span class="py_str">"_notdef.glif"</span><br> <span class="py_str">"_nic_de.glif"</span></pre></div>
|
||
|
|
||
|
</div>
|
||
|
</body></html>
|