434 lines
45 KiB
HTML
434 lines
45 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>
|
||
RoboThon 2006: Scripting for production
|
||
</title>
|
||
<link href="../default.css" type="text/css" rel="stylesheet" />
|
||
<link href="../code/robothon06/py2html.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="../howto/index.html">
|
||
How to's
|
||
</a>
|
||
<br />
|
||
<a href="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 Step by step</a></p>
|
||
</p>
|
||
|
||
<h2 class="crb-seealso">
|
||
See also
|
||
</h2>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<p class="menu">
|
||
<a href="../howto/scripting.html">Scripting</a><br /><a href="basic.html">Basic Python</a><br /><a href="dialogkit.html">Dialog Kit</a><br /><a href="examples/index.html">RoboThon 2006</a><br /><a href="index.html">Step by step</a><br /><a href="robofab_session4.html">NoneLab</a><br />
|
||
</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>
|
||
Scripting for production
|
||
</h1>
|
||
|
||
|
||
<img src="http://letterror.com/code/robofab/img/ondrawmodel_07.gif" />
|
||
|
||
|
||
<h2>Production</h2>
|
||
<p>
|
||
|
||
In the production phase of a font it all comes together: moving stuff around, naming, interpolations, quality control, generating, database work, it pays to invest some time (or money) in some really good scripts. Each foundry and designer has their own preferred ways of doing things. It's impossible to describe one production process and please everyone. So instead we're going to look at some of the things you probably have to do anyway. You will have to match and adapt for your own methods.
|
||
</p>
|
||
<p>
|
||
Production scripts can save a lot of time. But be careful: it is costly to make mistakes with your production sources. Make sure to <strong>test</strong> production scripts first on duplicate data, preferably in a different folder. Doing something "quickly" to a massive kerning table only to discover it was your only copy, and the action was wrong — will not save you any time. Like carpentry: measure twice, cut once.
|
||
</p>
|
||
|
||
|
||
|
||
<h2>Batch processing</h2>
|
||
<p>
|
||
Here are some examples of applying changes to several fonts at once using <strong>AllFonts()</strong>. Keep in mind that this applies to all fonts you have open in FontLab. So make sure to close any fonts that you don't want treated this way before running the script.
|
||
</p>
|
||
|
||
<div class="pythonsource"><pre># robothon06<br># set font info in all fonts<br> <br><span class="py_res">from</span> <span class="py_key">robofab</span>.<span class="py_key">world</span> <span class="py_res">import</span> <span class="py_key">AllFonts</span><br><span class="py_res">for</span> <span class="py_key">font</span> <span class="py_res">in</span> <span class="py_key">AllFonts</span>():<br> <span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">familyName</span> = <span class="py_str">"MyFamily"</span><br> <span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">ascender</span> = <span class="py_num">700</span><br> <span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">descender</span> = -<span class="py_num">300</span><br> <span class="py_key">font</span>.<span class="py_key">update</span>()<br> <br></pre></div><div class="pythonsourcetitle"><a href="examples/allFontsFontInfo.py" target="new">download examples/allFontsFontInfo.py</a></div>
|
||
|
||
<p>
|
||
Obviously you can extend these to do lots more.
|
||
</p>
|
||
|
||
<div class="pythonsource"><pre># robothon 2006<br># get info attributes for all fonts<br># and dump them to a text file<br> <br><span class="py_res">from</span> <span class="py_key">robofab</span>.<span class="py_key">world</span> <span class="py_res">import</span> <span class="py_key">AllFonts</span><br><span class="py_res">from</span> <span class="py_key">robofab</span>.<span class="py_key">interface</span>.<span class="py_key">all</span>.<span class="py_key">dialogs</span> <span class="py_res">import</span> <span class="py_key">PutFile</span><br> <br><span class="py_key">text</span> = []<br> <br><span class="py_res">for</span> <span class="py_key">font</span> <span class="py_res">in</span> <span class="py_key">AllFonts</span>():<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_key">str</span>(<span class="py_key">font</span>.<span class="py_key">path</span>))<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_key">str</span>(<span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">familyName</span>))<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_key">str</span>(<span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">styleName</span>))<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_key">str</span>(<span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">fullName</span>))<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_key">str</span>(<span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">unitsPerEm</span>))<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_key">str</span>(<span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">ascender</span>))<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_key">str</span>(<span class="py_key">font</span>.<span class="py_key">info</span>.<span class="py_key">descender</span>))<br> <span class="py_key">text</span>.<span class="py_key">append</span>(<span class="py_str">''</span>)<br> <br><span class="py_key">text</span> = <span class="py_str">'\n'</span>.<span class="py_key">join</span>(<span class="py_key">text</span>)<br><span class="py_key">path</span> = <span class="py_key">PutFile</span>(<span class="py_str">'Save file as:'</span>)<br><span class="py_res">if</span> <span class="py_key">path</span>:<br> <span class="py_key">file</span> = <span class="py_key">open</span>(<span class="py_key">path</span>, <span class="py_str">'w'</span>)<br> <span class="py_key">file</span>.<span class="py_key">write</span>(<span class="py_key">text</span>)<br> <span class="py_key">file</span>.<span class="py_key">close</span>()<span class="py_com"> |