Skip to content
Commits on Source (5)
......@@ -3,7 +3,7 @@
<entry
kind="dir"
path="trunk"
revision="15492">
revision="15553">
<url>https://josm.openstreetmap.de/svn/trunk</url>
<relative-url>^/trunk</relative-url>
<repository>
......@@ -11,9 +11,9 @@
<uuid>0c6e7542-c601-0410-84e7-c038aed88b3b</uuid>
</repository>
<commit
revision="15492">
revision="15553">
<author>Don-vip</author>
<date>2019-11-01T22:59:01.990576Z</date>
<date>2019-12-01T22:10:15.034140Z</date>
</commit>
</entry>
</info>
......@@ -778,6 +778,8 @@ Build-Date: ${build.tstamp}
<ignore classname="io.*"/>
<ignore classname="it.*"/>
<ignore classname="java.lang.invoke.MethodHandle"/>
<ignore classname="java.nio.ByteBuffer"/>
<ignore classname="java.nio.FloatBuffer"/>
<ignore classname="java.util.list.kotlin.*"/>
<ignore classname="javax.*"/>
<ignore classname="jdk.swing.interop.*"/>
......@@ -830,6 +832,7 @@ Build-Date: ${build.tstamp}
<ignore classname="org.testng.*"/>
<ignore classname="org.w3c.*"/>
<ignore classname="org.zeromq.*"/>
<ignore classname="waffle.*"/>
<!-- plugins used by another ones -->
<ignore classname="org.openstreetmap.josm.plugins.geotools.*"/>
<ignore classname="org.openstreetmap.josm.plugins.jaxb.*"/>
......
......@@ -1554,24 +1554,17 @@
</group> <!-- Highways -->
<group name="Water" name_context="main group" icon="presets/nautical/waterway_river.svg">
<group name="Water" name_context="sub group" icon="presets/nautical/waterway_river.svg">
<item name="Drain" icon="presets/nautical/waterway_drain.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=drain" />
<space />
<key key="waterway" value="drain" />
<optional>
<text key="name" text="Name" />
<reference ref="waterway" />
</optional>
</item> <!-- Drain -->
<item name="Ditch" icon="presets/nautical/waterway_ditch.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=ditch" />
<item name="River" icon="presets/nautical/waterway_river.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=river" />
<space />
<key key="waterway" value="ditch" />
<key key="waterway" value="river" />
<text key="name" text="Name" />
<optional>
<text key="name" text="Name" />
<reference ref="waterway" />
<reference ref="waterway_wikipedia" />
<check key="lock" text="Lock" disable_off="true" />
</optional>
</item> <!-- Ditch -->
<reference ref="water_access" />
</item> <!-- River -->
<item name="Stream" icon="presets/nautical/waterway_stream.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=stream" />
<space />
......@@ -1582,17 +1575,19 @@
</optional>
<reference ref="water_access" />
</item> <!-- Stream -->
<item name="River" icon="presets/nautical/waterway_river.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=river" />
<item name="Tidal channel" icon="presets/nautical/tidal_channel.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=tidal_channel" />
<space />
<key key="waterway" value="river" />
<text key="name" text="Name" />
<key key="waterway" value="tidal_channel" />
<optional>
<reference ref="waterway_wikipedia" />
<check key="lock" text="Lock" disable_off="true" />
<text key="name" text="Name" />
<check key="salt" text="Salt Water" disable_off="true" />
<check key="intermittent" text="Intermittent" disable_off="true" />
<check key="seasonal" text="Seasonal" disable_off="true" />
<text key="width" text="Width (meters)" />
<text key="wikipedia" text="Wikipedia" />
</optional>
<reference ref="water_access" />
</item> <!-- River -->
</item> <!-- Tidal channel -->
<item name="Canal" icon="presets/nautical/waterway_canal.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=canal" />
<space />
......@@ -1608,6 +1603,24 @@
</optional>
<reference ref="water_access" />
</item> <!-- Canal -->
<item name="Drain" icon="presets/nautical/waterway_drain.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=drain" />
<space />
<key key="waterway" value="drain" />
<optional>
<text key="name" text="Name" />
<reference ref="waterway" />
</optional>
</item> <!-- Drain -->
<item name="Ditch" icon="presets/nautical/waterway_ditch.svg" type="way" preset_name_label="true">
<link wiki="Tag:waterway=ditch" />
<space />
<key key="waterway" value="ditch" />
<optional>
<text key="name" text="Name" />
<reference ref="waterway" />
</optional>
</item> <!-- Ditch -->
<separator/>
<item name="Spring" icon="presets/landmark/spring.svg" type="node,closedway" preset_name_label="true">
<link wiki="Tag:natural=spring" />
......@@ -2450,6 +2463,7 @@
<role key="platform_exit_only" text="platform (exit only)" requisite="optional" type="node,way,closedway" member_expression="public_transport=platform" />
<role key="platform_entry_only" text="platform (entry only)" requisite="optional" type="node,way,closedway" member_expression="public_transport=platform" />
<role key="" text="route segment" requisite="required" type="way,closedway" member_expression="highway" />
<role key="hail_and_ride" text="hail and ride route segment" requisite="optional" type="way,closedway" member_expression="highway" />
</roles>
</item> <!-- Public Transport Route (Bus) -->
<item name="Route Master" icon="presets/misc/route.svg" type="relation" preset_name_label="true">
......@@ -2897,6 +2911,22 @@
<reference ref="nudism" />
<reference ref="link_contact_address_payment" />
</item> <!-- Campsite -->
<item name="Camp pitch" icon="presets/accommodation/camp_pitch.svg" type="node,closedway,multipolygon" preset_name_label="true">
<link wiki="Tag:tourism=camp_pitch" />
<space />
<key key="tourism" value="camp_pitch" />
<text key="ref" text="Reference" />
<text key="addr:unit" text="Unit number" />
<text key="capacity" text="Number of places" />
<reference ref="surface" />
<checkgroup columns="2">
<check key="tents" text="Tents allowed" />
<check key="caravans" text="Caravans allowed" />
<check key="drinking_water" text="Drinking Water" />
<check key="power_supply" text="Power supply" />
<check key="permanent_camping" text="Permanent camping only" />
</checkgroup>
</item> <!-- Camp pitch -->
</group> <!-- Accommodation -->
<group name="Food+Drinks" icon="presets/food/restaurant.svg">
<item name="Restaurant" icon="presets/food/restaurant.svg" type="node,closedway,multipolygon" preset_name_label="true">
......@@ -3272,6 +3302,14 @@
<space />
<reference ref="link_contact_address_payment" />
</item> <!-- Horse Riding -->
<item name="Hackerspace" icon="presets/leisure/hackerspace.svg" type="node,closedway,multipolygon" preset_name_label="true">
<link wiki="Tag:leisure=hackerspace" />
<space />
<key key="leisure" value="hackerspace" />
<reference ref="name_operator_oh_wheelchair" />
<space />
<reference ref="link_contact_address" />
</item> <!-- Hackerspace -->
<separator/>
<item name="Playground" icon="presets/leisure/playground.svg" type="node,closedway,multipolygon" preset_name_label="true">
<link wiki="Tag:leisure=playground" />
......@@ -4871,14 +4909,6 @@
<combo key="diameter" text="Diameter (mm)" values="800,1000,1200,1500,1600,1800,2200,2300,2400,2500,2600,2800,3200,3300,3400,3500,4000,4200,4300,4800" />
<text key="pressure" text="Pressure (bar)" />
</item> <!-- Pipeline -->
<item name="Pipeline Marker" icon="presets/misc/pipeline_marker.svg" type="node" preset_name_label="true">
<link wiki="Tag:pipeline=marker" />
<space />
<key key="pipeline" value="marker" />
<text key="ref" text="Reference" />
<reference ref="operator_substance" />
<reference ref="support" />
</item> <!-- Pipeline Marker -->
<item name="Pipeline Valve" icon="presets/misc/valve.svg" type="node" preset_name_label="true">
<link wiki="Tag:pipeline=valve" />
<space />
......@@ -4890,6 +4920,18 @@
<combo key="sensor:position" text="Position sensor" values="optical,mechanical,inductive,yes" />
<reference ref="ref_operator" />
</item> <!-- Pipeline Valve -->
<item name="Marker" icon="presets/misc/pipeline_marker.svg" type="node" preset_name_label="true">
<link wiki="Key:marker" />
<space />
<combo key="marker" text="Type" values="aerial,ground,pedestal,plate,post,stone" values_context="marker" match="key" />
<combo key="utility" text="Utility" values="chemical,gas,heating,hydrant,oil,power,sewerage,street_lighting,telecom,television,waste,water" />
<optional>
<reference ref="ref_operator" />
<combo key="material" text="Material" values="concrete,metal,plastic,steel,stone,wood" />
<combo key="colour" text="Color (HTML name or hexadecimal code)" values_context="color" values="black,blue,brown,gray,green,orange,purple,red,silver,white,yellow,#CD853F" />
<combo key="location" text="Location" values="underground,overground" values_context="pipeline" />
</optional>
</item> <!-- Marker -->
<item name="Manhole" icon="presets/misc/manhole.svg" type="node" preset_name_label="true">
<link wiki="Key:manhole" />
<space />
......@@ -6249,6 +6291,13 @@
<reference ref="name_brand_oh_wheelchair" />
<reference ref="link_contact_address_payment" />
</item> <!-- Travel Agency -->
<item name="Scuba diving" icon="presets/shop/scuba_diving.svg" type="node,closedway,multipolygon" preset_name_label="true">
<link wiki="Tag:shop=scuba_diving" />
<space />
<key key="shop" value="scuba_diving" />
<reference ref="name_brand_oh_wheelchair" />
<reference ref="link_contact_address_payment" />
</item> <!-- Scuba diving -->
<item name="Musical Instrument" icon="presets/shop/musical_instrument.svg" type="node,closedway,multipolygon" preset_name_label="true">
<link wiki="Tag:shop=musical_instrument" />
<space />
......@@ -6336,6 +6385,13 @@
<reference ref="name_oh_wheelchair" />
<reference ref="link_contact_address_payment" />
</item> <!-- Photo -->
<item name="Weapons" icon="presets/shop/weapons.svg" type="node,closedway,multipolygon" preset_name_label="true">
<link wiki="Tag:shop=weapons" />
<space />
<key key="shop" value="weapons" />
<reference ref="name_oh_wheelchair" />
<reference ref="link_contact_address_payment" />
</item> <!-- Weapons -->
<item name="Funeral Directors" icon="presets/shop/funeral_directors.svg" type="node,closedway,multipolygon" preset_name_label="true">
<link wiki="Tag:shop=funeral_directors" />
<space />
......@@ -7518,9 +7574,6 @@
<space />
<key key="type" value="restriction" />
<combo key="restriction" text="Restriction" values="no_left_turn,no_right_turn,no_straight_on,no_u_turn,only_right_turn,only_left_turn,only_straight_on" values_searchable="true" />
<optional>
<text key="name" text="Name" />
</optional>
<roles>
<role key="from" text="from way" requisite="required" count="1" type="way" />
<role key="via" text="via node or ways" requisite="required" type="way,node" />
......
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="https://josm.openstreetmap.de/gpx-drawing-extensions-1.0"
elementFormDefault="qualified"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gpxd="https://josm.openstreetmap.de/gpx-drawing-extensions-1.0"
xsi:schemaLocation="https://josm.openstreetmap.de/gpx-drawing-extensions-1.0 https://josm.openstreetmap.de/gpx-drawing-extensions-1.0.xsd">
<xsd:annotation>
<xsd:documentation>
This schema defines drawing extensions for the GPX 1.1 schema (http://www.topografix.com/GPX/1/1/gpx.xsd).
Elements in this schema should be used as child elements of the "extensions" element defined by the GPX schema.
</xsd:documentation>
</xsd:annotation>
<!-- Elements -->
<xsd:element name="color" type="gpxd:hexColor_type">
<xsd:annotation>
<xsd:documentation>
The color of the element, i.e. #RRGGBB or #RRGGBBAA.
Note that applications should apply possible alpha values to the lines and opacity to the whole track. This means that overlapping parts of the
track with alpha values will look more intense than individual lines, whereas the opacity affects the whole track including overlapping parts.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="opacity" type="gpxd:opacity_type">
<xsd:annotation>
<xsd:documentation>
The opacity of the element between 0.00 and 1.00.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="width" type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation>
The width of the line in pixels, applications may use a width relative to this value if required.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="dashPattern" type="gpxd:dashPattern_type">
<xsd:annotation>
<xsd:documentation>
The dash pattern of the line, see gpxd:dashPattern_type. Should always be relative to the width.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<!-- Types -->
<xsd:simpleType name="hexColor_type">
<xsd:annotation>
<xsd:documentation>
The hexColor_type must be a # followed by a 6 or 8-digit hex representation of the color (with or without the alpha value).
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="\#([a-fA-F0-9]{6}|[a-fA-F0-9]{8})" />
<xsd:whiteSpace value="collapse" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="opacity_type">
<xsd:annotation>
<xsd:documentation>
The opacity_type must be a decimal value between 0 and 1.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:decimal">
<xsd:minInclusive value="0" />
<xsd:maxInclusive value="1" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="dashPattern_type">
<xsd:annotation>
<xsd:documentation>
The dashPattern_type can be
- a representation of the pattern as y-n-y-n-... with y being the relative length of the line that is
visible and n being the relative length of the line that is hidden to create a dashed / dotted line.
Has to have an even number of segments (at least two) and can contain multi-digit numbers.
- one of the following predefined values:
none, dash-long, dash-medium, dash-short, dot-sparse, dot-normal, dot-dense, dash-dot, dash-dot-dot
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string"> <!-- use string based pattern instead of enum because both pattern and enums are allowed -->
<xsd:pattern value="\d+\-\d+(\-\d+\-\d+)*" /> <!-- pattern, see documentation above -->
<xsd:pattern value="none" /> <!-- 1-0, default value/line -->
<xsd:pattern value="dash-long" /> <!-- 6-2 -->
<xsd:pattern value="dash-medium" /> <!-- 4-4 -->
<xsd:pattern value="dash-short" /> <!-- 2-6 -->
<xsd:pattern value="dot-sparse" /> <!-- 1-4 -->
<xsd:pattern value="dot-normal" /> <!-- 1-2 -->
<xsd:pattern value="dot-dense" /> <!-- 1-1 -->
<xsd:pattern value="dash-dot" /> <!-- 4-2-1-2 -->
<xsd:pattern value="dash-dot-dot" /> <!-- 4-2-1-2-1-2 -->
</xsd:restriction>
</xsd:simpleType>
</schema>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://josm.openstreetmap.de/gpx-extensions-1.1"
elementFormDefault="qualified"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:josm="http://josm.openstreetmap.de/gpx-extensions-1.1"
xsi:schemaLocation="http://josm.openstreetmap.de/gpx-extensions-1.1 http://josm.openstreetmap.de/gpx-extensions-1.1.xsd">
<!-- true, if gpx data has been downloaded from the osm server -->
<!-- it this case, JOSM improves the rendering of clouds of anonymous TrackPoints -->
<element name="from-server" type="boolean"/>
<!-- the following properties are only set for marker layer export -->
<element name="offset" type="decimal"/>
<element name="sync-offset" type="decimal"/>
<element name="text" type="string" />
<xsd:element name="layerPreferences" type="josm:preferences_type">
<xsd:annotation>
<xsd:documentation>
The layerPreferences contain the preferences that can be set for the layer, e.g. in the "Customize track drawing" dialog in JOSM.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:complexType name="preferences_type">
<xsd:sequence>
<xsd:element name="entry" type="josm:entry_type" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="entry_type">
<xsd:attribute name="key" type="xsd:string" use="required" />
<xsd:attribute name="value" type="xsd:string" use="required" />
</xsd:complexType>
</schema>
\ No newline at end of file
......@@ -141,10 +141,11 @@ relation[route=horse ][!network][type=route],
relation[route=piste][!piste:type][type=route],
relation[route=ski ][!piste:type][type=route],
*[tourism=information][!information],
*[natural=water][!water],
*[leisure=pitch][!sport],
*[aeroway=terminal][!building],
*[power=generator][!generator:source],
*[amenity=recycling][!/^recycling:/],
*[amenity=recycling][!/^recycling:/][recycling_type!=centre],
*[amenity=social_facility][!social_facility],
*[amenity=place_of_worship][!religion] {
throwWarning: tr("{0} without {1}", "{0.tag}", "{1.key}");
......@@ -286,7 +287,12 @@ relation[type=multipolygon][area=no] {
group: tr("suspicious tag combination");
}
/* {0.key} together with {1.key}, #17630, #17604 */
/* {0.key} together with {1.key}, #18267, #17630, #17604 */
node[marker][cover],
node[marker][voltage],
node[marker][pressure],
node[marker][diameter],
node[marker][substance],
*[building:part][building],
*[addr:street][addr:place][outside("CZ,DK")] {
throwWarning: tr("{0} together with {1}", "{0.key}", "{1.key}");
......@@ -617,9 +623,9 @@ area[cemetery=sector][landuse=cemetery] {
fixRemove: "cycleway";
}
/* #17973, #18183 */
way[highway=path ][foot][foot!=no ][foot!=use_sidepath ][!segregated][bicycle][bicycle!=no][bicycle!=use_sidepath]!.unpaved_surface,
way[highway=footway ][bicycle][bicycle!=no][bicycle!=use_sidepath][!segregated]!.unpaved_surface,
/* #17973, #18183, #18331 */
way[highway=path ][foot][foot!=no ][foot!=use_sidepath ][!segregated][bicycle][bicycle!=no][bicycle!=use_sidepath][bicycle!=dismount]!.unpaved_surface,
way[highway=footway ][bicycle][bicycle!=no][bicycle!=use_sidepath][!segregated][bicycle!=dismount]!.unpaved_surface,
way[highway=cycleway][foot][foot!=no ][foot!=use_sidepath ][!segregated]!.unpaved_surface {
throwWarning: tr("Combined foot- and cycleway without {0}.", "{4.key}");
group: tr("missing tag");
......
......@@ -471,7 +471,10 @@ way[type=palm] {
fixAdd: "park_ride=yes";
}
/* see #17950, #10661, #10837, #11737, #12771 */
/* see #18334, #17950, #10661, #10837, #11737, #12771 */
*[manhole=plain],
*[manhole=unknown],
*[manhole=yes],
*[police=yes],
*[traffic_calming=yes],
*[access=restricted],
......@@ -661,8 +664,9 @@ area[roof:color][roof:colour]["roof:color"=*"roof:colour"] {
assertNoMatch: "way roof:color=red roof:colour=red";
assertMatch: "way roof:color=red roof:colour=green";
}
/* further more universal checks, no autofix */
*[/:color/][!building:color][!roof:color] {
/* further more universal checks, no autofix */
/* gpxd:color has another warning in unnecessary.mapcss */
*[/:color/][!building:color][!roof:color][!gpxd:color] {
throwWarning: tr("{0} is deprecated", "{0.key}");
suggestAlternative: ":colour";
group: tr("deprecated tagging");
......@@ -1081,7 +1085,7 @@ way[barrier=wall][type=noise_barrier][wall][wall!=noise_barrier] {
}
/* #12771 */
way[highway=service][service][service !~ /^(alley|drive-through|drive_through|driveway|emergency_access|parking_aisle|rest_area|yes)$/], /* drive_through and yes have special warnings */
way[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 */
way[railway=rail][service][service !~ /^(crossover|siding|spur|yard)$/],
way[waterway=canal][service][service !~ /^(irrigation|transportation|water_power)$/] {
throwWarning: tr("The key {0} has an uncommon value.", "{1.key}");
......@@ -1817,3 +1821,21 @@ node[pole:type=suspension] {
fixChangeKey: "pole:type => line_attachment";
group: tr("deprecated tagging");
}
/* #18267 */
node[man_made=pipeline_marker],
node[pipeline=marker],
node[power=marker],
node[cable=marker] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "marker=* + utility=*";
group: tr("deprecated tagging");
}
/* #17643 */
way[barrier=embankment] {
throwWarning: tr("{0} is deprecated", "{0.tag}");
suggestAlternative: "man_made=embankment";
suggestAlternative: "embankment=yes";
group: tr("deprecated tagging");
}
\ No newline at end of file
......@@ -380,6 +380,7 @@ K:shop=trade
K:sidewalk=none
K:sport=skating
K:surface=hard
K:manhole=plain
;
; Tags not yet decided (to remove from this section when added or deprecated)
; see josm tickets: 17770 10759 15309 15774 16315 16658 16793 17541
......@@ -395,6 +396,8 @@ K:highway=corridor
K:historic=citywalls
K:crossing=zebra
K:healthcare=dentist
K:healthcare=doctor
K:healthcare=hospital
K:golf=cartpath
K:historic=fort
K:man_made=water_tap
......@@ -167,10 +167,11 @@ node[emergency=fire_hydrant][fire_hydrant:count=1] {
}
/* #2760 */
*[/^gpx:/] {
*[/^(gpx|gpxx|gpxd):/] {
throwWarning: tr("{0} should not be uploaded", "{0.key}");
group: tr("unnecessary tag");
fixRemove: "{0.key}";
assertMatch: "node gpx:time=2018-01-01T12:00:00Z";
assertMatch: "node gpxd:color=#FF0000";
assertNoMatch: "node source=gpx:foo";
}
......@@ -8,9 +8,8 @@
assertNoMatch: "node wikipedia=en-GB:Foobar";
}
/* Valid languages are extracted from <https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities> (languages field), which may change, so this is a warning only.
Also includes "cz" and "be-x-old" because they can be auto-fixed */
*[wikipedia =~ /(?i)^[-a-z]{2,12}:/][wikipedia !~ /^https?:\/\//][wikipedia !~ /^(aa|ab|ace|ady|ady-cyrl|aeb|aeb-arab|aeb-latn|af|ak|aln|als|am|an|ang|anp|ar|arc|arn|arq|ary|arz|as|ase|ast|av|avk|awa|ay|az|azb|ba|ban|bar|bat-smg|bbc|bbc-latn|bcc|bcl|be|be-tarask|be-x-old|bg|bgn|bh|bho|bi|bjn|bm|bn|bo|bpy|bqi|br|brh|bs|bto|bug|bxr|ca|cbk-zam|cdo|ce|ceb|ch|cho|chr|chy|ckb|co|cps|cr|crh|crh-cyrl|crh-latn|cs|csb|cu|cv|cy|cz|da|de|de-at|de-ch|de-formal|din|diq|dsb|dtp|dty|dv|dz|ee|egl|el|eml|en|en-ca|en-gb|eo|es|et|eu|ext|fa|ff|fi|fit|fiu-vro|fj|fo|fr|frc|frp|frr|fur|fy|ga|gag|gan|gan-hans|gan-hant|gd|gl|glk|gn|gom|gom-deva|gom-latn|gor|got|grc|gsw|gu|gv|ha|hak|haw|he|hi|hif|hif-latn|hil|ho|hr|hrx|hsb|ht|hu|hy|hz|ia|id|ie|ig|ii|ik|ike-cans|ike-latn|ilo|inh|io|is|it|iu|ja|jam|jbo|jut|jv|ka|kaa|kab|kbd|kbd-cyrl|kea|kg|khw|ki|kiu|kj|kk|kk-arab|kk-cn|kk-cyrl|kk-kz|kk-latn|kk-tr|kl|km|kn|ko|ko-kp|koi|kr|krc|kri|krj|krl|ks|ks-arab|ks-deva|ksh|ku|ku-arab|ku-latn|kv|kw|ky|la|lad|lb|lbe|lez|lfn|lg|li|lij|liv|lki|lmo|ln|lo|loz|lrc|lt|ltg|lus|luz|lv|lzh|lzz|mai|map-bms|mdf|mg|mh|mhr|mi|min|mk|ml|mn|mo|mr|mrj|ms|mt|mus|mwl|my|myv|mzn|na|nah|nan|nap|nb|nds|nds-nl|ne|new|ng|niu|nl|nl-informal|nn|no|nod|nov|nrm|nso|nv|ny|nys|oc|olo|om|or|os|ota|pa|pag|pam|pap|pcd|pdc|pdt|pfl|pi|pih|pl|pms|pnb|pnt|prg|ps|pt|pt-br|qu|qug|rgn|rif|rm|rmy|rn|ro|roa-rup|roa-tara|ru|rue|rup|ruq|ruq-cyrl|ruq-latn|rw|rwr|sa|sah|sat|sc|scn|sco|sd|sdc|sdh|se|sei|ses|sg|sgs|sh|shi|shi-latn|shi-tfng|shn|si|simple|sje|sk|sl|sli|sm|sma|smj|sn|so|sq|sr|sr-ec|sr-el|srn|srq|ss|st|stq|su|sv|sw|szl|ta|tcy|te|tet|tg|tg-cyrl|tg-latn|th|ti|tk|tl|tly|tn|to|tokipona|tpi|tr|tru|ts|tt|tt-cyrl|tt-latn|tum|tw|ty|tyv|tzm|udm|ug|ug-arab|ug-latn|uk|ur|uz|uz-cyrl|uz-latn|ve|vec|vep|vi|vls|vmf|vo|vot|vro|wa|war|wo|wuu|xal|xh|xmf|yi|yo|yue|za|zea|zh|zh-classical|zh-cn|zh-hans|zh-hant|zh-hk|zh-min-nan|zh-mo|zh-my|zh-sg|zh-tw|zh-yue|zu):/] {
/* Valid languages are extracted from <https://www.wikidata.org/w/api.php?action=sitematrix&formatversion=2>, which may change, so this is a warning only. */
*[wikipedia =~ /(?i)^[-a-z]{2,12}:/][wikipedia !~ /^https?:\/\//][wikipedia !~ /^(ab|ace|ady|af|ak|als|am|an|ang|ar|arc|arz|as|ast|atj|av|ay|az|azb|ba|ban|bar|bat-smg|bcl|be|be-x-old|bg|bh|bi|bjn|bm|bn|bo|bpy|br|bs|bug|bxr|ca|cbk-zam|cdo|ce|ceb|ch|chr|chy|ckb|co|cr|crh|cs|csb|cu|cv|cy|da|de|din|diq|dsb|dty|dv|dz|ee|el|eml|en|eo|es|et|eu|ext|fa|ff|fi|fiu-vro|fj|fo|fr|frp|frr|fur|fy|ga|gag|gan|gcr|gd|gl|glk|gn|gom|gor|got|gu|gv|ha|hak|haw|he|hi|hif|hr|hsb|ht|hu|hy|hyw|ia|id|ie|ig|ik|ilo|inh|io|is|it|iu|ja|jam|jbo|jv|ka|kaa|kab|kbd|kbp|kg|ki|kk|kl|km|kn|ko|koi|krc|ks|ksh|ku|kv|kw|ky|la|lad|lb|lbe|lez|lfn|lg|li|lij|lmo|ln|lo|lrc|lt|ltg|lv|mai|map-bms|mdf|mg|mhr|mi|min|mk|ml|mn|mnw|mr|mrj|ms|mt|mwl|my|myv|mzn|na|nah|nap|nds|nds-nl|ne|new|nl|nn|no|nov|nqo|nrm|nso|nv|ny|oc|olo|om|or|os|pa|pag|pam|pap|pcd|pdc|pfl|pi|pih|pl|pms|pnb|pnt|ps|pt|qu|rm|rmy|rn|ro|roa-rup|roa-tara|ru|rue|rw|sa|sah|sat|sc|scn|sco|sd|se|sg|sh|shn|si|simple|sk|sl|sm|sn|so|sq|sr|srn|ss|st|stq|su|sv|sw|szl|szy|ta|tcy|te|tet|tg|th|ti|tk|tl|tn|to|tpi|tr|ts|tt|tum|tw|ty|tyv|udm|ug|uk|ur|uz|ve|vec|vep|vi|vls|vo|wa|war|wo|wuu|xal|xh|xmf|yi|yo|za|zea|zh|zh-classical|zh-min-nan|zh-yue|zu):/] {
throwWarning: tr("wikipedia tag has an unknown language prefix");
assertMatch: "node wikipedia=X-Y-Z:Foobar";
assertNoMatch: "node wikipedia=en:Foobar";
......