2018-12-10 17:41:26 +00:00
|
|
|
// Functions dealing with parsing/stringifying fonts go here.
|
|
|
|
|
|
|
|
var units = 'px|pt|pc|in|cm|mm|%|em|ex|ch|rem|q';
|
|
|
|
var fontSizeRegex = new RegExp('([\\d\\.]+)(' + units + ')');
|
2018-12-12 15:35:13 +00:00
|
|
|
var defaultHeight = 16;
|
2018-12-10 17:41:26 +00:00
|
|
|
// Based off of node-canvas's parseFont
|
2018-12-12 15:35:13 +00:00
|
|
|
// returns font size in px, which represents the em width.
|
2018-12-10 17:41:26 +00:00
|
|
|
function parseFontSize(fontStr) {
|
|
|
|
// This is naive and doesn't account for line-height yet
|
|
|
|
// (but neither does node-canvas's?)
|
|
|
|
var fontSize = fontSizeRegex.exec(fontStr);
|
|
|
|
if (!fontSize) {
|
|
|
|
SkDebug('Could not parse font size' + fontStr);
|
|
|
|
return 16;
|
|
|
|
}
|
|
|
|
var size = parseFloat(fontSize[1]);
|
|
|
|
var unit = fontSize[2];
|
|
|
|
switch (unit) {
|
|
|
|
case 'pt':
|
2018-12-12 15:35:13 +00:00
|
|
|
case 'em':
|
|
|
|
case 'rem':
|
|
|
|
return size * 4/3;
|
2018-12-10 17:41:26 +00:00
|
|
|
case 'px':
|
2018-12-12 15:35:13 +00:00
|
|
|
return size;
|
2018-12-10 17:41:26 +00:00
|
|
|
case 'pc':
|
2018-12-12 15:35:13 +00:00
|
|
|
return size * 16;
|
2018-12-10 17:41:26 +00:00
|
|
|
case 'in':
|
2018-12-12 15:35:13 +00:00
|
|
|
return size * 96;
|
2018-12-10 17:41:26 +00:00
|
|
|
case 'cm':
|
2018-12-12 15:35:13 +00:00
|
|
|
return size * 96.0 / 2.54;
|
2018-12-10 17:41:26 +00:00
|
|
|
case 'mm':
|
2018-12-12 15:35:13 +00:00
|
|
|
return size * (96.0 / 25.4);
|
|
|
|
case 'q': // quarter millimeters
|
|
|
|
return size * (96.0 / 25.4 / 4);
|
2018-12-10 17:41:26 +00:00
|
|
|
case '%':
|
2018-12-12 15:35:13 +00:00
|
|
|
return size * (defaultHeight / 75);
|
2018-12-10 17:41:26 +00:00
|
|
|
}
|
|
|
|
}
|