Require bind.tcl
Require Class/basicSurfaceFromCurve

basicSurfaceFromCurve Subclass SurfaceFromCurve {
  Var "domain {[basicSurfaceFromCurve get domain]}"
  Method <Domain> {domain} {set [var domain] $domain}
  ClassVar "Domain-template {{[basicSurfaceFromCurve get domain]}}"

  Var {sf-uv s} sf-u sf-v
  Var "frame [basicSurfaceFromCurve get frame]"
  Method <Function> {uv script args} {
    global errorCode errorInfo
    if [set code [catch [list _bind(Rest) {{vscript {}}} \
        {{frame ""} {absolute ""}} $args [Self method <Function>]] err]] \
	{return -code $code -errorcode $errorCode -errorinfo $errorInfo $err}
    if {[llength $uv] != 1 && [llength $uv] != 2} \
      {Error "Function must be of one or two variables"}
    set [var sf-uv] $uv
    set [var sf-u] $script
    set [var sf-v] $vscript
    if {$frame != ""} {set [var frame] 1} else {set [var frame] 0}
  }
  ClassVar "Function-template {{s} {\n  let (x,y) = (s,s^2)\n}}"

  ClassVar {script-templates {Domain Function}}

  Method ScriptBegin {} {
    Vars domain sf-uv sf-u sf-v frame
    Parent ScriptBegin
    set domain [Parent get domain]
    set sf-uv [Parent get sf-uv]
    set sf-u {}
    set sf-v {}
    set frame [Parent get frame]
  }

  Method ScriptEnd {} {Parent ScriptEnd; Self SetUV}
}

SurfaceFromCurve Register
