Word Wrapping

Previous topic - Next topic

MrTAToad

This is a proportional font word wrapping routine that is also designed to deal with words that wont fit into the allotted size.  It will convert CHR$(10) to CHR$(13) and treat CHR$(13) as a new line.  CHR$(9) is treated as 4 spaces.

Code (glbasic) Select
TYPE TWordWrap
FUNCTION Initialise%:
RETURN TRUE
ENDFUNCTION

FUNCTION Wrap%:text$,maxWidth%,store$[]
LOCAL words$[]
LOCAL loop$
LOCAL curLineLength%

IF maxWidth%<LEN("W",TRUE) THEN RETURN FALSE
IF self.Explode(text$,words$[])=FALSE THEN RETURN FALSE

curLineLength%=0
FOREACH loop$ IN words$[]
DEBUG "Loop : "+loop$+"\n"
IF loop$<>""
IF curLineLength%+LEN(loop$,TRUE)>maxWidth%
IF curLineLength%>0
curLineLength%=0
ENDIF

WHILE LEN(loop$,TRUE)>maxWidth%
LOCAL temp$
LOCAL l%

l%=1
WHILE LEN(LEFT$(loop$,l%)+"-",TRUE)<maxWidth% AND l%<LEN(loop$)
INC l%
WEND

DIMPUSH store$[],LEFT$(loop$,l%-1)+"-"
loop$=MID$(loop$,l%)
WEND

curLineLength%=0
ENDIF
ELSE
curLineLength%=0
ENDIF

IF curLineLength%=0
DIMPUSH store$[],loop$
ELSE
INC store$[-1]," "+loop$
ENDIF

IF loop$<>"" THEN INC curLineLength%,LEN(loop$+" ",TRUE)
NEXT

RETURN TRUE
ENDFUNCTION

FUNCTION Explode%:text$,store$[]
LOCAL temp$[]
LOCAL temp2$[]
LOCAL loop$,loop2$

DIM store$[0]
DIM temp$[0]

IF text$="" THEN RETURN FALSE

text$=REPLACE$(REPLACE$(text$,CHR$(9),"    "),CHR$(10),CHR$(13))

IF SPLITSTR(text$,temp$[],CHR$(13))>0
FOREACH loop$ IN temp$[]
DIM temp2$[0]
IF SPLITSTR(loop$,temp2$[]," ")>0
FOREACH loop2$ IN temp2$[]
DIMPUSH store$[],loop2$
NEXT
ENDIF
DIMPUSH store$[],""
NEXT
ENDIF
RETURN TRUE
ENDFUNCTION
ENDTYPE

LOCAL wordWrap AS TWordWrap
LOCAL output$[]
LOCAL fW%,fH%,y%,size%=60

LOADFONT "Media/smalfont.png",0
SETFONT 0
GETFONTSIZE fW%,fH%
y%=0
wordWrap.Initialise()
wordWrap.Wrap("This is a test of the word"+CHR$(13)+"wrapping routine which wraps to a given font width.  bshkbsdkhbsdkbsdvkbsdkvbkdvdkjvkbkdbkjebfjkadbfasdjkbsdjkbsdjbsdjkbsdsbdk",size%,output$[])

DRAWRECT 0,0,size%-1,100,RGB(255,0,0)
FOREACH loop$ IN output$[]
PRINT loop$,0,y%,TRUE
INC y%,fH%
NEXT

SHOWSCREEN
KEYWAIT


[attachment deleted by admin]