Share Your Code

Multiline text with width in pixels and justified on both sides

Posted by josua, Posted on October 18, 2011

Hi

I writes this code for put text justified on both sides. I'm newbie in Corona and it's possible the code is not optimized, but it works! Excuse for my english level also :(

First, you need to add this function to util.lua because she's need the explode function included on it.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
---------------------FUNCIO PER TALLAR I JUSTIFICAR UN TEXT---------
function tallaJustifica(elText, laFont, laMida, elColor, laAmplada)
        elText =elText or "You need to pass a Text as the first function parameter"
        laFont = laFont or native.systemFont
    laMida = tonumber(laMida) or 12
    elColor = elColor or {0, 0, 0}
    laAmplada= laAmplada or display.stageWidth
        local paraulesBloc=explode(" ", elText)
        local paraulaInicial=1
        local limitParaules = #paraulesBloc
        local laFraseTemp=""
        local laFraseJust=""
        local laFrase=""
        local iniciBlocJust=1
        local finalBlocJust=1
        local resultat = display.newGroup()
        local amplada=0
        local comptador= 1
        local numeroLinea=1
        local ultimaFrase=false
 
        while paraulaInicial<limitParaules do
                for i=paraulaInicial, limitParaules,1 do
                        laFraseTemp= laFraseTemp..paraulesBloc[i].." "
                        local tempLinea = display.newText(laFraseTemp, 0, 0, laFont, laMida )
                        amplada=tempLinea.width
                        tempLinea:removeSelf()
                        if amplada >laAmplada or (i==limitParaules) then
                                paraulaInicial=i
                                if i==limitParaules then
                                        finalBlocJust=paraulaInicial
                                        ultimaFrase=true
                                else
                                        finalBlocJust=paraulaInicial-1
                                end                             
                                amplada=0
                                break
                        end
                end
 
                if ultimaFrase==false then
                        while amplada<laAmplada do
                                for i=iniciBlocJust, finalBlocJust-1, 1 do
                                        laFraseJust=laFraseJust..paraulesBloc[i].." "
                                end
                                laFraseJust=laFraseJust..paraulesBloc[finalBlocJust]
                                local tempLinea = display.newText(laFraseJust, 0, 0, laFont, laMida)
                                amplada=tempLinea.width
                                tempLinea:removeSelf()
                                paraulesBloc[iniciBlocJust+comptador-1]=paraulesBloc[iniciBlocJust+comptador-1].." "
                                comptador=comptador+1
                                if comptador>(finalBlocJust-iniciBlocJust) then 
                                        comptador=1
                                end
                                laFrase=laFraseJust
                                laFraseJust=""
                end
                else
                                for i=iniciBlocJust, finalBlocJust-1, 1 do
                                        laFrase=laFrase..paraulesBloc[i].." "
                                end
                                laFrase=laFrase..paraulesBloc[finalBlocJust]
                end         
                
                laFraseTemp=""
            amplada=0
            iniciBlocJust=finalBlocJust+1
                if iniciBlocJust>limitParaules then
                        iniciBlocJust=limitParaules
                end
            comptador=1
            local linea = display.newText(laFrase, 0, (laMida * 1.3)*numeroLinea, laFont, laMida)
            linea:setTextColor(elColor[1], elColor[2], elColor[3])
            resultat: insert(linea)
                numeroLinea=numeroLinea+1
                laFrase=""
        end
        
        return resultat
end
 
----------------FI FUNCIO TALLA I JUSTIFICA------------------------------------

Usage example:

1
2
3
4
5
6
local util=require ("util")
local blocText="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eu velit sit amet sem pulvinar bibendum. Vestibulum in neque elit, non malesuada metus. Sed suscipit hendrerit libero, nec condimentum metus tincidunt in. Duis viverra scelerisque congue. Phasellus convallis vehicula sem vel viverra. Cras bibendum arcu et turpis aliquam ultricies. Vivamus auctor magna eu odio faucibus vel egestas nisl blandit. Duis tristique libero id tortor congue sed viverra lacus convallis."
 
local blocTextObject = util.tallaJustifica(blocText, native.systemFont,  22, {255,255,255}, 660)
                blocTextObject.x =54
                blocTextObject.y = 100