Patch title: Release 89 bulk changes
Abstract:
File: /graphic/browser/tag/text.pli
Key:
    Removed line
    Added line
   
module "common.pli"
module "/pliant/graphic/vector/font.pli"
module "/pliant/language/type/text/istr.pli"
module "prototype.pli"


public


type D2Text
  inherit D2Box
  field iStr itext
  field (List Link:D2Box) content

D2Box maybe D2Text

method t list -> l
  oarg_rw D2Text t ; arg Pointer:(List Link:D2Box) l
  l :> t content

method t configure attribute value options
  oarg_rw D2Text t ; arg Str attribute value options
  if attribute=""
    t itext := html_decode32 (replace (replace value " 

method t position c
tag_position 
  oarg_rw D2Text t ; arg_rw D2Context c
  implicit t
    var Str text := itext
    var Str text32 := itext
    if text=""
      t position_undefined c
      return
    part control
      c:font bbox text null x0 y0 x1 y1 ; x0 *= c scale ; y0
      if x1-x0<=c:x1-c:line_x
        c addtoline t
        return
      var Int start := 0
      part dispatch
        var Int stop := start
        part cut
          var Int i := ((text stop text:len) search " " text
          c:font bbox (text32 start i-start) null x0 y0 x1 y
          if x1-x0>c:x1-c:line_x
            leave cut
          while i<text:len and text:i=" "
            i += 1
          stop := i
          if stop<text:len
            restart cut
        if stop=start
          if start=0 and c:line_x<>c:x0
            c newline
            restart control
          eif start=0
            c:font bbox text null x0 y0 x1 y1 ; x0 *= c scal
            c addtoline t
            return
          else
            stop := text len
        var Link:D2Text line :> new D2Text
        line itext := (cast itext Str32) start stop-start
        var Link:D2Box l :> line ; content += l
        c:font bbox line:itext null line:x0 line:y0 line:x1 
        c addtoline line
        c newline
        start := stop
        if start<text:len
          restart dispatch
      t itext := ""
      x0 := undefined ; y0 := undefined ; x1 := undefined ; 


html_tags insert "font" true addressof:D2Font
  oarg_rw D2Text t ; arg_rw D2Context c
  implicit t
    var Str text := itext
    var Str text32 := itext
    if text=""
      t position_undefined c
      return
    part control
      c:font bbox text null x0 y0 x1 y1 ; x0 *= c scale ; y0
      if x1-x0<=c:x1-c:line_x
        c addtoline t
        return
      var Int start := 0
      part dispatch
        var Int stop := start
        part cut
          var Int i := ((text stop text:len) search " " text
          c:font bbox (text32 start i-start) null x0 y0 x1 y
          if x1-x0>c:x1-c:line_x
            leave cut
          while i<text:len and text:i=" "
            i += 1
          stop := i
          if stop<text:len
            restart cut
        if stop=start
          if start=0 and c:line_x<>c:x0
            c newline
            restart control
          eif start=0
            c:font bbox text null x0 y0 x1 y1 ; x0 *= c scal
            c addtoline t
            return
          else
            stop := text len
        var Link:D2Text line :> new D2Text
        line itext := (cast itext Str32) start stop-start
        var Link:D2Box l :> line ; content += l
        c:font bbox line:itext null line:x0 line:y0 line:x1 
        c addtoline line
        c newline
        start := stop
        if start<text:len
          restart dispatch
      t itext := ""
      x0 := undefined ; y0 := undefined ; x1 := undefined ; 


html_tags insert "font" true addressof:D2Font