Patch title: Release 87 bulk changes
Abstract:
File: /pliant/appli/type_browser.pli
Key:
    Removed line
    Added line
   
# Copyright  Patrice Ossona de Mendez
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License version 2
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# version 2 along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

module "/pliant/language/os.pli"
module "/pliant/language/compiler.pli"
module "type_browser/page.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"


function compute_tindex -> newd
  arg Link:(Index Str Address) newd
  newd :> new (Index Str Address)
  each t pliant_general_dictionary type Type
    if t:name:0<>"("
      newd insert t:name addressof:t
  
method page listtypes
  arg_rw HtmlPage page
  var Link:(Index Str Address) newd :> compute_tindex
  var Int x:=0
  implicit page
    table columns 2 border 0
      var Pointer:Address c :> newd first
      while addressof:c<>null
        var Pointer:Type t :> c map Type
        var Str source := t:position 0 (t:position search " 
        cell
module "/pliant/language/os.pli"
module "/pliant/language/compiler.pli"
module "type_browser/page.pli"
module "/pliant/protocol/http/server.pli"
module "/pliant/protocol/http/style/default.style"


function compute_tindex -> newd
  arg Link:(Index Str Address) newd
  newd :> new (Index Str Address)
  each t pliant_general_dictionary type Type
    if t:name:0<>"("
      newd insert t:name addressof:t
  
method page listtypes
  arg_rw HtmlPage page
  var Link:(Index Str Address) newd :> compute_tindex
  var Int x:=0
  implicit page
    table columns 2 border 0
      var Pointer:Address c :> newd first
      while addressof:c<>null
        var Pointer:Type t :> c map Type
        var Str source := t:position 0 (t:position search " 
        cell
         link t:name "type/"+(http_encode t:name)+".html"
         link t:name t:name no_extension
        cell
         if source<>""
           text "  (defined in "
           link source source section "type "+t:name
           text ")"
         else
           fixed:[ ]
        c :> newd next c

        cell
         if source<>""
           text "  (defined in "
           link source source section "type "+t:name
           text ")"
         else
           fixed:[ ]
        c :> newd next c

method page type_browser vpath
  arg_rw HtmlPage page; arg Str vpath
method page type_browser tname
  arg_rw HtmlPage page; arg Str tname
  implicit page
  implicit page
    if vpath="/type"
    if tname=""
      title "Type Browser"
      para
        [You may access directly a type using the following 
        eol
        [To enter complex data types, please use parenthesiz
        eol
        var Link:(Index Str Address) td :> compute_tindex 
        var Str ttt:=""
        table columns 3 border 0
          cell
            [Choose a type in the list]
          cell
            select "" (var Str tt) noeol
              var Pointer:Address v :> td first
              while addressof:v<>null
                option (td key v) (td key v)
                v :> td next v
          cell
            fixed:[  ]
          cell
            [... or enter it here]
          cell
            input "" ttt noeol
          cell
            button "See the description"
              goto_url "type/"+http_encode:(shunt ttt="" tt 
      para
        [Here is an indicative list of Pliant types: we list
        [ in the ];fixed:[pliant_general_dictionary];[ and w
        [with a ];fixed:['('];[ is listed here).]
      para
       listtypes
      title "Type Browser"
      para
        [You may access directly a type using the following 
        eol
        [To enter complex data types, please use parenthesiz
        eol
        var Link:(Index Str Address) td :> compute_tindex 
        var Str ttt:=""
        table columns 3 border 0
          cell
            [Choose a type in the list]
          cell
            select "" (var Str tt) noeol
              var Pointer:Address v :> td first
              while addressof:v<>null
                option (td key v) (td key v)
                v :> td next v
          cell
            fixed:[  ]
          cell
            [... or enter it here]
          cell
            input "" ttt noeol
          cell
            button "See the description"
              goto_url "type/"+http_encode:(shunt ttt="" tt 
      para
        [Here is an indicative list of Pliant types: we list
        [ in the ];fixed:[pliant_general_dictionary];[ and w
        [with a ];fixed:['('];[ is listed here).]
      para
       listtypes
    eif (vpath eparse "/type/" any:(var Str tname) ".html")
      tname := http_decode tname
    else
      var Pointer:Type t :> get_type tname
      if addressof:t=null
        title "Type [dq]"+tname+"[dq] unknown"
      else
        var Str source := t:position 0 (t:position search " 
        title "Description of [dq]"+tname+"[dq] Data Type"
        if source<>""
          para
            [The type [dq]]; text tname; [[dq] is defined in
            link source source section "type "+t:name
            [ module.]
        var Pointer:List mb :> t maybe
        var Pointer:Arrow c :> mb first
        var Str mbt mbs
        if c<>null
          header "Maybe list"
          text "Type "+t:name+" may be "
          mbt := (c map Type):name
          mbs := (c map Type):position
          mbs := mbs 0 (mbs search " " mbs:len)
          if mbs<>""
            link mbt mbs section "type "+mbt
          else
            bold
              text mbt
          while {c :> mb next c; c<>null}
            text ", "
            mbt := (c map Type):name
            mbs := (c map Type):position
            mbs := mbs 0 (mbs search " " mbs:len)
            if mbs<>""
              link mbt mbs section "type "+mbt
            else
              bold
                text mbt
        header "Type description"
        center
          show_type t
        header "Type methods"
        show_methods t
        header "Casts to "+tname
        center
          show_castto t
        header "Casts from "+tname
        center
          show_castfrom t
    
    

      var Pointer:Type t :> get_type tname
      if addressof:t=null
        title "Type [dq]"+tname+"[dq] unknown"
      else
        var Str source := t:position 0 (t:position search " 
        title "Description of [dq]"+tname+"[dq] Data Type"
        if source<>""
          para
            [The type [dq]]; text tname; [[dq] is defined in
            link source source section "type "+t:name
            [ module.]
        var Pointer:List mb :> t maybe
        var Pointer:Arrow c :> mb first
        var Str mbt mbs
        if c<>null
          header "Maybe list"
          text "Type "+t:name+" may be "
          mbt := (c map Type):name
          mbs := (c map Type):position
          mbs := mbs 0 (mbs search " " mbs:len)
          if mbs<>""
            link mbt mbs section "type "+mbt
          else
            bold
              text mbt
          while {c :> mb next c; c<>null}
            text ", "
            mbt := (c map Type):name
            mbs := (c map Type):position
            mbs := mbs 0 (mbs search " " mbs:len)
            if mbs<>""
              link mbt mbs section "type "+mbt
            else
              bold
                text mbt
        header "Type description"
        center
          show_type t
        header "Type methods"
        show_methods t
        header "Casts to "+tname
        center
          show_castto t
        header "Casts from "+tname
        center
          show_castfrom t