Kevin Lubick | 53eabf6 | 2018-12-10 12:41:26 -0500 | [diff] [blame^] | 1 | // Functions dealing with parsing/stringifying fonts go here. |
| 2 | |
| 3 | var units = 'px|pt|pc|in|cm|mm|%|em|ex|ch|rem|q'; |
| 4 | var fontSizeRegex = new RegExp('([\\d\\.]+)(' + units + ')'); |
| 5 | var defaultHeight = 12; |
| 6 | // Based off of node-canvas's parseFont |
| 7 | // returns font size in *points* (original impl was in px); |
| 8 | function 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 | } |