CypressAbstractWriter.st
changeset 17 d387df3d4e46
parent 15 31a33727c629
child 20 cdf3ee8ceeaa
equal deleted inserted replaced
16:75ff9255068a 17:d387df3d4e46
    43     notice := aString.
    43     notice := aString.
    44 
    44 
    45     "Modified (comment): / 17-09-2012 / 17:19:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    45     "Modified (comment): / 17-09-2012 / 17:19:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    46 ! !
    46 ! !
    47 
    47 
    48 !CypressAbstractWriter methodsFor:'accessing-filenames'!
       
    49 
       
    50 directoryNameForClass: cclass
       
    51     ^((cclass name copyReplaceAll: $: with: $_) , '.', self suffixForClass).
       
    52 
       
    53     "Created: / 17-09-2012 / 18:11:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    54 !
       
    55 
       
    56 directoryNameForExtensions: classname
       
    57     ^((classname copyReplaceAll: $: with: $_) , '.', self suffixForExtensions).
       
    58 
       
    59     "Created: / 17-09-2012 / 18:27:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    60 !
       
    61 
       
    62 directoryNameForPackage: aCypressPackage
       
    63 
       
    64     ^(aCypressPackage name copy
       
    65         replaceAll:$: with: $_;
       
    66         replaceAll:$/ with: $_;
       
    67         yourself) , '.' , self suffixForPackage
       
    68 
       
    69     "Created: / 17-09-2012 / 17:32:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    70 !
       
    71 
       
    72 fileNameForComment
       
    73     ^repository properties at:'commentFile' ifAbsent:['README.md']
       
    74 
       
    75     "Created: / 17-09-2012 / 18:07:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    76 !
       
    77 
       
    78 fileNameForMethod: cmethod
       
    79     ^Dictionary new
       
    80         at: $/ put: '__quo__';
       
    81         "/Add more..."
       
    82 
       
    83         at: cmethod selector ifAbsent:[
       
    84             ((cmethod selector copyReplaceAll:$: with: $.) , '.st')
       
    85         ]
       
    86 
       
    87     "Created: / 17-09-2012 / 18:22:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    88 !
       
    89 
       
    90 filenameNameForProperties
       
    91     ^'properties.ston'
       
    92 
       
    93     "Created: / 17-09-2012 / 17:38:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    94 !
       
    95 
       
    96 suffixForClass
       
    97     ^'class'
       
    98 
       
    99     "Created: / 17-09-2012 / 18:09:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   100 !
       
   101 
       
   102 suffixForExtensions
       
   103     ^'extension'
       
   104 
       
   105     "Created: / 17-09-2012 / 18:09:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   106 !
       
   107 
       
   108 suffixForPackage
       
   109     ^'package'
       
   110 
       
   111     "Created: / 17-09-2012 / 18:09:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   112 ! !
       
   113 
       
   114 !CypressAbstractWriter methodsFor:'writing-model'!
    48 !CypressAbstractWriter methodsFor:'writing-model'!
   115 
    49 
   116 writeClass: cclass as: name to: directory
    50 writeClass: cclass as: name to: directory
   117     "Writes a given 'cclass' into directory named 'name' under
    51     "Writes a given 'cclass' into directory named 'name' under
   118     'directory'"
    52     'directory'"
   120     self subclassResponsibility
    54     self subclassResponsibility
   121 
    55 
   122     "Created: / 17-09-2012 / 22:19:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    56     "Created: / 17-09-2012 / 22:19:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   123 !
    57 !
   124 
    58 
   125 writeClass: cclass to: directory
       
   126 
       
   127     self writeClass: cclass 
       
   128                  as: (self directoryNameForClass: cclass)
       
   129                  to: directory
       
   130 
       
   131     "Created: / 17-09-2012 / 18:40:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   132 !
       
   133 
       
   134 writeMethod: cmethod as: name to: directory
    59 writeMethod: cmethod as: name to: directory
   135     "Writes a given 'cmethod' into directory named 'name' under
    60     "Writes a given 'cmethod' into directory named 'name' under
   136     'directory'"
    61     'directory'"
   137 
    62 
   138     self subclassResponsibility
    63     self subclassResponsibility
   139 
    64 
   140     "Created: / 17-09-2012 / 22:20:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    65     "Created: / 17-09-2012 / 22:20:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   141 !
    66 !
   142 
    67 
   143 writeMethod: cmethod to: directory
       
   144 
       
   145     self writeMethod: cmethod 
       
   146                  as: (self fileNameForMethod: cmethod)
       
   147                  to: directory
       
   148 
       
   149     "Created: / 17-09-2012 / 18:40:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   150 !
       
   151 
       
   152 writePackage: cpackage as: name to: directory
    68 writePackage: cpackage as: name to: directory
   153     "Writes a given 'cpackage' into directory named 'name' under
    69     "Writes a given 'cpackage' into directory named 'name' under
   154     'directory'"
    70     'directory'"
   155 
    71 
   156     self subclassResponsibility
    72     self subclassResponsibility
   157 
    73 
   158     "Created: / 17-09-2012 / 22:15:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    74     "Created: / 17-09-2012 / 22:15:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   159 !
       
   160 
       
   161 writePackage: cpackage to: directory
       
   162 
       
   163     self writePackage: cpackage 
       
   164                    as: (self directoryNameForPackage: cpackage)
       
   165                    to: directory
       
   166 
       
   167     "Created: / 17-09-2012 / 17:34:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   168 ! !
    75 ! !
   169 
    76 
   170 !CypressAbstractWriter methodsFor:'writing-utils'!
    77 !CypressAbstractWriter methodsFor:'writing-utils'!
       
    78 
       
    79 writeClass: cclass to: directory
       
    80 
       
    81     self writeClass: cclass 
       
    82                  as: (self defaultFileNameForClassNamed:cclass name)
       
    83                  to: directory
       
    84 
       
    85     "Created: / 17-09-2012 / 18:40:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    86 !
   171 
    87 
   172 writeClasses: classes to: directory
    88 writeClasses: classes to: directory
   173     "Writes my classes  into 'directory' with given copyrightNotice"
    89     "Writes my classes  into 'directory' with given copyrightNotice"
   174 
    90 
   175     | obsolete |
    91     | obsolete |
   177     " collect possibly obsolete .class directories "
    93     " collect possibly obsolete .class directories "
   178     obsolete := Set new.
    94     obsolete := Set new.
   179     directory directoryContentsAsFilenamesDo:[:each|
    95     directory directoryContentsAsFilenamesDo:[:each|
   180         | suffix |
    96         | suffix |
   181 
    97 
   182         each suffix = self suffixForClass ifTrue:[
    98         each suffix = self defaultFileSuffixForClass ifTrue:[
   183             obsolete add: each.
    99             obsolete add: each.
   184         ]
   100         ]
   185     ].
   101     ].
   186 
   102 
   187     " write classes... "
   103     " write classes... "
   188     classes do:[:cclass|
   104     classes do:[:cclass|
   189         | cpsClsDir name |
   105         | cpsClsDir name |
   190 
   106 
   191         cpsClsDir := directory / (name := self directoryNameForClass: cclass).
   107         cpsClsDir := directory / (name := self defaultFileNameForClassNamed:cclass name).
   192         obsolete remove:cpsClsDir ifAbsent:[].
   108         obsolete remove:cpsClsDir ifAbsent:[].
   193         self writeClass: cclass as: name to: directory
   109         self writeClass: cclass as: name to: directory
   194     ].
   110     ].
   195 
   111 
   196     " wipe out obsolete .class directories "
   112     " wipe out obsolete .class directories "
   202 !
   118 !
   203 
   119 
   204 writeComment: comment to: directory
   120 writeComment: comment to: directory
   205     comment isNil ifTrue:[ ^ self ].
   121     comment isNil ifTrue:[ ^ self ].
   206 
   122 
   207     (directory / (self fileNameForComment)) writingFileDo:[:f|
   123     (directory / self defaultFileNameForComment) writingFileDo:[:f|
   208         f nextPutAll: comment
   124         f nextPutAll: comment
   209     ]
   125     ]
   210 
   126 
   211     "Created: / 17-09-2012 / 17:47:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   127     "Created: / 17-09-2012 / 17:47:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   212 !
   128 !
   235 
   151 
   236     " write individual extensions... "
   152     " write individual extensions... "
   237     extensionsPerClass keysAndValuesDo:[:name :cpsMthds |
   153     extensionsPerClass keysAndValuesDo:[:name :cpsMthds |
   238         | cpsClsDir cpsCls |
   154         | cpsClsDir cpsCls |
   239 
   155 
   240         cpsClsDir := directory / (self directoryNameForExtensions: name).
   156         cpsClsDir := directory / (self defaultFileNameForClassExtensionsNamed:name).
   241         obsolete remove: cpsClsDir ifAbsent:[].
   157         obsolete remove: cpsClsDir ifAbsent:[].
   242         cpsClsDir exists ifFalse: [ cpsClsDir makeDirectory ].
   158         cpsClsDir exists ifFalse: [ cpsClsDir makeDirectory ].
   243 
   159 
   244         self writeMethods: cpsMthds to: cpsClsDir.
   160         self writeMethods: cpsMthds to: cpsClsDir.
   245     ].
   161     ].
   248     obsolete do:[:each|
   164     obsolete do:[:each|
   249         each recursiveRemove.
   165         each recursiveRemove.
   250     ].
   166     ].
   251 
   167 
   252     "Created: / 17-09-2012 / 18:29:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   168     "Created: / 17-09-2012 / 18:29:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   169 !
       
   170 
       
   171 writeMethod: cmethod to: directory
       
   172 
       
   173     self writeMethod: cmethod 
       
   174                  as: (self defaultFileNameForMethodNamed:cmethod selector)
       
   175                  to: directory
       
   176 
       
   177     "Created: / 17-09-2012 / 18:40:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   253 !
   178 !
   254 
   179 
   255 writeMethods: methods to:directory 
   180 writeMethods: methods to:directory 
   256      "Writes methods into given 'directory' with copyrightNotice in each file"
   181      "Writes methods into given 'directory' with copyrightNotice in each file"
   257 
   182 
   274     methods do:[:cpsMthd|
   199     methods do:[:cpsMthd|
   275         | dir dottedSel file baseNameWithoutSuffix name|
   200         | dir dottedSel file baseNameWithoutSuffix name|
   276 
   201 
   277         dir := cpsMthd meta ifTrue:[classDir] ifFalse:[instDir].
   202         dir := cpsMthd meta ifTrue:[classDir] ifFalse:[instDir].
   278         dir exists ifFalse:[ dir makeDirectory ].
   203         dir exists ifFalse:[ dir makeDirectory ].
   279         file := dir / (name := self fileNameForMethod: cpsMthd).
   204         file := dir / (name := self defaultFileNameForMethodNamed:cpsMthd selector).
   280         baseNameWithoutSuffix := file withoutSuffix baseName.
   205         baseNameWithoutSuffix := file withoutSuffix baseName.
   281         self writeMethod: cpsMthd as: name to: dir.
   206         self writeMethod: cpsMthd as: name to: dir.
   282         obsolete := obsolete reject:[:each|
   207         obsolete := obsolete reject:[:each|
   283             each withoutSuffix baseName = baseNameWithoutSuffix
   208             each withoutSuffix baseName = baseNameWithoutSuffix
   284         ].
   209         ].
   290     ].
   215     ].
   291 
   216 
   292     "Created: / 17-09-2012 / 18:29:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   217     "Created: / 17-09-2012 / 18:29:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   293 !
   218 !
   294 
   219 
       
   220 writePackage: cpackage to: directory
       
   221 
       
   222     self writePackage: cpackage 
       
   223                    as: (self defaultFileNameForClassPackageNamed:cpackage)
       
   224                    to: directory
       
   225 
       
   226     "Created: / 17-09-2012 / 17:34:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   227 !
       
   228 
   295 writeProperties: properties to: directory
   229 writeProperties: properties to: directory
   296     | props propertyFile |
   230     | props propertyFile |
   297 
   231 
   298     props := properties copy.
   232     props := properties copy.
   299     props isEmptyOrNil ifTrue:[ ^ self ].
   233     props isEmptyOrNil ifTrue:[ ^ self ].
   300     propertyFile := directory / self filenameNameForProperties. 
   234     propertyFile := directory / self defaultFileNameForProperties. 
   301 
   235 
   302     " add notice "
   236     " add notice "
   303     props at: '_cypress_copyright' put: notice.
   237     props at: '_cypress_copyright' put: notice.
   304 
   238 
   305     " be nice and do not discard properties of others. Merge them"
   239     " be nice and do not discard properties of others. Merge them"