DoWhatIMeanSupport.st
changeset 2559 f9f489baf23f
parent 2558 81ef3253fd23
child 2560 cc5ba9cf02b8
--- a/DoWhatIMeanSupport.st	Thu Aug 21 18:25:56 2003 +0200
+++ b/DoWhatIMeanSupport.st	Thu Aug 21 20:39:37 2003 +0200
@@ -58,7 +58,7 @@
     "generate a reasonable default for a rename operation.
      (used for rename category etc.)"
 
-    |prefix suffix lastNewSize lastOldSize left right inserted|
+    |prefix suffix lastNewSize lastOldSize left right inserted deleted|
 
     lastNewName isNil ifTrue:[ ^ nil].
 
@@ -132,8 +132,12 @@
 
     prefix := lastOldName commonPrefixWith:lastNewName.
     suffix := lastOldName commonSuffixWith:lastNewName.
+
     (prefix size > 0) ifTrue:[
         (suffix size > 0) ifTrue:[
+
+            prefix := prefix copyTo:(((lastNewName size - suffix size) min:(lastOldName size - suffix size)) min:prefix size).
+
             "last rename was 
                 'fooR' -> 'fooXR'
              then, a good default for
@@ -141,8 +145,23 @@
             "
             left := lastOldName copyTo:prefix size.
             right := lastOldName copyLast:suffix size.
-            inserted := (lastNewName copyFrom:(left size + 1)) copyWithoutLast:(right size).
-            ^ (oldName copyWithoutLast:right size) , inserted , (oldName copyLast:right size)
+            lastNewSize > lastOldSize ifTrue:[
+                inserted := (lastNewName copyFrom:(left size + 1)) copyWithoutLast:(right size).
+                inserted size > 0 ifTrue:[
+                    ^ (oldName copyWithoutLast:right size) , inserted , (oldName copyLast:right size)
+                ].
+            ].
+            (oldName endsWith:suffix) ifTrue:[
+                deleted := (lastOldName copyFrom:(prefix size + 1)) copyWithoutLast:(suffix size).
+                ((oldName copyFrom:oldName size-suffix size-deleted size + 1) copyTo:deleted size) = deleted ifTrue:[
+                    "last rename was 
+                        'fooXR' -> 'fooR'
+                     then, a good default for
+                        'barXS' would be 'barS'
+                    "
+                    ^ (oldName copyTo:oldName size-suffix size-deleted size) , suffix
+                ]
+            ]
         ].
 
         (oldName endsWith:(lastOldName copyFrom:prefix size+1)) ifTrue:[
@@ -169,7 +188,13 @@
      self goodRenameDefaultFor:'barXX' lastOld:'fooXX' lastNew:'fooYY' 
      self goodRenameDefaultFor:'XXbar' lastOld:'XXfoo' lastNew:'foo'  
 
-     self goodRenameDefaultFor:'bar2' lastOld:'foo1' lastNew:'foo01'
+     self goodRenameDefaultFor:'bar2' lastOld:'foo1' lastNew:'foo01'  
+     self goodRenameDefaultFor:'barXY' lastOld:'fooXY' lastNew:'fooY'
+     self goodRenameDefaultFor:'bar' lastOld:'foo' lastNew:'fXoo'  
+     self goodRenameDefaultFor:'bar' lastOld:'foo' lastNew:'fXXXoo'  
+     self goodRenameDefaultFor:'bar' lastOld:'foo' lastNew:'foXXXo'  
+
+     self goodRenameDefaultFor:'bar001' lastOld:'foo001' lastNew:'foo002_001'  
     "
 !
 
@@ -293,5 +318,5 @@
 !DoWhatIMeanSupport class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.12 2003-08-21 16:25:56 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libwidg2/DoWhatIMeanSupport.st,v 1.13 2003-08-21 18:39:37 cg Exp $'
 ! !