blob: 04edbda5695726e750744b3901e53f7d44639feb [file] [log] [blame]
Kevin Lubick53eabf62018-12-10 12:41:26 -05001// Functions dealing with parsing/stringifying fonts go here.
2
3var units = 'px|pt|pc|in|cm|mm|%|em|ex|ch|rem|q';
4var fontSizeRegex = new RegExp('([\\d\\.]+)(' + units + ')');
5var defaultHeight = 12;
6// Based off of node-canvas's parseFont
7// returns font size in *points* (original impl was in px);
8function parseFontSize(fontStr) {
9 // This is naive and doesn't account for line-height yet
10 // (but neither does node-canvas's?)
11 var fontSize = fontSizeRegex.exec(fontStr);
12 if (!fontSize) {
13 SkDebug('Could not parse font size' + fontStr);
14 return 16;
15 }
16 var size = parseFloat(fontSize[1]);
17 var unit = fontSize[2];
18 switch (unit) {
19 case 'pt':
20 return size;
21 case 'px':
22 return size * 3/4;
23 case 'pc':
24 return size * 12;
25 case 'in':
26 return size * 72;
27 case 'cm':
28 return size * 72.0 / 2.54;
29 case 'mm':
30 return size * (72.0 / 25.4);
31 case '%':
32 return size * (defaultHeight / 100);
33 case 'em':
34 case 'rem':
35 return size * defaultHeight;
36 case 'q':
37 return size * (96 / 25.4 / 3);
38 }
39}