Patch title: Release 84 bulk changes
Abstract:
File: /pliant/graphic/color/spectrum.pli
Key:
    Removed line
    Added line
   
abstract
  [Color spectrum handling functions]


constant X_spec "from 380 to 775 step 5 spectrum 0.0014 0.00
constant Y_spec "from 385 to 760 step 5 spectrum 0.0001 0.00
constant Z_spec "from 380 to 625 step 5 spectrum 0.0065 0.01
constant D50_spec "from 300 to 830 step 5 spectrum 0.02 1.03
abstract
  [Color spectrum handling functions]


constant X_spec "from 380 to 775 step 5 spectrum 0.0014 0.00
constant Y_spec "from 385 to 760 step 5 spectrum 0.0001 0.00
constant Z_spec "from 380 to 625 step 5 spectrum 0.0065 0.01
constant D50_spec "from 300 to 830 step 5 spectrum 0.02 1.03
# constant D55_spec "from 400 to 700 step 10 spectrum 60.95 68.55 71.58 67.91 85.61 97.99 100.46 99.91 102.74 98.08 100.68 100.70 99.99 104.21 102.10 102.97 100.00 97.22 97.75 91.43 94.42 95.14 94.22 90.45 92.33 88.85 90.32 93.95 89.96 79.68 82.84"
constant D55_spec "from 360 to 830 step 10 spectrum 30.5985 34.2841 32.5540 38.0560 60.9021 68.5057 71.5311 67.8734 85.5608 97.9481 100.4224 99.8776 102.7072 98.0524 100.6593 100.6783 99.9744 104.2004 102.0963 102.9651 100.0000 97.2186 97.7535 91.4415 94.4348 95.1597 94.2431 90.4725 92.3609 88.8867 90.3550 93.9930 90.0006 79.7135 82.8818 84.8819 70.2666 79.3356 85.0292 71.9107 52.8168 75.9602 71.8484 72.9666 67.3762 58.7513 65.0203 68.3353"
constant D65_spec "from 300 to 830 step 5 spectrum  300:0.03

constant D65_spec "from 300 to 830 step 5 spectrum  300:0.03

constant X10_spec "from 380 to 770 step 5 spectrum 0.0002 0.0007 0.0024 0.0072 0.0191 0.043 0.0847 0.1406 0.2045 0.2647 0.3147 0.3577 0.3837 0.3867 0.3707 0.3430 0.3023 0.2541 0.1956 0.1323 0.0805 0.0411 0.0162 0.0051 0.0038 0.0154 0.0375 0.0714 0.1177 0.1730 0.2365 0.3042 0.3768 0.4516 0.5298 0.6161 0.7052 0.7938 0.8787 0.9512 1.0142 1.0743 1.1185 1.1343 1.1240 1.0891 1.0305 0.9507 0.8563 0.7549 0.6475 0.5351 0.4316 0.3437 0.2683 0.2043 0.1526 0.1122 0.0813 0.0579 0.0409 0.0286 0.0199 0.0138 0.0096 0.0066 0.0046 0.0031 0.0022 0.0015 0.0010 0.0007 0.0005 0.0004 0.0003 0.0002 0.0001 0.0001 0.0001"
constant Y10_spec "from 385 to 755 step 5 spectrum 0.0001 0.0003 0.0008 0.0020 0.0045 0.0088 0.0145 0.0214 0.0295 0.0387 0.0496 0.0621 0.0747 0.0895 0.1063 0.1282 0.1528 0.1852 0.2199 0.2536 0.2977 0.3391 0.3954 0.4608 0.5314 0.6067 0.6857 0.7618 0.8233 0.8752 0.9238 0.9620 0.9822 0.9918 0.9991 0.9973 0.9824 0.9556 0.9152 0.8689 0.8256 0.7774 0.7204 0.6583 0.5939 0.5280 0.4618 0.3981 0.3396 0.2835 0.2283 0.1798 0.1402 0.1076 0.0812 0.0603 0.0441 0.0318 0.0226 0.0159 0.0111 0.0077 0.0054 0.0037 0.0026 0.0018 0.0012 0.0008 0.0006 0.0004 0.0003 0.0002 0.0001 0.0001 0.0001"
constant Z10_spec "from 380 to 555 step 5 spectrum 0.0007 0.0029 0.0105 0.0323 0.0860 0.1971 0.3894 0.6568 0.9725 1.2825 1.5535 1.7985 1.9673 2.0273 1.9948 1.9007 1.7454 1.5549 1.3176 1.0302 0.7721 0.5701 0.4153 0.3024 0.2185 0.1592 0.1120 0.0822 0.0607 0.0431 0.0305 0.0206 0.0137 0.0079 0.0040 0.0011"




function 'cast ColorSpectrum' s32 -> s
  arg ColorSpectrum32 s32 ; arg ColorSpectrum s
  explicit
  if s32=failure
    s := var ColorSpectrum no_spectrum
    return
  s set_step nm_step
  for (var Int i) 0 nm_count-1
    s set_measure nm_min+i*nm_step s32:measure:i

function color_spectrum32 ascii -> s32
  arg Str ascii ; arg ColorSpectrum32 s32
  if (ascii parse (var ColorSpectrum s))
    s32 := s
  else
    s32:measure 0 := undefined



function min s1 s2 -> s
  arg ColorSpectrum32 s1 s2 s
  for (var Int i) 0 nm_count-1
    s:measure i := min s1:measure:i s2:measure:i
  
function max s1 s2 -> s
  arg ColorSpectrum32 s1 s2 s
  for (var Int i) 0 nm_count-1
    s:measure i := max s1:measure:i s2:measure:i
  
function color_spectrum32 ascii -> s32
  arg Str ascii ; arg ColorSpectrum32 s32
  if (ascii parse (var ColorSpectrum s))
    s32 := s
  else
    s32:measure 0 := undefined



function min s1 s2 -> s
  arg ColorSpectrum32 s1 s2 s
  for (var Int i) 0 nm_count-1
    s:measure i := min s1:measure:i s2:measure:i
  
function max s1 s2 -> s
  arg ColorSpectrum32 s1 s2 s
  for (var Int i) 0 nm_count-1
    s:measure i := max s1:measure:i s2:measure:i
  

export ColorSpectrum32 'cast Status' 'cast ColorSpectrum32' 
export ColorSpectrum32 'cast Status' 'cast ColorSpectrum32' 'cast ColorSpectrum' color_spectrum32 '+' '-' '*' '/' '^' '. integral' '. modulus' min max
  


function unexposure y gg -> x
  arg Float y gg x
  var Float g := -8*gg
  x := (log y*(exp:g-1)+1)/g
  if x=undefined
    x := y
  


function unexposure y gg -> x
  arg Float y gg x
  var Float g := -8*gg
  x := (log y*(exp:g-1)+1)/g
  if x=undefined
    x := y

function contrast x c -> y
  arg Float x c y
  if x>=0.5
    y := (exposure 2*(x-0.5) c)/2+0.5
  else
    y := (exposure 2*x -c)/2

    
function exposure s1 e -> s
  arg ColorSpectrum32 s1 ; arg Float e ; arg ColorSpectrum32
  for (var Int i) 0 nm_count-1
    s:measure i := exposure s1:measure:i e
  
function unexposure s1 u -> s
  arg ColorSpectrum32 s1 ; arg Float u ; arg ColorSpectrum32
  for (var Int i) 0 nm_count-1
    s:measure i := unexposure s1:measure:i u
  
    
function exposure s1 e -> s
  arg ColorSpectrum32 s1 ; arg Float e ; arg ColorSpectrum32
  for (var Int i) 0 nm_count-1
    s:measure i := exposure s1:measure:i e
  
function unexposure s1 u -> s
  arg ColorSpectrum32 s1 ; arg Float u ; arg ColorSpectrum32
  for (var Int i) 0 nm_count-1
    s:measure i := unexposure s1:measure:i u
  
function contrast s1 c-> s
  arg ColorSpectrum32 s1 ; arg Float c ; arg ColorSpectrum32
  for (var Int i) 0 nm_count-1
    s:measure i := contrast s1:measure:i c
export exposure unexposure




export exposure unexposure contrast


#-----------------------------------------------------------


X_spectrum := color_spectrum32 X_spec
Y_spectrum := color_spectrum32 Y_spec
Z_spectrum := color_spectrum32 Z_spec
#-----------------------------------------------------------


X_spectrum := color_spectrum32 X_spec
Y_spectrum := color_spectrum32 Y_spec
Z_spectrum := color_spectrum32 Z_spec
# X_spectrum := color_spectrum32 X10_spec
# Y_spectrum := color_spectrum32 Y10_spec
# Z_spectrum := color_spectrum32 Z10_spec
illuminant_spectrum := 1/(color_spectrum32:D50_spec*Y_spectr
illuminant_spectrum := 1/(color_spectrum32:D50_spec*Y_spectr
# illuminant_spectrum := 1/(color_spectrum32:D55_spec*Y_spectrum integral) * color_spectrum32:D55_spec
# illuminant_spectrum := 1/(color_spectrum32:D65_spec*Y_spectrum integral) * color_spectrum32:D65_spec