Patch title: Release 90 bulk changes
Abstract:
File: /graphic/browser/xml/helper.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "context.pli"
module "tree.pli"
module "/pliant/graphic/browser/tag/prototype.pli"
submodule "/pliant/graphic/misc/float.pli"


function html_color s -> c
  arg Str s ; arg Int c
  function hexa s -> i
    arg Str s ; arg Int i
    i := 0
    for (var Int index) 0 s:len-1
      var Int c := s:index:number
      if c>="0":number and c<="9":number
        i := i*16+(c-"0":number)
      eif c>="A":number and c<="Z":number
        i := i*16+(c+10-"A":number)
      eif c>="a":number and c<="z":number
        i := i*16+(c+10-"a":number)
  if (s 0 1)="#" and s:len=7
    c := hexa:(s 1 2)+hexa:(s 3 2)*2^8+hexa:(s 5 2)*2^16
  else
    c := undefined

method c full_url target -> url
  arg XmlContext c ; arg Str target url
  if (target search ":" -1)<>(-1)
    url := target
  eif (target 0 2)="//" and (c:url eparse any:(var Str protocol) ":" any)
    url := protocol+":"+target
  eif (target 0 1)="/" and (c:url eparse any:(var Str protocol) "://" any:(var Str server) "/" any)
    url := protocol+"://"+server+target
  else
    url := (c:url 0 (c:url search_last "/" -1)+1)+target
  while (url eparse any:(var Str head) "/../" any:(var Str tail))
    url := (head 0 (head search_last "/" head:len))+"/"+tail


export html_color '. full_url'


#-----------------------------------------------------------------------------


method c position_recurse t
  arg_rw XmlContext c ; arg_rw XmlTree t
  each sub t
   c position sub

method c position_container t
  arg_rw XmlContext c ; arg_rw XmlTree t
  function position_include b c
    arg_rw XmlTree b c
    if b:x0=defined
      c x0 := min c:x0 b:x0
      c y0 := min c:y0 b:y0
      c x1 := max c:x1 b:x1
      c y1 := max c:y1 b:y1
    else
      each bb b
        position_include bb c
  t x0 := float_max
  t y0 := float_max
  t x1 := float_min
  t y1 := float_min
  each sub t
    position_include sub t
  if t:x0=float_max
    t x0 := undefined
    t y0 := undefined
    t x1 := undefined
    t y1 := undefined

function position_translate t tx ty
  arg_rw XmlTree t ; arg Float tx ty
  if t:x0<>undefined
    t x0 += tx
    t y0 += ty
    t x1 += tx
    t y1 += ty
  each sub t
    position_translate sub tx ty


method c draw_recurse t
  arg_rw XmlContext c ; arg_rw XmlTree t
  each sub t
   c draw sub


export '. position_recurse' '. position_container' position_translate
export '. draw_recurse'


#-----------------------------------------------------------------------------


method tree append sub
  arg_rw XmlTree tree sub
  sub next :> null map XmlTree
  var (Pointer Pointer:XmlTree) ptr :>> tree first
  while exists:ptr
    ptr :>> ptr next
  ptr :> sub


method tree remove sub
  arg_rw XmlTree tree sub
  var (Pointer Pointer:XmlTree) ptr :>> tree first
  while addressof:ptr<>addressof:sub
    ptr :>> ptr next
  ptr :> sub next


export '. append' '. remove'