Patch title: Release 92 bulk changes
Abstract:
File: /appli/browser/core.pli
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "/pliant/graphic/misc/float.pli"
submodule "document.pli"
submodule "context.pli"
submodule "tag/prototype.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 DocumentContext 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 n
  arg_rw DocumentContext c ; arg_rw DocumentNode n
  each sub n
   c position sub

method c position_container n
  arg_rw DocumentContext c ; arg_rw DocumentNode n
  function position_include b c
    arg_rw DocumentNode b c
    if b:has_area
      c:area x0 := min c:area:x0 b:area:x0
      c:area y0 := min c:area:y0 b:area:y0
      c:area x1 := max c:area:x1 b:area:x1
      c:area y1 := max c:area:y1 b:area:y1
    else
      each bb b
        position_include bb c
  n:area x0 := float_max
  n:area y0 := float_max
  n:area x1 := float_min
  n:area y1 := float_min
  each sub n
    position_include sub n
  if n:area:x0=float_max
    memory_free n:extra ; n extra := null

function position_translate n tx ty
  arg_rw DocumentNode n ; arg Float tx ty
  if n:has_area
    n:area x0 += tx
    n:area y0 += ty
    n:area x1 += tx
    n:area y1 += ty
  each sub n
    position_translate sub tx ty


method c draw_recurse n
  arg_rw DocumentContext c ; arg_rw DocumentNode n
  each sub n
    c draw sub


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