Patch title: Release 94 bulk changes
Abstract:
File: /pliant/graphic/vector/stroke.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "/pliant/math/point.pli"
module "/pliant/math/vector.pli"
module "/pliant/math/curve.pli"
module "/pliant/math/curve/mode.pli"
module "/pliant/math/transform.pli"
module "/pliant/graphic/draw/prototype.pli"

module "/pliant/language/unsafe.pli"
module "/pliant/math/point.pli"
module "/pliant/math/vector.pli"
module "/pliant/math/curve.pli"
module "/pliant/math/curve/mode.pli"
module "/pliant/math/transform.pli"
module "/pliant/graphic/draw/prototype.pli"

constant epsilon 1e-3
constant default_epsilon 1e-3






method curve polyline -> points
  arg Curve curve ; arg Array:Point2 points
method curve polyline epsilon -> points
  arg Curve curve ; arg Float epsilon ; arg Array:Point2 points
  points := curve polyline transform epsilon
  var Int j := 1
  while j<points:size
    if (norme (points j)-(points j-1))<epsilon/10
      for (var Int k) j points:size-2
        points k := points k+1
      points size -= 1
    else
      j += 1


method d stroke curves width options t color
  oarg_rw DrawPrototype d ; arg Array:Curve curves ; arg Flo
  var Int cap := options option "cap" Int 0
  var Int join := options option "join" Int 0
  var Float miter := options option "miter" Float 1.415
  points := curve polyline transform epsilon
  var Int j := 1
  while j<points:size
    if (norme (points j)-(points j-1))<epsilon/10
      for (var Int k) j points:size-2
        points k := points k+1
      points size -= 1
    else
      j += 1


method d stroke curves width options t color
  oarg_rw DrawPrototype d ; arg Array:Curve curves ; arg Flo
  var Int cap := options option "cap" Int 0
  var Int join := options option "join" Int 0
  var Float miter := options option "miter" Float 1.415
  var Float epsilon := options option "epsilon" Float default_epsilon
  for (var Int i) 0 curves:size-1
    if curves:i=success
      (var Array:Curve stroke) size := 0
  for (var Int i) 0 curves:size-1
    if curves:i=success
      (var Array:Curve stroke) size := 0
      var Array:Point2 points := curves:i polyline
      var Array:Point2 points := curves:i polyline epsilon
      if (curves:i:mode .and. outline)<>0
        if points:size>1 and (norme (points points:size-1)-(
          points size -= 1
        var Int m := points size
        (var Curve line) reset
        for (var Int j) 0 m-1
          corner (points j) (points (j+1)%m) (points (j+2)%m
        line compute outline
        if line=success
          stroke += line
        (var Curve line) reset
        for (var Int j) 0 m-1
          corner (points m-1-j) (points m-1-(j+1)%m) (points
        line compute outline
        if line=success
          stroke += line
      else
        (var Curve line) reset
        line += points:0+(resize (orthogonal points:1-points
        for (var Int j) 0 points:size-3
          corner (points j) (points j+1) (points j+2) width 
        line += (points points:size-1)+(resize (orthogonal (
        line += (points points:size-1)+(resize (orthogonal (
        for (var Int j) points:size-1 2 step -1
          corner (points j) (points j-1) (points j-2) width 
        line += points:0+(resize (orthogonal points:0-points
        line compute outline
        if line=success
          stroke += line
      if stroke:size>0
        d fill stroke fill_nonzero t color
        if false # width>1
          var Int all := -1
          d stroke stroke 0.5 "" t addressof:all



      if (curves:i:mode .and. outline)<>0
        if points:size>1 and (norme (points points:size-1)-(
          points size -= 1
        var Int m := points size
        (var Curve line) reset
        for (var Int j) 0 m-1
          corner (points j) (points (j+1)%m) (points (j+2)%m
        line compute outline
        if line=success
          stroke += line
        (var Curve line) reset
        for (var Int j) 0 m-1
          corner (points m-1-j) (points m-1-(j+1)%m) (points
        line compute outline
        if line=success
          stroke += line
      else
        (var Curve line) reset
        line += points:0+(resize (orthogonal points:1-points
        for (var Int j) 0 points:size-3
          corner (points j) (points j+1) (points j+2) width 
        line += (points points:size-1)+(resize (orthogonal (
        line += (points points:size-1)+(resize (orthogonal (
        for (var Int j) points:size-1 2 step -1
          corner (points j) (points j-1) (points j-2) width 
        line += points:0+(resize (orthogonal points:0-points
        line compute outline
        if line=success
          stroke += line
      if stroke:size>0
        d fill stroke fill_nonzero t color
        if false # width>1
          var Int all := -1
          d stroke stroke 0.5 "" t addressof:all