/** * Преобразовать размер шрифта в единицы карты * @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;