more cleaning

git-svn-id: http://svn.robofab.com/trunk@4 b5fa9d6c-a76f-4ffd-b3cb-f825fc41095c
This commit is contained in:
Erik van Blokland 2008-01-07 20:19:18 +00:00
parent 79e668f9e2
commit 13cd62a0f1
156 changed files with 0 additions and 11821 deletions

View File

@ -1,7 +0,0 @@
import bonbon.builder
import os
root = os.path.dirname(__file__)
builder = bonbon.builder.SiteBuilder(root)
builder.build()

View File

@ -1,12 +0,0 @@
/credits.html/1.3/Sat Sep 10 12:34:58 2005//
/default.css/1.5/Mon Sep 12 22:10:34 2005//
/executive.html/1.3/Sat Sep 10 12:34:58 2005//
/feedback.html/1.4/Sat Sep 10 12:34:58 2005//
/history.html/1.6/Sat Sep 10 12:34:58 2005//
/index.html/1.5/Sat Sep 10 12:28:42 2005//
/install.html/1.6/Sat Sep 10 12:34:58 2005//
/intro.html/1.5/Sat Sep 10 12:34:59 2005//
/legal.html/1.4/Sat Sep 10 12:34:59 2005//
/limitations.html/1.4/Sat Sep 10 12:34:59 2005//
/map.html/1.5/Sat Sep 10 12:34:59 2005//
D

View File

@ -1,12 +0,0 @@
A D/download////
A D/gettingstarted////
A D/glossary////
A D/howto////
A D/img////
A D/links////
A D/objects////
A D/settings////
A D/shop////
A D/tools////
A D/ufo////
R D/settings////

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

View File

@ -1,133 +0,0 @@
<!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>RoboFab Credits</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<span class="selected">
Credits
</span>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab Credits</h1>
<p>
The RoboFab developers, Erik van Blokland, Tal Leming and Just van Rossum would like to thank some folks for helping in one way or the other.
</p>
<h2>Thanks</h2>
<p>
Testing and support: Paul van der Laan, Peter Bil'ak, Seonil Yun, Cyrus Highsmith. Rich Roat for a lot of things.
</p>
<h2>Resources</h2>
<p>Thanks to the FontLab developers for supporting Python. Adam Twardoch and Eigi Eigendorf for the fontlab documentation and feedback. Apple Computer, Adobe Systems for their tools and documentation. Just van Rossum for TTX, GLIF and fontTools. The other van Rossum and Python.org for Python. Have a look at <a href="links/index.html">the link section</a> for addresses for most of these.
</p>
</div>
</body>
</html>

View File

@ -1,408 +0,0 @@
/**** STANDARD HTML TAGS ****/
body
{
margin: 0;
padding: 0;
background: #fff;
color: #000;
font: 11px Lucida Grande, Geneva, Arial, Verdana, sans-serif;
/* Special hack for IE/5 */
voice-family: "\"}\"";
voice-family: inherit;
font-size: small;
}
html>body { font-size: small; }
/* We define links using border-bottom instead of ugly underline */
a
{
text-decoration: none;
color: #339;
}
a img {border:0}
a:hover { background: #eee; }
a.crb-quickbutton
{
background: transparent;
border: 0;
}
a.crb-quickbutton:hover
{
background: transparent;
border: 0;
}
h1
{
font-size: 16px;
color: #333;
padding: 0;
margin: 2.5em 0 1em 0;
border-top: 1px dotted #666;
}
h2
{
font-size: 15px;
color: #666;
padding: 0;
margin: 2.5em 0 1em 0;
border-top: 1px dotted #666;
}
h3
{
font-size: 13px;
color: #666;
padding: 0;
margin: 2.5em 0 1em 0;
border-top: 1px dotted #ddd;
}
h4
{
font-size: 11px;
color: #666;
padding: 0;
margin: 2.5em 0 1em 0;
}
p { margin: 0 0 0.2em 0;
font-size: 12px;
line-height: 1.5em;
}
p.note { margin: 0 0 0.2em 0;
font-size: 12px;
line-height: 1.5em;
background: #CF6;
padding: 5px;
}
li { margin: 0 1em 0 0;
font-size: 12px;
line-height: 1.5em;
}
p.menu { margin: 0 0 2em 0;
font-size: 11px;
line-height: 1.5em;
}
crb-seealso
ul { list-style-type: square;
font-size: 8px;
line-height: 1.5em;
}
li { margin: .1em 0 .3em 0; }
/**** PAGE LAYOUT ****/
/* The general page looks like this:
+-----------------------------------------------------------+
| #header |
+------+--------------+----------+---------------+----------+
| #nav | #leftcontent | #content | #rightcontent | #seealso |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | #footer | | |
+------+--------------+----------+---------------+----------+
All <div>'s, except #content and #footer, are absolutely
positioned. We use margins to seperate them from eachother.
*/
#header
{
position: absolute;
top: 0;
left: 0;
width: 100%; /*960px;*/
background: #fff;
}
#subheader
{
position: absolute;
top: 91px;
left: 0;
background: #fff;
width:100%;
/*width: 960px;*/
height:19px;
}
#subscribe
{
position: absolute;
top: 5px;
right: 10px;
width: 200px;
font-size:85%;
}
#nav
{
position: absolute;
top: 120px;
left: 0;
width: 60px;
height: 100%;
background: white;
font-size: 70%;
}
div.leftcontent
{
position: absolute;
top: 120px;
left: 20px;
width: 110px;
padding: 2px 5px;
font-size: 75%;
}
div.content
{
position: absolute;
top: 120px;
left: 180px;
font-size: 85%;
width: 490px;
}
#rightcontent
{
position: absolute;
top: 120px;
left: 600px;
width: 110px;
padding: 2px 5px;
font-size: 70%;
}
#rightimage
{
position: absolute;
left: 500px;
z-index:100;
}
#seealso
{
position: absolute;
top: 240px;
left: 20px;
width: 50px;
padding: 2px 5px;
font-size: 10px;
line-height: 12px;
color: #888;
}
#footer
{
position: absolute;
top: 900px;
left: 20px;
font-size: 60%;
width: 60px;
}
/*absolute positions for menu items*/
#menuitem1
{
position: absolute;
top: 200px;
left: 0;
}
#menuitem2
{
position: absolute;
top: 230px;
left: 0;
}
#menuitem3
{
position: absolute;
top: 260px;
left: 0;
}
#menuitem4
{
position: absolute;
top: 290px;
left: 0;
}
#menuitem5
{
position: absolute;
top: 320px;
left: 0;
}
#menuitem6
{
position: absolute;
top: 350px;
left: 0;
}
#menuitem7
{
position: absolute;
top: 380px;
left: 0;
}
#menuitem8
{
position: absolute;
top: 410px;
left: 0;
}
#menuitem9
{
position: absolute;
top: 440px;
left: 0;
}
#menuitem10
{
position: absolute;
top: 470px;
left: 0;
}
#auxmenu
{
position: absolute;
top: 500px;
left: 10px;
font-size:9px;
font-weight:normal
}
#modellogo
{
position: absolute;
left: 0px;
top: 0px;
}
#titlepic
{
position: absolute;
left: 180px;
top: 10px;
}
/**** SPECIAL CASES ****/
ul.crb-seealso {list-style-type:none;padding:0;margin:0}
#seealso h2
{
font-size:12px;
font-weight:normal;
}
#header table
{
background: #eee;
font-size:10px
}
/* The navigation uses an unordered list to show its items,
which is semantically correct. */
#subnav
{
border: 0px;
font-size: 9px;
line-height: 12px;
font-family: Verdana, Helvetica, Sans-Serif;
color: #888;
width: 110px;
}
span.selected
{
font-weight:bold;
}
a.subnav
{
text-decoration: none;
color: #aaa;
}
#nav ul
{
list-style-type: none;
margin: 0;
padding-left: 0.5em;
}
#nav li
{
line-height: 1.8em;
text-align: left;
}
#nav a { border: 0; }
/* A special class, link, is used to display the pointing hand.
We pad the actual content so it doesn't overlay the hand. */
p.link
{
background: url('g/link.gif') no-repeat left top;
padding-left: 42px;
line-height: 18px;
}
/* The item class is used to display seperate news items */
.item { margin: 1em 0 2em 0;}
/* Class to display a label on feedback page */
.label
{
font-size: 110%;
color: #333;
}
pre {
overflow: hidden;
background-color: #EEE;
white-space:pre;
color:#111111;
padding: 10px 10px 10px 10px;
width:480px;
font-size: 11px;
line-height: 13px;
z-index:0;
}
div.objectname {
}
div.objectexamples {
}
div.objectdescription {
}
div.objectmethods {
}
div.objectattributes {
}
div.objectsyntax {
}
div.objectparameters {
}

View File

@ -1,6 +0,0 @@
/_agree.html/1.5/Mon Sep 12 21:59:46 2005//
/index.html/1.4/Mon Sep 12 21:59:46 2005//
/legal.html/1.3/Sat Sep 10 21:16:17 2005//
/license.html/1.4/Mon Sep 12 21:59:46 2005//
/licensing.html/1.3/Sat Sep 10 21:16:17 2005//
D

View File

@ -1,4 +0,0 @@
A D/current////
A D/old////
R D/old////
R D/current////

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual/download

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

View File

@ -1,172 +0,0 @@
<!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>Download RoboFab</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to Download</a></p>
<br />
<br />
<p class="menu">
<a href="license.html">RoboFab License Agreement</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="license.html">
Legal
</a>
<br />
Copyright 2003-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Download RoboFab 1.1.1 Public Release</h1>
<p>
So you have <a href="license.html">read</a> and agreed to the <a href="http://robofab.org/download/license.html">License Agreement</a>. Select the RoboFab installer in the archive format of choice.
All installers contain the same code and support files. They're just packaged differently.
</p>
<h2>RoboFab + FontTools Combo Deluxe</h2>
<p>If you don't have fontTools or don't know what fontTools is, take this version. It will install RoboFab and the appropriate FontTools at the same time.
</p>
<h3>Stuffit archive</h3>
<p>
<a href="http://robofab.org/download/current/RoboFab_1.1.1_PlusFontTools.dmg">RoboFab 1.1.1 Plus FontTools (dmg)</a>
</p>
<h3>Zip</h3>
<p>
<a href="http://robofab.org/download/current/RoboFab_1.1.1_PlusFontTools.zip">RoboFab 1.1.1 Plus FontTools (zip)</a>
</p>
<h2>RoboFab Happy Meal</h2>
<p>In case you have a seperate fontTools install you want to use, these installers contain only RoboFab.
</p>
<h3>Stuffit archive</h3>
<p>
<a href="http://robofab.org/download/current/RoboFab_1.1.1.dmg">RoboFab 1.1.1 (dmg)</a>
</p>
<h3>Zip</h3>
<p>
<a href="http://robofab.org/download/current/RoboFab_1.1.1.zip">RoboFab 1.1.1 (zip)</a>
</p>
<h2>Old releases</h2>
<p>
Old releases <a href="old/">are here.</a>
</p>
</div>
</body>
</html>

View File

@ -1,128 +0,0 @@
<!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>Download RoboFab</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="../index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<p class="menu">
<a href="license.html">RoboFab License Agreement</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="license.html">
Legal
</a>
<br />
Copyright 2003-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Download RoboFab</h1>
<p>
Please read the <a href="license.html">official license agreement</a>. Read and scroll all the way to the bottom.
</p>
</div>
</body>
</html>

View File

@ -1,118 +0,0 @@
<!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>New Page</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to Download</a></p>
<br />
<br />
<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="license.html">
Legal
</a>
<br />
Copyright 2003-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">This page is generated by Corbon.</div>
</body>
</html>

View File

@ -1,270 +0,0 @@
<!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>RoboFab License Agreement</title>
<style type="text/css">
<!--
#reallybig {font-size:50px;}
-->
</style>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<span class="selected">
Download v1.1.1
</span>
<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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to Download</a></p>
<br />
<br />
<p class="menu">
<a href="_agree.html">I Agree!</a><br />
<a href="index.html">Download</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
<span class="selected">
Legal
</span>
<br />
Copyright 2003-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab License Agreement</h1>
<h2>version 1.1.1, September 9, 2005</h2>
<p>
This RoboFab License Agreement (&quot;Agreement&quot;) is a legal agreement
between you (either an individual or a single entity known as
&quot;Customer&quot;) and The RoboFab Consortium (Just van Rossum, Erik van
Blokland, Tal Leming), which owns a library of computer software with
associated files. By installing, copying, or otherwise using the
Software or any Software Updates, Customer agrees to be bound by the
terms of this Agreement. If Customer does not agree to the terms of
this Agreement, do not install, copy, or use the Software, including
all Software Updates that Customer receives as part of the Software
(each, an &quot;Update&quot;). By installing, copying, or otherwise using an
Update, Customer agrees to be bound by the additional license terms
that accompany such Update. If Customer does not agree to the terms of
the additional license terms that accompany the Update, disregard the
Update and the additional license terms that accompany the Update. In
this event, Customer's rights to use the Software shall continue to be
governed by the then-existing Agreement.
</p>
<h3>1. Copyright</h3>
<p>
Unless noted otherwise, all rights, title, interests in and to copyrights in the Software
(including but not limited to any software components, product
documentation and associated media, sample files, extension files,
tools and utilities, miscellaneous technical information, and any
copies of the Software, are owned exclusively (or licensed) by The
RoboFab Developers. The Software is protected by The Netherlands
copyright laws and international treaty provisions. Therefore, you must
treat the Software like any other copyrighted material. The Software is licensed, not
sold.
</p>
<h3>2. Grant of Limited Use License</h3>
<p>
a. The RoboFab Consortium grants Customer a limited right to use the
Software for development purposes only. This agreement DOES NOT GRANT
any other right or license, including but not limited to distribution, or commercial use. Commercial use of the Software is
granted only by executing a separate commercial use license agreement
that can be obtained from The RoboFab Consortium.
</p>
<h3>3. Other Restrictions</h3>
<p>
<strong>a.</strong> The Software is the property of The RoboFab
Developers, including, but not limited to, all applicable rights to
patents, copyrights, trademarks and trade secrets and is provided for
Customer's exclusive use for the purposes of this Agreement.
</p>
<p>
<strong>b.</strong> Customer will not alter, remove or obscure any
designation name or mark from any supplied material that identifies
such material as belonging to or developed by The RoboFab Consortium or other developers.
</p>
<p>
<strong>c.</strong> Customer may not transfer, rent, lease, or sublicense the Software.
</p>
<h3>4. Termination</h3>
<p>
a. Without prejudice to any other rights, The RoboFab Consortium may
terminate this Agreement and the functionality of the Software at any
time at its sole discretion. All rights granted hereunder shall
immediately terminate upon Customer's failure to comply with the terms
and conditions of this Agreement. In either such event, Customer agrees
to destroy all copies of the Software in any form and all of its
component parts.
</p>
<h3>5. Disclaimer of Warranty</h3>
<p>
<strong>a.</strong> NO WARRANTIES. THE SOFTWARE IS PROVIDED &quot;AS IS&quot; WITHOUT WARRANTY OF
ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE
ROBOFAB DEVELOPERS DISCLAIMS ALL WARRANTIES, EXPRESSED OR IMPLIED,
INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY AGAINST
INFRINGEMENT, WITH REGARD TO THE SOFTWARE. THIS LIMITED WARRANTY GIVES
YOU SPECIFIC LEGAL RIGHTS. YOU MAY HAVE OTHERS, WHICH VARY FROM
STATE/JURISDICTION TO STATE/JURISDICTION.
</p>
<p>
<strong>b.</strong> NO LIABILITY FOR DAMAGES. TO THE MAXIMUM EXTENT PERMITTED BY
APPLICABLE LAW, IN NO EVENT SHALL The RoboFab Consortium BE LIABLE FOR
ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE,
EVALUATION OR INABILITY TO USE OR EVALUATE THE SOFTWARE, EVEN IF THE
ROBOFAB DEVELOPERS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
BECAUSE SOME STATES/JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR
LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE
ABOVE LIMITATION MAY NOT APPLY TO YOU.
</p>
<h3>6. Governing Law</h3>
<p>
This Agreement shall be construed in accordance with
the laws of The Netherlands without regard to conflicts of law
provisions. In the event of any dispute arising out of or relating to
this Agreement, the parties agree to jurisdiction and venue of the
applicable court in The Netherlands.
</p>
<h3>7. Trademarks</h3>
<p>
RoboFab, RoboThon, and the The RoboFab Consortium logo
are all trademarks of The RoboFab Consortium.
</p>
<h3>Agree</h3>
<p>
CUSTOMER ACKNOWLEDGES THAT CUSTOMER HAS READ THIS AGREEMENT, UNDERSTAND
IT AND AGREES TO BE BOUND BY ITS TERMS AND CONDITIONS. CUSTOMER FURTHER
AGREES THAT IT IS THE COMPLETE AND EXCLUSIVE STATEMENT OF THE AGREEMENT
BETWEEN CUSTOMER AND The RoboFab Consortium WHICH SUPERSEDES ANY
PROPOSAL OR PRIOR AGREEMENT, ORAL OR WRITTEN, AND ANY OTHER
COMMUNICATIONS BETWEEN CUSTOMER AND The RoboFab Consortium RELATING TO
THE SOFTWARE.
</p>
<div id="reallybig"><a href="_agree.html">I agree</a></div>
<p>
This Agreement may not be modified except in writing, signed by a duly
authorized representative of The RoboFab Consortium.
</p>
</div>
</body>
</html>

View File

@ -1,118 +0,0 @@
<!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>New Page</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to Download</a></p>
<br />
<br />
<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="license.html">
Legal
</a>
<br />
Copyright 2003-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">This page is generated by Corbon.</div>
</body>
</html>

View File

@ -1,135 +0,0 @@
<!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>RoboFab Executive Summary</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.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 />
<span class="selected">
Summary
</span>
</p>
<p class="menu">
<a href="howto/index.html">
How to's
</a>
<br />
<a href="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab Executive Summary</h1>
<p>
RoboFab is the result of over 6 man-years of concentrated coding. The package combines a solid Pythonic API with over 40 standardized classes of objects for font and glyph related data. With RoboFab installed, the scripter will find it easier to produce scripts, API standardization means fewer things to remember or look up -- eventhough RoboFab comes with extensive documentation and example code.
</p>
<p>
The Font/Glyph/Contour/Point model can be tailored to the needs of the scripter, manipulating data from glyph to glyph or font to font and addressing the outline data point by point, as offcurve/oncurve segments or as conventional knots with incoming / oncurve / outgoing attributes. RoboFab's Kerning object delivers the kerning data as a standard Python dictionary object. The Lib objects will soon take advantage of FontLab's new PythonDict field for storing Python data inside FontLab .vfb sources.
</p>
<p>
RoboFab's pen objects (an implementation of FontTools' pen classes) provide a powerful method to interface with glyph data, either for actual drawing (for instance on screen, or some sort of vector based file format), complex comparisons, transformations and filtering.
</p>
<p>
RoboFab offers a large selection of standardised UI dialogs, ranging from plain messaging to very powerful font and glyph retrieval functionality.
</p>
<p>
RoboFab also brings extensive support for import and export of glyph and font data to UFO, an open industry standard based on XML. UFO makes it possible to, for instance, store text versions of glyphs and fonts in large SQL databases and apply standard text source management tools (such as cvs, diff) to glyphsets.
</p>
</div>
</body>
</html>

View File

@ -1,130 +0,0 @@
<!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>RoboFab Feedback and Contact</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<p class="menu">
</p>
</div>
<div class="footer">
<span class="selected">
Feedback
</span>
<br />
<a href="map.html">
Sitemap
</a>
<br />
Please also refer to the
<a href="download/license.html">
Legal
</a>
<br />
Copyright 2003-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Feedback and Contact</h1>
<h3>Email</h3>
<p>Email the RoboFab Consortium at <br /><strong>i n f o (at) r o b o f a b (dot) o r g</strong></p>
<h3>Report Problems</h3>
<p>
Either mail to the address above, or write something at the <a href="http://just.letterror.com/ltrwiki/RoboFab/FeedBack">RoboFab Wiki</a> page.
</p>
</div>
</body>
</html>

View File

@ -1,2 +0,0 @@
/index.html/1.3/Sat Sep 10 21:16:18 2005//
D

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual/gettingstarted

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

View File

@ -1,149 +0,0 @@
<!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>Getting Started with RoboFab</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="../index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Getting Started with RoboFab</h1>
<p>
</p>
<h2>Installing</h2>
<p>
Installing RoboFab is pretty straightforward as installing Python libraries go. But considering this might be the first time you do this, here are a couple of things to pay attention to. First, have a look at the <a href="../install.html">installation notes</a>.
<h3>Some remarks</h3>
<ul>
<li>In MacOSX, you need to have admin permissions to install robofab in MacOS 9 Python.
</li>
<li>If you've downloaded the MacOSX diskimage installer, first copy the entire thing to a nice, accessible place on your harddisk. The install.py script makes a link to the folder it's in, so if you were to run the install script from the mounted diskimage, RoboFab would be gone after you unmount the diskimage.
</li>
</ul>
</p>
<h2>FontLab Macros</h2>
<p>
RoboFab has some example scripts that show how it can be used in FontLab. In the RoboFab folder, there's a folder named &quot;Scripts&quot;. In it are two folders that you can drag to FontLab's &quot;Macros&quot; folder. After restarting the application the &quot;Utils&quot; and &quot;RoboFabIntro&quot; folder have been added to the macro list.
</p>
<h2>Then what?</h2>
<p>
It depends on your proficiency in scripting and operating fonteditors like FontLab. Some <a href="../howto/scripting.html">notes on scripting</a> are available in the how to section. There's <a href="../index.html">this manual</a> which offers documentation, examples and background. Help with operating your fonteditor of choice is not available from this site or from the RoboFab developers. Read the manual.
</p>
</div>
</body>
</html>

View File

@ -1,4 +0,0 @@
/glyphmath.html/1.4/Mon Sep 12 21:59:46 2005//
/index.html/1.4/Mon Sep 12 21:59:46 2005//
/nonelab.html/1.4/Mon Sep 12 21:59:46 2005//
D

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual/glossary

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

View File

@ -1,139 +0,0 @@
<!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>Glossary</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to Glossary</a></p>
<br />
<br />
<p class="menu">
<a href="../howto/glyphmath.html">Using Glyph Math</a><br />
<a href="../objects/glyph.html">RGlyph</a><br />
<a href="index.html">Glossary</a><br />
<a href="nonelab.html">Glossary: 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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Glyphmath</h1>
<p>
RoboFab objects support basic mathematical operations. Glyphs can be added, substracted and multiplied. The operations apply to all coordinates and all points. See also <a href="../howto/glyphmath.html">how to use GlyphMath</a>.
</p>
<h2>Other terms</h2>
<p>
<ul class="crb-locallink">
<li><a href="index.html">Glossary</a>: index of words and terminology.
</li><li><a href="nonelab.html">Glossary: NoneLab</a>: Glossary term
</li></ul>
</p>
</div>
</body>
</html>

View File

@ -1,130 +0,0 @@
<!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>Glossary</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<span class="selected">
Glossary
</span>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="../index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<p class="menu">
<a href="glyphmath.html">Glossary: GlyphMath</a><br />
<a href="nonelab.html">Glossary: 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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Glossary</h1>
<ul class="crb-locallink">
<li><a href="glyphmath.html">Glossary: GlyphMath</a>: Glossary term
</li><li><a href="nonelab.html">Glossary: NoneLab</a>: Glossary term
</li></ul>
</div>
</body>
</html>

View File

@ -1,138 +0,0 @@
<!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>Glossary</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to Glossary</a></p>
<br />
<br />
<p class="menu">
<a href="glyphmath.html">Glossary: GlyphMath</a><br />
<a href="index.html">Glossary</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>NoneLab</h1>
<p>
Name for RoboFab and python environment which is independent of FontLab. If something works in NoneLab it means that it can run on any platform that runs python with RoboFab installed.
</p>
<h2>Other terms</h2>
<p>
<ul class="crb-locallink">
<li><a href="glyphmath.html">Glossary: GlyphMath</a>: Glossary term
</li><li><a href="index.html">Glossary</a>: index of words and terminology.
</li></ul>
</p>
</div>
</body>
</html>

View File

@ -1,349 +0,0 @@
<!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>RoboFab Release History</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.html">
Download v1.1.1
</a>
<br />
<a href="intro.html">
Intro
</a>
<br />
<a href="install.html">
Install Notes
</a>
<br />
<span class="selected">
History
</span>
<br />
<a href="executive.html">
Summary
</a>
</p>
<p class="menu">
<a href="howto/index.html">
How to's
</a>
<br />
<a href="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab Release History</h1>
<p>
A brief overview of what happened.
</p>
<h3>September 12, 2005 - version 1.1.1</h3>
<p>
<ul>
<li>
The &quot;save&quot; argument in font.close is now False by default. Any scripts that rely on font.close() to save fonts should be modified.
</li>
<li>
font.close(save=False) now suppresses the save dialog.
</li>
<li>
GuessSmoothPointPen is now robust against closed contours containing just one point.
</li>
<li>
Fixed a bug that was causing objectsRF to mark glyphs as dirty after simply being loaded.
</li>
<li>
The GlyphSet in glifLib has a new getUnicodes method for quickly extracting unicodes from all GLIF files.
</li>
<li>
The UFOReader in ufoLib has a new getCharacterMapping method for quickly extracting unicodes from all GLIF files.
</li>
<li>
Fixed a RContour.clockwise bug that was causing incorrect results to be returned if the contour had overlapping points.
</li>
<li>
Fixed a RFont.insertGlyph(..., as=name) bug that was causing the &quot;as&quot; name to not be applied in some cases.
</li>
<li>
The result of glyph.copy() no longer has a parent.
</li>
<li>
Setting italicAngle and slantAngle now forces the values to be floats.
</li>
<li>
glyphNameSchemes now forces the conversion to big endian so the results will be the same on Windows and Mac.
</li>
<li>
Components with negative scale values now return correct bounding boxes.
</li>
<li>
dialogs.py no longer has a win32com dependency when used in FontLab Windows.
</li>
</ul>
</p>
<h3>February 7, 2005 - version 1.1</h3>
<p>
<ul>
<li>
Fixed a minor rounding error in flPen.py that was allowing unrounded data to be passed to FontLab.
</li>
<li>
objectsRF.RComponent decomposes properly now.
</li>
<li>
Added new filterPen.py to pens: a module with some useful and sample pens illustrating non-drawing applications of pen objects. StatsPen: a pen returning the length of the contour, FlattenPen: a cubic path flattener. And a couple of helpers to make filtering easier.
</li>
<li>
robofab.features but that may be moving to a private location...
</li>
<li>
RInfo now has createdBy, weightValue, weightName and widthName attributes. These are also now written into info.plist in UFOs.
</li>
<li>
RGlyph has a fun new rasterize method.
</li>
<li>
RContour now has rotate and skew methods.
</li>
<li>
New robofab.path.intersect module for calculating intersections.
</li>
<li>
New FindGlyph dialog added to dialogs.py. This dialog is similar to SelectGlyph, but it contains a search field. Very handy when working with large fonts.
</li>
<li>
Setting objectsFL.unitsPerEm is now buffered against possible float values
</li>
<li>
Added UNIX ASCII (PFA) as a generating option in RFont (use &quot;unixascii&quot; as the type in the generate method). It has been here all along, but it was incorrectly labeled as PC Type 1 ASCII.
</li>
<li>
Retrieving groups from a VFB is now more stable.
</li>
<li>
RFont.insertGlyph has a new as=something argument in order to easily insert one glyph under a different name.
</li>
<li>
RGlyph interpolation and glyph math have been completely rewritten. Now the methods are much more flexible about point types and off curve point counts. The methods are still very strict regarding the count of on curve points. In addition to being much more flexible, it is also much faster.
</li>
<li>
RGlyph.isCompatible returns results that follow the same logic as RGlyph.interpolate
</li>
<li>
RContour.interpolate and the math methods in RContour, RSegment, RPoint, RAnchor and RComponent have all been deprecated.
</li>
<li>
RGlyph.note is now properly encoded.
</li>
<li>
A provision for alternate .glif namingschemes has been added. During the writing of UFO the user can now specify a function (for instance robofab.tools.glyphNameSchemes.glyphNameToShortFileName) to create .glif filenames for glyphs. Previously all glyphnames mapped to filenames directly, which made it impossible to export glyphs with long names in some pythons. The default glif naming scheme in ObjectsFL has been set to the aforementioned glyphNameToShortFileName, check the module for a detailed description of the algorithm. Note that this only affects new exports. Existing UFO's and .glifs are not changed. <a href="howto/glifnames.html">See How to use glyph naming schemes</a>
</li>
<li>
Fixed a bug that could pontially cause a GLIF to be saved outside of the proper UFO.
</li>
<li>
New scripts located in robofab/Scripts/RoboFabUFO: DumpOneGlyphToGlif.py, DumpOneGlyphToUFO.py, ExportFontToUFO.py, ImportFontFromUFO.py, ImportOneGlyphFromUFO.py
</li>
<li>
Bug in script GenerateKernProof.py fixed.
</li>
<li>
RFont now has a handy getReverseComponentMapping method for getting a reversed component mapping.
</li>
<li>
AllFonts bugs squashed.
</li>
<li>
plistlib modified to by Python 2.2 compatible
</li>
<li>
Glyph order is now stored and read from font.lib[&quot;org.robofab.glyphOrder&quot;]. Importing a UFO into FontLab now follows this order.
</li>
<li>
Raw FDK-style OT feature code is now stored in font.lib[&quot;org.robofab.opentype.classes&quot;] and font.lib[&quot;org.robofab.opentype.features&quot;] in UFOs. This data is stored in the OpenType fields in FontLab files.
</li>
<li>
robofab.world no longer prints nag during import.
</li>
<li>
Fixed bug in objectsRF.RFont.save that was occasionally (very, very rarely) forcing save operations to be considered save as operations.
</li>
<li>
Added deprecation warnings to family.py and featureLib.py.
</li>
<li>
Added warning to nameTable.py.
</li>
<li>
Removed properties.py.
</li>
<li>
Removed unused Point and Offset classes from objectsBase.
</li>
<li>
Fixed a bug that would raise an error in robofab.interface.all.dialogs.AskString
</li>
<li>
Backported RoboFab to Python 2.2.1. This is now the oldest version of Python we support. Python 2.2 is not supported.
</li>
<li>
RoboFab now includes a Python 2.2 compatible version of sets.py (found <a href="http://cvs.sourceforge.net/viewcvs.py/*checkout*/python/python/dist/src/Lib/sets.py?content-type=text%2Fplain&amp;rev=1.44.8.4">here</a>). In Python 2.3+ the sets from the standard lib will be used in place of this version.
</li>
<li>
Reworked the way RPoint determines its type attribute in objectsFL.
</li>
<li>
Patched a small bug in BaseContour.draw that occured when a contour begins with a qcurve in FontLab.
</li>
<li>
Removed support for drawing with antique RoboFab pens. Only FontTools pens are supported now.
</li>
<li>
Removed support for drawing with antique RoboFab pens. Only FontTools pens are supported now.
</li>
<li>
Components now have a read-only box attribute.
</li>
</ul>
</p>
<h3>March 26, 2004 - version 1.01</h3>
<p>
<ul>
<li>
Renamed the folder with utility scripts for FontLab to &quot;RoboFab Utils&quot; as not to overwrite any other folders named &quot;Utils&quot; which might live in the FontLab macros folder.
</li>
<li>
Fixed a problem with glyph.box which would show up in some cases in plain Python use of RoboFab with glyphs which have anchors outside of the horizontal bounds of the glyph.
</li>
</ul>
</p>
<h3>March 14, 2004 - version 1.0</h3>
<p>
First public release.
</p>
<h3>January 2004</h3>
<p>
We've done some projects using RoboFab at the center and it's fast to work with and reliable. We considered ways to reschedule the conference and couldn't plan anything for a couple of unrelated but unchangeable reasons. We decide for a release.
</p>
<h3>September 2003: RoboThon '03</h3>
<p>
Worked very hard to get RoboFab 1.0b1 ready for the RoboThon conference in September. The RoboThon was cancelled at the last minute to make room for hurricane Isabel. We soon released the beta to a small group but the missed conference made it difficult for folks to get started.
</p>
<h3>July 2003: New Fileformat</h3>
<p>
Summer 2003 we started defining the UFO file format, using GLIF for glyph information and Apple's .plist (also XML based and entirely cross platform) for any other data as listings, indices, etc.
</p>
<h3>April 2003: New Objects</h3>
<p>
April 2003 we started new objects to live on top of the FontLab objects. Just van Rossum started work on the <a href="ufo/index.html">GLIF file format</a>.
</p>
<h3>February 2003: Start</h3>
<p>
RoboFab was started sometime during the TypoTechnica in Heidelberg, 2003. Tal Leming, Erik van Blokland and Just van Rossum combined their FontLab code into a new library. At first it was an odd collection of fixes and workarounds.
</p>
</div>
</body>
</html>

View File

@ -1,20 +0,0 @@
/architecture.jpg/1.1/Sun Feb 6 19:42:01 2005//
/buildingaccents.html/1.4/Mon Sep 12 21:59:47 2005//
/drawingexample.jpg/1.1/Sun Feb 6 19:42:01 2005//
/fontlabremote.html/1.4/Mon Sep 12 21:59:47 2005//
/generatefonts.html/1.4/Mon Sep 12 21:59:47 2005//
/glifnames.html/1.4/Sat Sep 10 21:16:19 2005//
/glyphmath.html/1.5/Mon Sep 12 21:59:47 2005//
/index.html/1.5/Mon Sep 12 21:59:47 2005//
/interpolate.html/1.3/Sat Sep 10 21:16:19 2005//
/lowlevel.html/1.5/Mon Sep 12 21:59:47 2005//
/makeufo.html/1.1/Sat Sep 10 21:15:57 2005//
/manipulatepoints.html/1.1/Sun Feb 6 19:41:37 2005//
/objectinheritance.jpg/1.1/Sun Feb 6 19:42:01 2005//
/scripting.html/1.6/Mon Sep 12 21:59:47 2005//
/understandcontours.html/1.4/Mon Sep 12 21:59:47 2005//
/usepens.html/1.4/Mon Sep 12 21:59:47 2005//
/usethelib.html/1.4/Mon Sep 12 21:59:47 2005//
/usetransformations.html/1.4/Mon Sep 12 21:59:47 2005//
/world.html/1.4/Mon Sep 12 21:59:47 2005//
D

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual/howto

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

View File

@ -1,290 +0,0 @@
<!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>Building accents</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../objects/component.html">RComponent</a><br />
<a href="../objects/contour.html">RContour</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Building accents</h1>
<p>
Making accented glyphs is a job where scripting can help save some time. When you have prepared all the parts, the base glyphs and the accents, a script can help to assemble the combinations. There are various ways of doing it, let's start with a simple one.
</p>
<pre>
from robofab.world import CurrentFont
f = CurrentFont()
f.newGlyph(&quot;aacute&quot;)
f[&quot;aacute&quot;].appendComponent(&quot;a&quot;)
f[&quot;aacute&quot;].appendComponent(&quot;acute&quot;, (200, 0))
f[&quot;aacute&quot;].width = f[&quot;a&quot;].width
f.update()
</pre>
<p>
In this example the script creates a new glyph, <strong>aacute</strong>, then proceeds to add components, references to other glyphs rather than the glyphs themselves. The glyph method <strong>appendComponent</strong> is used to do this. See how the <strong>acute</strong> component has an extra argument, (200, 0) - this the offset for the accent. Finally the new glyph is given the width of the base <strong>a</strong>.
</p>
<p>
This example illustrates the use of the very basic <strong>appendComponent</strong> method. But it's not a very useful way to make glyphs. For instance, the string <strong>&quot;aacute&quot;</strong> could easily be made into a variable taken from a list. And dealing with the offsets when placing the accent isn't going to be efficient either when you want to make a large list of accented glyphs. How to go about it that?
</p>
<h2>Building accents automagically</h2>
<p>
RoboFab has its own database which connects glyphnames to components. In the RoboFab distribution folder, go to Data/GlyphConstruction.txt. This text file contains a list of glyphnames and from which components they should be built. The RoboFab Glyph Construction database was based on FontLab's glyph list. This list contains information about where components should be connected.
</p>
<pre>
Acircumflexdotaccent: A circumflex.top dotaccent.bottom
</pre>
<p>
This entry shows that Acircumflexdotaccent is constructed with components from A, a circumflex using the top anchor, and dotaccent using the bottom anchor.
</p>
<h2>Generate a glyph</h2>
<p>
RoboFab's Font object has several ways of starting component glyphs and adding stuff to them. There are different strategies possible for different kinds of problems.
</p>
<h3>font.generateGlyph(glyphName, replace, preflight, printErrors)</h3>
<p>
The easiest method to add an assembled glyph to a font is using the font's <strong>generateGlyph</strong> method. This will look for the glyphname in the glyph construction database and attempt to get all the components and place them at the anchors listed in the database. Let's have a look at its parameters.
<ul>
<li><strong>glyphName</strong>: the name of the glyph, has to correspond to a name in the glyph construction database.</li>
<li><strong>replace</strong>: default set to True, the new glyph will replace the old one if it exists.</li>
<li><strong>preflight</strong>: default set to False, preflight gives you the opportunity to run the glyph creation process without actually adding it to the font. This is useful if you're building the characterset and you don't have all the parts yet. Preflight will return a list of missing anchor points, missing accents, components, etc. Note that it can take several iterations of fixing problems and discovering new ones. If for instance a glyph for a componnent can't be found, it also means that some problems with that glyph are hidden. i.e. when a glyph &quot;A&quot; can't be found, preflight can't tell you that this glyph is missing a required anchor point either.</li>
<li><strong>printErrors</strong>: default set to True, print any errors and problems to the standard output window.</li>
</ul>
</p>
<h3>font.compileGlyph(glyphName, baseName, accentNames, adjustWidth=False, preflight=False, printErrors=True)</h3>
<p>
Compile a glyph with specified components. If you want to assemble accents that are not the glyph construction database, using compileGlyph.
<ul>
<li><strong>glyphName</strong>: the name of the glyph where it all needs to go.</li>
<li><strong>baseName</strong>: the name of the base glyph. accentNames: a list of accentName, anchorName tuples, [('acute', 'top'), etc]</li>
<li><strong>preflight</strong>: default set to False, preflight gives you the opportunity to run the glyph creation process without actually adding it to the font. This is useful if you're building the characterset and you don't have all the parts yet. Preflight will return a list of missing anchor points, missing accents, components, etc.</li>
<li><strong>printErrors</strong>: default set to True, print any errors and problems to the standard output window.</li>
</ul>
</p>
<h2>AccentBuilder</h2>
<p>
RoboFab comes with a versatile accent building tool, AccentBuilder. Have a look at robofab.tools.accentbuilder. AccentBuilder deals with components, anchorpoints.
</p>
<pre>
from robofab.accentBuilder import AccentTools, buildRelatedAccentList
font = CurrentFont
# a list of accented glyphs that you want to build
myList=['Aacute', 'aacute']
# search for glyphs related to glyphs in myList and add them to myList
myList=buildRelatedAccentList(font, myList)+myList
# start the class
at=AccentTools(font, myList)
# clear away any anchors that exist (this is optional)
at.clearAnchors()
# add necessary anchors if you want to
at.buildAnchors(ucXOffset=20, ucYOffset=40, lcXOffset=15, lcYOffset=30)
# print a report of any errors that occured
at.printAnchorErrors()
# build the accented glyphs if you want to
at.buildAccents()
# print a report of any errors that occured
at.printAccentErrors()
</pre>
<h2>Building your own accentbuilders</h2>
<p>
For typeface production it is a good idea to build a set of standardised tools with which you finalise the font data. Here's an example of a script which adds a standardised list of accents to a font. It does not do automatic anchor placement because the scripter wanted to do this manually. But the rest is done automatically. The script also deals correctly with smallcap glyphnames with .sc.
</p>
<pre>
# a script to generate all necessary accented characters.
# this assumes all anchor points are set correctly.
# including doublelayer accents. so, add anchorpoints on the accents too!
# (c) evb
from robofab.world import CurrentFont
from robofab.tools.toolsAll import readGlyphConstructions
f = CurrentFont()
import string
theList = [
# caps
'AEacute',
'AEmacron',
'Aacute',
'Abreve',
# add all the accents you want in this list
]
con = readGlyphConstructions()
theList.sort()
def accentify(f, preflight=False):
print 'start accentification', f.info.fullName
slots = con.keys()
slots.sort()
for k in theList:
if k[-3:] in [&quot;.sc&quot;]:
isSpecial = True
tag = k[-3:]
name = k[:-3]
else:
isSpecial = False
tag = &quot;&quot;
name = k
parts = con.get(name, None)
if parts is None:
print k, &quot;not defined?&quot;
continue
base = parts[0]
accents = parts[1:]
f.generateGlyph(k, preflight=preflight)
f[k].mark = 100 + randint(-20, 20)
f[k].autoUnicodes()
f[k].update()
f.update()
accentify(f)
print 'done'
</pre>
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,261 +0,0 @@
<!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>FontLab Remote</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../objects/lib.html">RLib</a><br />
<a href="buildingaccents.html">Building accents</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>FontLab Remote</h1>
<p>
A neat feature in RoboFab for FontLab on MacOS. RoboFab can install an AppleEvent handler in FontLab to make FontLab respond to calls from other applications. There is code to communicate with FontLab using this AppleEvent and to make it execute code and exchange data such as glyphs. How useful this remote stuff is depends on what you want to do with it. We thought it was cool. The 'remote' relates to one application controlling another. Both applications need to run on the same machine, it does not mean that FontLab is accepting commands over a network for instance. For that we need another tool.
</p>
<h2>How?</h2> <h3>Step 1: Start the remote stuff in FontLab</h3>
<p>
The first thing you need to do is start the AppleEvent support in FontLab. That's done by importing the remote module.
</p>
<pre>
# start the remote stuff in FontLab
import robofab.tools.remote
>>> FontLabRemote is on.
</pre> <h3>Step 2: Start the Python IDE</h3>
<p>
You can now send commands, bits of code and entire glyphs to FontLab from the Python IDE.
</p>
<pre>
# first, try a bit of python code
from robofab.tools.remote import runFontLabRemote
print runFontLabRemote(&quot;print 1+1&quot;)
>>> 2
</pre>
<p>
The function runFontLabRemote() sends a piece of Python code to FontLab's python interpreter and has it executed. In this example the code is &quot;print 1+1&quot;. The result, the output of FontLab running this piece of code is then returned to the Python IDE. Note that the output is always a string. Depending on the code you throw at FontLab it could even contain tracebacks or other output.
</p>
<p>
When FontLab receives and executes a remote command, it will print a note to the FontLab Output window.
</p>
<pre>
< executing remote command >
< executing remote command >
< executing remote command >
</pre>
<p>
That means that FontLab is doing remote stuff.
</p>
<h3>Step 3: Teleporting a Glyph</h3>
<p>
The remote module has support to send and receive Glyphs. For the next example open a new font in FontLab first (command N), then run the following code in the Python IDE. Make sure you have a UFO font handy somewhere.
</p>
<pre>
from robofab.tools.remote import transmitGlyph
# Pick a UFO font:
f = OpenFont()
# one to beam up, Scotty!
transmitGlyph(f['n'])
</pre>
<p>
If all went well, you now have the 'n' from your UFO copied to the right slot in your FontLab font. As noted earlier, if all you want to do is import some glyphs from a UFO into FontLab there is absolutely no need to use all this remote stuff.
</p>
<h2>Why?</h2>
<p>
The remote module only takes care of the communication with FontLab. Possible applications which could be built on top of this are:
</p>
<ul>
<li>
Use FontLab to perform outline operations such as remove overlap.
</li>
<li>
Use FontLab to batch process font generation.
</li>
<li>
Build an external editor to augment the functionality of FontLab
</li>
</ul>
<p>
As noted before, the remote stuff only works on MacOS.
</p>
<h2>Example</h2>
<p>
Example in which a glyph from a UFO opened in plain Python is copied to FontLab. After removing overlap the glyph is returned and inserted in the UFO.
</p>
<pre>
#FLM: Remove overlap from Remote Glyph.
from robofab.world import OpenFont
from robofab.tools.remote import transmitGlyph, receiveGlyph, runFontLabRemote
# Pick a UFO font:
f = OpenFont()
print &quot;Number of contours before&quot;, len(f['A'])
# call FontLab to make a new font
startNewFontCode = &quot;&quot;&quot;from robofab.world import NewFont
f = NewFont()
f.info.fullName = 'Temporary Font generated by RoboFab Remote'&quot;&quot;&quot;
print runFontLabRemote(startNewFontCode)
# send a glyph to FontLab,
# it will be inserted in the CurrentFont.
transmitGlyph(f['A'])
f.removeGlyph('A')
# send instructions to remove overlap for this glyph
overlapCode = &quot;&quot;&quot;from robofab.world import CurrentFont
from robofab.tools.remote import transmitGlyph
f = CurrentFont()
f[&quot;A&quot;].removeOverlap()
f.update()
transmitGlyph(f['A'])
&quot;&quot;&quot;
# send the code and catch the output
x = runFontLabRemote(overlapCode)
# interpret the output
receiveGlyph(x, f)
print &quot;Number of contours after: &quot;, len(f['A'])
# send instructions to FontLab to close the font again.
closeFontCode = &quot;&quot;&quot;from robofab.world import CurrentFont
f = CurrentFont()
f.close(None)
&quot;&quot;&quot;
print runFontLabRemote(closeFontCode)
print 'done!'
# possible results:
>>> Number of contours before 6
>>> Number of contours after: 4
</pre> <h2>Notes</h2>
<p>
While experimenting with robofab.tools.remote we found that after some time it's possible that FontLab grows weary of the remote fussing and the scripts stop working. Restarting FontLab usually solves that situation.
</p>
</div>
</body>
</html>

View File

@ -1,205 +0,0 @@
<!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>How to: Generate Fonts</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../objects/font.html">RFont</a><br />
<a href="../objects/lib.html">RLib</a><br />
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Generating Fonts</h1>
<p>
A RFont object in FontLab can call FontLab to generate fonts. Generating fonts can be time consuming, even when all the right parameters are set. So this is a nice candidate for automation. First of all a generator script will give you consistency between generations and versions. But also it means you can set a machine to work to generate batches of fonts and focus on more creative tasks.
</p>
<p>
Note: the generate method only calls on FontLab to generate the fonts in a particular format. It does not prepare the font data for that specific format, i.e. for example when you're generating for PC Truetype, generate() won't select the appropriate encodings or special windows flags. You need to do that.
</p>
<h3>RFont.generate(outputType, path=None)</h3>
<p>
Generate the font. outputType is the type of font to output. An overview of available output Types in FontLab:
</p>
<ul>
<li>
<strong>pctype1</strong>:PC Type 1 font (binary/PFB)
</li>
<li>
<strong>pcmm</strong>: PC MultipleMaster font (PFB)
</li>
<li>
<strong>pctype1ascii</strong>: PC Type 1 font (ASCII/PFA)
</li>
<li>
<strong>pcmmascii</strong>: PC MultipleMaster font (ASCII/PFA)
</li>
<li>
<strong>mactype1</strong>:Mac Type 1 font (generates suitcase and LWFN file)
</li>
<li>
<strong>otfcff</strong>: PS OpenType (CFF-based) font (OTF)
</li>
<li>
<strong>otfttf</strong>: PC TrueType/TT OpenType font (TTF)
</li>
<li>
<strong>macttf</strong>: Mac TrueType font (generates suitcase)
</li>
<li>
<strong>macttdfont</strong>: Mac TrueType font (generates suitcase with resources in data fork)
</li>
<li>
(doc adapted from http://dev.fontlab.net/flpydoc/)
</li>
</ul>
<h3>Notes</h3>
<p>
<strong>path</strong> can be a directory or a directory file name combo:
</p>
<ul>
<li>
path=&quot;DirectoryA/DirectoryB&quot;
</li>
<li>
path=&quot;DirectoryA/DirectoryB/MyFontName&quot;
</li>
<li>
path=&quot;DirectoryA/DirectoryB/ < filename >&quot;
</li>
</ul>
<p>
If no <strong>path</strong> is given, the file will be output in the same directory as the vfb file. If no <strong>filename</strong> is given, the filename will be the vfb file name with the appropriate suffix.
</p>
<h2>Examples</h2>
<p>
FontLab can generate many different formats for different platforms. Please refer to the FontLab manual for specifics. Some formats generate several files, others only one. Some formats are not available in all versions of FontLab.
</p>
<pre>
import os.path
from robofab.world import CurrentFont
font = CurrentFont()
path = font.path
dir, fileName = os.path.split(path)
path = os.sep.join([dir, font.info.fullName])
font.generate('mactype1', path)
</pre>
</div>
</body>
</html>

View File

@ -1,177 +0,0 @@
<!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>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</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 &quot;_&quot; (underscore), including &quot;.&quot;</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>
<pre>
# examples of glyphname to glif name transformations
from robofab.tools.glyphNameSchemes import glyphNameToShortFileName
# a short name
print glyphNameToShortFileName(&quot;accent&quot;, None)
>>> &quot;accent.glif&quot;
# a short name, starting with capital letter
print glyphNameToShortFileName(&quot;Accent&quot;, None)
>>> &quot;A_ccent.glif&quot;
# a really long name - note the hexadecimal hash at the end
print glyphNameToShortFileName(&quot;this_is_a_very_long_glyph_name.altswash2&quot;, None)
>>> &quot;this_is_a_very_lon340a8fa5.glif&quot;
# a name with a period in it, 1
print glyphNameToShortFileName(&quot;a.alt&quot;, None)
>>> &quot;a_alt.glif&quot;
# a name with a period in it, 2
print glyphNameToShortFileName(&quot;.notdef&quot;, None)
>>> &quot;_notdef.glif&quot;
# a name with non-ascii characters
print glyphNameToShortFileName(&quot;&uuml;nic&oslash;de&quot;, None)
>>> &quot;_nic_de.glif&quot;
</pre>
</div>
</body>
</html>

View File

@ -1,235 +0,0 @@
<!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>How to: Glyph Math</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../glossary/glyphmath.html">Glossary: GlyphMath</a><br />
<a href="../objects/component.html">RComponent</a><br />
<a href="../objects/contour.html">RContour</a><br />
<a href="../objects/font.html">RFont</a><br />
<a href="../objects/glyph.html">RGlyph</a><br />
<a href="../objects/lib.html">RLib</a><br />
<a href="../objects/pen.html">Pen objects</a><br />
<a href="usetransformations.html">Using transformations</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Glyph Math</h1>
<p>
RGlyph objects have methods that allow the objects to behave a bit like variables in simple math. These methods do not do additions or substractions of the surface area of the glyphs, like layering two glyphs on top of each other and than doing &quot;remove overlap&quot;. Instead, they return new glyph objects in which each coordinate in each contour is the product of the two glyphs.
</p>
<h2>Objects</h2>
<p>
All glyph math operations in have new, orphaned, objects as result. For instance a substraction of two FontLab RoboFab glyphs will result in a new glyph object, but it won't be part of the font. If you want the result to be part of the font you have to add it explicitly, see the example at the bottom of this page. There are several reasons for this:
</p>
<ul>
<li>
the result might not even come from glyphs in the same font, i.e. you can substract a glyph in one font from a glyph in another font. Where should the result live? you decide.
</li>
<li>
You might not want the result to be part of your font when you're using it for further calculations. So: results from glyphmath operations are orphan glyphs that do not belong to any font.
</li>
<li>
the results need to use floating point (19.234943) numbers for precision, FontLab only stores integer numbers (19)
</li>
</ul>
<p>
If you want to add a glyph (of any flavor, FontLab or UFO) to a font use the appendGlyph method:
</p>
<pre>
someNewGlyph = aFont.newGlyph(&quot;someNewGlyph&quot;)
someNewGlyph.appendGlyph(restultFromGlyphMath)
# note you have to set the width, appendGlyph does not automatically
# take the value.
someNewGlyph.width = restultFromGlyphMath.width
</pre>
<h2>Substraction</h2>
<p>
Substraction returns a new glyph object with contours which represent the <strong>difference</strong> between the two previous glyphs. As a glyph itself, it's not much to look at. If you draw the result of a substraction it will probably look like a crumpled outline.
</p>
<h3>Example Substraction</h3> <pre>f = CurrentFont()
g = f[&quot;a&quot;]
h = f[&quot;b&quot;]
# suppose g and h have compatible point structures
myRelativeGlyph = g - h
</pre> <h2>Addition</h2>
<p>
Addition returns a new glyph object with the contours which is the product of the two previous glyphs. If you just add two &quot;normal&quot; glyphs from a font (or multiple fonts for that matter) it will look odd. But you can also easily add a relative glyph (a result of substracting one glyph from another), which effectively means you're applying the difference between two glyphs to a third. And that can be a very useful action.
</p>
<h3>Example Addition</h3> <pre># continue with myRelativeGlyph from the previous example
newglyph = f[&quot;x&quot;] + myRelativeGlyph
</pre> <h2>Multiplication</h2>
<p>
When a normal glyph is multiplied it looks as if the glyph has been scaled. For instance multiplying a glyph with 0.5 scales the shapes 50%.
</p>
<h3>Example Multiplication</h3> <pre># continue with myRelativeGlyph from the previous example
newglyph = f[&quot;x&quot;] + 0.25 * myRelativeGlyph
# this works too:
newglyph = f[&quot;x&quot;] + myRelativeGlyph * 0.25
# and this works as well:
newglyph = f[&quot;x&quot;] + myRelativeGlyph * (0.33, 0.99)
# see what that does? it multiplies with different factors for x and y!
# for instance:
newglyph = f[&quot;x&quot;] + myRelativeGlyph * (1, 0)
# would only apply the horizontal effect of the relative glyph to f['x'].
</pre> <h2>Division</h2>
<p>
Divisions works just like multiplications, you just need to make sure not to divide by zero.
</p>
<h3>Example Division</h3> <pre># continue with myRelativeGlyph from the previous example
newglyph = f[&quot;x&quot;] + myRelativeGlyph / 4
# this works too:
newglyph = f[&quot;x&quot;] + myRelativeGlyph / (0.25, 2)
</pre> <h2>Combinations</h2>
<p>
These examples are simple enough, but when you combine them the operations can become really powerful. You could recreate font interpolation using GlyphMath, or construct new networks of interpolations, additions, shifts, deltas that were impossible to build.
</p>
<h3>All together now</h3>
<p>
This is from the demo_GlyphMath.py which should be in the Scripts/RoboFabIntro folder.
</p>
<pre>
#FLM: Fun with GlyphMath
# this example is meant to run with the RoboFab Demo Font
# as the Current Font. So, if you're doing this in FontLab
# import the Demo Font UFO first.
from robofab.world import CurrentFont
from random import random
f = CurrentFont()
condensedLight = f[&quot;a#condensed_light&quot;]
wideLight = f[&quot;a#wide_light&quot;]
wideBold = f[&quot;a#wide_bold&quot;]
diff = wideLight - condensedLight
destination = f.newGlyph(&quot;a#deltaexperiment&quot;)
destination.clear()
x = wideBold + (condensedLight-wideLight)*random()
destination.appendGlyph( x)
destination.width = x.width
f.update()
</pre> <h2>Implementation limits</h2>
<p>
In objectsFL (for use in FontLab), only RGlyph has glyphmath operators implemented. The result of a glyphmath operation in FontLab is <strong>always</strong> an object from objectsRF. In ObjectsRF most objects have *, + and - implemented. But considering the operators are mainly used for Glyph stuff, the RGlyph object is a bit more kitted out with division as well.
</p>
</div>
</body>
</html>

View File

@ -1,152 +0,0 @@
<!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>RoboFab How To's</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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">
<span class="selected">
How to's
</span>
<br />
<a href="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="../index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<p class="menu">
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>How To's</h1>
<p>
This section provides some cases on how to use the RoboFab objects in everyday type design work.
</p>
<h3>Stories</h3>
<p>
<ul class="crb-locallink">
<li><a href="buildingaccents.html">Building accents</a>: use RoboFab to build accented glyphs with components.
</li><li><a href="fontlabremote.html">FontLab Remote</a>: use AppleEvents to control FontLab in Mac OSX
</li><li><a href="generatefonts.html">Generate Fonts</a>: how to generate fonts with RoboFab in FontLab.
</li><li><a href="glifnames.html">Glyphnames versus GLIF-names</a>: how to use Robofab's glyph naming schemes for UFO export
</li><li><a href="glyphmath.html">Using Glyph Math</a>: applying math operators on glyph objects.
</li><li><a href="interpolate.html">How to interpolate</a>: how to do interpolation with RoboFab objects.
</li><li><a href="lowlevel.html">How to get to FontLab stuff</a>: the naked methods and attributes
</li><li><a href="makeufo.html">How to make a UFO</a>: export and import UFO's in FontLab
</li><li><a href="scripting.html">Scripting</a>: simple examples.
</li><li><a href="understandcontours.html">Understanding Contours</a>: how contours, segments and points work.
</li><li><a href="usepens.html">Using Pens</a>: playing with pen objects.
</li><li><a href="usethelib.html">Using the lib</a>: make the glyph.lib and font.lib work for you.
</li><li><a href="usetransformations.html">Using transformations</a>: matrix transformations in RoboFab
</li><li><a href="world.html">The world module</a>: what on earth is it for?
</li></ul>
</p>
</div>
</body>
</html>

View File

@ -1,220 +0,0 @@
<!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>How to interpolate</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>How to interpolate</h1>
<p>
RoboFab's interpolation is independent of the interpolation tools provided in FontLab. First of all that means that you can interpolate UFO fonts without the help of FontLab. It also means that the interpolation engine works different than the one in FontLab.
</p>
<h2>Strict</h2>
<p>
RoboFab interpolation is very strict. It won't interpolate unless the point structures of both extremes match. It won't mess with the masters, force points or anything. The user has to get it right.
</p>
<h3>aGlyph.isCompatible(otherGlyph, report=True)</h3>
<p>
Glyph has a method isCompatible() which reports whether or not the point structures are capable of interpolating. With this method you can run through your proposed interpolation first and see if all glyphs work, and perhaps send feedback to the user.
</p>
<pre>
from robofab.world import CurrentFont
f = CurrentFont()
a = f[&quot;a&quot;]
print a.isCompatible(f[&quot;b&quot;], False)
>>> False
</pre>
<p>
isCompatible has a flag <strong>report</strong> which if set to True will return a tuple with a report on the incompatibilities.
</p>
<pre>
from robofab.world import CurrentFont
f = CurrentFont()
a = f[&quot;a&quot;]
print a.isCompatible(f[&quot;b&quot;], True)
>>> (False, [&quot;Fatal error: contour 0 in glyph a
and glyph b don't have the
same number of segments.&quot;])
</pre>
<h3>aFont.interpolate(factor, minFont, maxFont, suppressError=True, analyzeOnly=False)</h3>
<p>
Interpolate by factor between minFont and maxFont. In FontLab the result of the interpolation will be rounded to whole integers. In NoneLab (outside FontLab, operating on a UFO), the result of the interpolation is a font with glyphs with floating point coordinates so if you want to use the result of one interpolation as a master in the next you won't loose precision to rounding errors. It might mean that for some uses of UFO you need to round the glyphs afterwards. aFont.interpolate also interpolates the positions of components, anchors, ascender, descender, and glyph widths for the whole font.
</p>
<br />
<ul>
<li>
<strong>factor</strong> either a number or a tuple of numbers. Usually factor is a float number between 0 and 1. 0 produces minGlyph, 1 produces maxGlyph. Values > extrapolates beyong maxGlyph. Values < extrapolate beyond minGlyph. If you pass (x, y) to factor it will interpolate horizontal values differently from vertical values. For instance (0, 1) as factor produces a font (or a glyph) which horizontally looks like the minimum, but vertically it looks like the maximum.
</li>
<li>
<strong>minFont</strong> RFont object, the font for the minimum master.
</li>
<li>
<strong>maxFont</strong> RFont object, the font for the maximum master.
</li>
<li>
<strong>suppressError</strong> (optional) will supress all tracebacks it finds on the way. That means that interpolation problems in individual glyphs won't stop the rest of the font from getting done. Default set to True.
</li><li>
<strong>analyzeOnly</strong> (optional) will do a dry run of the interpolation and do a full analysis of the compatibility and problems. It won't produce any outlines in the font. Default set to False.
</li>
</ul>
<p>
<a href="../objects/kerning.html">Kerning objects</a> have an interpolation method as well. It is debateable whether an interpolation of two fonts should also automatically interpolate the kerning, so we picked the more explicit approach: in your interpolation script you have to do the interpolation of the kerning objects seperately.
</p>
<h2>Examples</h2>
<h3>Straight interpolating (either FontLab or UFO)</h3>
<p>
Setting a third font to an interpolation of two others.
</p>
<pre>
from robofab.world import OpenFont
minFont = OpenFont(pathToMinFont)
maxFont = OpenFont(pathToMaxFont)
# or any other way you like to get two font objects
inbetweenFont = OpenFont(pathToInbetweenFont)
# so now we have 3 font objects, right?
inbetweenFont.interpolate(.5, minFont, maxFont)
# presto, inbetweenFont is now 50% of one and 50% of the other
inbetweenFont.interpolate((.92, .12), minFont, maxFont)
# presto, inbetweenFont is now horizontally
# vertically interpolated in different ways.
</pre>
<h3>Interpolating two glyphs in the same font</h3>
<p>
For any number of reasons you might want to interpolate a glyph within the same font. Here's how to do it.
</p>
<pre>
from robofab.world import CurrentFont
f = CurrentFont()
g = f.newGlyph(&quot;interpolated&quot;)
g.interpolate(.5, f[&quot;a&quot;], f[&quot;b&quot;]
# if you're in fontlab:
g.update()
</pre>
<h2>Alternatives</h2>
<p>
These are the conventional ways of doing interpolation. Have a look at <a href="glyphmath.html">RoboFab's GlyphMath</a> for alternatives for blending and interpolating glyphs together.
</p>
</div>
</body>
</html>

View File

@ -1,149 +0,0 @@
<!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>How to get to FontLab internals</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>How to get to FontLab's internals</h1>
<p>
If you're using RoboFab in FontLab, it can happen that you need to access a method or attribute of a glyph or font object which does not seem to have an equivalent in RoboFab. What to do?
</p>
<h3>Get Naked</h3>
<p>
RoboFab Glyph and Font objects have a special method, <strong>naked()</strong> which returns the actual, low level FontLab object. This object can then be used with the documented FontLab methods and attributes. The methods and attributes of these FontLab objects are very different from RoboFab.
</p>
<pre>
from robofab.world import CurrentFont
f = CurrentFont()
print f
# this is the high level RoboFab object
>>> < RFont font for TemplatefontPro Rg Regular >
print f.naked()
# this is the low level FontLab object, not a part of RoboFab
>>> < Font 'TemplatefontPro Rg Regular' >
</pre>
</div>
</body>
</html>

View File

@ -1,195 +0,0 @@
<!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>How to make a UFO</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>How to make a UFO</h1>
<p>
Exporting a FontLab font to UFO is easy.
</p>
<ul>
<li>open the .vfb</li>
<li>select the <strong>RoboFabUFO</strong> menu in the Macro toolbar</li>
<li>select the <strong>Export Current Font to UFO Format</strong> script</li>
<li>run it</li>
</ul>
<p>
The .ufo will be in the same directory as the original .vfb file. Have an in-depth look at the <a href="../ufo/index.html">ufo format here</a>.
</p>
<p class="note">
If you want to export a new FontLab font to UFO, <strong>it is important that you save the font to .vfb first.</strong>
</p>
<h2>Importing a UFO into FontLab</h2>
<ul>
<li>select the <strong>RoboFabUFO</strong> menu in the Macro toolbar</li>
<li>select the <strong>Import .ufo File into FontLab</strong> script</li>
<li>run it</li>
</ul>
<p>
This script create a new, empty FontLab font, then proceed to ask you for a .ufo directory.
</p>
<p class="note">
Due to some limitations in how FontLab keeps track of new, untitled, unsaved fonts, it is vital to <strong>make sure that there are no other unsaved, untitled fonts open</strong> when you run this script. Because if there are, FontLab will be confused about where to import the glyphs from the .ufo and none of the fonts will show the new glyphs. It's ok to have other fonts open when importing .ufo, they just to have been saved previously.
</p>
<h3>Importing a bunch of UFO's into FontLab</h3>
<p>
What if you need to import a whole family of UFO's?
</p>
<ul>
<li>select the <strong>RoboFabUFO</strong> menu in the Macro toolbar</li>
<li>select the <strong>Import all UFO's in a folder</strong> script</li>
<li>run it</li>
</ul>
<p>
This script will prompt you for a folder with UFO's. Pick one. The script will proceed to import the UFO's one by one.
</p>
<p class="note">
Sometimes, some versions of FontLab can get a bit tired of importing UFO's in a batch. When this happens not all UFO's will be imported and FontLab may crash. When this happens, just import the fonts one by one.
</p>
<h3>Making a UFO from a font binary</h3>
<p>
Using FontTools you can make a UFO directly from a font binary. This is very fast, and it works outside of FontLab, but not all data (for instance kerning and apperently metrics) is imported. So your mileage may vary.
</p>
<pre>
from robofab.tools.toolsAll import fontToUFO
from robofab.interface.all.dialogs import GetFile, PutFile
srcPath = GetFile('Select the source')
dstPath = PutFile('Save as...')
fontToUFO(srcPath, dstPath)
</pre>
<br />
<br />
<br />
<br />
</div>
</body>
</html>

View File

@ -1,120 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
SYSTEM "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>How to: Manipulate points</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<a href="../objects/model.html"><img src="../img/logo.gif" alt="" border="0" width="102" height="88" /></a>
</div>
<!-- leftcontent section -->
<div id="leftcontent">
<h2 class="crb-seealso">RoboFab</h2>
<p>
<a href="../index.html">Home</a>
<br /><a href="../download/license.html">Download</a>
<br /><a href="../install.html">Install</a>
<br /><a href="../intro.html">Intro</a>
<br /><a href="../ufo/index.html">UFO</a>
<br /><a href="../objects/index.html">Objects</a>
<br /><a href="../tools/index.html">Tools</a>
<br /><a href="index.html">How to's</a>
<br /><a href="../limitations.html">Limitations</a>
<br /><a href="../links/index.html">Links</a>
<br /><a href="../history.html">History</a>
<br /><a href="../glossary/index.html">Glossary</a>
<br /><a href="../credits.html">Credits</a>
<br /><a href="../shop/index.html">Shop</a>
</p>
<h2 class="crb-seealso">See Also</h2>
<a href="../glossary/glyphmath.html">Glossary: GlyphMath</a><br />
<a href="../objects/anchor.html">RAnchor</a><br />
<a href="../objects/bpoint.html">bPoint</a><br />
<a href="../objects/component.html">RComponent</a><br />
<a href="../objects/contour.html">RContour</a><br />
<a href="../objects/font.html">RFont</a><br />
<a href="../objects/glyph.html">RGlyph</a><br />
<a href="../objects/lib.html">RLib</a><br />
<a href="../objects/pen.html">Pen objects</a><br />
<a href="../objects/point.html">RPoint</a><br />
<a href="../objects/segment.html">RSegment</a><br />
<a href="glyphmath.html">Using Glyph Math</a><br />
<a href="usetransformations.html">Using transformations</a><br />
<p>
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
</p>
</div>
<!-- leftcontent section ends -->
<div id="content">
<div id="columntext">
<h1>Manipulating Points</h1>
<p>
RGlyph objects have methods that allow the objects to behave a bit like variables in simple math. These methods do not do additions or substractions of the surface area of the glyphs, like layering two glyphs on top of each other and than doing &quot;remove overlap&quot;. Instead, they return new glyph objects in which each coordinate in each contour is the product of the two glyphs.
</p>
<h2>Objects</h2>
<p>
All glyph math operations in have new, orphaned, objects as result. For instance a substraction of two FontLab RoboFab glyphs will result in a new glyph object, but it won't be part of the font. If you want the result to be part of the font you have to add it explicitly, see the example at the bottom of this page. There are several reasons for this:
<ul>
<li>the result might not even come from glyphs in the same font, i.e. you can substract a glyph in one font from a glyph in another font. Where should the result live? you decide.</li>
<li>You might not want the result to be part of your font when you're using it for further calculations. So: results from glyphmath operations are orphan glyphs that do not belong to any font.</li>
<li>the results need to use floating point (19.234943) numbers for precision, FontLab only stores integer numbers (19)</li>
</ul>
If you want to add a glyph (of any flavor, FontLab or UFO) to a font use the appendGlyph method:
<pre>
someNewGlyph = aFont.newGlyph(&quot;someNewGlyph&quot;)
someNewGlyph.appendGlyph(restultFromGlyphMath)
# note you have to set the width, appendGlyph does not automatically
# take the value.
someNewGlyph.width = restultFromGlyphMath.width
</pre>
</p>
</div>
</div>
<div id="footer">
<h2 class="crb-seealso">Fine print</h2>
<p><a href="../feedback.html">Feedback</a></p>
<p><a href="../map.html">Sitemap</a></p>
<p>Please also refer to the <a href="../download/license.html">Legal</a></p>
<p>Copyright 2004 RoboFab</p>
<p>version 1.0</p>
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,235 +0,0 @@
<!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>RoboFab Scripting</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab Scripting</h1>
<p>
Scripting with RoboFab is programming in Python. Everything is possible, it's just that some things are easier than others.
</p>
<h2>For Python Newbies</h2>
<p>
If you don't have much programming experience, or you're not familiar with Python, have a look at Just van Rossum's <a href="http://drawbot.com">Drawbot</a> (if you're on OSX that is). Drawbot is a low threshold app to play with python code and get awarded with nice eye candy. Learn the princples of programming, loops, variables, by building with graphic shapes, paths, colors.
</p>
<p>
RoboFab uses objects to address the various things you find in a font. Objects are a useful way to think about code. A font is an <strong>object</strong>. It has some <strong>attributes</strong>, values that belong to that object. A font object is also capable of doing stuff by calling its <strong>methods</strong>. None of this is specific to RoboFab, a lot of programming languages use objects, and Python does as well. Objects can contain other objects. Have a look at the <a href="../objects/model.html">RoboFab object model</a> to see how they are structured and what other objects there are besides Font.
</p>
<h3>Other resources</h3>
<p> This is an interesting introduction into programming with Python as well: <a href="http://www.ibiblio.org/obp/thinkCSpy/">How to think like a computer scientist.</a>. A full introduction into programming goes beyond the scope of this manual. Then there are tons of books, websites, stuff. Do some googling.
</p>
<h2>For RoboFog Converts</h2>
<p>For those of you joining us from the cohorts of RoboFog users, here some some of the main points of difference. Maybe others will find this part interesting too.
</p>
<h3>Packages and modules</h3>
<p>Robofab is set up with packages. This is to organise the large volume of code into smaller, easier to manage modules. RoboFab does not have any builtins anymore, so you have to import the stuff you want to work with. Look at <a href="world.html">for the use of the world module</a> which is where a lot of stuff is made available for you.
</p>
<h3>CurrentFont(), CurrentGlyph()</h3>
<p>We've kept the CurrentFont function to provide a font object for the front most font. And we've renamed CurrentChar into CurrentGlyph as RoboFab is fully unicode aware and we're dealing with glyphs, not characters. CurrentGlyph() returns a glyph object for the front most glyph.
</p>
<h3>Segments, bPoints</h3>
<p>
<a href="../objects/font.html">Font</a>s store <a href="../objects/glyph.html">glyph</a>s, glyphs store <a href="../objects/contour.html">contour</a>s, just like RoboFog. Contours however have a few more tricks than their RoboFog counterparts. Contours have <a href="../objects/segment.html">Segments</a>, a kind of cluster of a series of offcurve points and one on curve point (see <a href="understandcontours.html">understanding contours</a>. Contours also have lists of <a href="../objects/point.html">points</a> and <a href="../objects/bpoint.html">bpoints.</a>. Depending on what you need to do you can iterate through the segments or points or bPoints.
</p>
<h3>Conversion, drawing</h3>
<p>
For scripts which convert or transform outline data in some way, consider writing a <a href="usepens.html">pen</a> object for that conversion. These are also handy for drawing in glyphs.
</p>
<h2>Where to start</h2>
<p>
You've seen that a lot of the examples in this manual start by importing some objects or functions from robofab.world. This is an easy way to get to a font, and through the font you can get access to the glyphs and all other values that are associated with them.
</p>
<h3>Open a font from any file</h3>
<pre>
from robofab.world import OpenFont
f = OpenFont()
# hey look! an open font dialog!
print f
>>> None # or a font object, depending on what you select
</pre>
<h3>Open a font from a specific file</h3>
<pre>
from robofab.world import OpenFont
path = &quot;MyDrive/Folder1/Work/somefile&quot;
f = OpenFont(path)
# hey look! it opens the file without asking..
print f
>>> #a font object
</pre>
<h3>Do something with the font that's open</h3>
<pre>
# in Fontlab:
from robofab.world import CurrentFont
f = CurrentFont()
print f
>>> #a font object for the font that's on top.
</pre>
<h2>How to proceed?</h2>
<p>
Programming is for a large part the art of picking one seemingly single problem apart and make a lot of smaller, solveable problems from it. Some random thoughts on the subject:
</p>
<h3>First think about where to start:</h3>
<ul>
<li>does your problem have something to do with the entire font?</li>
<li>or the metrics? the widths? sidebearings? kerning?</li>
<li>or one single glyph? or perhaps a group of glyph while excluding others?</li>
<li>do you need to move stuff around?</li>
<li>do you need to create new glyphs?</li>
</ul>
<h3>Can you describe each step of the process</h3>
<ul>
<li>RoboFab can't be instructed to make judgements on esthetics</li>
<li>you have to formulate small steps, first do this, then compare that.</li>
<li>use approaches and tricks you learned before to get ahead</li>
<li>start with the simplest possible loop and test</li>
<li>play around - pick and object and try to make it do tricks. Use this documentation to see what methods and attributes each has.</li>
</ul>
<h3>Be patient</h3>
<ul>
<li>Programming and scripting is a skill just like any other.</li>
<li>Eventhough some folks pick it up faster, anyone clever enough to understand typedesign can learn scripting.</li>
<li>Read the documentation, try the examples, try the demos. Are there scripts that do something like what you want to do? pick them apart, see how they work. Learn from the source.</li>
<li>If you think that scripting is nothing like design consider this: it's certainly a nicer intellectual challenge to try to write some code, then it is to manually do repetitive, stupid production things for hours or days on end. Make the computers work for you, instead of the other way round. Scripting is control.</li>
</ul>
</div>
</body>
</html>

View File

@ -1,205 +0,0 @@
<!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>How to Understand Contours</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../objects/anchor.html">RAnchor</a><br />
<a href="../objects/bpoint.html">bPoint</a><br />
<a href="../objects/component.html">RComponent</a><br />
<a href="../objects/contour.html">RContour</a><br />
<a href="../objects/point.html">RPoint</a><br />
<a href="../objects/segment.html">RSegment</a><br />
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="usetransformations.html">Using transformations</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Understanding Contours and Segments</h1>
<p>
Now, this is an important part of RoboFab so pay attention. In the world of digital font formats we have several different kinds of ways of describing outlines. Bezier curves for PostScript fonts, Quadratic curves for TrueType fonts. Each with their own peculiarities. RoboFab is format agnostic so it should be able to store all postscript and all truetype points. The structure here is meant to be able to do all that.
</p>
<p>
Diagrams by Tal Leming.
</p>
<h3>Contours</h3>
<p>
A glyph can contain one or more contours. Depending on what you want to do, there are different ways of looking at the data of the contour, the points, the line segments. The RContour object is way to the outlines. A description of the <a href="../objects/contour.html">RContour</a> object.
</p>
<br />
<img src="../objects/contours.jpg" alt="contour" width="300" height="300" />
<br />
<pre># take a glyph (one with outlines obviously)
c = CurrentGlyph()
# get to contours by index:
print c[0]
>>> < RContour for Mailer-Regular.a[0] >
print len(c[0])
>>> 15
# 15? 15 of what?
</pre> <h3>Segments</h3>
<p>
This circle consists of a couple of segments, each a piece of of the contour. A contour is a sequence of segments, you can iterate through a contour to get segments. A contour also has methods for adding and deleting segments.
<br />
<img src="../objects/contours_segments.jpg" alt="segments" width="300" height="300" />
<br />
</p>
<pre># segment code example
</pre>
<p>
In turn, a segment is made up of a sequence of points. Any number of off-curve points followed by an on-curve point. For the PostScript-centric designers: in TrueType outlines it is allowed to have any number of off-curve points before an on-curve. These points know whether they need to be rendered as bezier of quadratic curves. A description of the <a href="../objects/segment.html">RSegment</a> object.
<br />
<img src="../objects/contours_segments_points.jpg" alt="segments" width="300" height="300" />
<br />
</p>
<h3>Points</h3>
<p>
Another way to look at a contour is as a sequence of on-curve and off-curve points. This is the approach taken by glyph.drawPoints() and PointPen. A description of the <a href="../objects/point.html">RPoint</a> object.
</p>
<br />
<img src="../objects/contours_points.jpg" alt="segments" width="300" height="300" />
<br />
<pre>
# get straight to the points in a contour through the points attribute
g = CurrentGlyph()
for aPt in g[0].points:
>>> < RPoint for Special-Bold.A[0][0] >
< RPoint for Special-Bold[1][1] >
etc..
</pre> <h3>bPoints</h3>
<p>
This is another way to look at contours and its parts: bPoints behave very much like RoboFog points used to do. A point object has an incoming bcp, an on-curve (&quot;anchor point&quot; fog called it) and an outgoing bcp. This approach has been added for folks more at ease with the RoboFog structure. Note: if the contour contains series of off-curve points, bPoints won't help you. A description of the <a href="../objects/bpoint.html">bPoint</a> object.
</p>
<br />
<img src="../objects/contours_bpoints.jpg" alt="segments" width="300" height="300" />
<br />
<pre>
# bpoints
c = CurrentGlyph()
for aPt in c[0].bPoints:
print aPt.anchor
print aPt.bcpIn
print aPt.bcpOut
print aPt.type
>>> ...
etc..
</pre>
</div>
</body>
</html>

View File

@ -1,299 +0,0 @@
<!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>How to use pens</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../objects/pen.html">Pen objects</a><br />
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usethelib.html">Using the lib</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>How to use pens</h1>
<p>
On the <a href="../objects/pen.html">pens page</a> we discussed the different pens and their methods. Here we'll look at some practical applications of pens in RoboFab.
</p>
<h2>Drawing stuff in glyphs</h2>
<p>
Sometimes it is necessary to draw things in glyph with a script. Boxes around glyphs, logos, patterns. Whatever the reason, a pen is the way to do it. Rather than constructing all the Contour and Segment objects yourself (it's complex and it can be a pain to get it right), just use a pen to tell the Glyph what you want to draw. In order to make it somewhat easier to find the right pen for the right glyph, RGlyph.getPen() will return a pen object for the current environment. So if you're in FontLab getPen() returns a pen fit for drawing in FontLab RGlyphs. In UFO based fonts, getPen() returns a pen for drawing in UFO glyphs. This way you can keep the code free of environment specific imports.
</p>
<div id="rightimage">
<img src="drawingexample.jpg" alt="result of drawing in a glyph" width="232" height="211" />
</div>
<pre>
from robofab.world import CurrentFont
f = CurrentFont()
newGlyph = f.newGlyph('demoDrawGlyph', clear=True)
newGlyph.width = 1000
# hey, what's this:
pen = newGlyph.getPen()
# ha! a sneaky way to get a pen object!
pen.moveTo((100, 100))
pen.lineTo((800, 100))
pen.curveTo((1000, 300), (1000, 600), (800, 800))
pen.lineTo((100, 800))
pen.lineTo((100, 100))
pen.closePath()
newGlyph.update()
f.update()
</pre>
<h2>robofab.objects.pen.digestPen</h2>
<p>
Using pens to get to contour and outline data.
</p>
<h3>DigestPointPen</h3>
<p>
The DigestPointPen is a pointsPen and it doesn't draw anything, but collects all the coordinates and drawing instructions from glyph.drawPoints(). When the drawing is done you can get to the data with myPen.getDigest(). The result is a tuple with a series of coordinates and instructions. Because it is a tuple you can use it to compare it to other digests, for instance if you want to test if two glyphs are the same or not.
</p>
<pre>
from robofab.world import OpenFont
from robofab.pens.digestPen import DigestPointPen
f = OpenFont()
myPen = DigestPointPen()
f['period'].drawPoints(myPen)
print myPen.getDigest()
>>> ('beginPath',
((140, -4), 'curve', True, None),
((103, -4), None, None, None),
((71, 30), None, None, None),
((71, 69), 'curve', True, None),
((71, 109), None, None, None),
((103, 143), None, None, None),
((140, 143), 'curve', True, None),
((178, 143), None, None, None),
((210, 109), None, None, None),
((210, 69), 'curve', True, None),
((210, 30), None, None, None), \
((178, -4), None, None, None),
'endPath')
</pre>
<h3>DigestPointStructurePen</h3>
<p>
The DigestPointStructurePen is very similar to the DigestPointPen, but it only returns a tuple of the structure without any coordinates. This is very useful in comparing point structures between glyphs. For instance if you want to test if the glyphs can be used in interpolation. Using the same glyph as the example above, compare the results.
</p>
<pre>
from robofab.world import OpenFont
from robofab.pens.digestPen import DigestPointStructurePen
f = OpenFont()
myPen = DigestPointStructurePen()
f['period'].drawPoints(myPen)
print myPen.getDigest()
>>> ('beginPath',
'curve', None, None,
'curve', None, None,
'curve', None, None,
'curve', None, None,
'endPath')
</pre>
<h2>robofab.objects.pen.filterPen</h2>
<p>
As you can see, pen objects are handy tools to get to the glyph data. The <strong>filterPen.py</strong> module contains a couple of pens which modify the contour when it is being drawn. Basically a filterPen controls another pen to do the drawing.
</p>
<h3>FlattenPen and flattenGlyph()</h3>
<p>
Process the contours into a series of straight lines by flattening the curves. That means that a curve is drawn as a series of straight lines, approximating the curve. The length of the segment (and therefor the number of segments) determines the precision. The pen can be controlled to flatten with different lengths. FlattenPen works slightly differently from the PostScript &quot;flattenpath&quot; operator: flattenpath slices a cubic curve a fixed number of times, causing the segments to be of different lengths. The FlattenPen measures each segment and tries to get them all the same length.
</p>
<p>
In order to make working with the FlattenPen easier, filterPen.py also has a convenience function <strong>flattenGlyph()</strong>. This takes care of the one-pen-controlling-another thing, and replaces the current outlines with the filtered results.
</p>
<pre>
from robofab.world import *
from robofab.pens.filterPen import flattenGlyph
d = 10
flattenGlyph(CurrentGlyph(), d)
</pre>
<img src="../img/flatten.gif" width="400" height="84" />
<p>
Different values for d will result in different lengths for the segments drawn by the FlattenPen.
</p>
<h3>ThresholdPen and thresholdGlyph()</h3>
<p>
ThresholdPen only draws segments which are longer than a certain distance. This can be useful for filtering small unnecessary details from autotraced contours. Obviously this is not a replacement for a trained eye, more like a vacuumcleaner for points.
</p>
<pre>
from robofab.world import *
from robofab.pens.filterPen import thresholdGlyph
d = 10
thresholdGlyph(CurrentGlyph(), d)
</pre>
<img src="../img/threshold.gif" width="240" height="126" />
<h3>spikeGlyph() and halftoneGlyph()</h3>
<p>
SpikeGlyph and halftoneGlyph are two very graphic conversions,
</p>
<pre>
from robofab.world import *
from robofab.pens.filterPen import spikeGlyph
segmentLength = 20
spikeLength = 100
spikeGlyph(CurrentGlyph(), segmentLength, spikeLength)
</pre>
<img src="../img/spike.gif" width="180" height="127" />
<pre>
from robofab.world import *
from robofab.pens.filterPen import halftoneGlyph
halftoneGlyph(CurrentGlyph())
</pre>
<img src="../img/halftone.gif" width="180" height="97" />
</div>
</body>
</html>

View File

@ -1,163 +0,0 @@
<!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>Using the lib</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../objects/lib.html">RLib</a><br />
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="world.html">The world module</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Using the lib</h1>
<p>
The lib is very much like a plain dictionary: you use keys to store stuff in it. The nice thing about them is that they save their contents in the font and are available (after the font is saved) to scripts the next time you open the file again. In FontLab the libs (because there are several) are stored in the .vfb source. In UFO based fonts the font.libs end up in their own, XML based .plist files, inside th UFO package. The Glyph.libs end up in the .glif files.
</p>
<h2>Which lib?</h2>
<p>
Sometimes it is handy to store values directly in the font that needs them. Rather than saving something in a seperate file (which could easily get lost), you can store data like this in the lib. A RFont has a lib and each single RGlyph has a lib as well.
RoboFog users might remember the various applications. It is likely that stuff will collect in the font and glyph libs, so it is wise to pay some attention to naming the entries. If you use undescriptive or generic names like 'a' or 'mydata', there's a chance that another script will overwrite the data. So the RoboFab developers propose to use the 'reverse domain name scheme' which works out something like this:
</p>
<pre>
# storing something that belongs to a letterror script
aFont.lib['com.letterror.develop.markers']
# storing something that belongs to a aFoundry script
aFont.lib['com.aFoundry.bud.notes']
</pre>
<p>
The lib is a flat dictionary. For RoboFog users: the RoboFog lib nested and tried to be very clever. Unfortunately it meant that sometimes data would get lots in confusing situations. A flat dictionary solves that.
</p>
<h2>Note</h2>
<p>
In FontLab version 4.5 and 4.6 there's a nasty bug which causes FontLab to crash after something has been added to the font.customdata or glyph.customdata fields. Unfortunately these fields were used to store the robofab.font.lib and robofab.glyph.lib data. We hope future versions of FontLab will address this. In UFO files the libs for font and glyphs work fine.
</p>
<h3>aFont.lib</h3>
<pre>
</pre>
<h3>anyGlyph.lib</h3>
<pre>
</pre>
</div>
</body>
</html>

View File

@ -1,203 +0,0 @@
<!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>Using transformations</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="../objects/anchor.html">RAnchor</a><br />
<a href="../objects/bpoint.html">bPoint</a><br />
<a href="../objects/component.html">RComponent</a><br />
<a href="../objects/contour.html">RContour</a><br />
<a href="../objects/font.html">RFont</a><br />
<a href="../objects/glyph.html">RGlyph</a><br />
<a href="../objects/lib.html">RLib</a><br />
<a href="../objects/pen.html">Pen objects</a><br />
<a href="../objects/point.html">RPoint</a><br />
<a href="../objects/segment.html">RSegment</a><br />
<a href="glyphmath.html">Using Glyph Math</a><br />
<a href="understandcontours.html">Understanding Contours</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Using transformations</h1>
<p>
Matrix transformations in RoboFab are done with the help of the matrix module from fontTools. RContour, RPoint, RbPoint, RGlyph all have transform() methods which accept a matrix object.
</p>
<h2>Transform objects and the Identity transform</h2>
<p>
A Transform object from fontTools is a 2x2 transformation matrix plus offset, a.k.a. Affine transform. Transform instances are &quot;immutable&quot;: all transforming methods, eg. rotate(), return a new Transform instance.
One way to make a new transform object is by importing the <strong>Identity</strong> transform from fontTools.misc.transform. Identity is an instance of Transform and it is initialised to transform to itself (i.e. no visible transformation). The you modify the Identity object: each method (such as rotate(), translate() etc) returns a new Transform object with the last transformation added to it.
</p>
<h3>Oh no! Math!</h3>
<p>
Transform objects are a fast and powerful way to do math with matrices. If you don't know what that means don't worry. If you follow the examples you can build Transform objects that rotate, translate and skew. Of course you can look up <strong>affine transform</strong> on google for some more in depth explanation of transformations.
</p>
<h3>Angles</h3>
<p>
Angles in all Python's math modules are measured in <strong>radians</strong> by default. A radian is a (perhaps) more scientific unit for angles than the regular &quot;degrees&quot;, measuring the &quot;distance travelled&quot; over the circle rather than the angle. The length of a full circle (with radius 1) is 2 * pi. 90 degrees = 1/2 pi radians. One can easily be converted to the other using conversion methods from the math module.
</p>
<pre>
import math
# example of a conversion of degrees to radians
print math.radians(90)
# example of a conversion from radians to degrees
print math.degrees(math.pi)
</pre>
<h3>Example</h3>
<pre>
from fontTools.misc.transform import Identity
from robofab.world import CurrentFont
m = Identity
print m
>>> < Transform [1 0 0 1 0 0] >
m = m.rotate(math.radians(20))
print m
>>> < Transform [0.939692620786 0.342020143326
-0.342020143326 0.939692620786 0 0] >
f = CurrentFont()
for c in f:
c.transform(m)
c.update()
# whammo
</pre>
<h3>Methods of Transform object</h3>
<p>See the source code of fontTools.misc.transform for detailed descriptions and examples.</p>
<ul>
<li><strong>reverseTransform()</strong>: Return a new transformation, which is the other transformation transformed by self. self.reverseTransform(other) is equivalent to
other.transform(self)</li>
<li><strong>rotate(angle)</strong>: Return a new transformation, rotated by angle (in radians).</li>
<li><strong>skew(x, y)</strong>: Return a new transformation, skewed by x and y (in radians).</li>
<li><strong>scale(x=1, y=None)</strong>: Return a new transformation, scaled by x, y. The 'y' argument
may be None, which implies to use the x value for y as well.</li>
<li><strong>toPS()</strong>: returns a string with the values of the transform written out in the PostScript manner: [1 0 0 1 0 0]</li>
<li><strong>transform(other)</strong>: Return a new transformation, transformed by another transformation.</li>
<li><strong>inverse()</strong>: Return the inverse transformation.</li>
<li><strong>transformPoint((x,y))</strong>: Transform a point, i.e. apply the transformation to the point.</li>
<li><strong>transformPoints(points)</strong>: Transform a list of points.</li>
</ul>
</div>
</body>
</html>

View File

@ -1,226 +0,0 @@
<!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>The RoboFab world</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to How To</a></p>
<br />
<br />
<p class="menu">
<a href="buildingaccents.html">Building accents</a><br />
<a href="fontlabremote.html">FontLab Remote</a><br />
<a href="generatefonts.html">Generate Fonts</a><br />
<a href="index.html">How To</a><br />
<a href="lowlevel.html">How to get to FontLab stuff</a><br />
<a href="scripting.html">Scripting</a><br />
<a href="understandcontours.html">Understanding Contours</a><br />
<a href="usepens.html">Using Pens</a><br />
<a href="usethelib.html">Using the lib</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>What is this robofab.world thing?</h1>
<p>
RoboFab can operate in many different environments. When RoboFab is running in FontLab it needs to do different things than when you're using it on for instance Linux or Windows or OSX Python. robofab.world is a module which helps you by providing the objects and functions which are appropriate for the environment you're working in.
</p>
<h2>Portable code</h2>
<p>
Rather than include code in your scripts which try to figure out what functionality is available, and what machine, Python version etc. just ask RoboFab.world. Run a script in FontLab and you'll get RoboFab objects that interface with the FontLab fonts and glyphs. Run the same script outside FontLab, and you need objects that interface with UFO files. robofab.world makes the choosing of the right objects a bit more transparent. Just import from the world module and it will pick the right one.
</p>
<p>
Using robofab.world is not compulsory - you can load the objects from the modules yourself. In some cases robofab.world doesn't even load the objects you might need. But scripts that import from robofab.world can actually work in FontLab, but also outside of it. With a bit of care, your scripts can work on UFO and FontLab fonts without ever noticing the difference. That saves a lot of time and effort.
</p>
<h2>Stuff in robofab.world</h2>
<p>
Here are the objects and functions you can import from robofab.world. if you want to see exactly when and which object are selected, have a look in the robofab.world source.
</p>
<h3>robofab.world.world</h3>
<p>
A collection of parameters about the world RoboFab works in. When the robofab.world module is loaded, the first time you call for it, it creates an instance of a special object which catalogs as much as possible about the environment it woke up in. This object is also called world. It's simpler than it sounds really, have a look at the examples.
</p>
<pre>
# in the Python IDE it looks like this:
from robofab.world import world
print world
>>> [Robofab is running on darwin.
Python version: 2.3,
Mac stuff: X,
PC stuff: None,
FontLab stuff: False,
FLversion: None]
# in a FontLab macro (Mac FontLab) it looks like this:
from robofab.world import world
print world
>>> [Robofab is running on mac.
Python version: 2.3,
Mac stuff: pre-X,
PC stuff: None,
FontLab stuff: True,
FLversion: 4.6.1/Mac]
# see the difference?
</pre> <h3>OpenFont(path)</h3>
<p>
OpenFont is a function which opens a font. When called with a path it will open the font at that location. Without a path it will try to offer some appropriate interface to pick a font. In FontLab, OpenFont() gives you the standard font-opening-interface, and OpenFont(path) will open a FontLab fontwindow for that font. Outside FontLab, for instance in the Python IDE, you get a file dialog to point at a UFO package. If you look at the source code of OpenFont, you'll see that it is not just one function, there are several for different kinds of environments. By importing OpenFont from robofab.world, your script always has the right one and you don't have to change it when the script moves from one environment to the other.
</p>
<p class="note">
In places where there is no UI available, for instance when RoboFab is running on a Linux server, OpenFont(path) might try to import UI parts and fail. If you already know the path of a font, use <strong>RFont(path)</strong> instead.
</p>
<pre>
from robofab.world import OpenFont
f = OpenFont()
# dialog appears
print f
>>> < Font MyFont >
</pre> <h3>CurrentFont()</h3>
<p>
CurrentFont is an old favorite from RoboFog. It returns a font object for the top most font or the last imported font. It is very useful to write short scripts that manipulate the current font in one way or the other, so you don't have to enter the font's name.
</p>
<pre>
from robofab.world import CurrentFont
f = CurrentFont()
>>> < RFont font for MyFontOT-Regular >
</pre> <h3>CurrentGlyph()</h3>
<p>
CurrentGlyph similar to CurrentFont, except that it return the top most glyph. CurrentGlyph returns None when there isn't a glyphwindow open.
</p>
<pre>
from robofab.world import CurrentGlyph
c = CurrentGlyph()
>>> < RGlyph for unnamed_font.L >
</pre>
<h3>AllFonts()</h3>
<p>
AllFonts returns a list with font objects for all fonts which are 'open' at the moment. In FontLab that means one RFont object for each font window. Outside FontLab it means a list of all font objects that exist at the moment. Note: it is possible to have more than one font object for the same UFO, so if you use AllFonts for UFOs you need to take that into account. AllFonts is easy if you want to do something to all open fonts.</p>
<pre>
from robofab.world import AllFonts
for f in AllFonts():
print f
>>> < RFont for aFont-Plain.00 >
>>> < RFont for aFont-Italic.00 >
>>> < RFont for aFont-Bold.00 >
</pre>
<h3>RFont, RGlyph</h3>
<p>
RFont and RGlyph classes are also loaded by robofab.world. In FontLab these objects will be imported from objectsFL.py (the FontLab implementation of the Unified Font Objects), and otherwise from objectsRF.py, the UFO objects.
</p>
</div>
</body>
</html>

View File

@ -1,33 +0,0 @@
/drawmodel.jpg/1.1/Sun Feb 6 19:42:36 2005//
/drawmodel_header.jpg/1.1/Sun Feb 6 19:42:36 2005//
/flatten.gif/1.1/Sun Feb 6 19:42:36 2005//
/halftone.gif/1.1/Sun Feb 6 19:42:36 2005//
/logo.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_02.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_05.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_07.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_11.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_13.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_17.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_20.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_22.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_26.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_28.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_30.gif/1.1/Sun Feb 6 19:42:36 2005//
/offdrawmodel_34.gif/1.1/Sun Feb 6 19:42:36 2005//
/ondrawmodel_02.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_05.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_07.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_11.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_13.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_17.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_20.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_22.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_26.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_28.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_30.gif/1.1/Sun Feb 6 19:42:37 2005//
/ondrawmodel_34.gif/1.1/Sun Feb 6 19:42:37 2005//
/spike.gif/1.1/Sun Feb 6 19:42:37 2005//
/temptitle.gif/1.1/Sun Feb 6 19:42:37 2005//
/threshold.gif/1.1/Sun Feb 6 19:42:37 2005//
D

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual/img

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -1,156 +0,0 @@
<!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>RoboFab</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<span class="selected">
Home
</span>
<br />
<a href="download/license.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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Welcome to RoboFab</h1>
<p>
RoboFab is a Python library with objects that deal with data usually associated with fonts and type design. RoboFab reads and writes UFO font files and works in any Python 2.3 (and 2.2.1), as well as in FontLab 4.6 and up.
</p>
<h2>This site</h2>
<p>
<ul class="crb-directory">
<li><a href="download/index.html">Download</a>: Download RoboFab installers</li>
<li><a href="gettingstarted/index.html">RoboFab Getting Started</a>: simple stuff</li>
<li><a href="glossary/index.html">Glossary</a>: index of words and terminology.</li>
<li><a href="howto/index.html">How To</a>: A couple of cases and examples</li>
<li><a href="links/index.html">Links</a>: Relevant links for RoboFab</li>
<li><a href="objects/index.html">Objects</a>: Overview of the objects, their methods and attributes</li>
<li><a href="shop/index.html">RoboFab Shop</a>: Buy special scripts, packages, swag.</li>
<li><a href="tools/index.html">RoboFab Tools</a>: overview of the tools and miscellaneous code.</li>
<li><a href="ufo/index.html">UFO</a>: About the UFO tools</li>
</ul>
</p>
<h3>Object Model</h3>
<p>
Here is a <a href="objects/model.html">handy map</a> of the RoboFab objects.
</p>
<br />
<a href="objects/model.html"><img src="img/logo.gif" alt="" border="0" width="102" height="88" /></a> <h3>The Developers</h3>
<p>
RoboFab is developed and maintained by Tal Leming, Erik van Blokland, Just van Rossum (in no particular order)
</p>
<h3>Contact</h3>
<p>
Email the RoboFab Consortium at
<br />
<strong>i n f o (at) r o b o f a b (dot) o r g</strong>
</p>
<h3>Copyrights</h3>
<p>
The package is copyrighted by the RoboFab developers and can only be used with the permission of the developers. See the <a href="download/license.html">legal note.</a>. RoboFab is built in <a href="http://www.python.org">Python</a>. Parts of RoboFab use <a href="http://fonttools.sourceforge.net">fontTools</a>, an OpenSource font toolkit by Just van Rossum. Parts of the RoboFab library are built to work with code from <a href="http://www.fontlab.com">FontLab</a>, which is a product of Pyrus Inc. Parts of RoboFab implement the Property List file format in XML, copyright <a href="http://www.apple.com">Apple Computer</a>. Parts of RoboFab implement tables and names from PostScript and the OpenType FDK, copyright <a href="http://www.adobe.com">Adobe</a>.
</p>
</div>
</body>
</html>

View File

@ -1,299 +0,0 @@
<!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>
</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.html">
Download v1.1.1
</a>
<br />
<a href="intro.html">
Intro
</a>
<br />
<span class="selected">
Install Notes
</span>
<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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>
RoboFab ReadMe and installation notes
</h1>
<ul>
<li>
v1.1.1 release September 9 2005
</li>
<li>
v1.1 release February 7 2005
</li>
<li>
v1.0b1 release October 6 2003
</li>
<li>
September 14, 2003
</li>
<li>
September 1, 2003
</li>
<li>
July 27, 2003
</li>
</ul>
<h2>
Which Python?
</h2>
<p>
RoboFab works with any Python 2.2.1 and up.
</p>
<h3>
Which Python for FontLab?
</h3>
<p>
If you're using RoboFab in conjunction with FontLab, there are some restrictions imposed by FontLab's taste in Python. On MacOS the Python version that will work with both FontLab and RoboFab is MacPython-OS9 2.3. FontLab on Windows requires Python 2.2.1 and other OS's: Python 2.3. RoboFab is backwards compatible to Python 2.2.1, but not 2.2. RoboFab now includes a Python 2.2 compatible version of sets.py.
</p>
<p class="note">
Please refer to FontLab documentation for up to date and version specific info on which Python is needed for which FontLab.
</p>
<h3>
About install.py
</h3>
<p>
In the package, on the same level as this read me there's a install.py script. Running this script creates a file named
<strong>
robofab.pth
</strong>
in site-packages. This robofab.pth file contains the path to the current location of the RoboFab package. It does not copy the RoboFab package to site-packages itself, you need to keep the RoboFab package. Also: if you _move_ the RoboFab folder to some other location (or rename any of the directories the RoboFab folder is nested in), you have to run the install.py script again to update the path.
</p>
<ul>
<li>
<a href="http://www.python.org/download">
Download Python
</a>
</li>
<li>
<a href="http://homepages.cwi.nl/~jack/macpython/download.html">
MacOS Python download page
</a>
</li>
</ul>
<h3>
Dependencies
</h3>
<p>
Some parts of RoboFab depend on other Python modules and packages. These need to be installed as well.
</p>
<ul>
<li>
<strong>
FontTools:
</strong>
Robofab requires Just van Rossum's FontTools package (not to be confused with Apple Inc's set of tools for fonts with the same name). It is recommended that you use the RoboFab installer with FontTools built in, available at
<a href="download/license.html">
the download section</a>. If you must pick up FontTools separately, download the latest snapshot at
<a href="http://fonttools.sourceforge.net/cvs-snapshots/gzip/fonttools-current-snapshot.tgz">
fonttools.sf.net
</a>
</li>
<li>
<strong>
The Numeric Python module</strong>, available from sourceforge
<a href="http://sourceforge.net/projects/numpy">
here</a>. Note that downloading and installing a project from sourceforge might seem a bit dauting. Unfortunately there is no room here to maintain an install instruction for Numeric as well - please refer to the documentation provided at the project site. NoneLab use of RoboFab and reading and writing of UFO's requires Numeric. Using the RoboFab objects in FontLab can probably work without it.
</li>
</ul>
<h2>
RoboFab bundled with FontLab Studio 5
</h2>
<p>
FontLab Studio 5 comes with RoboFab preinstalled. At the time of the 1.1.1 release (September 2005) we don't know just yet how the bundling will work exactly, where the files will be located, how to update etc. We assume that the next release will have more info on that. RoboFab 1.1.1 was released specifically with fixes for this bundle. We tested with FontLab Studio 5 Beta on Windows.
</p>
<h2>
Installing RoboFab on MacPython on Mac OSX, and most Unix.
</h2>
<p>
Python on MacOS is going through an interesting and important transition. It means however that there are several different Python solutions available on different versions of MacOS. Have a look at the
<a href="http://homepages.cwi.nl/~jack/macpython/">
MacPython pages
</a>
to familiarize yourself with the options. Apart from that, installing RoboFab consists of running the install.py script in a Python of your choice.
</p>
<h3>
Installing on Mac OSX MacPython &quot;OS9&quot; 2.3, for FontLab.
</h3>
<p>
FontLab 4.6 on Mac OSX has to work with MacPython &quot;OS9&quot; 2.3 (available from
<a href="http://homepages.cwi.nl/~jack/macpython/macpython-older.html">
MacPython</a>). Currently FontLab does not work with the Framework version of Python. In Application/MacPython-OS9 2.3 find the
<strong>
PythonInterpreter</strong>. Then go to the directory where you downloaded RoboFab. Drag install.py on top of PythonInterpreter to run it. If it says 'RoboFab is installed' you're done. Since FontLab uses this version of Python, this procedure also installs RoboFab for use inside FontLab.
</p>
<p>
RoboFab has two folders of demo scripts and utilities which can be used in FontLab. Copy the contents of the
<strong>
Scripts
</strong>
folder to the FontLab/Macros folder to make them available to FontLab.
</p>
<h3>
Permissions
</h3>
<p>
Make sure you have admin permissions on the machine when you install the various packages. When installing as a normal priviliged user, it can sometimes happen that certain files can't be written, and the installation remains incomplete. The most common problem is that one or two preference files need to be written, but the current user does not have enough permissions to delete them. Read the traceback, locate the file, delete, install again.
</p>
<h2>
Installing on Windows
</h2>
<p>
Installing RoboFab on windows should be pretty straightforward. RoboFab is backwards compatible to Python 2.2.1, but not 2.2. RoboFab now includes a Python 2.2 compatible version of sets.py.
</p>
<h3>
Note
</h3>
<p>
FontLab 4.54 (and higher) offer some basic file dialogs which RoboFab 1.1.1 uses. If you want to use file dialogs on Windows in an older (pre- 4.54) version of FontLab, or you want to use file dialogs on Windows, outside of FontLab (NoneLab), then you need to install the free win32 module, which might have dependencies of its own.
</p>
<ul>
<li>
<strong>
The win32 module</strong>, available for download
<a href="http://starship.python.net/crew/mhammond/win32/Downloads.html">
here</a>. This module is needed for some simple dialogs and messages. We might actually move to another module for these services in the future.
</li>
</ul>
<p>
Tested in Windows XP Home Edition. If there are special requests or procedures we've forgotten to mention, please let us know.
</p>
<h2>
Installing on other platforms
</h2>
<p>
Place the robofab directory in a place where you can leave it for a while. Not on the desktop or a temporary download folder. Run install.py in a Python interpreter.
</p>
<h2>
Initial testing
</h2>
<p>
Open a Python interactive interpreter window.
</p>
<pre>import robofab
# notice, all lowercase!
</pre>
<p>
If you don't get an traceback, you're good to go.
</p>
<p>
In Scripts/RoboFabIntro/ there are some test scripts, simple examples and some utilities. Read the source to learn more about what the examples do and where they want to run.
</p>
<h2>
Detailed unittesting
</h2>
<p>
Robofab has unittesting to make sure all parts function properly. If you don't know what unittesting is, don't sweat it. If you're interested, go to
<strong>
robofab/test/runAll.py</strong>.
</p>
<br />
<br />
<br />
</div>
</body>
</html>

View File

@ -1,201 +0,0 @@
<!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>RoboFab Intro</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.html">
Download v1.1.1
</a>
<br />
<span class="selected">
Intro
</span>
<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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab Intro</h1>
<p>
RoboFab is a <strong>library</strong> of Python code for manipulation and storage of font and glyph related data. RoboFab implements a new font file format, the <a href="ufo/index.html">Unified Font Objects</a> or .ufo for short. UFO is a format for <strong>font sources</strong> (similar to something like .fog or .vfb) except that UFO is XML based (see <a href="ufo/index.html">Glyph Interchange Format</a>), readable, well documented and easily extended to contain different kinds of data.
</p>
<h2>Long term sources</h2>
<div id="rightimage">
<img src="ufo/xmltext.jpg" alt="xml text" border="0" width="347" height="409" />
</div>
<p>
Traditionally, font editors have their own file formats to store the work in progress. Generated fonts are optimised for size and speed and they have no extra room to store all the additional information one needs during the design of a font (for instance background layers, notes, information for other font formats). When a company stops working on their application (it happens), the binary source files become a burden. Not immediately, but soon enough as system updates make the last version of the program impossible to run. When that happens, all the binary source files are impossible to read. The formats are not or badly documented. They've locked themselves and your work is gone.
Type design is a long term endeavour and it makes sense to store font source material in a long term format. UFO is our idea of how such a format should look like: XML based, object oriented and flexible. Text is just so much easier to handle.
</p>
<h3>Unified Font Objects</h3>
<p>
RoboFab reads and writes UFO, but it also provides a range of Python objects to work with these Unified Font Objects. We have implemented the UFO objects for use in FontLab (based on top of FontLab's own objects) and another one which implements the UFO objects for use in a plain-Python environment, NoneLab. That means you can access and manipulate font and glyph data in Python without running a font editor (but it has some other drawbacks). It's possible to write scripts with RoboFab that work the same in FontLab as they do in a plain Python environment. Unified Font Objects can store quadratic and bezier splines.
</p>
<h2>RoboFab environments</h2>
<p>
Parts of RoboFab can be used in FontLab, other parts work outside FontLab, in normal Python interpreters. Some parts work in both. This is a powerful feature of RoboFab, but it can sometimes be a bit confusing. Have a look at <a href="howto/world.html">the world module</a> for some help in making scripts that work everywhere.
</p>
<h3>RoboFab in plain Python</h3>
<p>
After RoboFab is installed you can write plain non-FontLab Python scripts that open, manipulate and save .ufo files. Through the RoboFab <a href="objects/index.html">objects</a> you have access to all data in the font: names, glyphs, contours, widths, kerning, the lot. Use the <a href="objects/index.html">objects</a> overview or the <a href="objects/model.html">objects map</a> to get an idea of what these things can do. Plain Python can be a Python IDE, or a python command line interpreter. RoboFab runs on any Python 2.2.1+ installation, Linux, Unix, Mac OSX, MacOS9, Windows. <a href="http://www.python.org/download/">Python ports to lots of platforms</a> and so does RoboFab.
</p>
<h3>RoboFab in FontLab's Python</h3>
<p>
RoboFab can also run in FontLab and transparently implements the RoboFab object structure on top of the FontLab objects. That means that with RoboFab installed you can talk to FontLab fonts using the same methods and attributes as you use to write scripts for UFO fonts. The RoboFab objects in FontLab can manipulate the font data you see in the FontLab windows. Some RoboFab objects in FontLab have extra attributes and methods to deal with FontLab specific functionality. For example font generation, guides and access to the underlying FontLab objects.
</p>
<h3>RoboFab and UFO</h3>
<p>
RoboFab Font objects can export and import the UFO format. So you can write scripts in FontLab that export data to UFO, and other scripts that edit these UFO's, and then later import the UFO back into FontLab.
</p>
<h2>What RoboFab is not..</h2>
<h3>Not entirely RoboFog MkII</h3>
<p>
RoboFab is not a port of <strong>RoboFog</strong> to OSX, nor is it a complete font editor with interfaces, font and glyph windows etc. It is a toolkit that you can use to build <strong>your tools</strong> with. You can start by using RoboFab to make scripting in FontLab easier. But you can also use RoboFab to build elaborate tools (for instance <strong>MetricsMachine</strong>) that read and write UFO fonts and work on the data. Other RoboFab based tools are under construction.
</p>
<h3>Not entirely RoboFog Compatible</h3>
<p>
We've poured all our experience from writing RoboFog into the RoboFab objects. You will recognise a lot. But the font world has grown a lot more complex since Fontographer 3.5 so RoboFab objects need to deal with a lot more than their RoboFog ancestors. Your RoboFog scripts won't work with RoboFab, sorry. But they're structured quite similarly and you won't have much trouble adapting. We thought about building objects with the RoboFab API for RoboFog, but their functionality depends too much on features that were introduced after Python 1.5.2. It would be too complex. But we've provided an alternative: export scripts for RoboFog to UFO format, so that you can write UFOs for all your RoboFog sources and use them in the new UFO tools.
</p>
<h3>Not entirely Open Source</h3>
<p>
RoboFab comes with the Python sources. By all means dig in and mess with it. But there is a license. RoboFab is free for personal use and development. But RoboFab is not <strong>GPL</strong> or <strong>LGPL</strong>. There are some restrictions on redistributing the code. For instance bundling RoboFab in applications you want to sell or give away. If you have plans for some app, please get in touch and we can discuss a licensing agreement.
</p>
<p class="note">
The license is for <strong>our code, the implementation</strong>. The <strong>UFO file format</strong> as described on the LettError wiki is free and can be implemented by anyone using any language.
</p>
<h2>Where next?</h2>
<p>
First you could <a href="download/licensing.html">download</a> the library and install it. Then you could browse through this documentation and see what the various <a href="objects/index.html">objects</a> are, what they can do etc. You could have a look at <a href="howto/scripting.html">a discussion on scripting</a>.
</p>
</div>
</body>
</html>

View File

@ -1,118 +0,0 @@
<!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>New Page</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">This page is generated by Corbon.</div>
</body>
</html>

View File

@ -1,168 +0,0 @@
<!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>RoboFab Limitations</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<span class="selected">
Fab Limitations
</span>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab Limitations</h1>
<p>
An overview of known problems, bugs and implementation limits. These are issues we are aware of. Some of them are things we have to fix in RoboFab, others are limitations that are just part of the world we have to work in.
</p>
<h2>FontLab</h2>
<p>
Known problems in FontLab 4.6.1
</p>
<h3>flfont.customdata, flglyph.customdata</h3>
<p>
There is a bug in FontLab which caused FontLab to crash shortly after Python has written something in the flfont.customdata or flglyph.customdata fields. RoboFab uses the customdata fields to store the font.lib and glyph.lib. RoboFab is just using the functionality of these fields in FontLab, there's nothing we can do to fix it in RoboFab. The problem has been reported to the FontLab developers.
</p>
<p class="note">FontLab Studio 5 probably has a new attribute for font and glyph objects to store arbitrary Python data. This attribute will replace the customdata attribute. At the time of the 1.1.1 release we have not tested this attribute. We expect a future release to make use of them.
</p>
<h3>Hints</h3>
<p>
Hint data is not exported to UFO format. We're looking into ways to support this. Any hint data can be added to the UFO without much trouble, but experimentation shows disabling stability issues in FontLab itself.
</p>
<h3>Multiple Master</h3>
<p>
RoboFab glyphs do not offer direct access to FontLab's Multiple Master-masters. If you need access to that data, use the <strong>glyph.naked()</strong> method to get to the FontLab glyph object which have access.
</p>
<p class="note">
If you're considering scripting complex interpolation systems, have a look at <a href="http://superpolator.com">Superpolation.</a>
</p>
<h2>UFO format</h2>
<p>
Known problems or limitations in the UFO format, RoboFab version 1.0b1 and 1.0.
</p>
<h3>Export of OT features</h3>
<p>
RoboFab does not automatically export the feature descriptions from FontLab to UFO. The featureLib.py offers some tools to export the feature text to the font.lib and import them from the lib as well, but this needs to be called seperately after reading and before writing the UFO. Or export all features to a seperate .fea file.
</p>
<h3>Macroman encoded XML files from UFO Exporter in RoboFog</h3>
<p>
Not a problem, but just something to be aware of: UFO files exported from the UFO Exporter scripts in <strong>RoboFog</strong> are text files with macroman text encoding. The XML files identify the encoding as such and XML interpreters seem to respect and understand this. UFO files exported written by the UFO writers in RoboFab use UTF-8 as default encoding for the XML text. The macroman export is necessary because encodings are not supported in Python 1.5.2.
</p>
<h2>Objects</h2>
<p>
Known problems with Objects
</p>
<h3>GlypMath on Contour, Segment, Point in FontLab</h3>
<p>
Contour, Segment, Point and BPoint objects in ObjectsFL (the objects you get when you use RoboFab in FontLab) do not have GlypgMath operators. All GlyphMath operations in FontLab are handled by the Glyph object and then quickly deferred to objects from ObjectsRF which do know how to handle GlyphMath operations. This is not necessarily a bug, but an effect of differences between the way RoboFab objects work in FontLab and how they work in plain Python.
</p>
</div>
</body>
</html>

View File

@ -1,2 +0,0 @@
/index.html/1.3/Sat Sep 10 21:16:19 2005//
D

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual/links

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

View File

@ -1,170 +0,0 @@
<!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>RoboFab Links</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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="../objects/index.html">
Fab Objects
</a>
<br />
<a href="../objects/model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<span class="selected">
Links
</span>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="../index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<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-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>RoboFab Links</h1>
<h3>RoboFab</h3>
<p>
<ul>
<li><a href="http://just.letterror.com/ltrwiki/RoboFab">The RoboFab Wiki</a></li>
<li><a href="http://just.letterror.com/ltrwiki/RoboFab_2fFeedBack">RoboFab Wiki for feedback</a></li>
<li><a href="http://www.letterror.com/code/robofab/">The RoboFab section at LettError.com</a></li>
<li><a href="http://www.letterror.com/code/robofab/robofabDocs/robofab.html">PyDoc documentation for RoboFab</a></li>
<li><a href="http://mail.letterror.com/mailman/listinfo/robofab-list">Join the RoboFab mailing list</a></li>
</ul>
</p>
<h3>FontTools</h3>
<p>
<ul>
<li><a href="http://fonttools.sf.net">The FontTools home at sourceforge.net</a></li>
<li><a href="http://www.letterror.com/code/ttx/index.html">The TTX page at LettError.com</a></li>
</ul>
</p>
<h3>Tools</h3>
<p>
<ul>
<li><a href="http://www.typesupply.com">MetricsMachine from TypeSupply:</a> Industrial Strength Metrics for OS X</li>
<li><a href="http://www.superpolator.com">Superpolator.com:</a> infinite interpolation for RoboFab and FontLab</li>
</ul>
</p>
<h3>Python</h3>
<p>
<ul>
<li><a href="../www.python.org">Python</a></li>
<li><a href="http://homepages.cwi.nl/~jack/macpython/download.html">Mac OSX Python</a></li>
</ul>
</p>
<h3>FontLab</h3>
<p>
<ul>
<li><a href="http://www.fontlab.com">The FontLab home page</a></li>
<li><a href="http://www.fontlab.com/Font-utilities/The-Python-Page/">The FontLab Python page</a></li>
<li><a href="http://dev.fontlab.net/flpydoc/">Unofficial FontLab Python documentation</a></li>
</ul>
</p>
</div>
</body>
</html>

View File

@ -1,216 +0,0 @@
<!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>RoboFab</title>
<link href="default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="index.html">
Home
</a>
<br />
<a href="download/license.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="objects/index.html">
Fab Objects
</a>
<br />
<a href="objects/model.html">
Fab Map
</a>
<br />
<a href="tools/index.html">
Fab Tools
</a>
<br />
<a href="ufo/index.html">
UFO Overview
</a>
<br />
<a href="limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="links/index.html">
Links
</a>
<br />
<a href="glossary/index.html">
Glossary
</a>
<br />
<a href="credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to RoboFab Reference</a></p>
<br />
<br />
<p class="menu">
</p>
</div>
<div class="footer">
<a href="feedback.html">
Feedback
</a>
<br />
<span class="selected">
Sitemap
</span>
<br />
Please also refer to the
<a href="download/license.html">
Legal
</a>
<br />
Copyright 2003-2005 RoboFab
<br />
version 1.1.1
</div>
<div class="content">
<h1>Keyword index of this site</h1>
<p>
<h2>accent</h2><p class="crb-keywordindex"><a href="howto/buildingaccents.html">Building accents</a>: use RoboFab to build accented glyphs with components.<br />
</p><h2>agree</h2><p class="crb-keywordindex"><a href="download/_agree.html">I Agree!</a>: agreed.<br />
<a href="download/license.html">RoboFab License Agreement</a>: some legal points.<br />
</p><h2>anchor</h2><p class="crb-keywordindex"><a href="objects/anchor.html">RAnchor</a>: a connection point for Components<br />
</p><h2>component</h2><p class="crb-keywordindex"><a href="howto/buildingaccents.html">Building accents</a>: use RoboFab to build accented glyphs with components.<br />
<a href="objects/contour.html">RContour</a>: belongs to a Glyph, contains Segments<br />
<a href="objects/component.html">RComponent</a>: belongs to a Glyph, refers to other Glyphs<br />
</p><h2>contour</h2><p class="crb-keywordindex"><a href="howto/understandcontours.html">Understanding Contours</a>: how contours, segments and points work.<br />
<a href="howto/usetransformations.html">Using transformations</a>: matrix transformations in RoboFab<br />
<a href="objects/anchor.html">RAnchor</a>: a connection point for Components<br />
<a href="objects/point.html">RPoint</a>: a point on a Contour<br />
<a href="objects/contour.html">RContour</a>: belongs to a Glyph, contains Segments<br />
<a href="objects/segment.html">RSegment</a>: a part of a Contour, a series of severall off and one oncurve Points<br />
<a href="objects/component.html">RComponent</a>: belongs to a Glyph, refers to other Glyphs<br />
<a href="objects/bpoint.html">bPoint</a>: a point on a Contour which behaves like a RoboFog point<br />
</p><h2>font</h2><p class="crb-keywordindex"><a href="howto/generatefonts.html">Generate Fonts</a>: how to generate fonts with RoboFab in FontLab.<br />
<a href="objects/font.html">RFont</a>: contains Glyphs, names, kerning, data<br />
<a href="objects/lib.html">RLib</a>: part of a Font, contains all arbitrary data<br />
</p><h2>fontlab</h2><p class="crb-keywordindex"><a href="howto/fontlabremote.html">FontLab Remote</a>: use AppleEvents to control FontLab in Mac OSX<br />
</p><h2>glossary</h2><p class="crb-keywordindex"><a href="glossary/index.html">Glossary</a>: index of words and terminology.<br />
<a href="glossary/nonelab.html">Glossary: NoneLab</a>: Glossary term<br />
<a href="glossary/glyphmath.html">Glossary: GlyphMath</a>: Glossary term<br />
</p><h2>glyph</h2><p class="crb-keywordindex"><a href="howto/usetransformations.html">Using transformations</a>: matrix transformations in RoboFab<br />
<a href="howto/glyphmath.html">Using Glyph Math</a>: applying math operators on glyph objects.<br />
<a href="objects/contour.html">RContour</a>: belongs to a Glyph, contains Segments<br />
<a href="objects/glyph.html">RGlyph</a>: belongs to a Font, contains contours, components etc.<br />
<a href="objects/pen.html">Pen objects</a>: about Pen objects<br />
<a href="objects/font.html">RFont</a>: contains Glyphs, names, kerning, data<br />
<a href="objects/component.html">RComponent</a>: belongs to a Glyph, refers to other Glyphs<br />
<a href="objects/lib.html">RLib</a>: part of a Font, contains all arbitrary data<br />
</p><h2>glyphmath</h2><p class="crb-keywordindex"><a href="howto/glyphmath.html">Using Glyph Math</a>: applying math operators on glyph objects.<br />
<a href="objects/glyph.html">RGlyph</a>: belongs to a Font, contains contours, components etc.<br />
<a href="glossary/glyphmath.html">Glossary: GlyphMath</a>: Glossary term<br />
</p><h2>help</h2><p class="crb-keywordindex"><a href="glossary/index.html">Glossary</a>: index of words and terminology.<br />
<a href="glossary/nonelab.html">Glossary: NoneLab</a>: Glossary term<br />
</p><h2>howto</h2><p class="crb-keywordindex"><a href="howto/index.html">How To</a>: A couple of cases and examples<br />
<a href="howto/usepens.html">Using Pens</a>: playing with pen objects.<br />
<a href="howto/lowlevel.html">How to get to FontLab stuff</a>: the naked methods and attributes<br />
<a href="howto/world.html">The world module</a>: what on earth is it for?<br />
<a href="howto/generatefonts.html">Generate Fonts</a>: how to generate fonts with RoboFab in FontLab.<br />
<a href="howto/understandcontours.html">Understanding Contours</a>: how contours, segments and points work.<br />
<a href="howto/fontlabremote.html">FontLab Remote</a>: use AppleEvents to control FontLab in Mac OSX<br />
<a href="howto/scripting.html">Scripting</a>: simple examples.<br />
<a href="howto/usethelib.html">Using the lib</a>: make the glyph.lib and font.lib work for you.<br />
<a href="howto/buildingaccents.html">Building accents</a>: use RoboFab to build accented glyphs with components.<br />
</p><h2>howto export ufo font</h2><p class="crb-keywordindex"><a href="howto/makeufo.html">How to make a UFO</a>: export and import UFO's in FontLab<br />
</p><h2>howto glyph ufo export</h2><p class="crb-keywordindex"><a href="howto/glifnames.html">Glyphnames versus GLIF-names</a>: how to use Robofab's glyph naming schemes for UFO export<br />
</p><h2>howto interpolate glyph font</h2><p class="crb-keywordindex"><a href="howto/interpolate.html">How to interpolate</a>: how to do interpolation with RoboFab objects.<br />
</p><h2>info</h2><p class="crb-keywordindex"><a href="objects/info.html">RInfo</a>: part of a Font, contains all names, dimensions<br />
<a href="objects/info.html">RInfo</a>: part of a Font, contains all names, dimensions<br />
<a href="objects/font.html">RFont</a>: contains Glyphs, names, kerning, data<br />
</p><h2>install</h2><p class="crb-keywordindex"><a href="download/index.html">Download</a>: Download RoboFab installers<br />
<a href="download/license.html">RoboFab License Agreement</a>: some legal points.<br />
</p><h2>interpolate</h2><p class="crb-keywordindex"><a href="howto/index.html">How To</a>: A couple of cases and examples<br />
<a href="howto/lowlevel.html">How to get to FontLab stuff</a>: the naked methods and attributes<br />
</p><h2>kerning</h2><p class="crb-keywordindex"><a href="objects/kerning.html">RKerning</a>: part of a Font, contains all kerning data<br />
<a href="objects/font.html">RFont</a>: contains Glyphs, names, kerning, data<br />
</p><h2>legal</h2><p class="crb-keywordindex"><a href="download/index.html">Download</a>: Download RoboFab installers<br />
<a href="download/license.html">RoboFab License Agreement</a>: some legal points.<br />
</p><h2>lib</h2><p class="crb-keywordindex"><a href="howto/fontlabremote.html">FontLab Remote</a>: use AppleEvents to control FontLab in Mac OSX<br />
<a href="howto/usethelib.html">Using the lib</a>: make the glyph.lib and font.lib work for you.<br />
<a href="objects/lib.html">RLib</a>: part of a Font, contains all arbitrary data<br />
</p><h2>license</h2><p class="crb-keywordindex"><a href="download/index.html">Download</a>: Download RoboFab installers<br />
<a href="download/license.html">RoboFab License Agreement</a>: some legal points.<br />
</p><h2>matrix</h2><p class="crb-keywordindex"><a href="howto/usetransformations.html">Using transformations</a>: matrix transformations in RoboFab<br />
</p><h2>metrics</h2><p class="crb-keywordindex"><a href="objects/kerning.html">RKerning</a>: part of a Font, contains all kerning data<br />
</p><h2>names</h2><p class="crb-keywordindex"><a href="objects/info.html">RInfo</a>: part of a Font, contains all names, dimensions<br />
</p><h2>objects</h2><p class="crb-keywordindex"><a href="objects/anchor.html">RAnchor</a>: a connection point for Components<br />
<a href="objects/index.html">Objects</a>: Overview of the objects, their methods and attributes<br />
<a href="objects/point.html">RPoint</a>: a point on a Contour<br />
<a href="objects/model.html">Object model</a>: a map of the structure.<br />
<a href="objects/info.html">RInfo</a>: part of a Font, contains all names, dimensions<br />
<a href="objects/contour.html">RContour</a>: belongs to a Glyph, contains Segments<br />
<a href="objects/segment.html">RSegment</a>: a part of a Contour, a series of severall off and one oncurve Points<br />
<a href="objects/glyph.html">RGlyph</a>: belongs to a Font, contains contours, components etc.<br />
<a href="objects/pen.html">Pen objects</a>: about Pen objects<br />
<a href="objects/kerning.html">RKerning</a>: part of a Font, contains all kerning data<br />
<a href="objects/font.html">RFont</a>: contains Glyphs, names, kerning, data<br />
<a href="objects/component.html">RComponent</a>: belongs to a Glyph, refers to other Glyphs<br />
<a href="objects/lib.html">RLib</a>: part of a Font, contains all arbitrary data<br />
<a href="objects/bpoint.html">bPoint</a>: a point on a Contour which behaves like a RoboFog point<br />
</p><h2>pens</h2><p class="crb-keywordindex"><a href="howto/usepens.html">Using Pens</a>: playing with pen objects.<br />
<a href="objects/pen.html">Pen objects</a>: about Pen objects<br />
</p><h2>point</h2><p class="crb-keywordindex"><a href="howto/understandcontours.html">Understanding Contours</a>: how contours, segments and points work.<br />
<a href="howto/usetransformations.html">Using transformations</a>: matrix transformations in RoboFab<br />
<a href="objects/point.html">RPoint</a>: a point on a Contour<br />
</p><h2>scripting</h2><p class="crb-keywordindex"><a href="howto/scripting.html">Scripting</a>: simple examples.<br />
</p><h2>segment</h2><p class="crb-keywordindex"><a href="howto/understandcontours.html">Understanding Contours</a>: how contours, segments and points work.<br />
<a href="objects/segment.html">RSegment</a>: a part of a Contour, a series of severall off and one oncurve Points<br />
<a href="objects/bpoint.html">bPoint</a>: a point on a Contour which behaves like a RoboFog point<br />
</p><h2>transform</h2><p class="crb-keywordindex"><a href="howto/usetransformations.html">Using transformations</a>: matrix transformations in RoboFab<br />
</p><h2>world</h2><p class="crb-keywordindex"><a href="howto/world.html">The world module</a>: what on earth is it for?<br />
</p>
</p>
</div>
</body>
</html>

View File

@ -1,33 +0,0 @@
/anchor.html/1.4/Mon Sep 12 21:59:48 2005//
/anchor.jpg/1.1/Sun Feb 6 19:43:30 2005//
/bpoint.html/1.4/Mon Sep 12 21:59:48 2005//
/component.html/1.4/Mon Sep 12 21:59:48 2005//
/component.jpg/1.1/Sun Feb 6 19:43:30 2005//
/contour.html/1.4/Mon Sep 12 21:59:48 2005//
/contour.jpg/1.1/Sun Feb 6 19:43:30 2005//
/contours.jpg/1.1/Sun Feb 6 19:43:30 2005//
/contours_bpoints.jpg/1.1/Sun Feb 6 19:43:30 2005//
/contours_points.jpg/1.1/Sun Feb 6 19:43:30 2005//
/contours_segments.jpg/1.1/Sun Feb 6 19:43:30 2005//
/contours_segments_points.jpg/1.1/Sun Feb 6 19:43:30 2005//
/font.html/1.5/Mon Sep 12 21:59:48 2005//
/font.jpg/1.1/Sun Feb 6 19:43:30 2005//
/generic.html/1.2/Sat Sep 10 21:16:20 2005//
/glyph.html/1.5/Mon Sep 12 21:59:48 2005//
/glyph.jpg/1.1/Sun Feb 6 19:43:30 2005//
/glyphlib.jpg/1.1/Sun Feb 6 19:43:30 2005//
/index.html/1.5/Mon Sep 12 21:59:48 2005//
/info.html/1.4/Mon Sep 12 21:59:48 2005//
/info.jpg/1.1/Sun Feb 6 19:43:30 2005//
/kerning.html/1.4/Mon Sep 12 21:59:48 2005//
/kerning.jpg/1.1/Sun Feb 6 19:43:30 2005//
/lib.html/1.5/Mon Sep 12 21:59:48 2005//
/lib.jpg/1.1/Sun Feb 6 19:43:31 2005//
/model.html/1.4/Mon Sep 12 21:59:48 2005//
/objectModel.jpg/1.1/Sun Feb 6 19:43:31 2005//
/pen.html/1.4/Mon Sep 12 21:59:48 2005//
/point.html/1.4/Mon Sep 12 21:59:48 2005//
/point.jpg/1.1/Sun Feb 6 19:43:31 2005//
/segment.html/1.4/Mon Sep 12 21:59:48 2005//
/segment.jpg/1.1/Sun Feb 6 19:43:31 2005//
D

View File

@ -1 +0,0 @@
projects/robofab/Documentation/robofabManual/manual/objects

View File

@ -1 +0,0 @@
:pserver:Erik@letterror.xs4all.nl:/Library/cvsroot

View File

@ -1,193 +0,0 @@
<!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>RoboFab Objects: Anchor</title>
<link href="../default.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="modellogo">
<img src="../img/drawmodel_header.jpg" width="595" height="112" />
</div>
<div class="leftcontent">
<h2 class="crb-seealso">
RoboFab
</h2>
<p class="menu">
<a href="../index.html">
Home
</a>
<br />
<a href="../download/license.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">
Fab Objects
</a>
<br />
<a href="model.html">
Fab Map
</a>
<br />
<a href="../tools/index.html">
Fab Tools
</a>
<br />
<a href="../ufo/index.html">
UFO Overview
</a>
<br />
<a href="../limitations.html">
Fab Limitations
</a>
</p>
<p class="menu">
<a href="../links/index.html">
Links
</a>
<br />
<a href="../glossary/index.html">
Glossary
</a>
<br />
<a href="../credits.html">
Credits
</a>
</p>
<br />
<br />
<p class="crb-uplink"><a href="index.html">Back to Objects</a></p>
<br />
<br />
<p class="menu">
<a href="../howto/understandcontours.html">Understanding Contours</a><br />
<a href="../howto/usetransformations.html">Using transformations</a><br />
<a href="bpoint.html">bPoint</a><br />
<a href="component.html">RComponent</a><br />
<a href="contour.html">RContour</a><br />
<a href="font.html">RFont</a><br />
<a href="glyph.html">RGlyph</a><br />
<a href="index.html">Objects</a><br />
<a href="info.html">RInfo</a><br />
<a href="kerning.html">RKerning</a><br />
<a href="lib.html">RLib</a><br />
<a href="model.html">Object model</a><br />
<a href="pen.html">Pen objects</a><br />
<a href="point.html">RPoint</a><br />
<a href="segment.html">RSegment</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-2005 RoboFab
<br />
version 1.1.1
</div>
<div id="titlepic">
<img src="../img/offdrawmodel_20.gif" alt="" border="0" />
</div>
<div class="content">
<h1>RoboFab Anchor</h1>
<h3>Usage</h3>
<pre>f = CurrentFont()
for c in f:
if len(c.anchors) > 0:
print c, c.anchors
>>> < RGlyph for RoboFab Demo Font.A >
[ < RAnchor for RoboFab Demo Font.A.anchors[0] >]
</pre>
<h3>Description</h3>
<p>
Anchors are single points in a glyph which are not part of a contour. Anchors have a name and a position, and they're used as connection points for <a href="component.html">Components</a>. In FontLab the anchors have a special appearance and can be edited. Anchors are stored in GLIF as single, named, moveto's. i.e. any single, named moveto in GLIF will become an anchor in FontLab. RoboFab's own font.generateGlyph() also uses the anchors to assemble the components.
</p>
<h3>Attributes</h3>
<ul>
<li><strong>index</strong>: the index of the anchor. (read only)</li>
<li><strong>position</strong>: the position of the anchor (x, y)</li>
<li><strong>x</strong>: the x position of the anchor.</li>
<li><strong>y</strong>: the y position of the anchor.</li>
<li><strong>name</strong>: the name of the anchor.</li>
</ul>
<h3>Attribute examples</h3>
<pre>c = CurrentGlyph()
if len(c.anchors) > 0:
for a in c.anchors:
print a.position </pre>
<h3>Methods</h3>
<p>
<ul>
<li><strong>copy()</strong>: return a deepcopy of the object.</li>
<li><strong>move((x, y))</strong>: move the anchor of the bPoint to (x,y). The relative coordinates of the bcpIn and bcpOut will remain the same, which means that in fact, they move the same distance.</li>
<li><strong>scale((x, y), center=(0, 0))</strong>: scale&nbsp;the&nbsp;anchor.</li> <li><strong>round()</strong>: round the coordinates to whole integers.</li>
<li><strong>draw(aPen)</strong>: draw the object with a RoboFab segment pen.</li>
<li><strong>drawPoints(aPen)</strong>: draw the object with a point pen. See <a href="../howto/usepens.html">how to use pens.</a></li>
<li><strong>transform(matrix)</strong>: Transform this point. Use a
Transform matrix
object to mess with the point. <a href="../howto/usetransformations.html">See how to use transformations</a>.</li>
</ul>
</p>
<h3>Method examples</h3>
<pre>#method examples
</pre>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More