@@ -50,13 +50,39 @@ def aggregator(tags):
5050 name = tags .get ("name" )
5151 if name is not None and ("-" in name or "(" in name ):
5252 return []
53- separator = " / " if name is None or " / " in name else "/"
54- return [
55- {"name" : tags ["name:" + lang [0 ]].strip ()},
56- {"name" : tags ["name:" + lang [1 ]].strip ()},
57- {"name" : tags ["name:" + lang [0 ]].strip () + separator + tags ["name:" + lang [1 ].strip ()]},
58- {"name" : tags ["name:" + lang [1 ]].strip () + separator + tags ["name:" + lang [0 ].strip ()]},
59- ] 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 ()}]
53+ separator = " / "
54+
55+ str1 = tags .get ("name:" + lang [0 ])
56+ str2 = tags .get ("name:" + lang [1 ])
57+
58+ combined = self .merge_sp_eu (str1 , str2 )
59+
60+ value = []
61+
62+ if str1 and not str2 :
63+ value .append ({"name" : str1 .strip ()})
64+
65+ if str2 and not str1 :
66+ value .append ({"name" : str2 .strip ()})
67+
68+ if str1 and str2 and not combined :
69+ value .append ({"name" : str1 .strip () + separator + str2 .strip ()})
70+ value .append ({"name" : str2 .strip () + separator + str1 .strip ()})
71+
72+ if combined :
73+ value .append ({"name" : combined })
74+
75+ if name and str1 and name != str1 and separator not in name :
76+ namestr1 = self .merge_sp_eu (name , str1 )
77+ value .append ({"name" : namestr1 or name .strip () + separator + str1 .strip (), f"name:{ lang [1 ]} " : name })
78+ value .append ({"name" : namestr1 or str1 .strip () + separator + name .strip (), f"name:{ lang [1 ]} " : name })
79+
80+ if name and str2 and name != str2 and separator not in name :
81+ namestr2 = self .merge_sp_eu (name , str2 ) if separator not in name else None
82+ value .append ({"name" : namestr2 or name .strip () + separator + str2 .strip (), f"name:{ lang [0 ]} " : name })
83+ value .append ({"name" : namestr2 or str2 .strip () + separator + name .strip (), f"name:{ lang [0 ]} " : name })
84+
85+ return value
6086 self .aggregator = aggregator
6187 self .split = self .split_sp_eu
6288 elif style == "sp_ast" :
@@ -97,6 +123,9 @@ def aggregator(tags):
97123 self .lang_regex_script = list (map (lambda l : [l , regex .compile (r"^[\p{{Common}}{0}]+$" .format (gen_regex (language2scripts [l ])), flags = regex .V1 )], lang ))
98124
99125 def filter_fix_already_existing (self , names , s ):
126+ if self .father .config .options .get ("multilingual_style" ) == "sp_eu" :
127+ return []
128+
100129 return list (filter (
101130 lambda d : len (d ) > 0 ,
102131 map (
@@ -177,6 +206,13 @@ def split_sp_eu(self, name):
177206 if "-" not in name and "(" not in name :
178207 return self .split_delimitor (name , '/' , False )
179208
209+ def merge_sp_eu (self , str1 , str2 ):
210+ if not str1 or not str2 :
211+ return None
212+ if str1 .split ()[1 :] != str2 .split ()[:- 1 ]:
213+ return None
214+ return str1 .split ()[0 ] + " " + str2
215+
180216 def split_sp_ast (self , name ):
181217 if "-" not in name and "(" not in name :
182218 return self .split_delimitor (name , '/' , True )
@@ -348,3 +384,27 @@ class father:
348384
349385 assert not self .p .way (None , {"name" : u"Avenue جادة" , "name:fr" : u"Avenue" , "name:ar" : u"جادة" }, None )
350386 assert not self .p .way (None , {"name" : u"Avenue 17 / جادة 17" , "name:fr" : u"Avenue 17" , "name:ar" : u"جادة 17" }, None )
387+
388+ def test_eu (self ):
389+ TestPluginCommon .setUp (self )
390+ self .p = Name_Multilingual (None )
391+ class _config :
392+ options = {"language" : ["es" , "eu" ], "multilingual_style" : "sp_eu" }
393+ class father :
394+ config = _config ()
395+ self .p .father = father ()
396+ self .p .init (None )
397+
398+ assert not self .p .way (None , {"name" : "Carretera Ollaretxe errepidea" , "name:es" : "Carretera Ollaretxe" , "name:eu" : "Ollaretxe errepidea" }, None )
399+ assert not self .p .way (None , {"name" : "Kale Nagusia / Calle Mayor" , "name:es" : "Calle Mayor" , "name:eu" : "Kale Nagusia" }, None )
400+ assert not self .p .way (None , {"name" : "Vicente Blasco Ibañez kalea / Calle Vicente Blasco Ibáñez" , "name:es" : "Calle Vicente Blasco Ibáñez" , "name:eu" : "Vicente Blasco Ibañez kalea" }, None )
401+ assert not self .p .way (None , {"name" : "Calle San Diego kalea" , "name:es" : "Calle San Diego" , "name:eu" : "San Diego kalea" }, None )
402+ assert not self .p .way (None , {"name" : "Calle Islas Canarias / Kanariar Uharteen kalea" , "name:es" : "Calle Islas Canarias" , "name:eu" : "Kanariar Uharteen kalea" }, None )
403+ assert not self .p .way (None , {"name" : "Vicente Blasco Ibañez kalea / Calle Vicente Blasco Ibáñez" , "name:es" : "" , "name:eu" : "" }, None )
404+ assert not self .p .way (None , {"name" : "Calle San Diego" }, None )
405+ assert self .p .way (None , {"name" : "Calle Islas Canarias / Kanariar Uharteen kalea" , "name:es" : "Calle Canarias" , "name:eu" : "Kanarias kalea" }, None )
406+ assert self .p .way (None , {"name" : "Calle San Diego" , "name:eu" : "San Diego kalea" }, None )
407+ assert self .p .way (None , {"name" : "Kale Nagusia" , "name:es" : "Calle Mayor" }, None )
408+ assert self .p .way (None , {"name" : "Carretera Ollaretxe" , "name:es" : "Carretera Ollaretxe" , "name:eu" : "Ollaretxe errepidea" }, None )
409+ assert self .p .way (None , {"name:eu" : "San Diego kalea" }, None )
410+ assert self .p .way (None , {"name:es" : "Calle Mayor" }, None )
0 commit comments