Patch title: Release 96 bulk changes
Abstract:
File: /pliant/graphic/vector/font.page
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"
module "/pliant/storage/database.pli"
module "/pliant/protocol/http/style/draw.pli"
module "/pliant/graphic/color/gamut.pli"
module "/pliant/math/transform.pli"
module "/pliant/graphic/image/pixmap.pli"
module "/pliant/graphic/image/antialiasing.pli"
module "/pliant/graphic/filter/io.pli"
module "/pliant/admin/file.pli"
module "/pliant/util/encoding/http.pli"
module "font.pli"


method file attributes -> opt
  arg Data:FontFile file ; arg Str opt
  opt := file fullname
  if file:family<>""
    opt := replace file:fullname file:family ""
  opt := replace opt "-" " "
  for (var Int i) 1 opt:len-1
    if opt:i>="A" and opt:i<="Z" and opt:(i-1)>="a" and opt:(i-1)<="z"
      opt := (opt 0 i)+" "+(opt i opt:len)
  opt := lower opt
  for (var Int i) 1 5
    opt := replace opt "  " ""
    if (opt 0 1)=" "
      opt := opt 1 opt:len
    if opt:len>0 and opt:(opt:len-1)=" "
      opt := opt 0 opt:len-1
  if opt=""
    opt := "regular"


title "Fonts configuration"

if (options option "family" Str)<>""
  part select
    for (var Int lap) 0 6
      each c font_database:data:family:(options option "family" Str)
        var Data:FontFile file :> font_database:data:font keyof:c
        if file:attributes=(shunt lap=0 "regular" lap=1 "roman" lap=2 "book" lap=3 "italic" lap=4 "light" lap=5 "demi" lap=6 "bold" "")
          var Str image := "data:/pliant/graphic/font/"+file:family+".png"
          if (file_query image standard):datetime<>(file_query file:file standard):datetime
            var Float dpi := 75
            var Float scale := 5
            var Float mm_x := 16*scale
            var Float mm_x := 18*scale
            var Float mm_y := 1.5*scale
            var Link:ImagePixmap pixmap1 :> new ImagePixmap
            pixmap1 setup (image_prototype 0 0 mm_x mm_y (cast mm_x/25.4*dpi Int)*4 (cast mm_y/25.4*dpi Int)*4 color_gamut:"rgb") ""
            var uInt color := .not. 0
            for (var Int y) 0 pixmap1:size_y-1
              for (var Int x) 0 pixmap1:size_x-1
                memory_copy addressof:color (pixmap1 pixel x y) 3
            var Link:ImageAntiAliasing aa1 :> new ImageAntiAliasing
            aa1 bind pixmap1 4 4
            var Link:Font f1 :> font_postscript file:file ""
            if exists:f1
              var uInt color := 0
              pixmap1 text "H鬨ne comette AVION" f1 null (transform scale scale scale scale 0 0) addressof:color
              pixmap1 text "H鬨ne comette AVION 10Oa" f1 null (transform scale scale scale scale 0 0) addressof:color
              file_tree_create image
              aa1 save image "filter [dq].png[dq]"
              file_configure image "datetime "+(string (file_query file:file standard):datetime)
          if (file_query image standard)=defined
            reset_http_answer
            http_request send_static_file image "mime [dq]image/png[dq]"
            return

[List of available fonts:] ; eol
table columns 4
  cell header [Family]
  cell header [Available attributes]
  cell header [Sample]
  cell void
  each family font_database:data:family
    cell
      text keyof:family
    cell
      each c family
        var Data:FontFile file :> font_database:data:font keyof:c
        text file:attributes ; eol
    cell
      image "font.html?"+(http_encode "family "+(string keyof:family))
    cell
      page button "display"
        title keyof:family+" fonts family"
        table columns 3
          cell header
            [Fullname[lf]]
            small [PostScript name[lf]File[lf]MD5]
          cell header [Attributes]
          cell header [Sample]
          each c family
             var Data:FontFile file :> font_database:data:font keyof:c
            cell
              text file:fullname ; eol
              small
                text file:psname ; eol
                text file:file ; eol
                text keyof:file
            cell
              text file:attributes
            cell
              var Float dpi := 75
              var Float scale := 10
              var Float mm_x := 16*scale
              var Float mm_x := 18*scale
              var Float mm_y := 1.5*scale
              var Link:ImagePixmap pixmap :> new ImagePixmap
              pixmap setup (image_prototype 0 0 mm_x mm_y (cast mm_x/25.4*dpi Int)*4 (cast mm_y/25.4*dpi Int)*4 color_gamut:"rgb") ""
              var uInt color := .not. 0
              for (var Int y) 0 pixmap:size_y-1
                for (var Int x) 0 pixmap:size_x-1
                  memory_copy addressof:color (pixmap pixel x y) 3
              var Link:ImageAntiAliasing aa :> new ImageAntiAliasing
              aa bind pixmap 4 4
              var Link:Font f :> font_postscript file:file ""
              if exists:f
                var uInt color := 0
                pixmap text "H鬨ne comette AVION" f null (transform scale scale scale scale 0 0) addressof:color
                pixmap text "H鬨ne comette AVION 10Oa" f null (transform scale scale scale scale 0 0) addressof:color
                draw aa

[List of font aliases:] ; eol
table columns 3
  cell header [Name]
  cell header [is an alias for]
  cell header [Sample]
  each alias font_database:data:alias
    cell
      text keyof:alias
    var Data:FontFile file :> font_database:data:font alias
    if not exists:file
      cell color (color hsl 0 20 50)
        text alias
    else
      cell
        text alias
    cell
      image "font.html?"+(http_encode "family "+(string file:family))
if allowed:"administrator"
  input "Name " (var Str name) noeol
  input " is an alias for font with MD5 " (var Str md5) length 32 noeol
  button "define" noeol
    font_database:data:alias create name
    font_database:data:alias name := md5
    reload_page
  button "remove"
    font_database:data:alias delete name
    reload_page


if allowed:"administrator"
  para
    var Str path := "embedded:/usr/"
    input "Path: " path noeol
    button "scan for fonts"
      font_scan path
      reload_page