mapcomplete/scripts/generateIncludedImages.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

71 lines
2.5 KiB
TypeScript
Raw Normal View History

2020-11-05 12:28:02 +01:00
import * as fs from "fs"
function genImages(dryrun = false) {
2020-11-06 01:58:26 +01:00
console.log("Generating images")
const dir = fs.readdirSync("./assets/svg")
2020-11-05 12:28:02 +01:00
2021-01-03 00:19:42 +01:00
let module =
2023-10-30 14:35:00 +01:00
'import Img from "./UI/Base/Img";\nimport {FixedUiElement} from "./UI/Base/FixedUiElement";\n\n/* @deprecated */\nexport default class Svg {\n\n\n'
2020-11-17 02:22:48 +01:00
const allNames: string[] = []
2020-11-06 01:58:26 +01:00
for (const path of dir) {
if (path.endsWith("license_info.json")) {
2021-04-10 15:01:28 +02:00
continue
}
2023-07-27 14:15:30 +02:00
if (path.endsWith(".license")) {
continue
}
2020-11-06 01:58:26 +01:00
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...
2020-11-06 01:58:26 +01:00
.replace(/\n/g, " ")
.replace(/\r/g, "")
.replace(/\\/g, "\\")
.replace(/"/g, '\\"')
2023-10-26 14:13:04 +02:00
.replaceAll(" ", " ")
2023-10-26 14:13:04 +02:00
let hasNonAsciiChars = Array.from(svg)
.filter((char) => char.charCodeAt(0) > 127)
.map((char) => char.charCodeAt(0))
.join(", ")
if (hasNonAsciiChars.length > 0) {
throw "The svg '" + path + "' has non-ascii characters: " + hasNonAsciiChars
}
2022-09-19 12:34:05 +02:00
const name = path.substring(0, path.length - 4).replace(/[ -]/g, "_")
if (dryrun) {
svg = "<omitting svg - dryrun>"
}
let rawName = name
2022-01-26 21:40:38 +01:00
2020-11-06 01:58:26 +01:00
module += ` public static ${name} = "${svg}"\n`
module += ` public static ${name}_svg() { return new Img(Svg.${rawName}, true);}\n`
2023-05-08 22:38:47 +02:00
if (!dryrun) {
allNames.push(`"${path}": Svg.${name}`)
}
const nameUC = name.toUpperCase().at(0) + name.substring(1)
const svelteCode =
'<script>\nexport let color = "#000000"\n</script>\n' +
svg
.replace(
"<svg ",
"<svg {...$$$$restProps} on:click on:mouseover on:mouseenter on:mouseleave on:keydown "
)
.replace(/\\"/g, '"')
.replace(/(rgb\(0%,0%,0%\)|#000000|#000)/g, "{color}")
fs.writeFileSync("./src/assets/svg/" + nameUC + ".svelte", svelteCode, "utf8")
2020-11-06 01:58:26 +01:00
}
2020-11-17 02:22:48 +01:00
module += `public static All = {${allNames.join(",")}};`
2020-11-06 01:58:26 +01:00
module += "}\n"
2023-07-15 18:24:39 +02:00
fs.writeFileSync("src/Svg.ts", module)
2020-11-06 01:58:26 +01:00
console.log("Done")
}
2023-05-08 22:38:47 +02:00
genImages()