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

  1. class genericParser {
  2.     variable stack
  3.     variable specialCaseMapping
  4.     public variable mainConfFile {}
  5.     variable currentContainer
  6.     variable rootContainer
  7.     
  8.     # We need to know the current file we are parsing, to 
  9.     # properly handle multiple relative includes
  10.     # httpd.conf includes jser/jserv.conf with in turns includes kk.conf
  11.  
  12.     variable currentFile
  13.  
  14.     public variable dirDefinition
  15.     public variable xmlConf
  16.  
  17.     constructor { dirDefinitionV xmlConfV } {
  18.     set dirDefinition $dirDefinitionV
  19.     set xmlConf $xmlConfV
  20.     set stack [stack ::#auto]
  21.     }          
  22.     method setSpecialCase { specialCaseObject args }
  23.     method init { {confFile {}} }
  24.     method parseFile { file }
  25.     method parseLine { text }
  26.     method getDirectiveName
  27.     method getDirectiveValue
  28.     method getSpecialCasesForXuiDir
  29. }
  30.  
  31.  
  32.  
  33. body genericParser::getSpecialCasesForXuiDir { xuiDirName } {
  34.     set result {}
  35.     #puts "xuiDirName $xuiDirName"
  36.     parray specialCaseMapping
  37.     foreach directive [array names specialCaseMapping] {
  38.     if [string match $xuiDirName $specialCaseMapping($directive)] {
  39.         append result ,$directive
  40.     }
  41.     }
  42.     return [string trimleft $result ,]
  43.  
  44. body genericParser::setSpecialCase { procedure args } {
  45.     foreach directive $args {
  46.     set specialCaseMapping([string tolower $directive]) $procedure
  47.    }
  48. }
  49.  
  50. body genericParser::init { {confFile {}} } {
  51.     if ![llength $confFile] {
  52.     if ![llength $mainConfFile] {
  53.         error "There is not configuration file defined"
  54.     } 
  55.     set confFile $mainConfFile
  56.     }
  57.     $stack clear
  58.     $xmlConf clear
  59.     set rootContainer [set currentContainer [ $xmlConf getRootContainer ]]
  60.     set currentFile $confFile
  61.     $this parseFile $confFile
  62. }
  63.  
  64. body genericParser::parseFile { filename } {
  65.     set tmpFile $currentFile
  66.     set currentFile $filename
  67.     set f [open $filename]
  68.     while {![eof $f]} {
  69.     gets $f line
  70.     parseLine $line
  71.     }
  72.     close $f   
  73.     set currentFile $tmpFile
  74. }
  75.  
  76.