mapcomplete/scripts/generateIncludedImages.ts

55 lines
1.7 KiB
TypeScript

import * as fs from "fs"
function genImages(dryrun = false) {
console.log("Generating images")
const dir = fs.readdirSync("./assets/svg")
let module =
'import Img from "./UI/Base/Img";\nimport {FixedUiElement} from "./UI/Base/FixedUiElement";\n\nexport default class Svg {\n\n\n'
const allNames: string[] = []
for (const path of dir) {
if (path.endsWith("license_info.json")) {
continue
}
if (path.endsWith(".license")) {
continue
}
if (!path.endsWith(".svg")) {
throw "Non-svg file detected in the svg files: " + path
}
let svg: string = fs
.readFileSync("./assets/svg/" + path, "utf-8")
.replace(/<\?xml.*?>/, "")
.replace(/fill: ?none;/g, "fill: none !important;") // This is such a brittle hack...
.replace(/\n/g, " ")
.replace(/\r/g, "")
.replace(/\\/g, "\\")
.replace(/"/g, '\\"')
let hasNonAsciiChars = Array.from(svg).some((char) => char.charCodeAt(0) > 127)
if (hasNonAsciiChars) {
throw "The svg '" + path + "' has non-ascii characters"
}
const name = path.substring(0, path.length - 4).replace(/[ -]/g, "_")
if (dryrun) {
svg = "<omitting svg - dryrun>"
}
let rawName = name
module += ` public static ${name} = "${svg}"\n`
module += ` public static ${name}_svg() { return new Img(Svg.${rawName}, true);}\n`
if (!dryrun) {
allNames.push(`"${path}": Svg.${name}`)
}
}
module += `public static All = {${allNames.join(",")}};`
module += "}\n"
fs.writeFileSync("src/Svg.ts", module)
console.log("Done")
}
genImages()