Patch title: beautifier (new)
Abstract:
Here it is again...
File: /pliant/protocol/http/server.pli
Key:
    Removed line
    Added line
   
abstract
  [Pliant HTTP server implementation, according to RFC2616] 
  [This implementation also contains a very powerfull mecani



abstract
  [Pliant HTTP server implementation, according to RFC2616] 
  [This implementation also contains a very powerfull mecani



public
type DynamicPage
  field Str filename position
  field DateTime datetime
  field DateTime checkedat
  field CBool changed
  field Link:Function function
  field Link:Type type
type DynamicPage
  field Str filename position
  field DateTime datetime
  field DateTime checkedat
  field CBool changed
  field Link:Function function
  field Link:Type type

private
# dynamic pages issues
gvar Dictionary dynamic_pages
gvar Sem dynamic_pages_sem



method server do_compile_dynamic_page pagename physical name
  arg_rw HttpServer server ; arg Str pagename physical name 
  pliant_compiler_semaphore request
  http_trace trace "compiling page " name
  http_current_pagename := pagename
  http_current_filename := physical
  http_current_datetime := (file_query physical standard) da
  var Link:List program :> new List
  var Pointer:Str eod :> lines first ; var Int linenum := 0
  var Pointer:Str l :> lines first ; var Int n := 0 ; var CB
  while exists:l
    if (l parse word:"style" (var Str modname)) and ( (l 0 5
      eod :> lines next l ; linenum := n+1
    eif (l parse word:"module" (var Str modname)) and ( (l 0
      eod :> lines next l ; linenum := n+1
    if (l 0 3)="if "
      within_if := true
    eif (l 0 2)<>"  "
      within_if := false
    l :> lines next l ; n += 1
  var Pointer:Str l :> lines first
  while addressof:l<>addressof:eod
    program append addressof:(new Str l)
    l :> lines next l
  program append addressof:(new Str "function '"+name+"' pag
  program append addressof:(new Str "  arg_rw HtmlPage page"
  program append addressof:(new Str "  implicit page")
  program append addressof:(new Str "    [0]left_zero_is_at 
  while exists:l
    program append addressof:(new Str "    "+l)
    l :> lines next l
  var Link:Module module :> new Module
  module name := name
  if exists:count
    module:properties kmap "pliant style standard button cou
  plugin standard_modules
    module include the_module:"/pliant/language/basic/safe.p
    module include the_module:"/pliant/language/parser/posit
    module include the_module:"/pliant/protocol/http/server.
    pliant_load_module "/pliant/protocol/http/style/default.
    module include the_module:"/pliant/protocol/http/style/d
  plugin extra_modules
  error_push_record (var ErrorRecord e) error_filter_all
  compile_text program module
  if e:id=error_id_noerror
    function :> (pliant_general_dictionary first name) map F
    check exists:function
    pliant_general_dictionary remove name addressof:function
    err := ""
    var Pointer:Arrow c :> module:properties first "style"
    while c<>null
      function:properties insert "style" false c
      c :> module:properties next "style" c
# dynamic pages issues
gvar Dictionary dynamic_pages
gvar Sem dynamic_pages_sem



method server do_compile_dynamic_page pagename physical name
  arg_rw HttpServer server ; arg Str pagename physical name 
  pliant_compiler_semaphore request
  http_trace trace "compiling page " name
  http_current_pagename := pagename
  http_current_filename := physical
  http_current_datetime := (file_query physical standard) da
  var Link:List program :> new List
  var Pointer:Str eod :> lines first ; var Int linenum := 0
  var Pointer:Str l :> lines first ; var Int n := 0 ; var CB
  while exists:l
    if (l parse word:"style" (var Str modname)) and ( (l 0 5
      eod :> lines next l ; linenum := n+1
    eif (l parse word:"module" (var Str modname)) and ( (l 0
      eod :> lines next l ; linenum := n+1
    if (l 0 3)="if "
      within_if := true
    eif (l 0 2)<>"  "
      within_if := false
    l :> lines next l ; n += 1
  var Pointer:Str l :> lines first
  while addressof:l<>addressof:eod
    program append addressof:(new Str l)
    l :> lines next l
  program append addressof:(new Str "function '"+name+"' pag
  program append addressof:(new Str "  arg_rw HtmlPage page"
  program append addressof:(new Str "  implicit page")
  program append addressof:(new Str "    [0]left_zero_is_at 
  while exists:l
    program append addressof:(new Str "    "+l)
    l :> lines next l
  var Link:Module module :> new Module
  module name := name
  if exists:count
    module:properties kmap "pliant style standard button cou
  plugin standard_modules
    module include the_module:"/pliant/language/basic/safe.p
    module include the_module:"/pliant/language/parser/posit
    module include the_module:"/pliant/protocol/http/server.
    pliant_load_module "/pliant/protocol/http/style/default.
    module include the_module:"/pliant/protocol/http/style/d
  plugin extra_modules
  error_push_record (var ErrorRecord e) error_filter_all
  compile_text program module
  if e:id=error_id_noerror
    function :> (pliant_general_dictionary first name) map F
    check exists:function
    pliant_general_dictionary remove name addressof:function
    err := ""
    var Pointer:Arrow c :> module:properties first "style"
    while c<>null
      function:properties insert "style" false c
      c :> module:properties next "style" c
    function:properties insert "module" true addressof:module  
  else
    function :> null map Function
    err := e message
    e id := error_id_noerror
  error_pull_record e
  if exists:count
    count := module:properties kmap "pliant style standard b
  module :> null map Module
  pliant_compiler_semaphore release


method request send_static_file filename options -> status
  arg_rw HttpRequest request ; arg Str filename options ; ar
  var Str ext
  if (options parse "filter_" any:ext _ any)
    void
  eif (options parse "filter_" any:ext)
    void
  else
    ext := filename (filename search_last "." filename:len) 
  var FileInfo info := file_query filename standard
  if info=undefined or info:is_directory
    return failure
  if not (request modified_since info:datetime)
    request answer_status := "304 Not modified"
    request answer_is_dynamic := false
    request send_header
    request send_footer
    return success
  var Stream data ; data open filename in+safe
  if data=failure
    return failure
  else
    function :> null map Function
    err := e message
    e id := error_id_noerror
  error_pull_record e
  if exists:count
    count := module:properties kmap "pliant style standard b
  module :> null map Module
  pliant_compiler_semaphore release


method request send_static_file filename options -> status
  arg_rw HttpRequest request ; arg Str filename options ; ar
  var Str ext
  if (options parse "filter_" any:ext _ any)
    void
  eif (options parse "filter_" any:ext)
    void
  else
    ext := filename (filename search_last "." filename:len) 
  var FileInfo info := file_query filename standard
  if info=undefined or info:is_directory
    return failure
  if not (request modified_since info:datetime)
    request answer_status := "304 Not modified"
    request answer_is_dynamic := false
    request send_header
    request send_footer
    return success
  var Stream data ; data open filename in+safe
  if data=failure
    return failure
  var Str opt := options
  var Str opt := options+" name "+string:filename
  var Link:Function filter :> query_mime_static_filter ext
  if exists:filter
    var Str tempname := file_temporary
    var Stream temp ; temp open tempname out+safe
    if temp=failure
      return failure
    mime_filter data temp opt filter
    data close ; temp close
    info size := (file_query tempname standard) size
    data open tempname in+safe
    if data=failure
      file_delete tempname
      return failure
  var Str mime := opt option "mime" Str
  if mime=""
    mime := query_mime_type ext
  if mime=""
    mime := "binary/*"
  request answer_mime_type := mime
  request answer_size := info size
  request answer_datetime := info datetime
  request answer_is_dynamic := false
  request answer_encoding := ""
  request send_header
  part send "send static file content"
    var Int remain := info size
    while remain>0 and { var Int step := raw_copy data reque
      remain -= step
    request:stream flush anytime
  data close
  if exists:filter
    file_delete tempname
  if remain<>0
    request keep_alive_applyed := false
  request send_footer
  status := success
  


export '. temporary_cleanup'
export '. send_static_file' '. execute_dynamic_page' '. do_c
  var Link:Function filter :> query_mime_static_filter ext
  if exists:filter
    var Str tempname := file_temporary
    var Stream temp ; temp open tempname out+safe
    if temp=failure
      return failure
    mime_filter data temp opt filter
    data close ; temp close
    info size := (file_query tempname standard) size
    data open tempname in+safe
    if data=failure
      file_delete tempname
      return failure
  var Str mime := opt option "mime" Str
  if mime=""
    mime := query_mime_type ext
  if mime=""
    mime := "binary/*"
  request answer_mime_type := mime
  request answer_size := info size
  request answer_datetime := info datetime
  request answer_is_dynamic := false
  request answer_encoding := ""
  request send_header
  part send "send static file content"
    var Int remain := info size
    while remain>0 and { var Int step := raw_copy data reque
      remain -= step
    request:stream flush anytime
  data close
  if exists:filter
    file_delete tempname
  if remain<>0
    request keep_alive_applyed := false
  request send_footer
  status := success
  


export '. temporary_cleanup'
export '. send_static_file' '. execute_dynamic_page' '. do_c
export '. find_dynamic_page'