From 6d2efcecaa0d0ad9eab2bd31c61cbee8d08128d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Rodrigo?= Date: Sun, 4 Jul 2021 16:27:31 +0000 Subject: [PATCH] Enable Name_Multilingual in Spain #1285 --- osmose_config.py | 8 +++---- plugins/Name_Multilingual.py | 44 +++++++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/osmose_config.py b/osmose_config.py index bb6009e74..16b68de39 100644 --- a/osmose_config.py +++ b/osmose_config.py @@ -1503,7 +1503,7 @@ class gen(default_country): es_comm("andalucia", 349044, "ES-AN", proj=32629) es_comm("aragon", 349045, "ES-AR", proj=32630) -es_comm("asturias", 349033, "ES-AS", proj=32629, language=["es", "ast"]) +es_comm("asturias", 349033, "ES-AS", proj=32629, language=["es", "ast"], multilingual_style='sp_ast') es_comm("illes_balears", 348981, "ES-IB", proj=32630, language="ca") es_comm("cantabria", 349013, "ES-CB", proj=32630) es_comm("castilla_la_mancha", 349052, "ES-CM", proj=32630) @@ -1511,11 +1511,11 @@ class gen(default_country): es_comm("catalunya", 349053, "ES-CT", proj=32630, language="ca") es_comm("comunitat_valenciana", 349043, "ES-VC", proj=32630, language=["ca", "es"]) es_comm("extremadura", 349050, "ES-EX", proj=32629) -es_comm("galicia", 349036, "ES-GA", proj=32629, language=["es", "gl"]) +es_comm("galicia", 349036, "ES-GA", proj=32629, language=["gl", "es"]) es_comm("la_rioja", 348991, "ES-RI", proj=32630) es_comm("comunidad_de_madrid", 349055, "ES-MD", proj=32630) -es_comm("comunidad_foral_de_navarra", 349027, "ES-NC", proj=32630, language=["es", "eu"]) -es_comm("euskadi", 349042, "ES-PV", proj=32630, language=["eu", "es"]) +es_comm("comunidad_foral_de_navarra", 349027, "ES-NC", proj=32630, language=["es", "eu"], multilingual_style='sp_eu') +es_comm("euskadi", 349042, "ES-PV", proj=32630, language=["eu", "es"], multilingual_style='sp_eu') es_comm("region_de_murcia", 349047, "ES-MC", proj=32630) es_comm("canarias", 349048, "ES-CN", proj=32628, area="africa") diff --git a/plugins/Name_Multilingual.py b/plugins/Name_Multilingual.py index b61e34ec5..61ea84123 100644 --- a/plugins/Name_Multilingual.py +++ b/plugins/Name_Multilingual.py @@ -45,6 +45,33 @@ def init(self, logger): {"name": tags["name:"+lang[1]].strip() + " - " + tags["name:"+lang[0].strip()]}, ] if tags.get("name:"+lang[0]) and tags.get("name:"+lang[1]) and tags["name:"+lang[0]].strip() != tags["name:"+lang[1]].strip() else [{"name": tags.get("name:"+lang[0], tags.get("name:"+lang[1])).strip()}] self.split = self.split_be + elif style == "sp_eu": + def aggregator(tags): + name = tags.get("name") + if name is not None and ("-" in name or "(" in name): + return [] + separator = " / " if name is None or " / " in name else "/" + return [ + {"name": tags["name:"+lang[0]].strip()}, + {"name": tags["name:"+lang[1]].strip()}, + {"name": tags["name:"+lang[0]].strip() + separator + tags["name:"+lang[1].strip()]}, + {"name": tags["name:"+lang[1]].strip() + separator + tags["name:"+lang[0].strip()]}, + ] if tags.get("name:"+lang[0]) and tags.get("name:"+lang[1]) and tags["name:"+lang[0]].strip() != tags["name:"+lang[1]].strip() else [{"name": tags.get("name:"+lang[0], tags.get("name:"+lang[1])).strip()}] + self.aggregator = aggregator + self.split = self.split_sp_eu + elif style == "sp_ast": + def aggregator(tags): + name = tags.get("name") + if name is not None and ("-" in name or "(" in name): + return [] + separator = " / " if name is None or " / " in name else "/" + return [ + {"name": tags["name:"+lang[0]].strip()}, + {"name": tags["name:"+lang[1]].strip()}, + {"name": tags["name:"+lang[0]].strip() + separator + tags["name:"+lang[1].strip()]}, + ] if tags.get("name:"+lang[0]) and tags.get("name:"+lang[1]) and tags["name:"+lang[0]].strip() != tags["name:"+lang[1]].strip() else [{"name": tags.get("name:"+lang[0], tags.get("name:"+lang[1])).strip()}] + self.aggregator = aggregator + self.split = self.split_sp_ast elif style == "xk": self.aggregator = lambda tags: [ {"name": tags["name:"+lang[0]].strip()}, @@ -128,8 +155,8 @@ def way(self, data, tags, nds): def relation(self, data, tags, members): return self.node(data, tags) - def split_be(self, name): - s = list(map(lambda a: a.strip(), name.split(' - '))) + def split_delimitor(self, name, delimitor, ordered): + s = list(map(lambda a: a.strip(), name.split(delimitor))) ret = [] if len(s) == 1: for (lang, regex_) in self.lang_regex_script: @@ -138,10 +165,21 @@ def split_be(self, name): elif len(s) == 2: if self.lang_regex_script[0][1].match(s[0]) and self.lang_regex_script[1][1].match(s[1]): ret.append({"name:" + self.lang[0]: s[0], "name:" + self.lang[1]: s[1]}) - if self.lang_regex_script[1][1].match(s[0]) and self.lang_regex_script[0][1].match(s[1]): + if not ordered and self.lang_regex_script[1][1].match(s[0]) and self.lang_regex_script[0][1].match(s[1]): ret.append({"name:" + self.lang[0]: s[1], "name:" + self.lang[1]: s[0]}) return ret + def split_be(self, name): + return self.split_delimitor(name, ' - ', False) + + def split_sp_eu(self, name): + if "-" not in name and "(" not in name: + return self.split_delimitor(name, '/', False) + + def split_sp_ast(self, name): + if "-" not in name and "(" not in name: + return self.split_delimitor(name, '/', True) + char_common = regex.compile(r"[\p{Common}]", flags=regex.V1) char_ma = { 'fr': regex.compile(r"[{0}]".format(gen_regex(language2scripts['fr'])), flags=regex.V1),