Subject: [PATCH] Cycleway opposite
---
Index: resources/data/validator/deprecated.mapcss
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/resources/data/validator/deprecated.mapcss b/resources/data/validator/deprecated.mapcss
--- a/resources/data/validator/deprecated.mapcss	(revision 19129)
+++ b/resources/data/validator/deprecated.mapcss	(date 1720300375672)
@@ -2530,4 +2530,40 @@
   suggestAlternative: "{1.key}";
 }
 
+/* deprecate cycleway=opposite* family, see #23770 */
+way[cycleway=opposite],
+way[cycleway:left=opposite],
+way[cycleway:right=opposite],
+way[cycleway:both=opposite] {
+  throwWarning: tr("{0} is deprecated", "{0.tag}");
+  group: tr("deprecated tagging");
+  fixAdd: "oneway:bicycle=no";
+  fixRemove: "{0.key}";
+  /* No automated addition of e.g. cycleway:both=no for cycleway=opposite as it may already be tagged with e.g. cycleway:left=lane */
+}
+way[cycleway:left][cycleway:left^=opposite_],
+way[cycleway:right][cycleway:right^=opposite_] {
+  throwWarning: tr("{0} is deprecated", "{0.tag}");
+  group: tr("deprecated tagging");
+  /* No fix: unambiguous definition */
+}
+way[cycleway][cycleway^=opposite_]:righthandtraffic {
+  throwWarning: tr("{0} is deprecated", "{0.tag}");
+  group: tr("deprecated tagging");
+  fixAdd: "oneway:bicycle=no";
+  fixAdd: concat("cycleway:right=", any(tag("cycleway:right"), "no"));
+  fixAdd: concat("cycleway:left=", replace("{0.value}", "opposite_", ""));
+  fixAdd: "cycleway:left:oneway=-1";
+  fixRemove: "{0.key}";
+}
+way[cycleway][cycleway^=opposite_]!:righthandtraffic {
+  throwWarning: tr("{0} is deprecated", "{0.tag}");
+  group: tr("deprecated tagging");
+  fixAdd: "oneway:bicycle=no";
+  fixAdd: concat("cycleway:left=", any(tag("cycleway:left"), "no"));
+  fixAdd: concat("cycleway:right=", replace("{0.value}", "opposite_", ""));
+  fixAdd: "cycleway:right:oneway=-1";
+  fixRemove: "{0.key}";
+}
+
 /* When tags are deprecated they should be added to ignoretags.cfg too. */
Index: resources/data/validator/ignoretags.cfg
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/resources/data/validator/ignoretags.cfg b/resources/data/validator/ignoretags.cfg
--- a/resources/data/validator/ignoretags.cfg	(revision 19129)
+++ b/resources/data/validator/ignoretags.cfg	(date 1720300469876)
@@ -258,6 +258,9 @@
 K:site=mall
 K:landform=dune_system
 K:noaddress=yes
+K:cycleway=opposite
+K:cycleway=opposite_lane
+K:cycleway=opposite_track
 ;
 ; Highway Key/Value Pairs
 ;
Index: resources/data/defaultpresets.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/resources/data/defaultpresets.xml b/resources/data/defaultpresets.xml
--- a/resources/data/defaultpresets.xml	(revision 19129)
+++ b/resources/data/defaultpresets.xml	(date 1720300293281)
@@ -1298,7 +1298,7 @@
         <item name="Cycle Lane/Track" icon="presets/transport/way/cycle_lane_track.svg" type="way,closedway" preset_name_label="true">
             <link wiki="Bicycle" />
             <space />
-            <combo key="cycleway" text="Cycleway" values_context="cycleway" values="lane,track,opposite_lane,opposite_track,opposite,share_busway,shared_lane,separate" match="key" />
+            <combo key="cycleway" text="Cycleway" values_context="cycleway" values="lane,track,share_busway,shared_lane,separate" match="key" />
             <combo key="cycleway:left" text="Cycleway left" values_context="cycleway" values="lane,track,share_busway,shared_lane,separate" match="key" />
             <combo key="cycleway:right" text="Cycleway right" values_context="cycleway" values="lane,track,share_busway,shared_lane,separate" match="key" />
             <check key="oneway:bicycle" text="Oneway (bicycle)" />
