character to justify text -- spacer graphic implementation

Bill Marriott wjm at wjm.org
Wed Jun 27 01:48:45 EDT 2007


Wow -- it works! A little bit of trouble with the last line of paragraphs, 
but very impressive!

"Brian Yennie" <briany at qldlearning.com> wrote in 
message news:38FD981E-263D-4A4D-8625-D30D7E8679DB at qldlearning.com...
> This uses a naive algorithm and has limitations, but it's a fun 
> experiment.
> Create a scrolling text field and a 1x1 empty image object.
>
> Paste this into the field script and type away.
>
> on keyDown c
>   lock screen
>   do "put c into"&& (the selectedChunk)
>   fullJustify (the id of me), (the id of image "spacer")
>   unlock screen
> end keyDown
>
> on fullJustify fldID, imageID
>   local i, targetWidth
>
>   put fullFieldLineWidth(fldID) into targetWidth
>
>   put 1 into i
>
>   lock screen
>   replace numToChar(0) with empty in fld id fldID
>   put the formattedText of fld id fldID into fld id fldID
>
>   repeat for each line l in fld id fldID
>     put (targetWidth - the formattedWidth of line i of fld id fldID)  into 
> tLineGaps[i]
>     add 1 to i
>   end repeat
>
>   put 1 into i
>   repeat for each line l in fld id fldID
>     put padLine(l, tLineGaps[i], numToChar(0)) into line i of fld id 
> fldID
>     add 1 to i
>   end repeat
>
>   put 1 into i
>   repeat for each char c in fld id fldID
>     if (char i of fld 1 is numToChar(0)) then
>       set the imageSource of char i of fld id fldID to imageID
>     end if
>     add 1 to i
>   end repeat
>   unlock screen
>
> end fullJustify
>
> function fullFieldLineWidth fldID
>   put (the width of fld id fldID) into targetWidth
>   subtract (2* the borderWidth of fld id fldID) from targetWidth
>   subtract (item 1 of the margins of fld id fldID) from targetWidth
>   get (item 3 of the margins of fld id fldID)
>   if (it is empty) then subtract (item 1 of the margins of fld id  fldID) 
> from targetWidth
>   else subtract (item 3 of the margins of fld id fldID) from  targetWidth
>   if (the vScrollbar of fld id fldID) then subtract the  scrollbarWidth of 
> fld id fldID from targetWidth
>   return targetWidth
> end fullFieldLineWidth
>
> function padLine l, pixels
>   put empty into tmp1
>   put 0 into spaceCount
>   repeat for each char c in l
>     if (c is space) then add 1 to spaceCount
>   end repeat
>   if (spaceCount = 0) then return l
>   put (pixels div spaceCount) into spacePadding
>   put (pixels mod spaceCount) into leftoverPads
>   repeat for each char c in l
>     if (c is space) then
>       repeat spacePadding
>         put numToChar(0) after tmp1
>       end repeat
>     end if
>     put c after tmp1
>   end repeat
>   repeat for each char c in tmp1
>     if (c is space) AND (leftoverPads > 0) then
>       put numToChar(0) after tmp2
>       subtract 1 from leftoverPads
>     end if
>     put c after tmp2
>   end repeat
>
>   return tmp2
> end padLine
>
>
>
>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your 
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
> 






More information about the use-livecode mailing list