Patch title: Release 93 bulk changes
Abstract:
File: /graphic/browser/test.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/language/stream.pli"
module "/pliant/admin/file.pli"
module "server.pli"


method connection id id
  arg_rw BrowserConnection connection ; arg Str id
  connection:stream writeline "i "+string:id

method connection text txt
  arg_rw BrowserConnection connection ; arg Str txt
  connection:stream writeline "t "+string:txt

browser_tag_prototype fixed
  body

browser_tag_prototype center
  body

browser_tag_prototype bold
  body

browser_tag_prototype italic
  body

browser_tag_prototype font
  attr Str face
  attr Float scale
  body

browser_tag_prototype eol
  void

browser_tag_prototype para
  body


browser_tag_prototype table
  body

browser_tag_prototype row
  body

browser_tag_prototype cell
  body


method connection file_browse path
  arg_rw BrowserConnection connection ; arg Str path
  later

method connection file_editor name
  arg_rw BrowserConnection connection ; arg Str name
  implicit connection
    var Pointer:BrowserDocument d :> connection document
    var Pointer:BrowserNode listing :> d create_node "listing" "listing"
    var Pointer:BrowserNode prev :> d create_node "drop" "drop"
    d stick prev stick_head listing
    (var Stream s) open name in+safe
    while not s:atend
      var Pointer:BrowserNode n :> d create_node "text"+generate_id "text"
      n attribute "" := s readline
      d stick n stick_after prev
      prev :> n
    s close
    d delete_node (d search_node "drop")
    var Link:Str cid :> new Str
    var Link:Int cindex :> new Int
    var Link:Float cx0 :> new Float
    var Link:Float cy0 :> new Float
    var Link:Float cx1 :> new Float
    var Link:Float cy1 :> new Float
    window top
      text name
    window left
      bloc
        text "back"
      event
        if event="press" and key="button1"
          var Str p := name
          p := p 0 (p search_last "/" p:len)
          file_browse p+"/"
          connection:stream writeline "once"
    window main
      bloc
        para spacing 0 fold false
          font face "cstt8"
            n :> listing first
            while exists:n
              id n:id ; text (n attribute "") ; eol
              n :> n next
      event
        if event="press" and key="button1"
          cid := target_id
          cindex := target_index
          cx0 := target_x0
          cy0 := target_y0
          cx1 := target_x1
          cy1 := target_y1
          stream writeline "scroll "+(string x-20)+" "+(string y-20)+" "+(string x+20)+" "+(string y+20)
        eif event="press"
          if (key parse (var Int k)) and k>=0 and k<256 or key="backspace"
            var Pointer:BrowserNode n :> d search_node cid
            if exists:n
              var Str line := n attribute ""
              if cindex>=0 and cindex<=line:len
                if key="backspace"
                  if cindex>0
                    line := (line 0 cindex-1)+(line cindex line:len)
                    cindex -= 1
                else
                  line := (line 0 cindex)+character:k+(line cindex line:len)
                  cindex += 1
                n attribute "" := line
                stream writeline "attr "+string:cid+" [dq][dq] "+string:line
                stream writeline "window [dq]main[dq]"
                stream writeline "draw "+string:cid+" "+(string cx0-1000)+" "+string:cy0+" "+(string cx1+1000)+" "+string:cy1


method connection file_browse path
  arg_rw BrowserConnection connection ; arg Str path
  implicit connection
    window top
      text path
    window left
      if path<>"file:/"
        bloc
          text "up" ; eol
        event
          if event="press" and key="button1"
            var Str p := path
            p := p 0 (p search_last "/" p:len)
            p := p 0 (p search_last "/" p:len)
            file_browse p+"/"
            connection:stream writeline "once"
    window main
      table
        var Array:FileInfo files := file_list path extended+directories+relative+sorted
        for (var Int i) 0 files:size-1
          row
            var Str name := path+files:i:name
            cell
              if files:i:is_directory
                bloc
                  font color "rgb:0000FF"
                    text files:i:name
                event
                  if event="press" and key="button1"
                    file_browse name
                    connection:stream writeline "once"
                  eif event="press" and key=(string "+":number)
                    console "zoom in" eol
                    connection:stream writeline "window [dq]main[dq]"
                    connection:stream writeline "query_scale"
                    if (connection:stream:readline parse (var Float scale))
                      connection:stream writeline "scale "+(string scale*1.25)
                      connection:stream writeline "window_draw"
                  eif event="press" and key=(string "-":number)
                    console "zoom out" eol
                    connection:stream writeline "window [dq]main[dq]"
                    connection:stream writeline "query_scale"
                    if (connection:stream:readline parse (var Float scale))
                      connection:stream writeline "scale "+(string scale/1.25)
                      connection:stream writeline "window_draw"
              else
                bloc
                  text files:i:name
                event
                  if event="press" and key="button1"
                    file_editor name
                    connection:stream writeline "once"
            cell
              text "     "
            cell
              text (string files:i:datetime)
            cell
              text "     "
            cell
              text (string files:i:size)

browser_page ""
  file_browse "file:/"


browser_page "/test"
  window top
    text "This the test page"
  bloc
    text (repeat 30 "test 1234 ")
  event
    window bottom
      text "event "+string:event+" key "+string:key+" buttons "+string:buttons+" at "+string:x+" "+string:y ; eol
      text "hook id "+string:hook_id+" area "+string:hook_x0+" "+string:hook_y0+" "+string:hook_x1+" "+string:hook_y1 ; eol
      text "target id "+string:target_id+" area "+string:target_x0+" "+string:target_y0+" "+string:target_x1+" "+string:target_y1+" index "+string:target_index
  eol
  bloc
    text "texte court."
  event
    window bottom
      text "event "+string:event+" key "+string:key+" buttons "+string:buttons+" at "+string:x+" "+string:y ; eol
      text "hook id "+string:hook_id+" area "+string:hook_x0+" "+string:hook_y0+" "+string:hook_x1+" "+string:hook_y1 ; eol
      text "target id "+string:target_id+" area "+string:target_x0+" "+string:target_y0+" "+string:target_x1+" "+string:target_y1+" index "+string:target_index


browser_server