Version 20 (modified by 8 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; baselanguage: "pt"; } *[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|n(ã|a)o conhecido)/][name !~ /(?i)soldado desconhecido/] { throwWarning: tr("PT2-Nome errado, sem nome..."); } way[highway][name =~ /(-Os-|\sos\s)/] { throwWarning: tr("PT2-O correto é -os-"); } way[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)/] { 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]|\bChurr|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|Vi|Visc|Vv|Zn)(\.| )/] { throwWarning: tr("PT2-Nome de estrada ou caminho abreviado"); } *[name =~ /(Ass|Av\.?ª?|[Bb](\.\s?|\s)?[Vv]|B(\.\s?|\s)?E(\.\s?|\s)?S|C(\.\s?|\s)?C|[Cc](\.\s?|\s)?[Gg](\.\s?|\s)?[Dd]|[Cc](\.\s?|\s)?[Mm]|C(\.\s?|\s)?V(\.\s?|\s)?P|C\.S|\bCongr|\bD|\bDept|\bDir|E[\.\s]?T[\.\s]?A[\.\s]?R|\bEd[Ee]|Ext|\b[FSfs](\.\s?|\s)?[Cc](lub)?e?|\bH|Inst|\bJ(\.\s?|\s)?F|\bLab|\bMte|Na|Ns|N[^0-9º]|N(\.\s?|\s)?[ªa]|\bOf|P(\.\s?|\s)?S(\.\s?|\s)?P|Qta|\bR|\bRes|Rib\.?[aª]?|S|S(\.\s?|\s)?C|\bSoc|Sª|Sr?\.?ª|Sra?|St\.?[oaºª]?|Univ)(\.|\s)/] { throwWarning: tr("PT2-Nome abreviado-NÃO alterar se for nome de estabelecimento"); } *[name =~ /(E(\.|\s)[NRM]|C(\.|\s)M)(\.|\s)/] { throwWarning: tr("PT2-Nome de estrada abreviado. Confirmar se tem ref da estrada e introduzir nome longo"); } *[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à|\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|\bAdriao\b|Africa\b|Ag(enc|êns)ia|\b(Ág|Agu)eda\b|Agrari[ao]|Agricola|\bAguas?|\bAlamo\b|Alcantara|Alfandega|Alvar(es|o)|Amalia|\bAmeli[ao]\b|Americ[ao]s?\b|Amisade|\bAndre\b|\bAngel[ao]\b|\bAnibal|Antonio|Apolonia|Araujo|Arma(ze|sé)(m|ns)|Area|Arqueol(og|ój|oj)ic[oa]|\bArtes(ao|oes)|\bArtistic[oa]|Arvore|Ascen(sao|ção|çao)|\bAsenha\b|As(s?isten[cs]s?|istên[cs]s?i)ia|Astronomico|\bA[sc]is\b|Ass?o(c|ss?)ia(ça|cã|ca)o|Atlantic|Atletico|Auditorio|\bAzemeis|\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|\bBeltr[aâ]o\b|\bBissáu\b|Bonanico|Bonif(ac|as|ás)io|\bBrandao\b|\bBras\b|\bBrazil|Britanic|Cab(leir|elel|el)eir|Cafe\b|Caf(ét[ea]|ata)ria|Cal(c|ss?)ada|C(alva|álv[áa])rio|\bC[àáã]mara|Cambio|Camelia|cami(onaj|no[gj]|nona[gj]|na[gj])em|Camoes|\bCa(mponez|npone[zs])|\bCandid[ao]\b|\bC[aâ]o\b\b|\bCapit(ao|aes|[õo]es)|Ca[cs]s?ador|\bCaza\b|C[ei]miterio|Centenari[ao]|C(e[zs]|éz)ar|\bCha[os]?\b|\bCidadao\b|Ci(enc|[êe]nss?)ia|Cir(ur[gj]|úrj)ica|\bClaudi[ao]|Clerigo|Clinica|Col(e[gj]|éj)io|Combustive(l|is)|Com(er[cs]|érs)io|\bCojo\b|Comdominio|Com(monit[áa]|unita)ri[ao]|Concei(ca|ça|cã)o|\bC[oô]nego\b|Con([cs]s?ervato|cervató)ri|Coperativa|Crist([oôó]va|[oô]vã)o|\bCrus\b|Con(c|ss?)ervatori[oa]|\bDalia\b|\bDami?ao\b|Dan(c|ss?)a\b|Dentari|Dep(oss?|óz|oz)ito|Diagnostico|Diario|Di(até|ete)tica|\bDili\b|Dion(is|iz|íz)io|Dire(cã|ça|ca)o|\bE(c|ss?)ca\b|Edif(i[cçs]s?|íç|íss?)icio|Educa(ca|ça|cã)o|Elec?tric[ao]s?|Elec?trodomestic|\bElisi[ao]\b|\b([ÈÉ]m[íi]|Emi)di[ao]\b|\bEmili[ao]\b|Encarna(ca|ça|cã)o|Escadori|Escoteiro|Espirit[ao]|Expli([çc][õo]es|ca(cõ|ço|co)es|ca(ça|cã)o)|Esta(ca|ça|cã)o|\bEstadio|Estasiona|Estatua|\bEstefani[ao]|Esternato|Estetica|Estradao|Est[êée]vao|Estufador|\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|\bFont[ae]rio|Fortalesa|Fotebol\b|\bFotografo|Fran(ce|sê|se)s\b|Fruticula|Funeraria|Gale\b|Garces|\bGa(rret|rett?)\b|\bGaviao\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|Hipico|\bHor(áss?|ac)io|Horten[cs]ia|Horticula|Iberic[ao]|Imobiliaria|\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|Inspec?ç?(a|oes)|\bIrmao?s?\b|\bJeova\b|Jeronimo|\bJiesta|\bJoao\b|Joelheria|\bJoias?\b|J[oó]se\b|Judi(cia|ss?i[áa])ria|\bJuliao\b|\bJusti(c|ss?)a|\bJulia?o\b|\bJuridic|Laboratorio|L(ás|az|as)aro|Leao|Leitao|\bLinguas?\b|\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|\bMedic[oa]\b|Mi(ss?iona|cion[áa])ri|M[ei][sz](erir?co|irec[oó])rd[ie](o[sz])?a|\bMoises\b|Mortuaria|Moveis|\bM(o[zs]|uz)eu\b|M[uo]([sz]e[uo]lój|ze[uo]ló[gj])ic|Muni((c|ss?)i|ss?í)pio|Musica\b|\bNautic|\bNa(zare|sar[ée])|Negocio|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|O(ceanic[ao]\b|[çs]s?eânic)|Panoramic|P(siquia|ciqui[aá])tric[oa]|Politecnic|Porfirio|Portugue[sz]\b|Profi[cs]ional|\bProgre[sç]o|\bPublic(o|a)\b|P[ou]rifica(ca|ça|cã)o|Quiteria|\bRadio\b|\bRaínha\b|\bRaúl\b|Ress?into|\bR[eu]tunda\b|\bRe(gia|jiã|gi|ji)o\b|Rejimento|Remedio|Repara(cões|çoes|coes|çao|cao|cão)|R[ée]publica\b|R(épu|epú|épú)blican[ao]|Retro(za|[zs]e)ria|Re([zs]ide|zidê)n[cs]ias?\b|Rezid[êe]ncial|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]|\bRo([gj]e|jé)rio|Romanic[ao]|Romao|\bRo(sa|za|zá)[rl]i[oa]|Ruina|\bSa\b|Salao|\bSanitari|Sant(are|er[ée])m|Sant(í[sçc]|i[sçc]s?)im[ao]|\bSao\b|\bSaude|\sSe\b|Sebastiao|Seculo|Secundari[ao]|(Semina|Cemin[áa])rio|Senior|Ser(racao|raçao|racão|ação)|Sepulveda|Servi(c|ss?)o|S(erg|érji)io|Sidonio|\bSilverio|Sim(ao|oes)|Su(e(c|ss?)ia|éss?)ia|Su(íss?|iç|iss?)a|Su[çs]s?e(ss?|ç)o|\bT(ang|[âa]nj)er\b|Tape([çc]e|[cs]s?a)ria|Taxis?|Tecnico|Tecnol(ój|o[gj])ico|\bTenis\b|Tertulia|Teofilo|Teotonio|Textil|\bTilia|\bTomas\b|\bTome\b|\bTr(a[sz]|áz)\b|\bTr?ave[sç]a\b|\bTrese\b|\bTúlipa|\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|\bValeri[ao]\b|\bVen(an[cs]s?|[âa]nss?)i[ao]|\bV(ide|[íi]di)o\b|\bV(ir[gj]i|jí|erj[íi]|ergi)li|Veter(i?na|en[áa])ri|\bVilaret?\b|Vitoria|Voluntario).*/] { throwWarning: tr("PT2-Verificar:Endereço de rua com erros ortográficos"); } *[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|\bAdriao\b|Africa\b|Ag(enc|êns)ia|\b(Ág|Agu)eda\b|Agrari[ao]|Agricola|\bAguas?|\bAlamo\b|Alcantara|Alfandega|Alvar(es|o)|Amalia|\bAmeli[ao]\b|Americ[ao]s?\b|Amisade|\bAndre\b|\bAngel[ao]\b|\bAnibal|Antonio|Apolonia|Araujo|Arma(ze|sé)(m|ns)|Area|Arqueol(og|ój|oj)ic[oa]|\bArtes(ao|oes)|\bArtistic[oa]|Arvore|Ascen(sao|ção|çao)|\bAsenha\b|As(s?isten[cs]s?|istên[cs]s?i)ia|Astronomico|\bA[sc]is\b|Ass?o(c|ss?)ia(ça|cã|ca)o|Atlantic|Atletico|Auditorio|\bAzemeis|\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|\bBeltr[aâ]o\b|\bBissáu\b|Bonanico|Bonif(ac|as|ás)io|\bBrandao\b|\bBras\b|\bBrazil|Britanic|Cab(leir|elel|el)eir|Cafe\b|Caf(ét[ea]|ata)ria|Cal(c|ss?)ada|C(alva|álv[áa])rio|\bC[àáã]mara|Cambio|Camelia|cami(onaj|no[gj]|nona[gj]|na[gj])em|Camoes|\bCa(mponez|npone[zs])|\bCandid[ao]\b|\bC[aâ]o\b\b|\bCapit(ao|aes|[õo]es)|Ca[cs]s?ador|\bCaza\b|C[ei]miterio|Centenari[ao]|C(e[zs]|éz)ar|\bCha[os]?\b|\bCidadao\b|Ci(enc|[êe]nss?)ia|Cir(ur[gj]|úrj)ica|\bClaudi[ao]|Clerigo|Clinica|Col(e[gj]|éj)io|Combustive(l|is)|Com(er[cs]|érs)io|\bCojo\b|Comdominio|Com(monit[áa]|unita)ri[ao]|Concei(ca|ça|cã)o|\bC[oô]nego\b|Con([cs]s?ervato|cervató)ri|Coperativa|Crist([oôó]va|[oô]vã)o|\bCrus\b|Con(c|ss?)ervatori[oa]|\bDalia\b|\bDami?ao\b|Dan(c|ss?)a\b|Dentari|Dep(oss?|óz|oz)ito|Diagnostico|Diario|Di(até|ete)tica|\bDili\b|Dion(is|iz|íz)io|Dire(cã|ça|ca)o|\bE(c|ss?)ca\b|Edif(i[cçs]s?|íç|íss?)icio|Educa(ca|ça|cã)o|Elec?tric[ao]s?|Elec?trodomestic|\bElisi[ao]\b|\b([ÈÉ]m[íi]|Emi)di[ao]\b|\bEmili[ao]\b|Encarna(ca|ça|cã)o|Escadori|Escoteiro|Espirit[ao]|Expli([çc][õo]es|ca(cõ|ço|co)es|ca(ça|cã)o)|Esta(ca|ça|cã)o|\bEstadio|Estasiona|Estatua|\bEstefani[ao]|Esternato|Estetica|Estradao|Est[êée]vao|Estufador|\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|\bFont[ae]rio|Fortalesa|Fotebol\b|\bFotografo|Fran(ce|sê|se)s\b|Fruticula|Funeraria|Gale\b|Garces|\bGa(rret|rett?)\b|\bGaviao\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|Hipico|\bHor(áss?|ac)io|Horten[cs]ia|Horticula|Iberic[ao]|Imobiliaria|\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|Inspec?ç?(a|oes)|\bIrmao?s?\b|\bJeova\b|Jeronimo|\bJiesta|\bJoao\b|Joelheria|\bJoias?\b|J[oó]se\b|Judi(cia|ss?i[áa])ria|\bJuliao\b|\bJusti(c|ss?)a|\bJulia?o\b|\bJuridic|Laboratorio|L(ás|az|as)aro|Leao|Leitao|\bLinguas?\b|\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|\bMedic[oa]\b|Mi(ss?iona|cion[áa])ri|M[ei][sz](erir?co|irec[oó])rd[ie](o[sz])?a|\bMoises\b|Mortuaria|Moveis|\bM(o[zs]|uz)eu\b|M[uo]([sz]e[uo]lój|ze[uo]ló[gj])ic|Muni((c|ss?)i|ss?í)pio|Musica\b|\bNautic|\bNa(zare|sar[ée])|Negocio|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|O(ceanic[ao]\b|[çs]s?eânic)|Panoramic|P(siquia|ciqui[aá])tric[oa]|Politecnic|Porfirio|Portugue[sz]\b|Profi[cs]ional|\bProgre[sç]o|\bPublic(o|a)\b|P[ou]rifica(ca|ça|cã)o|Quiteria|\bRadio\b|\bRaínha\b|\bRaúl\b|Ress?into|\bR[eu]tunda\b|\bRe(gia|jiã|gi|ji)o\b|Rejimento|Remedio|Repara(cões|çoes|coes|çao|cao|cão)|R[ée]publica\b|R(épu|epú|épú)blican[ao]|Retro(za|[zs]e)ria|Re([zs]ide|zidê)n[cs]ias?\b|Rezid[êe]ncial|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]|\bRo([gj]e|jé)rio|Romanic[ao]|Romao|\bRo(sa|za|zá)[rl]i[oa]|Ruina|\bSa\b|Salao|\bSanitari|Sant(are|er[ée])m|Sant(í[sçc]|i[sçc]s?)im[ao]|\bSao\b|\bSaude|\sSe\b|Sebastiao|Seculo|Secundari[ao]|(Semina|Cemin[áa])rio|Senior|Ser(racao|raçao|racão|ação)|Sepulveda|Servi(c|ss?)o|S(erg|érji)io|Sidonio|\bSilverio|Sim(ao|oes)|Su(e(c|ss?)ia|éss?)ia|Su(íss?|iç|iss?)a|Su[çs]s?e(ss?|ç)o|\bT(ang|[âa]nj)er\b|Tape([çc]e|[cs]s?a)ria|Taxis?|Tecnico|Tecnol(ój|o[gj])ico|\bTenis\b|Tertulia|Teofilo|Teotonio|Textil|\bTilia|\bTomas\b|\bTome\b|\bTr(a[sz]|áz)\b|\bTr?ave[sç]a\b|\bTrese\b|\bTúlipa|\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|\bValeri[ao]\b|\bVen(an[cs]s?|[âa]nss?)i[ao]|\bV(ide|[íi]di)o\b|\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"); } /* casos de marcas complicadas em que o melhor é indicar o nome correto na mensagem */ *[name =~ /[Dd]ecat?[hl]?on/] { throwWarning: tr("PT2-Correto é Decathlon"); } *[name =~ /Ma?c(\s[Dd]onald('|\s)?|[Dd]onald\s?)s/] { throwWarning: tr("PT2-Correto é McDonalds-com apóstrofo antes do s"); } *[name =~ /\b[Ll]evi[ ´]?s\b/] { throwWarning: tr("PT2-Correto é Levis-com apóstrofo antes do s"); } *[name =~ /Pingo(D|d| d)oce/] { throwWarning: tr("PT2-Correto é Pingo Doce"); } *[name =~ /\b(ELeclerc|E.Lecler[kq])/] { throwWarning: tr("PT2-Correto é E.Leclerc"); } *[name =~ /Intermarche/] { throwWarning: tr("PT2-Correto é Intermarché"); } *[name =~ /Deca(tlo[mn]|th?lom)/] { throwWarning: tr("PT2-Correto é Decathlon"); } *[name =~ /(mini(\s|-)?preço|Mini(\s|-)preço|Mini(\s|-)?Preço|MINI(\s|-)?PREÇO)/] { throwWarning: tr("PT2-Correto é Minipreço"); } *[name =~ /(^Phone House|[FP]one Hou[zs]e)/] { throwWarning: tr("PT2-Correto é The Phone House"); } *[name =~ /Banco Português de Investimento/][!short_name]{ throwWarning: tr("PT2-Falta a etiqueta short_name=BPI"); fixAdd: "short_name=BPI"; } *[name =~ /Caixa Geral de Depósitos/][!short_name]{ throwWarning: tr("PT2-Falta a etiqueta short_name=CGD"); fixAdd: "short_name=CGD"; } *[name =~ /Banco Espírito Santo/][!short_name]{ throwWarning: tr("PT2-Falta a etiqueta short_name=BES"); fixAdd: "short_name=BES"; } *[name =~ /Banco Comercial Português/][!short_name]{ throwWarning: tr("PT2-Falta a etiqueta short_name=BCP"); fixAdd: "short_name=BCP"; } *[name =~ /Guarda Nacional Republicana/][!short_name]{ throwWarning: tr("PT2-Falta a etiqueta short_name=GNR"); fixAdd: "short_name=GNR"; } *[name =~ /Polícia de Segurança Pública/][!short_name]{ throwWarning: tr("PT2-Falta a etiqueta short_name=PSP"); fixAdd: "short_name=PSP"; } *[shop=books][name =~ /^(?i)\bBiblioteca\b/] { throwWarning: tr("PT2-Biblioteca com etiqueta de livraria"); suggestAlternative: "amenity=library"; } *[amenity=library][name =~ /^(?i)\bLivraria\b/] { throwWarning: tr("PT2-Livraria com etiqueta de biblioteca"); suggestAlternative: "shop=books"; } *[!office][name =~ /^(?i)Associação/] { throwWarning: tr("PT2-Associação sem etiqueta office=association"); fixAdd: "office=association"; } way[railway = rail][lanes][!tracks] { throwWarning: tr("PT2- railway não deve ter lanes mas sim tracks"); fixChangeKey: "lanes => tracks"; } *[amenity=grave_yard] { throwWarning: tr("PT2-Verificar: é muito raro sepulturas fora de cemitérios, usar cemetery"); } *[place][place != village][name =~ /^Freguesia\b/] { throwWarning: tr("PT2-A etiqueta de uma freguesia deve ser village"); fixAdd: "place=village"; } way[highway !~ /^(primary|trunk)/][name =~ /^(?i)(Estrada Nacional|EN)\s/], way[highway !~ /^(primary|trunk)/][ref =~ /^(?i)(E\.?)?N(\.|\s)?[0-9]{1,3}$/] { throwWarning: tr("PT2-Verificar: Estradas nacionais devem ser primárias/VR/IP/IC"); fixAdd: "highway=primary"; } way[highway !~ /^secondary/][name =~ /^(?i)(Estrada Regional|ER)\s/], way[highway !~ /^secondary/][ref =~ /^(?i)(E\.?)?R(\.|\s)?[0-9]{1,4}$/] { throwWarning: tr("PT2-Verificar: Estradas regionais devem ser secundárias"); fixAdd: "highway=secondary"; } way[highway !~ /^tertiary/][name =~ /^(?i)((Estrada|Caminho) Municipal|EM|CM)\s/], way[highway !~ /^tertiary/][ref =~ /^(?i)([EC]\.?)?M(\.|\s)?[0-9]{1,4}$/] { throwWarning: tr("PT2-Verificar: Estradas municipais devem ser terciárias"); fixAdd: "highway=tertiary"; } *[highway=mini_roundabout] { throwWarning: tr("PT2-Verificar: mini-rotundas são raras, será 1 rotunda?"); } node[junction=roundabout] { throwWarning: tr("PT2-Rotunda num nó, é melhor num círculo"); } node[amenity = place_of_worship] ∈ *[building] { throwWarning: tr("PT2- local de oração num nó, sobre 1 edifício"); } node[amenity = place_of_worship] { throwWarning: tr("PT2- local de oração num nó, é melhor um edifício"); } *[amenity != recycling][name =~ /(?i)\b(ecoponto|vidrão|pilhão)\b/] { throwWarning: tr("PT2- ecoponto no nome mas sem etiqueta de ecoponto"); } *[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|Ruela|Terreiro|Transversal|Travessa|Viela) dos (Bombeiros|Quartel dos B|\bBatalhão|Sapadores)\b/][!highway=bus_stop]{ throwWarning: tr("PT2-Bombeiros no nome mas sem etiqueta"); } *[phone][phone !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/], *["contact:phone"]["contact:phone" !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/], *[fax][fax !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/], *["contact:fax"]["contact:fax" !~ /^\+351 [0-9]{3} [0-9]{3}[0-9]{3}((;\s?\+351 [0-9]{3} [0-9]{3}[0-9]{3})?)+$/] { throwWarning: tr("PT2-Verificar:número de telefone/fax diferente de +351 NNN NNNNNN"); } *["addr:street"][name =~ /[0-9]{3,}$/] { throwWarning: tr("PT2-Nome de rua c/números telf./cód.postal"); } way[highway][ref][ref =~ /^EN [0-9]?[4-9][0-9][0-9]/] { throwWarning: tr("PT2-Estradas Nacionais só existem de 1 a 398"); } way[highway][ref][ref =~ /^ER [0-9]?[4-9][0-9][0-9]/] { throwWarning: tr("PT2-Estradas Regionais só existem de 1 a 396"); } way[highway][ref][ref =~ /^IP [0-9][0-9]/] { throwWarning: tr("PT2-Intenerários Principais só existem de 1 a 9"); } way[highway][ref][ref =~ /^IC [0-9]?[4-9][0-9]/] { throwWarning: tr("PT2-Intenerários Complementares só existem de 1 a 37"); } /* 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"; fixAdd: "highway=residential"; } *[highway=bridleway] { throwWarning: tr("PT2- bridleway não se aplica em Portugal, use highway=path"); fixAdd: "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"); } *[railway=monorail] { throwWarning: tr("PT2-Não existem monocarris em Portugal, será carris?"); } *[wikipedia][wikipedia !~ /^pt:/] { throwWarning: tr("PT2-Usar prefixo em português (pt:) em {0}", "{0.key}"); } /* nomes com valores que provavelmente deveriam estar em alt_name, short_name, etc */ *[name =~ /.*\(.*\).*/][!bus_stop] { throwWarning: tr("PT2-Nome com parênteses", "{0.key}"); suggestAlternative: "alt_name"; suggestAlternative: "short_name"; suggestAlternative: "description"; suggestAlternative: "note"; } *[name =~ /.* - .*/] { throwWarning: tr("PT2-Nome com traço", "{0.key}"); suggestAlternative: "alt_name"; suggestAlternative: "short_name"; suggestAlternative: "description"; } *[name =~ /.*, .*/][name !~ /.*, (Lda|S\.A)\./] { throwWarning: tr("PT2-Nome com vírgula", "{0.key}"); suggestAlternative: "alt_name"; suggestAlternative: "short_name"; suggestAlternative: "description"; suggestAlternative: "note"; } *[name =~ /.*,\s?(C\.?R\.?L|E\.?P|I\.P|Lda|S\.A|Unip)\.?/] { throwWarning: tr("PT2-Nome com designação da empresa", "{0.key}"); } *[name =~ /.*: .*/] { throwWarning: tr("PT2-Nome 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" =~ /.*,.*/] { throwWarning: tr("PT2-Usar ; para separar valores em {0}", "{0.key}"); } /* nome e referências iguais */ *[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][!railway][route != road][type !~ /route|street/][name][name =~ /^(?i)(Auto-?estrada|Avenida|Beco|Cais|Calçad(inh)?a|Caminho|Ciclovia|Escad(a|inha|aria)s?|Estrada\s?(Nacional|Regional|Municipal)?|Itinerário\s? (Complementar|Principal)?|Passeio|Rampa|Rotunda|Rua|Ruela|Transversal|Travessa|Trilho|Túnel|Variante|Via(-|\s)Rápida|Viadutos?|Viela) .*/][name !~ /^(?i)estrada de ferro/][route != ferry] { throwWarning: tr("PT2-Verificar: com nome de via mas sem etiqueta de {0}", "{0.key}"); } *[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|Rampa|Rotunda|Rua|Ruela|Transversal|Travessa|Terreiro|Trilho|Túnel|Variante|Vereda|Via(-Rápida)?|Viadutos?|Viela)( (de acesso|sem nome|projetad(a|o)|em construção))?$/] { throwWarning: tr("PT2-Via com nome incompleto"); } *[highway=service][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|Rampa|Rotunda|Rua|Ruela|Transversal|Travessa|Terreiro|Trilho|Túnel|Variante|Vereda|Via(-Rápida)?|Viadutos?|Viela)( (de acesso|sem nome|projetad(a|o)|em construção))?$/] { throwWarning: tr("PT2-Via pública erradamente de serviço"); } /* endereços com nome de via errado */ *["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|Rampa|Rotunda|Rua|Ruela|Terreiro|Transversal|Travessa|Urbanização|Variante|Vereda|Via|Viela) .*/] { throwWarning: tr("PT2- {0} sem nome de via, errado, abreviado ou maiúsculas no endereço", "{0.key}"); } /* nome de vias sem logradouro correto */ *[highway=cycleway][name][name !~ /^(?i)(ciclovia|ecopista) .*/], *[highway][highway !~ /bridleway|bus_stop|cycleway|crossing|footway|give_way|motorway_junction|path|raceway|speed_camera|steps|stop/][name][name !~ /^(Auto-?(E|e)strada|Alameda|Avenida|Beco|Calçad(inh)?a|Caminho|Circular|Escad(a|inha|aria)s?|Estrada|Itinerário|Ladeira|Largo|Loteamento|Pátio|Passeio|Ponte|Pra(ç|cet)a|Rotunda|Rua|Rampa|Ruela|Terreiro|Transversal|Travessa|Túnel|Variante|Vereda|Via(-Rápida)?|Viaduto|Viela) .*/] { throwWarning: tr("PT2- {0} sem nome de via, errado, abreviado ou maiúsculas no nome", "{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 via", "{0.key}", "{0.value}"); } way[highway][type = route] { throwWarning: tr("PT2- {0} não deve possuir {1}", "{0.key}", "{1.tag}"); } relation[type = route][highway] { throwWarning: tr("PT2-Relação não deve possuir {0}", "{1.key}"); } /* 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}"; } *[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(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/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=university"; fixAdd: "amenity=university"; } *[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|Escola de Condução)\b/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=school"; fixAdd: "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"; fixAdd: "amenity=college"; } *[amenity =~ /^(university|school|college|driving_school)$/][name =~ /^(?i)\b(creche|jardim infantil|jardim de infância|infantário|externato|pré-primária)\b/] { throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); suggestAlternative: "amenity=kindergarten"; fixAdd: "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)\bHelipo[rn]to?\b/][aeroway != helipad], *[name =~ /^(?i)Sub-?estação .*/][power != substation], *[name =~ /^(?i)(Centro|Pavilhão|Parque) de Exposições/][amenity != exhibition_centre], *[name =~ /^(?i)(Centro|Pavilhão|Parque) de (Convenções|Congressos)/][amenity != convention_centre], *[name =~ /^(?i)(Centro|Pavilhão) Comunitário/][amenity != community_centre], *[name =~ /^(?i)(Hospital|Centro Hospitalar|Centro (de )?Saúde) .*/][building != hospital], *[name =~ /^(?i)(Universidade|Faculdade) .*/][building != university], *[name =~ /^(?i)(Escola|Conservatório) .*/][building != school], *[name =~ /^(?i)(Aparthotel|Hotel|Residencial|Pensão) .*/][building != hotel], *[name =~ /(?i)\bMotel\b/][tourism != motel], *[name =~ /(?i)(Restaurante?|Petis(cos|queira|\bTasc[ao]\b))/][amenity != restaurant], *[name =~ /(?i)\bMuseu?\b/][tourism != museum], *[name =~ /(?i)\bBiblioteca?\b/][amenity != library], *[name =~ /(?i)\bPadandaria\b/][shop != bakery], *[name =~ /(?i)\bTalho\b/][shop != butcher], *[name =~ /(?i)\bSapataria\b/][shop != shoes], *[name =~ /(?i)\b(Joalh[ae]ria|Ourives|Pandora)\b/][shop != jewelry], *[name =~ /(?i)\b(Cabeleireir[ao]|Barbe(iro|aria))\b/][shop != hairdresser], *[name =~ /(?i)\bCentro de Cópias\b/][shop != copyshop], *[name =~ /(?i)\bPeixaria\b/][shop != seafood], *[name =~ /(?i)\bLoja de Tecidos\b/][shop != fabric], *[name =~ /(?i)\bInformática\b/][shop != computer], *[name =~ /(?i)\b(Salão de Beleza|Nails|Manicure|Pedicure)\b/][shop != beauty], *[name =~ /(?i)\b(Body Shop|Boticário)\b/][shop != cosmetics], *[name =~ /(?i)\bRelógios\b/][shop != watches], *[name =~ /(?i)\b(Decoraç(ão|ões)|Zara Home)\b/][shop != interior_decoration], *[name =~ /(?i)\bArmazém\b/][building != warehouse], *[name =~ /(?i)\bFlorista\b/][shop != florist], *[name =~ /(?i)\bViveiros\b/][landuse != plant_nursery], *[name =~ /(?i)\bFloresta\b/][landuse != forest], *[name =~ /(?i)\bAterro\b/][landuse != landfill], *[name =~ /(?i)\bPedreira\b/][landuse != quarry], *[name =~ /(?i)\bSalinas?\b/][landuse != salt_pond], *[name =~ /(?i)\bVinha\b/][landuse != vineyard], *[name =~ /(?i)\b(Lavandaria|5 a sec)\b/][shop != laundry], *[name =~ /^(?i)Tabacaria/][shop != tobacco], *[name =~ /^(?i)Loja de Animais/][shop != pet], *[name =~ /^(?i)(videoclube|clube de video)/][shop != video], *[name =~ /^(?i)intrumentos musicais/][shop != musical_instrument], *[name =~ /^(?i)Galeria de Arte/][shop != art], *[name =~ /^(?i)Artigos Desportivos/][shop != sports], *[name =~ /^(?i)(Loja de Caça|Artigos (de |para )? Caça|\bCaça\b)/][shop != hunting], *[name =~ /^(?i)(Loja de Pesca|Artigos (de |para )? Pesca|\bPesca\b)/][shop != fishing], *[name =~ /(?i)\b(Stande?|Automóveis)\b/][shop != car], *[name =~ /^(?i)Peças (de |para )? Auto/][shop != car_parts], *[name =~ /(?i)Iluminação/][shop != lamps], *[name =~ /^(?i)\bGela(taria|dos)\b/][shop != ice_cream], *[name =~ /^(?i)\b(Tipografia|Gráfica|Serigrafia)\b/][amenity != printer], *[name =~ /^(?i)\bRetrosaria\b/][shop != sewing], *[name =~ /^(?i)(Telemóve(l|is)|The Phone House|Ensitel|Worten Mobile|\bMEO\b|\bNOS\b|Vodafone)/][shop != mobile_phone], *[name =~ /^(?i)\b(Móveis|Moviflor)/][shop != furniture], *[name =~ /^(?i)Antiguidades/][shop != antiques], *[name =~ /^(?i)Materia(is|l) (de |para )? Contrução/][shop != antiques], *[name =~ /^(?i)\bTintas\b/][shop != paint], *[name =~ /^(?i)Material Elétrico/][shop != electrical], *[name =~ /^(?i)Viveiros/][shop != garden_centre], *[name =~ /^(?i)Ferragens/][shop != hardware], *[name =~ /^(?i)Tatuage(m|ns)/][shop != tattoo], *[name =~ /^(?i)Perfum(aria|es)/][shop != perfumery], *[name =~ /^(?i)([ÓO]p?tica|Instituto Óptico|Multiopticas|Optivisão)/][shop != optician], *[name =~ /^(?i)\bEr[óo]tic[oa]/][shop != erotic], *[name =~ /^(?i)(2ª Mão|Segunda Mão|Artigos Usados)/][shop != second_hand], *[name =~ /^(?i)Loja de Tecidos/][shop != fabric], *[name =~ /^(?i)\b(Roupas?|Pronto[- ]a[- ]Vestir)\b/][shop != clothes], *[name =~ /^(?i)\b(Bershka|Cortefiel|Foreva|Gant|Hugo Boss|Lanidor|Mango|Massimo Dutti|Pull and Bear|RockPort|Sacoor|Springfield|Tiffosi|Tommy Hilfiger|United Colors of Benetton|Zara)\b/][shop != clothes], *[name =~ /^(?i)\b(Malas?|Paco Martinez)\b/][shop != bag], *[name =~ /^(?i)\b(Brinquedos|Imaginarium)\b/][shop != toys], *[name =~ /^(?i)(Livraria|Bertrand)/][shop != books], *[name =~ /^(?i)\bB[ée]b[ée]\b/][shop != baby_goods], *[name =~ /^(?i)\bVinhos?\b/][shop != wine], *[name =~ /^(?i)\b(Tapeçaria|Carpete)s?\b/][shop != carpet], *[name =~ /^(?i)(\bFrutas?\b|Frutaria|Legumes)/][shop != greengrocer], *[name =~ /^(?i)Gourmet/][shop != deli], *[name =~ /^(?i)Conveniência/][shop != convenience], *[name =~ /^(?i)(Bebidas|Garrafeira)/][shop != beverages], *[name =~ /^(?i)Pneus/][shop != tyres], *[name =~ /^(?i)Metere?ol[óo][gj]ica/][man_made != monitoring_station], *[name =~ /^(?i)Chamin[ée]/][man_made != chimney], *[name =~ /^(?i)pipeline/][man_made != pipeline], *[name =~ /^(?i)\bSilos?\b/][man_made != silo], *[name =~ /^(?i)Moinhos? (de |a |movido a |d')?[ÁA]gua/][man_made != watermill], *[name =~ /^(?i)Moinhos? (de |a |movido a |d')?Vento/][man_made != windmill], *[name =~ /(?i)\b(E\.?T\.?A\.?R\.?|Estação de Tratamento de Águas Residuais)\b/][man_made != wastewater_plant], *[name =~ /^(?i)Castelo/][historic != castle], *[name =~ /^(?i)\bForte\b/][historic != fort], *[name =~ /^(?i)memorial/][historic != memorial], *[name =~ /^(?i)Mosteiro/][historic != monastery], *[name =~ /^(?i)monumento/][historic != monument], *[name =~ /^(?i)t[úu]mulo/][historic != tomb], *[name =~ /^(?i)alminhas/][historic != wayside_shrine], *[name =~ /^(?i)pelourinho/][historic != pillory], *[name =~ /^(?i)(miradouro|Vista Panorâmica)/][tourism != viewpoint], *[name =~ /^(?i)hostel/][tourism != hostel], *[name =~ /^(?i)parque (de )campismo/][tourism != camp_site], *[name =~ /(?i)((Centro|Escola) de Formação|Seminário)/][amenity != school], *[name =~ /(?i)Seguros/][office != insurance], *[name =~ /(?i)\b(Centro Comercial|Shopp?ing Cent(er|re))\b/][shop != mall], *[name =~ /(?i)\bDroguaria\b/][shop != chemist], *[name =~ /(?i)\b(Represa|Açude)\b/][waterway != weir], *[name =~ /(?i)\b(Queda de Água|Cascata|Catarata)s?\b/][waterway != waterfall], *[name =~ /(?i)\bRio\b/][waterway != river], *[name =~ /(?i)\bRibeir[oa]\b/][waterway != stream], *[name =~ /(?i)\bCanal\b/][waterway != canal], *[name =~ /^(?i)Barragem\b/][waterway != dam], *[name =~ /^(?i)Albufeira\b/][waterway != reservoir], *[name =~ /(?i)\b((Agência de )?Viagens|Top Atlântico)\b/][shop != travel_agency], *[name =~ /(?i)\bBanco\b/][amenity != bank], *[name =~ /(?i)\b((Caixa\s)?ATM|Caixa Multi-?Banco|MB)\b/][amenity != atm], *[name =~ /(?i)\bPapelaria\b/][shop != stationery], *[name =~ /^(?i)(K|Qu)iosque .*/][shop != kiosk], *[name =~ /(?i)\b(Agência\s)?Funerária\b/][shop != funeral_directors], *[name =~ /(?i)\bPraia\b/][natural != beach], *[name =~ /(?i)\b(Clínica Veterinária|Veterinário)\b/][amenity != veterinary], *[name =~ /(?i)\b(Clínica Dentária|Dentista)\b/][amenity != dentist], *[name =~ /(?i)\b(CTT|Correios)\b/][amenity != post_office], *[name =~ /(?i)\bBombeiros\b/][amenity != fire_station], *[name =~ /(?i)\b(Polícia|G\.?N\.?R\.?|P\.?S\.?P\.?)\b/][amenity != police], *[name =~ /(?i)\b(Prisão|Prisional)\b/][amenity != prison], *[name =~ /(?i)\b(Embaixada|Consulado)\b/][amenity != embassy], *[name =~ /(?i)\bTeatro\b/][amenity != theatre], *[name =~ /(?i)\b(Cinema|Lusomundo)\b/][amenity != cinema], *[name =~ /^(?i)Café\b/][amenity != cafe], *[name =~ /^(?i)Parque de Campismo\b/][amenity != camp_site], *[name =~ /(?i)\b(Pousada|hostel)\b/][amenity != hostel], *[name =~ /(?i)\bCemitério\b/][landuse != cemetery], *[name =~ /^(?i)Capela .*/][building != chapel], *[name =~ /^(?i)Igreja .*/][building != church], *[name =~ /^(?i)Catedral .*/][building != cathedral], *[name =~ /^(?i)Mesqita .*/][building != mosque], *[name =~ /^(?i)Sinagoga .*/][building != synagogue], *[name =~ /^(?i)Casa do Povo .*/][building != civic], *[name =~ /^(?i)Sapateiro/][craft != shoemaker], *[name =~ /^(?i)Serração/][craft != sawmill], *[name =~ /^(?i)Carpint(eiro|aria)/][craft != carpenter], *[name =~ /^(?i)Ferreiro/][craft != blacksmith], *[name =~ /^(?i)Eletricista/][craft != electrician], *[name =~ /^(?i)Serralh(eiro|aria)/][craft != metal_construction], *[name =~ /^(?i)(Picheleiro|Canalisador)/][craft != plumber], *[name =~ /^(?i)Pint(or|uras)/][craft != painter], *[name =~ /^(?i)(Alfaiate|Costureira)/][craft != tailor], *[name =~ /^(?i)Catt?ering/][craft != caterer], *[name =~ /^(?i)(Construçáo Naval|(Construtor(es)?|Estaleiros?) Nava(l|is))/][craft != boatbuilder], *[name =~ /^(?i)Espírita/][denomination != spiritist], *[name =~ /^(?i)Adventista/][denomination != seventh_day_adventist], *[name =~ /^(?i)Anglicana/][denomination != anglican], *[name =~ /^(?i)Igreja Bap?tista/][denomination != baptist], *[name =~ /^(?i)Evangélica/][denomination != evangelical], *[name =~ /^(?i)Metodista/][denomination != methodist], *[name =~ /^(?i)M[óo]rmon/][denomination != mormon], *[name =~ /^(?i)Testemunhas de Jeová/][denomination != jehovahs_witness], *[name =~ /^(?i)sucat(a|eiro)/][industrial != auto_wrecker], *[name =~ /^(?i)Discoteca/][amenity != nightclub], *[name =~ /^(?i)\b(W\.?C\.?|Casas?(de )? Banho)\b/][amenity != toilets], *[name =~ /^(?i)\bCoreto\b/][leisure != bandstand], *[name =~ /^(?i)(Centro )?((de )?Inspec?ção|Inspec?tor|Inspec?ção (Periódica )?de Veículos)/][amenity != vehicle_inspection], *[name =~ /^(?i)\b(Elec?trodomésticos|Rádio Popular|Worten|MediaMarkt)/][shop != electronics], *[name =~ /^(?i)\b(Izi Build|\bAki\b)/][shop != doityourself], *[name =~ /^(?i)Staples/][shop != stationery], *[name =~ /(Loja (Social|Solid[áa]ria)|EMA[ÚU]S|\bREMAR\b)/][shop != charity], *[name =~ /^(?i)\b(Corte Ingl[êe]s|FNAC|IKEA)\b/][shop != department_store], *[name =~ /^(?i)\b(Pingo Doce|Minipreço|Continente|\bModelo\b|\bJumbo\b|Carrefour|Pão de Açúcar|E\.Leclerc|Intermarché|Hipermercado|Supermercado|mini[- ]?mercado|Mercearia)\b/][shop != supermarket], *[name =~ /^(?i)\b(Recheio|Makro|António Teixeira Lopes)\b/][shop != wholesale], *[name =~ /^(?i)\b(Decathlon|Sport Zone)\b/][shop != sports] { throwWarning: tr("PT2- provavelmente deveria ser {1}", "{1.key}", "{1.value}"); fixAdd: "{1.key}={1.value}"; } way[highway][!bridge][name =~ /^Ponte/] { throwWarning: tr("PT2-Nome Ponte mas sem etiqueta de ponte"); fixAdd: "bridge=yes"; fixAdd: "layer=1"; } *[name =~ /^(Quebra-mar|Pontão)/][!man_made=breakwater] { throwWarning: tr("PT2-Pontão deve ter etiqueta man_made=breakwater"); fixAdd: "man_made=breakwater"; } *[name =~ /^Igreja Matriz/][building != church], *[name =~ /^Igreja Matriz/][religion != christian], *[name =~ /^Igreja Matriz/][denomination != roman_catholic] { throwWarning: tr("PT2-Igreja Matriz deve ter building=church religion=christian e denomination=roman_catholic"); fixAdd: "building=church"; fixAdd: "religion=christian"; fixAdd: "denomination=roman_catholic"; } *[name =~ /^Capela/][building != chapel], *[name =~ /^Capela/][religion != christian], *[name =~ /^Capela/][denomination != roman_catholic] { throwWarning: tr("PT2-Capela deve ter building=chapel religion=christian e denomination=roman_catholic"); fixAdd: "building=chapel"; fixAdd: "religion=christian"; fixAdd: "denomination=roman_catholic"; } *[shop = yes]{ throwWarning: tr("PT2-Etiqueta shop=yes deve ser mais específica"); } *[name =~ /^(?i)Clínica.*/][amenity != clinic][name !~ /^(?i)Clínica (Veterin|Dent)ária.*/] { throwWarning: tr("PT2-Verificar: Clínicas devem ser amenity=clinic"); } *[name =~ /(?i)Tribunal.*/][name !~ /(?i)(Rua|Avenida|Travessa) d[ao] Tribunal.*/][amenity != courthouse] { throwWarning: tr("PT2-Tribunais devem ter amenity=courthouse"); fixAdd: "amenity=courthouse"; } *[name !~ /Cemitério de /][landuse = cemetery] { throwWarning: tr("PT2-O nome do cemitério deve seguir o padrão Cemitério de X"); } *[name !~ /(Junta de Freguesia de|Câmara Municipal de) /][amenity = townhall] { throwWarning: tr("PT2-O nome deve seguir o padrão Junta de Freguesia de X ou Câmara Municipal de X"); } *[name !~ /Rio /][waterway = river] { throwWarning: tr("PT2-O nome deve seguir o padrão Rio X"); } *[name !~ /Ribeir[ao] /][waterway = stream] { throwWarning: tr("PT2-O nome deve seguir o padrão Ribeira X ou Ribeiro X"); } *[name !~ /Parque Campismo/][amenity = camp_site] { throwWarning: tr("PT2-O nome deve seguir o padrão Parque de Campismo X ou Parque de Campismo de X"); } *[name =~ /(?i)(Centro|Agência) (de )?Emprego.*/][office != employment_agency] { throwWarning: tr("PT2-Centros de Emprego devem ter office=employment_agency"); fixAdd: "office=employment_agency"; } *[name =~ /(?i)Advogado.*/][office != lawyer] { throwWarning: tr("PT2-Advogados devem ter office=lawyer"); fixAdd: "office=lawyer"; } *[name =~ /(?i)Imobiliária.*/][office != estate_agent] { throwWarning: tr("PT2-Imobiliárias devem ter office=estate_agent"); fixAdd: "office=estate_agent"; } *[name =~ /(?i)Contabili(sta|dade).*/][office != accountant] { throwWarning: tr("PT2-Contabilistas e Escritórios de Contabilidade devem ter office=accountant"); fixAdd: "office=accountant"; } *[name =~ /(?i)(Agência (de Publicidade|Publicitária)|Publicidade).*/][office != advertising_agency] { throwWarning: tr("PT2-Agências de Publicidade devem ter office=advertising_agency"); fixAdd: "office=advertising_agency"; } *[name =~ /(?i)(Arquiteto|Escritório de Arquitetura).*/][office != architect] { throwWarning: tr("PT2-Arquitetos e Escritórios de Arquitetura devem ter office=architect"); fixAdd: "office=architect"; } *[name =~ /(?i)^Fundação.*/][office != foundation] { throwWarning: tr("PT2-Fundações devem ter office=foundation"); fixAdd: "office=foundation"; } *[name =~ /(?i)Jornal .*/][office != newspaper] { throwWarning: tr("PT2-Sedes e Filiais de Jornais devem ter office=newspaper"); fixAdd: "office=newspaper"; } *[name =~ /(?i)(Notári(ad)?o|Notarial).*/][lawyer != notary] { throwWarning: tr("PT2-Notários e Notariados devem ter lawyer=notary e office=lawyer"); fixAdd: "office=lawyer"; fixAdd: "lawyer=notary"; } *[name =~ /(?i)Solocitador.*/][lawyer != solicitor] { throwWarning: tr("PT2-Solocitadores devem ter lawyer=solicitor e office=lawyer"); fixAdd: "office=lawyer"; fixAdd: "lawyer=solicitor"; } *[name =~ /(?i)(Partido|PSD|PPD|PEV|PCP|CDS|PCTP|MRPP|POUS|Bloco de Esquerda).*/][office != political_party] { throwWarning: tr("PT2-Sedes e Filiais de Partidos Políticos devem ter office=political_party"); fixAdd: "office=political_party"; } *[name =~ /(?i)(Repartição de )?Finanças.*/][office != tax] { throwWarning: tr("PT2-Finanças devem ter office=tax"); fixAdd: "office=tax"; } *[name =~ /(?i)(Segurança Social|Ministério d(e|as))/][office != government] { throwWarning: tr("PT2-Falta etiqueta office=government"); fixAdd: "office=government"; } *[name =~ /(?i)Assembleia Municipal/][office != administrative] { throwWarning: tr("PT2-Assembleia Municipal deve ter office=administrative"); fixAdd: "office=administrative"; } *[name =~ /(?i)(Agência de )?Viagens.*/][office != travel_agent] { throwWarning: tr("PT2-Agências de Viagens devem ter office=travel_agent"); fixAdd: "office=travel_agent"; } *[name =~ /(?i)Agência de Viagens.*/][office != travel_agent] { throwWarning: tr("PT2-Agências de Viagens devem ter office=travel_agent"); fixAdd: "office=travel_agent"; } *[name =~ /(?i)Câmbio.*/][amenity != bureau_de_change] { throwWarning: tr("PT2-Agências de Câmbio devem ter amenity=bureau_de_change"); fixAdd: "amenity=bureau_de_change"; } *[name =~ /(?i)Canil .*/][amenity != animal_shelter] { throwWarning: tr("PT2-Canis devem ter amenity=animal_shelter"); fixAdd: "amenity=animal_shelter"; } *[name =~ /(?i)Crematório.*/][amenity != crematorium] { throwWarning: tr("PT2-Canis devem ter amenity=crematorium"); fixAdd: "amenity=crematorium"; } *[name =~ /(?i)Cripta.*/][amenity != crypt] { throwWarning: tr("PT2-Criptas devem ter amenity=crypt"); fixAdd: "amenity=crypt"; } *[name =~ /(?i)Ginásio.*/][amenity != gym] { throwWarning: tr("PT2-Ginásios devem ter amenity=gym"); fixAdd: "amenity=gym"; } *[name =~ /(?i)Marco (de |dos )?C(orreio|TT).*/][amenity != post_box] { throwWarning: tr("PT2-Marcos de Correio devem ter amenity=post_box"); fixAdd: "amenity=post_box"; } *[name =~ /(?i)(Telefone Público|Cabine Telefónica).*/][amenity != telephone] { throwWarning: tr("PT2-Marcos de Correio devem ter amenity=telephone"); fixAdd: "amenity=telephone"; } *[name =~ /(?i)Caixote d[oe] Lixo/][amenity != waste_basket] { throwWarning: tr("PT2-Caixotes do Lixo devem ter amenity=waste_basket"); fixAdd: "amenity=waste_basket"; } *[name =~ /(?i)Contentor d[oe] Lixo/][amenity != waste_disposal] { throwWarning: tr("PT2-Contentores do Lixo devem ter amenity=waste_disposal"); fixAdd: "amenity=waste_disposal"; } *[name =~ /(?i)Residências? Universitárias?.*/][building != dormitory] { throwWarning: tr("PT2-Residências Universitárias devem ter building=dormitory"); fixAdd: "building=dormitory"; } *[name =~ /(?i)(Zona Industrial|Parque Empresarial).*/][landuse != industrial] { throwWarning: tr("PT2-Zonas Industriais devem ter landuse=industrial"); fixAdd: "landuse=industrial"; } *[name =~ /(?i)Sanatório.*/][amenity != sanatorium] { throwWarning: tr("PT2-Sanatórios devem ter amenity=sanatorium"); fixAdd: "amenity=sanatorium"; } *[name =~ /(?i)ru[íi]nas?.*/][building != ruins] { throwWarning: tr("PT2-Edifícios em ruínas devem ter building=ruins e se forem locais históricos adicionar historic=ruins"); fixAdd: "building=ruins"; } *[name =~ /(?i)(Take( -)?A( -)?way)/][takeaway != yes] { throwWarning: tr("PT2-Restaurantes Take a Way devem ter takeaway=yes Se forem apenas para take a way adicionar takeaway=only"); fixAdd: "takeaway=yes"; } *[name =~ /(?i)Pizz?a(ria|s)/][cuisine != pizza] { throwWarning: tr("PT2-Pizzarias devem ter cuisine=pizza"); fixAdd: "cuisine=pizza"; fixAdd: "amenity=restaurant"; } *[name =~ /(?i)Churras(caria|queira|co)/][cuisine != barbecue] { throwWarning: tr("PT2-Churrasqueiras devem ter cuisine=barbecue"); fixAdd: "cuisine=barbecue"; fixAdd: "amenity=restaurant"; } *[name =~ /(?i)kebab/][cuisine != kebab] { throwWarning: tr("PT2-Restaurantes kebab devem ter cuisine=kebab"); fixAdd: "cuisine=kebab"; fixAdd: "amenity=restaurant"; } *[name =~ /(?i)\bSopas?\b/][cuisine != soup] { throwWarning: tr("PT2-Restaurantes de sopas devem ter cuisine=soup"); fixAdd: "cuisine=soup"; fixAdd: "amenity=restaurant"; } *[name =~ /(?i)Marisqueira/][cuisine != fish] { throwWarning: tr("PT2-Marisqueiras devem ter cuisine=fish"); fixAdd: "cuisine=fish"; fixAdd: "amenity=restaurant"; } *[name =~ /(?i)\bSandes?\b/][cuisine != sandwich] { throwWarning: tr("PT2-Restaurantes de sandes devem ter cuisine=sandwich"); fixAdd: "cuisine=sandwich"; fixAdd: "amenity=restaurant"; } node[place] < way { throwWarning: tr("PT2-Locais não devem estar ligados a linhas"); } *[name =~ /(?i)(Repara(ção|ções|dor|dores) (de )? Auto(móveis)?)/][shop != car_repair] { throwWarning: tr("PT2-Reparadoes de Automóveis devem ter shop=car_repair"); fixAdd: "shop=car_repair"; } *[name =~ /(?i)Lavagem/][amenity != car_wash] { throwWarning: tr("PT2-Locais de Lavagem de Automóveis devem ter amenity=car_wash"); fixAdd: "amenity=car_wash"; } *[name =~ /(?i)Park Meter/][amenity != vending_machine] { throwWarning: tr("PT2-Máquinas de venda de parque de estacionamento devem ter amenity=vending_machine e vending=parking_tickets"); fixAdd: "amenity=vending_machine"; fixAdd: "vending=parking_tickets"; } *[name =~ /(?i)\b(ZON|MEO|Cabovisão)\b/][office != telecommunication] { throwWarning: tr("PT2-Verificar: se for loja de telecomunicações dever ter office=telecommunication e function=retail"); fixAdd: "office=telecommunication"; fixAdd: "function=retail"; } *[name =~ /(?i)\b(Açoreana|Aegon|Allianz|AXA|Bonança|Fidelidade|Generali|Groupama|Liberty|Mapfre|Médis|Multicare|Tranquilidade|Zurich)\b/][office != insurance] { throwWarning: tr("PT2-Seguradoras e Mediadores de Seguros devem ter office=insurance"); fixAdd: "office=insurance"; } *[name =~ /^(?i)(Cabine|Posto de Transformador) ((da )? EDP).*/][building != transformer_tower], *[name =~ /^(?i)(Cabine|Posto de Transformador) ((da )? EDP).*/][power != substation], *[name =~ /^(?i)(Cabine|Posto de Transformador) ((da )? EDP).*/][substation != minor_distribution], *[building = transformer_tower][power != substation], *[building = transformer_tower][substation != minor_distribution] { throwWarning: tr("PT2-Cabines da EDP devem ter building=transformer_tower power=substation e substation=minor_distribution"); fixAdd: "building=transformer_tower"; fixAdd: "power=substation"; fixAdd: "substation=minor_distribution"; } *[name =~ /^(?i)Estação (de Comboios|Ferroviária|(da)? CP|(dos )?Caminhos de Ferro) .*/][building != train_station], *[name =~ /^(?i)Estação (de Comboios|Ferroviária|(da)? CP|(dos )?Caminhos de Ferro) .*/][public_transport != station] { throwWarning: tr("PT2-Estação de Comboios sem building=train_station ou public_transport=station"); fixAdd: "building=train_station"; fixAdd: "public_transport=station"; } *[name =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/], *[description =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/], *[note =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/], *[designation =~ /(?i)((Encerr|Fech)(ou|ado)|Desocupad[ao])/] { throwWarning: tr("PT2-Estabelecimentos encerrados devem ter disused:shop=yes ou disused:amenity=bar..."); } *[name =~ /(?i)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/], *[description =~ /(?i)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/], *[note =~ /(?i)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/], *[designation =~ /(?i)(Abandon(ad[ao]|o)|Degrada(d[ao]|ção))/] { throwWarning: tr("PT2-Edifícios degradados devem ter abandoned:building=yes ou abandoned:shop=yes..."); } *[name =~ /(?i)((Equipamentos?|Materia(is|l)) Hospitalar|instrumentos médicos)/][shop != medical_supply], *[description =~ /(?i)((Equipamentos?|Materia(is|l)) Hospitalar|instrumentos médicos)/][shop != medical_supply], *[note =~ /(?i)((Equipamentos?|Materia(is|l)) Hospitalar|instrumentos médicos)/][shop != medical_supply], *[designation =~ /(?i)((Equipamentos?|Materia(is|l)) Hospitalar|instrumentos médicos)/][shop != medical_supply] { throwWarning: tr("PT2-Edifícios degradados devem ter abandoned:building=yes ou abandoned:shop=yes..."); fixAdd: "shop=medical_supply"; } *[name =~ /(?i)Noiv[ao]s/][shop = clothes][!clothes] { throwWarning: tr("PT2-Lojas de roupa para noivas devem ter clothes=wedding"); fixAdd: "clothes=wedding"; } *[name =~ /(?i)\b(Zara Kids|Lanidor J[úu]nior|Roupa (de )?Criança)\b/][shop = clothes][!clothes] { throwWarning: tr("PT2-Lojas de roupa para crianças devem ter clothes=children"); fixAdd: "clothes=children"; } *[name =~ /(?i)\b(Salsa|Levi's|Levi Strauss|Pepe Jeans|Lee)\b/][shop = clothes][!clothes] { throwWarning: tr("PT2-Lojas de jeans devem ter clothes=denim"); fixAdd: "clothes=denim"; } *[name =~ /(?i)\b(lingerie|women'secret|Calzedonia|Intimissimi)?\b/][shop = clothes][!clothes] { throwWarning: tr("PT2-Lojas de roupa interior,meias... devem ter clothes=underwear"); fixAdd: "clothes=underwear"; } *["addr:country"]["addr:country" !~ /^PT$/] { throwWarning: tr("PT2-O país na morada deve ter o código PT"); fixAdd: "addr:country=PT"; } *[leisure][name =~ /^(?i)(campo|est(á|a)dio) (de (futebol|desportos?)|desportivo)?$/], *[leisure][name =~ /^(?i)(estádio|(Pavilhão )?)Gimnodesportivo$/] { throwWarning: tr("PT2-Nome supérfluo/incompleto de local de lazer"); } /* 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]*$/] { throwWarning: tr("PT2-Verificar:Nome com letras apenas em maiúsculo", "{0.key}"); suggestAlternative: "short_name"; } /* Erro comum como Rua do CRuzeiro */ *[name =~ /(.*)?[A-Z]{2}[a-z].*/], *["addr:street" =~ /(.*)?[A-Z]{2,}[a-z].*/] { throwWarning: tr("PT2-Verificar: nome ou endereço com 2 letras seguidas em maiúsculo"); } /* lugar possui nome que inicia com "Edifício" mas não possui etiqueta building */ *[name =~ /^(?i)edifício.*/][!building][name !~ /^(?i)\bEdifício Transparente\b/] { throwWarning: tr("PT2-Possível ausência de etiqueta {0}", "{1.key}"); fixAdd: "building=yes"; } *["addr:postcode"]["addr:postcode" !~ /^[0-9]{4}(-[0-9]{3})?$/], *[postal_code][postal_code !~ /^[0-9]{4}(-[0-9]{3})?$/] { throwWarning: tr("PT2-Código postal em formato diferente de NNNN-NNN ou NNNN"); } *[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"; } 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-se usar apenas em linhas", "{0.key}"); } /* landuse não deve ter layer */ *[landuse][layer] { throwWarning: tr("PT2-Verificar: {0} não deve ter {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-Usar {0} apenas em {1}={2}", "{1.key}", "{0.key}", "{0.value}"); } /* número de saída de rodovia */ *[highway=motorway_junction][ref][ref !~ /^[0-9]+( |-)*([A-Z])?$/] { throwWarning: tr("PT2-Saída de via ({0}) fora do padrão", "{1.key}"); } *[alt_ref] { throwWarning: tr("PT2-O conteúdo de {0} deve fazer parte de ref, separado por ;", "{0.key}"); suggestAlternative: "ref"; } *[name =~ /^(?i)pra(ç|cet)a .*/][!leisure][landuse = grass] { throwWarning: tr("PT2-Possível definição errada de praça: {0}", "{2.tag}"); suggestAlternative: "leisure=park"; } *[highway][highway !~ /construction|give_way|motorway_junction|proposed|raceway|speed_camera|stop/][!wheelchair], *[building][!wheelchair] { throwOther: tr("PT2- {0} sem etiqueta de acessibilidade ({1})", "{0.key}", "{1.key}"); } *[route = ferry][!duration] { throwWarning: tr("PT2-Ausência do tempo de duração ({0}) da balsa", "{1.key}"); } *[highway = service][!service] { throwOther: tr("PT2-Ausência do tipo de serviço ({0}) na {1}", "{1.key}", "{0.key}"); } *[highway = track][!tracktype] { throwOther: tr("PT2-Ausência do tipo de track ({0}) na {1}", "{1.key}", "{0.key}"); } /* número de faixas apenas para rodovias maiores e links */ way[highway =~ /motorway|trunk|primary|secondary|tertiary/][!lanes], way[highway $= _link][!lanes] { throwOther: tr("PT2- {0} sem número de faixas ({1}) definido", "{0.key}", "{1.key}"); } way[highway][!surface][highway != bus_stop] { throwOther: tr("PT2- {0} sem superfície ({1}) definida", "{0.key}", "{1.key}"); } way[highway = motorway_junction] { throwError: tr("PT2- {0} deve ser utilizado apenas no nó de saída da via", "{0.tag}"); suggestAlternative: "highway=motorway_link"; } /* layer não faz sentido em outros objetos */ *[layer][!building][!highway][man_made!=pipeline][!tunnel][!railway][!waterway] { throwWarning: tr("PT2-Verificar: possível uso incorreto de {0} no objeto", "{0.key}"); } /* https://github.com/OSMBrasil/validador-josm/issues/54 */ /* requer JOSM ≥ 7761 */ *[tourism = motel][amenity != love_hotel], *[name =~ /(?i)\bmotel\b/][amenity != love_hotel] { throwWarning: tr("PT2-Ausência de etiqueta ''{0}''", "{1.value}"); fixAdd: "{1.key}={1.value}"; } *[amenity = love_hotel][tourism][tourism != motel] { throwWarning: tr("PT2-Verificar: provavelmente deve ser ''{0}={1}''", "{2.key}", "{2.value}"); } /* é bom especificar o tipo de torre */ node[man_made = tower][!"tower:type"] { throwOther: tr("PT2-Ausência do tipo de torre ({0})", "{1.key}"); } *["building:levels"][!building][!"amenity:parking"] { throwWarning: tr("PT2- {0} sem etiqueta {1}", "{0.key}", "{1.key}"); } *["building:levels" < 1] { throwWarning: tr("PT2-Verificar: {0} com valor inválido", "{0.key}"); } /* deve-se utilizar short_name, name ou official_name ao invés de long_name */ *[long_name] { throwWarning: tr("PT2-Chave inválida: {0}", "{0.key}"); suggestAlternative: "highway=name"; suggestAlternative: "highway=short_name"; suggestAlternative: "highway=official_name"; } /* landuse deve conter algum valor que não seja yes */ *[landuse?] { throwWarning: tr("PT2-Especificar valor correto para {0} em vez de ''{1}''", "{0.key}", tag("landuse")); } /* vários valores para source devem estar na mesma chave, separados por ';' */ *[alt_source][source] { throwWarning: tr("PT2- {0} deve estar incluído em {1}, separado por '';'' caso necessário", "{0.key}", "{1.key}"); } *[access = permissive] { throwWarning: tr("PT2-Verificar: {0} usar só em vias privadas com permissão de acesso e não vias públicas", "{0.tag}"); } *[aeroway][designation =~ /^[A-Z]{4}$/][!icao], *[aeroway][ref =~ /^[A-Z]{4}$/][!icao] { throwWarning: tr("PT2- {0} provavelmente deve ser utilizado como {1}", "{1.key}", "{2.key}"); fixChangeKey: "{1.key} => {2.key}"; } *[crossing][!highway][!railway] { throwWarning: tr("PT2- {0} deve ser utilizado com {1}={0} ou {2}={0}", "{0.key}", "{1.key}", "{2.key}"); } node[highway=speed_camera][!maxspeed], relation[enforcement=maxspeed][!maxspeed], relation[enforcement=maxheight][!maxheight], relation[enforcement=maxweight][!maxweight] { throwWarning: tr("PT2-Adicionar {0} ao {1}", "{1.key}", "{0.tag}"); } node[highway =~ /^(give_way|mini_roundabout|stop|turning_circle)$/][name] { throwWarning: tr("PT2-Objeto não deve possuir {0}", "{1.key}"); } way[highway = give_way], way[highway = mini_roundabout], way[highway = stop], way[highway = turning_circle], relation[highway = give_way], relation[highway = mini_roundabout], relation[highway = stop], relation[highway = turning_circle] { throwWarning: tr("PT2- {0} deve ser utilizado apenas em nós", "{0.tag}"); } /* torres de energia, lombas, câmaras, semáforos etc que não estão ligados a numa via */ node:unconnected[power = pole], node:unconnected[power = tower], node:unconnected[highway = speed_camera] { throwWarning: tr("PT2- {0} deve fazer parte de uma linha e não isolado", "{1.tag}"); } *[iata = "0"] { throwWarning: tr("{0} com valor = {1}", "{0.key}", "{0.value}"); } /* saídas de estradas devem ter nome e/ou referência */ node[highway = motorway_junction][!name][!ref] { throwWarning: tr("PT2- {0} sem pelo menos uma das etiquetas: {1} ou {2}", "{0.value}", "{1.key}", "{2.key}"); } /* 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")); } node[noname?] { throwWarning: tr("PT2-Verificar: uso suspeito de {0} num nó", "{0.key}"); } /* source estranhamente igual o name */ *[source = *name] { throwWarning: tr("PT2-Verificar: {0} e {1} são iguais", "{0.key}", "{0.value}"); } *[name =~ /(?i)(Junta (de )?Freguesia|Câmara Municipal).*/][name !~ /(?i)(Rua|Avenida|Travessa) da (Junta de Freguesia|Câmara Municipal).*/][amenity != townhall] { throwWarning: tr("PT2-Juntas de Freguesia e Câmaras Municipais devem ser amenity=townhall"); fixAdd: "amenity=townhall"; } /* AVISOS INFORMATIVOS */ /* é ú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][!population], *[place = town][!population], *[place = village][!population] { throwOther: tr("PT2- {0} sem etiqueta de população", "{0.value}"); } *[place][place !~ /hamlet|island|isolated_dwelling|neighbourhood|suburb|village/][population < 10000] { throwOther: tr("PT2-Verificar: local com <10.000 hab. deve ser village, EXCEPTO sedes de freguesia!"); fixAdd: "place=village"; } *[place =~ /city|hamlet|isolated_dwelling|village/][population >= 10000][population < 100000] { throwOther: tr("PT2-Verificar: local com 10.000-100.000 hab. deve ser town, EXCEPTO sedes de concelho!"); fixAdd: "place=town"; } *[place =~ /hamlet|isolated_dwelling|town|village/][population >= 100000] { throwOther: tr("PT2-Verificar: local com +100.000 hab. deve ser city, EXCEPTO capitais de distrito!"); fixAdd: "place=city"; }
Rules_Portuguese-Errors-PT2.validator.mapcss, Rules_Portuguese-Errors-PT2.zip
Note:
See TracWiki
for help on using the wiki.