home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1994 June / NEBULA_SE.ISO / SourceCode / MiscKit / Headers / misckit / MiscString.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-26  |  15.0 KB  |  440 lines

  1. //
  2. //    MiscString.h -- a generic class to simplify manipulation of (char *)'s
  3. //        Written by Don Yacktman Copyright (c) 1993, 1994 by Don Yacktman.
  4. //                Version 1.9.  All rights reserved.
  5. //        This notice may not be removed from this source code.
  6. //
  7. //    This object is included in the MiscKit by permission from the author
  8. //    and its use is governed by the MiscKit license, found in the file
  9. //    "LICENSE.rtf" in the MiscKit distribution.  Please refer to that file
  10. //    for a list of all applicable permissions and restrictions.
  11. //    
  12.  
  13. #import <appkit/appkit.h>
  14.  
  15. // special constants for -extractPart... methods
  16. #define MISC_STRING_LAST -1
  17. #define MISC_STRING_FIRST 0
  18.  
  19. char *MiscBuildStringFromFormatV(const char *formatStr, va_list param_list);
  20.  
  21. // Note that the NXTransport protocol is handled by the NEXTSTEP category.
  22. @interface MiscString:Object
  23. {
  24.      char *buffer;
  25.      NXStringOrderTable *orderTable;
  26.      int length, _length;    // length is string length, _length is buffer size
  27. }
  28.  
  29. + initialize;
  30. + new;
  31. + newWithString:(const char *)aString;
  32. - new;
  33. - init;
  34. - initCapacity:(int)capacity;
  35. - initCapacity:(int)capacity fromZone:(NXZone *)zone;
  36. - initString:(const char *)aString;
  37. - initFromFormat:(const char *)formatStr, ...;
  38. - allocateBuffer:(int)size;
  39. - allocateBuffer:(int)size fromZone:(NXZone *)zone;
  40. - copyFromZone:(NXZone *)zone;
  41. - (char *)getCopyInto:(char *)buf;
  42. - freeString;
  43. - free;
  44. - (BOOL)emptyString;
  45. - (char)charAt:(int)index;
  46. - (int)numOfChar:(char)aChar caseSensitive:(BOOL)sense;
  47. - (int)numOfChar:(char)aChar;
  48. - (int)numOfChars:(const char *)aString caseSensitive:(BOOL)sense;
  49. - (int)numOfChars:(const char *)aString;
  50. - (int)length;
  51. - (unsigned)capacity;
  52. - setCapacity:(unsigned)newCapacity;
  53. - fixStringLength;
  54. - fixStringLengthAt:(unsigned)index;
  55. - setStringOrderTable:(NXStringOrderTable *)table;
  56. - (NXStringOrderTable *)stringOrderTable;
  57. - (const char *)stringValue;
  58. - (NXAtom)uniqueStringValue;
  59. - (const char *)stringValueAndFree;
  60. - (int)intValue;
  61. - (float)floatValue;
  62. - (double)doubleValue;
  63.  
  64. @end
  65.  
  66. @interface MiscString(Comparing)
  67.  
  68. - (BOOL)isEqual:anObject;
  69. - (unsigned int)hash;
  70. - (int)compareTo:sender;
  71. - (int)compareTo:sender n:(int)n;
  72. - (int)cmp:(const char *)aString;
  73. - (int)cmp:(const char *)aString n:(int)n;
  74. - (int)compareTo:sender caseSensitive:(BOOL)sense;
  75. - (int)compareTo:sender n:(int)n caseSensitive:(BOOL)sense;
  76. - (int)casecmp:(const char *)aString;
  77. - (int)casecmp:(const char *)aString n:(int)n;
  78. - (int)endcmp:(const char *)aString;
  79. - (int)endcmp:(const char *)aString n:(int)n;
  80. - (int)endcasecmp:(const char *)aString;
  81. - (int)endcasecmp:(const char *)aString n:(int)n;
  82. - (int)endCompareTo:(id)sender;
  83. - (int)endCompareTo:(id)sender caseSensitive:(BOOL)sense;
  84. - (int)endCompareTo:(id)sender n:(int)n;
  85. - (int)endCompareTo:(id)sender n:(int)n caseSensitive:(BOOL)sense;
  86.  
  87. @end
  88.  
  89. @interface MiscString(Compat)
  90.  
  91. - takeStringValue:sender;
  92. - clear;
  93. - (const char *)string;
  94. - setString:(const char *)aString;
  95. - replaceChar:(char)aChar withChar:(char)replaceChar;
  96. - addToEndOfString:(const char *)aString;
  97. - addToFrontOfString:(const char *)aString;
  98. - addCharToEndOfString:(char)aChar;
  99. - addCharToFrontOfString:(char)aChar;
  100. - (int)numberFields;
  101. - (char *)nthField:(int)fieldNumber useAsDelimiter:(char)c;
  102. - (char *)nthField:(int)fieldNumber;
  103. - (char *)nthQuotedField:(int)fieldNumber;
  104. - (char *)lastField;
  105. - (char *)firstField;
  106. - addStrings:(const char *)fields,  ...;
  107. - replaceEveryInstanceOfChar:(char)aChar withChar:(char)replaceChar;
  108. - replaceEveryInstanceOfChar:(char)aChar with:(char)replaceChar;
  109.  
  110. // MOString compatability
  111. - convertToUpper;
  112. - convertToLower;
  113. - (size_t)recalcLength;
  114. - (int)replaceAllOccurrencesOfChar:(char)oldChar with:(char)newChar;
  115. - (char)replaceCharAt:(int)index with:(char)newChar;
  116. - insertStringValue:(const char *)s at:(int)position;
  117. - preCatStringValue:(const char *)s;
  118. - preCat:stringObject;
  119. - preCatFromFormat:(const char *)format, ...;
  120. - catStringValue:(const char *)s;
  121. - (int)compare:stringObject;
  122. - (int)compare:stringObject caseSensitive:(BOOL)flag;
  123. - (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length;
  124. - (int)compare:stringObject caseSensitive:(BOOL)flag length:(int)length 
  125.             withTable:(NXStringOrderTable *)table;
  126. - (int)compareStr:(const char *)s;
  127. - (int)compareStr:(const char *)s caseSensitive:(BOOL)flag;
  128. - (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length;
  129. - (int)compareStr:(const char *)s caseSensitive:(BOOL)flag length:(int)length
  130.             withTable:(NXStringOrderTable *)table;
  131. - (int)endCompare:stringObject;
  132. - (int)endCompare:stringObject caseSensitive:(BOOL)flag;
  133. - (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length;
  134. - (int)endCompare:stringObject caseSensitive:(BOOL)flag length:(int)length 
  135.             withTable:(NXStringOrderTable *)table;
  136. - (int)endCompareStr:(const char *)s;
  137. - (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag;
  138. - (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag 
  139.             length:(int)length;
  140. - (int)endCompareStr:(const char *)s caseSensitive:(BOOL)flag 
  141.             length:(int)length withTable:(NXStringOrderTable *)table;
  142. - substringFrom:(int)start to:(int)end;
  143. - (int)positionOf:(char)aChar nthOccurrence:(int)n;
  144. - (int)countOccurrencesOf:(char)aChar;
  145. - (size_t)strlen;
  146. - (const char *)strcpy:(const char *)s;
  147. - (const char *)strncpy:(const char *)s :(size_t)n;
  148. - (const char *)strcat:(const char *)s;
  149. - (const char *)strncat:(const char *)s :(size_t)n;
  150. - (int)strcmp:(const char *)s;
  151. - (int)strncmp:(const char *)s :(size_t)n;
  152. - (const char *)strchr:(char)aChar;
  153. - (const char *)strrchr:(char)aChar;
  154. - (const char *)strpbrk:(const char *)breakChars;
  155. - (size_t)strspn:(const char *)acceptableChars;
  156. - (size_t)strcspn:(const char *)breakChars;
  157. - initStringValue:(const char *)s;
  158. - initStringValueNoCopy:(char *)s; // the const is how it should be
  159. - initStringValueNoCopy:(char *)s shouldFree:(BOOL)flag;
  160. - initStringValueUnique:(const char *)s;
  161. - deepCopy;
  162. - deepCopyFromZone:(NXZone *)zone;
  163. - shallowCopy;
  164. - shallowCopyFromZone:(NXZone *)zone;
  165. - setStringValueNoCopy:(const char *)s; // the const is how it should be
  166. - setStringValueNoCopy:(char *)s shouldFree:(BOOL)flag;
  167. - setStringValueUnique:(const char *)s;
  168. - setNull;
  169. - makeUnique;
  170. - setShouldFree:(BOOL)flag;
  171. - (unsigned int)count;
  172. - (BOOL)isNull;
  173. - (BOOL)isEmpty;
  174. - (BOOL)isUnique;
  175. - (BOOL)shouldFree;
  176.  
  177. // MOPathString extras
  178. - (int)numberOfComponents;
  179. - componentAt:(int)index;
  180. - file;
  181. - directory; // warning:  conflicts with NeXT headers:  id vs. (const char *)
  182. - (const char *)path;
  183. - (BOOL)isRelative;
  184. - (BOOL)isAbsolute;
  185. - (BOOL)isDirectory;
  186. - (BOOL)isPlainFile;
  187. - (BOOL)isSymbolicLink;
  188. - (BOOL)isCharacterSpecial;
  189. - (BOOL)isBlockSpecial;
  190. - (BOOL)isSocket;
  191. - setPathSeparator:(char)c; // NO OP
  192. - setExtensionSeparator:(char)c; // NO OP
  193. - (char)pathSeparator;
  194. - (char)extensionSeparator;
  195. - setPath:(const char *)path;
  196. - initPath:(const char *)path;
  197. - (char *)buffer; // don't free this return value!!!
  198.  
  199. @end
  200.  
  201. @interface MiscString(Debugging)
  202.  
  203. - buildInstanceImageIn:(char *)buf;
  204. - printForDebugger:(NXStream *)stream;
  205. - printToStdErr:(const char *)label;
  206.  
  207. @end
  208.  
  209. @interface MiscString(Fields)
  210.  
  211. - subStringRight:subString;
  212. - subStringLeft:subString;
  213. - left:(int)count;
  214. - right:(int)count;
  215. - midFrom:(int)start to:(int)end;
  216. - midFrom:(int)start length:(int)len;
  217. - left:(int)count fromZone:(NXZone *)zone;
  218. - right:(int)count fromZone:(NXZone *)zone;
  219. - midFrom:(int)start to:(int)end fromZone:(NXZone *)zone;
  220. - midFrom:(int)start length:(int)len fromZone:(NXZone *)zone;
  221. - extractPart:(int)n useAsDelimiter:(char)c caseSensitive:(BOOL)sense
  222.         fromZone:(NXZone *)zone;
  223. - extractPart:(int)n useAsDelimiter:(char)c caseSensitive:(BOOL)sense;
  224. - extractPart:(int)n useAsDelimiter:(char)c fromZone:(NXZone *)zone;
  225. - extractPart:(int)n useAsDelimiter:(char)c;
  226. - wordNum:(int) num;
  227. - wordNum:(int) num fromZone:(NXZone *)zone;
  228. - (int)numWords;
  229. - tokenize:(const char *)breakChars into:aList;
  230.  
  231. @end
  232.  
  233. @interface MiscString(Insertion)
  234.  
  235. - cat:(const char *)aString;
  236. - cat:(const char *)aString n:(int)n;
  237. - cat:(const char *)aString fromZone:(NXZone *)zone;
  238. - cat:(const char *)aString n:(int)n fromZone:(NXZone *)zone;
  239. - concatenate:sender;
  240. - concatenate:sender n:(int)n;
  241. - concatenate:sender fromZone:(NXZone *)zone;
  242. - concatenate:sender n:(int)n fromZone:(NXZone *)zone;
  243. - insert:(const char *)aString at:(int)index;
  244. - insertString:(id)sender at:(int)index;
  245. - insertChar:(char)aChar at:(int)index;
  246. - insertChar:(char)aChar;
  247. - catStrings:  ( const char *) strings,  ...;
  248. - concatenateStrings:(id)strings,  ...;
  249. - insert:(const char *)aString;
  250. - insertString:aString;
  251. - addChar:(char)aChar;
  252. - insertFromFormat:(const char *)format, ...;
  253. - insertAt:(int)index fromFormat:(const char *)format, ...;
  254. - catFromFormat:(const char *)format, ...;
  255.  
  256. @end
  257.  
  258. @interface MiscString(Modification)
  259.  
  260. - setStringValue:(const char *)aString;
  261. - setStringValue:(const char *)aString fromZone:(NXZone *)zone;
  262. - setStringValue:(const char *)aString n:(int)n;
  263. - setStringValue:(const char *)aString n:(int)n fromZone:(NXZone *)zone;
  264. - setFromFormat:(const char *)formatStr, ...;
  265. - setIntValue:(int)val;
  266. - setFloatValue:(float)val;
  267. - setDoubleValue:(double)val;
  268. - sprintf:(const char *)formatStr, ...;
  269. - takeStringValueFrom:sender;
  270. - takeStringValueFrom:sender fromZone:(NXZone *)zone;
  271. - takeIntValueFrom:sender;
  272. - takeFloatValueFrom:sender;
  273. - takeDoubleValueFrom:sender;
  274. - trimLeadSpaces;
  275. - trimTailSpaces;
  276. - trimSpaces;
  277. - trimLeadWhiteSpaces;
  278. - trimTailWhiteSpaces;
  279. - trimWhiteSpaces;
  280. - squashSpaces;
  281. - reverse;
  282. - toUpper;
  283. - toLower;
  284. - invertCases;
  285. - capitalizeEachWord;
  286. - removeFrom:(int)index length:(int)len;
  287. - removeFrom:(int)start to:(int)end;
  288.  
  289. @end
  290.  
  291. @interface MiscString(NEXTSTEP) <NXTransport>
  292.  
  293. - read:(NXTypedStream *)stream;
  294. - write:(NXTypedStream *)stream;
  295. - (const char *)getInspectorClassName;
  296. - (NXImage *)getIBImage;
  297.  
  298. @end
  299.  
  300. #import <misckit/MiscStringPatterns.h>
  301. #import <misckit/MiscStringRegex.h>
  302.  
  303. @interface MiscString(Replacing)
  304.  
  305. - replaceFrom:(int)start length:(int)len with:(const char *)aString;
  306. - replaceFrom:(int)start to:(int)end with:(const char *)aString;
  307. - replaceFrom:(int)start length:(int)len withString:(id)sender;
  308. - replaceFrom:(int)start to:(int)end withString:(id)sender;
  309. - replace:(const char *)subString with:(const char *)newString;
  310. - replace:(const char *)subString withString:(id)sender;
  311. - replaceCharAt:(int)index withChar:(char)aChar;
  312. - replaceFrom:(int)start length:(int)len withChar:(char)aChar;
  313. - replaceFrom:(int)start to:(int)end withChar:(char)aChar;
  314. - replaceEveryOccurrenceOfChars:(const char *)aString
  315.         with:(const char *)replaceString;
  316. - replaceEveryOccurrenceOfChars:(const char *)aString
  317.         with:(const char *)replaceString caseSensitive:(BOOL)sense;
  318. - replaceEveryOccurrenceOfChars:(const char *)aString
  319.         withChar:(char)replaceChar;
  320. - replaceEveryOccurrenceOfChars:(const char *)aString
  321.         withChar:(char)replaceChar caseSensitive:(BOOL)sense;
  322. - replaceEveryOccurrenceOfChars:(const char *)aString withString:(id)sender;
  323. - replaceEveryOccurrenceOfChars:(const char *)aString
  324.         withString:(id)sender caseSensitive:(BOOL)sense;
  325. - replaceEveryOccurrenceOfChar:(char)aChar with:(const char *)aString
  326.         caseSensitive:(BOOL)sense;
  327. - replaceEveryOccurrenceOfChar:(char)aChar with:(const char *)aString;
  328. - replaceEveryOccurrenceOfChar:(char)aChar withString:(id)sender;
  329. - replaceEveryOccurrenceOfChar:(char)aChar withString:(id)sender
  330.         caseSensitive:(BOOL)sense;
  331. - replaceEveryOccurrenceOfChar:(char)aChar withChar:(char)replaceChar
  332.         caseSensitive:(BOOL)sense;
  333. - replaceEveryOccurrenceOfChar:(char)aChar withChar:(char)replaceChar;
  334.  
  335. @end
  336.  
  337. @interface MiscString(Searching)
  338.  
  339. - (int)spotOf:(char)aChar;
  340. - (int)spotOf:(char)aChar caseSensitive:(BOOL)sense;
  341. - (int)spotOf:(char)aChar occurrenceNum:(int)n;
  342. - (int)rspotOf:(char)aChar;
  343. - (int)rspotOf:(char)aChar caseSensitive:(BOOL)sense;
  344. - (int)rspotOf:(char)aChar occurrenceNum:(int)n;
  345. - (int)spotOf:(char)aChar occurrenceNum:(int)n caseSensitive:(BOOL)sense;
  346. - (int)rspotOf:(char)aChar occurrenceNum:(int)n caseSensitive:(BOOL)sense;
  347. - (const char *)rindex:(char)aChar;
  348. - (const char *)rindex:(char)aChar occurrenceNum:(int)n;
  349. - (const char *)rindex:(char)aChar caseSensitive:(BOOL)sense;
  350. - (const char *)rindex:(char)aChar occurrenceNum:(int)n
  351.         caseSensitive:(BOOL)sense;
  352. - (const char *)index:(char)aChar;
  353. - (const char *)index:(char)aChar occurrenceNum:(int)n;
  354. - (const char *)index:(char)aChar caseSensitive:(BOOL)sense;
  355. - (const char *)index:(char)aChar occurrenceNum:(int)n
  356.         caseSensitive:(BOOL)sense;
  357. - (const char *)strstr:(const char *)subString;
  358. - (int)spotOfChars:(const char *)aString;
  359. - (int)spotOfChars:(const char *)aString caseSensitive:(BOOL)sense;
  360. - (int)spotOfChars:(const char *)aString occurrenceNum:(int)n;
  361. - (int)spotOfChars:(const char *)aString occurrenceNum:(int)n
  362.         caseSensitive:(BOOL)sense;
  363. - (int)rspotOfChars:(const char *)aString;
  364. - (int)rspotOfChars:(const char *)aString caseSensitive:(BOOL)sense;
  365. - (int)rspotOfChars:(const char *)aString occurrenceNum:(int)n;
  366. - (int)rspotOfChars:(const char *)aString occurrenceNum:(int)n
  367.         caseSensitive:(BOOL)sense;
  368. - (const char *)rindexOfChars:(const char *)aString;
  369. - (const char *)rindexOfChars:(const char *)aString caseSensitive:(BOOL)sense;
  370. - (const char *)rindexOfChars:(const char *)aString occurrenceNum:(int)n;
  371. - (const char *)rindexOfChars:(const char *)aString occurrenceNum:(int)n
  372.         caseSensitive:(BOOL)sense;
  373. - (const char *)indexOfChars:(const char *)aString;
  374. - (const char *)indexOfChars:(const char *)aString caseSensitive:(BOOL)sense;
  375. - (const char *)indexOfChars:(const char *)aString occurrenceNum:(int)n;
  376. - (const char *)indexOfChars:(const char *)aString occurrenceNum:(int)n
  377.         caseSensitive:(BOOL)sense;
  378.  
  379. @end
  380.  
  381. @interface MiscString(Sybase)
  382.  
  383. - convertUnixWildcardsToSybase;
  384. - convertToCaseInsensitiveSearchString;
  385. - makeCaseInsensitiveSearchString;
  386.  
  387. @end
  388.  
  389. // These are legal arguments for the -isFileOfType: method...
  390. typedef enum _MiscFileType {
  391.     Misc_Socket           = S_IFSOCK,  // socket
  392.     Misc_Directory        = S_IFDIR,   // directory
  393.     Misc_PlainFile        = S_IFREG,   // regular (plain) file
  394.     Misc_SymbolicLink     = S_IFLNK,   // symbolic link
  395.     Misc_CharacterSpecial = S_IFCHR,   // character special
  396.     Misc_BlockSpecial     = S_IFBLK,   // block special
  397.     Misc_Fifo             = S_IFIFO    // fifo (Sun VFS)
  398. } MiscFileType;
  399.  
  400. @interface MiscString(UNIX)
  401.  
  402. // all MiscStrings use a global separator for splitting up paths.
  403. // it's less overhead than making a UNIX subclass that stores these
  404. // for each and every path...and typically you would never need to
  405. // worry about changing these anyway...
  406. + setPathSeparator:(char)c;
  407. + setExtensionSeparator:(char)c;
  408. + (char)extensionSeparator;
  409. + (char)pathSeparator;
  410.  
  411. // passwords
  412. - encrypt:salt;
  413.  
  414. // parsing paths
  415. - fileNameFromZone:(NXZone *)zone;
  416. - fileName;
  417. - pathNameFromZone:(NXZone *)zone;
  418. - pathName;
  419. - fileExtensionFromZone:(NXZone *)zone;
  420. - fileExtension;
  421. - fileBasenameFromZone:(NXZone *)zone;
  422. - fileBasename;
  423. - addExtensionIfNeeded:(const char *)aString;
  424.  
  425. // manipulating paths
  426. - replaceHomeWithTilde;
  427. - replaceTildeWithHome;
  428.  
  429. // info about paths
  430. - (BOOL)isRelativePath;
  431. - (BOOL)isAbsolutePath;
  432. - (BOOL)doesExistInFileSystem;
  433. - (BOOL)isFileOfType:(MiscFileType)fileType;
  434. - (int)numberOfPathComponents;
  435. - pathComponentAt:(int)index;
  436. - setDirectory:(const char *)dir file:(const char *)file;
  437. - initDirectory:(const char *)dir file:(const char *)file;
  438.  
  439. @end
  440.