Patch title: Release 87 bulk changes
Abstract:
File: /pliant/graphic/browser/deprecated/parser.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/encoding/xml_parser.pli"
module "prototype.pli"

module "root.pli"
module "text.pli"
module "para.pli"
module "link.pli"
module "image.pli"
module "table.pli"
module "form.pli"
module "unsupported.pli"


type D2Parser
  field Str options

XmlParser maybe D2Parser

method parser new_text text ptr
  oarg_rw D2Parser parser ; arg Str text ; arg_w Arrow ptr
  var Link:D2Text t :> new D2Text
  t configure "" text parser:options
  ptr := addressof t

method parser is_raw_tag tag -> c
  oarg_rw XmlParser parser ; arg Str tag ; arg CBool c
  c := tag="script"

method parser new_tag tag ptr
  oarg_rw D2Parser parser ; arg Str tag ; arg_w Arrow ptr
  var Pointer:Type t :> (html_tags first lower:tag) map Type
  if not exists:t
    t :> D2Unsupported
  var Link:D2Box b :> entry_new:t map D2Box
  ptr := addressof b

method parser set_tag_attribute tag attribute value
  oarg_rw D2Parser parser ; arg Address tag ; arg Str attribute value
  (tag omap D2Box) configure lower:attribute value parser:options

method parser bind tag parent
  oarg_rw D2Parser parser ; arg Address tag parent
  var Pointer:(List Link:D2Box) list :> (parent omap D2Box) list
  if exists:list
    var Link:D2Box link :> tag omap D2Box
    list += link

function html_parse url form options -> box
  arg_rw Str url form options ; arg Link:D2Box box
  part load_url
    var ExtendedStatus status := (var Stream s) open url options+(shunt form<>"" " form "+string:form "") in+safe
    if status=failure and (status:message option "http_return_code" Int)=303
      var Int i := 0
      while { var Str opt := status:message option "http_answer_option" i Str ; opt<>"" }
        if (opt parse acword:"location" ":" any:(var Str newurl))
          # console "redirecting to " newurl eol
          url := url_concat url newurl ; form := "" ; restart load_url
        i += 1
  box :> new D2Root
  var Link:D2Parser parser :> new D2Parser
  parser options := "url "+string:url+" "+options
  parser parse s addressof:box

export html_parse