Patch title: Release 94 bulk changes
Abstract:
File: /pliant/graphic/browser/server/draw.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/graphic/browser/server/context.pli"
module "/pliant/util/pml/io.pli"
module "/pliant/math/curve.pli"
module "/pliant/math/curve/mode.pli"
module "/pliant/math/transform.pli"
module "/pliant/graphic/color/color.pli"


method c draw_begin x0 y0 x1 y1
  arg_rw BrowserServerContext c ; arg Float x0 y0 x1 y1
  c:connection oraw open (cast "draw" Ident) x0 y0 x1 y1 body

method c draw_end
  arg_rw BrowserServerContext c
  c:connection oraw close

meta '. draw' e
  if e:size<>6 or not (e:0 cast BrowserServerContext)
    return
  if not (e:1 cast Float) or not (e:2 cast Float) or not (e:3 cast Float) or not (e:4 cast Float)
    return
  e:5 compile ?
  e suckup e:0
  e suckup e:1
  e suckup e:2
  e suckup e:3
  e suckup e:4
  e add (instruction (the_function '. draw_begin' BrowserServerContext Float Float Float Float) e:0:result e:1:result e:2:result e:3:result e:4:result)
  e suckup e:5
  e add (instruction (the_function '. draw_end' BrowserServerContext) e:0:result)
  e set_void_result


method c fill_begin color
  arg_rw BrowserServerContext c ; arg ColorRGB888 color
  c:connection oraw open (cast "fill" Ident)
  c:connection oraw open (cast "rgb" Ident) (cast color:r Int) (cast color:g Int) (cast color:b Int) close
  c:connection oraw body

method c fill_end
  arg_rw BrowserServerContext c
  c:connection oraw close

meta '. fill' e
  if e:size<>3 or not (e:0 cast BrowserServerContext)
    return
  if not (e:1 cast ColorRGB888)
    return
  e:2 compile ?
  e suckup e:0
  e suckup e:1
  e add (instruction (the_function '. fill_begin' BrowserServerContext ColorRGB888) e:0:result e:1:result)
  e suckup e:2
  e add (instruction (the_function '. fill_end' BrowserServerContext) e:0:result)
  e set_void_result


method c curve_begin
  arg_rw BrowserServerContext c
  c:connection oraw open (cast "c" Ident) outline body

method c curve_end
  arg_rw BrowserServerContext c
  c:connection oraw close

meta '. curve' e
  if e:size<>2 or not (e:0 cast BrowserServerContext)
    return
  e:1 compile ?
  e suckup e:0
  e add (instruction (the_function '. curve_begin' BrowserServerContext) e:0:result)
  e suckup e:1
  e add (instruction (the_function '. curve_end' BrowserServerContext) e:0:result)
  e set_void_result



method c angle x y
  arg_rw BrowserServerContext c ; arg Float x y
  c:connection oraw open (cast "a" Ident) x y close

method c through x y
  arg_rw BrowserServerContext c ; arg Float x y
  c:connection oraw open (cast "t" Ident) x y close

method c curve_point x y in_mode in_x in_y out_mode out_x out_y
  arg_rw BrowserServerContext c ; arg Float x y ; arg Int in_mode ; arg Float in_x in_y ; arg Int out_mode ; arg Float out_x out_y
  c:connection oraw open (cast "p" Ident) x y
  if in_mode<>undefined
    c:connection oraw (cast "i" Ident) in_mode in_x in_y
  if out_mode<>undefined
    c:connection oraw (cast "o" Ident) out_mode out_x out_y
  c:connection oraw close

meta '. point' e
  if e:size<3 or not (e:0 cast BrowserServerContext) or not (e:1 cast Float) or not (e:2 cast Float)
    return
  var Link:Argument in_mode :> argument constant Int undefined
  var Link:Argument in_x :> argument constant Float undefined
  var Link:Argument in_y :> argument constant Float undefined
  var Link:Argument out_mode :> argument constant Int undefined
  var Link:Argument out_x :> argument constant Float undefined
  var Link:Argument out_y :> argument constant Float undefined
  e suckup e:0 ; e suckup e:1 ; e suckup e:2
  var Int i := 3
  while i<e:size
    if not e:i:is_pure_ident
      return
    eif e:i:ident="in" and i+2<e:size and ((e i+1) cast Float) and ((e i+2) cast Float)
      in_mode :> argument constant Int curvepoint_manual
      e suckup (e i+1)
      in_x :> (e i+1) result
      e suckup (e i+2)
      in_y :> (e i+2) result
      i += 3
    eif e:i:ident="tg_in" and i+2<e:size and ((e i+1) cast Float) and ((e i+2) cast Float)
      in_mode :> argument constant Int curvepoint_directed
      e suckup (e i+1)
      in_x :> (e i+1) result
      e suckup (e i+2)
      in_y :> (e i+2) result
      i += 3
    eif e:i:ident="auto_in"
      in_mode :> argument constant Int curvepoint_automatic
      i += 1
    eif e:i:ident="out" and i+2<e:size and ((e i+1) cast Float) and ((e i+2) cast Float)
      out_mode :> argument constant Int curvepoint_manual
      e suckup (e i+1)
      out_x :> (e i+1) result
      e suckup (e i+2)
      out_y :> (e i+2) result
      i += 3
    eif e:i:ident="tg_out" and i+2<e:size and ((e i+1) cast Float) and ((e i+2) cast Float)
      out_mode :> argument constant Int curvepoint_directed
      e suckup (e i+1)
      out_x :> (e i+1) result
      e suckup (e i+2)
      out_y :> (e i+2) result
      i += 3
    eif e:i:ident="auto_out"
      out_mode :> argument constant Int curvepoint_automatic
      i += 1
    else
      return
  e add (instruction (the_function '. curve_point' BrowserServerContext Float Float Int Float Float Int Float Float) e:0:result e:1:result e:2:result in_mode in_x in_y out_mode out_x out_y)
  e set_void_result


export '. draw'
export '. fill' '. curve' '. angle' '. through' '. point'