MapComplete/src/UI/Map/ProtomapsLanguageSupport.ts

5350 lines
194 KiB
TypeScript

import { Store } from "../../Logic/UIEventSource"
import {
DataDrivenPropertyValueSpecification,
LayerSpecification,
Map as MlMap,
SymbolLayerSpecification
} from "maplibre-gl"
import Locale from "../i18n/Locale"
import { Utils } from "../../Utils"
export class ProtomapsLanguageSupport {
private _map: Store<MlMap>
private static expressions: Record<string, (language: string) => DataDrivenPropertyValueSpecification<string>> =
{
"places_country": language => [
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"name:en"
]
],
{}
],
"places_region": language => [
"step",
[
"zoom"
],
[
"get",
"name:short"
],
6,
[
"case",
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"!",
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"has",
"script"
],
[
"case",
[
"any",
[
"is-supported-script",
[
"get",
"name"
]
],
[
"has",
"pgf:name"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"name:en"
]
],
{},
"\n",
{},
[
"case",
[
"all",
[
"!",
[
"has",
"name:" + language
]
],
[
"has",
"name:en"
],
[
"!",
[
"has",
"script"
]
]
],
"",
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"get",
"name:en"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{}
]
],
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"has",
"script2"
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
],
[
"has",
"script3"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"!",
[
"has",
"script"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"!",
[
"has",
"script2"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
]
]
],
"places_locality": language => [
"case",
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"!",
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"has",
"script"
],
[
"case",
[
"any",
[
"is-supported-script",
[
"get",
"name"
]
],
[
"has",
"pgf:name"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"name:en"
]
],
{},
"\n",
{},
[
"case",
[
"all",
[
"!",
[
"has",
"name:" + language
]
],
[
"has",
"name:en"
],
[
"!",
[
"has",
"script"
]
]
],
"",
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"get",
"name:en"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{}
]
],
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"has",
"script2"
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
],
[
"has",
"script3"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"!",
[
"has",
"script"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"!",
[
"has",
"script2"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
]
],
"places_subplace": language => [
"case",
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"!",
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"has",
"script"
],
[
"case",
[
"any",
[
"is-supported-script",
[
"get",
"name"
]
],
[
"has",
"pgf:name"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"name:en"
]
],
{},
"\n",
{},
[
"case",
[
"all",
[
"!",
[
"has",
"name:" + language
]
],
[
"has",
"name:en"
],
[
"!",
[
"has",
"script"
]
]
],
"",
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"get",
"name:en"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{}
]
],
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"has",
"script2"
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
],
[
"has",
"script3"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"!",
[
"has",
"script"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"!",
[
"has",
"script2"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
]
],
"pois": language => [
"case",
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"!",
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"has",
"script"
],
[
"case",
[
"any",
[
"is-supported-script",
[
"get",
"name"
]
],
[
"has",
"pgf:name"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"name:en"
]
],
{},
"\n",
{},
[
"case",
[
"all",
[
"!",
[
"has",
"name:" + language
]
],
[
"has",
"name:en"
],
[
"!",
[
"has",
"script"
]
]
],
"",
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"get",
"name:en"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{}
]
],
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"has",
"script2"
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
],
[
"has",
"script3"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"!",
[
"has",
"script"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"!",
[
"has",
"script2"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
]
],
"pois_peak": language => ProtomapsLanguageSupport.simpleExpression(language),
"water_label_lakes": language => ProtomapsLanguageSupport.waterwayExpression(language),
"water_label_ocean": language => ProtomapsLanguageSupport.waterwayExpression(language),
"water_waterway_label": language => ProtomapsLanguageSupport.waterwayExpression(language),
"roads_labels_minor": language => ProtomapsLanguageSupport.roadLabelExpression(language),
"roads_labels_major": language => ProtomapsLanguageSupport.roadLabelExpression(language)
}
constructor(map: Store<MlMap>) {
this._map = map
map.addCallbackAndRunD(async (map) => {
this.update()
while (!map.isStyleLoaded()) {
await Utils.waitFor(250)
}
this.update()
map.on("styledata", () => {
this.update()
})
})
Locale.language.addCallback(() => this.update())
}
private _isUpdating = false
public update() {
ProtomapsLanguageSupport._update(this._map?.data, Locale.language.data)
}
private static waterwayExpression(language: string): DataDrivenPropertyValueSpecification<string> {
return ["case",
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"!",
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"has",
"script"
],
[
"case",
[
"any",
[
"is-supported-script",
[
"get",
"name"
]
],
[
"has",
"pgf:name"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"name:en"
]
],
{},
"\n",
{},
[
"case",
[
"all",
[
"!",
[
"has",
"name:" + language
]
],
[
"has",
"name:en"
],
[
"!",
[
"has",
"script"
]
]
],
"",
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"get",
"name:en"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{}
]
],
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"has",
"script2"
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
],
[
"has",
"script3"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"!",
[
"has",
"script"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"!",
[
"has",
"script2"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
]
]
}
private static simpleExpression(language: string): DataDrivenPropertyValueSpecification<string> {
return [
"coalesce",
["get", "name:" + language],
["get", "name"],
["get", "name:en"]
]
}
private static roadLabelExpression(language: string): DataDrivenPropertyValueSpecification<string> {
return [
"case",
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"!",
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"has",
"script"
],
[
"case",
[
"any",
[
"is-supported-script",
[
"get",
"name"
]
],
[
"has",
"pgf:name"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"name:en"
]
],
{},
"\n",
{},
[
"case",
[
"all",
[
"!",
[
"has",
"name:" + language
]
],
[
"has",
"name:en"
],
[
"!",
[
"has",
"script"
]
]
],
"",
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"get",
"name:en"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{}
]
],
[
"all",
[
"any",
[
"has",
"name"
],
[
"has",
"pgf:name"
]
],
[
"any",
[
"has",
"name2"
],
[
"has",
"pgf:name2"
]
],
[
"!",
[
"any",
[
"has",
"name3"
],
[
"has",
"pgf:name3"
]
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"has",
"script2"
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
],
[
"case",
[
"all",
[
"has",
"script"
],
[
"has",
"script2"
],
[
"has",
"script3"
]
],
[
"format",
[
"get",
"name:" + language
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"case",
[
"!",
[
"has",
"script"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"!",
[
"has",
"script2"
]
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script3"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
],
[
"format",
[
"coalesce",
[
"get",
"name:" + language
],
[
"get",
"pgf:name3"
],
[
"get",
"name3"
]
],
{},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name"
],
[
"get",
"name"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
},
"\n",
{},
[
"coalesce",
[
"get",
"pgf:name2"
],
[
"get",
"name2"
]
],
{
"text-font": [
"case",
[
"==",
[
"get",
"script2"
],
"Devanagari"
],
[
"literal",
[
"Noto Sans Devanagari Regular v1"
]
],
[
"literal",
[
"Noto Sans Regular"
]
]
]
}
]
]
]
]
}
private static _update(map: MlMap, language: string) {
if (!map) {
return
}
if (!map.isStyleLoaded()) {
map.once("styledata", () => {
ProtomapsLanguageSupport._update(map, language)
})
return
}
const style = map.getStyle();
(style.layers ?? []).forEach((layer: LayerSpecification) => {
if (layer.type !== "symbol") {
return
}
const symbolLayer: SymbolLayerSpecification = layer
if (symbolLayer.source !== "protomaps") {
return
}
const tf = symbolLayer.layout?.["text-field"]
if (tf === undefined) {
return
}
const newExpressionF = ProtomapsLanguageSupport.expressions[layer.id]
if (!newExpressionF) {
console.log(">>> No function found for", layer.id)
return
}
const newExpression = newExpressionF(language)
if (!newExpression) {
return
}
const oldProperty = map.getLayoutProperty(layer.id, "text-field")
if (JSON.stringify(oldProperty) === JSON.stringify(newExpression)) {
return
}
map.setLayoutProperty(layer.id, "text-field", newExpression)
})
}
}