Fraction Fever 2
A while back I described an idea for a different approach to implementing a fraction feature. Since then, I have gotten feedback from Karsten Luecke and others, the algorithm has been improved and a large number of fonts have been released that use this implementation. The revised code is below. It now handles things like 2009/10/01, 1/22/333/4444/55555/666666/7777777 and so on. I haven’t modified this in a few months so I consider it “stable.” As before, feel free to use this if you want to, but do so at your own risk, it is provided “AS IS”, my company, Type Supply, and I are not liable for anything, etc., etc. etc.
The revised code:
@figures = [
zero
one
two
three
four
five
six
seven
eight
nine
];
@numerators = [
zero.numerator
one.numerator
two.numerator
three.numerator
four.numerator
five.numerator
six.numerator
seven.numerator
eight.numerator
nine.numerator
];
@denominators = [
zero.denominator
one.denominator
two.denominator
three.denominator
four.denominator
five.denominator
six.denominator
seven.denominator
eight.denominator
nine.denominator
];
feature frac {
lookup FractionBar {
ignore sub slash
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
@figures
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
@figures
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
@figures
slash;
ignore sub slash
@figures
@figures
slash';
ignore sub slash'
@figures
@figures
slash;
ignore sub slash
@figures
slash';
ignore sub slash'
@figures
slash;
sub @figures slash' @figures by fraction;
} FractionBar;
lookup Numerator1 {
sub @figures'
fraction by @numerators;
} Numerator1;
lookup Numerator2 {
sub @figures'
@numerators
fraction by @numerators;
} Numerator2;
lookup Numerator3 {
sub @figures'
@numerators
@numerators
fraction by @numerators;
} Numerator3;
lookup Numerator4 {
sub @figures'
@numerators
@numerators
@numerators
fraction by @numerators;
} Numerator4;
lookup Numerator5 {
sub @figures'
@numerators
@numerators
@numerators
@numerators
fraction by @numerators;
} Numerator5;
lookup Numerator6 {
sub @figures'
@numerators
@numerators
@numerators
@numerators
@numerators
fraction by @numerators;
} Numerator6;
lookup Numerator7 {
sub @figures'
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
fraction by @numerators;
} Numerator7;
lookup Numerator8 {
sub @figures'
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
fraction by @numerators;
} Numerator8;
lookup Numerator9 {
sub @figures'
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
fraction by @numerators;
} Numerator9;
lookup Numerator10 {
sub @figures'
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
@numerators
fraction by @numerators;
} Numerator10;
lookup Denominator {
sub [fraction @denominators]
@figures' by @denominators;
} Denominator;
sub @figures space' @numerators by thinspace;
} frac;
PS: No, I don’t always break lines like this in my feature code. I did it to fit the column width here. Remove the unnecessary line breaks if you want to.





















