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 private static expressions: Record DataDrivenPropertyValueSpecification> = { "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) { 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 { 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 { return [ "coalesce", ["get", "name:" + language], ["get", "name"], ["get", "name:en"] ] } private static roadLabelExpression(language: string): DataDrivenPropertyValueSpecification { 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) }) } }