home *** CD-ROM | disk | FTP | other *** search
- //
- // MiscString.h -- a generic class to simplify manipulation of (char *)'s
- // Written by Don Yacktman Copyright (c) 1993, 1994 by Don Yacktman.
- // Version 1.9. All rights reserved.
- // This notice may not be removed from this source code.
- //
- // This object is included in the MiscKit by permission from the author
- // and its use is governed by the MiscKit license, found in the file
- // "LICENSE.rtf" in the MiscKit distribution. Please refer to that file
- // for a list of all applicable permissions and restrictions.
- //
-
- #import <appkit/appkit.h>
-
- // special constants for -extractPart... methods
- #define MISC_STRING_LAST -1
- #define MISC_STRING_FIRST 0
-
- char *MiscBuildStringFromFormatV(const char *formatStr, va_list param_list);
-
- // Note that the NXTransport protocol is handled by the NEXTSTEP category.
- @interface MiscString:Object
- {
- char *buffer;
- NXStringOrderTable *orderTable;
- int length, _length; // length is string length, _length is buffer size
- }
-
- + initialize;
- + new;
- + newWithString:(const char *)aString;
- - new;
- - init;
- - initCapacity:(int)capacity;
- - initCapacity:(int)capacity fromZone:(NXZone *)zone;
- - initString:(const char *)aString;
- - initFromFormat:(const char *)formatStr, ...;
- - allocateBuffer:(int)size;
- - allocateBuffer:(int)size fromZone:(NXZone *)zone;
- - copyFromZone:(NXZone *)zone;
- - (char *)getCopyInto:(char *)buf;
- - freeString;
- - free;
- - (BOOL)emptyString;
- - (char)charAt:(int)index;
- - (int)numOfChar:(char)aChar caseSensitive:(BOOL)sense;
- - (int)numOfChar:(char)aChar;
- - (int)numOfChars:(const char *)aString caseSensitive:(BOOL)sense;
- - (int)numOfChars:(const char *)aString;
- - (int)length;
- - (unsigned)capacity;
- - setCapacity:(unsigned)newCapacity;
- - fixStringLength;
- - fixStringLengthAt:(unsigned)index;
- - setStringOrderTable:(NXStringOrderTable *)table;
- - (NXStringOrderTable *)stringOrderTable;
- - (const char *)stringValue;
- - (NXAtom)uniqueStringValue;
- - (const char *)stringValueAndFree;
- - (int)intValue;
- - (float)floatValue;
- - (double)doubleValue;
-
- @end
-
- @interface MiscString(Comparing)
-
- - (BOOL)isEqual:anObject;
- - (unsigned int)hash;
- - (int)compareTo:sender;
- - (int)compareTo:sender n:(int)n;
- - (int)cmp:(const char *)aString;
- - (int)cmp:(const char *)aString n:(int)n;
- - (int)compareTo:sender caseSensitive:(BOOL)sense;
- - (int)compareTo:sender n:(int)n caseSensitive:(BOOL)sense;
- - (int)casecmp:(const char *)aString;
- - (int)casecmp:(const char *)aString n:(int)n;
- - (int)endcmp:(const char *)aString;
- - (int)endcmp:(const char *)aString n:(int)n;
- - (int)endcasecmp:(const char *)aString;
- - (int)endcasecmp:(const char *)aString n:(int)n;
- - (int)endCompareTo:(id)sender;
- - (int)endCompareTo:(id)sender caseSensitive:(BOOL)sense;
- - (int)endCompareTo:(id)sender n:(int)n;
- - (int)endCompareTo:(id)sender n:(int)n caseSensitive:(BOOL)sense;
-
- @end
-
- @interface MiscString(Compat)
-
- - takeStringValue:sender;
- - clear;
- - (const char *)string;
- - setString:(const char *)aString;
- - replaceChar:(char)aChar withChar:(char)replaceChar;
- - addToEndOfString:(const char *)aString;
- - addToFrontOfString:(const char *)aString;
- - addCharToEndOfString:(char)aChar;
- - addCharToFrontOfString:(char)aChar;
- - (int)numberFields;
- - (char *)nthField:(int)fieldNumber useAsDelimiter:(char)c;
- - (char *)nthField:(int)fieldNumber;
- - (char *)nthQuotedField:(int)fieldNumber;
- - (char *)lastField;
- - (char *)firstField;
- - addStrings:(const char *)fields, ...;
- - replaceEveryInstanceOfChar:(char)aChar withChar:(char)replaceChar;
- - replaceEveryInstanceOfChar:(char)aChar with:(char)replaceChar;
-
- // MOString compatability
- - convertToUpper;
- - convertToLower;
- - (size_t)recalcLength;
- - (int)replaceAllOccurrencesOfChar:(char)oldChar with:(char)newChar;
- - (char)replaceCharAt:(int)index with:(char)newChar;
- - insertStringValue:(const char *)s at:(int)position;
- - preCatStringValue:(const char *)s;
- - preCat:stringObject;
- - preCatFromFormat:(const char *)format, ...;
- - catStringValue:(const char *)s;
- - (int)compare:stringObject;
- - (int)compare:stringObject caseSensitive:(BOOL)flag;
- - (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length;
- - (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length
- withTable:(NXStringOrderTable *)table;
- - (int)compareStr:(const char *)s;
- - (int)compareStr:(const char *)s caseSensitive:(BOOL)flag;
- - (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length;
- - (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length
- withTable:(NXStringOrderTable *)table;
- - (int)endCompare:stringObject;
- - (int)endCompare:stringObject caseSensitive:(BOOL)flag;
- - (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length;
- - (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length
- withTable:(NXStringOrderTable *)table;
- - (int)endCompareStr:(const char *)s;
- - (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag;
- - (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag
- length:(int)length;
- - (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag
- length:(int)length withTable:(NXStringOrderTable *)table;
- - substringFrom:(int)start to:(int)end;
- - (int)positionOf:(char)aChar nthOccurrence:(int)n;
- - (int)countOccurrencesOf:(char)aChar;
- - (size_t)strlen;
- - (const char *)strcpy:(const char *)s;
- - (const char *)strncpy:(const char *)s :(size_t)n;
- - (const char *)strcat:(const char *)s;
- - (const char *)strncat:(const char *)s :(size_t)n;
- - (int)strcmp:(const char *)s;
- - (int)strncmp:(const char *)s :(size_t)n;
- - (const char *)strchr:(char)aChar;
- - (const char *)strrchr:(char)aChar;
- - (const char *)strpbrk:(const char *)breakChars;
- - (size_t)strspn:(const char *)acceptableChars;
- - (size_t)strcspn:(const char *)breakChars;
- - initStringValue:(const char *)s;
- - initStringValueNoCopy:(char *)s; // the const is how it should be
- - initStringValueNoCopy:(char *)s shouldFree:(BOOL)flag;
- - initStringValueUnique:(const char *)s;
- - deepCopy;
- - deepCopyFromZone:(NXZone *)zone;
- - shallowCopy;
- - shallowCopyFromZone:(NXZone *)zone;
- - setStringValueNoCopy:(const char *)s; // the const is how it should be
- - setStringValueNoCopy:(char *)s shouldFree:(BOOL)flag;
- - setStringValueUnique:(const char *)s;
- - setNull;
- - makeUnique;
- - setShouldFree:(BOOL)flag;
- - (unsigned int)count;
- - (BOOL)isNull;
- - (BOOL)isEmpty;
- - (BOOL)isUnique;
- - (BOOL)shouldFree;
-
- // MOPathString extras
- - (int)numberOfComponents;
- - componentAt:(int)index;
- - file;
- - directory; // warning: conflicts with NeXT headers: id vs. (const char *)
- - (const char *)path;
- - (BOOL)isRelative;
- - (BOOL)isAbsolute;
- - (BOOL)isDirectory;
- - (BOOL)isPlainFile;
- - (BOOL)isSymbolicLink;
- - (BOOL)isCharacterSpecial;
- - (BOOL)isBlockSpecial;
- - (BOOL)isSocket;
- - setPathSeparator:(char)c; // NO OP
- - setExtensionSeparator:(char)c; // NO OP
- - (char)pathSeparator;
- - (char)extensionSeparator;
- - setPath:(const char *)path;
- - initPath:(const char *)path;
- - (char *)buffer; // don't free this return value!!!
-
- @end
-
- @interface MiscString(Debugging)
-
- - buildInstanceImageIn:(char *)buf;
- - printForDebugger:(NXStream *)stream;
- - printToStdErr:(const char *)label;
-
- @end
-
- @interface MiscString(Fields)
-
- - subStringRight:subString;
- - subStringLeft:subString;
- - left:(int)count;
- - right:(int)count;
- - midFrom:(int)start to:(int)end;
- - midFrom:(int)start length:(int)len;
- - left:(int)count fromZone:(NXZone *)zone;
- - right:(int)count fromZone:(NXZone *)zone;
- - midFrom:(int)start to:(int)end fromZone:(NXZone *)zone;
- - midFrom:(int)start length:(int)len fromZone:(NXZone *)zone;
- - extractPart:(int)n useAsDelimiter:(char)c caseSensitive:(BOOL)sense
- fromZone:(NXZone *)zone;
- - extractPart:(int)n useAsDelimiter:(char)c caseSensitive:(BOOL)sense;
- - extractPart:(int)n useAsDelimiter:(char)c fromZone:(NXZone *)zone;
- - extractPart:(int)n useAsDelimiter:(char)c;
- - wordNum:(int) num;
- - wordNum:(int) num fromZone:(NXZone *)zone;
- - (int)numWords;
- - tokenize:(const char *)breakChars into:aList;
-
- @end
-
- @interface MiscString(Insertion)
-
- - cat:(const char *)aString;
- - cat:(const char *)aString n:(int)n;
- - cat:(const char *)aString fromZone:(NXZone *)zone;
- - cat:(const char *)aString n:(int)n fromZone:(NXZone *)zone;
- - concatenate:sender;
- - concatenate:sender n:(int)n;
- - concatenate:sender fromZone:(NXZone *)zone;
- - concatenate:sender n:(int)n fromZone:(NXZone *)zone;
- - insert:(const char *)aString at:(int)index;
- - insertString:(id)sender at:(int)index;
- - insertChar:(char)aChar at:(int)index;
- - insertChar:(char)aChar;
- - catStrings: ( const char *) strings, ...;
- - concatenateStrings:(id)strings, ...;
- - insert:(const char *)aString;
- - insertString:aString;
- - addChar:(char)aChar;
- - insertFromFormat:(const char *)format, ...;
- - insertAt:(int)index fromFormat:(const char *)format, ...;
- - catFromFormat:(const char *)format, ...;
-
- @end
-
- @interface MiscString(Modification)
-
- - setStringValue:(const char *)aString;
- - setStringValue:(const char *)aString fromZone:(NXZone *)zone;
- - setStringValue:(const char *)aString n:(int)n;
- - setStringValue:(const char *)aString n:(int)n fromZone:(NXZone *)zone;
- - setFromFormat:(const char *)formatStr, ...;
- - setIntValue:(int)val;
- - setFloatValue:(float)val;
- - setDoubleValue:(double)val;
- - sprintf:(const char *)formatStr, ...;
- - takeStringValueFrom:sender;
- - takeStringValueFrom:sender fromZone:(NXZone *)zone;
- - takeIntValueFrom:sender;
- - takeFloatValueFrom:sender;
- - takeDoubleValueFrom:sender;
- - trimLeadSpaces;
- - trimTailSpaces;
- - trimSpaces;
- - trimLeadWhiteSpaces;
- - trimTailWhiteSpaces;
- - trimWhiteSpaces;
- - squashSpaces;
- - reverse;
- - toUpper;
- - toLower;
- - invertCases;
- - capitalizeEachWord;
- - removeFrom:(int)index length:(int)len;
- - removeFrom:(int)start to:(int)end;
-
- @end
-
- @interface MiscString(NEXTSTEP) <NXTransport>
-
- - read:(NXTypedStream *)stream;
- - write:(NXTypedStream *)stream;
- - (const char *)getInspectorClassName;
- - (NXImage *)getIBImage;
-
- @end
-
- #import <misckit/MiscStringPatterns.h>
- #import <misckit/MiscStringRegex.h>
-
- @interface MiscString(Replacing)
-
- - replaceFrom:(int)start length:(int)len with:(const char *)aString;
- - replaceFrom:(int)start to:(int)end with:(const char *)aString;
- - replaceFrom:(int)start length:(int)len withString:(id)sender;
- - replaceFrom:(int)start to:(int)end withString:(id)sender;
- - replace:(const char *)subString with:(const char *)newString;
- - replace:(const char *)subString withString:(id)sender;
- - replaceCharAt:(int)index withChar:(char)aChar;
- - replaceFrom:(int)start length:(int)len withChar:(char)aChar;
- - replaceFrom:(int)start to:(int)end withChar:(char)aChar;
- - replaceEveryOccurrenceOfChars:(const char *)aString
- with:(const char *)replaceString;
- - replaceEveryOccurrenceOfChars:(const char *)aString
- with:(const char *)replaceString caseSensitive:(BOOL)sense;
- - replaceEveryOccurrenceOfChars:(const char *)aString
- withChar:(char)replaceChar;
- - replaceEveryOccurrenceOfChars:(const char *)aString
- withChar:(char)replaceChar caseSensitive:(BOOL)sense;
- - replaceEveryOccurrenceOfChars:(const char *)aString withString:(id)sender;
- - replaceEveryOccurrenceOfChars:(const char *)aString
- withString:(id)sender caseSensitive:(BOOL)sense;
- - replaceEveryOccurrenceOfChar:(char)aChar with:(const char *)aString
- caseSensitive:(BOOL)sense;
- - replaceEveryOccurrenceOfChar:(char)aChar with:(const char *)aString;
- - replaceEveryOccurrenceOfChar:(char)aChar withString:(id)sender;
- - replaceEveryOccurrenceOfChar:(char)aChar withString:(id)sender
- caseSensitive:(BOOL)sense;
- - replaceEveryOccurrenceOfChar:(char)aChar withChar:(char)replaceChar
- caseSensitive:(BOOL)sense;
- - replaceEveryOccurrenceOfChar:(char)aChar withChar:(char)replaceChar;
-
- @end
-
- @interface MiscString(Searching)
-
- - (int)spotOf:(char)aChar;
- - (int)spotOf:(char)aChar caseSensitive:(BOOL)sense;
- - (int)spotOf:(char)aChar occurrenceNum:(int)n;
- - (int)rspotOf:(char)aChar;
- - (int)rspotOf:(char)aChar caseSensitive:(BOOL)sense;
- - (int)rspotOf:(char)aChar occurrenceNum:(int)n;
- - (int)spotOf:(char)aChar occurrenceNum:(int)n caseSensitive:(BOOL)sense;
- - (int)rspotOf:(char)aChar occurrenceNum:(int)n caseSensitive:(BOOL)sense;
- - (const char *)rindex:(char)aChar;
- - (const char *)rindex:(char)aChar occurrenceNum:(int)n;
- - (const char *)rindex:(char)aChar caseSensitive:(BOOL)sense;
- - (const char *)rindex:(char)aChar occurrenceNum:(int)n
- caseSensitive:(BOOL)sense;
- - (const char *)index:(char)aChar;
- - (const char *)index:(char)aChar occurrenceNum:(int)n;
- - (const char *)index:(char)aChar caseSensitive:(BOOL)sense;
- - (const char *)index:(char)aChar occurrenceNum:(int)n
- caseSensitive:(BOOL)sense;
- - (const char *)strstr:(const char *)subString;
- - (int)spotOfChars:(const char *)aString;
- - (int)spotOfChars:(const char *)aString caseSensitive:(BOOL)sense;
- - (int)spotOfChars:(const char *)aString occurrenceNum:(int)n;
- - (int)spotOfChars:(const char *)aString occurrenceNum:(int)n
- caseSensitive:(BOOL)sense;
- - (int)rspotOfChars:(const char *)aString;
- - (int)rspotOfChars:(const char *)aString caseSensitive:(BOOL)sense;
- - (int)rspotOfChars:(const char *)aString occurrenceNum:(int)n;
- - (int)rspotOfChars:(const char *)aString occurrenceNum:(int)n
- caseSensitive:(BOOL)sense;
- - (const char *)rindexOfChars:(const char *)aString;
- - (const char *)rindexOfChars:(const char *)aString caseSensitive:(BOOL)sense;
- - (const char *)rindexOfChars:(const char *)aString occurrenceNum:(int)n;
- - (const char *)rindexOfChars:(const char *)aString occurrenceNum:(int)n
- caseSensitive:(BOOL)sense;
- - (const char *)indexOfChars:(const char *)aString;
- - (const char *)indexOfChars:(const char *)aString caseSensitive:(BOOL)sense;
- - (const char *)indexOfChars:(const char *)aString occurrenceNum:(int)n;
- - (const char *)indexOfChars:(const char *)aString occurrenceNum:(int)n
- caseSensitive:(BOOL)sense;
-
- @end
-
- @interface MiscString(Sybase)
-
- - convertUnixWildcardsToSybase;
- - convertToCaseInsensitiveSearchString;
- - makeCaseInsensitiveSearchString;
-
- @end
-
- // These are legal arguments for the -isFileOfType: method...
- typedef enum _MiscFileType {
- Misc_Socket = S_IFSOCK, // socket
- Misc_Directory = S_IFDIR, // directory
- Misc_PlainFile = S_IFREG, // regular (plain) file
- Misc_SymbolicLink = S_IFLNK, // symbolic link
- Misc_CharacterSpecial = S_IFCHR, // character special
- Misc_BlockSpecial = S_IFBLK, // block special
- Misc_Fifo = S_IFIFO // fifo (Sun VFS)
- } MiscFileType;
-
- @interface MiscString(UNIX)
-
- // all MiscStrings use a global separator for splitting up paths.
- // it's less overhead than making a UNIX subclass that stores these
- // for each and every path...and typically you would never need to
- // worry about changing these anyway...
- + setPathSeparator:(char)c;
- + setExtensionSeparator:(char)c;
- + (char)extensionSeparator;
- + (char)pathSeparator;
-
- // passwords
- - encrypt:salt;
-
- // parsing paths
- - fileNameFromZone:(NXZone *)zone;
- - fileName;
- - pathNameFromZone:(NXZone *)zone;
- - pathName;
- - fileExtensionFromZone:(NXZone *)zone;
- - fileExtension;
- - fileBasenameFromZone:(NXZone *)zone;
- - fileBasename;
- - addExtensionIfNeeded:(const char *)aString;
-
- // manipulating paths
- - replaceHomeWithTilde;
- - replaceTildeWithHome;
-
- // info about paths
- - (BOOL)isRelativePath;
- - (BOOL)isAbsolutePath;
- - (BOOL)doesExistInFileSystem;
- - (BOOL)isFileOfType:(MiscFileType)fileType;
- - (int)numberOfPathComponents;
- - pathComponentAt:(int)index;
- - setDirectory:(const char *)dir file:(const char *)file;
- - initDirectory:(const char *)dir file:(const char *)file;
-
- @end
-