home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / ilstrsecti.tcl < prev    next >
Text File  |  1997-01-09  |  4KB  |  182 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. #      (c)     Westmount Technology    1994
  4. #
  5. #      File:           @(#)ilstrsecti.tcl    /main/hindenburg/2
  6. #      Author:         <generated>
  7. #      Description:
  8. #---------------------------------------------------------------------------
  9. # SccsId = @(#)ilstrsecti.tcl    /main/hindenburg/2   9 Jan 1997 Copyright 1994 Westmount Technology
  10.  
  11. # Start user added include file section
  12. require "ilstrconge.tcl"
  13. # End user added include file section
  14.  
  15. require "ilsection.tcl"
  16.  
  17. Class IlStrSection : {IlSection} {
  18.     constructor
  19.     method destructor
  20.     method promoter
  21.     method updateDocDir
  22.     method updateRepository
  23.     method genAttribInfo
  24.     method generateTypeContents
  25.     method contentsGenerator
  26.     attribute _contentsGenerator
  27. }
  28.  
  29. constructor IlStrSection {class this name document} {
  30.     set this [IlSection::constructor $class $this $name $document]
  31.     # Start constructor user section
  32.     # End constructor user section
  33.     return $this
  34. }
  35.  
  36. method IlStrSection::destructor {this} {
  37.     set ref [$this _contentsGenerator]
  38.     if {$ref != ""} {
  39.         $ref _section ""
  40.     }
  41.     # Start destructor user section
  42.     # End destructor user section
  43.     $this IlSection::destructor
  44. }
  45.  
  46. method IlStrSection::promoter {this document} {
  47.     $this IlSection::promoter $document
  48.  
  49.     $this uiType Structure
  50.     global classCount 
  51.     $this _contentsGenerator [IlStrConGen new IlStrConGen$classCount $this]
  52.     incr classCount
  53. }
  54.  
  55. method IlStrSection::updateDocDir {this} {
  56.  
  57.     # Convert structure file [[$this section] docLocation]
  58.     # and retrieve the Interleaf attribute-files from it
  59.  
  60.     $this synchWithFileSystem
  61.     set strFile [$this docLocation]
  62.  
  63.     if {[catch {set struct [open $strFile r]} reason]} {
  64.         wmtkerror "Error on opening '$strFile' for reading: $reason"
  65.         unlink $strFile
  66.         return 0
  67.     } 
  68.  
  69.     set dot ""
  70.  
  71.     while {![eof $struct]} {
  72.         if {[gets $struct line] == -1} {
  73.             break
  74.         }
  75.         if {[string match .@* $line]} {
  76.             if {$dot != ""} {
  77.                 close $dot
  78.                 set dot ""
  79.             }
  80.  
  81.             set name [string range $line 2 end]
  82.             set section [docTool findSection $name]
  83.             if {$section == ""} continue
  84.  
  85.             set file [[$this contentsGenerator] attribPath $section]
  86.             if {[catch {set dot [open $file w]} reason]} {
  87.                 wmtkerror "Error on opening '$file' \
  88.                     for writing: $reason"
  89.                 set dot ""
  90.             }
  91.         } else {
  92.             if {$dot != ""} {
  93.                 puts $dot $line
  94.             }
  95.         }
  96.     }
  97.     if {$dot != ""} {
  98.         close $dot
  99.     }
  100.  
  101.     return 1
  102. }
  103.  
  104. method IlStrSection::updateRepository {this} {
  105.  
  106.     # Convert Interleaf attribute-files to ascii
  107.     # and save them in structure [[$this section] docLocation]
  108.     # the copy to the repository
  109.  
  110.     $this lockForWrite updateRepository
  111.     set strFile [$this docLocation]
  112.  
  113.     if {[catch {set struct [open $strFile w]} reason]} {
  114.         wmtkerror "Error on opening '$strFile' for writing: $reason"
  115.         unlink $strFile
  116.         return 0
  117.     } 
  118.  
  119.     set comp [[docTool structure] firstComponent]
  120.     for {} {$comp != ""} {set comp [$comp next]} {
  121.         set section [docTool findSection [$comp uiName]]
  122.         if {$section != ""} {
  123.             $this genAttribInfo $struct $section
  124.         }
  125.     }
  126.  
  127.     close $struct
  128.  
  129.     set result [$this upLoad $strFile]
  130.     $this unlock
  131.  
  132.     return $result
  133. }
  134.  
  135. method IlStrSection::genAttribInfo {this fid section} {
  136.  
  137.     set file [[$this contentsGenerator] attribPath $section]
  138.  
  139.     puts $fid ".@[$section uiName]"
  140.  
  141.     if {[catch {set dot [open $file r]} reason]} {
  142.         wmtkerror "Error on opening '$file' for reading: $reason"
  143.     } else {
  144.         set skip 1
  145.         while {![eof $dot]} {
  146.             if {[gets $dot line] == -1} {
  147.                 break
  148.             }
  149.             if {[string match *\(system_attributes* $line]} {
  150.                 set skip 0
  151.             }
  152.             if {!$skip} {
  153.                 puts $fid $line
  154.             }
  155.         }
  156.         close $dot
  157.     }
  158. }
  159.  
  160. method IlStrSection::generateTypeContents {this} {
  161.     
  162.     [$this contentsGenerator] generate
  163. }
  164.  
  165. # Do not delete this line -- regeneration end marker
  166.  
  167. method IlStrSection::contentsGenerator {this args} {
  168.     if {$args == ""} {
  169.         return [$this _contentsGenerator]
  170.     }
  171.     set ref [$this _contentsGenerator]
  172.     if {$ref != ""} {
  173.         $ref _section ""
  174.     }
  175.     set obj [lindex $args 0]
  176.     if {$obj != ""} {
  177.         $obj _section $this
  178.     }
  179.     $this _contentsGenerator $obj
  180. }
  181.  
  182.