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