Changes between Version 4 and Version 5 of Rules/Portuguese-Errors-PT2


Ignore:
Timestamp:
2015-03-05T20:55:47+01:00 (12 years ago)
Author:
Rui
Comment:

more rules and fixes

Legend:

Unmodified
Added
Removed
Modified
  • Rules/Portuguese-Errors-PT2

    v4 v5  
    33{{{
    44#!rule
     5
    56
    67meta
     
    2728  throwWarning: tr("PT2-Dois espaços em branco");
    2829}
    29 *[name =~ /(?i)(sem\s?nome|fix\s?me|\bfix\b|nome|no\s?name|desconhecido)/] {
     30*[name =~ /(?i)(sem\s?nome|fix\s?me|\bfix\b|nome|no\s?name|desconhecido|n(ã|a)o conhecido)/] {
    3031  throwWarning: tr("PT2-Nome errado, sem nome...");
    3132}
     
    3334  throwWarning: tr("PT2-O correto é -os-");
    3435}
    35 way[highway][name =~ /(?i)(\bbank|building|\bdrive\s?way|embassy|\bhelip(ort|ad)\b|\bPark(ing)?|Post\s?off?ice|\bRue\b|\bshop\b|\bstair|\btra(c?k|ck?)|stree?t|Zebra cros)/] {
     36way[highway][name =~ /(?i)(\bairport|bank|building|\bdrive\s?way|embassy|\bhelip(ort|ad)\b|\bPark(ing)?|Post\s?off?ice|\bRue\b|\bshop\b|\bstair|\btra(c?k|ck?)|stree?t|Zebra cros)/] {
    3637  throwWarning: tr("PT2-Palavras por traduzir ou mudar a etiqueta");
    3738}
    38 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|Pe|Pto|P[cç]|Pr|Pct[aª]?|Presid|Pro?fª?|Proj|Prolng|Qd|\bR\.|Rot|Sarg|Slj|Soc|Scv|Sq|Ten|Tr|Transv|Trav|Trv|Tv|Urb|Vl|Visc|Vv|Zn)(\.| )/] {
     39way[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|Pe|Pto|P[cç]|Pr|Pct[aª]?|Presid|Pro?fª?|Proj|Prolng|Qd|\bR\.|Rot|Sarg|Slj|Soc|Scv|Sq|Ten|Tr|Transv|Trav|Trv|Tv|Urb|Vl|Visc|Vv|Zn)(\.| )/] {
    3940  throwWarning: tr("PT2-Nome de estrada ou caminho abreviado");
    4041}
    41 *[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)/] {
     42*[name =~ /(Ass|C(\.\s?|\s)?C|Av\.?ª?|B(\.\s?|\s)?V|B(\.\s?|\s)?E(\.\s?|\s)?S|\bCongr|\bD|\bDir|\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º]|\bH|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|\bOf|\bJ(\.\s?|\s)?F)(\.|\s)/] [name !~ /(?i)\bS\.A\.\b/] {{
    4243  throwWarning: tr("PT2-Nome abreviado");
    4344}
     
    4849  throwWarning: tr("PT2-Acentuação isolada entre espaços");
    4950}
    50 *[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|\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|Ourive(rs|z)aria|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).*/] {
     51*[name =~ /(?i).*(\bá\s|hà|\bAb[ìi]lio|Ac([àa]c|ass?|áss?)i[ao]|Academic[oa]|A((c|ss?)[ùu]|çù)de\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[ao]s?\b|\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|\bCidadao\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|\bElec?tric[ao]s?|\b\b([ÈÉ]m[íi]|Emi)di[ao]\b|\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)|\binformatica|\bIn(es|ez|êz)\b|Infantario|Informatica|\bIrmao?s?\b|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|\bMedic[oa]\b|Mi(ss?iona|cion[áa])ri|M(i[sz]erico|e[sz]irec[oó])rdia|Mortuaria|\bM(o[zs]|uz)eu\b|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|[ÒO]bidos?|Observatorio|(Oceanic[ao]\b|O[çs]s?eânic)|\bOperari[oa]s?\b|Orqu?idea|Ortigao|Ourive(rs|z)aria|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|\bR[eu]tunda\b|\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|\bTr?ave[sç]a\b|\bTunel\b|\bTuristic|\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).*/] {
    5152  throwWarning: tr("PT2-Verificar:Nome com erros ortográficos");
    5253}
     
    7273way[highway !~ /^(primary|trunk)/][name =~ /^(?i)(Estrada Nacional|EN)\s/],
    7374way[highway !~ /^(primary|trunk)/][ref =~ /^(?i)(E\.?)?N(\.|\s)?[0-9]{1,3}$/] {
    74         throwWarning: tr("PT2- Estradas nacionais devem ser primárias/VR/IP/IC");
     75        throwWarning: tr("PT2-Estradas nacionais devem ser primárias/VR/IP/IC");
    7576                fixAdd: "highway=primary";
    7677}
    7778way[highway !~ /^secondary/][name =~ /^(?i)(Estrada Regional|ER)\s/],
    7879way[highway !~ /^secondary/][ref =~ /^(?i)(E\.?)?R(\.|\s)?[0-9]{1,4}$/] {
    79         throwWarning: tr("PT2- Estradas regionais devem ser secundárias");
     80        throwWarning: tr("PT2-Estradas regionais devem ser secundárias");
    8081                fixAdd: "highway=secondary";
    8182}
    8283way[highway !~ /^tertiary/][name =~ /^(?i)((Estrada|Caminho) Municipal|EM|CM)\s/],
    8384way[highway !~ /^tertiary/][ref =~ /^(?i)([EC]\.?)?M(\.|\s)?[0-9]{1,4}$/] {
    84         throwWarning: tr("PT2- Estradas municipais devem ser terciárias");
     85        throwWarning: tr("PT2-Estradas municipais devem ser terciárias");
    8586                fixAdd: "highway=tertiary";
    8687}
     
    9192        throwWarning: tr("PT2-Rotunda num nó, é melhor num círculo");
    9293}
     94node[amenity = place_of_worship] ∈ *[building] {
     95          throwWarning: tr("PT2- local de oração num nó, sobre 1 edifício");
     96}
     97node[amenity = place_of_worship] {
     98          throwWarning: tr("PT2- local de oração num nó, é melhor um edifício");
     99}
     100*[amenity != recycling][name =~ /(?i)\b(ecoponto|vidrão|pilhão)\b/] {
     101          throwWarning: tr("PT2- ecoponto no nome mas sem etiqueta de ecoponto");
     102}
     103*[amenity != fire_station][name =~ /(?i)\b(Bombeiros|Quartel dos B|\bBatalhão|Sapadores)\b/][name !~ /(?i)\b(Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Escad(a|inha|aria)s?|Estrada|Ladeira|Largo|Pátio|Pra(ç|cet)a|Rotunda|Rua|Terreiro|Transversal|Travessa|Viela) dos (Bombeiros|Quartel dos B|\bBatalhão|Sapadores)\b/] {
     104          throwWarning: tr("PT2-Bombeiros no nome mas sem etiqueta");
     105}
     106/* Locais, Juntas, Câmaras, Ecopontos... numa linha, normalmente estradas */
     107node:connection[amenity = recycling],
     108node:connection[place =~ /(village|city|town|locality)/] {
     109        throwWarning: tr("PT2- {0} deve estar isolado e não numa linha", "{1.tag}");
     110}
     111/* Locais, Juntas, Câmaras, Ecopontos... numa linha, normalmente estradas */
     112node[shop] ∈ way ,
     113node[amenity = recycling] ∈ way ,
     114node[place] ∈ way {
     115        throwWarning: tr("PT2-Vários tipos de nós que devem estar isolados e não numa linha", "{1.tag}");
     116}
     117
     118
     119
    93120
    94121
     
    115142        throwWarning: tr("PT2- leisure=common não se aplica em Portugal");
    116143}
     144*[railway=monorail] {
     145        throwWarning: tr("PT2-Não existem monocarris em Portugal, será carris?");
     146}
    117147*[wikipedia][wikipedia !~ /^pt:/] {
    118148        throwWarning: tr("PT2-Usar prefixo em português (pt:) em {0}", "{0.key}");
    119 }
    120 /* endereços com nome de via errado */
    121 *["addr:street"]["addr:street" !~ /^(Alameda|Alto|Área|Avenida|Bairro|Beco|Calçad(inh)?a|Caminho|Campo|Campus|Condomínio|Estação|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Jardim|Ladeira|Largo|Loteamento|Pátio|Pra(ça|ceta)|Rotunda|Rua|Transversal|Travessa|Terreiro|Urbanização|Via(-Rápida)?|Viadutos?|Viela|Vila) .*/] {
    122         throwWarning: tr("PT2-{0} sem nome de via, errado, abreviado ou maiúsculas", "{0.key}");
    123149}
    124150/* nomes e ruas escritos totalmente em maiúsculo */
     
    136162                suggestAlternative: "note";
    137163}
    138 *[name =~ /.*, .*/] {
     164*[name =~ /.* - .*/] {
     165        throwWarning: tr("PT2- {0} com traço", "{0.key}");
     166        suggestAlternative: "alt_name";
     167        suggestAlternative: "short_name";
     168        suggestAlternative: "description";
     169}
     170*[name =~ /.*, .*/][name !~ /.*, (Lda|S\.A)\./] {
    139171        throwWarning: tr("PT2- {0} com vírgula", "{0.key}");
    140172        suggestAlternative: "alt_name";
     
    156188        throwWarning: tr("PT2-Utilizar ; como separador de valores em {0}", "{0.key}");
    157189}
    158 /* estrada com identificador mas sem o nome real */
     190/* nome e referências iguais */
    159191*[name = *ref][highway] {
    160192        throwWarning: tr("PT2- {0} e {1} são iguais; adicionar nome completo da estrada", "{0.key}", "{0.value}");
    161193}
    162194/* possui nome de rua mas não tem etiqueta de highway */
    163 *[!highway][route != road][type !~ /route|street/][name][name =~ /^(?i)(Auto-estrada|Avenida|Beco|Calçad(inh)?a|Caminho|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Rotunda|Rua|Transversal|Travessa|Via-Rápida|Viadutos?|Viela) .*/][name !~ /^(?i)estrada de ferro/] {
     195*[!highway][route != road][type !~ /route|street/][name][name =~ /^(?i)(Auto-?estrada|Avenida|Beco|Calçad(inh)?a|Caminho|Ciclovia|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Passeio|Rotunda|Rua|Transversal|Travessa|Trilho|Túnel|Variante|Via(-|\s)Rápida|Viadutos?|Viela) .*/][name !~ /^(?i)estrada de ferro/] {
    164196        throwWarning: tr("PT2-Verificar: com nome de via mas sem etiqueta de {0}", "{0.key}");
    165197}
    166 *[highway][name =~ /^(?i)(Auto-Estrada|Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Ladeira|Largo|Pátio|Pra(ça|ceta)|Rotunda|Rua|Transversal|Travessa|Terreiro|Via(-Rápida)?|Viadutos?|Viela)( (de acesso|sem nome|projetad(a|o)|em construção))?$/] {
     198*[highway][name =~ /^(?i)(Auto-?Estrada|Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Ciclovia|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Ladeira|Largo|Pátio|Pra(ç|cet)a|Rotunda|Rua|Transversal|Travessa|Terreiro|Trilho|Túnel|Variante|Via(-Rápida)?|Viadutos?|Viela)( (de acesso|sem nome|projetad(a|o)|em construção))?$/] {
    167199        throwWarning: tr("PT2-Via com nome incompleto");
     200}
     201/* endereços com nome de via errado */
     202*["addr:street"]["addr:street" !~ /^(Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Campus|Circular|Condomínio|Escad(a|inha|aria)s?|Estrada|Itinerário\s?|Jardi(m|ns)|Ladeira|Largo|Loteamento|Pátio|Pra(ç|cet)a|Quinta|Rotunda|Rua|Terreiro|Transversal|Travessa|Urbanização|Variante|Via|Viela) .*/] {
     203        throwWarning: tr("PT2- {0} sem nome de via, errado, abreviado ou maiúsculas", "{0.key}");
     204}
     205/* nome de vias sem logradouro correto */
     206*[highway=cycleway][name][name !~ /^(?i)ciclovia .*/],
     207*[highway][highway !~ /bridleway|bus_stop|cycleway|crossing|footway|give_way|motorway_junction|path|raceway|speed_camera|steps|stop/][name][name !~ /^(Auto-?Estrada|Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Circular Regional Exterior|Escad(a|inha|aria)s?|Estrada|Itinerário|Ladeira|Largo|Loteamento|Pátio|Ponte|Pra(ç|cet)a|Rotunda|Rua|Terreiro|Transversal|Travessa|Túnel|Variante|Via(-Rápida)?|Viaduto|Viela) .*/] {
     208        throwWarning: tr("PT2- {0} sem nome de via, errado, abreviado ou maiúsculas", "{0.key}");
    168209}
    169210/* estrada com identificador mas sem o nome real */
     
    173214way[highway][type = route] {
    174215        throwWarning: tr("PT2- {0} não deve possuir {1}", "{0.key}", "{1.tag}");
     216}
     217relation[type = route][highway] {
     218        throwWarning: tr("PT2-Relação não deve possuir {0}", "{1.key}");
    175219}
    176220/* nomes desnecessários */
     
    192236        fixRemove: "{0.value}";
    193237}
    194 /* provalvemente o tipo dessas vias não deve ser link */
    195 *[highway $= _link][name =~ /(Alameda|Avenida|Rua|Travessa|Viela) .*/] {
    196         throwWarning: tr("PT2-Verificar: via possivelmente errada com {0}", tag("highway"));
    197 }
    198 /* é útil ter o destino das saídas de estradas */
    199 *[highway = motorway_link][!destination] {
    200         throwWarning: tr("PT2- {0} sem etiqueta {1}", "{0.value}", "{1.key}");
    201 }
    202238*[place = city][!name],
    203239*[place = town][!name],
     
    205241        throwWarning: tr("PT2- {0} sem nome", "{0.value}");
    206242}
    207 *[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/] {
     243*[amenity =~ /^(school|college|kindergarten|driving_school)$/][name =~ /^(?i)\b(Academia da Força Aérea|Academia Militar|Academia Nacional Superior|Conservatório Superior|Faculdade|Escola d[eo] Serviço de Saúde Militar|Escola Náutica Infante|Escola Naval|Escola Superior|Escola Universitária|Instituto de Ciências Biomédicas|Instituto de Engenharia|Instituto Militar|Instituto Politécnico|Instituto Português de Administração|Instituto Superior|Instituto Universitário|Universidade)\b/] {
    208244        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
    209245        suggestAlternative: "amenity=university";
    210246}
    211 *[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/] {
     247*[amenity =~ /^(university|college|kindergarten|driving_school)$/][name =~ /^(?i)\b(Escola|Agrupamento de Escolas|Liceu|Centro de Formação Profissional)\b/][name !~ /^(?i)\b(Escola d[eo] Serviço de Saúde Militar|Escola Náutica Infante|Escola Naval|Escola Superior|Escola Universitária)\b/] {
     248        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
     249        suggestAlternative: "amenity=school";
     250}
     251*[amenity =~ /^(university|college|kindergarten|driving_school)$/][name =~ /^(?i)\b(Escola|Agrupamento de Escolas|Liceu|Centro de Formação Profissional)\b/][name !~ /^(?i)\b(Escola d[eo] Serviço de Saúde Militar|Escola Náutica Infante|Escola Naval|Escola Superior|Escola Universitária)\b/] {
    212252        throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado");
    213253        suggestAlternative: "amenity=school";
     
    240280*[name =~ /^(?i)Subestação .*/][power][power != substation],
    241281*[name =~ /^(?i)Tribunal .*/][amenity][amenity != courthouse],
    242 *[name =~ /^(?i)Hospital .*/][building][building != hospital],
     282*[name =~ /^(?i)(Hospital|Centro Hospitalar) .*/][building][building != hospital],
    243283*[name =~ /^(?i)(Universidade|Faculdade) .*/][building][building != university],
    244284*[name =~ /^(?i)Escola .*/][building][building != school],
     
    283323*[name =~ /(?i)\b(Prisão|Prisional)\b/][amenity][amenity != prison],
    284324*[name =~ /(?i)\b(Embaixada|Consulado)\b/][amenity][amenity != embassy],
    285 *[name =~ /(?i)\bTeatro\b/][amenity][amenity != theatre] ,
    286 *[name =~ /(?i)\bCinema\b/][amenity][amenity != cinema] ,
    287 *[name =~ /^(?i)Café\b/][amenity][amenity != cafe] ,
    288 *[name =~ /(?i)(Ma?c\s?Donald('|\s)?s/|Burgu?er\s?(Qu|K)ing)][amenity][amenity != fast_food] ,
    289 *[name =~ /^(?i)Parque de Campismo\b/][amenity][amenity != camp_site] ,
    290 *[name =~ /(?i)\b(Pousada|hostel)\b/][amenity][amenity != hostel] ,
     325*[name =~ /(?i)\bTeatro\b/][amenity][amenity != theatre],
     326*[name =~ /(?i)\bCinema\b/][amenity][amenity != cinema],
     327*[name =~ /^(?i)Café\b/][amenity][amenity != cafe],
     328*[name =~ /(?i)(Ma?c\s?Donald('|\s)?s/|Burgu?er\s?(Qu|K)ing)][amenity][amenity != fast_food],
     329*[name =~ /^(?i)Parque de Campismo\b/][amenity][amenity != camp_site],
     330*[name =~ /(?i)\b(Pousada|hostel)\b/][amenity][amenity != hostel],
    291331*[name =~ /(?i)\bCemitério\b/][landuse][landuse != cemetery],
    292332*[name =~ /^(?i)Capela .*/][building][building != chapel],
     
    298338        fixAdd: "{2.key}={2.value}";
    299339}
    300 *[name =~ /^(?i)(Junta de Freguesia|Câmara Municipal).*/][amenity != townhall] {
     340*[name =~ /^(?i)Clínica.*/][amenity != clinic][name !~ /^(?i)Clínica (Veterin|Dent)ária.*/] {
     341        throwWarning: tr("PT2-Clínicas devem ser amenity=clinic");
     342}
     343*[name =~ /(?i)(Junta de Freguesia|Câmara Municipal).*/][name !~ /(?i)(Rua|Avenida|Travessa) da (Junta de Freguesia|Câmara Municipal).*/][amenity != townhall] {
    301344        throwWarning: tr("PT2-Juntas de Freguesia e Câmaras Municipais devem ser amenity=townhall");
    302345                fixAdd: "amenity=townhall";
    303346}
    304 *[name =~ /^(?i)Clínica.*/][amenity != clinic] && [name !~ /^(?i)Clínica (Veterin|Dent)ária.*/] {
    305         throwWarning: tr("PT2-Clínicas devem ser amenity=clinic");
     347*[leisure][name =~ /^(?i)(campo|est(á|a)dio) (de (futebol|desportos?)|desportivo)?$/],
     348*[leisure][name =~ /^(?i)(estádio|(Pavilhão )?)Gimnodesportivo$/] {
     349        throwWarning: tr("PT2-Nome supérfluo/incompleto de local de lazer");
    306350}
    307351/* nomes e ruas escritos totalmente em maiúsculo */
     
    311355        suggestAlternative: "short_name";
    312356}
     357/* Erro comum como Rua do CRuzeiro */
     358*[name =~ /(.*)?[A-Z]{2}[a-z].*/],
     359*["addr:street" =~ /(.*)?[A-Z]{2,}[a-z].*/] {
     360        throwWarning: tr("PT2-Verificar: nome ou endereço com 2 letras seguidas em maiúsculo");
     361}
     362/* lugar possui nome que inicia com "Edifício" mas não possui etiqueta building */
     363*[name =~ /^(?i)edifício.*/][!building] [name !~ /^(?i)\bEdifício Transparente\b/] {
     364        throwWarning: tr("PT2-Possível ausência de etiqueta {0}", "{1.key}");
     365        fixAdd: "building=yes";
     366}
    313367*["addr:postcode"]["addr:postcode" !~ /[0-9]{4}-[0-9]{3}/],
    314368*[postal_code][postal_code !~ /[0-9]{4}-[0-9]{3}/] {
     
    337391        suggestAlternative: "highway=motorway_link";
    338392}
    339 /* lugar possui nome que inicia com "Edifício" mas não possui etiqueta building */
    340 *[name =~ /^(?i)edifício.*/][!building] {
    341         throwWarning: tr("PT2-Possível ausência de etiqueta {0}", "{1.key}");
    342         fixAdd: "building=yes";
    343 }
    344393way[highway][lanes][lanes !~ /^[1-9]([0-9]*)$/],
    345394way[highway]["lanes:backward"]["lanes:backward" !~ /^[1-9]([0-9]*)$/],
     
    394443        throwWarning: tr("PT2-Utilizar {0} apenas em {1}={2}", "{1.key}", "{0.key}", "{0.value}");
    395444}
     445/* número de saída de rodovia */
     446*[highway=motorway_junction][ref][ref !~ /^[0-9]+( |-)*([A-Z])?$/] {
     447        throwWarning: tr("PT2-Saída de via ({0}) fora do padrão", "{1.key}");
     448}
     449*[alt_ref] {
     450        throwWarning: tr("PT2-O conteúdo de {0} deve fazer parte de ref, separado por ;", "{0.key}");
     451        suggestAlternative: "ref";
     452}
     453*[name =~ /^(?i)pra(ç|cet)a .*/][!leisure][landuse = grass] {
     454        throwWarning: tr("PT2-Possível definição errada de praça: {0}", "{2.tag}");
     455        suggestAlternative: "leisure=park";
     456}
     457*[highway][highway !~ /construction|give_way|motorway_junction|proposed|raceway|speed_camera|stop/][!wheelchair],
     458*[building][!wheelchair] {
     459        throwOther: tr("PT2- {0} sem etiqueta de acessibilidade ({1})", "{0.key}", "{1.key}");
     460}
     461*[route = ferry][!duration] {
     462        throwWarning: tr("PT2-Ausência do tempo de duração ({0}) da balsa", "{1.key}");
     463}
     464*[highway = service][!service] {
     465        throwOther: tr("PT2-Ausência do tipo de serviço ({0}) na {1}", "{1.key}", "{0.key}");
     466}
     467*[highway = track][!tracktype] {
     468        throwOther: tr("PT2-Ausência do tipo de track ({0}) na {1}", "{1.key}", "{0.key}");
     469}
     470/* número de faixas apenas para rodovias maiores e links */
     471way[highway =~ /motorway|trunk|primary|secondary|tertiary/][!lanes],
     472way[highway $= _link][!lanes] {
     473        throwOther: tr("PT2- {0} sem número de faixas ({1}) definido", "{0.key}", "{1.key}");
     474}
     475way[highway][!surface][highway != bus_stop] {
     476        throwOther: tr("PT2- {0} sem superfície ({1}) definida", "{0.key}", "{1.key}");
     477}
     478way[highway = motorway_junction] {
     479        throwError: tr("PT2- {0} deve ser utilizado apenas no nó de saída da via", "{0.tag}");
     480        suggestAlternative: "highway=motorway_link";
     481}
     482/* layer não faz sentido em outros objetos */
     483*[layer][!building][!highway][man_made!=pipeline][tunnel!][!railway][!waterway] {
     484        throwWarning: tr("PT2-Verificar: possível uso incorreto de {0} no objeto", "{0.key}");
     485}
     486/* https://github.com/OSMBrasil/validador-josm/issues/54 */
     487/* requer JOSM ≥ 7761 */
     488*[tourism = motel][amenity != love_hotel],
     489*[name =~ /(?i)\bmotel\b/][amenity != love_hotel] {
     490        throwWarning: tr("PT2-Ausência de etiqueta ''{0}''", "{1.value}");
     491        fixAdd: "{1.key}={1.value}";
     492}
     493*[amenity = love_hotel][tourism][tourism != motel] {
     494        throwWarning: tr("PT2-Verificar: provavelmente deve ser ''{0}={1}''", "{2.key}", "{2.value}");
     495}
     496/* é bom especificar o tipo de torre */
     497node[man_made = tower][!"tower:type"] {
     498        throwOther: tr("PT2-Ausência do tipo de torre ({0})", "{1.key}");
     499}
     500*["building:levels"][!building] {
     501        throwWarning: tr("PT2- {0} sem etiqueta {1}", "{0.key}", "{1.key}");
     502}
     503*["building:levels" < 1] {
     504        throwWarning: tr("PT2-Verificar: {0} com valor inválido", "{0.key}");
     505}
     506/* deve-se utilizar short_name, name ou official_name ao invés de long_name */
     507*[long_name] {
     508        throwWarning: tr("PT2-Chave inválida: {0}", "{0.key}");
     509        suggestAlternative: "highway=name";
     510        suggestAlternative: "highway=short_name";
     511        suggestAlternative: "highway=official_name";
     512}
     513/* landuse deve conter algum valor que não seja yes */
     514*[landuse?] {
     515        throwWarning: tr("PT2-Especificar valor correto para {0} em vez de ''{1}''", "{0.key}", tag("landuse"));
     516}
     517/* vários valores para source devem estar na mesma chave, separados por ';' */
     518*[alt_source][source] {
     519        throwWarning: tr("PT2- {0} deve estar incluído em {1}, separado por '';'' caso necessário", "{0.key}", "{1.key}");
     520}
     521*[access = permissive] {
     522        throwWarning: tr("PT2-Verificar: {0} só deve ser usado em vias privadas com permissão de acesso e não vias públicas", "{0.tag}");
     523}
     524*[aeroway][designation =~ /^[A-Z]{4}$/][!icao],
     525*[aeroway][ref =~ /^[A-Z]{4}$/][!icao] {
     526        throwWarning: tr("PT2- {0} provavelmente deve ser utilizado como {1}", "{1.key}", "{2.key}");
     527        fixChangeKey: "{1.key} => {2.key}";
     528}
     529*[crossing][!highway][!railway] {
     530        throwWarning: tr("PT2- {0} deve ser utilizado com {1}={0} ou {2}={0}", "{0.key}", "{1.key}", "{2.key}");
     531}
     532node[highway=speed_camera][!maxspeed],
     533relation[enforcement=maxspeed][!maxspeed],
     534relation[enforcement=maxheight][!maxheight],
     535relation[enforcement=maxweight][!maxweight] {
     536        throwWarning: tr("PT2-Adicionar {0} ao {1}", "{1.key}", "{0.tag}");
     537}
     538node[highway =~ /^(give_way|mini_roundabout|stop|turning_circle)$/][name] {
     539        throwWarning: tr("PT2-Objeto não deve possuir {0}", "{1.key}");
     540}
     541way[highway = give_way],
     542way[highway = mini_roundabout],
     543way[highway = stop],
     544way[highway = turning_circle],
     545relation[highway = give_way],
     546relation[highway = mini_roundabout],
     547relation[highway = stop],
     548relation[highway = turning_circle] {
     549        throwWarning: tr("PT2- {0} deve ser utilizado apenas em nós", "{0.tag}");
     550}
     551/* torres de energia, lombas, câmaras, semáforos etc que não estão ligados a numa via */
     552node:unconnected[power = pole],
     553node:unconnected[power = tower],
     554node:unconnected[highway = speed_camera] {
     555        throwWarning: tr("PT2- {0} deve fazer parte de uma via e não isolado", "{1.tag}");
     556}
     557
     558*[iata = "0"] {
     559        throwWarning: tr("{0} com valor = {1}", "{0.key}", "{0.value}");
     560}
     561/* saídas de estradas devem ter nome e/ou referência */
     562node[highway = motorway_junction][!name][!ref] {
     563        throwWarning: tr("PT2- {0} sem pelo menos uma das etiquetas: {1} ou {2}", "{0.value}", "{1.key}", "{2.key}");
     564}
     565/* provalvemente o tipo dessas vias não deve ser link */
     566*[highway $= _link][name =~ /(Alameda|Avenida|Rua|Travessa|Viela) .*/] {
     567        throwWarning: tr("PT2-Verificar: via possivelmente errada com {0}", tag("highway"));
     568}
     569node[noname?] {
     570        throwWarning: tr("PT2-Verificar: uso suspeito de {0} num nó", "{0.key}");
     571}
     572/* source estranhamente igual o name */
     573*[source = *name] {
     574        throwWarning: tr("PT2-Verificar: {0} e {1} são iguais", "{0.key}", "{0.value}");
     575}
     576
     577
     578
     579/* AVISOS INFORMATIVOS */
     580
     581/* é útil ter o destino das saídas de estradas */
     582*[highway = motorway_link][!destination] {
     583                throwOther: tr("PT2- {0} sem etiqueta {1}", "{0.value}", "{1.key}");
     584}
     585*[place = city][!population],
     586*[place = town][!population],
     587*[place = village][!population] {
     588        throwOther: tr("PT2- {0} sem etiqueta de população", "{0.value}");
     589}
     590*[place][place !~ /hamlet|island|isolated_dwelling|neighbourhood|suburb|village/][population < 10000] {
     591        throwOther: tr("PT2-Verificar: local com <10.000 hab. deve ser village, EXCEPTO sedes de freguesia!");
     592        fixAdd: "place=village";
     593}
     594*[place =~ /city|hamlet|isolated_dwelling|village/][population >= 10000][population < 100000] {
     595        throwOther: tr("PT2-Verificar: local com 10.000-100.000 hab. deve ser town, EXCEPTO sedes de concelho!");
     596        fixAdd: "place=town";
     597}
     598*[place =~ /hamlet|isolated_dwelling|town|village/][population >= 100000] {
     599        throwOther: tr("PT2-Verificar: local com +100.000 hab. deve ser city, EXCEPTO capitais de distrito!");
     600        fixAdd: "place=city";
     601}
     602
     603
    396604
    397605}}}