Commit b56d36d6 authored by Santhosh Thottingal's avatar Santhosh Thottingal

Rewrite Rachana OT lookups outside SFD

* This fixes several bugs on Rachana and Rachana bold
* Added onum variants to Rachana bold
* Added rh_half and dotreph to Rachana bold
* From Rachana, removed glyhs like 'sple' which was added as workaround for bugs
* Rachana and Rachana bold use same lookups now. Removed the lookups from Rachana
  and Rachana Bold SFD
parent 4f9d9a3e
......@@ -2,14 +2,16 @@
fontpath=/usr/share/fonts/truetype/malayalam
fonts=Rachana Rachana-Bold
feature=features/features.fea
PY=python2.7
buildscript=tools/build.py
default: compile
all: compile webfonts
compile:
@for font in `echo ${fonts}`;do \
echo "Generating $${font}.ttf";\
fontforge -lang=ff -c "Open('$${font}.sfd'); Generate('$${font}.ttf')";\
echo "Generating $$font.ttf";\
$(PY) $(buildscript) $$font.sfd $(feature);\
done;
webfonts:compile
......@@ -24,3 +26,10 @@ install: compile
@for font in `echo ${fonts}`;do \
install -D -m 0644 $${font}.ttf ${DESTDIR}/${fontpath}/$${font}.ttf;\
done;
test: compile
# Test the fonts
@for font in `echo ${fonts}`; do \
echo "Testing font $${font}";\
hb-view $${font}.ttf --text-file tests/tests.txt --output-file tests/$${font}.pdf;\
done;
This diff is collapsed.
This diff is collapsed.
languagesystem DFLT dflt;
languagesystem latn dflt;
languagesystem mlm2 dflt;
languagesystem mlym dflt;
include (tables.fea)
include (lookups.fea)
# -------------------
# BASIC SHAPING FORMS
# -------------------
feature pref {
script mlm2;
language dflt ;
lookup pref_reph;
} pref;
# Akhand Ligatures
# ----------------
feature akhn {
script mlm2;
language dflt ;
lookup akhn_chillu;
lookup akhn_conjuncts;
lookup akhn_conditional_stacking;
script mlym;
language dflt ;
lookup akhn_chillu;
lookup akhn_conjuncts;
lookup akhn_conditional_stacking;
} akhn;
feature blwf {
script mlm2;
language dflt ;
lookup blwf_la_sign;
script mlym;
language dflt ;
lookup blwf_la_sign_mlym;
} blwf;
feature half {
script mlym;
language dflt ;
lookup half_forms_mlym;
} half;
feature pstf {
script mlm2;
language dflt ;
lookup pstf_cons_signs;
script mlym;
language dflt ;
lookup pstf_cons_signs_mlym;
} pstf;
feature pres {
script mlm2;
language dflt ;
lookup pres_reph;
script mlym;
language dflt ;
lookup pres_reph_mlym;
} pres;
feature blws {
script mlm2;
language dflt ;
lookup blws_la_signs;
lookup blws_la_sign_excludes;
script mlym;
language dflt ;
lookup blws_la_signs;
lookup blws_la_sign_excludes;
} blws;
feature psts {
script mlm2;
language dflt ;
lookup psts_vowel_signs;
script mlym;
language dflt ;
lookup psts_vowel_signs;
} psts;
feature haln {
script mlym;
language dflt ;
lookup haln_chillu;
} haln;
# GPOS
feature abvm {
script DFLT;
language dflt ;
lookup abvm_dotreph;
script mlm2;
language dflt ;
lookup abvm_dotreph;
} abvm;
feature onum {
script DFLT;
language dflt ;
lookup onum_oldnumbers;
script latn;
language dflt ;
lookup onum_oldnumbers;
script mlm2;
language dflt ;
lookup onum_oldnumbers;
script mlym;
language dflt ;
lookup onum_oldnumbers;
} onum;
This diff is collapsed.
#Mark attachment classes (defined in GDEF, used in lookupflags)
@GDEF_Simple = [.notdef .null nonmarkingreturn CR space exclam quotedbl
numbersign dollar percent ampersand quotesingle parenleft parenright
asterisk plus comma hyphen period slash zero one two three four five
six seven eight nine colon semicolon less equal greater question at A B
C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash
bracketright asciicircum underscore grave a b c d e f g h i j k l m n o
p q r s t u v w x y z braceleft bar braceright asciitilde anusvara
visarga ml_a ml_aa ml_i ml_ii ml_u ml_uu ml_r ml_l ml_e ml_ee ml_ai
ml_o ml_oo ml_au k1 k2 k3 k4 ng ch1 ch2 ch3 ch4 nj t1 t2 t3 t4 nh th1
th2 th3 th4 n1 p1 p2 p3 p4 m1 y1 r3 rh l3 lh zh v1 z1 sh s1 h1 avagraha
a2 i1 i2 u1 u2 r1 e1 e2 ai1 o1 o2 au1 au2 ml_rr ml_ll ml_0 ml_1 ml_2
ml_3 ml_4 ml_5 ml_6 ml_7 ml_8 ml_9 ZWNJ ZWJ uni25CC NULL rupee datemark
ml_1000 l2 l1 n2 r2 ml_100 ml_10 ml_quarter ml_half ml_3quarter rh_half
singlequoteleft singlequoteright doublequoteleft doublequoteright
endash emdash bullet zero.old one.old two.old three.old four.old
five.old six.old seven.old eight.old nine.old dagger section ];
@GDEF_Ligature = [r4 y2 y2u1 y2u2 v2 nhcil n1cil r3cil l3cil lhcil k1cil
k1u1 k1u2 k1r1 k1r2 k1l1 k1k1 k1k1u1 k1k1u2 k1k1r1 k1k1r3 k1k1r3u1
k1k1r3u2 k1t1 k1t1u1 k1t1u2 k1t1r3 k1t1r3u1 k1t1r3u2 k1nh k1nhu1 k1nhu2
k1th1 k1th1u1 k1th1u2 k1th1r1 k1th1r2 k1th1r3 k1th1r3u1 k1th1r3u2 k1n1
k1n1u1 k1n1u2 k1m1 k1m1u1 k1m1u2 k1r3 k1r3u1 k1r3u2 k1l3 k1l3u1 k1l3u2
k1sh k1shu1 k1shu2 k1shr1 k1shnh k1shnhu1 k1shnhu2 k1shm1 k1shm1u1
k1shm1u2 k1shm1r1 k1s1 k1s1u1 k1s1u2 k1s1r1 k1rhrh k1rhrhu1 k1rhrhu2
k2u1 k2u2 k2r1 k3u1 k3u2 k3r1 k3r2 k3k3 k3k3u1 k3k3u2 k3k3r1 k3k4
k3k4u1 k3k4u2 k3k4r1 k3th3 k3th3u1 k3th3u2 k3th3r1 k3th3th4 k3th3th4u1
k3th3th4u2 k3th3th4r1 k3th3th4r3 k3th3th4r3u1 k3th3th4r3u2 k3n1 k3n1u1
k3n1u2 k3m1 k3m1u1 k3m1u2 k3r3 k3r3u1 k3r3u2 k3l3 k3l3u1 k3l3u2 k4u1
k4u2 k4r1 k4r2 k4n1 k4n1u1 k4n1u2 k4r3 k4r3u1 k4r3u2 ngu1 ngu2 ngk1
ngk1u1 ngk1u2 ngk1r1 ngng ngngu1 ngngu2 ch1u1 ch1u2 ch1ch1 ch1ch1u1
ch1ch1u2 ch1ch2 ch1ch2u1 ch1ch2u2 ch1ch2r1 ch1ch2r3 ch1ch2r3u1
ch1ch2r3u2 ch2u1 ch2u2 ch2r1 ch2r3 ch2r3u1 ch2r3u2 ch3u1 ch3u2 ch3r1
ch3r2 ch3ch3 ch3ch3u1 ch3ch3u2 ch3ch3r1 ch3nj ch3nju1 ch3nju2 ch3r3
ch3r3u1 ch3r3u2 ch4u1 ch4u2 ch4r1 ch4r2 ch4r3 ch4r3u1 ch4r3u2 nju1 nju2
njch1 njch1u1 njch1u2 njch1r1 njch2 njch2u1 njch2u2 njch2r1 njch3
njch3u1 njch3u2 njnj njnju1 njnju2 t1u1 t1u2 t1r1 t1r2 t1t1 t1t1u1
t1t1u2 t1r3 t1r3u1 t1r3u2 t2u1 t2u2 t3u1 t3u2 t3r1 t3t3 t3t3u1 t3t3u2
t3t4 t3t4u1 t3t4u2 t3m1 t3m1u1 t3m1u2 t3m1r1 t3r3 t3r3u1 t3r3u2 t4u1
t4u2 t4r1 t4r3 t4r3u1 t4r3u2 nhu1 nhu2 nht1 nht1u1 nht1u2 nht1r3
nht1r3u1 nht1r3u2 nht2 nht3 nht3u1 nht3u2 nht3r1 nht3r3 nht3r3u1
nht3r3u2 nht4 nht4u1 nht4u2 nht4r1 nhnh nhnhu1 nhnhu2 nhm1 nhm1u1
nhm1u2 th1u1 th1u2 th1r1 th1r2 th1th1 th1th1u1 th1th1u2 th1th1r1
th1th1r2 th1th1r3 th1th1r3u1 th1th1r3u2 th1th2 th1th2u1 th1th2u2
th1th2r1 th1n1 th1p4 th1p4u1 th1p4u2 th1p4r1 th1m1 th1m1u1 th1m1u2
th1m1r1 th1r3 th1r3u1 th1r3u2 th1l3 th1l3u1 th1l3u2 th1s1 th1s1u1
th1s1u2 th1s1r1 th1s1r2 th1s1th2 th1s1th2u1 th1s1th2u2 th1s1th2r1
th1s1n1 th1s1n1u1 th1s1n1u2 th1s1m1 th1s1m1u1 th1s1m1u2 th1s1m1r1
th1s1r3 th1s1r3u1 th1s1r3u2 th2u1 th2u2 th2n1 th2n1u1 th2n1u2 th2m1
th2m1u1 th2m1u2 th2m1r1 th3u1 th3u2 th3r1 th3r2 th3th3 th3th3u1
th3th3u2 th3th3r1 th3th3r2 th3th4 th3th4u1 th3th4u2 th3th4r1 th3th4r2
th3th4n1 th3th4n1u1 th3th4n1u2 th3th4m1 th3th4m1u1 th3th4m1u2
th3th4m1r1 th3th4r3 th3th4r3u1 th3th4r3u2 th3r3 th3r3u1 th3r3u2 th4u1
th4u2 th4r1 th4r2 th4n1 th4n1u1 th4n1u2 th4m1 th4m1u1 th4m1u2 th4m1r1
th4r3 th4r3u1 th4r3u2 n1u1 n1u2 n1r1 n1r2 n1th1 n1th1u1 n1th1u2 n1th1r1
n1th1r2 n1th1r3 n1th1r3u1 n1th1r3u2 n1th2 n1th2u1 n1th2u2 n1th2r1
n1th2r2 n1th3 n1th3u1 n1th3u2 n1th3r1 n1th3r3 n1th3r3u1 n1th3r3u2 n1th4
n1th4u1 n1th4u2 n1th4r1 n1th4r3 n1th4r3u1 n1th4r3u2 n1n1 n1n1u1 n1n1u2
n1n1r1 n1n1r3 n1n1r3u1 n1n1r3u2 n1m1 n1m1u1 n1m1u2 n1m1r1 n1m1r3
n1m1r3u1 n1m1r3u2 n1r3 n1r3u1 n1r3u2 n1rh n1rhu1 n1rhu2 p1u1 p1u2 p1r1
p1r2 p1t1 p1t1u1 p1t1u2 p1th1 p1th1u1 p1th1u2 p1th1r1 p1th1r2 p1n1
p1n1u1 p1n1u2 p1p1 p1p1u1 p1p1u2 p1p1r1 p1p2 p1p2u1 p1p2u2 p1r3 p1r3u1
p1r3u2 p1l3 p1l3u1 p1l3u2 p1s1 p1s1u1 p1s1u2 p1s1r1 p1s1r3 p1s1r3u1
p1s1r3u2 p2u1 p2u2 p2k1 p2k1u1 p2k1u2 p2t1 p2t1u1 p2t1u2 p2th1 p2th1u1
p2th1u2 p2th1r1 p2n1 p2n1u1 p2n1u2 p2p1 p2p1u1 p2p1u2 p2m1 p2m1u1
p2m1u2 p2r3 p2r3u1 p2r3u2 p2l3 p2l3u1 p2l3u2 p2s1 p2s1u1 p2s1u2 p2s1r1
p2rhrh p2rhrhu1 p2rhrhu2 p3u1 p3u2 p3r1 p3k3 p3k3u1 p3k3u2 p3k3r1 p3ch3
p3ch3u1 p3ch3u2 p3ch3r1 p3th3 p3th3u1 p3th3u2 p3th3r1 p3th4 p3th4u1
p3th4u2 p3th4r1 p3th4r2 p3n1 p3n1u1 p3n1u2 p3p3 p3p3u1 p3p3u2 p3p4 p3r3
p3r3u1 p3r3u2 p3l3 p3l3u1 p3l3u2 p4u1 p4u2 p4r1 p4r2 p4r3 p4r3u1 p4r3u2
m1u1 m1u2 m1r1 m1r2 m1n1 m1n1u1 m1n1u2 m1p1 m1p1u1 m1p1u2 m1p1r1 m1p1r3
m1p1r3u1 m1p1r3u2 m1m1 m1m1u1 m1m1u2 m1m1r1 m1r3 m1r3u1 m1r3u2 m1l3
m1l3u1 m1l3u2 y1u1 y1u2 y1r1 y1k1 y1k1u1 y1k1u2 y1k1r1 y1k1k1 y1k1k1u1
y1k1k1u2 y1ch1 y1ch1u1 y1ch1u2 y1th1 y1th1u1 y1th1u2 y1th1r1 y1th1th1
y1th1th1u1 y1th1th1u2 y1th1th1r1 y1n1 y1n1u1 y1n1u2 y1p1 y1p1u1 y1p1u2
y1p1r1 y1m1 y1m1u1 y1m1u2 y1m1r1 y1y1 y1y1u1 y1y1u2 r3u1 r3u2 r3r1 l3u1
l3u2 l3r1 l3k1 l3k1u1 l3k1u2 l3k1r1 l3k1k1 l3k1k1u1 l3k1k1u2 l3k3
l3k3u1 l3k3u2 l3k3r1 l3ch1 l3ch1u1 l3ch1u2 l3th1 l3th1u1 l3th1u2
l3th1r1 l3th1th1 l3th1th1u1 l3th1th1u2 l3p1 l3p1u1 l3p1u2 l3p1r3
l3p1r3u1 l3p1r3u2 l3p2 l3p2u1 l3p2u2 l3p3 l3p3u1 l3p3u2 l3m1 l3m1u1
l3m1u2 l3l3 l3l3u1 l3l3u2 v1u1 v1u2 v1r1 v1r3 v1r3u1 v1r3u2 v1l3 v1l3u1
v1l3u2 v1v1 v1v1u1 v1v1u2 z1u1 z1u2 z1r1 z1ch1 z1ch1u1 z1ch1u2 z1ch1r1
z1ch2 z1ch2u1 z1ch2u2 z1ch2r1 z1n1 z1n1u1 z1n1u2 z1m1 z1m1u1 z1m1u2
z1m1r1 z1r3 z1r3u1 z1r3u2 z1l3 z1l3u1 z1l3u2 z1z1 z1z1u1 z1z1u2 z1z1r1
z1z1r3 z1z1r3u1 z1z1r3u2 shu1 shu2 shr1 shk1 shk1u1 shk1u2 shk1r1
shk1k1 shk1k1u1 shk1k1u2 shk1k1r1 shk1r3 shk1r3u1 shk1r3u2 sht1 sht1u1
sht1u2 sht1r1 sht1r2 sht1r3 sht1r3u1 sht1r3u2 sht2 sht2u1 sht2u2 shnh
shnhu1 shnhu2 shp1 shp1u1 shp1u2 shp1r1 shp1r3 shp1r3u1 shp1r3u2 shp2
shp2u1 shp2u2 shm1 shm1u1 shm1u2 shm1r3 shm1r3u1 shm1r3u2 s1u1 s1u2
s1r1 s1r2 s1k1 s1k1u1 s1k1u2 s1k1r1 s1k1k1 s1k1k1u1 s1k1k1u2 s1k1k1r1
s1k1r3 s1k1r3u1 s1k1r3u2 s1k2 s1k2u1 s1k2u2 s1t1 s1t1u1 s1t1u2 s1t1r3
s1t1r3u1 s1t1r3u2 s1th1 s1th1u1 s1th1u2 s1th1r1 s1th1r2 s1th1r3
s1th1r3u1 s1th1r3u2 s1th2 s1th2u1 s1th2u2 s1th2r1 s1n1 s1n1u1 s1n1u2
s1p1 s1p1u1 s1p1u2 s1p1r1 s1p1r3 s1p1r3u1 s1p1r3u2 s1p2 s1p2u1 s1p2u2
s1m1 s1m1u1 s1m1u2 s1m1r1 s1r3 s1r3u1 s1r3u2 s1l3 s1l3u1 s1l3u2 s1s1
s1s1u1 s1s1u2 s1s1r1 s1s1r3 s1s1r3u1 s1s1r3u2 s1rhrh s1rhrhu1 s1rhrhu2
s1rhrhr3 s1rhrhr3u1 s1rhrhr3u3 h1u1 h1u2 h1r1 h1n1 h1n1u1 h1n1u2 h1m1
h1m1u1 h1m1u2 h1m1r1 h1r3 h1r3u1 h1r3u2 h1l3 h1l3u1 h1l3u2 lhu1 lhu2
lhlh lhlhu1 lhlhu2 zhu1 zhu2 zhk1 zhk1u1 zhk1u2 zhk1k1 zhk1k1u1
zhk1k1u2 zhch1 zhch1u1 zhch1u2 zhth1 zhth1u1 zhth1u2 zhth1th1
zhth1th1u1 zhth1th1u2 zhn1 zhn1u1 zhn1u2 zhn1n1 zhn1n1u1 zhn1n1u2 zhp1
zhp1u1 zhp1u2 zhm1 zhm1u1 zhm1u2 zhv1 zhv1u1 zhv1u2 zhs1 zhs1u1 zhs1u2
rhu1 rhu2 rhrh rhrhu1 rhrhu2 l4 k1xx k2xx k3xx k4xx ngxx ch1xx ch2xx
ch3xx ch4xx njxx t1xx t2xx t3xx t4xx nhxx th1xx th2xx th3xx th4xx n1xx
p1xx p2xx p3xx p4xx m1xx y1xx r3xx rhxx l3xx lhxx zhxx v1xx z1xx shxx
s1xx h1xx ];
@GDEF_Mark = [xx dotreph ];
table GDEF {
# 1. Bases: single character, spacing glyphs.
# 2. Ligatures: multiple character, spacing glyphs.
# 3. Marks: non-spacing combining glyphs.
# 4. Components: part of single character, spacing glyphs.
GlyphClassDef @GDEF_Simple, @GDEF_Ligature, @GDEF_Mark, ;
} GDEF;
This diff is collapsed.
import sys
import time
import fontforge
font = fontforge.open(sys.argv[1])
# Remove all GSUB lookups
for lookup in font.gsub_lookups:
font.removeLookup(lookup)
# Remove all GPOS lookups
for lookup in font.gpos_lookups:
font.removeLookup(lookup)
# Merge the new featurefile
font.mergeFeature(sys.argv[2])
font.version = time.strftime('%Y%m%d')
font.selection.all()
#font.simplify()
#font.addExtrema()
font.round()
font.autoHint()
font.generate(sys.argv[1].replace(".sfd",".ttf"), flags=("omit-instructions", "round", "opentype"))
font.close()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment