# JOSM TagChecker validator file

# Format:
# Each line specifies a certain error to be reported
# <data type> : messagetype : <key><expression><value>
#
# Data type can be:
#  node        - a node point
#  way         - a way
#  relation    - a relation
#  *           - all data types
#
# Message type can be:
# E            - an error
# W            - a warning
# I            - an low priority informational warning
#
# Key and value are expressions describing certain keys and values of these keys.
# Regulator expressions are supported. In this case the expressions starts and
# ends with // signs. If an 'i' is appended, the regular expression is
# case insensitive.
#
# The * sign indicates any string.
# The texts BOOLEAN_TRUE and BOOLEAN_FALSE in the value part indicate a special
# handling for boolean values (yes, true, 0, false, no, ...).
#
# Expression can be:
#  !=          - the key/value combination does not match
#  ==          - the key/value combination does match
#
# To have more complicated expressions, multiple elements can be grouped together
# with an logical and (&&).
#
# The comment at the end of a rule is displayed in validator description
#
# Empty lines and space signs are ignored

way  : W : highway == * && name == /.* (Ave|Blvd|Cct|Cir|Cl|Cr|Crct|Cres|Crt|Ct|Dr|Drv|Esp|Espl|Hwy|Ln|Mw|Mwy|Pl|Rd|Qy|Qys|Sq|St|Str|Ter|Tce|Tr|Wy)\.?$/i               # abbreviated street name

node : W : oneway == *                                         # oneway tag on a node
node : W : bridge == BOOLEAN_TRUE                              # bridge tag on a node
node : W : highway == tertiary                                 # wrong highway tag on a node
node : W : highway == secondary                                # wrong highway tag on a node
node : W : highway == residential                              # wrong highway tag on a node
node : W : highway == unclassified                             # wrong highway tag on a node
node : W : highway == track                                    # wrong highway tag on a node
way  : I : highway == unclassified && name != *                # Unnamed unclassified highway
way  : I : highway == secondary && ref != *                    # highway without a reference
way  : I : highway == tertiary && ref != *                     # highway without a reference
way  : I : highway == motorway && nat_ref != *                 # highway without a reference
*    : W : highway == road                                     # temporary highway type
*    : W : / *name */i == * && name != *                       # misspelled key name

# The following could replace unnamed way check. Still at the moment we keep it as it is
#way  : W : junction == roundabout && highway == /motorway|trunk|primary|secondary|tertiary|residential|pedestrian/ && /name|ref|(name:.*)|(.*_name)|(.*_ref)/ != * # Unnamed junction
#way  : W : highway == /motorway|trunk|primary|secondary|tertiary|residential|pedestrian/ && /name|ref|(name:.*)|(.*_name)|(.*_ref)/ != * # Unnamed 

way  : W : highway == cycleway && bicycle == BOOLEAN_FALSE     # cycleway with tag bicycle
way  : W : highway == footway && foot == BOOLEAN_FALSE         # footway with tag foot
#way  : I : highway == cycleway && bicycle == *                 # cycleway with tag bicycle
#way  : I : highway == footway && foot == *                     # footway with tag foot
way  : W : highway == cycleway && cycleway == lane             # separate cycleway as lane on a cycleway
way  : W : highway == * && barrier == *                        # barrier used on a way

#way  : I : waterway == * && layer != *                         # waterway without layer tag
way  : I : highway == footway && maxspeed == *                 # maxspeed used for footway
way  : I : highway == steps && maxspeed == *                   # maxspeed used for footway

*    : W : layer == /\+.*/                                     # layer tag with + sign

*    : I : name == /.*Strasse.*/i                              # street name contains ss

relation : E : type != *                                       # relation without type

node : I : amenity == /restaurant|cafe|fast_food/ && name != * # restaurant without name
#way  : I : highway != * && railway != * && waterway != * && name == * # unusual named way type
#*    : W : natural == water && waterway == *                   # unusual tag combination
*    : W : highway == * && waterway == *                       # unusual tag combination
*    : W : highway == * && natural == *                        # unusual tag combination
