Changes between Version 4 and Version 5 of Rules/Portuguese-Errors-PT2
- Timestamp:
- 2015-03-05T20:55:47+01:00 (12 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Rules/Portuguese-Errors-PT2
v4 v5 3 3 {{{ 4 4 #!rule 5 5 6 6 7 meta … … 27 28 throwWarning: tr("PT2-Dois espaços em branco"); 28 29 } 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)/] { 30 31 throwWarning: tr("PT2-Nome errado, sem nome..."); 31 32 } … … 33 34 throwWarning: tr("PT2-O correto é -os-"); 34 35 } 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)/] { 36 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)/] { 36 37 throwWarning: tr("PT2-Palavras por traduzir ou mudar a etiqueta"); 37 38 } 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)(\.| )/] { 39 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)(\.| )/] { 39 40 throwWarning: tr("PT2-Nome de estrada ou caminho abreviado"); 40 41 } 41 *[name =~ /(Ass|C(\.\s?|\s)?C|Av\.?ª?|B(\.\s?|\s)?E(\.\s?|\s)?S|\b D|\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/] {{ 42 43 throwWarning: tr("PT2-Nome abreviado"); 43 44 } … … 48 49 throwWarning: tr("PT2-Acentuação isolada entre espaços"); 49 50 } 50 *[name =~ /(?i).*(\bá\s|hà|\bAb ilio|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).*/] { 51 52 throwWarning: tr("PT2-Verificar:Nome com erros ortográficos"); 52 53 } … … 72 73 way[highway !~ /^(primary|trunk)/][name =~ /^(?i)(Estrada Nacional|EN)\s/], 73 74 way[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"); 75 76 fixAdd: "highway=primary"; 76 77 } 77 78 way[highway !~ /^secondary/][name =~ /^(?i)(Estrada Regional|ER)\s/], 78 79 way[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"); 80 81 fixAdd: "highway=secondary"; 81 82 } 82 83 way[highway !~ /^tertiary/][name =~ /^(?i)((Estrada|Caminho) Municipal|EM|CM)\s/], 83 84 way[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"); 85 86 fixAdd: "highway=tertiary"; 86 87 } … … 91 92 throwWarning: tr("PT2-Rotunda num nó, é melhor num círculo"); 92 93 } 94 node[amenity = place_of_worship] ∈ *[building] { 95 throwWarning: tr("PT2- local de oração num nó, sobre 1 edifício"); 96 } 97 node[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 */ 107 node:connection[amenity = recycling], 108 node: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 */ 112 node[shop] ∈ way , 113 node[amenity = recycling] ∈ way , 114 node[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 93 120 94 121 … … 115 142 throwWarning: tr("PT2- leisure=common não se aplica em Portugal"); 116 143 } 144 *[railway=monorail] { 145 throwWarning: tr("PT2-Não existem monocarris em Portugal, será carris?"); 146 } 117 147 *[wikipedia][wikipedia !~ /^pt:/] { 118 148 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}");123 149 } 124 150 /* nomes e ruas escritos totalmente em maiúsculo */ … … 136 162 suggestAlternative: "note"; 137 163 } 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)\./] { 139 171 throwWarning: tr("PT2- {0} com vírgula", "{0.key}"); 140 172 suggestAlternative: "alt_name"; … … 156 188 throwWarning: tr("PT2-Utilizar ; como separador de valores em {0}", "{0.key}"); 157 189 } 158 /* estrada com identificador mas sem o nome real*/190 /* nome e referências iguais */ 159 191 *[name = *ref][highway] { 160 192 throwWarning: tr("PT2- {0} e {1} são iguais; adicionar nome completo da estrada", "{0.key}", "{0.value}"); 161 193 } 162 194 /* 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/] { 164 196 throwWarning: tr("PT2-Verificar: com nome de via mas sem etiqueta de {0}", "{0.key}"); 165 197 } 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))?$/] { 167 199 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}"); 168 209 } 169 210 /* estrada com identificador mas sem o nome real */ … … 173 214 way[highway][type = route] { 174 215 throwWarning: tr("PT2- {0} não deve possuir {1}", "{0.key}", "{1.tag}"); 216 } 217 relation[type = route][highway] { 218 throwWarning: tr("PT2-Relação não deve possuir {0}", "{1.key}"); 175 219 } 176 220 /* nomes desnecessários */ … … 192 236 fixRemove: "{0.value}"; 193 237 } 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 }202 238 *[place = city][!name], 203 239 *[place = town][!name], … … 205 241 throwWarning: tr("PT2- {0} sem nome", "{0.value}"); 206 242 } 207 *[amenity =~ /^(school|college|kindergarten|driving_school)$/][name =~ /^(?i)\b(Universi dade|Faculdade|Instituto Universitário|Instituto Politécnico|Instituto Superior|Instituto Português de Administração|Institutode Engenharia|Escola do Serviço de Saúde Militar|EscolaUniversitá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/] { 208 244 throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); 209 245 suggestAlternative: "amenity=university"; 210 246 } 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/] { 212 252 throwWarning: tr("PT2-Verificar:estabelecimento de ensino errado"); 213 253 suggestAlternative: "amenity=school"; … … 240 280 *[name =~ /^(?i)Subestação .*/][power][power != substation], 241 281 *[name =~ /^(?i)Tribunal .*/][amenity][amenity != courthouse], 242 *[name =~ /^(?i) Hospital.*/][building][building != hospital],282 *[name =~ /^(?i)(Hospital|Centro Hospitalar) .*/][building][building != hospital], 243 283 *[name =~ /^(?i)(Universidade|Faculdade) .*/][building][building != university], 244 284 *[name =~ /^(?i)Escola .*/][building][building != school], … … 283 323 *[name =~ /(?i)\b(Prisão|Prisional)\b/][amenity][amenity != prison], 284 324 *[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], 291 331 *[name =~ /(?i)\bCemitério\b/][landuse][landuse != cemetery], 292 332 *[name =~ /^(?i)Capela .*/][building][building != chapel], … … 298 338 fixAdd: "{2.key}={2.value}"; 299 339 } 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] { 301 344 throwWarning: tr("PT2-Juntas de Freguesia e Câmaras Municipais devem ser amenity=townhall"); 302 345 fixAdd: "amenity=townhall"; 303 346 } 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"); 306 350 } 307 351 /* nomes e ruas escritos totalmente em maiúsculo */ … … 311 355 suggestAlternative: "short_name"; 312 356 } 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 } 313 367 *["addr:postcode"]["addr:postcode" !~ /[0-9]{4}-[0-9]{3}/], 314 368 *[postal_code][postal_code !~ /[0-9]{4}-[0-9]{3}/] { … … 337 391 suggestAlternative: "highway=motorway_link"; 338 392 } 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 }344 393 way[highway][lanes][lanes !~ /^[1-9]([0-9]*)$/], 345 394 way[highway]["lanes:backward"]["lanes:backward" !~ /^[1-9]([0-9]*)$/], … … 394 443 throwWarning: tr("PT2-Utilizar {0} apenas em {1}={2}", "{1.key}", "{0.key}", "{0.value}"); 395 444 } 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 */ 471 way[highway =~ /motorway|trunk|primary|secondary|tertiary/][!lanes], 472 way[highway $= _link][!lanes] { 473 throwOther: tr("PT2- {0} sem número de faixas ({1}) definido", "{0.key}", "{1.key}"); 474 } 475 way[highway][!surface][highway != bus_stop] { 476 throwOther: tr("PT2- {0} sem superfície ({1}) definida", "{0.key}", "{1.key}"); 477 } 478 way[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 */ 497 node[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 } 532 node[highway=speed_camera][!maxspeed], 533 relation[enforcement=maxspeed][!maxspeed], 534 relation[enforcement=maxheight][!maxheight], 535 relation[enforcement=maxweight][!maxweight] { 536 throwWarning: tr("PT2-Adicionar {0} ao {1}", "{1.key}", "{0.tag}"); 537 } 538 node[highway =~ /^(give_way|mini_roundabout|stop|turning_circle)$/][name] { 539 throwWarning: tr("PT2-Objeto não deve possuir {0}", "{1.key}"); 540 } 541 way[highway = give_way], 542 way[highway = mini_roundabout], 543 way[highway = stop], 544 way[highway = turning_circle], 545 relation[highway = give_way], 546 relation[highway = mini_roundabout], 547 relation[highway = stop], 548 relation[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 */ 552 node:unconnected[power = pole], 553 node:unconnected[power = tower], 554 node: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 */ 562 node[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 } 569 node[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 396 604 397 605 }}}
