mapcomplete/scripts/lint.ts

102 lines
3.3 KiB
TypeScript
Raw Normal View History

2021-09-26 18:21:29 +02:00
import ScriptUtils from "./ScriptUtils";
import {mkdirSync, writeFileSync} from "fs";
import {FixLegacyTheme, UpdateLegacyLayer} from "../Models/ThemeConfig/Conversion/LegacyJsonConvert";
import Translations from "../UI/i18n/Translations";
import {Translation} from "../UI/i18n/Translation";
import {LayerConfigJson} from "../Models/ThemeConfig/Json/LayerConfigJson";
import {LayoutConfigJson} from "../Models/ThemeConfig/Json/LayoutConfigJson";
2021-09-26 18:21:29 +02:00
/*
* This script reads all theme and layer files and reformats them inplace
* Use with caution, make a commit beforehand!
2021-09-26 19:56:40 +02:00
*/
const t : Translation = Translations.t.general.add.addNew
t.OnEveryLanguage((txt, ln) => {
console.log(ln, txt)
return txt
})
const articles = {
2022-04-03 03:10:06 +02:00
/* de: "eine",
es: 'una',
fr: 'une',
it: 'una',
nb_NO: 'en',
nl: 'een',
pt: 'uma',
2022-04-03 03:10:06 +02:00
pt_BR : 'uma',//*/
}
function addArticleToPresets(layerConfig: {presets?: {title: any}[]}){
2022-04-03 03:10:06 +02:00
//*
if(layerConfig.presets === undefined){
return
}
for (const preset of layerConfig.presets) {
preset.title = new Translation(preset.title, "autofix")
.OnEveryLanguage((txt, lang) => {
2022-04-03 03:10:06 +02:00
let article = articles[lang]
if(lang === "en"){
if(["a","e","u","o","i"].some(vowel => txt.toLowerCase().startsWith(vowel))) {
article = "an"
}else{
article = "a"
}
}
if(article === undefined){
return txt;
}
2022-04-03 03:10:06 +02:00
if(txt.startsWith(article+" ")){
return txt;
}
return article +" " + txt.toLowerCase();
})
.translations
}
//*/
}
function extractInlineLayer(theme: LayoutConfigJson){
for (let i = 0; i < theme.layers.length; i++){
const layer = theme.layers[i];
if(typeof layer === "string"){
continue
}
if(layer["override"] !== undefined){
continue
}
const l = <LayerConfigJson> layer
mkdirSync("./assets/layers/"+l.id)
writeFileSync("./assets/layers/"+l.id+"/"+l.id+".json", JSON.stringify(l, null, " "))
theme.layers[i] = l.id
}
}
2021-09-26 19:56:40 +02:00
const layerFiles = ScriptUtils.getLayerFiles();
for (const layerFile of layerFiles) {
2021-11-21 03:48:05 +01:00
try {
const fixed =<LayerConfigJson> new UpdateLegacyLayer().convertStrict(layerFile.parsed, "While linting " + layerFile.path);
addArticleToPresets(fixed)
2021-12-21 18:35:31 +01:00
writeFileSync(layerFile.path, JSON.stringify(fixed, null, " "))
2021-11-21 03:48:05 +01:00
} catch (e) {
console.error("COULD NOT LINT LAYER" + layerFile.path + ":\n\t" + e)
}
2021-09-26 19:56:40 +02:00
}
2021-09-26 19:59:51 +02:00
2021-09-26 19:56:40 +02:00
const themeFiles = ScriptUtils.getThemeFiles()
for (const themeFile of themeFiles) {
2021-11-21 03:48:05 +01:00
try {
2022-02-09 03:48:55 +01:00
const fixed = new FixLegacyTheme().convertStrict(themeFile.parsed, "While linting " + themeFile.path);
for (const layer of fixed.layers) {
if(layer["presets"] !== undefined){
addArticleToPresets(<any> layer)
}
}
// extractInlineLayer(fixed)
2021-12-21 18:35:31 +01:00
writeFileSync(themeFile.path, JSON.stringify(fixed, null, " "))
2021-11-21 03:48:05 +01:00
} catch (e) {
console.error("COULD NOT LINT THEME" + themeFile.path + ":\n\t" + e)
}
2021-09-26 19:58:11 +02:00
}