Add ability to calculate heights/depths

Summary:
This diff does a couple different things:

 - There is now a metrics/ folder, which contains the property files describing
   the metrics if the fonts, as well as a script for reading and printing the
   metrics in javascript.
 - Fractions and superscripts/subscripts are now rendered in slightly different
   ways now (notably, no use of inline-table). This allows for much more precise
   positioning of the superscripts, subscripts, numerators, and denominators,
   while still having an appropriate baseline. Also, there is no longer a
   sup/sub/supsub distinction, there are only supsubs with null sup/sub.
 - Using the new font metrics and by implementing the formulas found in The TeX
   Book, Appendix G, the heights and depths of all of the sub-expressions in a
   formula are now calculated. These are currently used to:
    - Correctly position superscripts, subscripts, numerators, and denominators
    - Adjust the height and depth of the overall expression so it takes up the
      appropriate space
 - Because we have to add attributes (height and depth) to every attribute, I
   have changed the way DOM nodes are assembled. Now, instead of assembling the
   DOM elements inline (which is a problem because we need to track
   height/depth, and we shouldn't (and can't in IE 8) attach raw attributes to DOM
   nodes), we assemble a pseudo-DOM structure with the extra information, and
   then actually assemble it at the very end.

The main page also now has an updated expression to show off and test the new
and improved parsing.

Test Plan:
View the main page, make sure that the expression renders. Make sure
that the tests pass. Make sure that expressions have the correct calculated
height (this is most easily tested by viewing them on the main page and making
sure that the top of the expression lines up with the bottom of the input box).

Reviewers: alpert

Reviewed By: alpert

Differential Revision: http://phabricator.khanacademy.org/D3442
This commit is contained in:
Emily Eisenberg
2013-08-13 18:16:43 -07:00
parent c583d23a7c
commit 0a3a2271f4
21 changed files with 5626 additions and 366 deletions

860
metrics/cmex10.pl Normal file
View File

@@ -0,0 +1,860 @@
(FAMILY cmex10)
(CODINGSCHEME FONTSPECIFIC)
(DESIGNSIZE R 10.0)
(DESIGNUNITS R 1000)
(COMMENT DESIGNSIZE (1 em) IS IN POINTS)
(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000)
(BOUNDARYCHAR O 201)
(FONTDIMEN
(SLANT R 0.000000)
(SPACE D 333)
(STRETCH D 166)
(SHRINK D 111)
(XHEIGHT D 400)
(QUAD D 1000)
(EXTRASPACE D 111)
)
(LIGTABLE
)
(CHARACTER O 0 (comment parenleftbig)
(CHARWD R 458)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 1 (comment parenrightbig)
(CHARWD R 458)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 2 (comment bracketleftbig)
(CHARWD R 416)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 3 (comment bracketrightbig)
(CHARWD R 416)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 4 (comment floorleftbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 5 (comment floorrightbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 6 (comment ceilingleftbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 7 (comment ceilingrightbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 10 (comment braceleftbig)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 11 (comment bracerightbig)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 12 (comment angbracketleftbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1160)
)
(CHARACTER O 13 (comment angbracketrightbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1160)
)
(CHARACTER O 14 (comment vextendsingle)
(CHARWD R 333)
(CHARHT R 21)
(CHARDP R 621)
)
(CHARACTER O 15 (comment vextenddouble)
(CHARWD R 555)
(CHARHT R 21)
(CHARDP R 621)
)
(CHARACTER O 16 (comment slashbig)
(CHARWD R 577)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 17 (comment backslashbig)
(CHARWD R 577)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 20 (comment parenleftBig)
(CHARWD R 597)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER O 21 (comment parenrightBig)
(CHARWD R 597)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER O 22 (comment parenleftbigg)
(CHARWD R 736)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 23 (comment parenrightbigg)
(CHARWD R 736)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 24 (comment bracketleftbigg)
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 25 (comment bracketrightbigg)
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 26 (comment floorleftbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 27 (comment floorrightbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 30 (comment ceilingleftbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 31 (comment ceilingrightbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 32 (comment braceleftbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 33 (comment bracerightbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 34 (comment angbracketleftbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 35 (comment angbracketrightbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 36 (comment slashbigg)
(CHARWD R 1044)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 37 (comment backslashbigg)
(CHARWD R 1044)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 40 (comment parenleftBigg)
(CHARWD R 791)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 41 (comment parenrightBigg)
(CHARWD R 791)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 42 (comment bracketleftBigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 43 (comment bracketrightBigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 44 (comment floorleftBigg)
(CHARWD R 638)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 45 (comment floorrightBigg)
(CHARWD R 638)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 46 (comment ceilingleftBigg)
(CHARWD R 638)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 47 (comment ceilingrightBigg)
(CHARWD R 638)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 50 (comment braceleftBigg)
(CHARWD R 805)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 51 (comment bracerightBigg)
(CHARWD R 805)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 52 (comment angbracketleftBigg)
(CHARWD R 805)
(CHARHT R 40)
(CHARDP R 2960)
)
(CHARACTER O 53 (comment angbracketrightBigg)
(CHARWD R 805)
(CHARHT R 40)
(CHARDP R 2960)
)
(CHARACTER O 54 (comment slashBigg)
(CHARWD R 1277)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 55 (comment backslashBigg)
(CHARWD R 1277)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 56 (comment slashBig)
(CHARWD R 811)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER O 57 (comment backslashBig)
(CHARWD R 811)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C 0
(CHARWD R 875)
(CHARHT R 39)
(CHARDP R 1770)
)
(CHARACTER C 1
(CHARWD R 875)
(CHARHT R 39)
(CHARDP R 1770)
)
(CHARACTER C 2
(CHARWD R 666)
(CHARHT R 39)
(CHARDP R 1760)
)
(CHARACTER C 3
(CHARWD R 666)
(CHARHT R 39)
(CHARDP R 1760)
)
(CHARACTER C 4
(CHARWD R 666)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C 5
(CHARWD R 666)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C 6
(CHARWD R 666)
(CHARHT R 1)
(CHARDP R 601)
)
(CHARACTER C 7
(CHARWD R 666)
(CHARHT R 1)
(CHARDP R 601)
)
(CHARACTER C 8
(CHARWD R 888)
(CHARDP R 910)
)
(CHARACTER C 9
(CHARWD R 888)
(CHARDP R 910)
)
(CHARACTER O 72 (comment braceleftbt)
(CHARWD R 888)
(CHARHT R 10)
(CHARDP R 899)
)
(CHARACTER O 73 (comment bracerightbt)
(CHARWD R 888)
(CHARHT R 10)
(CHARDP R 899)
)
(CHARACTER O 74 (comment braceleftmid)
(CHARWD R 888)
(CHARHT R 10)
(CHARDP R 1810)
)
(CHARACTER O 75 (comment bracerightmid)
(CHARWD R 888)
(CHARHT R 10)
(CHARDP R 1810)
)
(CHARACTER O 76 (comment braceex)
(CHARWD R 888)
(CHARHT R 10)
(CHARDP R 310)
)
(CHARACTER O 77 (comment arrowvertex)
(CHARWD R 666)
(CHARHT R 1)
(CHARDP R 601)
)
(CHARACTER O 100 (comment parenleftbt)
(CHARWD R 875)
(CHARHT R 50)
(CHARDP R 1759)
)
(CHARACTER C A
(CHARWD R 875)
(CHARHT R 50)
(CHARDP R 1759)
)
(CHARACTER C B
(CHARWD R 875)
(CHARHT R 10)
(CHARDP R 610)
)
(CHARACTER C C
(CHARWD R 875)
(CHARHT R 10)
(CHARDP R 610)
)
(CHARACTER C D
(CHARWD R 611)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C E
(CHARWD R 611)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C F
(CHARWD R 833)
(CHARDP R 1000)
)
(CHARACTER C G
(CHARWD R 1111)
(CHARDP R 1400)
)
(CHARACTER C H
(CHARWD R 472)
(CHARDP R 1111)
(CHARIC R 137)
)
(CHARACTER C I
(CHARWD R 555)
(CHARDP R 2222)
(CHARIC R 388)
)
(CHARACTER C J
(CHARWD R 1111)
(CHARDP R 1000)
)
(CHARACTER C K
(CHARWD R 1511)
(CHARDP R 1400)
)
(CHARACTER C L
(CHARWD R 1111)
(CHARDP R 1000)
)
(CHARACTER C M
(CHARWD R 1511)
(CHARDP R 1400)
)
(CHARACTER C N
(CHARWD R 1111)
(CHARDP R 1000)
)
(CHARACTER C O
(CHARWD R 1511)
(CHARDP R 1400)
)
(CHARACTER C P
(CHARWD R 1055)
(CHARDP R 1000)
)
(CHARACTER C Q
(CHARWD R 944)
(CHARDP R 1000)
)
(CHARACTER C R
(CHARWD R 472)
(CHARDP R 1111)
(CHARIC R 137)
)
(CHARACTER C S
(CHARWD R 833)
(CHARDP R 1000)
)
(CHARACTER C T
(CHARWD R 833)
(CHARDP R 1000)
)
(CHARACTER C U
(CHARWD R 833)
(CHARDP R 1000)
)
(CHARACTER C V
(CHARWD R 833)
(CHARDP R 1000)
)
(CHARACTER C W
(CHARWD R 833)
(CHARDP R 1000)
)
(CHARACTER C X
(CHARWD R 1444)
(CHARDP R 1400)
)
(CHARACTER C Y
(CHARWD R 1277)
(CHARDP R 1400)
)
(CHARACTER C Z
(CHARWD R 555)
(CHARDP R 2222)
(CHARIC R 388)
)
(CHARACTER O 133 (comment uniondisplay)
(CHARWD R 1111)
(CHARDP R 1400)
)
(CHARACTER O 134 (comment intersectiondisplay)
(CHARWD R 1111)
(CHARDP R 1400)
)
(CHARACTER O 135 (comment unionmultidisplay)
(CHARWD R 1111)
(CHARDP R 1400)
)
(CHARACTER O 136 (comment logicalanddisplay)
(CHARWD R 1111)
(CHARDP R 1400)
)
(CHARACTER O 137 (comment logicalordisplay)
(CHARWD R 1111)
(CHARDP R 1400)
)
(CHARACTER O 140 (comment coproducttext)
(CHARWD R 944)
(CHARDP R 1000)
)
(CHARACTER C a
(CHARWD R 1277)
(CHARDP R 1400)
)
(CHARACTER C b
(CHARWD R 555)
(CHARHT R 744)
(CHARIC R 6)
)
(CHARACTER C c
(CHARWD R 1000)
(CHARHT R 772)
(CHARIC R 3)
)
(CHARACTER C d
(CHARWD R 1444)
(CHARHT R 772)
(CHARIC R 2)
)
(CHARACTER C e
(CHARWD R 555)
(CHARHT R 722)
)
(CHARACTER C f
(CHARWD R 1000)
(CHARHT R 750)
)
(CHARACTER C g
(CHARWD R 1444)
(CHARHT R 750)
)
(CHARACTER C h
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C i
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C j
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C k
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C l
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C m
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C n
(CHARWD R 666)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C o
(CHARWD R 666)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER C p
(CHARWD R 1000)
(CHARHT R 40)
(CHARDP R 1160)
(CHARIC R 20)
)
(CHARACTER C q
(CHARWD R 1000)
(CHARHT R 40)
(CHARDP R 1760)
(CHARIC R 20)
)
(CHARACTER C r
(CHARWD R 1000)
(CHARHT R 40)
(CHARDP R 2360)
(CHARIC R 20)
)
(CHARACTER C s
(CHARWD R 1000)
(CHARHT R 40)
(CHARDP R 2960)
(CHARIC R 20)
)
(CHARACTER C t
(CHARWD R 1055)
(CHARHT R 20)
(CHARDP R 1800)
)
(CHARACTER C u
(CHARWD R 1055)
(CHARHT R 20)
(CHARDP R 620)
)
(CHARACTER C v
(CHARWD R 1055)
(CHARHT R 40)
(CHARDP R 580)
(CHARIC R 21)
)
(CHARACTER C w
(CHARWD R 777)
(CHARHT R 1)
(CHARDP R 601)
)
(CHARACTER C x
(CHARWD R 666)
(CHARDP R 600)
)
(CHARACTER C y
(CHARWD R 666)
(CHARDP R 600)
)
(CHARACTER C z
(CHARWD R 450)
(CHARHT R 120)
(CHARDP R 214)
(CHARIC R 10)
)
(CHARACTER O 173 (comment bracehtipdownright)
(CHARWD R 450)
(CHARHT R 120)
(CHARDP R 214)
(CHARIC R 24)
)
(CHARACTER O 174 (comment bracehtipupleft)
(CHARWD R 450)
(CHARHT R 334)
(CHARIC R 10)
)
(CHARACTER O 175 (comment bracehtipupright)
(CHARWD R 450)
(CHARHT R 334)
(CHARIC R 24)
)
(CHARACTER O 176 (comment arrowdbltp)
(CHARWD R 777)
(CHARDP R 600)
)
(CHARACTER O 177 (comment arrowdblbt)
(CHARWD R 777)
(CHARDP R 599)
)
(CHARACTER O 200 (comment parenleftBigg)
(CHARWD R 791)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 237 (comment radical)
(CHARWD R 833)
(CHARHT R 40)
(CHARDP R 960)
(CHARIC R 20)
)
(CHARACTER O 240 (comment space)
(CHARWD R 333)
)
(CHARACTER O 241 (comment parenleftbig)
(CHARWD R 458)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 242 (comment parenrightbig)
(CHARWD R 458)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 243 (comment bracketleftbig)
(CHARWD R 416)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 244 (comment bracketrightbig)
(CHARWD R 416)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 245 (comment floorleftbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 246 (comment floorrightbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 247 (comment ceilingleftbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 250 (comment ceilingrightbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 251 (comment braceleftbig)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 252 (comment bracerightbig)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 255 (comment angbracketleftbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1160)
)
(CHARACTER O 256 (comment angbracketrightbig)
(CHARWD R 472)
(CHARHT R 40)
(CHARDP R 1160)
)
(CHARACTER O 257 (comment vextendsingle)
(CHARWD R 333)
(CHARHT R 21)
(CHARDP R 621)
)
(CHARACTER O 260 (comment vextenddouble)
(CHARWD R 555)
(CHARHT R 21)
(CHARDP R 621)
)
(CHARACTER O 261 (comment slashbig)
(CHARWD R 577)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 262 (comment backslashbig)
(CHARWD R 577)
(CHARHT R 40)
(CHARDP R 1159)
)
(CHARACTER O 263 (comment parenleftBig)
(CHARWD R 597)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER O 264 (comment parenrightBig)
(CHARWD R 597)
(CHARHT R 40)
(CHARDP R 1759)
)
(CHARACTER O 265 (comment parenleftbigg)
(CHARWD R 736)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 266 (comment parenrightbigg)
(CHARWD R 736)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 267 (comment bracketleftbigg)
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 270 (comment bracketrightbigg)
(CHARWD R 527)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 271 (comment floorleftbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 272 (comment floorrightbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 273 (comment ceilingleftbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 274 (comment ceilingrightbigg)
(CHARWD R 583)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 275 (comment braceleftbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 276 (comment bracerightbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 277 (comment angbracketleftbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 300 (comment angbracketrightbigg)
(CHARWD R 750)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 301 (comment slashbigg)
(CHARWD R 1044)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 302 (comment backslashbigg)
(CHARWD R 1044)
(CHARHT R 40)
(CHARDP R 2359)
)
(CHARACTER O 303 (comment parenleftBigg)
(CHARWD R 791)
(CHARHT R 40)
(CHARDP R 2959)
)
(CHARACTER O 304 (comment arrowdblbt)
(CHARWD R 777)
(CHARDP R 599)
)
(CHARACTER O 320 (comment Gamma)
(CHARWD R 625)
(CHARHT R 680)
)
(CHARACTER O 321 (comment Delta)
(CHARWD R 833)
(CHARHT R 716)
)
(CHARACTER O 322 (comment Theta)
(CHARWD R 777)
(CHARHT R 705)
(CHARDP R 22)
)
(CHARACTER O 323 (comment Lambda)
(CHARWD R 694)
(CHARHT R 716)
)
(CHARACTER O 324 (comment Xi)
(CHARWD R 666)
(CHARHT R 677)
)
(CHARACTER O 325 (comment Pi)
(CHARWD R 750)
(CHARHT R 680)
)
(CHARACTER O 326 (comment Sigma)
(CHARWD R 722)
(CHARHT R 683)
)
(CHARACTER O 327 (comment Upsilon)
(CHARWD R 777)
(CHARHT R 705)
)
(CHARACTER O 330 (comment Phi)
(CHARWD R 722)
(CHARHT R 683)
)
(CHARACTER O 331 (comment Psi)
(CHARWD R 777)
(CHARHT R 683)
)
(CHARACTER O 332 (comment Omega)
(CHARWD R 722)
(CHARHT R 705)
)

1286
metrics/cmmi10.pl Normal file

File diff suppressed because it is too large Load Diff

1082
metrics/cmr10.pl Normal file

File diff suppressed because it is too large Load Diff

894
metrics/cmsy10.pl Normal file
View File

@@ -0,0 +1,894 @@
(FAMILY cmsy10)
(CODINGSCHEME FONTSPECIFIC)
(DESIGNSIZE R 10.0)
(DESIGNUNITS R 1000)
(COMMENT DESIGNSIZE (1 em) IS IN POINTS)
(COMMENT OTHER DIMENSIONS ARE MULTIPLES OF DESIGNSIZE/1000)
(BOUNDARYCHAR O 201)
(FONTDIMEN
(SLANT R 0.250070)
(SPACE D 333)
(STRETCH D 166)
(SHRINK D 111)
(XHEIGHT D 400)
(QUAD D 1000)
(EXTRASPACE D 111)
)
(LIGTABLE
(LABEL C A)
(KRN C 0 R 194)
(STOP)
(LABEL C B)
(KRN C 0 R 138)
(STOP)
(LABEL C C)
(KRN C 0 R 138)
(STOP)
(LABEL C D)
(KRN C 0 R 83)
(STOP)
(LABEL C E)
(KRN C 0 R 111)
(STOP)
(LABEL C F)
(KRN C 0 R 111)
(STOP)
(LABEL C G)
(KRN C 0 R 111)
(STOP)
(LABEL C H)
(KRN C 0 R 111)
(STOP)
(LABEL C I)
(KRN C 0 R 27)
(STOP)
(LABEL C J)
(KRN C 0 R 166)
(STOP)
(LABEL C K)
(KRN C 0 R 55)
(STOP)
(LABEL C L)
(KRN C 0 R 138)
(STOP)
(LABEL C M)
(KRN C 0 R 138)
(STOP)
(LABEL C N)
(KRN C 0 R 83)
(STOP)
(LABEL C O)
(KRN C 0 R 111)
(STOP)
(LABEL C P)
(KRN C 0 R 83)
(STOP)
(LABEL C Q)
(KRN C 0 R 111)
(STOP)
(LABEL C R)
(KRN C 0 R 83)
(STOP)
(LABEL C S)
(KRN C 0 R 138)
(STOP)
(LABEL C T)
(KRN C 0 R 27)
(STOP)
(LABEL C U)
(KRN C 0 R 83)
(STOP)
(LABEL C V)
(KRN C 0 R 27)
(STOP)
(LABEL C W)
(KRN C 0 R 83)
(STOP)
(LABEL C X)
(KRN C 0 R 138)
(STOP)
(LABEL C Y)
(KRN C 0 R 83)
(STOP)
(LABEL C Z)
(KRN C 0 R 138)
(STOP)
)
(CHARACTER O 0 (comment minus)
(CHARWD R 777)
(CHARHT R 270)
)
(CHARACTER O 1 (comment periodcentered)
(CHARWD R 277)
(CHARHT R 303)
)
(CHARACTER O 2 (comment multiply)
(CHARWD R 777)
(CHARHT R 491)
)
(CHARACTER O 3 (comment asteriskmath)
(CHARWD R 500)
(CHARHT R 465)
)
(CHARACTER O 4 (comment divide)
(CHARWD R 777)
(CHARHT R 529)
(CHARDP R 29)
)
(CHARACTER O 5 (comment diamondmath)
(CHARWD R 500)
(CHARHT R 488)
)
(CHARACTER O 6 (comment plusminus)
(CHARWD R 777)
(CHARHT R 666)
)
(CHARACTER O 7 (comment minusplus)
(CHARWD R 777)
(CHARHT R 500)
(CHARDP R 166)
)
(CHARACTER O 10 (comment circleplus)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 11 (comment circleminus)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 12 (comment circlemultiply)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 13 (comment circledivide)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 14 (comment circledot)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 15 (comment circlecopyrt)
(CHARWD R 1000)
(CHARHT R 716)
(CHARDP R 216)
)
(CHARACTER O 16 (comment openbullet)
(CHARWD R 500)
(CHARHT R 444)
)
(CHARACTER O 17 (comment bullet)
(CHARWD R 500)
(CHARHT R 444)
)
(CHARACTER O 20 (comment equivasymptotic)
(CHARWD R 777)
(CHARHT R 484)
)
(CHARACTER O 21 (comment equivalence)
(CHARWD R 777)
(CHARHT R 464)
)
(CHARACTER O 22 (comment reflexsubset)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 23 (comment reflexsuperset)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 24 (comment lessequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 25 (comment greaterequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 26 (comment precedesequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 27 (comment followsequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 30 (comment similar)
(CHARWD R 777)
(CHARHT R 367)
)
(CHARACTER O 31 (comment approxequal)
(CHARWD R 777)
(CHARHT R 483)
)
(CHARACTER O 32 (comment propersubset)
(CHARWD R 777)
(CHARHT R 540)
(CHARDP R 40)
)
(CHARACTER O 33 (comment propersuperset)
(CHARWD R 777)
(CHARHT R 540)
(CHARDP R 40)
)
(CHARACTER O 34 (comment lessmuch)
(CHARWD R 1000)
(CHARHT R 566)
(CHARDP R 66)
)
(CHARACTER O 35 (comment greatermuch)
(CHARWD R 1000)
(CHARHT R 566)
(CHARDP R 66)
)
(CHARACTER O 36 (comment precedes)
(CHARWD R 777)
(CHARHT R 539)
(CHARDP R 40)
)
(CHARACTER O 37 (comment follows)
(CHARWD R 777)
(CHARHT R 539)
(CHARDP R 40)
)
(CHARACTER O 40 (comment arrowleft)
(CHARWD R 1000)
(CHARHT R 511)
(CHARDP R 11)
)
(CHARACTER O 41 (comment arrowright)
(CHARWD R 1000)
(CHARHT R 511)
(CHARDP R 11)
)
(CHARACTER O 42 (comment arrowup)
(CHARWD R 500)
(CHARHT R 693)
(CHARDP R 194)
)
(CHARACTER O 43 (comment arrowdown)
(CHARWD R 500)
(CHARHT R 694)
(CHARDP R 193)
)
(CHARACTER O 44 (comment arrowboth)
(CHARWD R 1000)
(CHARHT R 511)
(CHARDP R 11)
)
(CHARACTER O 45 (comment arrownortheast)
(CHARWD R 1000)
(CHARHT R 719)
(CHARDP R 195)
)
(CHARACTER O 46 (comment arrowsoutheast)
(CHARWD R 1000)
(CHARHT R 695)
(CHARDP R 219)
)
(CHARACTER O 47 (comment similarequal)
(CHARWD R 777)
(CHARHT R 464)
)
(CHARACTER O 50 (comment arrowdblleft)
(CHARWD R 1000)
(CHARHT R 525)
(CHARDP R 25)
)
(CHARACTER O 51 (comment arrowdblright)
(CHARWD R 1000)
(CHARHT R 525)
(CHARDP R 25)
)
(CHARACTER O 52 (comment arrowdblup)
(CHARWD R 611)
(CHARHT R 693)
(CHARDP R 194)
)
(CHARACTER O 53 (comment arrowdbldown)
(CHARWD R 611)
(CHARHT R 694)
(CHARDP R 193)
)
(CHARACTER O 54 (comment arrowdblboth)
(CHARWD R 1000)
(CHARHT R 525)
(CHARDP R 25)
)
(CHARACTER O 55 (comment arrownorthwest)
(CHARWD R 1000)
(CHARHT R 719)
(CHARDP R 195)
)
(CHARACTER O 56 (comment arrowsouthwest)
(CHARWD R 1000)
(CHARHT R 695)
(CHARDP R 219)
)
(CHARACTER O 57 (comment proportional)
(CHARWD R 777)
(CHARHT R 442)
(CHARDP R 11)
)
(CHARACTER C 0
(CHARWD R 275)
(CHARHT R 559)
)
(CHARACTER C 1
(CHARWD R 1000)
(CHARHT R 442)
(CHARDP R 11)
)
(CHARACTER C 2
(CHARWD R 666)
(CHARHT R 540)
(CHARDP R 40)
)
(CHARACTER C 3
(CHARWD R 666)
(CHARHT R 540)
(CHARDP R 40)
)
(CHARACTER C 4
(CHARWD R 888)
(CHARHT R 716)
)
(CHARACTER C 5
(CHARWD R 888)
(CHARHT R 500)
(CHARDP R 216)
)
(CHARACTER C 6
(CHARWD R 0)
(CHARHT R 716)
(CHARDP R 216)
(CHARIC R 638)
)
(CHARACTER C 7
(CHARWD R 0)
(CHARHT R 436)
(CHARIC R 123)
)
(CHARACTER C 8
(CHARWD R 555)
(CHARHT R 694)
(CHARDP R 22)
(CHARIC R 1)
)
(CHARACTER C 9
(CHARWD R 555)
(CHARHT R 694)
)
(CHARACTER O 72 (comment logicalnot)
(CHARWD R 666)
(CHARHT R 356)
)
(CHARACTER O 73 (comment emptyset)
(CHARWD R 500)
(CHARHT R 772)
(CHARDP R 78)
)
(CHARACTER O 74 (comment Rfractur)
(CHARWD R 722)
(CHARHT R 716)
(CHARDP R 22)
)
(CHARACTER O 75 (comment Ifractur)
(CHARWD R 722)
(CHARHT R 705)
(CHARDP R 11)
)
(CHARACTER O 76 (comment latticetop)
(CHARWD R 777)
(CHARHT R 668)
)
(CHARACTER O 77 (comment perpendicular)
(CHARWD R 777)
(CHARHT R 668)
)
(CHARACTER O 100 (comment aleph)
(CHARWD R 611)
(CHARHT R 693)
)
(CHARACTER C A
(CHARWD R 798)
(CHARHT R 722)
(CHARDP R 50)
)
(CHARACTER C B
(CHARWD R 656)
(CHARHT R 706)
(CHARDP R 22)
(CHARIC R 9)
)
(CHARACTER C C
(CHARWD R 526)
(CHARHT R 705)
(CHARDP R 24)
(CHARIC R 8)
)
(CHARACTER C D
(CHARWD R 771)
(CHARHT R 683)
)
(CHARACTER C E
(CHARWD R 527)
(CHARHT R 705)
(CHARDP R 22)
(CHARIC R 38)
)
(CHARACTER C F
(CHARWD R 719)
(CHARHT R 685)
(CHARDP R 32)
(CHARIC R 111)
)
(CHARACTER C G
(CHARWD R 594)
(CHARHT R 705)
(CHARDP R 119)
(CHARIC R 7)
)
(CHARACTER C H
(CHARWD R 844)
(CHARHT R 683)
(CHARDP R 49)
)
(CHARACTER C I
(CHARWD R 544)
(CHARHT R 683)
(CHARIC R 91)
)
(CHARACTER C J
(CHARWD R 677)
(CHARHT R 683)
(CHARDP R 119)
(CHARIC R 163)
)
(CHARACTER C K
(CHARWD R 761)
(CHARHT R 705)
(CHARDP R 22)
)
(CHARACTER C L
(CHARWD R 689)
(CHARHT R 705)
(CHARDP R 22)
)
(CHARACTER C M
(CHARWD R 1200)
(CHARHT R 705)
(CHARDP R 50)
)
(CHARACTER C N
(CHARWD R 820)
(CHARHT R 775)
(CHARDP R 50)
(CHARIC R 158)
)
(CHARACTER C O
(CHARWD R 796)
(CHARHT R 705)
(CHARDP R 22)
)
(CHARACTER C P
(CHARWD R 695)
(CHARHT R 683)
(CHARDP R 50)
(CHARIC R 38)
)
(CHARACTER C Q
(CHARWD R 816)
(CHARHT R 705)
(CHARDP R 124)
)
(CHARACTER C R
(CHARWD R 847)
(CHARHT R 683)
(CHARDP R 22)
)
(CHARACTER C S
(CHARWD R 605)
(CHARHT R 705)
(CHARDP R 22)
(CHARIC R 37)
)
(CHARACTER C T
(CHARWD R 544)
(CHARHT R 717)
(CHARDP R 68)
(CHARIC R 290)
)
(CHARACTER C U
(CHARWD R 625)
(CHARHT R 683)
(CHARDP R 28)
(CHARIC R 63)
)
(CHARACTER C V
(CHARWD R 612)
(CHARHT R 683)
(CHARDP R 45)
(CHARIC R 48)
)
(CHARACTER C W
(CHARWD R 987)
(CHARHT R 683)
(CHARDP R 45)
(CHARIC R 49)
)
(CHARACTER C X
(CHARWD R 713)
(CHARHT R 683)
(CHARIC R 95)
)
(CHARACTER C Y
(CHARWD R 668)
(CHARHT R 683)
(CHARDP R 135)
(CHARIC R 49)
)
(CHARACTER C Z
(CHARWD R 724)
(CHARHT R 683)
(CHARIC R 43)
)
(CHARACTER O 133 (comment union)
(CHARWD R 666)
(CHARHT R 598)
(CHARDP R 22)
)
(CHARACTER O 134 (comment intersection)
(CHARWD R 666)
(CHARHT R 598)
(CHARDP R 22)
)
(CHARACTER O 135 (comment unionmulti)
(CHARWD R 666)
(CHARHT R 598)
(CHARDP R 22)
)
(CHARACTER O 136 (comment logicaland)
(CHARWD R 666)
(CHARHT R 598)
(CHARDP R 22)
)
(CHARACTER O 137 (comment logicalor)
(CHARWD R 666)
(CHARHT R 598)
(CHARDP R 22)
)
(CHARACTER O 140 (comment turnstileleft)
(CHARWD R 611)
(CHARHT R 694)
)
(CHARACTER C a
(CHARWD R 611)
(CHARHT R 694)
)
(CHARACTER C b
(CHARWD R 444)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C c
(CHARWD R 444)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C d
(CHARWD R 444)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C e
(CHARWD R 444)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C f
(CHARWD R 500)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C g
(CHARWD R 500)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C h
(CHARWD R 388)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C i
(CHARWD R 388)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C j
(CHARWD R 277)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C k
(CHARWD R 500)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C l
(CHARWD R 500)
(CHARHT R 771)
(CHARDP R 271)
)
(CHARACTER C m
(CHARWD R 611)
(CHARHT R 771)
(CHARDP R 271)
)
(CHARACTER C n
(CHARWD R 500)
(CHARHT R 750)
(CHARDP R 250)
)
(CHARACTER C o
(CHARWD R 277)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER C p
(CHARWD R 833)
(CHARHT R 40)
(CHARDP R 960)
(CHARIC R 20)
)
(CHARACTER C q
(CHARWD R 750)
(CHARHT R 683)
)
(CHARACTER C r
(CHARWD R 833)
(CHARHT R 683)
(CHARDP R 33)
)
(CHARACTER C s
(CHARWD R 416)
(CHARHT R 716)
(CHARDP R 216)
(CHARIC R 56)
)
(CHARACTER C t
(CHARWD R 666)
(CHARHT R 598)
)
(CHARACTER C u
(CHARWD R 666)
(CHARHT R 598)
)
(CHARACTER C v
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER C w
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER C x
(CHARWD R 444)
(CHARHT R 705)
(CHARDP R 205)
)
(CHARACTER C y
(CHARWD R 444)
(CHARHT R 705)
(CHARDP R 216)
)
(CHARACTER C z
(CHARWD R 444)
(CHARHT R 705)
(CHARDP R 205)
)
(CHARACTER O 173 (comment paragraph)
(CHARWD R 611)
(CHARHT R 694)
(CHARDP R 194)
)
(CHARACTER O 174 (comment club)
(CHARWD R 777)
(CHARHT R 727)
(CHARDP R 130)
)
(CHARACTER O 175 (comment diamond)
(CHARWD R 777)
(CHARHT R 727)
(CHARDP R 163)
)
(CHARACTER O 176 (comment heart)
(CHARWD R 777)
(CHARHT R 716)
(CHARDP R 33)
)
(CHARACTER O 177 (comment spade)
(CHARWD R 777)
(CHARHT R 727)
(CHARDP R 130)
)
(CHARACTER O 200 (comment arrowleft)
(CHARWD R 1000)
(CHARHT R 511)
(CHARDP R 11)
)
(CHARACTER O 240 (comment space)
(CHARWD R 333)
)
(CHARACTER O 241 (comment minus)
(CHARWD R 777)
(CHARHT R 270)
)
(CHARACTER O 242 (comment periodcentered)
(CHARWD R 277)
(CHARHT R 303)
)
(CHARACTER O 243 (comment multiply)
(CHARWD R 777)
(CHARHT R 491)
)
(CHARACTER O 244 (comment asteriskmath)
(CHARWD R 500)
(CHARHT R 465)
)
(CHARACTER O 245 (comment divide)
(CHARWD R 777)
(CHARHT R 529)
(CHARDP R 29)
)
(CHARACTER O 246 (comment diamondmath)
(CHARWD R 500)
(CHARHT R 488)
)
(CHARACTER O 247 (comment plusminus)
(CHARWD R 777)
(CHARHT R 666)
)
(CHARACTER O 250 (comment minusplus)
(CHARWD R 777)
(CHARHT R 500)
(CHARDP R 166)
)
(CHARACTER O 251 (comment circleplus)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 252 (comment circleminus)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 255 (comment circlemultiply)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 256 (comment circledivide)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 257 (comment circledot)
(CHARWD R 777)
(CHARHT R 583)
(CHARDP R 83)
)
(CHARACTER O 260 (comment circlecopyrt)
(CHARWD R 1000)
(CHARHT R 716)
(CHARDP R 216)
)
(CHARACTER O 261 (comment openbullet)
(CHARWD R 500)
(CHARHT R 444)
)
(CHARACTER O 262 (comment bullet)
(CHARWD R 500)
(CHARHT R 444)
)
(CHARACTER O 263 (comment equivasymptotic)
(CHARWD R 777)
(CHARHT R 484)
)
(CHARACTER O 264 (comment equivalence)
(CHARWD R 777)
(CHARHT R 464)
)
(CHARACTER O 265 (comment reflexsubset)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 266 (comment reflexsuperset)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 267 (comment lessequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 270 (comment greaterequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 271 (comment precedesequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 272 (comment followsequal)
(CHARWD R 777)
(CHARHT R 636)
(CHARDP R 137)
)
(CHARACTER O 273 (comment similar)
(CHARWD R 777)
(CHARHT R 367)
)
(CHARACTER O 274 (comment approxequal)
(CHARWD R 777)
(CHARHT R 483)
)
(CHARACTER O 275 (comment propersubset)
(CHARWD R 777)
(CHARHT R 540)
(CHARDP R 40)
)
(CHARACTER O 276 (comment propersuperset)
(CHARWD R 777)
(CHARHT R 540)
(CHARDP R 40)
)
(CHARACTER O 277 (comment lessmuch)
(CHARWD R 1000)
(CHARHT R 566)
(CHARDP R 66)
)
(CHARACTER O 300 (comment greatermuch)
(CHARWD R 1000)
(CHARHT R 566)
(CHARDP R 66)
)
(CHARACTER O 301 (comment precedes)
(CHARWD R 777)
(CHARHT R 539)
(CHARDP R 40)
)
(CHARACTER O 302 (comment follows)
(CHARWD R 777)
(CHARHT R 539)
(CHARDP R 40)
)
(CHARACTER O 303 (comment arrowleft)
(CHARWD R 1000)
(CHARHT R 511)
(CHARDP R 11)
)
(CHARACTER O 304 (comment spade)
(CHARWD R 777)
(CHARHT R 727)
(CHARDP R 130)
)

328
metrics/metric_parse.py Executable file
View File

@@ -0,0 +1,328 @@
#!/usr/bin/env python
import re
import json
import os
expr_start = re.compile(r"\s*\(")
expr_value = re.compile(r"\s*([^\s\)]+)")
expr_end = re.compile(r"\s*\)")
empty = re.compile(r"\s*$")
def inner_parse_expr(expr):
l = []
while True:
if re.match(empty, expr):
return expr, l
elif re.match(expr_start, expr):
match = re.match(expr_start, expr)
new_expr = expr[len(match.group(0)):]
expr, group = inner_parse_expr(new_expr)
l.append(group)
elif re.match(expr_value, expr):
match = re.match(expr_value, expr)
expr = expr[len(match.group(0)):]
l.append(match.group(1))
elif re.match(expr_end, expr):
match = re.match(expr_end, expr)
new_expr = expr[len(match.group(0)):]
return new_expr, l
else:
raise ValueError("Invalid input")
def parse_expr(expr):
_, group = inner_parse_expr(expr)
return group
def read_pl(pl_file):
with open(pl_file) as pl:
return parse_expr(pl.read())
class Metric:
def __init__(self, char, height, depth):
self.char = char
self.height = float(height) / 1000
self.depth = float(depth) / 1000
def __repr__(self):
return "Char {0} ({1:.3f}+{2:.3f})".format(
self.char, self.height, self.depth)
# Different styles of text, found on page 13 of The TeX book
ROMAN = "roman"
SLANTED = "slanted"
ITALIC = "italic"
TYPEWRITER = "typewriter"
BOLD = "bold"
# The numbers used in this map are all in octal, because that's how all the
# charts for the numbers are written
file_map = {
"cmmi10.pl": {
13: (u"\u03b1", ITALIC), # \alpha
14: (u"\u03b2", ITALIC), # \beta
15: (u"\u03b3", ITALIC), # \gamma
16: (u"\u03b4", ITALIC), # \delta
17: (u"\u03b5", ITALIC), # \varepsilon
20: (u"\u03b6", ITALIC), # \zeta
21: (u"\u03b7", ITALIC), # \eta
22: (u"\u03b8", ITALIC), # \theta
23: (u"\u03b9", ITALIC), # \iota
24: (u"\u03ba", ITALIC), # \kappa
25: (u"\u03bb", ITALIC), # \lambda
26: (u"\u03bc", ITALIC), # \mu
27: (u"\u03bd", ITALIC), # \nu
30: (u"\u03be", ITALIC), # \xi
31: (u"\u03c0", ITALIC), # \pi
32: (u"\u03c1", ITALIC), # \rho
33: (u"\u03c3", ITALIC), # \sigma
34: (u"\u03c4", ITALIC), # \tau
35: (u"\u03c5", ITALIC), # \upsilon
36: (u"\u03d5", ITALIC), # \phi
37: (u"\u03c7", ITALIC), # \chi
40: (u"\u03c8", ITALIC), # \psi
41: (u"\u03c9", ITALIC), # \omega
42: (u"\u03b5", ITALIC), # \epsilon
43: (u"\u03d1", ITALIC), # \vartheta
44: (u"\u03d6", ITALIC), # \varpi
45: (u"\u03f1", ITALIC), # \varrho
46: (u"\u03c2", ITALIC), # \varsigma
47: (u"\u03c6", ITALIC), # \varphi
72: (u".", ROMAN),
73: (u",", ROMAN),
74: (u"<", ROMAN),
75: (u"/", ROMAN),
76: (u">", ROMAN),
101: (u"A", ITALIC),
102: (u"B", ITALIC),
103: (u"C", ITALIC),
104: (u"D", ITALIC),
105: (u"E", ITALIC),
106: (u"F", ITALIC),
107: (u"G", ITALIC),
110: (u"H", ITALIC),
111: (u"I", ITALIC),
112: (u"J", ITALIC),
113: (u"K", ITALIC),
114: (u"L", ITALIC),
115: (u"M", ITALIC),
116: (u"N", ITALIC),
117: (u"O", ITALIC),
120: (u"P", ITALIC),
121: (u"Q", ITALIC),
122: (u"R", ITALIC),
123: (u"S", ITALIC),
124: (u"T", ITALIC),
125: (u"U", ITALIC),
126: (u"V", ITALIC),
127: (u"W", ITALIC),
130: (u"X", ITALIC),
131: (u"Y", ITALIC),
132: (u"Z", ITALIC),
141: (u"a", ITALIC),
142: (u"b", ITALIC),
143: (u"c", ITALIC),
144: (u"d", ITALIC),
145: (u"e", ITALIC),
146: (u"f", ITALIC),
147: (u"g", ITALIC),
150: (u"h", ITALIC),
151: (u"i", ITALIC),
152: (u"j", ITALIC),
153: (u"k", ITALIC),
154: (u"l", ITALIC),
155: (u"m", ITALIC),
156: (u"n", ITALIC),
157: (u"o", ITALIC),
160: (u"p", ITALIC),
161: (u"q", ITALIC),
162: (u"r", ITALIC),
163: (u"s", ITALIC),
164: (u"t", ITALIC),
165: (u"u", ITALIC),
166: (u"v", ITALIC),
167: (u"w", ITALIC),
170: (u"x", ITALIC),
171: (u"y", ITALIC),
172: (u"z", ITALIC),
},
"cmr10.pl": {
0: (u"\u0393", ROMAN), # \Gamma
1: (u"\u0394", ROMAN), # \Delta
2: (u"\u0398", ROMAN), # \Theta
3: (u"\u039b", ROMAN), # \Lambda
4: (u"\u039e", ROMAN), # \Xi
5: (u"\u03a0", ROMAN), # \Pi
6: (u"\u03a3", ROMAN), # \Sigma
7: (u"\u03a5", ROMAN), # \Upsilon
10: (u"\u03a6", ROMAN), # \Phi
11: (u"\u03a8", ROMAN), # \Psi
12: (u"\u03a9", ROMAN), # \Omega
41: (u"!", ROMAN),
42: (u"\"", ROMAN),
44: (u"$", ROMAN),
50: (u"(", ROMAN),
51: (u")", ROMAN),
53: (u"+", ROMAN),
60: (u"0", ROMAN),
61: (u"1", ROMAN),
62: (u"2", ROMAN),
63: (u"3", ROMAN),
64: (u"4", ROMAN),
65: (u"5", ROMAN),
66: (u"6", ROMAN),
67: (u"7", ROMAN),
70: (u"8", ROMAN),
71: (u"9", ROMAN),
72: (u":", ROMAN),
73: (u";", ROMAN),
75: (u"=", ROMAN),
77: (u"?", ROMAN),
100: (u"@", ROMAN),
101: (u"A", ROMAN),
102: (u"B", ROMAN),
103: (u"C", ROMAN),
104: (u"D", ROMAN),
105: (u"E", ROMAN),
106: (u"F", ROMAN),
107: (u"G", ROMAN),
110: (u"H", ROMAN),
111: (u"I", ROMAN),
112: (u"J", ROMAN),
113: (u"K", ROMAN),
114: (u"L", ROMAN),
115: (u"M", ROMAN),
116: (u"N", ROMAN),
117: (u"O", ROMAN),
120: (u"P", ROMAN),
121: (u"Q", ROMAN),
122: (u"R", ROMAN),
123: (u"S", ROMAN),
124: (u"T", ROMAN),
125: (u"U", ROMAN),
126: (u"V", ROMAN),
127: (u"W", ROMAN),
130: (u"X", ROMAN),
131: (u"Y", ROMAN),
132: (u"Z", ROMAN),
133: (u"[", ROMAN),
135: (u"]", ROMAN),
140: (u"`", ROMAN),
141: (u"a", ROMAN),
142: (u"b", ROMAN),
143: (u"c", ROMAN),
144: (u"d", ROMAN),
145: (u"e", ROMAN),
146: (u"f", ROMAN),
147: (u"g", ROMAN),
150: (u"h", ROMAN),
151: (u"i", ROMAN),
152: (u"j", ROMAN),
153: (u"k", ROMAN),
154: (u"l", ROMAN),
155: (u"m", ROMAN),
156: (u"n", ROMAN),
157: (u"o", ROMAN),
160: (u"p", ROMAN),
161: (u"q", ROMAN),
162: (u"r", ROMAN),
163: (u"s", ROMAN),
164: (u"t", ROMAN),
165: (u"u", ROMAN),
166: (u"v", ROMAN),
167: (u"w", ROMAN),
170: (u"x", ROMAN),
171: (u"y", ROMAN),
172: (u"z", ROMAN),
},
"cmsy10.pl": {
0: (u"\u2212", ROMAN), # -
1: (u"\u22c5", ROMAN), # \cdot
2: (u"\u00d7", ROMAN), # \times
3: (u"\u2217", ROMAN), # *
4: (u"\u00f7", ROMAN), # \div
6: (u"\u00b1", ROMAN), # \pm
16: (u"\u2218", ROMAN), # \circ
24: (u"\u2264", ROMAN), # \leq
25: (u"\u2265", ROMAN), # \geq
40: (u"\u2190", ROMAN), # \leftarrow
41: (u"\u2192", ROMAN), # \rightarrow
60: (u"\u2032", ROMAN), # \prime
61: (u"\u221e", ROMAN), # \infty
152: (u"|", ROMAN), # |
}
}
def read_metrics(pl_file, metrics):
pl = read_pl(pl_file)
metrics_to_read = file_map[pl_file]
for elem in pl:
if elem[0] == "CHARACTER":
if elem[1] == "C":
char = int(oct(ord(elem[2])))
elif elem[1] == "O":
char = int(elem[2])
else:
continue
if not char in metrics_to_read:
continue
map_char, map_style = metrics_to_read[char]
char_height = 0
char_depth = 0
for metric in elem[3:]:
if metric[0] == "comment":
continue
elif metric[0] == "CHARHT":
char_height = int(metric[2])
elif metric[0] == "CHARDP":
char_depth = int(metric[2])
metrics[map_style].append(
Metric(map_char, char_height, char_depth))
def print_metrics(metrics):
metric_map = {
style: {
"height": {
metric.char: metric.height for metric in metric_list
},
"depth": {
metric.char: metric.depth for metric in metric_list
},
} for style, metric_list in metrics.iteritems()
}
print "var metricMap = {0};".format(json.dumps(metric_map, indent=4))
if __name__ == "__main__":
os.chdir(os.path.dirname(os.path.realpath(__file__)))
metrics = {
"roman": [],
"italic": [],
"slanted": [],
"typewriter": [],
"bold": [],
}
for metric_file in file_map:
read_metrics(metric_file, metrics)
metrics["roman"].append(Metric(u'\u00a0', 0, 0))
print_metrics(metrics)