amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > word wrap [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 2 -3- [ - Beitrag schreiben - ]

13.11.2009, 14:28 Uhr

AGSzabo
Posts: 1663
Nutzer
@DrNOP:

eh, das wäre schonmal ein guter ansatz?


im übrigen habe ich die routine jezt funktionsfähig hinbekommen, es wird dabei aber das erste wort einer zeile doppelt bearbeitet! einmal bei sehen ob es noch in die zeile passt und dann als erstes wort der nächsten zeile... vielleicht kann das jemand noch weiter optimieren...

code:
.start		move.l	xuiFd_wrappedtext(a3),a5

		; d7 width of space 
		; d6 width of textfield

		tst.b	(a5)
		beq.b	.rts

.while_words	bsr	.get_word	; first of a line

		; SpaceLeft := LineWidth - Width(word)

		move.w	d6,d5
		sub.w	d0,d5

.while_misc	; while( ( word:=next() ) AND char<>$a AND Width(word)+SpaceWidth<SpaceLeft)

		tst.b	-1(a5)
		beq.b	.rts

		move.l	a5,a4
		bsr	.get_word

		cmp.b	#$a,-1(a4)
		beq.b	.while_words

		add.w	d7,d0
		sub.w	d0,d5
		bgt.b	.while_misc

		move.b	#$a,-1(a4)
		move.l	a4,a5
		bra.b	.while_words

.rts		rts

.get_word	; a5 *word, >a5 *after word+space

		move.l	a5,a0		; word pointer
		moveq	#0,d0		; word lenght in chars
.gw_loop	move.b	(a5)+,d1
		beq.b	.textlength
		cmp.b	#$a,d1
		beq.b	.textlength
		cmp.b	#" ",d1
		beq.b	.textlength
		addq	#1,d0
		bra.b	.gw_loop

.textlength	move.l	a2,a1
		jmp	_LVOTextLength(a6)

--
Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux

[ - Antworten - Zitieren - Direktlink - ]

13.11.2009, 19:34 Uhr

AGSzabo
Posts: 1663
Nutzer
@Der_Wanderer

> Einzelzeichen sind keine gute Idee.

doch, ich habs hinbekommen.

beim umbruch wird das aktuelle wort zur berechnung seiner pixelbreite in einen eigenen buffer kopiert und dabei die steuerzeichen übergangen. beim printen dann wird es so gemacht wie du es empfohlen hast. stile sind auch über das ende einer zeile hinaus gültig.


> "Ich bin ein \bText, der ab \ihier auch noch itallic ist,\x jetzt nur noch bold und \x jetzt wieder normal. Backslashes \\ gehen auch."

einen einzelnen stil einschalten und das // geht bei mir schon. aber die verschachtelung und das spezifische /x, wie macht man das?


[ Dieser Beitrag wurde von AGSzabo am 13.11.2009 um 19:36 Uhr geändert. ]

[ Dieser Beitrag wurde von AGSzabo am 13.11.2009 um 22:54 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]


1 2 -3- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > word wrap [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.