--- a/Filename.st Thu Jul 19 16:42:23 2012 +0200
+++ b/Filename.st Thu Jul 19 16:42:26 2012 +0200
@@ -955,6 +955,74 @@
"Modified: / 18.7.1998 / 22:53:24 / cg"
!
+nameWithSpecialExpansions:aString
+ "return the nameString, expanding any OS specific macros.
+ Here, a ~/ or ~user/ prefix is expanded to the users home dir (as in csh)"
+
+ |dir user cutIdx idx userInfo|
+
+ (aString startsWith:'~') ifFalse:[
+ ^ aString.
+ ].
+
+ aString size > 1 ifTrue:[
+ idx := aString indexOf:self separator.
+ idx == 0 ifTrue:[
+ "aString is '~user'"
+ user := aString copyFrom:2.
+ cutIdx := aString size + 1.
+ ] ifFalse:[
+ "aString is '~user/something'"
+ user := aString copyFrom:2 to:(idx - 1).
+ cutIdx := idx.
+ ].
+ user notEmpty ifTrue:[
+ userInfo := OperatingSystem userInfoOf:user.
+ userInfo notNil ifTrue:[
+ dir := userInfo at:#dir ifAbsent:nil.
+ ].
+ dir isNil ifTrue:[
+"/ ('Filename [info]: unknown user: ' , user) infoPrintCR.
+ ^ aString
+ ].
+ ].
+ ].
+ dir isNil ifTrue:[
+ "aString is '~' or '~/'"
+ dir := OperatingSystem getHomeDirectory.
+ cutIdx := 2.
+ ].
+
+ ^ dir , (aString copyFrom:cutIdx)
+
+ "
+ Filename new nameWithSpecialExpansions:'~'
+ Filename new nameWithSpecialExpansions:'~\work'
+ Filename new nameWithSpecialExpansions:'~stefan'
+ Filename new nameWithSpecialExpansions:'~stefan\work'
+ Filename new nameWithSpecialExpansions:'~foo'
+ Filename new nameWithSpecialExpansions:'~foo\bar'
+ "
+
+ "
+ UnixFilename new nameWithSpecialExpansions:'~'
+ UnixFilename new nameWithSpecialExpansions:'~/work'
+ UnixFilename new nameWithSpecialExpansions:'~stefan'
+ UnixFilename new nameWithSpecialExpansions:'~stefan/work'
+ UnixFilename new nameWithSpecialExpansions:'~foo'
+ UnixFilename new nameWithSpecialExpansions:'~foo/bar'
+ "
+
+ "
+ PCFilename new nameWithSpecialExpansions:'~'
+ PCFilename new nameWithSpecialExpansions:'~\work'
+ PCFilename new nameWithSpecialExpansions:'~stefan'
+ PCFilename new nameWithSpecialExpansions:'~stefan\work'
+ PCFilename new nameWithSpecialExpansions:'~foo'
+ PCFilename new nameWithSpecialExpansions:'~foo\bar'
+ "
+!
+
suggest:aFilenameString
"return a fileNamestring based on the argument,
which is legal on the current platform."
@@ -3883,7 +3951,7 @@
setName:aString
"set the filename"
- nameString := self nameWithSpecialExpansions:aString.
+ nameString := aString.
"Modified: / 21.7.1998 / 10:44:18 / cg"
! !
@@ -4072,74 +4140,6 @@
"
!
-nameWithSpecialExpansions:aString
- "return the nameString, expanding any OS specific macros.
- Here, a ~/ or ~user/ prefix is expanded to the users home dir (as in csh)"
-
- |dir user cutIdx idx userInfo|
-
- (aString startsWith:'~') ifFalse:[
- ^ aString.
- ].
-
- aString size > 1 ifTrue:[
- idx := aString indexOf:self separator.
- idx == 0 ifTrue:[
- "aString is '~user'"
- user := aString copyFrom:2.
- cutIdx := aString size + 1.
- ] ifFalse:[
- "aString is '~user/something'"
- user := aString copyFrom:2 to:(idx - 1).
- cutIdx := idx.
- ].
- user notEmpty ifTrue:[
- userInfo := OperatingSystem userInfoOf:user.
- userInfo notNil ifTrue:[
- dir := userInfo at:#dir ifAbsent:nil.
- ].
- dir isNil ifTrue:[
-"/ ('Filename [info]: unknown user: ' , user) infoPrintCR.
- ^ aString
- ].
- ].
- ].
- dir isNil ifTrue:[
- "aString is '~' or '~/'"
- dir := OperatingSystem getHomeDirectory.
- cutIdx := 2.
- ].
-
- ^ dir , (aString copyFrom:cutIdx)
-
- "
- Filename new nameWithSpecialExpansions:'~'
- Filename new nameWithSpecialExpansions:'~\work'
- Filename new nameWithSpecialExpansions:'~stefan'
- Filename new nameWithSpecialExpansions:'~stefan\work'
- Filename new nameWithSpecialExpansions:'~foo'
- Filename new nameWithSpecialExpansions:'~foo\bar'
- "
-
- "
- UnixFilename new nameWithSpecialExpansions:'~'
- UnixFilename new nameWithSpecialExpansions:'~/work'
- UnixFilename new nameWithSpecialExpansions:'~stefan'
- UnixFilename new nameWithSpecialExpansions:'~stefan/work'
- UnixFilename new nameWithSpecialExpansions:'~foo'
- UnixFilename new nameWithSpecialExpansions:'~foo/bar'
- "
-
- "
- PCFilename new nameWithSpecialExpansions:'~'
- PCFilename new nameWithSpecialExpansions:'~\work'
- PCFilename new nameWithSpecialExpansions:'~stefan'
- PCFilename new nameWithSpecialExpansions:'~stefan\work'
- PCFilename new nameWithSpecialExpansions:'~foo'
- PCFilename new nameWithSpecialExpansions:'~foo\bar'
- "
-!
-
separator
"return the directory-separator character"
@@ -4158,7 +4158,7 @@
|newName|
- newName := self nameWithSpecialExpansions:nameString.
+ newName := self class nameWithSpecialExpansions:nameString.
newName ~= nameString ifTrue:[
^ newName asFilename.
].
@@ -4540,7 +4540,7 @@
caseless := self class isCaseSensitive not.
matching := OrderedCollection new.
- nm := self nameWithSpecialExpansions:nameString.
+ nm := self class nameWithSpecialExpansions:nameString.
nm := self class canonicalize:nm.
sepString := self class separatorString.
@@ -4718,11 +4718,12 @@
"return true, if the receiver represents an absolute pathname
(in contrast to one relative to the current directory)."
- (nameString startsWith:self class separator) ifTrue:[^ true].
+ ((nameString startsWith:self class separator) or:[nameString startsWith:'~']) ifTrue:[^ true].
^ self isVolumeAbsolute
"
- '/foo/bar' asFilename isAbsolute
+ '/foo/bar' asFilename isAbsolute
+ '~/bla' asFilename isAbsolute
'..' asFilename isAbsolute
'..' asAbsoluteFilename isAbsolute
'source/SBrowser.st' asFilename isAbsolute
@@ -4892,7 +4893,7 @@
"/ ^ nameString
"/ ]
"/ ].
- ^ OperatingSystem pathNameOf:nameString.
+ ^ OperatingSystem pathNameOf:(self class nameWithSpecialExpansions:nameString).
"
'/foo/bar' asFilename pathName
@@ -4901,6 +4902,7 @@
'../..' asFilename name
'/tmp/../usr' asFilename pathName
'/././usr' asFilename pathName
+ '~/..' asFilename pathName
"
"Modified: 27.4.1996 / 18:19:52 / cg"
@@ -5535,7 +5537,11 @@
"internal - return the OS's name for the receiver to
access it as a file."
- ^ nameString
+ (nameString startsWith:'~') ifFalse:[
+ ^ nameString.
+ ].
+
+ ^ self class nameWithSpecialExpansions:nameString.
! !
!Filename methodsFor:'suffixes'!
@@ -5882,11 +5888,11 @@
!Filename class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.375 2012-07-19 13:47:39 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.376 2012-07-19 14:42:26 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.375 2012-07-19 13:47:39 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Filename.st,v 1.376 2012-07-19 14:42:26 stefan Exp $'
! !
Filename initialize!