diff --git a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java index d365632b180..611377952c6 100644 --- a/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java +++ b/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java @@ -93,6 +93,7 @@ public static void unregisterFormatHook(NameFormatterHook hook) { private static final String[] DEFAULT_NAMING_TAGS_FOR_RELATIONS = { "name", "ref", + "from-to", // "amenity", "landuse", @@ -357,7 +358,7 @@ private static StringBuilder formatRelationNameAndType(IRelation relation, St result.append(" (").append(relationName).append(", "); } else { preset.nameTemplate.appendText(result, (TemplateEngineDataProvider) relation); - result.append('('); + result.append(" ("); } return result; } @@ -412,6 +413,10 @@ public Comparator> getRelationComparator() { private static String getRelationTypeName(IRelation relation) { // see https://josm.openstreetmap.de/browser/osm/applications/editors/josm/i18n/specialmessages.java String name = trc("Relation type", relation.get("type")); + if (relation.hasTag("type", "route") && relation.hasKey("route")) { + String route = trc("Route type", relation.get("route")); + name = route + " " + name; + } if (name == null) { name = relation.hasKey("public_transport") ? tr("public transport") : null; } @@ -447,6 +452,12 @@ private static String getRelationTypeName(IRelation relation) { private static String getNameTagValue(IRelation relation, String nameTag) { if ("name".equals(nameTag)) { return formatLocalName(relation); + } else if ("from-to".equals(nameTag)) { + String from = trcLazy("from", I18n.escape(relation.get("from"))); + String to = trcLazy("to", I18n.escape(relation.get("to"))); + if (from != null || to != null) + return (from != null ? from : "?") + "-" + (to != null ? to : "?"); + return null; } else if (":LocationCode".equals(nameTag)) { return relation.keys() .filter(m -> m.endsWith(nameTag)) diff --git a/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java b/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java index 3c1ae6e431c..d813b348809 100644 --- a/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java +++ b/test/unit/org/openstreetmap/josm/data/osm/DefaultNameFormatterTest.java @@ -102,8 +102,16 @@ void testRelationName() { getFormattedRelationName("X=Y")); assertEquals("relation (\"Foo\", 0 members)", getFormattedRelationName("name=Foo")); - assertEquals("route (\"123\", 0 members)", + assertEquals("tram route (\"123\", 0 members)", getFormattedRelationName("type=route route=tram ref=123")); + assertEquals("bus route (\"foo\", 0 members)", + getFormattedRelationName("type=route route=bus from=a to=b name=foo")); + assertEquals("bus route (\"a-b\", 0 members)", + getFormattedRelationName("type=route route=bus from=a to=b")); + assertEquals("bus route (\"a-?\", 0 members)", + getFormattedRelationName("type=route route=bus from=a")); + assertEquals("bus route (\"?-b\", 0 members)", + getFormattedRelationName("type=route route=bus to=b")); assertEquals("multipolygon (\"building\", 0 members)", getFormattedRelationName("type=multipolygon building=yes")); assertEquals("multipolygon (\"123\", 0 members)",