Re: Quebra de Linha

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Quebra de Linha

cberaldi
Tbm estou enfrentando o mesmo problema, tentei acessar o link da API e o mesmo esta fora do ar, teria alguma outra maneira de ter acesso a essa API?

Em terça-feira, 10 de agosto de 2010 16h37min52s UTC-3, Francisco Sant'Anna escreveu:


2010/8/10 Jeremias Queiroga <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="wjwu8CfJ2TkJ">jqca...@...>
Francisco, 

Você tem algum exemplo ou a API dessas operações primitivas pra que eu possa criar uma janela com scrool... pois se eu tenho um texto maior que a regiao eu perco boa parte do texto.

--
Lua BR - http://groups.google.com/group/lua-br
Reply | Threaded
Open this post in threaded view
|

Re: Quebra de Linha

Manoel Campos da Silva Filho
Já fiz isso. A função está em beta ainda, mas divido a string em várias partes procurando pelo \n :). Segue código em anexo e explicação abaixo:

Use a função breakString do módulo "util" em anexo.
Ela recebe uma string e o máximo de caracteres
que a mesma deve ter por linha. A função retorna uma tabela (vetor) onde cada 
item será uma linha da string.

Usando o código abaixo vc descobre a largura de uma caractere qualquer.
Usei o W pois é um caractere largo, assim, se tenho uma largura X e divido
pela largura do W (a largura é considerada para o estilo e tamanho de fonte atual),
saberei quantos caracteres caberão no máximo na região definida (obviamente não é tão preciso pois cada caractere em uma fonte não mono-espaçada tem sua própria largura):

--largura e algura do canvas (região do lua)
local w, h = canvas:attrSize()

--largura e altura de um caractere qualquer (pode trocar o 
--caractere para tentar ajustar melhor)
local tw, th = canvas:measureText("W")

--Descubro quantos caracteres caberá na região
--(Pode subtrair um valor desejado para criar uma margem.
--Substraia com valores diferente até ajustar como deseja)
local totalCharPorLinha = (w / tw)

Agora é só chamar a função:

linhas = util.breakString(texto, totalCharPorLinha)
--imprimi as linhas depois de quebrar
for i, linha in ipairs(linhas) do
    print(linha)
end

Para saber quantas linhas vai caber na área, e
assim descobrir quantas páginas terá,
usará fórmula semelhante a que mostrei acima
(os valores de altura e largura do canvas e de um caractere
já tem em w, h, tw, th ).

A função se preocupa em não quebrar palavras no meio, somente
quando encontrar \n ou espaço, no entanto, também não deixa
a linha exceder o limite de caracteres especificado.


logo 
Manoel Campos Silva Fh, Me
IFTO - Instituto Federal do Tocantins



2012/11/30 cberaldi <[hidden email]>
Tbm estou enfrentando o mesmo problema, tentei acessar o link da API e o mesmo esta fora do ar, teria alguma outra maneira de ter acesso a essa API?

Em terça-feira, 10 de agosto de 2010 16h37min52s UTC-3, Francisco Sant'Anna escreveu:


2010/8/10 Jeremias Queiroga <[hidden email]>

Francisco, 

Você tem algum exemplo ou a API dessas operações primitivas pra que eu possa criar uma janela com scrool... pois se eu tenho um texto maior que a regiao eu perco boa parte do texto.

--
Lua BR - http://groups.google.com/group/lua-br
Reply | Threaded
Open this post in threaded view
|

Re: Quebra de Linha

Manoel Campos da Silva Filho
Faltou o anexo :)


logo 
Manoel Campos Silva Fh, Me
IFTO - Instituto Federal do Tocantins



2012/11/30 Manoel Campos da Silva Filho <[hidden email]>
Já fiz isso. A função está em beta ainda, mas divido a string em várias partes procurando pelo \n :). Segue código em anexo e explicação abaixo:

Use a função breakString do módulo "util" em anexo.
Ela recebe uma string e o máximo de caracteres
que a mesma deve ter por linha. A função retorna uma tabela (vetor) onde cada 
item será uma linha da string.

Usando o código abaixo vc descobre a largura de uma caractere qualquer.
Usei o W pois é um caractere largo, assim, se tenho uma largura X e divido
pela largura do W (a largura é considerada para o estilo e tamanho de fonte atual),
saberei quantos caracteres caberão no máximo na região definida (obviamente não é tão preciso pois cada caractere em uma fonte não mono-espaçada tem sua própria largura):

--largura e algura do canvas (região do lua)
local w, h = canvas:attrSize()

--largura e altura de um caractere qualquer (pode trocar o 
--caractere para tentar ajustar melhor)
local tw, th = canvas:measureText("W")

--Descubro quantos caracteres caberá na região
--(Pode subtrair um valor desejado para criar uma margem.
--Substraia com valores diferente até ajustar como deseja)
local totalCharPorLinha = (w / tw)

Agora é só chamar a função:

linhas = util.breakString(texto, totalCharPorLinha)
--imprimi as linhas depois de quebrar
for i, linha in ipairs(linhas) do
    print(linha)
end

Para saber quantas linhas vai caber na área, e
assim descobrir quantas páginas terá,
usará fórmula semelhante a que mostrei acima
(os valores de altura e largura do canvas e de um caractere
já tem em w, h, tw, th ).

A função se preocupa em não quebrar palavras no meio, somente
quando encontrar \n ou espaço, no entanto, também não deixa
a linha exceder o limite de caracteres especificado.


logo 
Manoel Campos Silva Fh, Me
IFTO - Instituto Federal do Tocantins



2012/11/30 cberaldi <[hidden email]>
Tbm estou enfrentando o mesmo problema, tentei acessar o link da API e o mesmo esta fora do ar, teria alguma outra maneira de ter acesso a essa API?

Em terça-feira, 10 de agosto de 2010 16h37min52s UTC-3, Francisco Sant'Anna escreveu:


2010/8/10 Jeremias Queiroga <[hidden email]>

Francisco, 

Você tem algum exemplo ou a API dessas operações primitivas pra que eu possa criar uma janela com scrool... pois se eu tenho um texto maior que a regiao eu perco boa parte do texto.


--
Lua BR - http://groups.google.com/group/lua-br

util.lua.tar.gz (13K) Download Attachment