Changes between Version 8 and Version 9 of Rules/HungarySpecific


Ignore:
Timestamp:
2026-10-23T14:14:38+02:00 (6 days ago)
Author:
gaben
Comment:

improve name and maxspeed rules, add postcode, fix war_memorial check (though this requires a JOSM core fix and a min-josm-version bump later)

Legend:

Unmodified
Added
Removed
Modified
  • Rules/HungarySpecific

    v8 v9  
    55
    66meta {
    7         title: "Hungary specific rules";
    8         version: "[[revision]]_[[date]]";
    9         description: "Rules, which are limited to Hungary only.";
    10         author: "gaben";
    11         link: "https://josm.openstreetmap.de/wiki/Rules/HungarySpecific";
    12         icon: "Flag_of_Hungary.svg";
    13         min-josm-version: "11424"; /* due to territory selectors */
    14         baselanguage: "hu";
     7    title: "Hungary specific rules";
     8    version: "[[revision]]_[[date]]";
     9    description: "Rules, which are limited to Hungary only.";
     10    author: "gaben";
     11    link: "https://josm.openstreetmap.de/wiki/Rules/HungarySpecific";
     12    icon: "Flag_of_Hungary.svg";
     13    min-josm-version: "11424"; /* due to territory selectors */
     14    baselanguage: "hu";
    1515}
    1616meta[lang=hu] {
    17         title: "Magyarországon használatos szabályok";
    18         description: "Magyarországi térképszerkesztéshez használható kiegészítő szabályok, amik a főprogramban elérhető szabályok kiegészítésére szolgálnak";
    19 }
     17    title: "Magyarországon használatos szabályok";
     18    description: "Magyarországi térképszerkesztéshez használható kiegészítő szabályok, amik a főprogramban elérhető szabályok kiegészítésére szolgálnak";
     19}
     20
     21/* Note: (?i) is ASCII-only in Java, (?iu) is needed for accented letters (á, é, ő, ű, ...) */
    2022
    2123*[inside("HU")] {
    22         set itthon;
    23 }
    24 
    25 way[highway=~/trunk|primary|secondary|tertiary|unclassified|residential|living_street|service/][name*="u."].itthon {
    26         group: "[HU] specifikus szabályok";
    27         throwWarning: "gyanús utca rövidítés, használd a teljes \"utca\" megnevezést";
    28 }
     24    set itthon;
     25}
     26
     27/* street names */
     28
     29way[highway=~/^(trunk|primary|secondary|tertiary|unclassified|residential|living_street|service|pedestrian)(_link)?$/][name=~/(?<!\p{L})u\./].itthon {
     30    group: "[HU] specifikus szabályok";
     31    throwWarning: "gyanús utca rövidítés, használd a teljes \"utca\" megnevezést";
     32    fixAdd: concat("name=", replace(tag("name"), "u.", "utca"));
     33    assertMatch: "way highway=residential name=\"Fő u.\"";
     34    assertMatch: "way highway=primary_link name=\"Kossuth Lajos u.\"";
     35    assertNoMatch: "way highway=residential name=\"Fő utca\"";
     36    assertNoMatch: "way highway=footway name=\"Fő u.\"";
     37    assertNoMatch: "way highway=residential name=\"Bartóku.\"";
     38}
     39
     40*[addr:street=~/(?<!\p{L})u\./].itthon {
     41    group: "[HU] specifikus szabályok";
     42    throwWarning: "gyanús utca rövidítés a címben, használd a teljes \"utca\" megnevezést";
     43    fixAdd: concat("addr:street=", replace(tag("addr:street"), "u.", "utca"));
     44    assertMatch: "node addr:street=\"Fő u.\"";
     45    assertNoMatch: "node addr:street=\"Fő utca\"";
     46}
     47
     48way[highway][name=~/(?<!\p{L})(krt|rkp|ltp|stny)\./].itthon,
     49*[addr:street=~/(?<!\p{L})(krt|rkp|ltp|stny)\./].itthon {
     50    group: "[HU] specifikus szabályok";
     51    throwWarning: "gyanús rövidítés az utcanévben (krt., rkp., ltp., stny.), írd ki teljesen";
     52    assertMatch: "way highway=primary name=\"Szent István krt.\"";
     53    assertMatch: "node addr:street=\"Pesti alsó rkp.\"";
     54    assertNoMatch: "way highway=primary name=\"Szent István körút\"";
     55}
     56
     57way[highway][name=~/ (Utca|Út|Útja|Tér|Tere|Köz|Körút|Sor|Sétány|Rakpart|Fasor|Lakótelep)$/].itthon,
     58*[addr:street=~/ (Utca|Út|Útja|Tér|Tere|Köz|Körút|Sor|Sétány|Rakpart|Fasor|Lakótelep)$/].itthon {
     59    group: "[HU] specifikus szabályok";
     60    throwWarning: "a közterület jellegét kisbetűvel írjuk (pl. utca, út, tér)";
     61    assertMatch: "way highway=residential name=\"Fő Utca\"";
     62    assertMatch: "node addr:street=\"Kossuth Lajos Út\"";
     63    assertNoMatch: "way highway=residential name=\"Fő utca\"";
     64    assertNoMatch: "node addr:street=\"Hősök tere\"";
     65}
     66
     67/* living street */
    2968
    3069way[highway=living_street][access][motor_vehicle].itthon,
    3170way[highway=living_street][access][!motor_vehicle].itthon,
    3271way[highway=living_street][!access][motor_vehicle].itthon {
    33         group: "[HU] specifikus szabályok";
    34         throwError: "lakó-pihenő övezetben a behajtási korlátozás csak járművekre vonatkozik (kivéve kerékpár)!";
    35         suggestAlternative: "vehicle=destination + bicycle=yes";
    36         fixAdd: "bicycle=yes";
    37         fixAdd: "vehicle=destination";
    38         fixRemove: "access";
    39         fixRemove: "motor_vehicle";
     72    group: "[HU] specifikus szabályok";
     73    throwError: "lakó-pihenő övezetben a behajtási korlátozás csak járművekre vonatkozik (kivéve kerékpár)!";
     74    suggestAlternative: "vehicle=destination + bicycle=yes";
     75    fixAdd: "bicycle=yes";
     76    fixAdd: "vehicle=destination";
     77    fixRemove: "access";
     78    fixRemove: "motor_vehicle";
    4079}
    4180
    … …  
    4483way[highway=living_street][!access][!motor_vehicle][vehicle=destination][bicycle!=yes].itthon,
    4584way[highway=living_street][!access][!motor_vehicle][vehicle!=destination][bicycle=yes].itthon {
    46         group: "[HU] specifikus szabályok";
    47         throwWarning: "lakó-pihenő övezetben expliciten add meg a járművek behajtási korlátozását";
    48         suggestAlternative: "vehicle=destination + bicycle=yes";
    49         fixAdd: "vehicle=destination";
    50         fixAdd: "bicycle=yes";
     85        group: "[HU] specifikus szabályok";
     86        throwWarning: "lakó-pihenő övezetben expliciten add meg a járművek behajtási korlátozását";
     87        suggestAlternative: "vehicle=destination + bicycle=yes";
     88        fixAdd: "vehicle=destination";
     89        fixAdd: "bicycle=yes";
    5190}
    5291*/
    5392
    5493way[highway=living_street][!maxspeed].itthon {
    55         group: "[HU] specifikus szabályok";
    56         throwWarning: "lakó-pihenő övezetben add meg a jogszabályi maximális sebességet (20 km/h)";
    57         fixAdd: "maxspeed=20";
    58         fixAdd: "source:maxspeed=HU:living_street";
    59 }
    60 
    61 *[source:maxspeed="HU:urban"][maxspeed!=50].itthon,
    62 *[source:maxspeed:forward="HU:urban"][maxspeed:forward!=50].itthon,
    63 *[source:maxspeed:backward="HU:urban"][maxspeed:backward!=50].itthon,
    64 *[source:maxspeed="HU:rural"][maxspeed!=90].itthon,
    65 *[source:maxspeed:forward="HU:rural"][maxspeed:forward!=90].itthon,
    66 *[source:maxspeed:backward="HU:rural"][maxspeed:backward!=90].itthon,
    67 *[source:maxspeed="HU:trunk"][maxspeed!=110].itthon,
    68 *[source:maxspeed:forward="HU:trunk"][maxspeed:forward!=110].itthon,
    69 *[source:maxspeed:backward="HU:trunk"][maxspeed:backward!=110].itthon,
    70 *[source:maxspeed="HU:motorway"][maxspeed!=130].itthon,
    71 *[source:maxspeed:forward="HU:motorway"][maxspeed:forward!=130].itthon,
    72 *[source:maxspeed:backward="HU:motorway"][maxspeed:backward!=130].itthon {
    73         group: "[HU] specifikus szabályok";
    74         throwWarning: "a maximálisan megengedett sebesség és a sebességforrás nem egyezik";
    75 }
    76 
    77 *[!maxspeed][!maxspeed:forward][!maxspeed:backward] {
    78         set no_maxspeed;
    79 }
    80 
    81 *[maxspeed:type="HU:urban"].itthon.no_maxspeed,
    82 *[source:maxspeed="HU:urban"].itthon.no_maxspeed {
    83         group: "[HU] specifikus szabályok";
    84         throwWarning: "hiányzó maximális sebesség: 50";
    85         fixAdd: "maxspeed=50";
    86 }
    87 
    88 *[maxspeed:type="HU:rural"].itthon.no_maxspeed,
    89 *[source:maxspeed="HU:rural"].itthon.no_maxspeed {
    90         group: "[HU] specifikus szabályok";
    91         throwWarning: "hiányzó maximális sebesség: 90";
    92         fixAdd: "maxspeed=90";
     94    group: "[HU] specifikus szabályok";
     95    throwWarning: "lakó-pihenő övezetben add meg a jogszabályi maximális sebességet (20 km/h)";
     96    fixAdd: "maxspeed=20";
     97    fixAdd: "source:maxspeed=HU:living_street";
     98    assertMatch: "way highway=living_street";
     99    assertNoMatch: "way highway=living_street maxspeed=20";
     100}
     101
     102way[highway=living_street][maxspeed][maxspeed!=20][source:maxspeed!="HU:living_street"][maxspeed:type!="HU:living_street"].itthon {
     103    group: "[HU] specifikus szabályok";
     104    throwWarning: "lakó-pihenő övezetben a maximális sebesség 20 km/h";
     105    fixAdd: "maxspeed=20";
     106    assertMatch: "way highway=living_street maxspeed=30";
     107    assertNoMatch: "way highway=living_street maxspeed=20";
     108}
     109
     110/* maxspeed */
     111
     112*[source:maxspeed="HU:urban"][maxspeed][maxspeed!=50].itthon,
     113*[source:maxspeed:forward="HU:urban"][maxspeed:forward][maxspeed:forward!=50].itthon,
     114*[source:maxspeed:backward="HU:urban"][maxspeed:backward][maxspeed:backward!=50].itthon,
     115*[source:maxspeed="HU:rural"][maxspeed][maxspeed!=90].itthon,
     116*[source:maxspeed:forward="HU:rural"][maxspeed:forward][maxspeed:forward!=90].itthon,
     117*[source:maxspeed:backward="HU:rural"][maxspeed:backward][maxspeed:backward!=90].itthon,
     118*[source:maxspeed="HU:trunk"][maxspeed][maxspeed!=110].itthon,
     119*[source:maxspeed:forward="HU:trunk"][maxspeed:forward][maxspeed:forward!=110].itthon,
     120*[source:maxspeed:backward="HU:trunk"][maxspeed:backward][maxspeed:backward!=110].itthon,
     121*[source:maxspeed="HU:motorway"][maxspeed][maxspeed!=130].itthon,
     122*[source:maxspeed:forward="HU:motorway"][maxspeed:forward][maxspeed:forward!=130].itthon,
     123*[source:maxspeed:backward="HU:motorway"][maxspeed:backward][maxspeed:backward!=130].itthon,
     124*[source:maxspeed="HU:living_street"][maxspeed][maxspeed!=20].itthon,
     125*[maxspeed:type="HU:urban"][!source:maxspeed][maxspeed][maxspeed!=50].itthon,
     126*[maxspeed:type="HU:rural"][!source:maxspeed][maxspeed][maxspeed!=90].itthon,
     127*[maxspeed:type="HU:trunk"][!source:maxspeed][maxspeed][maxspeed!=110].itthon,
     128*[maxspeed:type="HU:motorway"][!source:maxspeed][maxspeed][maxspeed!=130].itthon,
     129*[maxspeed:type="HU:living_street"][!source:maxspeed][maxspeed][maxspeed!=20].itthon {
     130    group: "[HU] specifikus szabályok";
     131    throwWarning: "a maximálisan megengedett sebesség és a sebességforrás nem egyezik";
     132    assertMatch: "way highway=primary source:maxspeed=HU:urban maxspeed=60";
     133    assertMatch: "way highway=primary maxspeed:type=HU:rural maxspeed=50";
     134    assertMatch: "way highway=primary source:maxspeed:forward=HU:urban maxspeed:forward=70";
     135    assertNoMatch: "way highway=primary source:maxspeed=HU:urban maxspeed=50";
     136    assertNoMatch: "way highway=primary source:maxspeed=HU:urban";
    93137}
    94138
    95139*[maxspeed:type][source:maxspeed].itthon {
    96         group: "[HU] specifikus szabályok";
    97         throwWarning: "{0.key} és {1.key} ugyanazon az objektumon, távolítsd el az egyiket";
    98 }
    99 
    100 *[name=~/(?i)tüzép|tüzifa/][shop!=trade][!highway][!railway].itthon {
    101         group: "[HU] specifikus szabályok";
    102         throwWarning: "tüzéptelepekre használd a shop=trade címkézést";
    103         fixAdd: "shop=trade";
    104 }
    105 
    106 *[building][name=~/(?i)kastély/][historic][historic!=castle].itthon {
    107         group: "[HU] specifikus szabályok";
    108         throwWarning: "történelmi kastélyokra használd a historic=castle + castle_type=* címkézést";
    109         fixAdd: "historic=castle";
    110 }
    111 
    112 *[shop=clothes][name=~/(?i)használt/][!second_hand].itthon {
    113         group: "[HU] specifikus szabályok";
    114         throwWarning: "használt ruhás bolthoz használd a second_hand=yes címkézést";
    115         fixAdd: "second_hand=yes";
    116 }
    117 
    118 *[landuse=cemetery][name=~/(?i)zsidó/][religion!=jewish].itthon {
    119         group: "[HU] specifikus szabályok";
    120         throwWarning: "zsidó temetőhöz használd a religion=jewish címkézést";
    121         fixAdd: "religion=jewish";
    122 }
    123 
    124 *[historic=memorial][name=~/(?i)háború/][memorial!=war_memorial].itthon {
    125         group: "[HU] specifikus szabályok";
    126         throwWarning: "háborús emlékműhöz használd a memorial=war_memorial címkézést";
    127         fixAdd: "memorial=war_memorial";
    128 }
    129 
    130 *[memorial=war_memorial][!memorial:conflict][name=~/(?i)(?<!I)(I\. világ)/].itthon {
    131         group: "[HU] specifikus szabályok";
    132         throwWarning: "I. világháborús emlékműhöz használd a memorial:conflict=WW1 címkézést";
    133         fixAdd: "memorial:conflict=WW1";
    134         /* FIXME: doesn't work for some reason
    135         assertMatch: "node memorial=war_memorial name=\"I. világháborús emlékmű\""; */
    136         assertNoMatch: "node memorial=war_memorial name=\"II. világháborús emlékmű\"";
    137 }
    138 
    139 *[memorial=war_memorial][!memorial:conflict][name=~/(?i)II\. világ/].itthon {
    140         group: "[HU] specifikus szabályok";
    141         throwWarning: "II. világháborús emlékműhöz használd a memorial:conflict=WW2 címkézést";
    142         fixAdd: "memorial:conflict=WW2";
    143         /* FIXME: doesn't work for some reason
    144         assertMatch: "node memorial=war_memorial name=\"II. világháborús emlékmű\""; */
    145         assertNoMatch: "node memorial=war_memorial name=\"I. világháborús emlékmű\"";
    146 }
    147 
    148 /* FIXME: I. és II. világháborús emlékmű */
    149 
    150 area[landuse=quarry][name=~/(?i)szén/][!resource].itthon {
    151         group: "[HU] specifikus szabályok";
    152         throwWarning: "add meg a bányából kinyert nyersanyagot: szén";
    153         fixAdd: "resource=coal";
    154 }
    155 
    156 area[landuse=quarry][name=~/(?i)kavics/][!resource].itthon {
    157         group: "[HU] specifikus szabályok";
    158         throwWarning: "add meg a bányából kinyert nyersanyagot: kavics";
    159         fixAdd: "resource=aggregate";
    160 }
    161 
    162 *[name=~/(?i)statisztikai hivatal/][office=government][government!=statistics].itthon {
    163         group: "[HU] specifikus szabályok";
    164         throwWarning: "add meg a KSH irodához tartozó címkét";
    165         fixAdd: "government=statistics";
    166 }
    167 
    168 *[name=~/(?i)államkincstár/][office=government][government!=treasury].itthon {
    169         group: "[HU] specifikus szabályok";
    170         throwWarning: "add meg az államkincstárhoz irodához tartozó címkét";
    171         fixAdd: "government=treasury";
    172 }
    173 
    174 *[name=~/(?i)faluház/][!highway][!amenity].itthon,
    175 *[name=~/(?i)faluház/][!highway][amenity!=community_centre].itthon {
    176         group: "[HU] specifikus szabályok";
    177         throwWarning: "faluházhoz használd az amenity=community_centre címkét";
    178         fixRemove: "amenity";
    179         fixAdd: "amenity=community_centre";
    180 }
    181 
    182 *[name=~/(?i)községháza/][!highway][!route][!amenity].itthon,
    183 *[name=~/(?i)községháza/][!highway][!route][amenity!=townhall].itthon {
    184         group: "[HU] specifikus szabályok";
    185         throwWarning: "községházához használd az amenity=townhall címkét";
    186         fixRemove: "amenity";
    187         fixAdd: "amenity=townhall";
    188 }
    189 
     140    group: "[HU] specifikus szabályok";
     141    throwWarning: "{0.key} és {1.key} ugyanazon az objektumon, távolítsd el az egyiket";
     142    assertMatch: "way maxspeed:type=HU:urban source:maxspeed=HU:urban";
     143    assertNoMatch: "way source:maxspeed=HU:urban";
     144}
     145
     146/* names suggesting missing or wrong tags */
     147
     148*[name=~/(?iu)tüzép|t[üű]zifa/][shop!=trade][!highway][!railway].itthon {
     149    group: "[HU] specifikus szabályok";
     150    throwWarning: "tüzéptelepekre használd a shop=trade címkézést";
     151    fixAdd: "shop=trade";
     152    assertMatch: "node name=TÜZÉP";
     153    assertMatch: "node name=\"Tűzifa kereskedés\"";
     154    assertNoMatch: "node name=Tüzép shop=trade";
     155}
     156
     157*[building][name=~/(?iu)kastély/][historic][historic!=castle].itthon {
     158    group: "[HU] specifikus szabályok";
     159    throwWarning: "történelmi kastélyokra használd a historic=castle + castle_type=* címkézést";
     160    fixAdd: "historic=castle";
     161    assertMatch: "way building=yes historic=manor name=\"Esterházy-KASTÉLY\"";
     162    assertNoMatch: "way building=yes historic=castle name=Esterházy-kastély";
     163}
     164
     165*[shop=clothes][name=~/(?iu)használt/][!second_hand].itthon {
     166    group: "[HU] specifikus szabályok";
     167    throwWarning: "használt ruhás bolthoz használd a second_hand=yes címkézést";
     168    fixAdd: "second_hand=yes";
     169    assertMatch: "node shop=clothes name=\"HASZNÁLT RUHA\"";
     170    assertNoMatch: "node shop=clothes second_hand=yes name=\"Használt ruha\"";
     171}
     172
     173*[landuse=cemetery][name=~/(?iu)zsidó/][religion!=jewish].itthon {
     174    group: "[HU] specifikus szabályok";
     175    throwWarning: "zsidó temetőhöz használd a religion=jewish címkézést";
     176    fixAdd: "religion=jewish";
     177    assertMatch: "way landuse=cemetery name=\"Zsidó temető\"";
     178    assertNoMatch: "way landuse=cemetery religion=jewish name=\"Zsidó temető\"";
     179}
     180
     181*[historic=memorial][name=~/(?iu)háború|hősi emlékmű/][memorial!=war_memorial].itthon {
     182    group: "[HU] specifikus szabályok";
     183    throwWarning: "háborús emlékműhöz használd a memorial=war_memorial címkézést";
     184    fixAdd: "memorial=war_memorial";
     185    assertMatch: "node historic=memorial name=\"Hősi emlékmű\"";
     186    assertMatch: "node historic=memorial name=\"I. VILÁGHÁBORÚS emlékmű\"";
     187    assertNoMatch: "node historic=memorial memorial=war_memorial name=\"Hősi emlékmű\"";
     188}
     189
     190*[memorial=war_memorial][!memorial:conflict][name=~/(?iu)(?<!I)I\.\s*(és|,)\s*(a\s+)?II\.|első\s+és\s+(a\s+)?második/].itthon {
     191    group: "[HU] specifikus szabályok";
     192    throwWarning: "I. és II. világháborús emlékműhöz használd a memorial:conflict=WW1;WW2 címkézést";
     193    fixAdd: "memorial:conflict=WW1;WW2";
     194    assertMatch: "node memorial=war_memorial name=\"I. és II. világháborús emlékmű\"";
     195    assertMatch: "node memorial=war_memorial name=\"Első és második világháborús emlékmű\"";
     196    assertNoMatch: "node memorial=war_memorial name=\"I. világháborús emlékmű\"";
     197    assertNoMatch: "node memorial=war_memorial name=\"II. világháborús emlékmű\"";
     198}
     199
     200*[memorial=war_memorial][!memorial:conflict][name=~/(?iu)(?<!I)I\. világ|első világ/].itthon {
     201    group: "[HU] specifikus szabályok";
     202    throwWarning: "I. világháborús emlékműhöz használd a memorial:conflict=WW1 címkézést";
     203    fixAdd: "memorial:conflict=WW1";
     204    assertMatch: "node memorial=war_memorial name=\"I. világháborús emlékmű\"";
     205    assertMatch: "node memorial=war_memorial name=\"Első világháborús emlékmű\"";
     206    assertNoMatch: "node memorial=war_memorial name=\"II. világháborús emlékmű\"";
     207    assertNoMatch: "node memorial=war_memorial name=\"I. és II. világháborús emlékmű\"";
     208}
     209
     210*[memorial=war_memorial][!memorial:conflict][name=~/(?iu)II\. világ|második világ/][name!~/(?iu)(?<!I)I\.\s*(és|,)\s*(a\s+)?II\.|első\s+és\s+(a\s+)?második/].itthon {
     211    group: "[HU] specifikus szabályok";
     212    throwWarning: "II. világháborús emlékműhöz használd a memorial:conflict=WW2 címkézést";
     213    fixAdd: "memorial:conflict=WW2";
     214    assertMatch: "node memorial=war_memorial name=\"II. világháborús emlékmű\"";
     215    assertMatch: "node memorial=war_memorial name=\"Második világháborús emlékmű\"";
     216    assertNoMatch: "node memorial=war_memorial name=\"I. világháborús emlékmű\"";
     217    assertNoMatch: "node memorial=war_memorial name=\"I. és II. világháborús emlékmű\"";
     218}
     219
     220area[landuse=quarry][name=~/(?iu)szén/][!resource].itthon {
     221    group: "[HU] specifikus szabályok";
     222    throwWarning: "add meg a bányából kinyert nyersanyagot: szén";
     223    fixAdd: "resource=coal";
     224}
     225
     226area[landuse=quarry][name=~/(?iu)kavics/][!resource].itthon {
     227    group: "[HU] specifikus szabályok";
     228    throwWarning: "add meg a bányából kinyert nyersanyagot: kavics";
     229    fixAdd: "resource=aggregate";
     230}
     231
     232area[landuse=quarry][name=~/(?iu)homok/][!resource].itthon {
     233    group: "[HU] specifikus szabályok";
     234    throwWarning: "add meg a bányából kinyert nyersanyagot: homok";
     235    fixAdd: "resource=sand";
     236}
     237
     238area[landuse=quarry][name=~/(?iu)agyag/][!resource].itthon {
     239    group: "[HU] specifikus szabályok";
     240    throwWarning: "add meg a bányából kinyert nyersanyagot: agyag";
     241    fixAdd: "resource=clay";
     242}
     243
     244area[landuse=quarry][name=~/(?iu)mészkő/][!resource].itthon {
     245    group: "[HU] specifikus szabályok";
     246    throwWarning: "add meg a bányából kinyert nyersanyagot: mészkő";
     247    fixAdd: "resource=limestone";
     248}
     249
     250*[name=~/(?iu)statisztikai hivatal/][office=government][government!=statistics].itthon {
     251    group: "[HU] specifikus szabályok";
     252    throwWarning: "add meg a KSH irodához tartozó címkét";
     253    fixAdd: "government=statistics";
     254    assertMatch: "node office=government name=\"Központi Statisztikai Hivatal\"";
     255    assertNoMatch: "node office=government government=statistics name=\"Központi Statisztikai Hivatal\"";
     256}
     257
     258*[name=~/(?iu)államkincstár/][office=government][government!=treasury].itthon {
     259    group: "[HU] specifikus szabályok";
     260    throwWarning: "add meg az államkincstárhoz irodához tartozó címkét";
     261    fixAdd: "government=treasury";
     262    assertMatch: "node office=government name=\"Magyar ÁLLAMKINCSTÁR\"";
     263    assertNoMatch: "node office=government government=treasury name=\"Magyar Államkincstár\"";
     264}
     265
     266/* [amenity!=x] also matches when amenity is missing */
     267*[name=~/(?iu)faluház/][!highway][amenity!=community_centre].itthon {
     268    group: "[HU] specifikus szabályok";
     269    throwWarning: "faluházhoz használd az amenity=community_centre címkét";
     270    fixAdd: "amenity=community_centre";
     271    assertMatch: "node name=Faluház";
     272    assertMatch: "node name=FALUHÁZ amenity=townhall";
     273    assertNoMatch: "node name=Faluház amenity=community_centre";
     274    assertNoMatch: "way name=\"Faluház utca\" highway=residential";
     275}
     276
     277*[name=~/(?iu)községháza/][!highway][!route][amenity!=townhall].itthon {
     278    group: "[HU] specifikus szabályok";
     279    throwWarning: "községházához használd az amenity=townhall címkét";
     280    fixAdd: "amenity=townhall";
     281    assertMatch: "node name=Községháza";
     282    assertNoMatch: "node name=Községháza amenity=townhall";
     283}
     284
     285/* addresses as of 2026-10-13 */
     286/* Use grex (https://github.com/pemistahl/grex) and the XLSX sheet from https://net.posta.hu/dashboard/public/dashboard-ui/iranyitoszam-kereso/download-as-table to update */
     287/* It validates the postcode against all official numbers */
     288*[addr:postcode][addr:postcode!~/^(?:1(?:007|23[7-9])|2(?:0(?:1[13-7]|8[013-69])|(?:06|17)[03-7]|3(?:4[0457]|6[03-7])|51[07-9])|269[1-46-9]|3(?:07[03-578]|10[0249]|24[0235-8]|5(?:0[018]|1[5-9]|2[14-9]|3[0-5])|60[048]|7(?:2[0-689]|8[0367])|8(?:2[156]|3[1-467]|4[1-46-9]|6[03-6])|98[057-9])|4(?:0(?:2[4-9]|3[0-4]|6[03-79]|7[14589])|13[02-8]|26[2-467]|32[04-7]|44[015-7]|51[15-7]|80[034])|(?:2(?:24|72)|418)[134]|400[02]|474[1-356]|223[03-5]|5(?:24[134]|47[14-6]|5(?:0[02]|3[046-9]|5[1-356])|73[124]|9(?:0[03-5]|4[0568]))|583[06-8]|237[0135-8]|(?:2(?:22|75)|440|5(?:43|92))[05]|(?:2(?:31|76)|3(?:39|95)|411)[04-9]|462[1-578]|(?:308|404|5(?:15|22))2|6(?:0(?:6[024-7]|9[06-8])|32[0135-8]|05[05]|4(?:3[05]|4[04-9])|52[1-578]|612)|(?:290|6[59]0)[03]|(?:274|40[89]|5(?:13|52|72))[05-7]|422[045]|(?:247|362)[1-35-7]|675[03-8]|(?:396|473)[1-57]|7(?:0(?:0[03]|2[05-7]|9[0-57-9])|13[0-6]|2(?:2[4-8]|7[1-69])|3(?:0[045]|9[1346])|43[124-69]|5(?:5[1-35-7]|8[24-9])|6(?:3[0-69]|6[13468]|7[1-3578])|7(?:2[03-8]|3[1-357]|6[1-368])|[07]4[1-57]|8(?:1[1-57]|2[2-7]|3[1346-9]|4[13679]|5[0134])|9(?:1[2-58]|3[24-7]|5[13478]|6[046-8]|7[1-35-79]|8[01578]))|5919|(?:363|445|551|6(?:63|80))[056]|204[059]|(?:233|317|623)[05-9]|[56]00[08]|(?:3(?:25|90)|676|714)[02-9]|(?:388|771)[124-8]|(?:2(?:45|62)|3(?:12|34))[13-9]|(?:273|391|6(?:0[78]|64))[05-8]|(?:289|358)[06-9]|(?:2(?:48|54)|746)[13-5]|377[035-9]|775[1-79]|3(?:41|97)[1-46-8]|753[0235-9]|447[1245]|(?:268|725)[1-35-8]|370[04]|475[124-6]|8(?:0(?:19|6[056]|8[0-35-9]|9[235-7])|1(?:0[059]|4[2-6])|2(?:2[05-9]|3[037]|9[124-7])|3(?:0[08]|4[124-9])|4(?:2[02-9]|3[0-589]|5[124-8]|7[13-9])|26[13-5]|6(?:1[2-47-9]|3[05-8]|[46][06-9]|8[13-5])|7(?:0[035-9]|4[1-79]|7[1-46-8]|8[24589]|9[0235-9])|76[12457]|17[1245]|8(?:2[12457]|3[1245]|7[2-46-9]|8[1-35-8]|9[135-7])|9(?:0[04]|3[124-6]|4[3-9]|5[1346-8]|6[069]|7[135-8]|[28][13-689]|9[0-24-9]))|285[1-689]|(?:3(?:37|76)|891)[1-57-9]|(?:118|8(?:65|72|86))[1-68]|4(?:28|46)[13-8]|(?:2(?:15|3[58]|9[1-3])|322|4[36]1|5(?:07|11|33|56|81)|6(?:[23]1|82)|726|832)1|(?:2(?:03|50|66)|3(?:36|45)|535|7(?:03|15)|8(?:46|80))[089]|(?:205|564)[13]|240[07]|306[03-9]|(?:2(?:09|6[14])|335|672|8(?:13|44|71))[0-9]|(?:70|81)5[12467]|(?:482|8(?:28|75))[1-46]|(?:2(?:16|21|83)|3(?:[01]4|33|46|8[17]|93)|4(?:17|5[346]|76|9[37])|574|6(?:33|78|91)|7(?:08|35|5[12])|8(?:12|35|49))[1-7]|(?:1(?:0[238]|1[134])|2(?:11|52|6[35]|88|94)|3(?:5[579]|65|75|89|9[29])|496|7(?:01|34|47|62)|8(?:[34]1|69|73))[1-9]|(?:117|2(?:07|19|82)|3(?:02|2[18]|4[34]|66|74)|4(?:16|25|43|91)|5(?:14|32|62)|6(?:22|41)|7(?:33|44|56)|8(?:07|1[68]))[1-4]|7(?:38|69)[13-6]|(?:2(?:(?:[02]|3)0|87)|3[08]0|5(?:3[04]|44|60)|8(?:40|84))[09]|(?:271|305|4(?:3[46]|50|81)|5(?:21|36|45)|6(?:35|51|9[23])|768|8(?:37|5[2-4]))[1-3]|(?:1(?:0[4679]|1[05])|2(?:[04]2|67)|3(?:1[38]|3[28]|64|71)|4(?:12|33|48|55|94)|566|634|7(?:06|18|45)|8(?:2[45]|5[159]|62|85))[1-8]|(?:1(?:0[15]|1[29])|2(?:14|53)|3(?:0[13]|29|42|79)|4(?:[12]4|3[57]|49|64|83|95)|512|6(?:1[13]|45)|7(?:17|92)|8(?:0[45]|19|67))[1-6]|(?:1(?:16|2[0-2])|2(?:1[38]|25|4[36])|3(?:15|2[367]|56|73|85|94)|4(?:2[37]|52|63|84)|5(?:0[5689]|23|46|67)|6(?:0[34]|42|62|7[79])|7(?:1[69]|2[18]|54|7[78])|8(?:27|39|48|56))[1-5]|(?:2(?:32|86)|367|4(?:21|72|92)|5(?:41|7[15]|93)|7(?:07|12|36)|8(?:11|5[78]))[12]|(?:2(?:1[02]|4[49]|60|70|8[04])|3(?:[23]|4)0|4(?:1[05]|20|30|60|70|90)|5(?:[12]0|31|4[02]|54|6[35]|70|8[02])|6(?:1[02]|20|30|40|60|7[01])|7(?:[12]0|37|40|5[07]|60|70|80|9[04])|8(?:[02]0|3[368]|50|60))0|316[1-35]|9(?:0(?:1[129]|8[1-689])|16[1-57-9]|22[1-68]|4(?:0[078]|3[13-8])|(?:21|45)1|5(?:4[12457-9]|61)|6(?:0[089]|4[13])|09[0-9]|(?:1[24]|3[12]|51)[1-7]|02[1-9]|7(?:0[07]|3[03-9]|4[0-9]|5[12467]|6[1-46]|[27][1-7]|8[1-49]|9[1-9])|(?:0[67]|18|35|4[46]|53|65)[1-4]|8(?:1[1-4]|2[13-6])|33[09]|(?:11|42|52)[1-3]|17[1-8]|(?:13|24|34|47|55|6[37]|83)[1-6]|(?:15|23|3[67]|4[89]|6[268])[1-5]|(?:61|84)[12]|(?:0[03]|10|20|30|50|80)0|9(?:0[09]|1[2-57-9]|2[1-3]|3[1-8]|4[1-6]|5[1-5]|6[12]|70|8[1-35])))$/].itthon {
     289    group: "[HU] specifikus szabályok";
     290    throwError: "érvénytelen irányítószám";
     291    assertMatch: "node addr:postcode=H-1051";
     292    assertMatch: "node addr:postcode=10511";
     293    assertNoMatch: "node addr:postcode=1051";
     294}
    190295}}}