/usr/bin/fontlint is in fontforge-nox 20120731.b-5ubuntu0.1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 | #!/usr/bin/fontforge -lang=ff
if ( Strtol($version)<20070924 )
Error( "Please upgrade to a more recent version of fontforge" )
endif
if ( $argc <= 1 )
Print( "fontlint: {fontfile}" )
Print( " Validates the listed fonts" )
return( 1 );
endif
while ( $argc > 1 )
Open( $1, 9 ) /* Open even if fstype objects, turn on validation */
mask = Validate()
blues = $privateState
if ( $order==2 )
blues = blues & ~0x010000;
else
mask = mask & ~0x80000;
endif
if ( mask==0 && $loadState==0 && blues==0 )
Print("Validation " + $fontname + " ...Passed")
else
Print("Validation " + $fontname + " ...Failed")
if ( mask & 0x2 )
Print( " Open Contour" )
endif
if ( mask & 0x4 )
Print( " Self Intersecting Glyph" )
endif
if ( mask & 0x8 )
Print( " Wrong Direction" )
endif
if ( mask & 0x10 )
Print( " Flipped Reference" )
endif
if ( mask & 0x20 )
Print( " Missing Points at Extrema" )
endif
if ( mask & 0x40 )
Print( " Unknown glyph referenced in GSUB/GPOS/MATH" )
endif
if ( mask & 0x80 )
Print( " More points in a glyph than PostScript allows" )
endif
if ( mask & 0x100 )
Print( " Too Many Hints" )
endif
if ( mask & 0x200 )
Print( " Bad Glyph Name" )
endif
if ( mask & 0x400 )
Print( " More points in a glyph than specified in 'maxp'" )
endif
if ( mask & 0x800 )
Print( " More paths in a glyph than specified in 'maxp'" )
endif
if ( mask & 0x1000 )
Print( " More points in a composite glyph than specified in 'maxp'" )
endif
if ( mask & 0x2000 )
Print( " More paths in a composite glyph than specified in 'maxp'" )
endif
if ( mask & 0x4000 )
Print( " Instructions longer than allowed in 'maxp'" )
endif
if ( mask & 0x8000 )
Print( " More references in a glyph than specified in 'maxp'" )
endif
if ( mask & 0x10000 )
Print( " References nested more deeply than specified in 'maxp'" )
endif
if ( mask & 0x20000 )
# Print( " 'prep' or 'fpgm' tables are longer than specified in 'maxp'" )
#I no longer think this is an error
endif
if ( mask & 0x40000 )
Print( " Adjacent points too far apart in a glyph" )
endif
if ( mask & 0x80000 )
Print( " Non integral coordinates in a glyph" )
endif
if ( mask & 0x100000 )
Print( " A glyph uses at least one, but not all, anchor classes in a subtable" )
Print( " (I'm not absolutely sure this is an error)" )
endif
if ( mask & 0x200000 )
Print( " Two glyphs have the same name." )
endif
if ( mask & 0x400000 )
Print( " Two glyphs have the unicode." )
endif
if ( mask & 0x800000 )
Print( " Overlapping hints in a glyph." )
endif
mask = $loadState;
if ( mask & 0x01 )
Print( " Bad PostScript fontname entry in the 'name' table" )
endif
if ( mask & 0x02 )
Print( " Bad 'glyf' or 'loca' table" )
endif
if ( mask & 0x04 )
Print( " Bad 'CFF ' table" )
endif
if ( mask & 0x08 )
Print( " Bad 'hhea', 'hmtx', 'vhea' or 'vmtx' table" )
endif
if ( mask & 0x10 )
Print( " Bad 'cmap' table" )
endif
if ( mask & 0x20 )
Print( " Bad 'EBDT', 'bdat', 'EBLC' or 'bloc' (embedded bitmap) table" )
endif
if ( mask & 0x40 )
Print( " Bad Apple GX advanced typography table" )
endif
if ( mask & 0x80 )
Print( " Bad OpenType advanced typography table" )
endif
if ( mask & 0x100 )
Print( " Bad version number in OS/2 table (must be >0, and must be >1 for OT-CFF fonts)" )
endif
if ( mask & 0x200 )
Print( " Bad sfnt file header" )
endif
if ( blues & 0x010000 )
Print( " Missing BlueValues entry in PostScript Private dictionary" )
endif
if ( blues & 0x000001 )
Print( " Odd number of elements in either the BlueValues or OtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x000002 )
Print( " Disordered elements in either the BlueValues or OtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x000004 )
Print( " Too many elements in either the BlueValues or OtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x000008 )
Print( " Elements too close in either the BlueValues or OtherBlues entries in the PostScript Private dictionary (must be at least 2*BlueFuzz+1 apart)" )
endif
if ( blues & 0x000010 )
Print( " Non-integral elements in either the BlueValues or OtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x000020 )
Print( " Alignment zone height in either the BlueValues or OtherBlues is too big for the BlueScale in the PostScript Private dictionary" )
endif
if ( blues & 0x000100 )
Print( " Odd number of elements in either the FamilyBlues or FamilyOtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x000200 )
Print( " Disordered elements in either the FamilyBlues or FamilyOtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x000400 )
Print( " Too many elements in either the FamilyBlues or FamilyOtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x000800 )
Print( " Elements too close in either the FamilyBlues or FamilyOtherBlues entries in the PostScript Private dictionary (must be at least 2*BlueFuzz+1 apart)" )
endif
if ( blues & 0x001000 )
Print( " Non-integral elements in either the FamilyBlues or FamilyOtherBlues entries in the PostScript Private dictionary" )
endif
if ( blues & 0x002000 )
Print( " Alignment zone height in either the FamilyBlues or FamilyOtherBlues is too big for the BlueScale in the PostScript Private dictionary" )
endif
if ( blues & 0x020000 )
Print( " Bad BlueFuzz entry in PostScript Private dictionary" )
endif
if ( blues & 0x040000 )
Print( " Bad BlueScale entry in PostScript Private dictionary" )
endif
if ( blues & 0x080000 )
Print( " Bad StdHW entry in PostScript Private dictionary" )
endif
if ( blues & 0x100000 )
Print( " Bad StdVW entry in PostScript Private dictionary" )
endif
if ( blues & 0x200000 )
Print( " Bad StemSnapH entry in PostScript Private dictionary" )
endif
if ( blues & 0x400000 )
Print( " Bad StemSnapV entry in PostScript Private dictionary" )
endif
if ( blues & 0x800000 )
Print( " StemSnapH does not contain StdHW value in PostScript Private dictionary" )
endif
if ( blues & 0x1000000 )
Print( " StemSnapV does not contain StdVW value in PostScript Private dictionary" )
endif
if ( blues & 0x2000000 )
Print( " Bad BlueShift entry in PostScript Private dictionary" )
endif
Quit( 1 )
endif
Close()
shift
endloop
|