Acentos no NCL
Autor: mateus | Publicado: 2009-10-13T20:40:00-03:00

Não há no NCL nenhuma fonte com caracteres acentuados e nem a interpretação automática de strings com tais caracteres. Isso atrapalha os usuários cujas línguas nativas exigem estes caracteres. É possível escrever palavras com acentos no NCL, mas é um pouco chato.Os caracteres acentuados são gerados por meio de Códigos de Função, que permite controlar vários aspectos de um texto. Veja a descrição completa destes códigos aqui.Para facilitar a minha vida, criei um arquivo que armazena separadamente os códigos para os caracteres acentuados. Os nomes das variáveis do tipo string, que contêm os códigos, seguem os nomes da tabela de acentos do HTML. Veja abaixo os caracteres acentuados e algumas palavras em português, mostrando como o NCL os plota.Abaixo está o script que gerou esta saída:load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"begin; tabela de acentosAgrave  = "A~H-15V6F35~A~FV-6H3~" ; Àagrave  = "a~H-13V2F35~A~FV-2H3~" ; àAacute  = "A~H-15V6F35~B~FV-6H3~" ; Áaacute  = "a~H-13V2F35~B~FV-2H3~" ; áAcirc   = "A~H-15V6F35~C~FV-6H3~" ; Âacirc   = "a~H-13V2F35~C~FV-2H3~" ; âAtilde  = "A~H-15V6F35~D~FV-6H3~" ; Ãatilde  = "a~H-13V2F35~D~FV-2H3~" ; ãAuml    = "A~H-15V6F35~H~FV-6H3~" ; Äauml    = "a~H-13V2F35~H~FV-2H3~" ; äEgrave  = "E~H-15V6F35~A~FV-6H3~" ; Èegrave  = "e~H-13V2F35~A~FV-2H3~" ; èEacute  = "E~H-15V6F35~B~FV-6H3~" ; Éeacute  = "e~H-13V2F35~B~FV-2H3~" ; éEcirc   = "E~H-15V6F35~C~FV-6H3~" ; Êecirc   = "e~H-13V2F35~C~FV-2H3~" ; êEuml    = "E~H-15V6F35~H~FV-6H3~" ; Ëeuml    = "e~H-13V2F35~H~FV-2H3~" ; ëIgrave  = "I~H-10V6F35~A~FV-6H3~" ; Ìigrave  = "i~H-10V2F35~A~FV-2H3~" ; ìIacute  = "I~H-08V6F35~B~FV-6H3~" ; Íiacute  = "i~H-08V2F35~B~FV-2~"   ; íIcirc   = "I~H-09V6F35~C~FV-6H3~" ; Îicirc   = "i~H-09V2F35~C~FV-2H3~" ; îIuml    = "I~H-09V6F35~H~FV-6H3~" ; Ïiuml    = "i~H-09V2F35~H~FV-2H3~" ; ïOgrave  = "O~H-15V6F35~A~FV-6H3~" ; Òograve  = "o~H-13V2F35~A~FV-2H3~" ; òOacute  = "O~H-15V6F35~B~FV-6H3~" ; Óoacute  = "o~H-13V2F35~B~FV-2H3~" ; óOcirc   = "O~H-16V6F35~C~FV-6H3~" ; Ôocirc   = "o~H-14V2F35~C~FV-2H3~" ; ôOtilde  = "O~H-15V6F35~D~FV-6H3~" ; Õotilde  = "o~H-13V2F35~D~FV-2H3~" ; õOuml    = "O~H-16V6F35~H~FV-6H3~" ; Äouml    = "o~H-14V2F35~H~FV-2H3~" ; äUgrave  = "U~H-15V6F35~A~FV-6H3~" ; Ùugrave  = "u~H-13V2F35~A~FV-2H3~" ; ùUacute  = "U~H-13V6F35~B~FV-6H3~" ; Úuacute  = "u~H-13V2F35~B~FV-2H3~" ; úUcirc   = "U~H-15V6F35~C~FV-6H3~" ; Ûucirc   = "u~H-13V2F35~C~FV-2H3~" ; ûUuml    = "U~H-15V6F35~H~FV-6H3~" ; Üuuml    = "u~H-13V2F35~H~FV-2H3~" ; üCedil   = "C~H-15F35~K~FH2~"      ; Çcedil   = "c~H-13F35~K~FH2~"      ; çNtilde  = "N~H-15V6F35~D~FV-6H3~" ; Ñntilde  = "n~H-13V2F35~D~FV-2H3~" ; ñ; ambiente graficowks  = gsn_open_wks("ps","acentos"); recursos do textotxres = Truetxres@txFontHeightF = 0.03; plotando caracteres acentuadostxres@txJust = "CenterCenter"titulo1 = "Acentua"+cedil+atilde+"o com o NCL"gsn_text_ndc(wks,titulo1,.5,.95,txres)txres@txJust = "CenterLeft"titulo2 = "Caracteres acentuados:"gsn_text_ndc(wks,titulo2,0.,.85,txres)texto = Agrave+"  "+agrave+"  "+Aacute+"  "+\aacute+"  "+Acirc+"  "+acirc+"  "+\Atilde+"  "+atilde+"  "+ \Auml+"  "+aumlgsn_text_ndc(wks,texto,.2,.8,txres)texto = Egrave+"  "+egrave+"  "+Eacute+"  "+\eacute+"  "+Ecirc+"  "+ecirc+"  "+\Euml+"  "+eumlgsn_text_ndc(wks,texto,.2,.75,txres)texto = Igrave+"  "+igrave+"  "+Iacute+"  "+\iacute+"  "+Icirc+"  "+icirc+"  "+\Iuml+" "+iumlgsn_text_ndc(wks,texto,.2,.7,txres)texto = Ograve+"  "+ograve+"  "+Oacute+"  "+\oacute+"  "+Ocirc+"  "+ocirc+"  "+\Otilde+"  "+otilde+"  "+\Ouml+"  "+oumlgsn_text_ndc(wks,texto,.2,.65,txres)texto = Ugrave+"  "+ugrave+"  "+Uacute+"  "+\uacute+"  "+Ucirc+"  "+ucirc+" "+\Uuml+" "+uumlgsn_text_ndc(wks,texto,.2,.6,txres)texto = Cedil+"  "+cedil+"  "+Ntilde+"  "+ntildegsn_text_ndc(wks,texto,.2,.55,txres); algumas palavras acentuadastitulo3 = "Algumas palavras:"gsn_text_ndc(wks,titulo3,0.,.45,txres)txres@txFontHeightF = 0.025texto  = "ver"+atilde+"o - inst"+aacute+\"vel - hist"+oacute+"rico - mat"+eacute+"ria"gsn_text_ndc(wks,texto,.1,.4,txres)texto = "precipita"+cedil+atilde+\"o - INFORMA"+Cedil+Otilde+"ES - tr"+ecirc+"s"gsn_text_ndc(wks,texto,.1,.35,txres) texto = "dire"+cedil+otilde+\"es - El-Ni"+ntilde+"o - LA-NI"+Ntilde+"A"gsn_text_ndc(wks,texto,.1,.3,txres) texto = "got"+iacute+"culas - pol"+ecirc+\"mica - Amaz"+ocirc+"nia"gsn_text_ndc(wks,texto,.1,.25,txres)texto = "mec"+acirc+"nica - portugu"+ecirc+\"s - ci"+ecirc+"ncia atmosf"+eacute+"rica"gsn_text_ndc(wks,texto,.1,.2,txres) texto = Aacute+"reas - din"+acirc+"mica - Sa"+\uacute+"de"gsn_text_ndc(wks,texto,.1,.15,txres)frame(wks)endNeste exemplo, os caracteres acentuados estão no script que os usam, mas podem ser colocados num arquivo .ncl separado que pode ser carregado com o comando load.A fonte de caracteres 35 contém os caracteres de acentuação, sendo usada, extensivamente, na criação dos caracteres acentuados. Vou analisar a construção de um dos caracteres, sendo direta a extensão desta explicação aos demais. Vejamos o caractere "á", definido no script acima comoaacute   =   "a~H-13V2F35~B~FV-2H3~"A explicação se dará quase caractere por caractere:a é o próprio caractere a~ é o código de função de texto, que pode ser modificado no arquivo .hluresfile.H-13 move a posição do texto atual 13 pontos na horizontal, à esquerda (negativo).V2 move a posição do texto atual 2 pontos na vertical, para cima.F35  usa a fonte de caracteres 35.B usa o caractere da fonte de caracteres 35.F volta a usar a fonte de caracteres anterior.V-2 move a posição do texto atual 2 pontos na vertical, para baixo.H3 move a posição do texto na horizontal, três pontos à direita.Em suma, os caracteres acentuados são montados manualmente, por meio de movimentos do cursor de impressão de caractere para a direita, esquerda, para cima e para baixo.Quem usou uma máquina de escrever já percebeu o esquema de acentuação, ou seja, (i) escreve o caractere, (ii) volta o cursor para a posição do caractere escrito, (iii) eleva ou abaixa o cursor, (iv) escreve o sinal de acentuação e (v) faz o caminho de volta para continuar a escrever o texto.Note que os códigos de função de texto ficam sempre entre ~, o sinal indicador do uso destes códigos.Como comentei no início deste post, a criação dos caracteres acentuados é chata, mas é simples, como se pode ver acima. Uma vez feita, é só sair usando ;).Abraços e espero que seja útil.