Changeset 367
- Timestamp:
- 12/ 2/07 3:51:55 AM (1 year ago)
- Files:
-
- trunk/Cocoa/Pester/Source/.DS_Store (modified) (previous)
- trunk/Cocoa/Pester/Source/DynaLoader-10.4.a (moved) (moved from trunk/Cocoa/Pester/Source/DynaLoader.a)
- trunk/Cocoa/Pester/Source/DynaLoader-10.5.a (added)
- trunk/Cocoa/Pester/Source/English.lproj/InfoPlist.strings (modified) (1 diff)
- trunk/Cocoa/Pester/Source/Info-Pester.plist (modified) (2 diffs)
- trunk/Cocoa/Pester/Source/NJRDateFormatter.m (modified) (6 diffs)
- trunk/Cocoa/Pester/Source/ParseDate.h (added)
- trunk/Cocoa/Pester/Source/ParseDate.m (added)
- trunk/Cocoa/Pester/Source/Pester.xcodeproj/nicholas.mode2v3 (modified) (28 diffs)
- trunk/Cocoa/Pester/Source/Pester.xcodeproj/nicholas.pbxuser (modified) (21 diffs)
- trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj (modified) (21 diffs)
- trunk/Cocoa/Pester/Source/Read Me.rtfd/TXT.rtf (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/Cocoa/Pester/Source/English.lproj/InfoPlist.strings
r364 r367 2 2 3 3 CFBundleName = "Pester"; 4 CFBundleShortVersionString = "1.1b 6";5 CFBundleGetInfoString = "Pester 1.1b 6, © 2002–07 Nicholas Riley";4 CFBundleShortVersionString = "1.1b7"; 5 CFBundleGetInfoString = "Pester 1.1b7, © 2002–07 Nicholas Riley"; 6 6 NSHumanReadableCopyright = "© 2002–07 Nicholas Riley"; trunk/Cocoa/Pester/Source/Info-Pester.plist
r366 r367 8 8 <string>Pester</string> 9 9 <key>CFBundleGetInfoString</key> 10 <string>Pester 1.1b 6, © 2002â07 Nicholas Riley</string>10 <string>Pester 1.1b7, © 2002â07 Nicholas Riley</string> 11 11 <key>CFBundleIconFile</key> 12 12 <string>Application icon</string> … … 20 20 <string>APPL</string> 21 21 <key>CFBundleShortVersionString</key> 22 <string>1.1b 6</string>22 <string>1.1b7</string> 23 23 <key>CFBundleSignature</key> 24 24 <string>Pest</string> 25 25 <key>CFBundleVersion</key> 26 <string>2 3</string>26 <string>24</string> 27 27 <key>NSMainNibFile</key> 28 28 <string>MainMenu</string> trunk/Cocoa/Pester/Source/NJRDateFormatter.m
r361 r367 8 8 9 9 #import "NJRDateFormatter.h" 10 11 // generated by perl -MExtUtils::Embed -e xsinit -- -o perlxsi.c 12 #include <EXTERN.h> 13 #include <perl.h> 14 15 EXTERN_C void xs_init (pTHX); 16 17 EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); 18 19 EXTERN_C void 20 xs_init(pTHX) 21 { 22 char *file = __FILE__; 23 dXSUB_SYS; 24 25 /* DynaLoader is a special case */ 26 newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); 27 } 28 // end generated code 29 30 static PerlInterpreter *my_perl; 31 static NSDateFormatter *dateManipFormatter; 32 33 static NSDate *parse_natural_language_date(NSString *input) { 34 if (my_perl == NULL) return nil; 35 36 if ([input rangeOfString: @"|"].length > 0) { 37 NSMutableString *sanitized = [[input mutableCopy] autorelease]; 38 [sanitized replaceOccurrencesOfString: @"|" withString: @"" 39 options: NSLiteralSearch 40 range: NSMakeRange(0, [sanitized length])]; 41 input = sanitized; 42 } 43 44 NSString *temp = [[NSString alloc] initWithFormat: @"UnixDate(q|%@|, '%%q')", input]; 45 // NSLog(@"%@", temp); 46 SV *d = eval_pv([temp UTF8String], TRUE); 47 [temp release]; 48 if (d == NULL) return nil; 49 50 STRLEN s_len; 51 char *s = SvPV(d, s_len); 52 if (s == NULL || s_len == 0) return nil; 53 54 NSDate *date = [dateManipFormatter dateFromString: [NSString stringWithUTF8String: s]]; 55 // NSLog(@"%@", date); 56 57 return date; 58 } 59 60 static void init_perl(void) { 61 const char *argv[] = {"", "-CSD", "-I", "", "-MDate::Manip", "-e", "0"}; 62 argv[3] = [[[NSBundle mainBundle] resourcePath] fileSystemRepresentation]; 63 PERL_SYS_INIT(0, NULL); 64 my_perl = perl_alloc(); 65 if (my_perl == NULL) return; 66 67 perl_construct(my_perl); 68 if (perl_parse(my_perl, xs_init, 7, (char **)argv, NULL) != 0) goto fail; 69 70 PL_exit_flags |= PERL_EXIT_DESTRUCT_END; 71 if (perl_run(my_perl) != 0) goto fail; 72 73 // XXX detect localization changes 74 eval_pv("Date_Init(\"Language=English\", \"DateFormat=non-US\", \"Internal=1\"", TRUE); 75 76 if (parse_natural_language_date(@"tomorrow") == nil) goto fail; 77 78 return; 79 80 fail: 81 perl_destruct(my_perl); 82 perl_free(my_perl); 83 PERL_SYS_TERM(); 84 my_perl = NULL; 85 } 10 #import "ParseDate.h" 11 #include <dlfcn.h> 86 12 87 13 // workaround for bug in Jaguar (and earlier?) NSCalendarDate dateWithNaturalLanguageString: … … 120 46 + (void)initialize; 121 47 { 122 dateManipFormatter = [[NSDateFormatter alloc] init]; 123 [dateManipFormatter setDateFormat: @"yyyyMMddHHmmss"]; // Date::Manip's "%q" 124 init_perl(); 48 long minorVersion, majorVersion; 49 Gestalt(gestaltSystemVersionMajor, &majorVersion); 50 Gestalt(gestaltSystemVersionMinor, &minorVersion); 51 if (majorVersion != 10) 52 return; 53 54 NSString *libName; 55 if (minorVersion == 4) { 56 libName = @"libParseDate-10.4"; 57 } else if (minorVersion == 5) { 58 libName = @"libParseDate-10.5"; 59 } else { 60 return; 61 } 62 63 NSString *libPath = [[NSBundle mainBundle] pathForResource: libName ofType: @"dylib"]; 64 if (libPath == nil) 65 return; 66 67 void *lib = dlopen([libPath fileSystemRepresentation], RTLD_LAZY | RTLD_GLOBAL); 68 const char *libError; 69 if ( (libError = dlerror()) != NULL) { 70 NSLog(@"failed to dlopen %@: %s", libPath, libError); 71 return; 72 } 73 74 parse_natural_language_date = dlsym(lib, "parse_natural_language_date"); 75 if ( (libError = dlerror()) != NULL) { 76 NSLog(@"failed to look up parse_natural_language_date in %@: %s", libPath, libError); 77 parse_natural_language_date = NULL; 78 return; 79 } 125 80 } 126 81 … … 130 85 NSMutableArray *tryFormatters = [[NSMutableArray alloc] init]; 131 86 132 for ( NSDateFormatterStyle *s = formatterStyles ; *s < NSDateFormatterNoStyle ; *s++) {87 for (const NSDateFormatterStyle *s = formatterStyles ; *s < NSDateFormatterNoStyle ; *s++) { 133 88 NSDateFormatter *tryFormatter = [[NSDateFormatter alloc] init]; 134 89 [tryFormatter setLenient: YES]; … … 149 104 NSMutableArray *tryFormatters = [[NSMutableArray alloc] init]; 150 105 151 for ( NSDateFormatterStyle *s = formatterStyles ; *s < NSDateFormatterNoStyle ; *s++) {106 for (const NSDateFormatterStyle *s = formatterStyles ; *s < NSDateFormatterNoStyle ; *s++) { 152 107 NSDateFormatter *tryFormatter = [[NSDateFormatter alloc] init]; 153 108 [tryFormatter setLenient: YES]; … … 196 151 } 197 152 153 if (parse_natural_language_date == NULL) return nil; 154 198 155 date = parse_natural_language_date(string); 199 156 if (date != nil) goto success; … … 211 168 + (BOOL)naturalLanguageParsingAvailable; 212 169 { 213 return ( my_perl!= NULL);170 return (parse_natural_language_date != NULL); 214 171 } 215 172 @end trunk/Cocoa/Pester/Source/Pester.xcodeproj/nicholas.mode2v3
r366 r367 203 203 <dict> 204 204 <key>PBXProjectModuleGUID</key> 205 <string>E1 50468D0CFD567100DE47E9</string>205 <string>E126D5AE0D0003070024B2EA</string> 206 206 <key>PBXProjectModuleLabel</key> 207 207 <string>PSAlarm.m</string> … … 211 211 <dict> 212 212 <key>PBXProjectModuleGUID</key> 213 <string>E1 50468E0CFD567100DE47E9</string>213 <string>E126D5AF0D0003070024B2EA</string> 214 214 <key>PBXProjectModuleLabel</key> 215 215 <string>PSAlarm.m</string> … … 217 217 <integer>0</integer> 218 218 <key>bookmark</key> 219 <string>E1 5046B30CFD5BA600DE47E9</string>219 <string>E126D5B10D0003070024B2EA</string> 220 220 <key>history</key> 221 221 <array> 222 <string>E150468F0CFD567100DE47E9</string> 223 <string>E15046A90CFD5AF700DE47E9</string> 224 </array> 225 <key>prevStack</key> 226 <array> 227 <string>E15046900CFD567100DE47E9</string> 228 <string>E15046910CFD567100DE47E9</string> 222 <string>E126D5B00D0003070024B2EA</string> 229 223 </array> 230 224 </dict> … … 242 236 <true/> 243 237 <key>RubberWindowFrame</key> 244 <string>179 245 1052 933 0 0 1920 1178 </string> 245 </dict> 246 </dict> 247 <dict> 248 <key>Content</key> 249 <dict> 250 <key>PBXProjectModuleGUID</key> 251 <string>E15046930CFD567100DE47E9</string> 252 <key>PBXProjectModuleLabel</key> 253 <string>PSSnoozeUntilController.m</string> 254 <key>PBXSplitModuleInNavigatorKey</key> 255 <dict> 256 <key>Split0</key> 257 <dict> 258 <key>PBXProjectModuleGUID</key> 259 <string>E15046940CFD567100DE47E9</string> 260 <key>PBXProjectModuleLabel</key> 261 <string>PSSnoozeUntilController.m</string> 262 <key>_historyCapacity</key> 263 <integer>0</integer> 264 <key>bookmark</key> 265 <string>E15046B40CFD5BA600DE47E9</string> 266 <key>history</key> 267 <array> 268 <string>E15046950CFD567100DE47E9</string> 269 <string>E15046AD0CFD5B6400DE47E9</string> 270 </array> 271 <key>prevStack</key> 272 <array> 273 <string>E15046970CFD567100DE47E9</string> 274 <string>E15046980CFD567100DE47E9</string> 275 </array> 276 </dict> 277 <key>SplitCount</key> 278 <string>1</string> 279 </dict> 280 <key>StatusBarVisibility</key> 281 <false/> 282 </dict> 283 <key>Geometry</key> 284 <dict> 285 <key>Frame</key> 286 <string>{{0, -1}, {872, 915}}</string> 287 <key>PBXModuleWindowStatusBarHidden2</key> 288 <true/> 289 <key>RubberWindowFrame</key> 290 <string>688 76 872 935 0 0 1920 1178 </string> 291 </dict> 292 </dict> 293 <dict> 294 <key>Content</key> 295 <dict> 296 <key>PBXProjectModuleGUID</key> 297 <string>E150469E0CFD567100DE47E9</string> 298 <key>PBXProjectModuleLabel</key> 299 <string>PSAlarm.h</string> 300 <key>PBXSplitModuleInNavigatorKey</key> 301 <dict> 302 <key>Split0</key> 303 <dict> 304 <key>PBXProjectModuleGUID</key> 305 <string>E150469F0CFD567100DE47E9</string> 306 <key>PBXProjectModuleLabel</key> 307 <string>PSAlarm.h</string> 308 <key>_historyCapacity</key> 309 <integer>0</integer> 310 <key>bookmark</key> 311 <string>E15046B50CFD5BA600DE47E9</string> 312 <key>history</key> 313 <array> 314 <string>E15046A00CFD567100DE47E9</string> 315 <string>E15046A10CFD567100DE47E9</string> 316 </array> 317 <key>prevStack</key> 318 <array> 319 <string>E15046A20CFD567100DE47E9</string> 320 <string>E15046A30CFD567100DE47E9</string> 321 <string>E15046A40CFD567100DE47E9</string> 322 </array> 323 </dict> 324 <key>SplitCount</key> 325 <string>1</string> 326 </dict> 327 <key>StatusBarVisibility</key> 328 <false/> 329 </dict> 330 <key>Geometry</key> 331 <dict> 332 <key>Frame</key> 333 <string>{{0, -1}, {1016, 966}}</string> 334 <key>PBXModuleWindowStatusBarHidden2</key> 335 <true/> 336 <key>RubberWindowFrame</key> 337 <string>466 188 1016 986 0 0 1920 1178 </string> 338 </dict> 339 </dict> 340 <dict> 341 <key>Content</key> 342 <dict> 343 <key>PBXProjectModuleGUID</key> 344 <string>E150469A0CFD567100DE47E9</string> 345 <key>PBXProjectModuleLabel</key> 346 <string>PSTimeDateEditor.m</string> 347 <key>PBXSplitModuleInNavigatorKey</key> 348 <dict> 349 <key>Split0</key> 350 <dict> 351 <key>PBXProjectModuleGUID</key> 352 <string>E150469B0CFD567100DE47E9</string> 353 <key>PBXProjectModuleLabel</key> 354 <string>PSTimeDateEditor.m</string> 355 <key>_historyCapacity</key> 356 <integer>0</integer> 357 <key>bookmark</key> 358 <string>E15046B60CFD5BA600DE47E9</string> 359 <key>history</key> 360 <array> 361 <string>E150469C0CFD567100DE47E9</string> 362 </array> 363 </dict> 364 <key>SplitCount</key> 365 <string>1</string> 366 </dict> 367 <key>StatusBarVisibility</key> 368 <false/> 369 </dict> 370 <key>Geometry</key> 371 <dict> 372 <key>Frame</key> 373 <string>{{0, -1}, {889, 678}}</string> 374 <key>PBXModuleWindowStatusBarHidden2</key> 375 <true/> 376 <key>RubberWindowFrame</key> 377 <string>102 123 889 698 0 0 1920 1178 </string> 378 </dict> 379 </dict> 380 <dict> 381 <key>Content</key> 382 <dict> 383 <key>PBXProjectModuleGUID</key> 384 <string>E15046A60CFD567100DE47E9</string> 385 <key>PBXProjectModuleLabel</key> 386 <string>PSAlarmNotifierController.m</string> 387 <key>PBXSplitModuleInNavigatorKey</key> 388 <dict> 389 <key>Split0</key> 390 <dict> 391 <key>PBXProjectModuleGUID</key> 392 <string>E15046A70CFD567100DE47E9</string> 393 <key>PBXProjectModuleLabel</key> 394 <string>PSAlarmNotifierController.m</string> 395 <key>_historyCapacity</key> 396 <integer>0</integer> 397 <key>bookmark</key> 398 <string>E15046B70CFD5BA600DE47E9</string> 399 <key>history</key> 400 <array> 401 <string>E15046760CFD507900DE47E9</string> 402 </array> 403 </dict> 404 <key>SplitCount</key> 405 <string>1</string> 406 </dict> 407 <key>StatusBarVisibility</key> 408 <false/> 409 </dict> 410 <key>Geometry</key> 411 <dict> 412 <key>Frame</key> 413 <string>{{0, -1}, {820, 819}}</string> 414 <key>PBXModuleWindowStatusBarHidden2</key> 415 <true/> 416 <key>RubberWindowFrame</key> 417 <string>613 82 820 839 0 0 1920 1178 </string> 238 <string>840 106 1052 933 0 0 1920 1178 </string> 418 239 </dict> 419 240 </dict> … … 481 302 <string>29B97314FDCFA39411CA2CEA</string> 482 303 <string>080E96DDFE201D6D7F000001</string> 483 <string>F560E311035787D501A4E466</string> 484 <string>29B97317FDCFA39411CA2CEA</string> 485 <string>E10E71F3040C335800050002</string> 486 <string>E19DCBE503BE516000B934BF</string> 487 <string>E17562BC0CF8E7A800FC5057</string> 304 <string>F560E312035787E001A4E466</string> 305 <string>19C28FACFE9D520D11CA2CBB</string> 488 306 </array> 489 307 <key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key> 490 308 <array> 491 309 <array> 492 <integer> 22</integer>493 <integer> 4</integer>310 <integer>11</integer> 311 <integer>7</integer> 494 312 <integer>1</integer> 495 313 <integer>0</integer> … … 497 315 </array> 498 316 <key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key> 499 <string>{{0, 596}, {334, 441}}</string>317 <string>{{0, 0}, {334, 441}}</string> 500 318 </dict> 501 319 <key>PBXTopSmartGroupGIDs</key> … … 516 334 </array> 517 335 <key>RubberWindowFrame</key> 518 <string>15 70 647351 527 0 0 1920 1178 </string>336 <string>1565 182 351 527 0 0 1920 1178 </string> 519 337 </dict> 520 338 <key>Module</key> … … 556 374 <array> 557 375 <array> 376 <integer>3</integer> 558 377 <integer>0</integer> 559 378 </array> … … 656 475 <key>TableOfContents</key> 657 476 <array> 658 <string>E1 5046720CFD4F8A00DE47E9</string>659 <string>E1 5046730CFD4F8A00DE47E9</string>477 <string>E126D5AC0D0003070024B2EA</string> 478 <string>E126D5AD0D0003070024B2EA</string> 660 479 <string>1C9437FD063B20B00039CFAC</string> 661 480 <string>1C9437FE063B20B00039CFAC</string> … … 690 509 <key>WindowOrderList</key> 691 510 <array> 692 <string>1C530D54069F1CE1000CFCEE</string> 693 <string>E15046A60CFD567100DE47E9</string> 694 <string>1C530D52069F1CE1000CFCEE</string> 695 <string>E150469A0CFD567100DE47E9</string> 696 <string>1C530D5B069F1CE1000CFCEE</string> 697 <string>1C530D57069F1CE1000CFCEE</string> 698 <string>E150469E0CFD567100DE47E9</string> 699 <string>E15046930CFD567100DE47E9</string> 700 <string>E150468D0CFD567100DE47E9</string> 511 <string>E126D5AE0D0003070024B2EA</string> 701 512 <string>/Users/nicholas/Documents/Development/Pester/Source/Pester.xcodeproj</string> 702 513 </array> 703 514 <key>WindowString</key> 704 <string>15 70 647351 527 0 0 1920 1178 </string>515 <string>1565 182 351 527 0 0 1920 1178 </string> 705 516 <key>WindowToolsV3</key> 706 517 <array> … … 855 666 <array> 856 667 <dict> 857 <key>BecomeActive</key>858 <true/>859 668 <key>ContentConfiguration</key> 860 669 <dict> … … 862 671 <string>1CD0528F0623707200166675</string> 863 672 <key>PBXProjectModuleLabel</key> 864 <string> PSAlarm.m</string>673 <string></string> 865 674 <key>StatusBarVisibility</key> 866 675 <true/> … … 871 680 <string>{{0, 0}, {930, 253}}</string> 872 681 <key>RubberWindowFrame</key> 873 <string> 928 514930 535 0 0 1920 1178 </string>682 <string>629 565 930 535 0 0 1920 1178 </string> 874 683 </dict> 875 684 <key>Module</key> … … 879 688 </dict> 880 689 <dict> 690 <key>BecomeActive</key> 691 <true/> 881 692 <key>ContentConfiguration</key> 882 693 <dict> … … 895 706 <string>{{0, 258}, {930, 236}}</string> 896 707 <key>RubberWindowFrame</key> 897 <string> 928 514930 535 0 0 1920 1178 </string>708 <string>629 565 930 535 0 0 1920 1178 </string> 898 709 </dict> 899 710 <key>Module</key> … … 918 729 <array> 919 730 <string>1C530D52069F1CE1000CFCEE</string> 920 <string>E1 50467F0CFD54FF00DE47E9</string>731 <string>E19CC6530CFDF6940079DCFC</string> 921 732 <string>1CD0528F0623707200166675</string> 922 733 <string>XCMainBuildResultsModuleGUID</string> … … 925 736 <string>xcode.toolbar.config.buildV3</string> 926 737 <key>WindowString</key> 927 <string> 928 514930 535 0 0 1920 1178 </string>738 <string>629 565 930 535 0 0 1920 1178 </string> 928 739 <key>WindowToolGUID</key> 929 740 <string>1C530D52069F1CE1000CFCEE</string> … … 960 771 <key>sizes</key> 961 772 <array> 962 <string>{{0, 0}, {445, 3 75}}</string>963 <string>{{445, 0}, {536, 3 75}}</string>773 <string>{{0, 0}, {445, 380}}</string> 774 <string>{{445, 0}, {536, 380}}</string> 964 775 </array> 965 776 </dict> … … 976 787 <key>sizes</key> 977 788 <array> 978 <string>{{0, 0}, {981, 3 75}}</string>979 <string>{{0, 3 75}, {981, 343}}</string>789 <string>{{0, 0}, {981, 380}}</string> 790 <string>{{0, 380}, {981, 338}}</string> 980 791 </array> 981 792 </dict> … … 1010 821 </array> 1011 822 <key>Frame</key> 1012 <string>{{445, 0}, {536, 3 75}}</string>823 <string>{{445, 0}, {536, 380}}</string> 1013 824 <key>RubberWindowFrame</key> 1014 825 <string>843 200 981 759 0 0 1920 1178 </string> … … 1038 849 <array> 1039 850 <string>1C530D54069F1CE1000CFCEE</string> 1040 <string>E1 5046800CFD54FF00DE47E9</string>851 <string>E19CC6130CFDF0FB0079DCFC</string> 1041 852 <string>1C162984064C10D400B95A72</string> 1042 <string>E1 5046810CFD54FF00DE47E9</string>1043 <string>E1 5046820CFD54FF00DE47E9</string>1044 <string>E1 5046830CFD54FF00DE47E9</string>1045 <string>E1 5046840CFD54FF00DE47E9</string>1046 <string>E1 5046850CFD54FF00DE47E9</string>853 <string>E19CC6140CFDF0FB0079DCFC</string> 854 <string>E19CC6150CFDF0FB0079DCFC</string> 855 <string>E19CC6160CFDF0FB0079DCFC</string> 856 <string>E19CC6170CFDF0FB0079DCFC</string> 857 <string>E19CC6180CFDF0FB0079DCFC</string> 1047 858 </array> 1048 859 <key>ToolbarConfiguration</key> … … 1076 887 <string>1CDD528C0622207200134675</string> 1077 888 <key>PBXProjectModuleLabel</key> 1078 <string> PSAlarm.m</string>889 <string><No Editor></string> 1079 890 <key>StatusBarVisibility</key> 1080 891 <true/> … … 1134 945 <array> 1135 946 <string>1C530D57069F1CE1000CFCEE</string> 1136 <string>E1 5046870CFD54FF00DE47E9</string>1137 <string>E1 5046880CFD54FF00DE47E9</string>947 <string>E19CC6280CFDF14A0079DCFC</string> 948 <string>E19CC6290CFDF14A0079DCFC</string> 1138 949