Patch title: Release 87 bulk changes
Abstract:
File: /pliant/math/curve/editor.page
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/appli/database.pli"
module "database.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/color/color.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/math/curve.pli"
module "/pliant/graphic/misc/float.pli"
module "/pliant/language/unsafe.pli"
module "/pliant/appli/database.pli"
module "database.pli"
module "/pliant/graphic/image/prototype.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/graphic/color/color.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/math/curve.pli"
module "/pliant/graphic/misc/float.pli"
module "/pliant/protocol/http/style/draw.pli"




if options<>""
  var Link:ImagePixmap img :> new ImagePixmap
  img setup (image_prototype 0 0 501 501 501 501 color_gamut
  var ColorRGB888 black ; black r := 0 ; black g := 0 ; blac
  var ColorRGB888 dark ; dark r := 40h ; dark g := 40h ; dar
  var ColorRGB888 middle ; middle r := 80h ; middle g := 80h
  var ColorRGB888 light ; light r := 0C0h ; light g := 0C0h 
  img fill 0 0 501 501 addressof:light
  for (var Int i) 0 500 step 5
    for (var Int j) 0 500 step 5
      (img pixel i j) map ColorRGB888 := shunt i%50=0 or j%5
  for (var Int i) 0 2
    for (var Int j) 0 2
      for (var Int k) -2 2
        var Int xx := i*250+k
        var Int yy := j*250
        if xx>=0 and xx<=500 and yy>=0 and yy<=500
          (img pixel xx yy) map ColorRGB888 := black
        var Int xx := i*250
        var Int yy := j*250+k
        if xx>=0 and xx<=500 and yy>=0 and yy<=500
          (img pixel xx yy) map ColorRGB888 := black
  var Float range_x := 1
  var Float range_y := 1
  each p curve_database:data:curve:options:point
    range_x := max range_x p:x
    range_y := max range_y p:y
  var Curve curve := curve_database:data:curve:options:curve
  if curve=success
    var ColorRGB888 blue ; blue r := 0 ; blue g := 0 ; blue 
    for (var Int u) 0 100
      var Int i := cast (curve x_param u/100)/range_x*500 In
      var Int j := cast (curve y_param u/100)/range_y*500 In
      if i>=0 and i<=500 and j>=0 and j<=500
        (img pixel i 500-j) map ColorRGB888 := blue
    var ColorRGB888 green ; green r := 0 ; green g := 192 ; 
    var ColorRGB888 red ; red r := 255 ; red g := 0 ; red b 
    var Float m := -1e99
    for (var Int i) 0 500
      var Float y := (curve y i/500*range_x 1e-6)/range_y
      if y=defined
        var Int j := cast y*500 Int
        if j>=0 and j<=500
          (img pixel i 500-j) map ColorRGB888 := shunt y>m g
          m := max m y
  reset_http_answer
  http_request answer_mime_type := "image/png"
  http_request send_header
  img save http_stream "filter [dq].png[dq]"
  http_request send_footer
  return
  
title "Pliant curve editor"

table columns 3
  each c curve_database:data:curve
    cell
      text keyof:c
    cell
      text c:comment
    cell
      page button "edit"
        title "'"+keyof:c+"' curve"
        text_input "Comment: " c:comment columns 80 rows 5
        para
title "Pliant curve editor"

table columns 3
  each c curve_database:data:curve
    cell
      text keyof:c
    cell
      text c:comment
    cell
      page button "edit"
        title "'"+keyof:c+"' curve"
        text_input "Comment: " c:comment columns 80 rows 5
        para
          image "editor.html?"+keyof:c
          var Link:ImagePixmap img :> new ImagePixmap
          img setup (image_prototype 0 0 501 501 501 501 color_gamut:"rgb") ""
          var ColorRGB888 black ; black r := 0 ; black g := 0 ; black b := 0
          var ColorRGB888 dark ; dark r := 40h ; dark g := 40h ; dark b := 40h
          var ColorRGB888 middle ; middle r := 80h ; middle g := 80h ; middle b := 80h
          var ColorRGB888 light ; light r := 0C0h ; light g := 0C0h ; light b := 0C0h
          for (var Int i) 0 500
            img fill 0 i 501 addressof:light
          for (var Int i) 0 500 step 5
            for (var Int j) 0 500 step 5
              (img pixel i j) map ColorRGB888 := shunt i%50=0 or j%50=0 black i%25=0 or j%25=0 dark middle
          for (var Int i) 0 2
            for (var Int j) 0 2
              for (var Int k) -2 2
                var Int xx := i*250+k
                var Int yy := j*250
                if xx>=0 and xx<=500 and yy>=0 and yy<=500
                  (img pixel xx yy) map ColorRGB888 := black
                var Int xx := i*250
                var Int yy := j*250+k
                if xx>=0 and xx<=500 and yy>=0 and yy<=500
                  (img pixel xx yy) map ColorRGB888 := black
          var Float range_x := 1
          var Float range_y := 1
          each p c:point
            range_x := max range_x p:x
            range_y := max range_y p:y
          var Curve curve := c curve
          if curve=success
            var ColorRGB888 blue ; blue r := 0 ; blue g := 0 ; blue b := 255
            for (var Int u) 0 100
              var Int i := cast (curve x_param u/100)/range_x*500 Int
              var Int j := cast (curve y_param u/100)/range_y*500 Int
              if i>=0 and i<=500 and j>=0 and j<=500
                (img pixel i 500-j) map ColorRGB888 := blue
            var ColorRGB888 green ; green r := 0 ; green g := 192 ; green b := 0
            var ColorRGB888 red ; red r := 255 ; red g := 0 ; red b := 0
            var Float m := -1e99
            for (var Int i) 0 500
              var Float y := (curve y i/500*range_x 1e-6)/range_y
              if y=defined
                var Int j := cast y*500 Int
                if j>=0 and j<=500
                  (img pixel i 500-j) map ColorRGB888 := shunt y>m green red
                  m := max m y
          draw img position
          button "redraw"
            reload_page
        table columns 4
          each p c:point
            cell
              text keyof:p
            cell
              input "" p:x length 10
            cell
              input "" p:y length 10
            cell
              select "" p:angle
                option "smooth" "false"
                option "angle" "true"
        input "Point ID: " (var Str id) noeol
        button "Create point" noeol
          c:point create id
          reload_page
        button "Delete point" noeol
          c:point delete id
          reload_page
        button "Back to curves list"
          goto_backward
        var Curve crv
        each p c:point
          if p:angle
            crv angle p:x p:y
          else
            crv through p:x p:y
        crv compute y_from_x
        if crv=success
          var Float range_x := 1
          each p c:point
            range_x := max range_x p:x
          table columns 2
            cell header [X] ; cell header [Y]
            for (var Int i) 0 100
              cell
                text (string i/100*range_x)
              cell
                text (string (cast (crv y i/100*range_x 1e-6
          table columns 3
            cell header [parameter] ; cell header [X] ; cell
            for (var Int i) 0 100
              cell
                text (string i/100)
              cell
                text (string (cast (crv x_param i/100)*1000 
              cell
                text (string (cast (crv y_param i/100)*1000 
input "Curve ID: " (var Str key) noeol
button "Create" noeol
  curve_database:data:curve create key
  reload_page
button "Delete"
  curve_database:data:curve delete key
  reload_page
  
          button "redraw"
            reload_page
        table columns 4
          each p c:point
            cell
              text keyof:p
            cell
              input "" p:x length 10
            cell
              input "" p:y length 10
            cell
              select "" p:angle
                option "smooth" "false"
                option "angle" "true"
        input "Point ID: " (var Str id) noeol
        button "Create point" noeol
          c:point create id
          reload_page
        button "Delete point" noeol
          c:point delete id
          reload_page
        button "Back to curves list"
          goto_backward
        var Curve crv
        each p c:point
          if p:angle
            crv angle p:x p:y
          else
            crv through p:x p:y
        crv compute y_from_x
        if crv=success
          var Float range_x := 1
          each p c:point
            range_x := max range_x p:x
          table columns 2
            cell header [X] ; cell header [Y]
            for (var Int i) 0 100
              cell
                text (string i/100*range_x)
              cell
                text (string (cast (crv y i/100*range_x 1e-6
          table columns 3
            cell header [parameter] ; cell header [X] ; cell
            for (var Int i) 0 100
              cell
                text (string i/100)
              cell
                text (string (cast (crv x_param i/100)*1000 
              cell
                text (string (cast (crv y_param i/100)*1000 
input "Curve ID: " (var Str key) noeol
button "Create" noeol
  curve_database:data:curve create key
  reload_page
button "Delete"
  curve_database:data:curve delete key
  reload_page