49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
/**
|
|
* Преобразовать размер шрифта в единицы карты
|
|
* @param { string | Number } v Значение для перевода "10mm", "22pt"
|
|
* @param {*} ppu Pixel per unit
|
|
* @returns
|
|
*/
|
|
function size2ppu(v, ppu) {
|
|
if (typeof v !== "string") return v;
|
|
|
|
if (v.endsWith("mm")) {
|
|
return parseFloat(v.substring(0, v.length - 2) * ppu * 100) / 69;
|
|
}
|
|
if (v.endsWith("pt")) {
|
|
return (parseFloat(v.slice(0, v.length - 2)) * ppu * 100) / 283.46;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Перегоняет стиль в единицы карты (возвращает новый объект)
|
|
* @param {*} style Объект стиля для преобразования
|
|
* @param {*} ppu Pixel per unit
|
|
*/
|
|
function update_style(style, ppu) {
|
|
let s = { ...style };
|
|
const convertable = ["font-size", "stroke-width", "1pt", "1mm"];
|
|
Object.keys(s).forEach((k) => {
|
|
if (convertable.includes(k)) s[k] = size2ppu(s[k], ppu);
|
|
});
|
|
return s;
|
|
}
|
|
|
|
/**
|
|
* Перегоняет все стили в единицы карты (возвращает новый объект)
|
|
* @param {*} style Объект стиля для преобразования
|
|
* @param {*} ppu Pixel per unit
|
|
*/
|
|
function update_styles(styles, ppu) {
|
|
return Object.keys(styles).reduce((s, c) => ({ ...s, [c]: update_style(styles[c], ppu) }), {});
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
size2ppu,
|
|
update_style,
|
|
update_styles
|
|
};
|
|
|
|
module.exports.default = module.exports;
|