source: josm/trunk/resources/data/validator/deprecated.mapcss@ 18537

Last change on this file since 18537 was 18535, checked in by Klumbumbus, 2 years ago

see #21836 - Add some power/voltage validation rules:

  • voltage:primary/secondary/tertiary without transformer
  • voltage:primary/secondary/tertiary on a way
  • voltage:primary/secondary/tertiary not in correct number format (should be in volts with no units/delimiter/spaces)
  • don't warn about unknown numeric values of voltage:primary/secondary/tertiary
  • transformer together with voltage on nodes
  • voltage:secondary is lower than voltage:primary on transformer=generator
  • deprecate voltage-high and voltage-low in favor of voltage:primary/secondary
  • Property svn:eol-style set to native
File size: 73.8 KB
Line 
1*[barrier=wire_fence] {
2 throwWarning: tr("{0} is deprecated", "{0.tag}");
3 group: tr("deprecated tagging");
4 suggestAlternative: "barrier=fence + fence_type=chain_link";
5 fixAdd: "barrier=fence";
6 fixAdd: "fence_type=chain_link";
7 assertMatch: "way barrier=wire_fence";
8 assertNoMatch: "way barrier=fence";
9}
10
11*[barrier=wood_fence] {
12 throwWarning: tr("{0} is deprecated", "{0.tag}");
13 suggestAlternative: "barrier=fence + fence_type=wood";
14 group: tr("deprecated tagging");
15 fixAdd: "barrier=fence";
16 fixAdd: "fence_type=wood";
17}
18
19node[highway=ford] {
20 throwWarning: tr("{0} is deprecated", "{0.tag}");
21 suggestAlternative: "ford=yes";
22 group: tr("deprecated tagging");
23 fixRemove: "highway";
24 fixAdd: "ford=yes";
25}
26way[highway=ford] {
27 throwWarning: tr("{0} is deprecated", "{0.tag}");
28 suggestAlternative: "highway=* + ford=yes";
29 group: tr("deprecated tagging");
30}
31
32/* from http://wiki.openstreetmap.org/wiki/Deprecated_features */
33way[class] {
34 throwWarning: tr("{0} is deprecated", "{0.key}");
35 suggestAlternative: "highway";
36 group: tr("deprecated tagging");
37}
38*[highway=stile] {
39 throwWarning: tr("{0} is deprecated", "{0.tag}");
40 suggestAlternative: "barrier=stile";
41 group: tr("deprecated tagging");
42 fixRemove: "highway";
43 fixAdd: "barrier=stile";
44}
45*[highway=incline] {
46 throwWarning: tr("{0} is deprecated", "{0.tag}");
47 suggestAlternative: "incline";
48 group: tr("deprecated tagging");
49}
50*[highway=incline_steep] {
51 throwWarning: tr("{0} is deprecated", "{0.tag}");
52 suggestAlternative: "incline";
53 group: tr("deprecated tagging");
54}
55*[highway=unsurfaced] {
56 throwWarning: tr("{0} is deprecated", "{0.tag}");
57 suggestAlternative: "highway=* + surface=unpaved";
58 group: tr("deprecated tagging");
59 fixAdd: "highway=road";
60 fixAdd: "surface=unpaved";
61}
62*[landuse=wood] {
63 throwWarning: tr("{0} is deprecated", "{0.tag}");
64 suggestAlternative: "landuse=forest";
65 suggestAlternative: "natural=wood";
66 group: tr("deprecated tagging");
67}
68*[natural=marsh] {
69 throwWarning: tr("{0} is deprecated", "{0.tag}");
70 suggestAlternative: "natural=wetland + wetland=marsh";
71 group: tr("deprecated tagging");
72 fixAdd: "natural=wetland";
73 fixAdd: "wetland=marsh";
74}
75*[highway=byway] {
76 throwWarning: tr("{0} is deprecated", "{0.tag}");
77 group: tr("deprecated tagging");
78}
79*[power_source] {
80 throwWarning: tr("{0} is deprecated", "{0.key}");
81 suggestAlternative: "generator:source";
82 group: tr("deprecated tagging");
83}
84*[power_rating] {
85 throwWarning: tr("{0} is deprecated", "{0.key}");
86 suggestAlternative: "generator:output";
87 group: tr("deprecated tagging");
88}
89
90*[shop=antique] {
91 throwWarning: tr("{0} is deprecated", "{0.tag}");
92 suggestAlternative: "shop=antiques";
93 group: tr("deprecated tagging");
94 fixAdd: "shop=antiques";
95}
96
97*[shop=bags] {
98 throwWarning: tr("{0} is deprecated", "{0.tag}");
99 suggestAlternative: "shop=bag";
100 group: tr("deprecated tagging");
101 fixAdd: "shop=bag";
102}
103
104/* #17527 */
105*[shop=fashion] {
106 throwWarning: tr("{0} is deprecated", "{0.tag}");
107 suggestAlternative: "shop=clothes";
108 group: tr("deprecated tagging");
109 fixAdd: "shop=clothes";
110}
111
112*[shop=organic] {
113 throwWarning: tr("{0} is deprecated", "{0.tag}");
114 suggestAlternative: "shop=* + organic=yes";
115 suggestAlternative: "shop=* + organic=only";
116 group: tr("deprecated tagging");
117}
118
119*[shop=pets] {
120 throwWarning: tr("{0} is deprecated", "{0.tag}");
121 suggestAlternative: "shop=pet";
122 group: tr("deprecated tagging");
123 fixAdd: "shop=pet";
124}
125
126*[shop=pharmacy] {
127 throwWarning: tr("{0} is deprecated", "{0.tag}");
128 suggestAlternative: "amenity=pharmacy";
129 group: tr("deprecated tagging");
130 fixChangeKey: "shop => amenity";
131}
132
133*[bicycle_parking=sheffield] {
134 throwWarning: tr("{0} is deprecated", "{0.tag}");
135 suggestAlternative: "bicycle_parking=stands";
136 group: tr("deprecated tagging");
137 fixAdd: "bicycle_parking=stands";
138}
139
140*[amenity=emergency_phone] {
141 throwWarning: tr("{0} is deprecated", "{0.tag}");
142 suggestAlternative: "emergency=phone";
143 group: tr("deprecated tagging");
144 fixRemove: "amenity";
145 fixAdd: "emergency=phone";
146}
147
148/* #8132 */
149*[sport=gaelic_football] {
150 throwWarning: tr("{0} is deprecated", "{0.tag}");
151 suggestAlternative: "sport=gaelic_games";
152 group: tr("deprecated tagging");
153 fixAdd: "sport=gaelic_games";
154}
155
156/* #8847, #8961 */
157*[power=station] {
158 throwWarning: tr("{0} is deprecated", "{0.tag}");
159 suggestAlternative: "power=plant";
160 suggestAlternative: "power=substation";
161 group: tr("deprecated tagging");
162}
163
164*[power=sub_station] {
165 throwWarning: tr("{0} is deprecated", "{0.tag}");
166 suggestAlternative: "power=substation";
167 group: tr("deprecated tagging");
168 fixAdd: "power=substation";
169}
170
171*[location=rooftop] {
172 throwWarning: tr("{0} is deprecated", "{0.tag}");
173 suggestAlternative: "location=roof";
174 group: tr("deprecated tagging");
175 fixAdd: "location=roof";
176}
177
178*[generator:location] {
179 throwWarning: tr("{0} is deprecated", "{0.key}");
180 suggestAlternative: "location";
181 group: tr("deprecated tagging");
182 fixChangeKey: "generator:location => location";
183}
184
185*[generator:method=dam] {
186 throwWarning: tr("{0} is deprecated", "{0.tag}");
187 suggestAlternative: "generator:method=water-storage";
188 group: tr("deprecated tagging");
189 fixAdd: "generator:method=water-storage";
190}
191
192*[generator:method=pumped-storage] {
193 throwWarning: tr("{0} is deprecated", "{0.tag}");
194 suggestAlternative: "generator:method=water-pumped-storage";
195 group: tr("deprecated tagging");
196 fixAdd: "generator:method=water-pumped-storage";
197}
198
199*[generator:method=pumping] {
200 throwWarning: tr("{0} is deprecated", "{0.tag}");
201 suggestAlternative: "generator:method=water-pumped-storage";
202 group: tr("deprecated tagging");
203 fixAdd: "generator:method=water-pumped-storage";
204}
205
206/* #8962 */
207*[fence_type=chain] {
208 throwWarning: tr("{0} is deprecated", "{0.tag}");
209 suggestAlternative: "barrier=chain";
210 suggestAlternative: "barrier=fence + fence_type=chain_link";
211 group: tr("deprecated tagging");
212}
213
214/* #9000 */
215*[building=entrance] {
216 throwWarning: tr("{0} is deprecated", "{0.tag}");
217 suggestAlternative: "entrance";
218 group: tr("deprecated tagging");
219}
220
221/* #9213 */
222*[board_type=board] {
223 throwWarning: tr("{0} is deprecated", "{0.tag}");
224 group: tr("deprecated tagging");
225 fixRemove: "board_type";
226}
227
228/* #8434 */
229*[man_made=measurement_station] {
230 throwWarning: tr("{0} is deprecated", "{0.tag}");
231 suggestAlternative: "man_made=monitoring_station";
232 group: tr("deprecated tagging");
233 fixAdd: "man_made=monitoring_station";
234}
235
236*[measurement=water_level] {
237 throwWarning: tr("{0} is deprecated", "{0.tag}");
238 suggestAlternative: "monitoring:water_level=yes";
239 group: tr("deprecated tagging");
240 fixRemove: "measurement";
241 fixAdd: "monitoring:water_level=yes";
242}
243
244*[measurement=weather] {
245 throwWarning: tr("{0} is deprecated", "{0.tag}");
246 suggestAlternative: "monitoring:weather=yes";
247 group: tr("deprecated tagging");
248 fixRemove: "measurement";
249 fixAdd: "monitoring:weather=yes";
250}
251
252*[measurement=seismic] {
253 throwWarning: tr("{0} is deprecated", "{0.tag}");
254 suggestAlternative: "monitoring:seismic_activity=yes";
255 group: tr("deprecated tagging");
256 fixRemove: "measurement";
257 fixAdd: "monitoring:seismic_activity=yes";
258}
259
260*[monitoring:river_level] {
261 throwWarning: tr("{0} is deprecated", "{0.key}");
262 suggestAlternative: "monitoring:water_level";
263 group: tr("deprecated tagging");
264 fixChangeKey: "monitoring:river_level => monitoring:water_level";
265}
266
267*[stay] {
268 throwWarning: tr("{0} is deprecated", "{0.key}");
269 suggestAlternative: "maxstay";
270 group: tr("deprecated tagging");
271 fixChangeKey: "stay => maxstay";
272}
273
274/* #9554 */
275*[emergency=aed] {
276 throwWarning: tr("{0} is deprecated", "{0.tag}");
277 suggestAlternative: "emergency=defibrillator";
278 group: tr("deprecated tagging");
279 fixAdd: "emergency=defibrillator";
280}
281
282/* from http://wiki.openstreetmap.org/wiki/Conditional_restrictions#Deprecated_tags */
283*[day_on][!restriction],
284*[day_off][!restriction],
285*[date_on][!restriction],
286*[date_off][!restriction],
287*[hour_on][!restriction],
288*[hour_off][!restriction] {
289 throwWarning: tr("{0} is deprecated", "{0.key}");
290 suggestAlternative: "*:conditional";
291 group: tr("deprecated tagging");
292 assertMatch: "node day_on=0-12";
293}
294
295/* #10000 */
296*[access=designated] {
297 throwWarning: tr("''{0}'' is meaningless, use more specific tags, e.g. ''{1}''", "access=designated", "bicycle=designated");
298 assertMatch: "way access=designated";
299}
300*[access=official] {
301 throwWarning: tr("''{0}'' does not specify the official mode of transportation, use ''{1}'' for example", "access=official", "bicycle=official");
302 assertMatch: "way access=official";
303}
304
305/* #10085 */
306*[fixme=yes], *[FIXME=yes] {
307 throwWarning: tr("{0}={1} is unspecific. Instead of ''{1}'' please give more information about what exactly should be fixed.", "{0.key}", "{0.value}");
308 assertMatch: "way fixme=yes";
309}
310
311*[name][name=~/^(?i)fixme$/] {
312 throwWarning: tr("Wrong usage of {0} tag. Remove {1}, because it is clear that the name is missing even without an additional tag.", "{0.key}", "{0.tag}");
313 fixRemove: "name";
314 assertMatch: "node name=fixme";
315 assertMatch: "node name=Fixme";
316 assertMatch: "node name=FIXME";
317 assertNoMatch: "node name=valid name";
318}
319
320*[note][note=~/^(?i)fixme$/] {
321 throwWarning: tr("{0} is unspecific. Instead use the key fixme with the information what exactly should be fixed in the value of fixme.", "{0.tag}");
322}
323
324/* #10107, #10108, #10929, #13391 - http://wiki.openstreetmap.org/wiki/Proposed_features/leaftype#Features.2FPages_affected */
325*[type=broad_leaved],
326*[type=broad_leafed] {
327 throwWarning: tr("{0} is deprecated", "{0.tag}");
328 suggestAlternative: "leaf_type=broadleaved";
329 group: tr("deprecated tagging");
330 fixRemove: "{0.key}";
331 fixAdd: "leaf_type=broadleaved";
332}
333*[wood=coniferous],
334*[type=coniferous],
335*[type=conifer] {
336 throwWarning: tr("{0} is deprecated", "{0.tag}");
337 suggestAlternative: "leaf_type=needleleaved";
338 group: tr("deprecated tagging");
339 fixRemove: "{0.key}";
340 fixAdd: "leaf_type=needleleaved";
341}
342*[wood=mixed] {
343 throwWarning: tr("{0} is deprecated", "{0.tag}");
344 suggestAlternative: "leaf_type=mixed";
345 group: tr("deprecated tagging");
346 fixRemove: "wood";
347 fixAdd: "leaf_type=mixed";
348}
349*[wood=evergreen],
350*[type=evergreen] {
351 throwWarning: tr("{0} is deprecated", "{0.tag}");
352 suggestAlternative: "leaf_cycle=evergreen";
353 group: tr("deprecated tagging");
354 fixRemove: "{0.key}";
355 fixAdd: "leaf_cycle=evergreen";
356}
357*[type=deciduous],
358*[type=deciduos] {
359 throwWarning: tr("{0} is deprecated", "{0.tag}");
360 suggestAlternative: "leaf_cycle=deciduous";
361 group: tr("deprecated tagging");
362 fixRemove: "type";
363 fixAdd: "leaf_cycle=deciduous";
364}
365*[wood=deciduous] {
366 throwWarning: tr("{0} is deprecated", "{0.tag}");
367 suggestAlternative: "leaf_type + leaf_cycle";
368 group: tr("deprecated tagging");
369}
370node[type=palm],
371way[type=palm] {
372 throwWarning: tr("{0} is deprecated", "{0.tag}");
373 suggestAlternative: "leaf_type";
374 suggestAlternative: "trees";
375 suggestAlternative: "species";
376 group: tr("deprecated tagging");
377}
378
379*[natural=land] {
380 throwWarning: tr("{0} is deprecated. Please use instead a multipolygon.", "{0.tag}");
381 group: tr("deprecated tagging");
382 assertMatch: "way natural=land";
383}
384
385/* #10447 - https://wiki.openstreetmap.org/wiki/Proposed_features/Bridge_types#Deprecated_bridge_key_values */
386*[bridge=causeway] {
387 throwWarning: tr("{0} is deprecated", "{0.tag}");
388 suggestAlternative: "ford=yes";
389 suggestAlternative: "bridge=low_water_crossing";
390 suggestAlternative: "embankment=yes";
391 group: tr("deprecated tagging");
392}
393*[bridge=swing] {
394 throwWarning: tr("{0} is deprecated", "{0.tag}");
395 suggestAlternative: "bridge:movable=swing";
396 suggestAlternative: "bridge:structure=simple-suspension";
397 group: tr("deprecated tagging");
398}
399*[bridge=suspension] {
400 throwWarning: tr("{0} is deprecated", "{0.tag}");
401 suggestAlternative: "bridge=yes + bridge:structure=suspension";
402 group: tr("deprecated tagging");
403 fixAdd: "bridge=yes";
404 fixAdd: "bridge:structure=suspension";
405}
406*[bridge=pontoon] {
407 throwWarning: tr("{0} is deprecated", "{0.tag}");
408 suggestAlternative: "bridge=yes + bridge:structure=floating";
409 group: tr("deprecated tagging");
410 fixAdd: "bridge=yes";
411 fixAdd: "bridge:structure=floating";
412}
413
414/* #10530 - Incorrect tag proposed in internal preset for years */
415*[fee=interval],
416*[lit=interval],
417*[supervised=interval] {
418 throwWarning: tr("{0} is deprecated. Please specify interval by using opening_hours syntax", "{0.tag}");
419 group: tr("deprecated tagging");
420}
421
422/* #10582 - JOSM supported this tag as "don't upload this" feature, before the introduction of upload flag at layer level */
423*[/josm\/ignore/] {
424 throwError: tr("{0} is deprecated. Please delete this object and use a private layer instead", "{0.key}");
425 group: tr("deprecated tagging");
426 fixDeleteObject: this;
427}
428
429/* #8281 */
430*[sport=diving] {
431 throwWarning: tr("{0} is deprecated", "{0.tag}");
432 suggestAlternative: "sport=scuba_diving";
433 suggestAlternative: "sport=cliff_diving";
434 group: tr("deprecated tagging");
435}
436
437/* #8281 */
438*[parking=park_and_ride] {
439 throwWarning: tr("{0} is deprecated", "{0.tag}");
440 suggestAlternative: "amenity=parking + park_ride=yes";
441 group: tr("deprecated tagging");
442 fixRemove: "parking";
443 fixAdd: "amenity=parking";
444 fixAdd: "park_ride=yes";
445}
446
447/* #19287, #18334, #17950, #10661, #10837, #11737, #12771, #21009 */
448*[playground=yes],
449*[manhole=plain],
450*[manhole=unknown],
451*[manhole=yes],
452*[police=yes],
453*[traffic_calming=yes],
454*[access=restricted],
455*[barrier=yes],
456*[aerialway=yes][!public_transport],
457*[amenity=yes],
458*[leisure=yes],
459*[landuse=yes],
460*[shop="*"],
461*[shop=yes][amenity!=fuel],
462*[craft=yes],
463*[service=yes],
464*[place=yes] {
465 throwWarning: tr("{0}={1} is unspecific. Please replace ''{1}'' by a specific value.", "{0.key}", "{0.value}");
466}
467
468/* #10693 - http://wiki.openstreetmap.org/wiki/Proposed_features/drop_recommendation_for_place_name , #10837 */
469*[place_name][!name] {
470 throwWarning: tr("{0} should be replaced with {1}", "{0.key}", "{1.key}");
471 fixChangeKey: "place_name => name";
472}
473*[place][place_name = *name] {
474 throwWarning: tr("{0} = {1}; remove {0}", "{1.key}", "{1.value}");
475 fixRemove: "{1.key}";
476}
477
478way[sidewalk=yes] {
479 throwWarning: tr("{0} is unspecific", "{0.tag}");
480 suggestAlternative: "sidewalk=left";
481 suggestAlternative: "sidewalk=right";
482 suggestAlternative: "sidewalk=both";
483 suggestAlternative: "sidewalk=separate";
484}
485
486*[waterway=water_point] {
487 throwWarning: tr("{0} is deprecated", "{0.tag}");
488 suggestAlternative: "amenity=water_point";
489 group: tr("deprecated tagging");
490 fixChangeKey: "waterway => amenity";
491}
492*[waterway=waste_disposal] {
493 throwWarning: tr("{0} is deprecated", "{0.tag}");
494 suggestAlternative: "amenity=waste_disposal";
495 group: tr("deprecated tagging");
496 fixChangeKey: "waterway => amenity";
497}
498*[waterway=mooring] {
499 throwWarning: tr("{0} is deprecated", "{0.tag}");
500 suggestAlternative: "mooring=yes";
501 group: tr("deprecated tagging");
502 fixRemove: "waterway";
503 fixAdd: "mooring=yes";
504}
505
506/* #10837, #21268 */
507*[building][levels],
508*[building:part][levels] {
509 throwWarning: tr("{0} is deprecated", "{1.key}");
510 suggestAlternative: "building:levels";
511 group: tr("deprecated tagging");
512 fixChangeKey: "levels => building:levels";
513 set levels_building;
514}
515*[levels]!.levels_building {
516 throwWarning: tr("Unusual key {0}, maybe {1} or {2} is meant", "{0.key}", "level", "building:levels");
517}
518
519/* #10691 */
520*[protected_class] {
521 throwWarning: tr("{0} is deprecated", "{0.key}");
522 suggestAlternative: "protect_class";
523 group: tr("deprecated tagging");
524 fixChangeKey: "protected_class => protect_class";
525}
526
527/* #11070 */
528*[kerb=unknown],
529*[lock=unknown],
530*[hide=unknown],
531*[shelter=unknown],
532*[access=unknown],
533*[capacity:parent=unknown],
534*[capacity:women=unknown],
535*[capacity:disabled=unknown],
536*[crossing=unknown],
537*[foot=unknown] {
538 throwWarning: tr("Unspecific tag {0}", "{0.tag}");
539}
540
541/* #11183 */
542*[sport=skiing] {
543 throwWarning: tr("Definition of {0} is unclear", "{0.tag}");
544 suggestAlternative: tr("{0} + {1} + {2}", "piste:type=*", "piste:difficulty=*", "piste:grooming=*");
545 group: tr("deprecated tagging");
546}
547
548/* #11223 */
549*[waterway=wadi] {
550 throwWarning: tr("{0} is deprecated", "{0.tag}");
551 suggestAlternative: "{0.key}=* + intermittent=yes";
552 suggestAlternative: "natural=valley";
553 group: tr("deprecated tagging");
554}
555
556/* #10346 */
557way[oneway=1] {
558 throwWarning: tr("{0} is deprecated", "{0.tag}");
559 suggestAlternative: "oneway=yes";
560 group: tr("deprecated tagging");
561 fixAdd: "oneway=yes";
562}
563
564/* #11329 */
565way[oneway=-1] {
566 throwWarning: tr("{0} is not recommended. Use the Reverse Ways function from the Tools menu.", "{0.tag}");
567}
568
569*[drinkable] {
570 throwWarning: tr("{0} is deprecated", "{0.key}");
571 suggestAlternative: "drinking_water";
572 group: tr("deprecated tagging");
573}
574
575/* #10329, #15877 */
576 /* simple key change */
577*[color][!colour] {
578 throwWarning: tr("{0} is deprecated", "{0.key}");
579 suggestAlternative: "colour";
580 group: tr("deprecated tagging");
581 fixChangeKey: "color => colour";
582 assertMatch: "way color=red";
583 assertNoMatch: "way color=red colour=red";
584}
585area[building:color][!building:colour] {
586 throwWarning: tr("{0} is deprecated", "{0.key}");
587 suggestAlternative: "building:colour";
588 group: tr("deprecated tagging");
589 fixChangeKey: "building:color => building:colour";
590 assertMatch: "way building:color=red";
591 assertNoMatch: "way building:color=red building:colour=red";
592}
593area[roof:color][!roof:colour] {
594 throwWarning: tr("{0} is deprecated", "{0.key}");
595 suggestAlternative: "roof:colour";
596 group: tr("deprecated tagging");
597 fixChangeKey: "roof:color => roof:colour";
598 assertMatch: "way roof:color=red";
599 assertNoMatch: "way roof:color=red roof:colour=red";
600}
601 /* both tags with same value, remove color */
602*[color][colour][color=*colour] {
603 throwWarning: tr("{0} together with {1}", "{0.key}", "{1.key}");
604 suggestAlternative: "colour";
605 group: tr("deprecated tagging");
606 set samecolor;
607 fixRemove: "color";
608 assertMatch: "way color=red colour=red";
609 assertNoMatch: "way color=red colour=green";
610}
611area[building:color][building:colour]["building:color"=*"building:colour"] {
612 throwWarning: tr("{0} together with {1}", "{0.key}", "{1.key}");
613 suggestAlternative: "building:colour";
614 group: tr("deprecated tagging");
615 set samebuildingcolor;
616 fixRemove: "building:color";
617 assertMatch: "way building:color=red building:colour=red";
618 assertNoMatch: "way building:color=red building:colour=green";
619}
620area[roof:color][roof:colour]["roof:color"=*"roof:colour"] {
621 throwWarning: tr("{0} together with {1}", "{0.key}", "{1.key}");
622 suggestAlternative: "roof:colour";
623 group: tr("deprecated tagging");
624 set sameroofcolor;
625 fixRemove: "roof:color";
626 assertMatch: "way roof:color=red roof:colour=red";
627 assertNoMatch: "way roof:color=red roof:colour=green";
628}
629 /* both tags with different values, no autofix */
630*[color][colour]!.samecolor {
631 throwWarning: tr("{0} together with {1} and conflicting values", "{0.key}", "{1.key}");
632 suggestAlternative: "colour";
633 group: tr("deprecated tagging");
634 assertNoMatch: "way color=red colour=red";
635 assertMatch: "way color=red colour=green";
636}
637*[building:color][building:colour]!.samebuildingcolor {
638 throwWarning: tr("{0} together with {1} and conflicting values", "{0.key}", "{1.key}");
639 suggestAlternative: "building:colour";
640 group: tr("deprecated tagging");
641 assertNoMatch: "way building:color=red building:colour=red";
642 assertMatch: "way building:color=red building:colour=green";
643}
644*[roof:color][roof:colour]!.sameroofcolor {
645 throwWarning: tr("{0} together with {1} and conflicting values", "{0.key}", "{1.key}");
646 suggestAlternative: "roof:colour";
647 group: tr("deprecated tagging");
648 assertNoMatch: "way roof:color=red roof:colour=red";
649 assertMatch: "way roof:color=red roof:colour=green";
650}
651/* further more universal checks, no autofix */
652/* gpxd:color has another warning in unnecessary.mapcss */
653*[/:color/][!building:color][!roof:color][!gpxd:color] {
654 throwWarning: tr("{0} is deprecated", "{0.key}");
655 suggestAlternative: ":colour";
656 group: tr("deprecated tagging");
657 assertNoMatch: "way color=red";
658 assertNoMatch: "way roof:color=grey";
659 assertMatch: "way cycleway:surface:color=grey";
660}
661*[/color:/] {
662 throwWarning: tr("{0} is deprecated", "{0.key}");
663 suggestAlternative: "colour:";
664 group: tr("deprecated tagging");
665 assertNoMatch: "way color=red";
666 assertMatch: "way color:back=grey";
667}
668
669/* #11234 */
670*[/=|\+|\/|&|<|>|;|'|"|%|#|@|\\|,|\.|\{|\}|\?|\*|\^|\$/] {
671 throwWarning: tr("{0}", "{0.key}");
672 group: tr("key with uncommon character");
673}
674
675/* #11330, #18642 */
676*[/^.$/],
677node[/^..$/][!kp][!pk],
678way[/^..$/][route=ferry][!to],
679way[/^..$/][route!=ferry],
680relation[/^..$/][!to] {
681 throwWarning: tr("uncommon short key");
682 assertNoMatch: "relation to=Berlin";
683 assertMatch: "relation fo=bar";
684 assertMatch: "way to=bar";
685 assertNoMatch: "way to=Zuidschermer;Akersloot route=ferry";
686 assertMatch: "node fo=bar";
687 assertMatch: "node f=b";
688 assertNoMatch: "node kp=5"; /* already has a deprecated warning */
689 assertNoMatch: "node pk=7"; /* already has a deprecated warning */
690}
691
692/* #11439 */
693*[sport=hockey] {
694 throwWarning: tr("{0} is deprecated", "{0.tag}");
695 suggestAlternative: "sport=field_hockey";
696 suggestAlternative: "sport=ice_hockey";
697 group: tr("deprecated tagging");
698}
699
700/* #11471 */
701*[sport=billard],
702*[sport=billards],
703*[sport=billiard] {
704 throwWarning: tr("{0} is deprecated", "{0.tag}");
705 suggestAlternative: "sport=billiards";
706 group: tr("deprecated tagging");
707 fixAdd: "sport=billiards";
708}
709
710/* #11499, #16928 */
711*[payment:credit_cards=yes] {
712 throwOther: tr("{0} is inaccurate. Use separate tags for each specific type, e.g. {1} or {2}.", "{0.tag}", "payment:mastercard=yes", "payment:visa=yes");
713}
714*[payment:debit_cards=yes] {
715 throwWarning: tr("{0} is inaccurate. Use separate tags for each specific type, e.g. {1} or {2}.", "{0.tag}", "payment:maestro=yes", "payment:girocard=yes");
716}
717*[payment:electronic_purses=yes] {
718 throwWarning: tr("{0} is inaccurate. Use separate tags for each specific type, e.g. {1} or {2}.", "{0.tag}", "payment:ep_geldkarte=yes", "payment:ep_quick=yes");
719}
720*[payment:cryptocurrencies=yes] {
721 throwWarning: tr("{0} is inaccurate. Use separate tags for each specific type, e.g. {1} or {2}.", "{0.tag}", "payment:bitcoin=yes", "payment:litecoin=yes");
722}
723
724/* #16253 */
725*[payment:ep_quick],
726*[payment:ep_cash],
727*[payment:ep_proton],
728*[payment:ep_chipknip] {
729 throwWarning: tr("{0} is deprecated", "{0.key}");
730 group: tr("deprecated tagging");
731 fixRemove: "{0.key}";
732}
733
734/* #8717, #20326 */
735*[kp][railway!=milestone] {
736 throwWarning: tr("{0} is deprecated", "{0.key}");
737 suggestAlternative: "distance";
738 group: tr("deprecated tagging");
739 fixChangeKey: "kp => distance";
740}
741*[pk][railway!=milestone] {
742 throwWarning: tr("{0} is deprecated", "{0.key}");
743 suggestAlternative: "distance";
744 group: tr("deprecated tagging");
745 fixChangeKey: "pk => distance";
746}
747*[kp][railway=milestone] {
748 throwWarning: tr("{0} is deprecated", "{0.key}");
749 suggestAlternative: "railway:position";
750 group: tr("deprecated tagging");
751 fixChangeKey: "kp => railway:position";
752}
753*[pk][railway=milestone] {
754 throwWarning: tr("{0} is deprecated", "{0.key}");
755 suggestAlternative: "railway:position";
756 group: tr("deprecated tagging");
757 fixChangeKey: "pk => railway:position";
758}
759*[distance][railway=milestone] {
760 throwWarning: tr("{0} is deprecated for {1}", "{0.key}", "{1.tag}");
761 suggestAlternative: "railway:position";
762 group: tr("deprecated tagging");
763 fixChangeKey: "distance => railway:position";
764}
765
766*[postcode] {
767 throwWarning: tr("{0} is deprecated", "{0.key}");
768 suggestAlternative: "addr:postcode";
769 group: tr("deprecated tagging");
770 suggestAlternative: "postal_code";
771}
772
773*[water=intermittent] {
774 throwWarning: tr("{0} is deprecated", "{0.tag}");
775 suggestAlternative: "intermittent=yes";
776 group: tr("deprecated tagging");
777 fixRemove: "water";
778 fixAdd: "intermittent=yes";
779}
780
781/* #10907, #14141 */
782/* type=waterway on ways is questionable, but the autofix doesn't make it better, so disabled; type=route and type=network is used only on relations */
783way[type][type!=waterway][man_made=pipeline],
784node[type][pipeline=marker] {
785 throwWarning: tr("{0} is deprecated", "{0.key}");
786 suggestAlternative: "substance";
787 group: tr("deprecated tagging");
788 fixChangeKey: "type => substance";
789}
790
791*[landuse=farm] {
792 throwWarning: tr("{0} is deprecated", "{0.tag}");
793 suggestAlternative: "landuse=farmland";
794 suggestAlternative: "landuse=farmyard";
795 group: tr("deprecated tagging");
796}
797
798/* #12135 comment:11 */
799*[seamark=buoy]["seamark:type"=~/^(buoy_cardinal|buoy_installation|buoy_isolated_danger|buoy_lateral|buoy_safe_water|buoy_special_purpose|mooring)$/] {
800 throwWarning: tr("{0} is deprecated", "{0.tag}");
801 suggestAlternative: "{1.tag}";
802 group: tr("deprecated tagging");
803 fixRemove: "seamark";
804}
805*[seamark=buoy]["seamark:type"!~/^(buoy_cardinal|buoy_installation|buoy_isolated_danger|buoy_lateral|buoy_safe_water|buoy_special_purpose|mooring)$/] {
806 throwWarning: tr("{0} is deprecated", "{0.tag}");
807 suggestAlternative: "{1.tag}";
808 group: tr("deprecated tagging");
809}
810/* #12135 */
811*[landuse=conservation] {
812 throwWarning: tr("{0} is deprecated", "{0.tag}");
813 suggestAlternative: "boundary=protected_area";
814 group: tr("deprecated tagging");
815 fixAdd: "boundary=protected_area";
816 fixRemove: "landuse";
817}
818
819/* #12205 */
820*[amenity=kiosk] {
821 throwWarning: tr("{0} is deprecated", "{0.tag}");
822 suggestAlternative: "shop=kiosk";
823 group: tr("deprecated tagging");
824 fixChangeKey: "amenity => shop";
825}
826*[amenity=shop] {
827 throwWarning: tr("{0} is deprecated", "{0.tag}");
828 suggestAlternative: "shop=*";
829 group: tr("deprecated tagging");
830}
831*[shop=fishmonger] {
832 throwWarning: tr("{0} is deprecated", "{0.tag}");
833 suggestAlternative: "shop=seafood";
834 group: tr("deprecated tagging");
835 fixAdd: "shop=seafood";
836}
837*[shop=fish] {
838 throwWarning: tr("{0} is deprecated", "{0.tag}");
839 suggestAlternative: "shop=seafood";
840 suggestAlternative: "shop=pet";
841 suggestAlternative: "shop=fishing";
842 group: tr("deprecated tagging");
843}
844*[shop=betting] {
845 throwWarning: tr("{0} is deprecated", "{0.tag}");
846 suggestAlternative: "shop=bookmaker";
847 suggestAlternative: "shop=lottery";
848 suggestAlternative: "amenity=casino";
849 suggestAlternative: "leisure=amusement_arcade";
850 suggestAlternative: "leisure=adult_gaming_centre";
851 suggestAlternative: "amenity=gambling";
852 group: tr("deprecated tagging");
853}
854*[shop=perfume] {
855 throwWarning: tr("{0} is deprecated", "{0.tag}");
856 suggestAlternative: "shop=perfumery";
857 group: tr("deprecated tagging");
858 fixAdd: "shop=perfumery";
859}
860*[amenity=exercise_point] {
861 throwWarning: tr("{0} is deprecated", "{0.tag}");
862 suggestAlternative: "leisure=fitness_station";
863 group: tr("deprecated tagging");
864 fixAdd: "leisure=fitness_station";
865 fixRemove: "amenity";
866}
867*[shop=auto_parts] {
868 throwWarning: tr("{0} is deprecated", "{0.tag}");
869 suggestAlternative: "shop=car_parts";
870 group: tr("deprecated tagging");
871 fixAdd: "shop=car_parts";
872}
873*[amenity=car_repair] {
874 throwWarning: tr("{0} is deprecated", "{0.tag}");
875 suggestAlternative: "shop=car_repair";
876 group: tr("deprecated tagging");
877 fixChangeKey: "amenity => shop";
878}
879
880/* #12311 */
881*[amenity=studio][type=audio],
882*[amenity=studio][type=radio],
883*[amenity=studio][type=television],
884*[amenity=studio][type=video] {
885 throwWarning: tr("{0} is deprecated for {1}", "{1.key}", "{0.tag}");
886 suggestAlternative: "studio";
887 group: tr("deprecated tagging");
888 fixChangeKey: "type => studio";
889}
890
891/* #11507, #12297, #15409 */
892*[power=cable_distribution_cabinet] {
893 throwWarning: tr("{0} is deprecated", "{0.tag}");
894 suggestAlternative: "man_made=street_cabinet + street_cabinet=*";
895 group: tr("deprecated tagging");
896 fixAdd: "man_made=street_cabinet";
897 fixRemove: "power";
898}
899
900/* #16430 */
901*[power][location=kiosk] {
902 throwWarning: tr("{0} is deprecated", "{1.tag}");
903 group: tr("deprecated tagging");
904 fixAdd: "man_made=street_cabinet";
905 fixAdd: "street_cabinet=power";
906 fixRemove: "location";
907}
908
909/* #12276 */
910*[man_made=well] {
911 throwWarning: tr("{0} is deprecated", "{0.tag}");
912 suggestAlternative: "man_made=water_well";
913 suggestAlternative: "man_made=petroleum_well";
914 group: tr("deprecated tagging");
915}
916*[amenity=dog_bin],
917*[amenity=dog_waste_bin] {
918 throwWarning: tr("{0} is deprecated", "{0.tag}");
919 suggestAlternative: "amenity=waste_basket + waste=dog_excrement + vending=excrement_bags";
920 group: tr("deprecated tagging");
921 fixAdd: "amenity=waste_basket";
922 fixAdd: "waste=dog_excrement";
923 fixAdd: "vending=excrement_bags";
924}
925*[amenity=artwork] {
926 throwWarning: tr("{0} is deprecated", "{0.tag}");
927 suggestAlternative: "tourism=artwork";
928 group: tr("deprecated tagging");
929 fixAdd: "tourism=artwork";
930 fixRemove: "amenity";
931}
932*[amenity=community_center] {
933 throwWarning: tr("{0} is deprecated", "{0.tag}");
934 suggestAlternative: "amenity=community_centre";
935 group: tr("deprecated tagging");
936 fixAdd: "amenity=community_centre";
937}
938*[man_made=cut_line] {
939 throwWarning: tr("{0} is deprecated", "{0.tag}");
940 suggestAlternative: "man_made=cutline";
941 group: tr("deprecated tagging");
942 fixAdd: "man_made=cutline";
943}
944*[amenity=park] {
945 throwWarning: tr("{0} is deprecated", "{0.tag}");
946 suggestAlternative: "leisure=park";
947 group: tr("deprecated tagging");
948 fixAdd: "leisure=park";
949 fixRemove: "amenity";
950}
951*[amenity=hotel] {
952 throwWarning: tr("{0} is deprecated", "{0.tag}");
953 suggestAlternative: "tourism=hotel";
954 group: tr("deprecated tagging");
955 fixAdd: "tourism=hotel";
956 fixRemove: "amenity";
957}
958*[shop=window],
959*[shop=windows] {
960 throwWarning: tr("{0} is deprecated", "{0.tag}");
961 suggestAlternative: "craft=window_construction";
962 group: tr("deprecated tagging");
963 fixAdd: "craft=window_construction";
964 fixRemove: "shop";
965}
966*[amenity=education] {
967 throwWarning: tr("{0} is deprecated", "{0.tag}");
968 suggestAlternative: "amenity=college";
969 suggestAlternative: "amenity=school";
970 suggestAlternative: "amenity=university";
971 suggestAlternative: "landuse=education";
972 group: tr("deprecated tagging");
973}
974*[shop=gallery] {
975 throwWarning: tr("{0} is deprecated", "{0.tag}");
976 suggestAlternative: "shop=art";
977 group: tr("deprecated tagging");
978 fixAdd: "shop=art";
979}
980*[shop=gambling],
981*[leisure=gambling] {
982 throwWarning: tr("{0} is deprecated", "{0.tag}");
983 suggestAlternative: "shop=bookmaker";
984 suggestAlternative: "shop=lottery";
985 suggestAlternative: "amenity=casino";
986 suggestAlternative: "leisure=amusement_arcade";
987 suggestAlternative: "amenity=gambling";
988 group: tr("deprecated tagging");
989}
990*[office=real_estate],
991*[office=real_estate_agent] {
992 throwWarning: tr("{0} is deprecated", "{0.tag}");
993 suggestAlternative: "office=estate_agent";
994 group: tr("deprecated tagging");
995 fixAdd: "office=estate_agent";
996}
997*[shop=glass] {
998 throwWarning: tr("{0} is deprecated", "{0.tag}");
999 suggestAlternative: "shop=glaziery";
1000 suggestAlternative: "craft=glaziery";
1001 group: tr("deprecated tagging");
1002}
1003*[amenity=proposed],
1004*[amenity=disused],
1005*[shop=disused],
1006*[highway=abandoned],
1007*[historic=abandoned] {
1008 throwWarning: tr("{0} is deprecated. Use the {1}: key prefix instead.", "{0.tag}", "{0.value}");
1009 group: tr("deprecated tagging");
1010}
1011
1012/* #12431 */
1013*[amenity=swimming_pool] {
1014 throwWarning: tr("{0} is deprecated", "{0.tag}");
1015 suggestAlternative: "leisure=swimming_pool";
1016 group: tr("deprecated tagging");
1017 fixChangeKey: "amenity => leisure";
1018}
1019
1020/* #17379 */
1021*[amenity=sauna] {
1022 throwWarning: tr("{0} is deprecated", "{0.tag}");
1023 suggestAlternative: "leisure=sauna";
1024 group: tr("deprecated tagging");
1025 fixChangeKey: "amenity => leisure";
1026}
1027
1028/* #12494, #17554 */
1029*[/^[^t][^i][^g].+_[0-9]$/][!/^note_[0-9]$/][!/^description_[0-9]$/] {
1030 throwWarning: tr("{0}", "{0.key}");
1031 group: tr("questionable key (ending with a number)");
1032 assertMatch: "way name_1=foo";
1033 assertNoMatch: "way note_2=foo";
1034 assertNoMatch: "way description_3=foo";
1035 assertNoMatch: "way tiger:name_base_1=bar"; /*should not warn for key tiger:name_base_1 */
1036}
1037
1038/* #12500 */
1039*[sport=skating] {
1040 throwWarning: tr("{0} is deprecated", "{0.tag}");
1041 suggestAlternative: "sport=ice_skating";
1042 suggestAlternative: "sport=roller_skating";
1043 group: tr("deprecated tagging");
1044}
1045
1046way[barrier=wall][type=noise_barrier][!wall],
1047way[barrier=wall][type=noise_barrier][wall=noise_barrier] {
1048 throwWarning: tr("{0} is deprecated", "{1.tag}");
1049 suggestAlternative: "wall=noise_barrier";
1050 group: tr("deprecated tagging");
1051 fixChangeKey: "type => wall";
1052}
1053way[barrier=wall][type=noise_barrier][wall][wall!=noise_barrier] {
1054 throwWarning: tr("{0} is deprecated", "{1.tag}");
1055 suggestAlternative: "wall=noise_barrier";
1056 group: tr("deprecated tagging");
1057}
1058
1059/* #8978, 12588 */
1060*[amenity=public_building] {
1061 throwWarning: tr("{0} is deprecated", "{0.tag}");
1062 suggestAlternative: "amenity=townhall";
1063 suggestAlternative: "amenity=community_centre";
1064 suggestAlternative: "amenity=hospital";
1065 suggestAlternative: "leisure=sports_centre";
1066 suggestAlternative: "office=government";
1067 suggestAlternative: "building=hospital";
1068 suggestAlternative: "building=public";
1069 suggestAlternative: "...";
1070 group: tr("deprecated tagging");
1071}
1072
1073/* #18517 */
1074*[office=administrative] {
1075 throwWarning: tr("{0} is deprecated", "{0.tag}");
1076 suggestAlternative: "office=government";
1077 group: tr("deprecated tagging");
1078 fixAdd: "office=government";
1079}
1080
1081/* #12708 */
1082*[vending=news_papers] {
1083 throwWarning: tr("{0} is deprecated", "{0.tag}");
1084 suggestAlternative: "vending=newspapers";
1085 group: tr("deprecated tagging");
1086 fixAdd: "vending=newspapers";
1087}
1088
1089/* #12771 */
1090*[service=drive_through] {
1091 throwWarning: tr("{0} is deprecated", "{0.tag}");
1092 suggestAlternative: "service=drive-through";
1093 group: tr("deprecated tagging");
1094 fixAdd: "service=drive-through";
1095}
1096
1097/* #12771, #9895 */
1098*[noexit][noexit!=yes][noexit!=no], /* noexit=no has an own warning */
1099way[highway=service][service][service !~ /^(alley|drive-through|drive_through|driveway|emergency_access|parking_aisle|rest_area|slipway|yes)$/], /* drive_through and yes have special warnings */
1100way[railway=rail][service][service !~ /^(crossover|siding|spur|yard)$/],
1101way[waterway=canal][service][service !~ /^(irrigation|transportation|water_power)$/] {
1102 throwWarning: tr("The key {0} has an uncommon value.", "{1.key}");
1103}
1104
1105/* #13008 */
1106*[name:botanical] {
1107 throwWarning: tr("{0} is deprecated", "{0.key}");
1108 suggestAlternative: "species";
1109 group: tr("deprecated tagging");
1110}
1111
1112/* #11344, #13101, #15480 */
1113node[pole=air_to_ground],
1114node[pole=transition] {
1115 throwWarning: tr("{0} is deprecated", "{0.tag}");
1116 suggestAlternative: "location:transition=yes";
1117 group: tr("deprecated tagging");
1118 fixAdd: "location:transition=yes";
1119 fixRemove: "pole";
1120}
1121node[tower=air_to_ground],
1122node[tower=transition] {
1123 throwWarning: tr("{0} is deprecated", "{0.tag}");
1124 suggestAlternative: "location:transition=yes";
1125 group: tr("deprecated tagging");
1126 fixAdd: "location:transition=yes";
1127 fixRemove: "tower";
1128}
1129
1130/* #13138 */
1131area[landuse=pond] {
1132 throwWarning: tr("{0} is deprecated", "{0.tag}");
1133 suggestAlternative: "natural=water + water=pond";
1134 group: tr("deprecated tagging");
1135 fixAdd: "natural=water";
1136 fixAdd: "water=pond";
1137 fixRemove: "landuse";
1138}
1139
1140*[shop=souvenir],
1141*[shop=souvenirs],
1142*[shop=souveniers] {
1143 throwWarning: tr("{0} is deprecated", "{0.tag}");
1144 suggestAlternative: "shop=gift";
1145 group: tr("deprecated tagging");
1146 fixAdd: "shop=gift";
1147}
1148
1149*[vending=animal_food] {
1150 throwWarning: tr("{0} is deprecated", "{0.tag}");
1151 suggestAlternative: "vending=animal_feed";
1152 group: tr("deprecated tagging");
1153 fixAdd: "vending=animal_feed";
1154}
1155
1156/* #14376 */
1157node[vending=photos][amenity=vending_machine],
1158node[vending=photo][amenity=vending_machine] {
1159 throwWarning: tr("{0} is deprecated", "{0.tag}");
1160 suggestAlternative: "amenity=photo_booth";
1161 group: tr("deprecated tagging");
1162 fixRemove: "vending";
1163 fixAdd: "amenity=photo_booth";
1164
1165}
1166node[vending=photos][amenity!=vending_machine] {
1167 throwWarning: tr("{0} is deprecated", "{0.tag}");
1168 suggestAlternative: "amenity=photo_booth";
1169 group: tr("deprecated tagging");
1170}
1171
1172/* #13653 */
1173node[highway=emergency_access_point][phone][!emergency_telephone_code],
1174way[highway=emergency_access_point][phone][!emergency_telephone_code] {
1175 throwWarning: tr("{0} is deprecated for {1}", "{1.key}", "{0.tag}");
1176 suggestAlternative: "emergency_telephone_code";
1177 group: tr("deprecated tagging");
1178 fixChangeKey: "phone => emergency_telephone_code";
1179 assertMatch: "node highway=emergency_access_point phone=123";
1180 assertNoMatch: "node highway=emergency_access_point emergency_telephone_code=456";
1181 assertNoMatch: "node highway=emergency_access_point phone=123 emergency_telephone_code=456";
1182 assertNoMatch: "node phone=123";
1183}
1184node[highway=emergency_access_point][phone=*emergency_telephone_code],
1185way[highway=emergency_access_point][phone=*emergency_telephone_code] {
1186 throwWarning: tr("{0} is deprecated for {1}", "{1.key}", "{0.tag}");
1187 suggestAlternative: "emergency_telephone_code";
1188 group: tr("deprecated tagging");
1189 fixRemove: "phone";
1190 assertNoMatch: "node highway=emergency_access_point phone=123";
1191 assertNoMatch: "node highway=emergency_access_point emergency_telephone_code=123";
1192 assertMatch: "node highway=emergency_access_point phone=123 emergency_telephone_code=123";
1193}
1194node[highway=emergency_access_point][phone][emergency_telephone_code][phone!=*emergency_telephone_code],
1195way[highway=emergency_access_point][phone][emergency_telephone_code][phone!=*emergency_telephone_code] {
1196 throwWarning: tr("{0} is deprecated for {1}", "{1.key}", "{0.tag}");
1197 suggestAlternative: "emergency_telephone_code";
1198 group: tr("deprecated tagging");
1199 assertNoMatch: "node highway=emergency_access_point phone=123";
1200 assertNoMatch: "node highway=emergency_access_point emergency_telephone_code=123";
1201 assertNoMatch: "node highway=emergency_access_point phone=123 emergency_telephone_code=123";
1202}
1203
1204/* #13879 */
1205way[tracktype=1] {
1206 throwError: tr("{0}", "{0.tag}");
1207 suggestAlternative: "tracktype=grade1";
1208 group: tr("misspelled value");
1209 fixAdd: "tracktype=grade1";
1210}
1211way[tracktype=2] {
1212 throwError: tr("{0}", "{0.tag}");
1213 suggestAlternative: "tracktype=grade2";
1214 group: tr("misspelled value");
1215 fixAdd: "tracktype=grade2";
1216}
1217way[tracktype=3] {
1218 throwError: tr("{0}", "{0.tag}");
1219 suggestAlternative: "tracktype=grade3";
1220 group: tr("misspelled value");
1221 fixAdd: "tracktype=grade3";
1222}
1223way[tracktype=4] {
1224 throwError: tr("{0}", "{0.tag}");
1225 suggestAlternative: "tracktype=grade4";
1226 group: tr("misspelled value");
1227 fixAdd: "tracktype=grade4";
1228}
1229way[tracktype=5] {
1230 throwError: tr("{0}", "{0.tag}");
1231 suggestAlternative: "tracktype=grade5";
1232 group: tr("misspelled value");
1233 fixAdd: "tracktype=grade5";
1234}
1235way[tracktype][tracktype!~/^(1|2|3|4|5|grade1|grade2|grade3|grade4|grade5)$/] {
1236 throwError: tr("wrong value: {0}", "{0.tag}");
1237 suggestAlternative: "tracktype=grade1";
1238 suggestAlternative: "tracktype=grade2";
1239 suggestAlternative: "tracktype=grade3";
1240 suggestAlternative: "tracktype=grade4";
1241 suggestAlternative: "tracktype=grade5";
1242}
1243
1244area[area][area!=yes][area!=no] {
1245 throwError: tr("wrong value: {0}", "{0.tag}");
1246 suggestAlternative: "area=yes";
1247 suggestAlternative: "area=no";
1248}
1249
1250/* #13953 */
1251*[amenity=hunting_stand][lock=yes],
1252*[amenity=hunting_stand][lock=no] {
1253 throwWarning: tr("{0} is deprecated for {1}", "{1.key}", "{0.tag}");
1254 suggestAlternative: "lockable";
1255 group: tr("deprecated tagging");
1256 fixChangeKey: "lock => lockable";
1257}
1258
1259*[amenity=advertising][!advertising] {
1260 throwWarning: tr("{0} is deprecated", "{0.tag}");
1261 suggestAlternative: "advertising=*";
1262 group: tr("deprecated tagging");
1263}
1264*[amenity=advertising][advertising] {
1265 throwWarning: tr("{0} is deprecated", "{0.tag}");
1266 suggestAlternative: "advertising=*";
1267 group: tr("deprecated tagging");
1268 fixRemove: "amenity";
1269}
1270
1271way[direction=up][incline=up],
1272way[direction=down][incline=down],
1273way[direction=up][!incline],
1274way[direction=down][!incline] {
1275 throwWarning: tr("{0} is deprecated", "{0.tag}");
1276 suggestAlternative: "incline";
1277 group: tr("deprecated tagging");
1278 fixChangeKey: "direction => incline";
1279}
1280way[direction=up][incline][incline!=up],
1281way[direction=down][incline][incline!=down] {
1282 throwWarning: tr("{0} is deprecated", "{0.tag}");
1283 suggestAlternative: "incline";
1284 group: tr("deprecated tagging");
1285}
1286
1287*[building=true],
1288*[building="*"],
1289*[building=Y],
1290*[building=y],
1291*[building=1] {
1292 throwError: tr("{0}", "{0.tag}");
1293 suggestAlternative: "building=yes";
1294 group: tr("misspelled value");
1295 fixAdd: "building=yes";
1296}
1297
1298/* #17786, #18612 */
1299*[building=abandoned],
1300*[building=address],
1301*[building=bing],
1302*[building=collapsed],
1303*[building=damaged],
1304*[building=demolished],
1305*[building=disused],
1306*[building=fixme],
1307*[building=occupied],
1308*[building=razed] {
1309 throwWarning: tr("{0} is not a building type.", "{0.tag}");
1310 group: tr("deprecated tagging");
1311}
1312*[building=other],
1313*[building=unclassified],
1314*[building=undefined],
1315*[building=unknown],
1316*[building=unidentified] {
1317 throwWarning: tr("{0} is not a building type.", "{0.tag}");
1318 group: tr("deprecated tagging");
1319 fixAdd: "building=yes";
1320}
1321
1322/* #15675 */
1323node[power=transformer][location=pole][transformer] {
1324 throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
1325 group: tr("deprecated tagging");
1326 fixChangeKey: "location => power";
1327}
1328node[power=transformer][location=pole][!transformer] {
1329 throwWarning: tr("{0} together with {1}", "{0.tag}", "{1.tag}");
1330 group: tr("deprecated tagging");
1331 fixChangeKey: "location => power";
1332 fixAdd: "transformer=yes";
1333}
1334
1335node[tourism=picnic_table],
1336node[amenity=picnic_table],
1337node[leisure=picnic],
1338node[leisure=picnic_site] {
1339 throwWarning: tr("{0} is deprecated", "{0.tag}");
1340 suggestAlternative: "tourism=picnic_site";
1341 suggestAlternative: "leisure=picnic_table";
1342 group: tr("deprecated tagging");
1343}
1344
1345/* #15804 */
1346relation[water=salt],
1347way[water=salt],
1348way[water=salt_pool],
1349way[water=salt_panne],
1350way[water=salt_pond] {
1351 throwWarning: tr("{0} is deprecated", "{0.tag}");
1352 suggestAlternative: "salt=yes";
1353 suggestAlternative: "landuse=salt_pond";
1354 group: tr("deprecated tagging");
1355}
1356
1357/* #15805 */
1358way[water=tidal] {
1359 throwWarning: tr("{0} is deprecated", "{0.tag}");
1360 suggestAlternative: "tidal=yes";
1361 fixAdd: "tidal=yes";
1362 fixRemove: "water";
1363 group: tr("deprecated tagging");
1364}
1365
1366*[amenity=toilet] {
1367 throwError: tr("{0}", "{0.tag}");
1368 suggestAlternative: "amenity=toilets";
1369 group: tr("misspelled value");
1370 fixAdd: "amenity=toilets";
1371}
1372
1373way[power=busbar] {
1374 throwWarning: tr("{0} is deprecated", "{0.tag}");
1375 suggestAlternative: "power=line + line=busbar";
1376 group: tr("deprecated tagging");
1377 fixAdd: "power=line";
1378 fixAdd: "line=busbar";
1379}
1380
1381/* #16924 */
1382*[man_made=MDF],
1383*[man_made=telephone_exchange] {
1384 throwWarning: tr("{0} is deprecated", "{0.tag}");
1385 suggestAlternative: "telecom=exchange";
1386 fixAdd: "telecom=exchange";
1387 fixRemove: "man_made";
1388 group: tr("deprecated tagging");
1389}
1390*[building=central_office] {
1391 throwWarning: tr("{0} is deprecated", "{0.tag}");
1392 suggestAlternative: "telecom=exchange";
1393 fixAdd: "telecom=exchange";
1394 fixAdd: "building=yes";
1395 group: tr("deprecated tagging");
1396}
1397*[telecom=central_office] {
1398 throwWarning: tr("{0} is deprecated", "{0.tag}");
1399 suggestAlternative: "telecom=exchange";
1400 fixAdd: "telecom=exchange";
1401 group: tr("deprecated tagging");
1402}
1403
1404/* #16925 */
1405node[communication=outdoor_dslam],
1406node[man_made=outdoor_dslam],
1407node[street_cabinet=outdoor_dslam] {
1408 throwWarning: tr("{0} is deprecated", "{0.tag}");
1409 suggestAlternative: "telecom=service_device";
1410 fixAdd: "telecom=service_device";
1411 fixRemove: "{0.key}";
1412 group: tr("deprecated tagging");
1413}
1414node[telecom=dslam],
1415node[telecom=outdoor_dslam] {
1416 throwWarning: tr("{0} is deprecated", "{0.tag}");
1417 suggestAlternative: "telecom=service_device";
1418 fixAdd: "telecom=service_device";
1419 group: tr("deprecated tagging");
1420}
1421
1422/* #15774 */
1423node[amenity=fire_hydrant] {
1424 throwWarning: tr("{0} is deprecated", "{0.tag}");
1425 suggestAlternative: "emergency=fire_hydrant";
1426 fixChangeKey: "amenity => emergency";
1427 group: tr("deprecated tagging");
1428}
1429node[fire_hydrant:type=pond] {
1430 throwWarning: tr("{0} is deprecated", "{0.tag}");
1431 suggestAlternative: "water_source=pond";
1432 fixAdd: "water_source=pond";
1433 fixRemove: "{0.key}";
1434 group: tr("deprecated tagging");
1435}
1436node[fire_hydrant:flow_capacity] {
1437 throwWarning: tr("{0} is deprecated", "{0.key}");
1438 suggestAlternative: "flow_rate";
1439 group: tr("deprecated tagging");
1440}
1441node[emergency=fire_hydrant][in_service=no] {
1442 throwWarning: tr("{0} is deprecated", "{1.tag}");
1443 suggestAlternative: "disused:emergency=fire_hydrant";
1444 fixAdd: "disused:emergency=fire_hydrant";
1445 fixRemove: "{1.key}";
1446 fixRemove: "{0.key}";
1447 group: tr("deprecated tagging");
1448}
1449node[fire_hydrant:water_source] {
1450 throwWarning: tr("{0} is deprecated", "{0.key}");
1451 suggestAlternative: "water_source";
1452 fixChangeKey: "fire_hydrant:water_source => water_source";
1453 group: tr("deprecated tagging");
1454}
1455
1456/* #17383 */
1457*[natural=waterfall] {
1458 throwWarning: tr("{0} is deprecated", "{0.tag}");
1459 suggestAlternative: "waterway=waterfall";
1460 fixChangeKey: "natural => waterway";
1461 group: tr("deprecated tagging");
1462}
1463
1464/* #17249 */
1465*[religion=unitarian] {
1466 throwWarning: tr("{0} is deprecated", "{0.tag}");
1467 suggestAlternative: "religion=unitarian_universalist";
1468 fixAdd: "religion=unitarian_universalist";
1469 group: tr("deprecated tagging");
1470}
1471
1472*[shop=shopping_centre] {
1473 throwWarning: tr("{0} is deprecated", "{0.tag}");
1474 suggestAlternative: "shop=mall";
1475 fixAdd: "shop=mall";
1476 group: tr("deprecated tagging");
1477}
1478
1479/* #17504 */
1480*[is_in],
1481node[/^is_in:/],
1482way[/^is_in:/] {
1483 throwWarning: tr("{0} is deprecated", "{0.key}");
1484 group: tr("deprecated tagging");
1485 fixRemove: "{0.key}";
1486}
1487
1488/* #17593 */
1489*[sport=football] {
1490 throwWarning: tr("{0} is deprecated", "{0.tag}");
1491 suggestAlternative: "sport=soccer";
1492 suggestAlternative: "sport=american_football";
1493 suggestAlternative: "sport=australian_football";
1494 suggestAlternative: "sport=canadian_football";
1495 suggestAlternative: "sport=rugby_league";
1496 suggestAlternative: "sport=rugby_union";
1497 suggestAlternative: "sport=gaelic_games";
1498 group: tr("deprecated tagging");
1499}
1500
1501/* #17556 */
1502*[leisure=common] {
1503 throwWarning: tr("{0} is deprecated", "{0.tag}");
1504 suggestAlternative: "landuse=*";
1505 suggestAlternative: "leisure=*";
1506 suggestAlternative: "designation=common";
1507 group: tr("deprecated tagging");
1508}
1509
1510/* #17043 */
1511*[cuisine=vegan],
1512*[cuisine=vegetarian] {
1513 throwWarning: tr("{0} is deprecated", "{0.tag}");
1514 suggestAlternative: concat("diet:", "{0.value}", "=yes");
1515 suggestAlternative: concat("diet:", "{0.value}", "=only");
1516 group: tr("deprecated tagging");
1517}
1518
1519/* #17798 */
1520*[kitchen_hours] {
1521 throwWarning: tr("{0} is deprecated", "{0.key}");
1522 suggestAlternative: "opening_hours:kitchen";
1523 fixChangeKey: "kitchen_hours => opening_hours:kitchen";
1524 group: tr("deprecated tagging");
1525}
1526
1527/* #17681 */
1528*[shop=money_transfer] {
1529 throwWarning: tr("{0} is deprecated", "{0.tag}");
1530 suggestAlternative: "amenity=money_transfer";
1531 fixChangeKey: "shop => amenity";
1532 group: tr("deprecated tagging");
1533}
1534
1535*[contact:google_plus] {
1536 throwWarning: tr("{0} is deprecated", "{0.key}");
1537 fixRemove: "contact:google_plus";
1538 group: tr("deprecated tagging");
1539}
1540
1541/* #17370 */
1542*[amenity=garages],
1543*[amenity=garage] {
1544 throwWarning: tr("{0} is deprecated", "{0.tag}");
1545 suggestAlternative: concat("building=", "{0.value}");
1546 suggestAlternative: "landuse=garages";
1547 suggestAlternative: "amenity=parking + parking=garage_boxes";
1548 group: tr("deprecated tagging");
1549}
1550*[shop=winery],
1551*[amenity=winery] {
1552 throwWarning: tr("{0} is deprecated", "{0.tag}");
1553 suggestAlternative: "craft=winery";
1554 suggestAlternative: "shop=wine";
1555 group: tr("deprecated tagging");
1556}
1557*[amenity=youth_centre] {
1558 throwWarning: tr("{0} is deprecated", "{0.tag}");
1559 suggestAlternative: "amenity=community_centre + community_centre=youth_centre";
1560 fixAdd: "amenity=community_centre";
1561 fixAdd: "community_centre=youth_centre";
1562 group: tr("deprecated tagging");
1563}
1564*[building:type][building=yes],
1565*[building:type][!building] {
1566 throwWarning: tr("{0} is deprecated", "{0.key}");
1567 suggestAlternative: "building";
1568 group: tr("deprecated tagging");
1569 fixChangeKey: "building:type => building";
1570 assertMatch: "way building:type=church";
1571 assertMatch: "way building:type=church building=yes";
1572 assertNoMatch: "way building:type=church building=supermarket";
1573}
1574*[building:type][building][building!=yes] {
1575 throwWarning: tr("{0} is deprecated", "{0.key}");
1576 suggestAlternative: "building";
1577 group: tr("deprecated tagging");
1578 assertNoMatch: "way building:type=church";
1579 assertNoMatch: "way building:type=church building=yes";
1580 assertMatch: "way building:type=church building=supermarket";
1581}
1582*[escalator] {
1583 throwWarning: tr("{0} is deprecated", "{0.key}");
1584 suggestAlternative: "highway=steps + conveying=*";
1585 group: tr("deprecated tagging");
1586}
1587*[fenced] {
1588 throwWarning: tr("{0} is deprecated", "{0.key}");
1589 suggestAlternative: "barrier=fence";
1590 group: tr("deprecated tagging");
1591}
1592*[historic_name][!old_name] {
1593 throwWarning: tr("{0} is deprecated", "{0.key}");
1594 suggestAlternative: "old_name";
1595 group: tr("deprecated tagging");
1596 fixChangeKey: "historic_name => old_name";
1597}
1598*[historic_name][old_name] {
1599 throwWarning: tr("{0} is deprecated", "{0.key}");
1600 suggestAlternative: "old_name";
1601 group: tr("deprecated tagging");
1602}
1603*[landuse=field] {
1604 throwWarning: tr("{0} is deprecated", "{0.tag}");
1605 suggestAlternative: "landuse=farmland";
1606 group: tr("deprecated tagging");
1607 fixAdd: "landuse=farmland";
1608}
1609*[leisure=beach] {
1610 throwWarning: tr("{0} is deprecated", "{0.tag}");
1611 suggestAlternative: "natural=beach";
1612 suggestAlternative: "leisure=beach_resort";
1613 group: tr("deprecated tagging");
1614}
1615*[leisure=club] {
1616 throwWarning: tr("{0} is deprecated", "{0.tag}");
1617 suggestAlternative: "club=*";
1618 group: tr("deprecated tagging");
1619}
1620*[leisure=video_arcade] {
1621 throwWarning: tr("{0} is deprecated", "{0.tag}");
1622 suggestAlternative: "leisure=amusement_arcade";
1623 suggestAlternative: "leisure=adult_gaming_centre";
1624 group: tr("deprecated tagging");
1625}
1626*[man_made=jetty] {
1627 throwWarning: tr("{0} is deprecated", "{0.tag}");
1628 suggestAlternative: "man_made=pier";
1629 group: tr("deprecated tagging");
1630 fixAdd: "man_made=pier";
1631}
1632*[man_made=village_pump] {
1633 throwWarning: tr("{0} is deprecated", "{0.tag}");
1634 suggestAlternative: "man_made=water_well";
1635 group: tr("deprecated tagging");
1636 fixAdd: "man_made=water_well";
1637}
1638*[man_made=water_tank] {
1639 throwWarning: tr("{0} is deprecated", "{0.tag}");
1640 suggestAlternative: "man_made=storage_tank + content=water";
1641 group: tr("deprecated tagging");
1642 fixAdd: "man_made=storage_tank";
1643 fixAdd: "content=water";
1644}
1645*[natural=moor] {
1646 throwWarning: tr("{0} is deprecated", "{0.tag}");
1647 suggestAlternative: "natural=heath";
1648 suggestAlternative: "natural=scrub";
1649 suggestAlternative: "natural=grassland";
1650 suggestAlternative: "natural=wetland";
1651 suggestAlternative: "natural=fell";
1652 suggestAlternative: "natural=tundra";
1653 suggestAlternative: "landuse=meadow + meadow=agricultural";
1654 group: tr("deprecated tagging");
1655}
1656*[noexit=no][!fixme] {
1657 throwWarning: tr("{0} is deprecated", "{0.tag}");
1658 suggestAlternative: "fixme=continue";
1659 group: tr("deprecated tagging");
1660 fixAdd: "fixme=continue";
1661 fixRemove: "noexit";
1662}
1663*[noexit=no][fixme] {
1664 throwWarning: tr("{0} is deprecated", "{0.tag}");
1665 suggestAlternative: "fixme=continue";
1666 group: tr("deprecated tagging");
1667}
1668*[shop=dive] {
1669 throwWarning: tr("{0} is deprecated", "{0.tag}");
1670 suggestAlternative: "shop=scuba_diving";
1671 group: tr("deprecated tagging");
1672 fixAdd: "shop=scuba_diving";
1673}
1674*[shop=furnace] {
1675 throwWarning: tr("{0} is deprecated", "{0.tag}");
1676 suggestAlternative: "shop=fireplace";
1677 suggestAlternative: "craft=plumber";
1678 group: tr("deprecated tagging");
1679}
1680*[sport=paragliding] {
1681 throwWarning: tr("{0} is deprecated", "{0.tag}");
1682 suggestAlternative: "sport=free_flying";
1683 group: tr("deprecated tagging");
1684 fixAdd: "sport=free_flying";
1685}
1686*[tourism=bed_and_breakfast] {
1687 throwWarning: tr("{0} is deprecated", "{0.tag}");
1688 suggestAlternative: "tourism=guest_house + guest_house=bed_and_breakfast";
1689 group: tr("deprecated tagging");
1690 fixAdd: "tourism=guest_house";
1691 fixAdd: "guest_house=bed_and_breakfast";
1692}
1693
1694/* #17880 */
1695*[diaper=yes],
1696*[diaper=no] {
1697 throwWarning: tr("{0} is deprecated", "{0.tag}");
1698 suggestAlternative: concat("changing_table=", "{0.value}");
1699 group: tr("deprecated tagging");
1700 fixChangeKey: "diaper => changing_table";
1701 set diaper_checked;
1702}
1703*[diaper][diaper =~ /^[1-9][0-9]*$/] {
1704 throwWarning: tr("{0} is deprecated", "{0.tag}");
1705 suggestAlternative: concat("changing_table=yes + changing_table:count=", "{0.value}");
1706 group: tr("deprecated tagging");
1707 fixChangeKey: "diaper => changing_table:count";
1708 fixAdd: "changing_table=yes";
1709 set diaper_checked;
1710}
1711*[diaper=room] {
1712 throwWarning: tr("{0} is deprecated", "{0.tag}");
1713 suggestAlternative: "changing_table=room";
1714 suggestAlternative: "changing_table=dedicated_room";
1715 group: tr("deprecated tagging");
1716 set diaper_checked;
1717}
1718*[diaper]!.diaper_checked {
1719 throwWarning: tr("{0} is deprecated", "{0.key}");
1720 suggestAlternative: "changing_table";
1721 group: tr("deprecated tagging");
1722}
1723*[diaper:male=yes] {
1724 throwWarning: tr("{0} is deprecated", "{0.tag}");
1725 suggestAlternative: "changing_table:location=male_toilet";
1726 group: tr("deprecated tagging");
1727 fixAdd: "changing_table:location=male_toilet";
1728 fixRemove: "diaper:male";
1729 set diaper___checked;
1730}
1731*[diaper:female=yes] {
1732 throwWarning: tr("{0} is deprecated", "{0.tag}");
1733 suggestAlternative: "changing_table:location=female_toilet";
1734 group: tr("deprecated tagging");
1735 fixAdd: "changing_table:location=female_toilet";
1736 fixRemove: "diaper:female";
1737 set diaper___checked;
1738}
1739*[diaper:unisex=yes] {
1740 throwWarning: tr("{0} is deprecated", "{0.tag}");
1741 suggestAlternative: "changing_table:location=unisex_toilet";
1742 group: tr("deprecated tagging");
1743 fixAdd: "changing_table:location=unisex_toilet";
1744 fixRemove: "diaper:unisex";
1745 set diaper___checked;
1746}
1747*[diaper:wheelchair=yes],
1748*[diaper:wheelchair=no] {
1749 throwWarning: tr("{0} is deprecated", "{0.tag}");
1750 suggestAlternative: concat("changing_table:wheelchair=", "{0.value}");
1751 group: tr("deprecated tagging");
1752 fixChangeKey: "diaper:wheelchair => changing_table:wheelchair";
1753 set diaper___checked;
1754}
1755*[diaper:fee=yes],
1756*[diaper:fee=no] {
1757 throwWarning: tr("{0} is deprecated", "{0.tag}");
1758 suggestAlternative: concat("changing_table:fee=", "{0.value}");
1759 group: tr("deprecated tagging");
1760 fixChangeKey: "diaper:fee => changing_table:fee";
1761 set diaper___checked;
1762}
1763*[/^diaper:/]!.diaper___checked {
1764 throwWarning: tr("{0} is deprecated", "diaper:*");
1765 suggestAlternative: "changing_table:*";
1766 group: tr("deprecated tagging");
1767}
1768*[changing_table][changing_table!~/^(yes|no|limited)$/] {
1769 throwWarning: tr("wrong value: {0}", "{0.tag}");
1770 suggestAlternative: "changing_table=yes";
1771 suggestAlternative: "changing_table=no";
1772 suggestAlternative: "changing_table=limited";
1773}
1774
1775/* #17990 */
1776*[roof:shape=half_hipped] {
1777 throwWarning: tr("{0} is deprecated", "{0.tag}");
1778 suggestAlternative: "roof:shape=half-hipped";
1779 group: tr("deprecated tagging");
1780 fixAdd: "roof:shape=half-hipped";
1781}
1782
1783/* #18003 */
1784*[bridge_name] {
1785 throwWarning: tr("{0} is deprecated", "{0.key}");
1786 suggestAlternative: "bridge:name";
1787 group: tr("deprecated tagging");
1788 fixChangeKey: "bridge_name => bridge:name";
1789}
1790
1791/* #18007 */
1792*[access=public] {
1793 throwWarning: tr("{0} is deprecated", "{0.tag}");
1794 suggestAlternative: "access=yes";
1795 group: tr("deprecated tagging");
1796 fixAdd: "access=yes";
1797}
1798
1799/* #17330 */
1800*[crossing=island] {
1801 throwWarning: tr("{0} is deprecated", "{0.tag}");
1802 suggestAlternative: "crossing:island=yes";
1803 group: tr("deprecated tagging");
1804 fixRemove: "crossing";
1805 fixAdd: "crossing:island=yes";
1806}
1807
1808/* #18152 */
1809*[recycling:metal] {
1810 throwWarning: tr("{0} is deprecated", "{0.key}");
1811 suggestAlternative: "recycling:scrap_metal";
1812 group: tr("deprecated tagging");
1813 fixChangeKey: "recycling:metal => recycling:scrap_metal";
1814}
1815
1816/* #18154 */
1817*[shop=dog_grooming] {
1818 throwWarning: tr("{0} is deprecated", "{0.tag}");
1819 suggestAlternative: "shop=pet_grooming";
1820 fixAdd: "shop=pet_grooming";
1821 group: tr("deprecated tagging");
1822}
1823
1824/* #17984, #19383 */
1825*[tower:type=anchor],
1826*[tower:type=suspension] {
1827 throwWarning: tr("{0} is deprecated", "{0.tag}");
1828 suggestAlternative: concat("line_attachment=", "{0.value}");
1829 fixChangeKey: "tower:type => line_attachment";
1830 set power_tower_type_warning;
1831 group: tr("deprecated tagging");
1832}
1833*[tower:type=branch][branch:type=split],
1834*[tower:type=branch][branch:type=loop] {
1835 throwWarning: tr("{0} is deprecated", "{0.tag}");
1836 suggestAlternative: "line_management=split";
1837 fixAdd: "line_management=split";
1838 fixRemove: "tower:type";
1839 fixRemove: "branch:type";
1840 set power_tower_type_warning;
1841 group: tr("deprecated tagging");
1842}
1843*[tower:type=branch][!branch:type],
1844*[tower:type=branch][branch:type=tap] {
1845 throwWarning: tr("{0} is deprecated", "{0.tag}");
1846 suggestAlternative: "line_management=branch";
1847 fixAdd: "line_management=branch";
1848 fixRemove: "tower:type";
1849 fixRemove: "branch:type";
1850 set power_tower_type_warning;
1851 group: tr("deprecated tagging");
1852}
1853*[tower:type=branch][branch:type=cross] {
1854 throwWarning: tr("{0} is deprecated", "{0.tag}");
1855 suggestAlternative: "line_management=cross";
1856 fixAdd: "line_management=cross";
1857 fixRemove: "tower:type";
1858 fixRemove: "branch:type";
1859 set power_tower_type_warning;
1860 group: tr("deprecated tagging");
1861}
1862*[tower:type=termination] {
1863 throwWarning: tr("{0} is deprecated", "{0.tag}");
1864 suggestAlternative: "line_management=termination";
1865 fixAdd: "line_management=termination";
1866 fixRemove: "tower:type";
1867 set power_tower_type_warning;
1868 group: tr("deprecated tagging");
1869}
1870*[tower:type=transition] {
1871 throwWarning: tr("{0} is deprecated", "{0.tag}");
1872 suggestAlternative: "location:transition=yes";
1873 fixAdd: "location:transition=yes";
1874 fixRemove: "tower:type";
1875 set power_tower_type_warning;
1876 group: tr("deprecated tagging");
1877}
1878*[tower:type=transposing] {
1879 throwWarning: tr("{0} is deprecated", "{0.tag}");
1880 suggestAlternative: "line_management=transpose";
1881 fixAdd: "line_management=transpose";
1882 fixRemove: "tower:type";
1883 set power_tower_type_warning;
1884 group: tr("deprecated tagging");
1885}
1886*[tower:type=crossing] {
1887 throwWarning: tr("{0} is deprecated", "{0.tag}");
1888 suggestAlternative: "height=* + design=*";
1889 set power_tower_type_warning;
1890 group: tr("deprecated tagging");
1891}
1892*[tower:type][power][power=~/^(tower|pole|insulator|portal|terminal)$/]!.power_tower_type_warning {
1893 throwWarning: tr("{0} is deprecated for {1}", "{0.key}", "{1.tag}");
1894 suggestAlternative: "design";
1895 suggestAlternative: "structure";
1896 suggestAlternative: "line_management";
1897 suggestAlternative: "line_attachment";
1898 set generic_power_tower_type_warning;
1899 group: tr("deprecated tagging");
1900}
1901node[pole:type=anchor],
1902node[pole:type=suspension] {
1903 throwWarning: tr("{0} is deprecated", "{0.tag}");
1904 suggestAlternative: concat("line_attachment=", "{0.value}");
1905 fixChangeKey: "pole:type => line_attachment";
1906 set power_pole_type_warning;
1907 group: tr("deprecated tagging");
1908}
1909node[pole:type=branch][branch:type=split],
1910node[pole:type=branch][branch:type=loop] {
1911 throwWarning: tr("{0} is deprecated", "{0.tag}");
1912 suggestAlternative: "line_management=split";
1913 fixAdd: "line_management=split";
1914 fixRemove: "pole:type";
1915 fixRemove: "branch:type";
1916 set power_pole_type_warning;
1917 group: tr("deprecated tagging");
1918}
1919node[pole:type=branch][!branch:type],
1920node[pole:type=branch][branch:type=tap] {
1921 throwWarning: tr("{0} is deprecated", "{0.tag}");
1922 suggestAlternative: "line_management=branch";
1923 fixAdd: "line_management=branch";
1924 fixRemove: "pole:type";
1925 fixRemove: "branch:type";
1926 set power_pole_type_warning;
1927 group: tr("deprecated tagging");
1928}
1929node[pole:type=branch][branch:type=cross] {
1930 throwWarning: tr("{0} is deprecated", "{0.tag}");
1931 suggestAlternative: "line_management=cross";
1932 fixAdd: "line_management=cross";
1933 fixRemove: "pole:type";
1934 fixRemove: "branch:type";
1935 set power_pole_type_warning;
1936 group: tr("deprecated tagging");
1937}
1938node[pole:type=termination] {
1939 throwWarning: tr("{0} is deprecated", "{0.tag}");
1940 suggestAlternative: "line_management=termination";
1941 fixAdd: "line_management=termination";
1942 fixRemove: "pole:type";
1943 set power_pole_type_warning;
1944 group: tr("deprecated tagging");
1945}
1946node[pole:type=transition] {
1947 throwWarning: tr("{0} is deprecated", "{0.tag}");
1948 suggestAlternative: "location:transition=yes";
1949 fixAdd: "location:transition=yes";
1950 fixRemove: "pole:type";
1951 set power_pole_type_warning;
1952 group: tr("deprecated tagging");
1953}
1954*[pole:type][power][power=~/^(tower|pole|insulator|portal|terminal)$/]!.power_pole_type_warning!.generic_power_tower_type_warning {
1955 throwWarning: tr("{0} is deprecated for {1}", "{0.key}", "{1.tag}");
1956 suggestAlternative: "line_management";
1957 suggestAlternative: "line_attachment";
1958 group: tr("deprecated tagging");
1959}
1960
1961/* #18267 */
1962node[man_made=pipeline_marker],
1963node[pipeline=marker],
1964node[power=marker],
1965node[cable=marker] {
1966 throwWarning: tr("{0} is deprecated", "{0.tag}");
1967 suggestAlternative: "marker=* + utility=*";
1968 group: tr("deprecated tagging");
1969}
1970
1971/* #17643 */
1972way[barrier=embankment] {
1973 throwWarning: tr("{0} is deprecated", "{0.tag}");
1974 suggestAlternative: "man_made=embankment";
1975 suggestAlternative: "embankment=yes";
1976 group: tr("deprecated tagging");
1977}
1978
1979/* #18469 */
1980way[landuse=churchyard] {
1981 throwWarning: tr("{0} is deprecated", "{0.tag}");
1982 suggestAlternative: "landuse=religious";
1983 suggestAlternative: "amenity=graveyard";
1984 group: tr("deprecated tagging");
1985}
1986
1987*[sloped_curb=yes][!kerb],
1988*[sloped_curb=both][!kerb] {
1989 throwWarning: tr("{0} is deprecated", "{0.tag}");
1990 suggestAlternative: "kerb=lowered";
1991 group: tr("deprecated tagging");
1992 fixRemove: "sloped_curb";
1993 fixAdd: "kerb=lowered";
1994}
1995*[sloped_curb=no][!kerb] {
1996 throwWarning: tr("{0} is deprecated", "{0.tag}");
1997 suggestAlternative: "kerb=yes";
1998 group: tr("deprecated tagging");
1999 fixRemove: "sloped_curb";
2000 fixAdd: "kerb=yes";
2001}
2002*[sloped_curb][sloped_curb !~ /^(yes|both|no)$/][!kerb],
2003*[sloped_curb][kerb] {
2004 throwWarning: tr("{0} is deprecated", "{0.key}");
2005 suggestAlternative: "kerb=*";
2006 group: tr("deprecated tagging");
2007}
2008
2009/* #18571 */
2010*[unnamed=yes] {
2011 throwWarning: tr("{0} is deprecated", "{0.tag}");
2012 suggestAlternative: "noname=yes";
2013 fixChangeKey: "unnamed => noname";
2014 group: tr("deprecated tagging");
2015}
2016
2017node[segregated][segregated!=yes][segregated!=no],
2018way[segregated ][segregated!=yes][segregated!=no] {
2019 throwWarning: tr("unusual value of {0}", "{0.key}");
2020}
2021
2022/* #18603 */
2023way[bicycle:oneway] {
2024 throwWarning: tr("{0} is deprecated", "{0.key}");
2025 suggestAlternative: "oneway:bicycle";
2026 fixChangeKey: "bicycle:oneway => oneway:bicycle";
2027 group: tr("deprecated tagging");
2028}
2029
2030/* #18605 */
2031*[building:height] {
2032 throwWarning: tr("{0} is deprecated", "{0.key}");
2033 suggestAlternative: "height";
2034 fixChangeKey: "building:height => height";
2035 group: tr("deprecated tagging");
2036}
2037*[building:min_height] {
2038 throwWarning: tr("{0} is deprecated", "{0.key}");
2039 suggestAlternative: "min_height";
2040 fixChangeKey: "building:min_height => min_height";
2041 group: tr("deprecated tagging");
2042}
2043
2044/* #11232 */
2045way[highway][construction=yes][highway!=construction] {
2046 throwWarning: tr("{0} is deprecated", "{1.tag}");
2047 suggestAlternative: "construction=minor";
2048 suggestAlternative: concat("highway=construction + construction=", "{0.value}");
2049 group: tr("deprecated tagging");
2050}
2051
2052/* #18659 */
2053*[car][amenity=charging_station] {
2054 throwWarning: tr("{0} is deprecated", "{0.key}");
2055 suggestAlternative: "motorcar";
2056 group: tr("deprecated tagging");
2057 fixChangeKey: "car => motorcar";
2058}
2059
2060/* #18767 */
2061*[navigationaid=approach_light],
2062*[navigationaid="ALS (Approach lighting system)"] {
2063 throwWarning: tr("{0} is deprecated", "{0.tag}");
2064 suggestAlternative: "navigationaid=als";
2065 group: tr("deprecated tagging");
2066 fixAdd: "navigationaid=als";
2067}
2068
2069/* #18819 */
2070node[exit_to] {
2071 throwWarning: tr("{0} is deprecated", "{0.key}");
2072 suggestAlternative: "destination";
2073 group: tr("deprecated tagging");
2074}
2075
2076/* #18951 */
2077*[water=riverbank][!natural] {
2078 throwWarning: tr("{0} is deprecated", "{0.tag}");
2079 suggestAlternative: "natural=water + water=river";
2080 group: tr("deprecated tagging");
2081 fixAdd: "water=river";
2082 fixAdd: "natural=water";
2083}
2084*[water=riverbank][natural] {
2085 throwWarning: tr("{0} is deprecated", "{0.tag}");
2086 suggestAlternative: "natural=water + water=river";
2087 group: tr("deprecated tagging");
2088}
2089
2090/* #21630 */
2091*[waterway=riverbank][!natural][!water],
2092*[waterway=riverbank][natural=water][!water],
2093*[waterway=riverbank][!natural][water=river],
2094*[waterway=riverbank][natural=water][water=river] {
2095 throwWarning: tr("{0} is deprecated", "{0.tag}");
2096 suggestAlternative: "natural=water + water=river";
2097 group: tr("deprecated tagging");
2098 fixAdd: "natural=water";
2099 fixAdd: "water=river";
2100 fixRemove: "waterway";
2101 assertMatch: "way waterway=riverbank";
2102 assertMatch: "way waterway=riverbank natural=water";
2103 assertMatch: "way waterway=riverbank water=river";
2104 assertMatch: "way waterway=riverbank natural=water water=river";
2105 assertNoMatch: "way waterway=riverbank natural=shingle";
2106 assertNoMatch: "way waterway=riverbank water=lake";
2107 assertNoMatch: "way waterway=riverbank natural=water water=lake";
2108 assertNoMatch: "way waterway=riverbank natural=shingle water=river";
2109}
2110*[waterway=riverbank][natural][natural!=water],
2111*[waterway=riverbank][water][water!=river] {
2112 throwWarning: tr("{0} is deprecated", "{0.tag}");
2113 suggestAlternative: "natural=water + water=river";
2114 group: tr("deprecated tagging");
2115 assertMatch: "way waterway=riverbank natural=shingle";
2116 assertMatch: "way waterway=riverbank water=lake";
2117 assertNoMatch: "way waterway=riverbank";
2118 assertNoMatch: "way waterway=riverbank natural=water";
2119 assertNoMatch: "way waterway=riverbank water=river";
2120 assertNoMatch: "way waterway=riverbank natural=water water=river";
2121}
2122
2123node[amenity=bench][capacity][!seats],
2124way[amenity=bench][capacity][!seats] {
2125 throwWarning: tr("{0} is deprecated for {1}", "{1.key}", "{0.tag}");
2126 suggestAlternative: "seats";
2127 group: tr("deprecated tagging");
2128 fixChangeKey: "capacity => seats";
2129}
2130node[amenity=bench][capacity][seats],
2131way[amenity=bench][capacity][seats] {
2132 throwWarning: tr("{0} is deprecated for {1}", "{1.key}", "{0.tag}");
2133 suggestAlternative: "seats";
2134 group: tr("deprecated tagging");
2135}
2136
2137/* #19396 */
2138way[stream=intermittent] {
2139 throwWarning: tr("{0} is deprecated", "{0.tag}");
2140 suggestAlternative: "intermittent=yes";
2141 suggestAlternative: "seasonal=yes";
2142 group: tr("deprecated tagging");
2143}
2144
2145*[shop=lamps] {
2146 throwWarning: tr("{0} is deprecated", "{0.tag}");
2147 suggestAlternative: "shop=lighting";
2148 group: tr("deprecated tagging");
2149 fixAdd: "shop=lighting";
2150}
2151
2152/* #19180 */
2153*[access=customer] {
2154 throwWarning: tr("{0} is deprecated", "{0.tag}");
2155 suggestAlternative: "access=customers";
2156 group: tr("deprecated tagging");
2157 fixAdd: "access=customers";
2158}
2159*[addr:inclusion=estimated] {
2160 throwWarning: tr("{0} is deprecated", "{0.tag}");
2161 suggestAlternative: "addr:inclusion=estimate";
2162 group: tr("deprecated tagging");
2163 fixAdd: "addr:inclusion=estimate";
2164}
2165*[building=apartment] {
2166 throwWarning: tr("{0} is deprecated", "{0.tag}");
2167 suggestAlternative: "building=apartments";
2168 group: tr("deprecated tagging");
2169 fixAdd: "building=apartments";
2170}
2171node[lamp_mount="bent mast"] {
2172 throwWarning: tr("{0} is deprecated", "{0.tag}");
2173 suggestAlternative: "lamp_mount=bent_mast";
2174 group: tr("deprecated tagging");
2175 fixAdd: "lamp_mount=bent_mast";
2176}
2177node[lamp_mount="straight mast"] {
2178 throwWarning: tr("{0} is deprecated", "{0.tag}");
2179 suggestAlternative: "lamp_mount=straight_mast";
2180 group: tr("deprecated tagging");
2181 fixAdd: "lamp_mount=straight_mast";
2182}
2183node[lamp_type=electrical] {
2184 throwWarning: tr("{0} is deprecated", "{0.tag}");
2185 suggestAlternative: "lamp_type=electric";
2186 group: tr("deprecated tagging");
2187 fixAdd: "lamp_type=electric";
2188}
2189*[generator:type=solar_photovoltaic_panels] {
2190 throwWarning: tr("{0} is deprecated", "{0.tag}");
2191 suggestAlternative: "generator:type=solar_photovoltaic_panel";
2192 group: tr("deprecated tagging");
2193 fixAdd: "generator:type=solar_photovoltaic_panel";
2194}
2195*[building=part] {
2196 throwWarning: tr("{0} is deprecated", "{0.tag}");
2197 suggestAlternative: "building:part=yes";
2198 group: tr("deprecated tagging");
2199 /* without autofix, it is not clear if a building or a building part is mapped */
2200}
2201
2202/* #19739 */
2203*[natural=sink_hole] {
2204 throwWarning: tr("{0} is deprecated", "{0.tag}");
2205 suggestAlternative: "natural=sinkhole";
2206 group: tr("deprecated tagging");
2207 fixAdd: "natural=sinkhole";
2208}
2209
2210/* #19782 */
2211*[climbing:grade:UIAA:min] {
2212 throwWarning: tr("{0} is deprecated", "{0.key}");
2213 suggestAlternative: "climbing:grade:uiaa:min";
2214 group: tr("deprecated tagging");
2215 fixChangeKey: "climbing:grade:UIAA:min => climbing:grade:uiaa:min";
2216}
2217*[climbing:grade:UIAA:max] {
2218 throwWarning: tr("{0} is deprecated", "{0.key}");
2219 suggestAlternative: "climbing:grade:uiaa:max";
2220 group: tr("deprecated tagging");
2221 fixChangeKey: "climbing:grade:UIAA:max => climbing:grade:uiaa:max";
2222}
2223*[climbing:grade:UIAA:mean] {
2224 throwWarning: tr("{0} is deprecated", "{0.key}");
2225 suggestAlternative: "climbing:grade:uiaa:mean";
2226 group: tr("deprecated tagging");
2227 fixChangeKey: "climbing:grade:UIAA:mean => climbing:grade:uiaa:mean";
2228}
2229*[climbing:grade:UIAA] {
2230 throwWarning: tr("{0} is deprecated", "{0.key}");
2231 suggestAlternative: "climbing:grade:uiaa";
2232 group: tr("deprecated tagging");
2233 fixChangeKey: "climbing:grade:UIAA => climbing:grade:uiaa";
2234}
2235
2236/* #19835 */
2237*[cuisine][cuisine =~ /^(?i)(bbq)$/] { /* single value cases with autofix */
2238 throwWarning: tr("{0} is deprecated", "{0.tag}");
2239 suggestAlternative: "cuisine=barbecue";
2240 group: tr("deprecated tagging");
2241 fixAdd: "cuisine=barbecue";
2242 set bbq_autofix;
2243 assertMatch: "way cuisine=bbq";
2244 assertMatch: "way cuisine=BBQ";
2245 assertNoMatch: "way cuisine=pizza;Bbq";
2246 assertNoMatch: "way cuisine=pizza;bbq";
2247 assertNoMatch: "way cuisine=bbq;pizza";
2248 assertNoMatch: "way cuisine=pasta;bbq;pizza";
2249 assertNoMatch: "way cuisine=korean_bbq";
2250 assertNoMatch: "way cuisine=korean_bbq;bbq";
2251}
2252*[cuisine =~ /(?i)(;bbq|bbq;)/][cuisine!~/(?i)(_bbq)/] { /* multi value cases without autofix */
2253 throwWarning: tr("{0} is deprecated", "cuisine=bbq");
2254 suggestAlternative: "cuisine=barbecue";
2255 group: tr("deprecated tagging");
2256 assertNoMatch: "way cuisine=bbq";
2257 assertNoMatch: "way cuisine=BBQ";
2258 assertMatch: "way cuisine=pizza;Bbq";
2259 assertMatch: "way cuisine=pizza;bbq";
2260 assertMatch: "way cuisine=bbq;pizza";
2261 assertMatch: "way cuisine=pasta;bbq;pizza";
2262 assertNoMatch: "way cuisine=korean_bbq";
2263 assertNoMatch: "way cuisine=korean_bbq;bbq"; /* corner case (mixed ; and _) not supported by these rules, probably not present in the osm database */
2264}
2265
2266/* #17498, #20392 */
2267way[cycleway=none],
2268way[cycleway:left=none],
2269way[cycleway:right=none],
2270way[shoulder=none] {
2271 throwWarning: tr("{0} is deprecated", "{0.tag}");
2272 suggestAlternative: concat("{0.key}", "=no");
2273 group: tr("deprecated tagging");
2274 fixAdd: concat("{0.key}", "=no");
2275}
2276
2277/* #17809 */
2278*[Fixme] {
2279 throwWarning: tr("{0} is deprecated", "{0.key}");
2280 suggestAlternative: "fixme";
2281 group: tr("deprecated tagging");
2282 fixChangeKey: "Fixme => fixme";
2283 assertMatch: "way Fixme=foo";
2284 assertNoMatch: "way fixme=foo";
2285 assertNoMatch: "way FIXME=foo";
2286}
2287
2288/* #20338 */
2289*[amenity=embassy] {
2290 throwWarning: tr("{0} is deprecated", "{0.tag}");
2291 suggestAlternative: "office=diplomatic + diplomatic=embassy";
2292 group: tr("deprecated tagging");
2293 fixAdd: "office=diplomatic";
2294 fixChangeKey: "amenity => diplomatic";
2295}
2296
2297/* #11019 */
2298*[service:bicycle:chaintool] {
2299 throwWarning: tr("{0} is deprecated", "{0.key}");
2300 suggestAlternative: "service:bicycle:chain_tool";
2301 group: tr("deprecated tagging");
2302 fixChangeKey: "service:bicycle:chaintool => service:bicycle:chain_tool";
2303}
2304
2305/* #20434 */
2306*[building:roof:shape] {
2307 throwWarning: tr("{0} is deprecated", "{0.key}");
2308 suggestAlternative: "roof:shape";
2309 group: tr("deprecated tagging");
2310 fixChangeKey: "building:roof:shape => roof:shape";
2311}
2312
2313/* #20530 */
2314*[man_made=pumping_rig][!pump_mechanism][!mechanical_driver][!mechanical_coupling] {
2315 throwWarning: tr("{0} is deprecated", "{0.tag}");
2316 suggestAlternative: "man_made=petroleum_well";
2317 suggestAlternative: "man_made=water_well";
2318 fixAdd: "pump_mechanism=piston";
2319 fixAdd: "mechanical_driver=combustion_engine";
2320 fixAdd: "mechanical_coupling=nodding_donkey";
2321 group: tr("deprecated tagging");
2322 set pumping_ring_no_mech;
2323}
2324*[man_made=pumping_rig]!.pumping_ring_no_mech {
2325 throwWarning: tr("{0} is deprecated", "{0.tag}");
2326 suggestAlternative: "man_made=petroleum_well";
2327 suggestAlternative: "man_made=water_well";
2328 group: tr("deprecated tagging");
2329}
2330*[pump:type=beam_pump][!pump_mechanism][!mechanical_driver][!mechanical_coupling] {
2331 throwWarning: tr("{0} is deprecated", "{0.tag}");
2332 suggestAlternative: "pump_mechanism";
2333 fixRemove: "pump:type";
2334 fixAdd: "pump_mechanism=piston";
2335 fixAdd: "mechanical_driver=combustion_engine";
2336 fixAdd: "mechanical_coupling=nodding_donkey";
2337 group: tr("deprecated tagging");
2338 set beam_pump_no_mech
2339}
2340*[pump:type]!.beam_pump_no_mech {
2341 throwWarning: tr("{0} is deprecated", "{0.tag}");
2342 suggestAlternative: "pump_mechanism";
2343 group: tr("deprecated tagging");
2344}
2345*[substance=heat] {
2346 throwWarning: tr("{0} is deprecated", "{0.tag}");
2347 suggestAlternative: "substance=hot_water";
2348 suggestAlternative: "substance=steam";
2349 group: tr("deprecated tagging");
2350}
2351
2352/* #20959 */
2353*[landuse=school] {
2354 throwWarning: tr("{0} is deprecated", "{0.tag}");
2355 suggestAlternative: "amenity=college";
2356 suggestAlternative: "amenity=school";
2357 suggestAlternative: "amenity=university";
2358 suggestAlternative: "landuse=education";
2359 group: tr("deprecated tagging");
2360}
2361
2362/* #21954 decoturf was added to JOSM presets in r8123 and replaced with acrylic in r18404 */
2363*[surface=decoturf] {
2364 throwWarning: tr("{0} is deprecated", "{0.tag}");
2365 suggestAlternative: "surface=acrylic";
2366 fixAdd: "surface=acrylic";
2367 group: tr("deprecated tagging");
2368}
2369
2370/* #20637 */
2371*[role] {
2372 throwWarning: tr("{0} as a tag on an object. Roles are specified in the relation members list instead.", "{0.tag}", "{0.key}");
2373 assertMatch: "node role=stop";
2374}
2375
2376/* #22120 */
2377*[school=entrance] {
2378 throwWarning: tr("{0} is deprecated", "{0.tag}");
2379 suggestAlternative: "entrance=yes";
2380 suggestAlternative: "entrance=main";
2381 group: tr("deprecated tagging");
2382}
2383
2384/* #21836 */
2385*[voltage-high],
2386*[voltage-low] {
2387 throwWarning: tr("{0} is deprecated", "{0.key}");
2388 suggestAlternative: "voltage:primary";
2389 suggestAlternative: "voltage:secondary";
2390 group: tr("deprecated tagging");
2391}
2392
2393/* When tags are deprecated they should be added to ignoretags.cfg too. */
Note: See TracBrowser for help on using the repository browser.