Line numbers for soft-wrapped styled text?

Jim Lambert jiml at netrin.com
Wed Mar 29 22:27:18 EDT 2017


Hermann wrote:

> In sum I learned very important things in this thread:
> Using a styledText array (by Alex Tweedly).
> Using liststyles for _any_ field (by Jim Lambert).
> You could now think about making a "Sample stack" for that (livecodeshare).
> 
> One thing to remark:
> One has to adjust the "indention/oudention" by using the left margin and the
> first indent. One can even make this width-adaptive to the num of lines and
> adjust it in a way to make the numbering looking 'right aligned':
> 
> ## LineNumbering technique by Jim Lambert
> ## (applied below by for adaptive and right-aligned indention by -hh).
> ## You need a field "TEXT" of styled Text and a checkButton "ShowNumbers".
> 
> ## -- btn "showNumbers
> on mouseUp
>  if the hilite of me then showNumbers
>  else hideNumbers
> end mouseUp
> 
> ## -- fld "TEXT
> on textchanged
>  if the hilite of btn "showNumbers" then showNumbers
>  else hideNumbers
> end textchanged
> 
> on scrollbardrag
>  if the hilite of btn "showNumbers" then showNumbers
>  else hideNumbers
> end scrollbardrag
> 
> ## card script
> local rg="TEXT"
> 
> on hideNumbers
>  lock screen; lock messages
>  set the liststyle of line 1 to -1 of fld rg to empty
>  set the firstindent of line 1 to -1 of fld rg to 0
>  set the margins of fld rg to 8
>  if there is a grc rg then hide grc rg
>  unlock screen; unlock messages
> end hideNumbers
> 
> on showNumbers
>  lock screen; lock messages
>  set the hgrid of fld rg to true -- adjust to your taste
>  put the num of lines of fld rg into n0
>  -- as an empty last line is ignored by LC:
>  if char -1 of fld rg is cr then add 1 to n0
>  put length(n0) into L
>  set the borderColor of fld rg to "230,230,230"
>  put 10+L*8 into ww
>  repeat with i=1 to L
>    set the firstIndent of line 10^(i-1) to 10^i-1 \
>        of fld rg to -16-i*8
>  end repeat
>  set the margins of fld rg to (ww+10,8,8,8)
>  set the liststyle of line 1 to -1 of fld rg to "decimal"
>  if there is no grc rg then createNumBack rg
>  show grc rg
>  put the rect of fld rg into rct
>  set points of grc rg to \
>        (ww div 2 + item 1 of rct, item 2 of rct) &cr& \
>        (ww div 2 + item 1 of rct, item 4 of rct)
>  set linesize of grc rg to ww
>  unlock screen; unlock messages
> end showNumbers
> 
> on createNumBack gg -- adust to your taste
>  if there is no grc gg then create grc rg
>  set style of grc gg to "line"
>  set capstyle of grc gg to "butt"
>  set opaque of grc gg to true
>  set the colorOverlay["color"] of grc rg to "230,230,230"
>  set blendlevel of grc rg to 70
> end createNumBack
> 
> ## known problem: incorrect 'rightalign' if after deleting the last line
> ##   the new last line is an empty one and the length of the num changes.
> ###END_OF_SCRIPT

Hermann,

That’s an elegantly full-featured solution!

JimL



More information about the use-livecode mailing list