[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Frunge] Metaſpline
From: |
Martin Roppelt |
Subject: |
[Frunge] Metaſpline |
Date: |
Thu, 11 Jun 2009 03:08:47 +0200 |
User-agent: |
Thunderbird 2.0.0.21 (X11/20090319) |
Wie bereits angekündigt, werde ich etwas über meine Metaſchriftſprache
ſchreiben: Sie iſt weniger mächtig als MetaFont/mf2ps1 aber auch
parametriſierbar und kann Makros definieren. Für mich bietet ſich dieſer
Anſatz geradezu an, da ich das Zeichnen von Outlines mit Fontforge als
ſehr anſstrengend empfinde. Zudem iſt es damit einfacher z. B. einen
Parameter zu ändern und der ganze Font verändert ſich mit. Außerdem
planen wir ja eine normale und eine Zierſchrift anzubieten (in einer
Schrift mittels OpenTypes ſtylistic ſets (ſalt)
(\addfontfeature{Variant=01} etc.). Zuſätzlich bieten ſich noch weitere
Varianten an. Siehe auch angehängte Dateien:
Sie sind ſtrikt getrennt: meta.ms enthält die Definition der
Fontparameter und der Styliſtiſchen Alternativen. In weiteren Dateien
ſind dann die Anweiſungen für die jeweiligen Buchſtaben zu finden.
Ich glaube aber wir ſollten beſſer MetaFont benutzen (mit
mf2ps1-Umwandlung). Das iſt etabliert und mächtiger. Für Metaſpline
(oder beſſer: Metaſpleen?) müſſte ich erſt einen Prozeſſor ſchreiben,
der aber ziemlich ſimpel wäre, da die Sprache nicht deklarativ iſt und
ſich eng an das sfd-Format anlehnt. Eigentlich müſſte man ſie ja Spline
Aſſembler nennen, denn ſo ſieht ſie jedenfalls aus. :>
Ich werde, wenn ich, wie versprochen, die Verbindungsserifen entfernt
habe, die Mixtura hochladen, damit wir Kerning, (Hinting, für mf2ps1
noch zu früh?), und OpenType-Features implementieren können.
/* first block gives standard values
@ is the spline data replacer */
#Blocks are delimited by blank lines
MetaSplineFont
Flags: W
LayerCount: 2
Fore
SplineSet
@
EndSplineSet
EndChar
Variants:
#the numbers are bit positions for easier access within salt tables and build
#the glyph name: n.v42 (decimal)
b 0 #begin: upper serif / ornament
m 1 #middle: connecting serifs (textualis)
e 2 #end: lower serif / ornament
s 3 #serif: ascender / descender serif
#h 4 #half: half serifs
#d 5 #down: shifted serifs
#t 6 #dot: dotted serifs
#biting: not defined here, it's done by kerning (or more generally: ligatures /
substitution)
Alternates: alt
#those are also accessed by salt, but named differently: k.alt.v01
#font specification
#Ï: Ï #for angle definitions (shall be implemented)
Φ: 1+â5
Φ: Φ:2
#Φ: (1+â5):2 #goldener Schnitt
stem: 200
ylead: 3serif #300
xlead: stem #200
serif: stem:2 #100
offset: stem:2 #100
asc: x+ylead+serif #1300
dsc: -ylead-serif #-400
x: 2ylead+3serif #900
#stem=xlead=2serif=2offset=3:2ylead: 200 #=200
#â¦
/* #angles in percent
featherangle: 1:1 #x:y
stemangle: 0
serifangle: 1
yserif: serifangleâserif?
ystem: featherangleâstem */
/* Macro block:
Spline(var1 var2 â¦): #or:
Spline(n): #requires n parameters
Commands
Spline(v)
selects (v): selector
i. e. (v): is only applied if v is listed
applies v: application
i. e. v: is only applied if v is set
*/
/*
All moves are relative!
x y #soft move (return to saved origin after drawing)
x y #draw a line (indentation!)
x y ! #hard move (move origin)
The last origin defines the advance width (and is the origin for the next char).
If-construct:
condition: command
Indentations can be defined in the same line if it is a movement, for example.
*/
#single strokes
#ascender single stroke
asgl(s e):
sglm
strm(asc)
s: asrf
e: lsrf
offm
#x-height single stroke
xsgl(b e):
sglm
strm(x)
b: usrf
e: lsrf
offm
#descender single stroke
dsgl(b s):
sglm
0 dsc
strm(-dsc)
b: usrf
s: dsrf
offm
#g / y single stroke
gysgl(b e):
b: usrf
0 dsc+serif+stem+xlead
strm(2ylead+serif)
e: lsrf
#j / z single stroke
jzsgl(b e):
â¦
#round halfs
#x-height round half
xhlf(1):
(b): 0 0
(e): 0 serif+ylead
strm(ylead+2serif)
(b): 0 0
(b): srfm (2stem+xlead)
(e): usrf
b: usrf
e: lsrf
stem 0 !
#serifs
#ascender serif
asrf:
-100 asc-stem-xlead-serif
srfm
#upper serif
usrf:
-100 x-stem-xlead-serif
srfm
#middle serif
msrf:
0 2âserif
srfm
#lower serif
lsrf:
0 0
srfm
#descender serif
dsrf:
0 dsc
srfm
#dots
#dot over x-height
xdot:
0 x+stem
strm(stem)
#dot serifs
#â¦
#moves
#single stroke move
sglm:
offset 0 !
#stroke move
strm(n):
0 n
stem stem
0 -n
#offset move
offm:
stem+xlead-offset 0 !
#serif move
srfm:
oblm(stem+xlead)
#oblique move
oblm(n):
0 serif
n n
0 -serif
#back move
bckm(n):
stem stem
n -n
-stem -stem
#dot serif move
dtsm:
bckm(stem)
a(b e):
xhlf(b)
xsgl(1 e)
b(b e):
asgl(b 1)
xhlf(e)
c(b e):
xhlf(b)
usrf
e: lsrf
stem-serif:2 0 !
d(b s e):
xhlf(b)
uxsrf
asgl(s e)
e(b e):
msrf
xhlf(b)
usrf
e: lsrf
0 3serif+ylead
sglm(3serif)
stem:2 0 !
f:
xsgl
â¦
g(b !e):
dsrf
xhlf(b)
gysgl(e)
h(s m e):
asgl(s m)
xsgl(1 e)
i:
xdot
xsgl(b e)
j(b e):
xdot
jzsgl(b e)
k(s alt):
asgl(s 1)
?
l:
asgl(b e)
m(b m e):
xsgl(b m)
xsgl(1 m)
xsgl(1 e)
n:
xsgl(b m)
xsgl(1 e)
o:
xhlf(b)
xhlf(e)
-50 0 !
p(b s e):
dsgl(b s)
lsrf
xhlf(e)
q:
xhlf(b)
?
?
r(b e):
xsgl(b)
usrf
?
longs Å¿:
(f)?
â¦
s(b e):
msrf
xhlf(b)
usrf
e: lsrf
â¦
t(b e):
asgl(b e)
â¦
u(b m e):
xsgl(b 1)
xsgl(m e)
v(b e):
xsgl(b 1)
xhlf(e)
w(b m e):
xsgl(b m)
xsgl(1 1)
xhlf(e)
x(b e):
msrf
xsgl(b 0)
xsgl(0 e)
y(b m !e):
dsrf
xsgl(b 1)
gysgl(m e)
z(b !e):
-xlead 0
srfm
jzsgl(b e)
- [Frunge] Metaſpline,
Martin Roppelt <=