wiki:Rules/Portuguese-Errors-PT2

Version 3 (modified by Rui, 9 years ago) ( diff )

--

Detect orthographic errors, name abbreviations, tags not suitable in Portugal and misused tags. Messages are in Portuguese only.

meta
{
title: "Português-Erros comuns PT2";
version: "1.38_2020-10-05";
description: "Encontra principalmente erros de ortografia, abreviaturas em nomes, algumas etiquetas não aplicáveis a Portugal e alguns erros de etiquetas mal aplicadas. Os erros começam com PT2 para serem facilmente identificados.";
author: "Rui";
link: "http://josm.openstreetmap.de/wiki/Rules/Portuguese-Errors-PT2";
watch-modified: true;
}


*[name =~ /\s([dn]as?|[dn]os?|de)\s[a-z]/] {
  throwWarning: tr("PT2-Nome em minúscula após da,no,de...");
}
*[name =~ /\s([DN]as?|[DN]os?|De)\s[a-zA-Z]|.*\sE\s.*/] {
  throwWarning: tr("PT2-Nome com maiúscula em Da,No,De,E...");
}
*[name =~ /^[a-z]/] {
  throwWarning: tr("PT2-Nome que começa em minúscula");
}
*[name =~ /\s\s/] {
  throwWarning: tr("PT2-Dois espaços em branco");
}
*[name =~ /(?i)(sem\s?nome|fix\s?me|\bfix\b|nome|no\s?name|desconhecido)/] {
  throwWarning: tr("PT2-Nome errado, sem nome...");
}
way[highway][name =~ /(-Os-|\sos\s)/] {
  throwWarning: tr("PT2-O correto é -os-");
}
way[highway][name =~ /(?i)(\bbank|building|\bdrive\s?way|\bPark(ing)?|Post\s?off?ice|\bRue\b|\bshop\b|\bstair|\btra(c?k|ck?)|stree?t|Zebra cros)/] {
  throwWarning: tr("PT2-Palavras por traduzir ou mudar a etiqueta");
}
way[highway][name =~ /(Alf|Alm|Ant|Arq\.?º?|Az|B\.?º|Br|Bco?|Bl|Brg|Cac|Cc(nh)?|Ca[mp]|Csl|Cmdt|Comend|Cª|Cons|Cor|Cel|Dep|Dr?\.?ª|Dr|Dq|Edf?|Emb|Enf[oº]?|Eng[ºª]?|Esc(nh)?|Est|Gen|Hab|Inf|Im[aª]|Im[oº]?|Im|Jrd?|Lg|Lj|Lt|Loteam|Lu?g|Mto|Maj|Mal|Mq|Me|Min|Mons|M|Pe|Pq|Part|Pto|P[cç]|Pr|Pct[aª]?|Presid|Profª?|Proj|Prolng|Qd|\bR\.|Rot|Sarg|Slj|Soc|Scv|Sq|Ten|Tr|Transv|Trav|Trv|Tv|Urb|Vl|Visc|Vv|Zn)(\.| )/] {
  throwWarning: tr("PT2-Nome de estrada ou caminho abreviado");
}
*[name =~ /(Ass|C(\.\s?|\s)?C|Av\.?ª?|B(\.\s?|\s)?E(\.\s?|\s)?S|\bD|\b[FSfs](\.\s?|\s)?[Cc](lub)?e?|[Cc](\.\s?|\s)?[Gg](\.\s?|\s)?[Dd]|C(\.\s?|\s)?V(\.\s?|\s)?P|[Bb](\.\s?|\s)?[Vv]|[Cc](\.\s?|\s)?[Mm]|[Ee](\.\s?|\s)?[Bb]|E[\.\s]?T[\.\s]?A[\.\s]?R|N[^0-9º]|Inst|N(\.\s?|\s)?[ªa]|Ns|Qta|P(\.\s?|\s)?S(\.\s?|\s)?P|Rib\.?[aª]?|\bR|S(\.\s?|\s)?C|St\.?[oaºª]?|S|Sra?|Sr?\.?ª|Univ)(\.|\s)/] {
  throwWarning: tr("PT2-Nome abreviado");
}
*[name =~ /[?!.,:;]{2,}/] {
  throwWarning: tr("PT2-Pontuação repetida 2 ou mais vezes");
}
*[name =~ /([~^¨]|\s['"»«ºª]\s)/] {
  throwWarning: tr("PT2-Acentuação isolada entre espaços");
}
*[name =~ /(?i).*(\bá\s|hà|\bAbilio|Ac(ac|ass?|áss?)i[ao]|Academic[oa]|A(c|ss?)ude\b|\bAss?ore[sa]]|Administra(ça|cã|ca)o|Africa\b|Ag(enc|êns)ia|Agrari[ao]|Agricola|\bAguas?|Alcantara|Alvar(es|o)|Amalia|\bAmeli[ao]\b|Americ[ao]s?\b|\bAndre\b|\bAngel[ao]\b|Anibal|Apolonia|Araujo|Arma(ze|sé)(m|ns)|Arqueol(og|ój|oj)ic[oa]|Arvore|Ascen(sao|ção|çao)|\bAsenha\b|Astronomico|\bA[sc]is\b|Ass?o(c|ss?)ia(ça|cã|ca)o|Americo|Antonio|Araujo|Atlantic|Atletico|Auditorio|\bBaia\b|B(as|áz)i(li)?c[ao]|\bBarao\b|\bBarbar|\bB[éê]co\b|Belem\b|B(élj|el[gj]i)c|Bonanico|Bonif(ac|as|ás)io|\bBrazil|Britanic|Cafe\b|Caf(ét[ea]|ata)ria|Cal(c|ss?)ada|C(alva|álv[áa])rio|Cambio|cami(onaj|no[gj]|nona[gj]|na[gj])em|Camara|Camelia|Camoes|\bCandid[ao]\b|\bC[aâ]o\b|Capitao|Ca[cs]s?ador|Cemiterio|C(e[zs]|éz)ar|\bCha[os]?\b|Ci(enc|[êe]nss?)ia|\bClaudi[ao]|Clerigo|Clinica|Col(eg|éj)io|Com(er[cs]|érs)io|\bCaza\b|Comunitari|Concei(ca|ça|cã)o|Comdominio|\bC[oô]nego\b|Con([cs]s?ervato|cervató)ri|Coperativa|Crist([oôó]va|[oô]vã)o|\bCrus\b|Con(c|ss?)ervatori[oa]|Dalia|\bDamiao\b|Dan(c|ss?)a\b|Dentari|Dep(oss?|óz|oz)ito|Diario|\bDili\b|Dion(is|iz|íz)io|Dire(cã|ça|ca)o|\bE(c|ss?)ca\b|Educa(ca|ça|cã)o|\bEmidio|\bEmili[ao]\b|Encarna(ca|ça|cã)o|Escadori|Escoteiro|Espirito|Esta(ca|ça|cã)o|\bEstadio|Estasiona|Esternato|Estetica|Estevao|Estradao|Est[êée]vao|\bEufemi|Evan(ge|jé|je)lica|\bEvora\b|Ex(erc|érs)ito|\bEx(ilio|ílad)|Fabricas?\b|\bFamilia\b|(para)?Farmacia|Fatima|Felix|\bFerre[ao]|Ferr?oviari|Finan(c|ss?)as|\bFisic[ao]\b|\bFlavi[ao]\b|\bFlôr(es)?\b|\bFont(ana|en[áa])rio|\bFontaínha|Fortalesa|Fran(ce|sê|se)s\b|Fruticula|Funeraria|Gale\b|Garces|\bGa(rret|rett?)\b|\b(Ge|J[ée])meos?\b|Gloria|\bGôa\b|\bGois\b|Gon(c|ss?)alves|\bGra[cs]s?as?\b|\bGrao\b|Guestao|Guimaraes|Gu?in(áz|as|az)io|Gu?ina[sz]tica|Guine\b|Hermini[ao]\b|Herois|\bHor(áss?|ac)io|Horten[cs]ia|Horticula|Iberic[ao]|\bIn([áa]ss?|ac)io|Independencia|India\b|Industria\b|Inf(a[cs]s?ia|ânss?ia|antario)|\bIn(es|ez|êz)\b|Informatica|Irmaos?|Jeronimo|Joao|Joelheria|\bJoias?\b|Jose\b|Judi(cia|ss?i[áa])ria|\bJulia?o\b|Laboratorio|L(ás|az|as)aro|Leao|Leitao|\bLirio|Lo(gi|jí)stic|Loule|Louren(c|ss?)o|\bL(ú[çs]s?i|u[çcs]s?i)[ao]\b|Lu[sz]iada|Magalhaes|\bMarili|Maritim[oa]|\bMario\b|Martir(es)?\b|\bMatris\b|Marqu?(é[sz]|eza)\b|Matematic|Ma?c\sDonald('|\s)?s|Ma?cDonald\s?s|\bMedic[oa]\b|Mi(ss?iona|cion[áa])ri|M(i[sz]erico|e[sz]irec[oó])rdia|Mortuaria|Muni((c|ss?)i|ss?í)pio|Musica\b|\bMuzeu\b|\bNautic|\bNa(zare|sar[ée])|Nem(éz|es)io\b|Ne[sç]s?e[scç]s?idades|Not(i[cs]s?|íss?)ias|\bNucleo\b|\bOp?tica\b|Obidos?|Observatorio|(Oceanic[ao]\b|O[çs]s?eânic)|\bOperari[oa]s?\b|Orqu?idea|Ortigao|O(zó|so|zo)rio|Pal(ac|áss?|ass?)io|\bPao\b|\bPara(i[zs]o|ízo)|\bPar(óq|óquial|oqu?ia)\b|Pa(ss?adi[sc]s?|çadi[sç]s?)o|\bPatio\b|Patrias?\b|Patr(i[cs]|ís)i[ao]|Pavilhao|Pedag(og|ój)ic[ao]|Pediatric|Peninsula\b|Pen(çã|ss?a|ssã)o|Peniten(cia|ss?i[áa])ri?|\bPeras?\b|Picina|Platano|Poli(c|ss?)ia|Porfirio|\bPoss?os?\b\bPovoas?\b|\bPra(c|ss?)a\b|Pra(ç|ss?)eta|Preparatori|Pre([sz]ide|zidê)ncia|Pr((inc|ins|íns)[ie]|ínce)pe|Primari(o|a)|P(siquia|ciqui[aá])tric[oa]|Politecnic|Porfirio|Portugue[sz]\b|Profi[cs]ional|\bProgre[sç]o|\bPublic(o|a)|P[ou]rifica(ca|ça|cã)o|\bQueiro[sz]|Quiteria|\bRadio\b|\bRaínha\bRaúl\b|Ress?into|\bRe(gia|jiã|gi|ji)o\b|Remedio|R[ée]publica\b|Re([zs]ide|zidê)n[cs]ias?\b|Re(zide|sidê)n[cs]ial|Re[sç]urrei(ça|[cs]s?ã)o|Ress?urrei(ça|[cs]s?ã)o|Retrozaria|\bRío\b|Rodoviari[oa]|Romao|\bRo(sa|za|zá)ri[oa]|Ruina|\bSa\b|Salao|\bSanitari|Sant(are|er[ée])m|\bSao\b|\bSaude|\sSe\b|Sebastiao|Seculo|Secundaria|(Semina|Cemin[áa])rio|Senior|Sepulveda|S(erg|érji)io|Sidonio|Simoes|Su(e(c|ss?)ia|éss?)ia|Su(íss?|iç|iss?)a|Su[çs]s?e(ss?|ç)o|\bT(ang|[âa]nj)er\b|Taxis?|Tecnico|Tecnol(ój|o[gj])ico|\bTenis\b|Tertulia|Teofilo|Teotonio|\bTilia|\bTomas\b|\bTome\b|\bTr(a[sz]|áz)\b|\bTrave[sç]a\b|Tunel\b|Turistico|\bUniao\b|Univer(sita|cit[áa])ri|Univercidade|Urbani(za(ç|ss?)ao|sa(ç|ss?)ão|zac[aã]o)|Urg(enc|[êe]nss?)ia|\bV(ar[zs]|árs)ea\b|\bVarsim|\bV(árs|ar[zs])ea|\bV(ir[gj]i|jí|erj[íi]|ergi)li|Veter(i?na|en[áa])ri|\bVilaret?\b|Vitoria|Voluntario).*/] {
  throwWarning: tr("PT2-Verificar:Nome com erros ortográficos");
}



/* RegExp provenientes e adaptadas de http://josm.openstreetmap.de/wiki/Rules/Brazilian-Specific */
*[designation] {
        throwWarning: tr("PT2- {0} não se aplica em Portugal", "{0.key}");
        suggestAlternative: "description";
        suggestAlternative: "name";
}
*[highway=living_street] {
        throwWarning: tr("PT2- {0} não se aplica em Portugal", "{0.value}");
        suggestAlternative: "residential";
        suggestAlternative: "road";
}
*[highway=bridleway] {
        throwWarning: tr("PT2- bridleway não se aplica em Portugal, use highway=path");
}
*[amenity=biergarten] {
        throwWarning: tr("PT2- amenity=biergarten não se aplica em Portugal, use amenity=pub");
}
*[leisure=common] {
        throwWarning: tr("PT2- leisure=common não se aplica em Portugal");
}
*[wikipedia][wikipedia !~ /^pt:/] {
        throwWarning: tr("PT2-Usar prefixo em português (pt:) em {0}", "{0.key}");
}
/* endereços com nome de via errado */
*["addr:street"]["addr:street" !~ /^(Aeroporto|Alameda|Alto|Área|Avenida|Bairro|Beco|Calçad(a|inha)|Caminho|Campo|Campus|Condomínio|Estação|Estrada|Jardim|Ladeira|Largo|Loteamento|Pátio|Pra(ça|ceta)|Rotunda|Rua|Travessa|Terreiro|Urbanização|Via|Viadutos?|Viela|Vila) .*/] {
        throwWarning: tr("PT2-{0} com nome de via ausente, errado ou abreviado", "{0.key}");
}
/* nomes e ruas escritos totalmente em maiúsculo */
*[name =~ /^[A-Z0-9]*[A-Z]+[A-Z0-9]*$/],
*["addr:street" =~ /^[A-Z0-9]*[A-Z]+[A-Z0-9]*$/] {
        throwOther: tr("PT2-Verificar: {0} com letras apenas em maiúsculo", "{0.key}");
        suggestAlternative: "short_name";
}
/* nomes com valores que provavelmente deveriam estar em alt_name, short_name, etc */
*[name =~ /.*\(.*\).*/] {
        throwWarning: tr("PT2- {0} com parênteses", "{0.key}");
        suggestAlternative: "alt_name";
        suggestAlternative: "short_name";
        suggestAlternative: "description";
                suggestAlternative: "note";
}
*[name =~ /.*, .*/] {
        throwWarning: tr("PT2- {0} com vírgula", "{0.key}");
        suggestAlternative: "alt_name";
        suggestAlternative: "short_name";
        suggestAlternative: "description";
                suggestAlternative: "note";
}
*[name =~ /.*: .*/] {
        throwWarning: tr("PT2- {0} com dois pontos", "{0.key}");
        suggestAlternative: "alt_name";
        suggestAlternative: "short_name";
        suggestAlternative: "description";
                suggestAlternative: "note";
}
/* utilizar ; como separador de valores em source */
*[source =~ /.*,.*/],
*["source:ref" =~ /.*,.*/],
*["source:name" =~ /.*,.*/] {
        throwOther: tr("PT2-Utilizar ; como separador de valores em {0}", "{0.key}");
}
/* estrada com identificador mas sem o nome real */
*[name = *ref][highway] {
        throwWarning: tr("PT2- {0} e {1} são iguais; adicionar nome completo da estrada", "{0.key}", "{0.value}");
}
/* possui nome de rua mas não tem etiqueta de highway */
*[!highway][route != road][type !~ /route|street/][name][name =~ /^(?i)(Auto-estrada|Avenida|Beco|Calçad(a|inha)|Caminho|Estrada|Itinerário Complementar|Itinerário Principal|Rotunda|Rua|Travessa|Viadutos?|Viela) .*/][name !~ /^(?i)estrada de ferro/] {
        throwWarning: tr("PT2-Com nome de via mas sem etiqueta de {0}", "{0.key}");
}
*[highway][name =~ /^(?i)(Alameda|Avenida|Beco|Calçad(a|inha)|Caminho|Estrada|Ladeira|Largo|Pátio|Pra(ça|ceta)|Rotunda|Rua|Travessa|Terreiro|Via|Viadutos?|Viela)( (de acesso|sem nome|projetad(a|o)))?$/] {
        throwWarning: tr("PT2-Com nome incompleto");
}
/* estrada com identificador mas sem o nome real */
*[name = *ref][highway] {
        throwWarning: tr("PT2- {0} e {1} são iguais; adicionar nome completo da via", "{0.key}", "{0.value}");
}
way[highway][type = route] {
        throwWarning: tr("PT2- {0} não deve possuir {1}", "{0.key}", "{1.tag}");
}
/* nomes desnecessários */
*[designation = *"addr:housename"],
*[ref = *designation],
*[ref = *old_ref],
*[name = *"addr:housename"],
*[name = *designation],
*[name = *alt_name],
*[name = *int_name],
*[name = *loc_name],
*[name = *nat_name],
*[name = *official_name],
*[name = *old_name],
*[name = *reg_name],
*[name = *short_name],
*[name = *sorting_name] {
        throwWarning: tr("PT2- {0} e {1} são iguais; remover chave {1} desnecessária", "{0.key}", "{0.value}");
        fixRemove: "{0.value}";
}
/* provalvemente o tipo dessas vias não deve ser link */
*[highway $= _link][name =~ /(Alameda|Avenida|Rua|Travessa|Viela) .*/] {
        throwWarning: tr("PT2-Verificar: via possivelmente errada com {0}", tag("highway"));
}
/* é útil ter o destino das saídas de estradas */
*[highway = motorway_link][!destination] {
        throwOther: tr("PT2- {0} sem etiqueta {1}", "{0.value}", "{1.key}");
}
*[place = city][!name],
*[place = town][!name],
*[place = village][!name] {
        throwWarning: tr("PT2- {0} sem nome", "{0.value}");
}
*[amenity =~ /^(school|college|kindergarten|driving_school)$/][name =~ /^(?i)\b(Universidade|Faculdade|Instituto Universitário|Instituto Politécnico|Instituto Superior|Instituto Português de Administração|Instituto de Engenharia|Escola do Serviço de Saúde Militar|Escola Universitária|Academia Militar|Academia da Força Aérea|Academia Nacional Superior|Conservatório Superior|Escola Naval)\b/] {
        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
        suggestAlternative: "amenity=university";
}
*[amenity =~ /^(university|college|kindergarten|driving_school)$/][name =~ /^(?i)\b(Escola|Agrupamento de Escolas|Liceu)\b/] && *[amenity =~ /^(university|college|kindergarten|driving_school)$/][name !~ /^(?i)\b(Escola Universitária|Escola Universitária)\b/] {
        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
        suggestAlternative: "amenity=school";
}
*[amenity =~ /^(university|school|kindergarten|driving_school)$/][name =~ /^(?i)\b(Colégio|Internato|Real Colégio)\b/] {
        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
        suggestAlternative: "amenity=college";
}
*[amenity =~ /^(university|school|college|driving_school)$/][name =~ /^(?i)\b(creche|jardim infantil|jardim de infância|infantário|externato)\b/] {
        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
        suggestAlternative: "amenity=kindergarten";
}
*[amenity =~ /^(university|school|college|kindergarten)$/][name =~ /^(?i)\bEscola de Condução\b/] {
        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
        suggestAlternative: "amenity=driving_school";
        fixAdd: "{0.key}=driving_school";
}
*[amenity = university]  *[amenity = university],
*[amenity = university]  *[amenity = college],
*[amenity = university]  *[amenity = school] {
          throwWarning: tr("PT2- {0} dentro de {1}", "amenity=university", "{0.tag}");
}
*[amenity = college]  *[amenity = college] {
          throwWarning: tr("PT2- {0} dentro de {1}", "amenity=college", "{0.tag}");
}
*[amenity = school]  *[amenity = school] {
          throwWarning: tr("PT2- {0} dentro de {1}", "amenity=school", "{0.tag}");
}
*[name =~ /^(?i)Subestação .*/][power][power != substation],
*[name =~ /^(?i)Tribunal .*/][amenity][amenity != courthouse],
*[name =~ /^(?i)Hospital .*/][building][building != hospital],
*[name =~ /^(?i)(Universidade|Faculdade) .*/][building][building != university],
*[name =~ /^(?i)Escola .*/][building][building != school],
*[name =~ /^(?i)Hotel .*/][building][building != hotel],
*[name =~ /^(?i)Capela .*/][building][building != chapel],
*[name =~ /^(?i)Igreja .*/][building][building != church],
*[name =~ /^(?i)Catedral .*/][building][building != cathedral],
*[name =~ /^(?i)(Fazenda|Quinta) .*/][building][building != farm],
*[name =~ /^(?i)(Supermercado|Hipermercado|Minimercado) .*/][building][building != supermarket] {
        throwWarning: tr("PT2- {0} provavelmente deveria ser {1}", "{2.key}", "{2.value}");
        fixAdd: "{2.key}={2.value}";
}
*[name =~ /^(?i)Clínica.*/][amenity != clinic] {
        throwWarning: tr("PT2-Clínicas devem ser amenity=clinic");
}
/* nomes e ruas escritos totalmente em maiúsculo */
*[name =~ /^[A-Z0-9]*[A-Z]+[A-Z0-9]*$/],
*["addr:street" =~ /^[A-Z0-9]*[A-Z]+[A-Z0-9]*$/] {
        throwOther: tr("PT2-Verificar: {0} com letras apenas em maiúsculo", "{0.key}");
        suggestAlternative: "short_name";
}
*["addr:postcode"]["addr:postcode" !~ /[0-9]{4}-[0-9]{3}/],
*[postal_code][postal_code !~ /[0-9]{4}-[0-9]{3}/] {
        throwWarning: tr("PT2- {0} (código postal) em formato diferente de NNNN-NNN", "{0.key}");
}
*[highway]["addr:postcode"] {
        throwWarning: tr("PT2- {0} deve ser postal_code em {1}", "{1.key}", "{0.key}");
        fixChangeKey: "{1.key} => postal_code";
}
node[surface] {
        throwWarning: tr("PT2-Superfície ({0}) num nó", "{0.key}");
        fixRemove: "{0.key}";
}
/* highway/waterway com layer negativo e sem túnel */
*[highway][layer < 0][!tunnel],
*[waterway][layer < 0][!tunnel] {
        throwWarning: tr("PT2-Verificar: {0} negativo de {1} com ausência de {2}", "{1.key}", "{0.key}", "{2.key}");
}
/* highway/waterway com layer positivo e sem ponte */
*[highway][layer > 0][!bridge][highway != bus_stop],
*[waterway][layer > 0][!bridge] {
        throwWarning: tr("PT2-Verificar: {0} positivo de {1} com ausência de {2}", "{1.key}", "{0.key}", "{2.key}");
}
way[highway = motorway_junction] {
        throwError: tr("PT2- {0} deve ser utilizado apenas no nó de saída da estrada", "{0.tag}");
        suggestAlternative: "highway=motorway_link";
}
/* lugar possui nome que inicia com "Edifício" mas não possui etiqueta building */
*[name =~ /^(?i)edifício.*/][!building] {
        throwWarning: tr("PT2-Possível ausência de etiqueta {0}", "{1.key}");
        fixAdd: "building=yes";
}
way[highway][lanes][lanes !~ /^[1-9]([0-9]*)$/],
way[highway]["lanes:backward"]["lanes:backward" !~ /^[1-9]([0-9]*)$/],
way[highway]["lanes:forward"]["lanes:forward" !~ /^[1-9]([0-9]*)$/] {
        throwError: tr("PT2- {0} deve ser um valor inteiro", "{1.key}");
}
/* estradas de 2 vias mas apenas com 1 faixa estão provavelmente erradas */
*[highway][lanes = 1][!oneway?][!junction] {
        throwWarning: tr("PT2- {0} provavelmente deveria ter {1} ≥ 2 ou {2}=yes", "{0.key}", "{1.key}", "{2.key}");
}
/* admin_level deve ficar na relação e não no nó do local */
node[place][admin_level] {
        throwWarning: tr("PT2- {0} deve fazer parte do limite administrativo e não do nó do local", "{1.key}");
}
relation[admin_level][!boundary],
relation[admin_level][boundary][boundary != administrative] {
        throwError: tr("PT2- {0} ausência de boundary=administrative", "{0.key}");
        fixAdd: "boundary=administrative";
}
relation[boundary=administrative][!admin_level] {
        throwError: tr("PT2- {0} deve possuir {1}", "{0.tag}", "{1.key}");
}
relation[boundary=administrative] > way { set way_in_relation; }
relation[admin_level] > way { set way_in_relation; }
way[boundary=administrative][!admin_level]!.way_in_relation {
        throwError: tr("PT2- {0} deve possuir {1}", "{0.tag}", "{1.key}");
}
way[admin_level][!boundary]!.way_in_relation,
way[admin_level][boundary][boundary != administrative]!.way_in_relation {
        throwError: tr("PT2- {0} ausência de boundary=administrative", "{0.key}");
        fixAdd: "boundary=administrative";
}
relation[boundary=administrative][type=multipolygon] {
        throwError: tr("PT2-Relação deve ser do tipo ''type=boundary''");
        fixAdd: "type=boundary";
}
node[destination],
relation[destination][type != waterway] {
        throwWarning: tr("PT2- {0} deve ser usado apenas em linhas", "{0.key}");
}
/* landuse não deve ter layer */
*[landuse][layer] {
        throwWarning: tr("PT2-Verificar: {0} não deve possuir {1}", "{0.key}", "{1.key}");
}
/* path deve utilizar trail_visibility e não tracktype */
way[highway = path][tracktype] {
        throwWarning: tr("PT2-Uso incorreto de {0}", "{1.key}");
        suggestAlternative: "trail_visibility";
}
/* tracktype é uma propriedade de tracks apenas */
way[highway != track][tracktype] {
        throwWarning: tr("PT2-Utilizar {0} apenas em {1}={2}", "{1.key}", "{0.key}", "{0.value}");
}

Rules_Portuguese-Errors-PT2.validator.mapcss, Rules_Portuguese-Errors-PT2.zip

Note: See TracWiki for help on using the wiki.