CypressWriter.st
changeset 14 d5b81c30785e
parent 13 f90704544ca0
child 15 31a33727c629
--- a/CypressWriter.st	Thu Sep 13 14:58:01 2012 +0000
+++ b/CypressWriter.st	Mon Sep 17 18:05:30 2012 +0000
@@ -1,7 +1,7 @@
 "{ Package: 'stx:goodies/cypress' }"
 
-Object subclass:#CypressWriter
-	instanceVariableNames:'repository'
+CypressAbstractWriter subclass:#CypressWriter
+	instanceVariableNames:''
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Cypress-New-Reader & Writer'
@@ -14,8 +14,7 @@
     An entry point to write a package in Cypress format.
     Example:
 
-    CypressWriter new
-        repository: '~/Projects/SmalltalkX/repositories/git/cypress/implementations/smalltalkx/packages';
+    (CypressWriter onDirectory:'~/Projects/SmalltalkX/repositories/git/cypress/implementations/smalltalkx/packages');
         write: #'stx:goodies/cypress'.
 
     [author:]
@@ -26,18 +25,61 @@
     [class variables:]
 
     [see also:]
+        'Cypress spec' - https://github.com/CampSmalltalk/Cypress/wiki
 
 "
 ! !
 
-!CypressWriter methodsFor:'accessing'!
+!CypressWriter methodsFor:'writing-model'!
+
+writeClass: cclass to: directory
+
+    | clsdir |
 
-repository
-    ^ repository
+    clsdir := directory / (self directoryNameForClass: cclass).
+    clsdir exists ifFalse:[ clsdir recursiveMakeDirectory ].
+
+    self 
+        writeProperties: cclass properties to: clsdir;
+        writeComment: cclass comment to: clsdir;
+        writeMethods: cclass methods to: clsdir
+
+    "Created: / 17-09-2012 / 18:34:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-repository:aStringOrFilename
-    repository := aStringOrFilename.
+writeMethod: cmethod to: directory
+    | mthfile |
+
+    mthfile := directory / (self fileNameForMethod: cmethod).
+
+    self writeProperties: cmethod properties to: directory.
+
+    mthfile writingFileDo:[:s|
+        s nextPut:$"; cr.
+        s nextPutAll: 'notice: '; nextPutAll: notice; cr.
+        s nextPutAll: 'category: '; nextPutAll: cmethod category ? '* as yet unclassified *'; cr.
+        s nextPut:$"; cr.
+        s nextPutAll: cmethod source.
+    ].
+
+    "Created: / 17-09-2012 / 18:35:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+writePackage: cpackage to: directory
+
+    | pkgdir |
+
+    notice isNil ifTrue:[ notice := cpackage definition legalCopyright ].
+    pkgdir := repository directory / (self directoryNameForPackage: cpackage).
+    pkgdir exists ifFalse:[ pkgdir recursiveMakeDirectory ].
+
+    self 
+        writeProperties: cpackage properties to: pkgdir;
+        writeComment: cpackage comment to: pkgdir;
+        writeClasses: cpackage classes to: pkgdir;
+        writeExtensions: cpackage extensions to: pkgdir.
+
+    "Created: / 17-09-2012 / 17:44:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !CypressWriter class methodsFor:'documentation'!