home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 December / PCWorld_2000-12_cd.bin / Komunikace / Comanche / help / apacheDocServer.tcl < prev    next >
Text File  |  2000-11-02  |  4KB  |  125 lines

  1.  
  2. # mime_magic and expires break :(
  3.  
  4. lappend auto_path ../xuibuilder
  5.  
  6. package require dom
  7. source ../xuibuilder/ddom.tcl
  8.  
  9. namespace eval ::comanchehelp:: {
  10.     set outputDir /tmp/output/
  11. }
  12.  
  13. proc ::comanchehelp::processFile {module fileName} {
  14.     set f [open $fileName]
  15.     set apacheConf [dom::DOMImplementation parse [read $f]]
  16.     close $f 
  17.     set nodeList [dom::children [dom::rp $apacheConf html/body ]]
  18.  
  19.     while {[llength $nodeList]} {
  20.     set current [lindex $nodeList 0]
  21.     set nodeList [lrange $nodeList 1 end]
  22.  
  23.     # Need to put anything before Directives in module description
  24.  
  25.     # getTagName was moified so if node is text node, returns /textnode
  26.  
  27.     switch [dom::getTagName $current] {
  28.         h2 {
  29.         set directiveNodeList {}
  30.         if ![catch {set id [::dom::getAttribute [dom::rp $current a] id]} dummy] {
  31.             set directiveName $id
  32.  
  33.             # Some special cases like mod_auth_anon, dll, include, mime, so, proxy
  34.  
  35.             switch $directiveName {
  36.             Directives - Example - CompileTimeOptions - RevisionHistory 
  37.             - Person - Sourcecode - creating - flowctrl - multipleext - configs 
  38.             - creating {
  39.                             puts kk
  40.                 # (May be interesting to add them as pieces of information, 
  41.                 # but making distinction clear from directives??
  42.  
  43.             } browsermatch - metafiles - metadir - metasuffix 
  44.                 - cachenegotiateddocs - cookieexpires - cookiename 
  45.                 - cookietracking {
  46.  
  47.                 # No <hr> to separate directives
  48.                 
  49.             } nedtodosomethingforcgi {
  50.  
  51.             } default {
  52.                 set directiveDesc \
  53.                     [lindex [::dom::getText [dom::rp $current a]] 0]
  54.                 while {![string match [::dom::getTagName $current] hr]} {
  55.                 set current [lindex $nodeList 0]
  56.                 set nodeList [lrange $nodeList 1 end]
  57.                 lappend directiveNodeList $current
  58.                 }
  59.                 ::comanchehelp::processDirective \
  60.                     $module $directiveName $directiveDesc $directiveNodeList
  61.             }
  62.             }
  63.         } else {
  64.             
  65.         }
  66.         } {/textnode} {
  67.         } default {
  68.         }
  69.     }
  70.     }
  71.  
  72. }
  73.  
  74. proc ::comanchehelp::processDirective {module directiveName directiveDesc nodeList} {
  75.     variable outputDir
  76.     set result {}
  77.     append result "<h2>$directiveDesc</h2><br>"
  78.     foreach node $nodeList {
  79.     ::comanchehelp::processHtml $module $node
  80.     append result [dom::DOMImplementation serialize $node]
  81.     }
  82.     catch {file mkdir [file join $outputDir $module]} dummy
  83.     set f [open [file join $outputDir $module $directiveName.html] w]
  84.     puts $f $result
  85.     close $f
  86. }
  87.  
  88. proc ::comanchehelp::processHtml {module node} {
  89.     set result {}
  90.     switch [dom::getTagName $node] {
  91.     a {
  92.         set hrefName [::dom::getAttribute $node href]
  93.         if [string match "directive-dict.html#*" $hrefName] {
  94.         ::dom::setAttribute $node href "command showHelp help_definitions \
  95.                 [lindex [split $hrefName #] 1]"
  96.         } elseif [string match #* $hrefName] {
  97.         ::dom::setAttribute $node href "command showHelp $module \
  98.             [string trim $hrefName #]"
  99.         } elseif [string match mod*.html#* $hrefName] {
  100.         set list [split $hrefName #]
  101.         regexp mod_(.*)\.html [lindex $list 0] dummy module
  102.         set directive [lindex $list 1]
  103.         ::dom::setAttribute $node href "command showHelp $module $directive"
  104.         } else {
  105.         puts "Does not match [::dom::getAttribute $node href]"
  106.         }
  107.     } /textnode {
  108.     } hr {
  109.     } default {
  110.         foreach child [dom::children $node] {
  111.         ::comanchehelp::processHtml $module $child
  112.         }
  113.     }
  114.     }
  115.     return $result
  116. }
  117.  
  118. foreach file [glob /tmp/manual/*.html] {
  119.     puts "Processing $file"
  120.     if [regexp mod_(.*)\.html $file dummy module] {
  121.     ::comanchehelp::processFile $module $file
  122.     } elseif [regexp core.html $file dummy module] {
  123.     ::comanchehelp::processFile core $file
  124.     }
  125. }