pax_global_header00006660000000000000000000000064127127463050014521gustar00rootroot0000000000000052 comment=41ba8ca9c070a6fb13de059453fec19409e65839 TextEdit-master/000077500000000000000000000000001271274630500141105ustar00rootroot00000000000000TextEdit-master/Controller.h000066400000000000000000000001001271274630500163730ustar00rootroot00000000000000#import @interface Controller : NSObject @end TextEdit-master/Controller.m000066400000000000000000000206011271274630500164100ustar00rootroot00000000000000/* Controller.m Copyright (c) 1995-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer TextEdit milestones: Initially created 1/28/95 Multiple page support 2/16/95 Preferences panel 10/24/95 HTML 7/3/97 Exported services 8/1/97 Java version created 8/11/97 Undo 9/17/97 Scripting 6/18/98 Aquafication 11/1/99 Encoding customization 5/20/02 NSDocument conversion 6/1/05 Central controller object for TextEdit, for implementing app functionality (services) as well as few tidbits for which there are no dedicated controllers. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import #import "Controller.h" #import "DocumentController.h" #import "Document.h" #import "EncodingManager.h" #import "TextEditDefaultsKeys.h" #import "TextEditErrors.h" #import "TextEditMisc.h" static NSDictionary *defaultValues() { static NSDictionary *dict = nil; if (!dict) { dict = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithInteger:30], AutosaveDelay, [NSNumber numberWithBool:NO], NumberPagesWhenPrinting, [NSNumber numberWithBool:YES], DeleteBackup, [NSNumber numberWithBool:YES], RichText, [NSNumber numberWithBool:NO], ShowPageBreaks, [NSNumber numberWithBool:NO], OpenPanelFollowsMainWindow, [NSNumber numberWithBool:YES], AddExtensionToNewPlainTextFiles, [NSNumber numberWithInteger:75], WindowWidth, [NSNumber numberWithInteger:30], WindowHeight, [NSNumber numberWithUnsignedInteger:NoStringEncoding], PlainTextEncodingForRead, [NSNumber numberWithUnsignedInteger:NoStringEncoding], PlainTextEncodingForWrite, [NSNumber numberWithInteger:8], TabWidth, [NSNumber numberWithInteger:50000], ForegroundLayoutToIndex, [NSNumber numberWithBool:NO], IgnoreRichText, [NSNumber numberWithBool:NO], IgnoreHTML, [NSNumber numberWithBool:YES], CheckSpellingAsYouType, [NSNumber numberWithBool:NO], CheckGrammarWithSpelling, [NSNumber numberWithBool:YES], CorrectSpellingAutomatically, [NSNumber numberWithBool:YES], ShowRuler, [NSNumber numberWithBool:YES], SmartCopyPaste, [NSNumber numberWithBool:NO], SmartQuotes, [NSNumber numberWithBool:NO], SmartDashes, [NSNumber numberWithBool:NO], SmartLinks, [NSNumber numberWithBool:NO], DataDetectors, [NSNumber numberWithBool:YES], TextReplacement, [NSNumber numberWithBool:NO], SubstitutionsEnabledInRichTextOnly, @"", AuthorProperty, @"", CompanyProperty, @"", CopyrightProperty, [NSNumber numberWithBool:NO], UseXHTMLDocType, [NSNumber numberWithBool:NO], UseTransitionalDocType, [NSNumber numberWithBool:YES], UseEmbeddedCSS, [NSNumber numberWithBool:NO], UseInlineCSS, [NSNumber numberWithUnsignedInteger:NSUTF8StringEncoding], HTMLEncoding, [NSNumber numberWithBool:YES], PreserveWhitespace, nil]; } return dict; } @implementation Controller + (void)initialize { // Set up default values for preferences managed by NSUserDefaultsController [[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues()]; [[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:defaultValues()]; } - (void)applicationDidFinishLaunching:(NSNotification *)notification { // To get service requests to go to the controller... [NSApp setServicesProvider:self]; } /*** Services support ***/ - (void)openFile:(NSPasteboard *)pboard userData:(NSString *)data error:(NSString **)error { NSString *filename, *origFilename; NSURL *url = nil; NSError *err = nil; NSString *type = [pboard availableTypeFromArray:[NSArray arrayWithObject: NSStringPboardType]]; if (type && (filename = origFilename = [pboard stringForType:type])) { BOOL success = NO; if ([filename isAbsolutePath] && (url = [NSURL fileURLWithPath:filename])) { // If seems to be a valid absolute path, first try using it as-is success = [(DocumentController *)[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:url display:YES error:&err] != nil; } if (!success) { // Check to see if the user mistakenly included a carriage return or more at the end of the file name... filename = [[filename substringWithRange:[filename lineRangeForRange:NSMakeRange(0, 0)]] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; if ([filename hasPrefix:@"~"]) filename = [filename stringByExpandingTildeInPath]; // Convert the "~username" case if (![origFilename isEqual:filename] && [filename isAbsolutePath]) { url = [NSURL fileURLWithPath:filename]; success = [(DocumentController *)[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:url display:YES error:&err] != nil; } } // Given that this is a one-way service (no return), we need to put up the error panel ourselves and we do not set *error. if (!success) { if (!err) { err = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileReadInvalidFileNameError userInfo:[NSDictionary dictionaryWithObjectsAndKeys:truncatedString(filename, PATH_MAX+10), NSFilePathErrorKey, nil]]; } [[NSAlert alertWithError:err] runModal]; } } } /* The following, apart from providing the service through the Services menu, allows the user to drop snippets of text on the TextEdit icon and have it open as a new document. */ - (void)openSelection:(NSPasteboard *)pboard userData:(NSString *)data error:(NSString **)error { NSError *err = nil; Document *document = [(DocumentController *)[NSDocumentController sharedDocumentController] openDocumentWithContentsOfPasteboard:pboard display:YES error:&err]; if (!document) { [[NSAlert alertWithError:err] runModal]; // No need to report an error string... } } @end TextEdit-master/Document.h000066400000000000000000000112351271274630500160410ustar00rootroot00000000000000#import @interface Document : NSDocument { // Book-keeping BOOL uniqueZone; /* YES if the zone was created specially for this document */ BOOL setUpPrintInfoDefaults; /* YES the first time -printInfo is called */ // Document data NSTextStorage *textStorage; /* The (styled) text content of the document */ CGFloat scaleFactor; /* The scale factor retreived from file */ BOOL isReadOnly; /* The document is locked and should not be modified */ NSColor *backgroundColor; /* The color of the document's background */ CGFloat hyphenationFactor; /* Hyphenation factor in range 0.0-1.0 */ NSSize viewSize; /* The view size, as stored in an RTF document. Can be NSZeroSize */ BOOL hasMultiplePages; /* Whether the document prefers a paged display */ // The next seven are document properties (applicable only to rich text documents) NSString *author; /* Corresponds to NSAuthorDocumentAttribute */ NSString *copyright; /* Corresponds to NSCopyrightDocumentAttribute */ NSString *company; /* Corresponds to NSCompanyDocumentAttribute */ NSString *title; /* Corresponds to NSTitleDocumentAttribute */ NSString *subject; /* Corresponds to NSSubjectDocumentAttribute */ NSString *comment; /* Corresponds to NSCommentDocumentAttribute */ NSArray *keywords; /* Corresponds to NSKeywordsDocumentAttribute */ // Information about how the document was created BOOL openedIgnoringRichText; /* Setting at the the time the doc was open (so revert does the same thing) */ NSStringEncoding documentEncoding; /* NSStringEncoding used to interpret / save the document */ BOOL convertedDocument; /* Converted (or filtered) from some other format (and hence not writable) */ BOOL lossyDocument; /* Loaded lossily, so might not be a good idea to overwrite */ BOOL transient; /* Untitled document automatically opened and never modified */ NSURL *defaultDestination; /* A hint as to where save dialog should default, used if -fileURL is nil */ // Temporary information about how to save the document NSStringEncoding documentEncodingForSaving; /* NSStringEncoding for saving the document */ } - (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName encoding:(NSStringEncoding)encoding ignoreRTF:(BOOL)ignoreRTF ignoreHTML:(BOOL)ignoreHTML error:(NSError **)outError; /* Is the document rich? */ - (BOOL)isRichText; - (void)setRichText:(BOOL)flag; /* Is the document read-only? */ - (BOOL)isReadOnly; - (void)setReadOnly:(BOOL)flag; /* Document background color */ - (NSColor *)backgroundColor; - (void)setBackgroundColor:(NSColor *)color; /* The encoding of the document... */ - (NSUInteger)encoding; - (void)setEncoding:(NSUInteger)encoding; /* Encoding of the document chosen when saving */ - (NSUInteger)encodingForSaving; - (void)setEncodingForSaving:(NSUInteger)encoding; /* Whether document was converted from some other format (filter services) */ - (BOOL)isConverted; - (void)setConverted:(BOOL)flag; /* Whether document was opened ignoring rich text */ - (BOOL)isOpenedIgnoringRichText; - (void)setOpenedIgnoringRichText:(BOOL)flag; /* Whether document was loaded lossily */ - (BOOL)isLossy; - (void)setLossy:(BOOL)flag; /* Hyphenation factor (0.0-1.0, 0.0 == disabled) */ - (float)hyphenationFactor; - (void)setHyphenationFactor:(float)factor; /* View size (as it should be saved in a RTF file) */ - (NSSize)viewSize; - (void)setViewSize:(NSSize)newSize; /* Scale factor; 1.0 is 100% */ - (CGFloat)scaleFactor; - (void)setScaleFactor:(CGFloat)scaleFactor; /* Attributes */ - (NSTextStorage *)textStorage; - (void)setTextStorage:(id)ts; // This will _copy_ the contents of the NS[Attributed]String ts into the document's textStorage. /* Page-oriented methods */ - (void)setHasMultiplePages:(BOOL)flag; - (BOOL)hasMultiplePages; - (NSSize)paperSize; - (void)setPaperSize:(NSSize)size; /* Action methods */ - (IBAction)toggleReadOnly:(id)sender; - (IBAction)togglePageBreaks:(id)sender; - (IBAction)saveDocumentAsPDFTo:(id)sender; /* Whether conversion to rich/plain be done without loss of information */ - (BOOL)toggleRichWillLoseInformation; /* Default text attributes for plain or rich text formats */ - (NSDictionary *)defaultTextAttributes:(BOOL)forRichText; - (void)applyDefaultTextAttributes:(BOOL)forRichText; /* Document properties */ - (NSDictionary *)documentPropertyToAttributeNameMappings; - (NSArray *)knownDocumentProperties; - (void)clearDocumentProperties; - (void)setDocumentPropertiesToDefaults; - (BOOL)hasDocumentProperties; /* Transient documents */ - (BOOL)isTransient; - (void)setTransient:(BOOL)flag; - (BOOL)isTransientAndCanBeReplaced; @end TextEdit-master/Document.m000066400000000000000000001563151271274630500160570ustar00rootroot00000000000000/* Document.m Copyright (c) 1995-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer Document object for TextEdit. As of TextEdit 1.5, a subclass of NSDocument. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import #import "EncodingManager.h" #import "Document.h" #import "DocumentController.h" #import "DocumentWindowController.h" #import "PrintPanelAccessoryController.h" #import "TextEditDefaultsKeys.h" #import "TextEditErrors.h" #import "TextEditMisc.h" #define oldEditPaddingCompensation 12.0 NSString *SimpleTextType = @"com.apple.traditional-mac-plain-text"; NSString *Word97Type = @"com.microsoft.word.doc"; NSString *Word2007Type = @"org.openxmlformats.wordprocessingml.document"; NSString *Word2003XMLType = @"com.microsoft.word.wordml"; NSString *OpenDocumentTextType = @"org.oasis-open.opendocument.text"; @implementation Document - (id)init { if ((self = [super init])) { [[self undoManager] disableUndoRegistration]; textStorage = [[NSTextStorage allocWithZone:[self zone]] init]; [self setBackgroundColor:[NSColor whiteColor]]; [self setEncoding:NoStringEncoding]; [self setEncodingForSaving:NoStringEncoding]; [self setScaleFactor:1.0]; [self setDocumentPropertiesToDefaults]; // Assume the default file type for now, since -initWithType:error: does not currently get called when creating documents using AppleScript. (4165700) [self setFileType:[[NSDocumentController sharedDocumentController] defaultType]]; [self setPrintInfo:[self printInfo]]; hasMultiplePages = [[NSUserDefaults standardUserDefaults] boolForKey:ShowPageBreaks]; [[self undoManager] enableUndoRegistration]; } return self; } - (NSDictionary *)textDocumentTypeToTextEditDocumentTypeMappingTable { static NSDictionary *documentMappings = nil; if (documentMappings == nil) { documentMappings = [[NSDictionary alloc] initWithObjectsAndKeys: @"text", NSPlainTextDocumentType, @"rtf", NSRTFTextDocumentType, @"rtfd", NSRTFDTextDocumentType, nil]; /* SimpleTextType, NSMacSimpleTextDocumentType, (NSString *)kUTTypeHTML, NSHTMLTextDocumentType, Word97Type, NSDocFormatTextDocumentType, Word2007Type, NSOfficeOpenXMLTextDocumentType, Word2003XMLType, NSWordMLTextDocumentType, OpenDocumentTextType, NSOpenDocumentTextDocumentType, (NSString *)kUTTypeWebArchive, NSWebArchiveTextDocumentType, */ } return documentMappings; } /* This method is called by the document controller. The message is passed on after information about the selected encoding (from our controller subclass) and preference regarding HTML and RTF formatting has been added. -lastSelectedEncodingForURL: returns the encoding specified in the Open panel, or the default encoding if the document was opened without an open panel. */ - (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError { DocumentController *docController = [DocumentController sharedDocumentController]; return [self readFromURL:absoluteURL ofType:typeName encoding:[docController lastSelectedEncodingForURL:absoluteURL] ignoreRTF:[docController lastSelectedIgnoreRichForURL:absoluteURL] ignoreHTML:[docController lastSelectedIgnoreHTMLForURL:absoluteURL] error:outError]; } - (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName encoding:(NSStringEncoding)encoding ignoreRTF:(BOOL)ignoreRTF ignoreHTML:(BOOL)ignoreHTML error:(NSError **)outError { NSMutableDictionary *options = [NSMutableDictionary dictionaryWithCapacity:5]; NSDictionary *docAttrs; id val, paperSizeVal, viewSizeVal; NSTextStorage *text = [self textStorage]; [[self undoManager] disableUndoRegistration]; [options setObject:absoluteURL forKey:NSBaseURLDocumentOption]; if (encoding != NoStringEncoding) { [options setObject:[NSNumber numberWithUnsignedInteger:encoding] forKey:NSCharacterEncodingDocumentOption]; } [self setEncoding:encoding]; // Check type to see if we should load the document as plain. Note that this check isn't always conclusive, which is why we do another check below, after the document has been loaded (and correctly categorized). if ((ignoreRTF && ([typeName isEqualToString: @"rtfd"] || [typeName isEqualToString: @"rtf"])) || [self isOpenedIgnoringRichText]) { [options setObject:NSPlainTextDocumentType forKey:NSDocumentTypeDocumentOption]; // Force plain [self setFileType: @"text"]; [self setOpenedIgnoringRichText:YES]; } [[text mutableString] setString:@""]; // Remove the layout managers while loading the text; mutableCopy retains the array so the layout managers aren't released NSMutableArray *layoutMgrs = [[text layoutManagers] mutableCopy]; NSEnumerator *layoutMgrEnum = [layoutMgrs objectEnumerator]; NSLayoutManager *layoutMgr = nil; while ((layoutMgr = [layoutMgrEnum nextObject])) [text removeLayoutManager:layoutMgr]; // We can do this loop twice, if the document is loaded as rich text although the user requested plain BOOL retry; do { BOOL success; NSString *docType; retry = NO; [text beginEditing]; success = [text readFromURL:absoluteURL options:options documentAttributes:&docAttrs error:outError]; if (!success) { [text endEditing]; layoutMgrEnum = [layoutMgrs objectEnumerator]; // rewind while ((layoutMgr = [layoutMgrEnum nextObject])) [text addLayoutManager:layoutMgr]; // Add the layout managers back [layoutMgrs release]; return NO; // return NO on error; outError has already been set } docType = [docAttrs objectForKey:NSDocumentTypeDocumentAttribute]; // First check to see if the document was rich and should have been loaded as plain if (![[options objectForKey:NSDocumentTypeDocumentOption] isEqualToString:NSPlainTextDocumentType] && ((ignoreHTML && [docType isEqual:NSHTMLTextDocumentType]) || (ignoreRTF && ([docType isEqual:NSRTFTextDocumentType] || [docType isEqual:NSWordMLTextDocumentType])))) { [text endEditing]; [[text mutableString] setString:@""]; [options setObject:NSPlainTextDocumentType forKey:NSDocumentTypeDocumentOption]; [self setFileType: @"text"]; [self setOpenedIgnoringRichText:YES]; retry = YES; } else { NSString *newFileType = [[self textDocumentTypeToTextEditDocumentTypeMappingTable] objectForKey:docType]; if (newFileType) { [self setFileType:newFileType]; } else { [self setFileType:@"rtf"]; // Hmm, a new type in the Cocoa text system. Treat it as rich. ??? Should set the converted flag too? } if ([self fileType] == nil || [[self fileType] isEqualToString: @"text"]) [self applyDefaultTextAttributes:NO]; [text endEditing]; } } while(retry); layoutMgrEnum = [layoutMgrs objectEnumerator]; // rewind while ((layoutMgr = [layoutMgrEnum nextObject])) [text addLayoutManager:layoutMgr]; // Add the layout managers back [layoutMgrs release]; val = [docAttrs objectForKey:NSCharacterEncodingDocumentAttribute]; [self setEncoding:(val ? [val unsignedIntegerValue] : NoStringEncoding)]; if ((val = [docAttrs objectForKey:NSConvertedDocumentAttribute])) { [self setConverted:([val integerValue] > 0)]; // Indicates filtered [self setLossy:([val integerValue] < 0)]; // Indicates lossily loaded } /* If the document has a stored value for view mode, use it. Otherwise wrap to window. */ if ((val = [docAttrs objectForKey:NSViewModeDocumentAttribute])) { [self setHasMultiplePages:([val integerValue] == 1)]; if ((val = [docAttrs objectForKey:NSViewZoomDocumentAttribute])) { [self setScaleFactor:([val doubleValue] / 100.0)]; } } else [self setHasMultiplePages:NO]; [self willChangeValueForKey:@"printInfo"]; if ((val = [docAttrs objectForKey:NSLeftMarginDocumentAttribute])) [[self printInfo] setLeftMargin:[val doubleValue]]; if ((val = [docAttrs objectForKey:NSRightMarginDocumentAttribute])) [[self printInfo] setRightMargin:[val doubleValue]]; if ((val = [docAttrs objectForKey:NSBottomMarginDocumentAttribute])) [[self printInfo] setBottomMargin:[val doubleValue]]; if ((val = [docAttrs objectForKey:NSTopMarginDocumentAttribute])) [[self printInfo] setTopMargin:[val doubleValue]]; [self didChangeValueForKey:@"printInfo"]; /* Pre MacOSX versions of TextEdit wrote out the view (window) size in PaperSize. If we encounter a non-MacOSX RTF file, and it's written by TextEdit, use PaperSize as ViewSize */ viewSizeVal = [docAttrs objectForKey:NSViewSizeDocumentAttribute]; paperSizeVal = [docAttrs objectForKey:NSPaperSizeDocumentAttribute]; if (paperSizeVal && NSEqualSizes([paperSizeVal sizeValue], NSZeroSize)) paperSizeVal = nil; // Protect against some old documents with 0 paper size if (viewSizeVal) { [self setViewSize:[viewSizeVal sizeValue]]; if (paperSizeVal) [self setPaperSize:[paperSizeVal sizeValue]]; } else { // No ViewSize... if (paperSizeVal) { // See if PaperSize should be used as ViewSize; if so, we also have some tweaking to do on it val = [docAttrs objectForKey:NSCocoaVersionDocumentAttribute]; if (val && ([val integerValue] < 100)) { // Indicates old RTF file; value described in AppKit/NSAttributedString.h NSSize size = [paperSizeVal sizeValue]; if (size.width > 0 && size.height > 0 && ![self hasMultiplePages]) { size.width = size.width - oldEditPaddingCompensation; [self setViewSize:size]; } } else { [self setPaperSize:[paperSizeVal sizeValue]]; } } } [self setHyphenationFactor:(val = [docAttrs objectForKey:NSHyphenationFactorDocumentAttribute]) ? [val floatValue] : 0]; [self setBackgroundColor:(val = [docAttrs objectForKey:NSBackgroundColorDocumentAttribute]) ? val : [NSColor whiteColor]]; // Set the document properties, generically, going through key value coding NSDictionary *map = [self documentPropertyToAttributeNameMappings]; NSArray *known = [self knownDocumentProperties]; for (NSUInteger i=0; i<[known count]; i++) { NSString *property = [known objectAtIndex: i]; [self setValue:[docAttrs objectForKey:[map objectForKey:property]] forKey:property]; // OK to set nil to clear } [self setReadOnly:((val = [docAttrs objectForKey:NSReadOnlyDocumentAttribute]) && ([val integerValue] > 0))]; [[self undoManager] enableUndoRegistration]; return YES; } - (NSDictionary *)defaultTextAttributes:(BOOL)forRichText { static NSParagraphStyle *defaultRichParaStyle = nil; NSMutableDictionary *textAttributes = [[[NSMutableDictionary alloc] initWithCapacity:2] autorelease]; if (forRichText) { [textAttributes setObject:[NSFont userFontOfSize:0.0] forKey:NSFontAttributeName]; if (defaultRichParaStyle == nil) { // We do this once... NSInteger cnt; NSString *measurementUnits = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleMeasurementUnits"]; CGFloat tabInterval = ([@"Centimeters" isEqual:measurementUnits]) ? (72.0 / 2.54) : (72.0 / 2.0); // Every cm or half inch NSMutableParagraphStyle *paraStyle = [[[NSMutableParagraphStyle alloc] init] autorelease]; [paraStyle setTabStops:[NSArray array]]; // This first clears all tab stops for (cnt = 0; cnt < 12; cnt++) { // Add 12 tab stops, at desired intervals... NSTextTab *tabStop = [[NSTextTab alloc] initWithType:NSLeftTabStopType location:tabInterval * (cnt + 1)]; [paraStyle addTabStop:tabStop]; [tabStop release]; } defaultRichParaStyle = [paraStyle copy]; } [textAttributes setObject:defaultRichParaStyle forKey:NSParagraphStyleAttributeName]; } else { NSFont *plainFont = [NSFont userFixedPitchFontOfSize:0.0]; NSInteger tabWidth = [[NSUserDefaults standardUserDefaults] integerForKey:TabWidth]; CGFloat charWidth = [@" " sizeWithAttributes:[NSDictionary dictionaryWithObject:plainFont forKey:NSFontAttributeName]].width; if (charWidth == 0) charWidth = [[plainFont screenFontWithRenderingMode:NSFontDefaultRenderingMode] maximumAdvancement].width; // Now use a default paragraph style, but with the tab width adjusted NSMutableParagraphStyle *mStyle = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease]; [mStyle setTabStops:[NSArray array]]; [mStyle setDefaultTabInterval:(charWidth * tabWidth)]; [textAttributes setObject:[[mStyle copy] autorelease] forKey:NSParagraphStyleAttributeName]; // Also set the font [textAttributes setObject:plainFont forKey:NSFontAttributeName]; } return textAttributes; } - (void)applyDefaultTextAttributes:(BOOL)forRichText { NSDictionary *textAttributes = [self defaultTextAttributes:forRichText]; NSTextStorage *text = [self textStorage]; [text setAttributes:textAttributes range: NSMakeRange(0, [[self textStorage] length])]; /* // We now preserve base writing direction even for plain text, using the 10.6-introduced attribute enumeration API [text enumerateAttribute:NSParagraphStyleAttributeName inRange:NSMakeRange(0, [text length]) options:0 usingBlock:^(id paragraphStyle, NSRange paragraphStyleRange, BOOL *stop){ NSWritingDirection writingDirection = paragraphStyle ? [(NSParagraphStyle *)paragraphStyle baseWritingDirection] : NSWritingDirectionNatural; // We also preserve NSWritingDirectionAttributeName (new in 10.6) [text enumerateAttribute:NSWritingDirectionAttributeName inRange:paragraphStyleRange options:0 usingBlock:^(id value, NSRange attributeRange, BOOL *stop){ [value retain]; [text setAttributes:textAttributes range:attributeRange]; if (value) [text addAttribute:NSWritingDirectionAttributeName value:value range:attributeRange]; [value release]; }]; if (writingDirection != NSWritingDirectionNatural) [text setBaseWritingDirection:writingDirection range:paragraphStyleRange]; }]; */ } /* This method will return a suggested encoding for the document. In Leopard, unless the user has specified a favorite encoding for saving that applies to the document, we use UTF-8. */ - (NSStringEncoding)suggestedDocumentEncoding { NSUInteger enc = NoStringEncoding; NSNumber *val = [[NSUserDefaults standardUserDefaults] objectForKey:PlainTextEncodingForWrite]; if (val) { NSStringEncoding chosenEncoding = [val unsignedIntegerValue]; if ((chosenEncoding != NoStringEncoding) && (chosenEncoding != NSUnicodeStringEncoding) && (chosenEncoding != NSUTF8StringEncoding)) { if ([[[self textStorage] string] canBeConvertedToEncoding:chosenEncoding]) enc = chosenEncoding; } } if (enc == NoStringEncoding) enc = NSUTF8StringEncoding; // Default to UTF-8 return enc; } /* Returns an object that represents the document to be written to file. */ - (id)fileWrapperOfType:(NSString *)typeName error:(NSError **)outError { NSTextStorage *text = [self textStorage]; NSRange range = NSMakeRange(0, [text length]); NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSValue valueWithSize:[self paperSize]], NSPaperSizeDocumentAttribute, [NSNumber numberWithInteger:[self isReadOnly] ? 1 : 0], NSReadOnlyDocumentAttribute, [NSNumber numberWithFloat:[self hyphenationFactor]], NSHyphenationFactorDocumentAttribute, [NSNumber numberWithDouble:[[self printInfo] leftMargin]], NSLeftMarginDocumentAttribute, [NSNumber numberWithDouble:[[self printInfo] rightMargin]], NSRightMarginDocumentAttribute, [NSNumber numberWithDouble:[[self printInfo] bottomMargin]], NSBottomMarginDocumentAttribute, [NSNumber numberWithDouble:[[self printInfo] topMargin]], NSTopMarginDocumentAttribute, [NSNumber numberWithInteger:[self hasMultiplePages] ? 1 : 0], NSViewModeDocumentAttribute, nil]; NSString *docType = nil; id val = nil; // temporary values NSSize size = [self viewSize]; if (!NSEqualSizes(size, NSZeroSize)) { [dict setObject:[NSValue valueWithSize:size] forKey:NSViewSizeDocumentAttribute]; } if ([@"rtf" isEqualToString:typeName]) docType = NSRTFTextDocumentType; else if ([@"rtfd" isEqualToString:typeName]) docType = NSRTFDTextDocumentType; else if ([@"text" isEqualToString:typeName]) docType = NSPlainTextDocumentType; else [NSException raise:NSInvalidArgumentException format:@"%@ is not a recognized document type.", typeName]; if (docType) [dict setObject:docType forKey:NSDocumentTypeDocumentAttribute]; if ([self hasMultiplePages] && ([self scaleFactor] != 1.0)) [dict setObject:[NSNumber numberWithDouble:[self scaleFactor] * 100.0] forKey:NSViewZoomDocumentAttribute]; if ((val = [self backgroundColor])) [dict setObject:val forKey:NSBackgroundColorDocumentAttribute]; if (docType == NSPlainTextDocumentType) { NSStringEncoding enc = [self encodingForSaving]; // check here in case this didn't go through save panel (i.e. scripting) if (enc == NoStringEncoding) { enc = [self encoding]; if (enc == NoStringEncoding) enc = [self suggestedDocumentEncoding]; } [dict setObject:[NSNumber numberWithUnsignedInteger:enc] forKey:NSCharacterEncodingDocumentAttribute]; } else if (docType == NSHTMLTextDocumentType) { // || docType == NSWebArchiveTextDocumentType) { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableArray *excludedElements = [NSMutableArray array]; if (![defaults boolForKey:UseXHTMLDocType]) [excludedElements addObject:@"XML"]; if (![defaults boolForKey:UseTransitionalDocType]) [excludedElements addObjectsFromArray:[NSArray arrayWithObjects:@"APPLET", @"BASEFONT", @"CENTER", @"DIR", @"FONT", @"ISINDEX", @"MENU", @"S", @"STRIKE", @"U", nil]]; if (![defaults boolForKey:UseEmbeddedCSS]) { [excludedElements addObject:@"STYLE"]; if (![defaults boolForKey:UseInlineCSS]) [excludedElements addObject:@"SPAN"]; } if (![defaults boolForKey:PreserveWhitespace]) { [excludedElements addObject:@"Apple-converted-space"]; [excludedElements addObject:@"Apple-converted-tab"]; [excludedElements addObject:@"Apple-interchange-newline"]; } [dict setObject:excludedElements forKey:NSExcludedElementsDocumentAttribute]; [dict setObject:[defaults objectForKey:HTMLEncoding] forKey:NSCharacterEncodingDocumentAttribute]; [dict setObject:[NSNumber numberWithInteger:2] forKey:NSPrefixSpacesDocumentAttribute]; } // Set the document properties, generically, going through key value coding NSArray *known = [self knownDocumentProperties]; for (NSUInteger i=0; i<[known count]; i++) { NSString *property = [known objectAtIndex: i]; id value = [self valueForKey:property]; if (value && ![value isEqual:@""] && ![value isEqual:[NSArray array]]) [dict setObject:value forKey:[[self documentPropertyToAttributeNameMappings] objectForKey:property]]; } NSFileWrapper *result = nil; if (docType == NSRTFDTextDocumentType || (docType == NSPlainTextDocumentType && ![self isOpenedIgnoringRichText])) { // We obtain a file wrapper from the text storage for RTFD (to produce a directory), or for true plain-text documents (to write out encoding in extended attributes) result = [text fileWrapperFromRange:range documentAttributes:dict error:outError]; // returns NSFileWrapper } else { NSData *data = [text dataFromRange:range documentAttributes:dict error:outError]; // returns NSData if (data) { result = [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease]; if (!result && outError) *outError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSFileWriteUnknownError userInfo:nil]; // Unlikely, but just in case we should generate an NSError for this case } } return result; } /* Clear the delegates of the text views and window, then release all resources and go away... */ - (void)dealloc { [textStorage release]; [backgroundColor release]; [author release]; [comment release]; [subject release]; [title release]; [keywords release]; [copyright release]; [defaultDestination release]; if (uniqueZone) NSRecycleZone([self zone]); [super dealloc]; } - (CGFloat)scaleFactor { return scaleFactor; } - (void)setScaleFactor:(CGFloat)newScaleFactor { scaleFactor = newScaleFactor; } - (NSSize)viewSize { return viewSize; } - (void)setViewSize:(NSSize)size { viewSize = size; } - (void)setReadOnly:(BOOL)flag { isReadOnly = flag; } - (BOOL)isReadOnly { return isReadOnly; } - (void)setBackgroundColor:(NSColor *)color { id oldCol = backgroundColor; backgroundColor = [color copy]; [oldCol release]; } - (NSColor *)backgroundColor { return backgroundColor; } - (NSTextStorage *)textStorage { return textStorage; } - (NSSize)paperSize { return [[self printInfo] paperSize]; } - (void)setPaperSize:(NSSize)size { NSPrintInfo *oldPrintInfo = [self printInfo]; if (!NSEqualSizes(size, [oldPrintInfo paperSize])) { NSPrintInfo *newPrintInfo = [oldPrintInfo copy]; [newPrintInfo setPaperSize:size]; [self setPrintInfo:newPrintInfo]; [newPrintInfo release]; } } /* Hyphenation related methods. */ - (void)setHyphenationFactor:(float)factor { hyphenationFactor = factor; } - (float)hyphenationFactor { return hyphenationFactor; } /* Encoding... */ - (NSUInteger)encoding { return documentEncoding; } - (void)setEncoding:(NSUInteger)encoding { documentEncoding = encoding; } /* This is the encoding used for saving; valid only during a save operation */ - (NSUInteger)encodingForSaving { return documentEncodingForSaving; } - (void)setEncodingForSaving:(NSUInteger)encoding { documentEncodingForSaving = encoding; } - (BOOL)isConverted { return convertedDocument; } - (void)setConverted:(BOOL)flag { convertedDocument = flag; } - (BOOL)isLossy { return lossyDocument; } - (void)setLossy:(BOOL)flag { lossyDocument = flag; } - (BOOL)isOpenedIgnoringRichText { return openedIgnoringRichText; } - (void)setOpenedIgnoringRichText:(BOOL)flag { openedIgnoringRichText = flag; } /* A transient document is an untitled document that was opened automatically. If a real document is opened before the transient document is edited, the real document should replace the transient. If a transient document is edited, it ceases to be transient. */ - (BOOL)isTransient { return transient; } - (void)setTransient:(BOOL)flag { transient = flag; } /* We can't replace transient document that have sheets on them. */ - (BOOL)isTransientAndCanBeReplaced { if (![self isTransient]) return NO; //for (NSWindowController *controller in [self windowControllers]) if ([[controller window] attachedSheet]) return NO; return YES; } /* The rich text status is dependent on the document type, and vice versa. Making a plain document rich, will -setFileType: to RTF. */ - (void)setRichText:(BOOL)flag { if (flag != [self isRichText]) { [self setFileType:(NSString *)(flag ? @"rtf" : @"text")]; if (flag) { [self setDocumentPropertiesToDefaults]; } else { [self clearDocumentProperties]; } } } - (BOOL)isRichText { return ![[self fileType] isEqualToString: @"text"]; } /* Document properties management */ /* Table mapping document property keys "company", etc, to text system document attribute keys (NSCompanyDocumentAttribute, etc) */ - (NSDictionary *)documentPropertyToAttributeNameMappings { static NSDictionary *dict = nil; if (!dict) dict = [[NSDictionary alloc] initWithObjectsAndKeys: NSCompanyDocumentAttribute, @"company", NSAuthorDocumentAttribute, @"author", NSKeywordsDocumentAttribute, @"keywords", NSCopyrightDocumentAttribute, @"copyright", NSTitleDocumentAttribute, @"title", NSSubjectDocumentAttribute, @"subject", NSCommentDocumentAttribute, @"comment", nil]; return dict; } - (NSArray *)knownDocumentProperties { return [[self documentPropertyToAttributeNameMappings] allKeys]; } /* If there are document properties and they are not the same as the defaults established in preferences, return YES */ - (BOOL)hasDocumentProperties { NSArray *known = [self knownDocumentProperties]; for (NSUInteger i=0; i<[known count]; i++) { NSString *key = [known objectAtIndex: i]; id value = [self valueForKey:key]; if (value && ![value isEqual:[[NSUserDefaults standardUserDefaults] objectForKey:key]]) return YES; } return NO; } /* This actually clears all properties (rather than setting them to default values established in preferences) */ - (void)clearDocumentProperties { NSArray *known = [self knownDocumentProperties]; for (NSUInteger i=0; i<[known count]; i++) { NSString *key = [known objectAtIndex: i]; [self setValue:nil forKey:key]; } } /* This sets document properties to values established in defaults */ - (void)setDocumentPropertiesToDefaults { NSArray *known = [self knownDocumentProperties]; for (NSUInteger i=0; i<[known count]; i++) { NSString *key = [known objectAtIndex: i]; [self setValue:[[NSUserDefaults standardUserDefaults] objectForKey:key] forKey:key]; } } /* We implement a setValue:forDocumentProperty: to work around NSUndoManager bug where prepareWithInvocationTarget: fails to freeze-dry invocations with "known" methods such as setValue:forKey:. */ - (void)setValue:(id)value forDocumentProperty:(NSString *)property { id oldValue = [self valueForKey:property]; [[[self undoManager] prepareWithInvocationTarget:self] setValue:oldValue forDocumentProperty:property]; [[self undoManager] setActionName:NSLocalizedString(property, "")]; // Potential strings for action names are listed below (for genstrings to pick up) // Call the regular KVC mechanism to get the value to be properly set [super setValue:value forKey:property]; } - (void)setValue:(id)value forKey:(NSString *)key { if ([[self knownDocumentProperties] containsObject:key]) { [self setValue:value forDocumentProperty:key]; // We take a side-trip to this method to register for undo } else { [super setValue:value forKey:key]; // In case some other KVC call is sent to Document, we treat it normally } } /* For genstrings: NSLocalizedStringWithDefaultValue(@"author", @"", @"", @"Change Author", @"Undo menu change string, without the 'Undo'"); NSLocalizedStringWithDefaultValue(@"copyright", @"", @"", @"Change Copyright", @"Undo menu change string, without the 'Undo'"); NSLocalizedStringWithDefaultValue(@"subject", @"", @"", @"Change Subject", @"Undo menu change string, without the 'Undo'"); NSLocalizedStringWithDefaultValue(@"title", @"", @"", @"Change Title", @"Undo menu change string, without the 'Undo'"); NSLocalizedStringWithDefaultValue(@"company", @"", @"", @"Change Company", @"Undo menu change string, without the 'Undo'"); NSLocalizedStringWithDefaultValue(@"comment", @"", @"", @"Change Comment", @"Undo menu change string, without the 'Undo'"); NSLocalizedStringWithDefaultValue(@"keywords", @"", @"", @"Change Keywords", @"Undo menu change string, without the 'Undo'"); */ - (NSPrintOperation *)printOperationWithSettings:(NSDictionary *)printSettings error:(NSError **)outError { NSPrintInfo *tempPrintInfo = [self printInfo]; BOOL numberPages = [[NSUserDefaults standardUserDefaults] boolForKey:NumberPagesWhenPrinting]; if ([printSettings count] || numberPages) { tempPrintInfo = [[tempPrintInfo copy] autorelease]; [[tempPrintInfo dictionary] addEntriesFromDictionary:printSettings]; if (numberPages) { // FIXME: //[[tempPrintInfo dictionary] setValue:[NSNumber numberWithBool:YES] forKey:NSPrintHeaderAndFooter]; } } if ([[self windowControllers] count] == 0) { [self makeWindowControllers]; } NSPrintOperation *op = [NSPrintOperation printOperationWithView:[[[self windowControllers] objectAtIndex:0] documentView] printInfo:tempPrintInfo]; [op setShowsPrintPanel:YES]; [op setShowsProgressPanel:YES]; //[[[self windowControllers] objectAtIndex:0] doForegroundLayoutToCharacterIndex:NSIntegerMax]; // Make sure the whole document is laid out before printing NSPrintPanel *printPanel = [op printPanel]; [printPanel addAccessoryController:[[[PrintPanelAccessoryController alloc] init] autorelease]]; // We allow changing print parameters if not in "Wrap to Page" mode, where the page setup settings are used // if (![self hasMultiplePages]) [printPanel setOptions:[printPanel options] | NSPrintPanelShowsPaperSize | NSPrintPanelShowsOrientation]; return op; } - (NSPrintInfo *)printInfo { NSPrintInfo *printInfo = [super printInfo]; if (!setUpPrintInfoDefaults) { setUpPrintInfoDefaults = YES; [printInfo setHorizontalPagination:NSFitPagination]; [printInfo setHorizontallyCentered:NO]; [printInfo setVerticallyCentered:NO]; [printInfo setLeftMargin:72.0]; [printInfo setRightMargin:72.0]; [printInfo setTopMargin:72.0]; [printInfo setBottomMargin:72.0]; } return printInfo; } /* Toggles read-only state of the document */ - (IBAction)toggleReadOnly:(id)sender { [[self undoManager] registerUndoWithTarget:self selector:@selector(toggleReadOnly:) object:nil]; [[self undoManager] setActionName:[self isReadOnly] ? NSLocalizedString(@"Allow Editing", @"Menu item to make the current document editable (not read-only)") : NSLocalizedString(@"Prevent Editing", @"Menu item to make the current document read-only")]; [self setReadOnly:![self isReadOnly]]; } - (BOOL)toggleRichWillLoseInformation { NSInteger length = [textStorage length]; NSRange range; NSDictionary *attrs; return ( [self isRichText] // Only rich -> plain can lose information. && (((length > 0) // If the document contains characters and... && (attrs = [textStorage attributesAtIndex:0 effectiveRange:&range]) // ...they have attributes... && ((range.length < length) // ...which either are not the same for the whole document... || ![[self defaultTextAttributes:YES] isEqual:attrs]) // ...or differ from the default, then... ) // ...we will lose styling information. || [self hasDocumentProperties])); // We will also lose information if the document has properties. } - (BOOL)hasMultiplePages { return hasMultiplePages; } - (void)setHasMultiplePages:(BOOL)flag { hasMultiplePages = flag; } - (IBAction)togglePageBreaks:(id)sender { [self setHasMultiplePages:![self hasMultiplePages]]; } - (void)toggleHyphenation:(id)sender { float currentHyphenation = [self hyphenationFactor]; [[[self undoManager] prepareWithInvocationTarget:self] setHyphenationFactor:currentHyphenation]; [self setHyphenationFactor:(currentHyphenation > 0.0) ? 0.0 : 0.9]; /* Toggle between 0.0 and 0.9 */ } /* Action method for the "Append '.txt' extension" button */ - (void)appendPlainTextExtensionChanged:(id)sender { NSSavePanel *panel = (NSSavePanel *)[sender window]; [panel setAllowsOtherFileTypes:[sender state]]; [panel setAllowedFileTypes:[sender state] ? [NSArray arrayWithObject: @"txt"] : nil]; } - (void)encodingPopupChanged:(NSPopUpButton *)popup { [self setEncodingForSaving:[[[popup selectedItem] representedObject] unsignedIntegerValue]]; } /* Menu validation: Arbitrary numbers to determine the state of the menu items whose titles change. Speeds up the validation... Not zero. */ #define TagForFirst 42 #define TagForSecond 43 void validateToggleItem(NSMenuItem *aCell, BOOL useFirst, NSString *first, NSString *second) { if (useFirst) { if ([aCell tag] != TagForFirst) { [aCell setTitleWithMnemonic:first]; [aCell setTag:TagForFirst]; } } else { if ([aCell tag] != TagForSecond) { [aCell setTitleWithMnemonic:second]; [aCell setTag:TagForSecond]; } } } /* Menu validation */ - (BOOL)validateMenuItem:(NSMenuItem *)aCell { SEL action = [aCell action]; if (action == @selector(toggleReadOnly:)) { validateToggleItem(aCell, [self isReadOnly], NSLocalizedString(@"Allow Editing", @"Menu item to make the current document editable (not read-only)"), NSLocalizedString(@"Prevent Editing", @"Menu item to make the current document read-only")); } else if (action == @selector(togglePageBreaks:)) { validateToggleItem(aCell, [self hasMultiplePages], NSLocalizedString(@"&Wrap to Window", @"Menu item to cause text to be laid out to size of the window"), NSLocalizedString(@"&Wrap to Page", @"Menu item to cause text to be laid out to the size of the currently selected page type")); } else if (action == @selector(toggleHyphenation:)) { validateToggleItem(aCell, ([self hyphenationFactor] > 0.0), NSLocalizedString(@"Do not Allow Hyphenation", @"Menu item to disallow hyphenation in the document"), NSLocalizedString(@"Allow Hyphenation", @"Menu item to allow hyphenation in the document")); if ([self isReadOnly]) return NO; } return YES; } // For scripting. We already have a -textStorage method implemented above. - (void)setTextStorage:(id)ts { // Warning, undo support can eat a lot of memory if a long text is changed frequently NSAttributedString *textStorageCopy = [[self textStorage] copy]; [[self undoManager] registerUndoWithTarget:self selector:@selector(setTextStorage:) object:textStorageCopy]; [textStorageCopy release]; // ts can actually be a string or an attributed string. if ([ts isKindOfClass:[NSAttributedString class]]) { [[self textStorage] replaceCharactersInRange:NSMakeRange(0, [[self textStorage] length]) withAttributedString:ts]; } else { [[self textStorage] replaceCharactersInRange:NSMakeRange(0, [[self textStorage] length]) withString:ts]; } } - (IBAction)revertDocumentToSaved:(id)sender { // This is necessary, because document reverting doesn't happen within NSDocument if the fileURL is nil. // However, this is only a temporary workaround because it would be better if fileURL was never set to nil. if( [self fileURL] == nil && defaultDestination != nil ) { [self setFileURL: defaultDestination]; } [super revertDocumentToSaved:sender]; } - (BOOL)revertToContentsOfURL:(NSURL *)url ofType:(NSString *)type error:(NSError **)outError { // See the comment in the above override of -revertDocumentToSaved:. BOOL success = [super revertToContentsOfURL:url ofType:type error:outError]; if (success) { [defaultDestination release]; defaultDestination = nil; [self setHasMultiplePages:hasMultiplePages]; [[self windowControllers] makeObjectsPerformSelector:@selector(setupTextViewForDocument)]; [[self undoManager] removeAllActions]; } else { // The document failed to revert correctly, or the user decided to cancel the revert. // This just restores the file URL to how it was before the sheet was displayed. [self setFileURL:nil]; } return success; } /* Target/action method for saving as (actually "saving to") PDF. Note that this approach of omitting the path will not work on Leopard; see TextEdit's README.rtf */ - (IBAction)saveDocumentAsPDFTo:(id)sender { [self printDocumentWithSettings:[NSDictionary dictionaryWithObjectsAndKeys:NSPrintSaveJob, NSPrintJobDisposition, nil] showPrintPanel:NO delegate:nil didPrintSelector:NULL contextInfo:NULL]; } @end /* Returns the default padding on the left/right edges of text views */ CGFloat defaultTextPadding(void) { static CGFloat padding = -1; if (padding < 0.0) { NSTextContainer *container = [[NSTextContainer alloc] init]; padding = [container lineFragmentPadding]; [container release]; } return padding; } @implementation Document (TextEditNSDocumentOverrides) + (BOOL)canConcurrentlyReadDocumentsOfType:(NSString *)typeName { return NO; } - (id)initForURL:(NSURL *)absoluteDocumentURL withContentsOfURL:(NSURL *)absoluteDocumentContentsURL ofType:(NSString *)typeName error:(NSError **)outError { // This is the method that NSDocumentController invokes during reopening of an autosaved document after a crash. The passed-in type name might be NSRTFDPboardType, but absoluteDocumentURL might point to an RTF document, and if we did nothing this document's fileURL and fileType might not agree, which would cause trouble the next time the user saved this document. absoluteDocumentURL might also be nil, if the document being reopened has never been saved before. It's an oddity of NSDocument that if you override -autosavingFileType you probably have to override this method too. if (absoluteDocumentURL) { NSString *realTypeName = [[NSDocumentController sharedDocumentController] typeForContentsOfURL:absoluteDocumentURL error:outError]; if (realTypeName) { self = [super initForURL:absoluteDocumentURL withContentsOfURL:absoluteDocumentContentsURL ofType:typeName error:outError]; [self setFileType:realTypeName]; } else { [self release]; self = nil; } } else { self = [super initForURL:absoluteDocumentURL withContentsOfURL:absoluteDocumentContentsURL ofType:typeName error:outError]; } return self; } - (void)makeWindowControllers { NSArray *myControllers = [self windowControllers]; /* If this document displaced a transient document, it will already have been assigned a window controller. If that is not the case, create one. */ if ([myControllers count] == 0) { [self addWindowController:[[[DocumentWindowController allocWithZone:[self zone]] init] autorelease]]; } } - (NSArray *)writableTypesForSaveOperation:(NSSaveOperationType)saveOperation { NSMutableArray *outArray = [[[[self class] writableTypes] mutableCopy] autorelease]; if (saveOperation == NSSaveAsOperation) { /* Rich-text documents cannot be saved as plain text. */ if ([self isRichText]) { [outArray removeObject:@"text"]; } /* Documents that contain attacments can only be saved in formats that support embedded graphics. */ if ([textStorage containsAttachments]) { [outArray setArray:[NSArray arrayWithObjects: @"rtfd", nil]]; } } return outArray; } /* Whether to keep the backup file */ - (BOOL)keepBackupFile { return ![[NSUserDefaults standardUserDefaults] boolForKey:DeleteBackup]; } /* When a document is changed, it ceases to be transient. */ - (void)updateChangeCount:(NSDocumentChangeType)change { [self setTransient:NO]; [super updateChangeCount:change]; } /* When we save, we send a notification so that views that are currently coalescing undo actions can break that. This is done for two reasons, one technical and the other HI oriented. Firstly, since the dirty state tracking is based on undo, for a coalesced set of changes that span over a save operation, the changes that occur between the save and the next time the undo coalescing stops will not mark the document as dirty. Secondly, allowing the user to undo back to the precise point of a save is good UI. In addition we overwrite this method as a way to tell that the document has been saved successfully. If so, we set the save time parameters in the document. */ - (BOOL)saveToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName forSaveOperation:(NSSaveOperationType)saveOperation error:(NSError **)outError { // Note that we do the breakUndoCoalescing call even during autosave, which means the user's undo of long typing will take them back to the last spot an autosave occured. This might seem confusing, and a more elaborate solution may be possible (cause an autosave without having to breakUndoCoalescing), but since this change is coming late in Leopard, we decided to go with the lower risk fix. [[self windowControllers] makeObjectsPerformSelector:@selector(breakUndoCoalescing)]; BOOL success = [super saveToURL:absoluteURL ofType:typeName forSaveOperation:saveOperation error:outError]; if (success && (saveOperation == NSSaveOperation || (saveOperation == NSSaveAsOperation))) { // If successful, set document parameters changed during the save operation if ([self encodingForSaving] != NoStringEncoding) [self setEncoding:[self encodingForSaving]]; } [self setEncodingForSaving:NoStringEncoding]; // This is set during prepareSavePanel:, but should be cleared for future save operation without save panel return success; } /* Since a document into which the user has dragged graphics should autosave as RTFD, we override this method to return RTFD, unless the document was already RTFD, WebArchive, or plain (the last one done for optimization, to avoid calling containsAttachments). */ - (NSString *)autosavingFileType { if ([textStorage containsAttachments]) return @"rtfd"; return [super autosavingFileType]; } /* When the file URL is set to nil, we store away the old URL. This happens when a document is converted to and from rich text. If the document exists on disk, we default to use the same base file when subsequently saving the document. */ - (void)setFileURL:(NSURL *)url { NSURL *previousURL = [self fileURL]; if (!url && previousURL) { [defaultDestination release]; defaultDestination = [previousURL copy]; } [super setFileURL:url]; } - (void)didPresentErrorWithRecovery:(BOOL)didRecover contextInfo:(void *)contextInfo { if (didRecover) { [self performSelector:@selector(saveDocument:) withObject:self afterDelay:0.0]; } } - (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo { BOOL saveAgain = NO; if ([[error domain] isEqualToString:TextEditErrorDomain]) { switch ([error code]) { case TextEditSaveErrorConvertedDocument: if (recoveryOptionIndex == 0) { // Save with new name [self setFileType:(NSString *)([textStorage containsAttachments] ? @"rtfd" : @"rtf")]; [self setFileURL:nil]; [self setConverted:NO]; saveAgain = YES; } break; case TextEditSaveErrorLossyDocument: if (recoveryOptionIndex == 0) { // Save with new name [self setFileURL:nil]; [self setLossy:NO]; saveAgain = YES; } else if (recoveryOptionIndex == 1) { // Overwrite [self setLossy:NO]; saveAgain = YES; } break; case TextEditSaveErrorRTFDRequired: if (recoveryOptionIndex == 0) { // Save with new name; enable the user to choose a new name to save with [self setFileType: @"rtfd"]; [self setFileURL:nil]; saveAgain = YES; } else if (recoveryOptionIndex == 1) { // Save as RTFD with the same name NSString *oldFilename = [[self fileURL] path]; NSError *newError; if (![self saveToURL:[NSURL fileURLWithPath:[[oldFilename stringByDeletingPathExtension] stringByAppendingPathExtension:@"rtfd"]] ofType: @"rtfd" forSaveOperation:NSSaveAsOperation error:&newError]) { // If attempt to save as RTFD fails, let the user know [self presentError:newError modalForWindow:[self windowForSheet] delegate:nil didPresentSelector:NULL contextInfo:contextInfo]; } else { // The RTFD is saved; we ignore error from trying to delete the RTF file (void)[[NSFileManager defaultManager] removeFileAtPath:oldFilename handler: nil]; } saveAgain = NO; } break; case TextEditSaveErrorEncodingInapplicable: [self setEncodingForSaving:NoStringEncoding]; [self setFileURL:nil]; saveAgain = YES; break; } } [delegate didPresentErrorWithRecovery:saveAgain contextInfo:contextInfo]; } - (void)saveDocumentWithDelegate:(id)delegate didSaveSelector:(SEL)didSaveSelector contextInfo:(void *)contextInfo { NSString *currType = [self fileType]; NSError *error = nil; BOOL containsAttachments = [textStorage containsAttachments]; if ([self fileURL]) { if ([self isConverted]) { NSString *newFormatName = containsAttachments ? NSLocalizedString(@"rich text with graphics (RTFD)", @"Rich text with graphics file format name, displayed in alert") : NSLocalizedString(@"rich text", @"Rich text file format name, displayed in alert"); error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditSaveErrorConvertedDocument userInfo:[NSDictionary dictionaryWithObjectsAndKeys: NSLocalizedString(@"Please supply a new name.", @"Title of alert panel which brings up a warning while saving, asking for new name"), NSLocalizedDescriptionKey, [NSString stringWithFormat:NSLocalizedString(@"This document was converted from a format that TextEdit cannot save. It will be saved in %@ format with a new name.", @"Contents of alert panel informing user that they need to supply a new file name because the file needs to be saved using a different format than originally read in"), newFormatName], NSLocalizedRecoverySuggestionErrorKey, [NSArray arrayWithObjects:NSLocalizedString(@"Save with new name", @"Button choice allowing user to choose a new name"), NSLocalizedString(@"Cancel", @"Button choice allowing user to cancel."), nil], NSLocalizedRecoveryOptionsErrorKey, self, NSRecoveryAttempterErrorKey, nil]]; } else if ([self isLossy]) { error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditSaveErrorLossyDocument userInfo:[NSDictionary dictionaryWithObjectsAndKeys: NSLocalizedString(@"Are you sure you want to overwrite the document?", @"Title of alert panel which brings up a warning about saving over the same document"), NSLocalizedDescriptionKey, NSLocalizedString(@"Overwriting this document might cause you to lose some of the original formatting. Would you like to save the document using a new name?", @"Contents of alert panel informing user that they need to supply a new file name because the save might be lossy"), NSLocalizedRecoverySuggestionErrorKey, [NSArray arrayWithObjects:NSLocalizedString(@"Save with new name", @"Button choice allowing user to choose a new name"), NSLocalizedString(@"Overwrite", @"Button choice allowing user to overwrite the document."), NSLocalizedString(@"Cancel", @"Button choice allowing user to cancel."), nil], NSLocalizedRecoveryOptionsErrorKey, self, NSRecoveryAttempterErrorKey, nil]]; } else if (containsAttachments && ![[self writableTypesForSaveOperation:NSSaveAsOperation] containsObject:currType]) { error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditSaveErrorRTFDRequired userInfo:[NSDictionary dictionaryWithObjectsAndKeys: NSLocalizedString(@"Are you sure you want to save using RTFD format?", @"Title of alert panel which brings up a warning while saving"), NSLocalizedDescriptionKey, NSLocalizedString(@"This document contains graphics and will be saved using RTFD (RTF with graphics) format. RTFD documents are not compatible with some applications. Save anyway?", @"Contents of alert panel informing user that the document is being converted from RTF to RTFD, and allowing them to cancel, save anyway, or save with new name"), NSLocalizedRecoverySuggestionErrorKey, [NSArray arrayWithObjects:NSLocalizedString(@"Save with new name", @"Button choice allowing user to choose a new name"), NSLocalizedString(@"Save", @"Button choice which allows the user to save the document."), NSLocalizedString(@"Cancel", @"Button choice allowing user to cancel."), nil], NSLocalizedRecoveryOptionsErrorKey, self, NSRecoveryAttempterErrorKey, nil]]; } else if (![self isRichText]) { NSUInteger enc = [self encodingForSaving]; if (enc == NoStringEncoding) enc = [self encoding]; if (![[textStorage string] canBeConvertedToEncoding:enc]) { error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditSaveErrorEncodingInapplicable userInfo:[NSDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:NSLocalizedString(@"This document can no longer be saved using its original %@ encoding.", @"Title of alert panel informing user that the file's string encoding needs to be changed."), [NSString localizedNameOfStringEncoding:enc]], NSLocalizedDescriptionKey, NSLocalizedString(@"Please choose another encoding (such as UTF-8).", @"Subtitle of alert panel informing user that the file's string encoding needs to be changed"), NSLocalizedRecoverySuggestionErrorKey, self, NSRecoveryAttempterErrorKey, nil]]; } } } if (error) { [self presentError:error modalForWindow:[self windowForSheet] delegate:self didPresentSelector:@selector(didPresentErrorWithRecovery:contextInfo:) contextInfo:NULL]; } else { [super saveDocumentWithDelegate:delegate didSaveSelector:didSaveSelector contextInfo:contextInfo]; } } /* For plain-text documents, we add our own accessory view for selecting encodings. The plain text case does not require a format popup. */ - (BOOL)shouldRunSavePanelWithAccessoryView { return [self isRichText]; } /* If the document is a converted version of a document that existed on disk, set the default directory to the directory in which the source file (converted file) resided at the time the document was converted. If the document is plain text, we additionally add an encoding popup. */ - (BOOL)prepareSavePanel:(NSSavePanel *)savePanel { NSPopUpButton *encodingPopup; NSButton *extCheckbox; NSUInteger cnt; NSString *string; if (defaultDestination) { NSString *dirPath = [[defaultDestination path] stringByDeletingPathExtension]; BOOL isDir; if ([[NSFileManager defaultManager] fileExistsAtPath:dirPath isDirectory:&isDir] && isDir) { [savePanel setDirectory:dirPath]; } } if (![self isRichText]) { BOOL addExt = [[NSUserDefaults standardUserDefaults] boolForKey:AddExtensionToNewPlainTextFiles]; // If no encoding, figure out which encoding should be default in encoding popup, set as document encoding. NSStringEncoding enc = [self encoding]; [self setEncodingForSaving:(enc == NoStringEncoding) ? [self suggestedDocumentEncoding] : enc]; [savePanel setAccessoryView:[[[NSDocumentController sharedDocumentController] class] encodingAccessory:[self encodingForSaving] includeDefaultEntry:NO encodingPopUp:&encodingPopup checkBox:&extCheckbox]]; // Set up the checkbox [extCheckbox setTitle:NSLocalizedString(@"If no extension is provided, use \\U201c.txt\\U201d.", @"Checkbox indicating that if the user does not specify an extension when saving a plain text file, .txt will be used")]; [extCheckbox setToolTip:NSLocalizedString(@"Automatically append \\U201c.txt\\U201d to the file name if no known file name extension is provided.", @"Tooltip for checkbox indicating that if the user does not specify an extension when saving a plain text file, .txt will be used")]; [extCheckbox setState:addExt]; [extCheckbox setAction:@selector(appendPlainTextExtensionChanged:)]; [extCheckbox setTarget:self]; if (addExt) { [savePanel setAllowedFileTypes:[NSArray arrayWithObject: @"txt"]]; [savePanel setAllowsOtherFileTypes:YES]; } else { // NSDocument defaults to setting the allowedFileType to kUTTypePlainText, which gives the fileName a ".txt" extension. We want don't want to append the extension for Untitled documents. // First we clear out the allowedFileType that NSDocument set. We want to allow anything, so we pass 'nil'. This will prevent NSSavePanel from appending an extension. [savePanel setAllowedFileTypes:nil]; // If this document was previously saved, use the URL's name. NSString *fileName = [[[self fileURL] path] lastPathComponent]; // If the document has not yet been seaved, or we couldn't find the fileName, then use the displayName. if (fileName == nil) { fileName = [self displayName]; } [savePanel setNameFieldStringValue:fileName]; } // Further set up the encoding popup cnt = [encodingPopup numberOfItems]; string = [textStorage string]; if (cnt * [string length] < 5000000) { // Otherwise it's just too slow; would be nice to make this more dynamic. With large docs and many encodings, the items just won't be validated. while (cnt--) { // No reason go backwards except to use one variable instead of two NSStringEncoding encoding = (NSStringEncoding)[[[encodingPopup itemAtIndex:cnt] representedObject] unsignedIntegerValue]; // Hardwire some encodings known to allow any content if ((encoding != NoStringEncoding) && (encoding != NSUnicodeStringEncoding) && (encoding != NSUTF8StringEncoding) && (encoding != NSNonLossyASCIIStringEncoding) && ![string canBeConvertedToEncoding:encoding]) { [[encodingPopup itemAtIndex:cnt] setEnabled:NO]; } } } [encodingPopup setAction:@selector(encodingPopupChanged:)]; [encodingPopup setTarget:self]; } return YES; } /* If the document does not exist on disk, but it has been converted from a document that existed on disk, return the base file name without the path extension. Otherwise return the default ("Untitled"). This is used for the window title and for the default name when saving. */ - (NSString *)displayName { if (![self fileURL] && defaultDestination) { return [[[NSFileManager defaultManager] displayNameAtPath:[defaultDestination path]] stringByDeletingPathExtension]; } else { return [super displayName]; } } @end /* Truncate string to no longer than truncationLength; should be > 10 */ NSString *truncatedString(NSString *str, NSUInteger truncationLength) { NSUInteger len = [str length]; if (len < truncationLength) return str; return [[str substringToIndex:truncationLength - 10] stringByAppendingString:@"\u2026"]; // Unicode character 2026 is ellipsis } TextEdit-master/DocumentController.h000066400000000000000000000024111271274630500201010ustar00rootroot00000000000000#import #import "Document.h" /* An instance of this subclass is created in the main nib file. */ // NSDocumentController is subclassed to provide for modification of the open panel. Normally, there is no need to subclass the document controller. @interface DocumentController : NSDocumentController { NSMutableDictionary *customOpenSettings; // Mapping of document URLs to encoding, ignore HTML, and ignore rich text settings that override the defaults from Preferences NSMutableArray *deferredDocuments; NSLock *transientDocumentLock; NSLock *displayDocumentLock; } + (NSView *)encodingAccessory:(NSStringEncoding)encoding includeDefaultEntry:(BOOL)includeDefaultItem encodingPopUp:(NSPopUpButton **)popup checkBox:(NSButton **)button; - (Document *)openDocumentWithContentsOfPasteboard:(NSPasteboard *)pb display:(BOOL)display error:(NSError **)error; - (NSStringEncoding)lastSelectedEncodingForURL:(NSURL *)url; - (BOOL)lastSelectedIgnoreHTMLForURL:(NSURL *)url; - (BOOL)lastSelectedIgnoreRichForURL:(NSURL *)url; - (NSInteger)runModalOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)types; - (Document *)transientDocumentToReplace; - (void)displayDocument:(NSDocument *)doc; - (void)replaceTransientDocument:(NSArray *)documents; @end TextEdit-master/DocumentController.m000066400000000000000000000424271271274630500201210ustar00rootroot00000000000000/* Document.m Copyright (c) 1995-2009 by Apple Computer, Inc., all rights reserved. Author: David Remahl NSDocumentController subclass for TextEdit Required to support transient documents and customized Open panel */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import "DocumentController.h" #import "Document.h" #import "EncodingManager.h" #import "TextEditDefaultsKeys.h" #import "TextEditErrors.h" /* A very simple container class which is used to collect the outlets from loading the encoding accessory. No implementation provided, because all of the references are weak and don't need retain/release. Would be nice to be able to switch to a mutable dictionary here at some point. */ @interface OpenSaveAccessoryOwner : NSObject { @public IBOutlet NSView *accessoryView; IBOutlet NSPopUpButton *encodingPopUp; IBOutlet NSButton *checkBox; } @end @implementation OpenSaveAccessoryOwner @end @implementation DocumentController - (void)awakeFromNib { [self bind:@"autosavingDelay" toObject:[NSUserDefaultsController sharedUserDefaultsController] withKeyPath:@"values." AutosaveDelay options:nil]; customOpenSettings = [[NSMutableDictionary alloc] init]; transientDocumentLock = [[NSLock alloc] init]; displayDocumentLock = [[NSLock alloc] init]; } - (void)dealloc { [self unbind:@"autosavingDelay"]; [customOpenSettings release]; [transientDocumentLock release]; [displayDocumentLock release]; [super dealloc]; } /* Create a new document of the default type and initialize its contents from the pasteboard. */ - (Document *)openDocumentWithContentsOfPasteboard:(NSPasteboard *)pb display:(BOOL)display error:(NSError **)error { // Read type and attributed string. NSString *pasteboardType = [pb availableTypeFromArray: [NSArray arrayWithObjects: NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, nil]]; NSData *data = [pb dataForType:pasteboardType]; NSAttributedString *string = nil; NSString *type = nil; if (data != nil) { NSDictionary *attributes = nil; string = [[[NSAttributedString alloc] initWithData:data options:nil documentAttributes:&attributes error:error] autorelease]; // We only expect to see plain-text, RTF, and RTFD at this point. NSString *docType = [attributes objectForKey:NSDocumentTypeDocumentAttribute]; if ([docType isEqualToString:NSPlainTextDocumentType]) { type = @"text"; } else if ([docType isEqualToString:NSRTFTextDocumentType]) { type = @"rtf"; } else if ([docType isEqualToString:NSRTFDTextDocumentType]) { type = @"rtfd"; } } if (string != nil && type != nil) { Class docClass = [self documentClassForType:type]; if (docClass != nil) { Document *transientDoc = nil; [transientDocumentLock lock]; transientDoc = [self transientDocumentToReplace]; if (transientDoc) { // If this document has claimed the transient document, cause -transientDocumentToReplace to return nil for all other documents. [transientDoc setTransient:NO]; } [transientDocumentLock unlock]; id doc = [[[docClass alloc] initWithType:type error:error] autorelease]; if (!doc) return nil; // error has been set NSTextStorage *text = [doc textStorage]; [text replaceCharactersInRange:NSMakeRange(0, [text length]) withAttributedString:string]; if ([type isEqualToString: @"text"]) [doc applyDefaultTextAttributes:NO]; [self addDocument:doc]; [doc updateChangeCount:NSChangeReadOtherContents]; if (transientDoc) [self replaceTransientDocument:[NSArray arrayWithObjects:transientDoc, doc, nil]]; if (display) [self displayDocument:doc]; return doc; } } // Either we could not read data from pasteboard, or the data was interpreted with a type we don't understand. if ((data == nil || (string != nil && type == nil)) && error) *error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditOpenDocumentWithSelectionServiceFailed userInfo:[ NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"Service failed. Couldn\\U2019t open the selection.", @"Title of alert indicating error during 'New Window Containing Selection' service"), NSLocalizedDescriptionKey, NSLocalizedString(@"There might be an internal error or a performance problem, or the source application may be providing text of invalid type in the service request. Please try the operation a second time. If that doesn\\U2019t work, copy/paste the selection into TextEdit.", @"Recommendation when 'New Window Containing Selection' service fails"), NSLocalizedRecoverySuggestionErrorKey, nil]]; return nil; } /* This method is overridden in order to support transient documents, i.e. the automatic closing of an automatically created untitled document, when a real document is opened. */ - (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument error:(NSError **)outError { Document *doc = [super openUntitledDocumentAndDisplay:displayDocument error:outError]; if (!doc) return nil; return doc; } - (Document *)transientDocumentToReplace { NSArray *documents = [self documents]; Document *transientDoc = nil; return ([documents count] == 1 && [(transientDoc = [documents objectAtIndex:0]) isTransientAndCanBeReplaced]) ? transientDoc : nil; } - (void)displayDocument:(NSDocument *)doc { // Documents must be displayed on the main thread. if ([NSThread isMainThread]) { [doc makeWindowControllers]; [doc showWindows]; } else { [self performSelectorOnMainThread:_cmd withObject:doc waitUntilDone:YES]; } } - (void)replaceTransientDocument:(NSArray *)documents { // Transient document must be replaced on the main thread, since it may undergo automatic display on the main thread. if ([NSThread isMainThread]) { NSDocument *transientDoc = [documents objectAtIndex:0], *doc = [documents objectAtIndex:1]; NSArray *controllersToTransfer = [[transientDoc windowControllers] copy]; NSEnumerator *controllerEnum = [controllersToTransfer objectEnumerator]; NSWindowController *controller; [controllersToTransfer makeObjectsPerformSelector:@selector(retain)]; while ((controller = [controllerEnum nextObject])) { [doc addWindowController:controller]; [transientDoc removeWindowController:controller]; } [transientDoc close]; [controllersToTransfer makeObjectsPerformSelector:@selector(release)]; [controllersToTransfer release]; // We replaced the value of the transient document with opened document, need to notify accessibility clients. /*for (NSLayoutManager *layoutManager in [[(Document *)doc textStorage] layoutManagers]) { for (NSTextContainer *textContainer in [layoutManager textContainers]) { NSTextView *textView = [textContainer textView]; if (textView) NSAccessibilityPostNotification(textView, NSAccessibilityValueChangedNotification); } }*/ } else { [self performSelectorOnMainThread:_cmd withObject:documents waitUntilDone:YES]; } } /* When a document is opened, check to see whether there is a document that is already open, and whether it is transient. If so, transfer the document's window controllers and close the transient document. When +[Document canConcurrentlyReadDocumentsOfType:] return YES, this method may be invoked on multiple threads. Ensure that only one document replaces the transient document. The transient document must be replaced before any other documents are displayed for window cascading to work correctly. To guarantee this, defer all display operations until the transient document has been replaced. */ - (id)openDocumentWithContentsOfURL:(NSURL *)absoluteURL display:(BOOL)displayDocument error:(NSError **)outError { Document *transientDoc = nil; [transientDocumentLock lock]; transientDoc = [self transientDocumentToReplace]; if (transientDoc) { // Once this document has claimed the transient document, cause -transientDocumentToReplace to return nil for all other documents. [transientDoc setTransient:NO]; deferredDocuments = [[NSMutableArray alloc] init]; } [transientDocumentLock unlock]; // Don't make NSDocumentController display the NSDocument it creates. Instead, do it later manually to ensure that the transient document has been replaced first. Document *doc = [super openDocumentWithContentsOfURL:absoluteURL display:NO error:outError]; [customOpenSettings removeObjectForKey:absoluteURL]; if (transientDoc) { if (doc) { [self replaceTransientDocument:[NSArray arrayWithObjects:transientDoc, doc, nil]]; if (displayDocument) [self displayDocument:doc]; } // Now that the transient document has been replaced, display all deferred documents. [displayDocumentLock lock]; NSArray *documentsToDisplay = deferredDocuments; deferredDocuments = nil; [displayDocumentLock unlock]; for (NSUInteger i = 0; i<[documentsToDisplay count]; i++) { NSDocument *document = [documentsToDisplay objectAtIndex: i]; [self displayDocument:document]; } [documentsToDisplay release]; } else if (doc && displayDocument) { [displayDocumentLock lock]; if (deferredDocuments) { // Defer displaying this document, because the transient document has not yet been replaced. [deferredDocuments addObject:doc]; [displayDocumentLock unlock]; } else { // The transient document has been replaced, so display the document immediately. [displayDocumentLock unlock]; [self displayDocument:doc]; } } return doc; } /* When a second document is added, the first document's transient status is cleared. This happens when the user selects "New" when a transient document already exists. */ - (void)addDocument:(NSDocument *)newDoc { Document *firstDoc; NSArray *documents = [self documents]; if ([documents count] == 1 && (firstDoc = [documents objectAtIndex:0]) && [firstDoc isTransient]) { [firstDoc setTransient:NO]; } [super addDocument:newDoc]; } /* Loads the "encoding" accessory view used in save plain and open panels. There is a checkbox in the accessory which has different purposes in each case; so we let the caller set the title and other info for that checkbox. */ + (NSView *)encodingAccessory:(NSStringEncoding)encoding includeDefaultEntry:(BOOL)includeDefaultItem encodingPopUp:(NSPopUpButton **)popup checkBox:(NSButton **)button { OpenSaveAccessoryOwner *owner = [[[OpenSaveAccessoryOwner alloc] init] autorelease]; // Rather than caching, load the accessory view everytime, as it might appear in multiple panels simultaneously. if (![NSBundle loadNibNamed:@"EncodingAccessory" owner:owner]) { NSLog(@"Failed to load EncodingAccessory.nib"); return nil; } if (popup) *popup = owner->encodingPopUp; if (button) *button = owner->checkBox; [[EncodingManager sharedInstance] setupPopUpCell:[owner->encodingPopUp cell] selectedEncoding:encoding withDefaultEntry:includeDefaultItem]; return [owner->accessoryView autorelease]; } /* To support selection of a fallback encoding, we override this method and add an accessory view. */ - (NSInteger)runModalOpenPanel:(NSOpenPanel *)openPanel forTypes:(NSArray *)types { NSButton *ignoreRichTextButton; NSPopUpButton *encodingPopUp; NSUInteger encoding; BOOL ignoreHTML = [[NSUserDefaults standardUserDefaults] boolForKey:IgnoreHTML]; BOOL ignoreRich = [[NSUserDefaults standardUserDefaults] boolForKey:IgnoreRichText]; NSInteger result; [openPanel setAccessoryView:[[self class] encodingAccessory:[[[NSUserDefaults standardUserDefaults] objectForKey:PlainTextEncodingForRead] unsignedIntegerValue] includeDefaultEntry:YES encodingPopUp:&encodingPopUp checkBox:&ignoreRichTextButton]]; [ignoreRichTextButton setTitle:NSLocalizedString(@"Ignore rich text commands", @"Checkbox indicating that when opening a rich text file, the rich text should be ignored (causing the file to be loaded as plain text)")]; [ignoreRichTextButton setToolTip:NSLocalizedString(@"If selected, HTML and RTF files will be loaded as plain text, allowing you to see and edit the HTML or RTF directives.", @"Tooltip for checkbox indicating that when opening a rich text file, the rich text should be ignored (causing the file to be loaded as plain text)")]; if (ignoreRich != ignoreHTML) { [ignoreRichTextButton setAllowsMixedState:YES]; [ignoreRichTextButton setState:NSMixedState]; } else { if ([ignoreRichTextButton allowsMixedState]) [ignoreRichTextButton setAllowsMixedState:NO]; [ignoreRichTextButton setState:ignoreRich ? NSOnState : NSOffState]; } result = [super runModalOpenPanel:openPanel forTypes:types]; if (result == NSOKButton) { encoding = (NSStringEncoding)[[[encodingPopUp selectedItem] representedObject] unsignedIntegerValue]; NSInteger ignoreState = [ignoreRichTextButton state]; if (ignoreState != NSMixedState) { // Mixed state indicates they were different, and to leave them alone ignoreHTML = ignoreRich = (ignoreState == NSOnState); } NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInteger:encoding], PlainTextEncodingForRead, [NSNumber numberWithBool:ignoreHTML], IgnoreHTML, [NSNumber numberWithBool:ignoreRich], IgnoreRichText, nil]; for (NSUInteger i = 0; i<[[openPanel URLs] count]; i++) { NSURL *url = [[openPanel URLs] objectAtIndex: i]; [customOpenSettings setObject:options forKey:url]; } } return result; } - (NSStringEncoding)lastSelectedEncodingForURL:(NSURL *)url { NSDictionary *options = [customOpenSettings objectForKey:url]; return options ? [[options objectForKey:PlainTextEncodingForRead] unsignedIntegerValue] : [[[NSUserDefaults standardUserDefaults] objectForKey:PlainTextEncodingForRead] unsignedIntegerValue]; } - (BOOL)lastSelectedIgnoreHTMLForURL:(NSURL *)url { NSDictionary *options = [customOpenSettings objectForKey:url]; return options ? [[options objectForKey:IgnoreHTML] unsignedIntegerValue] : [[NSUserDefaults standardUserDefaults] boolForKey:IgnoreHTML];; } - (BOOL)lastSelectedIgnoreRichForURL:(NSURL *)url { NSDictionary *options = [customOpenSettings objectForKey:url]; return options ? [[options objectForKey:IgnoreRichText] unsignedIntegerValue] : [[NSUserDefaults standardUserDefaults] boolForKey:IgnoreRichText]; } /* The user can change the default document type between Rich and Plain in Preferences. We override -defaultType to return the appropriate type string. */ - (NSString *)defaultType { return (NSString *)([[NSUserDefaults standardUserDefaults] boolForKey:RichText] ? @"rtf" : @"text"); } @end TextEdit-master/DocumentPropertiesPanelController.h000066400000000000000000000003201271274630500231330ustar00rootroot00000000000000#import @interface DocumentPropertiesPanelController : NSWindowController { IBOutlet id documentObjectController; id inspectedDocument; } - (IBAction)toggleWindow:(id)sender; @end TextEdit-master/DocumentPropertiesPanelController.m000066400000000000000000000151111271274630500231440ustar00rootroot00000000000000/* DocumentPropertiesPanelController.m Copyright (c) 2007-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer "Document Properties" panel controller for TextEdit. There is a little more code here than one would like, however, this code does show steps needed to implement a non-modal inspector panel using bindings, and have the fields in the panel correctly commit when the panel loses key, or the document it is associated with is saved or made non-key (inactive). This class is mostly reusable, except with the assumption that commitEditing always succeeds. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import "DocumentPropertiesPanelController.h" #import "Document.h" #import "DocumentController.h" #import "TextEditMisc.h" @implementation DocumentPropertiesPanelController - (id)init { return [super initWithWindowNibName:@"DocumentProperties"]; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [NSApp removeObserver:self forKeyPath:@"mainWindow.windowController.document"]; [super dealloc]; } /* inspectedDocument is a KVO-compliant property, which this method manages. Anytime we hear about the mainWindow, or the mainWindow's document change, we check to see what changed. Note that activeDocumentChanged doesn't mean document contents changed, but rather we have a new active document. */ - (void)activeDocumentChanged { id doc = [[[NSApp mainWindow] windowController] document]; if (doc != inspectedDocument) { if (inspectedDocument) [documentObjectController commitEditing]; [self setValue:(doc && [doc isKindOfClass:[Document class]]) ? doc : nil forKey:@"inspectedDocument"]; } } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == [DocumentPropertiesPanelController class]) { [self activeDocumentChanged]; } else { [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } } /* When controls in the panel start editing, register it with the inspected document. */ - (void)objectDidBeginEditing:(id)editor { [inspectedDocument objectDidBeginEditing:editor]; } - (void)objectDidEndEditing:(id)editor { [inspectedDocument objectDidEndEditing:editor]; } /* We don't want to do any observing until the properties panel is brought up. */ - (void)windowDidLoad { // Once the UI is loaded, we start observing the panel itself to commit editing when it becomes inactive (loses key state) [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(documentPropertiesPanelDidResignKey:) name:NSWindowDidResignKeyNotification object:[self window]]; // Make sure we start inspecting the document that is currently active, and start observing changes [self activeDocumentChanged]; [NSApp addObserver:self forKeyPath:@"mainWindow.windowController.document" options:0 context:[DocumentPropertiesPanelController class]]; [super windowDidLoad]; // It's documented to do nothing, but still a good idea to invoke... } /* Whenever the properties panel loses key status, we want to commit editing. */ - (void)documentPropertiesPanelDidResignKey:(NSNotification *)notification { [documentObjectController commitEditing]; } /* Since we want the panel to toggle... Note that if the window is visible and key, we order it out; otherwise we make it key. */ - (IBAction)toggleWindow:(id)sender { NSWindow *window = [self window]; if ([window isVisible] && [window isKeyWindow]) { [[self window] orderOut:sender]; } else { [[self window] makeKeyAndOrderFront:sender]; } } /* validateMenuItem: is used to dynamically set attributes of menu items. */ - (BOOL)validateMenuItem:(NSMenuItem *)menuItem { if ([menuItem action] == @selector(toggleWindow:)) { // Correctly toggle the menu item for showing/hiding document properties // We call [self isWindowLoaded] first since it prevents [self window] from loading the nib validateToggleItem(menuItem, [self isWindowLoaded] && [[self window] isVisible], NSLocalizedString(@"Hide Properties", @"Title for menu item to hide the document properties panel."), NSLocalizedString(@"Show Properties", @"Title for menu item to show the document properties panel (should be the same as the initial menu item in the nib).")); } return YES; } @end TextEdit-master/DocumentWindow.nib/000077500000000000000000000000001271274630500176255ustar00rootroot00000000000000TextEdit-master/DocumentWindow.nib/classes.nib000066400000000000000000000020111271274630500217460ustar00rootroot00000000000000 IBClasses ACTIONS scalePopUpAction id CLASS ScalingScrollView LANGUAGE ObjC SUPERCLASS NSScrollView CLASS DocumentWindowController LANGUAGE ObjC OUTLETS scrollView ScalingScrollView SUPERCLASS NSWindowController CLASS FirstResponder LANGUAGE ObjC SUPERCLASS NSObject IBVersion 1 TextEdit-master/DocumentWindow.nib/info.nib000066400000000000000000000010501271274630500212460ustar00rootroot00000000000000 IBFramework Version 702 IBLastKnownRelativeProjectPath TextEdit.xcodeproj IBOldestOS 5 IBOpenObjects 4 IBSystem Version 10A143 targetFramework IBCocoaFramework TextEdit-master/DocumentWindow.nib/keyedobjects.nib000066400000000000000000000076241271274630500230030ustar00rootroot00000000000000bplist00 X$versionT$topY$archiverX$objects]IB.objectdata_NSKeyedArchiverY 156<=AEKSklmnrv   $%-013;DMNOPQRSW[gstuvwxyz}U$null  !"#$%&'()*+,-./0VNSRootV$class]NSObjectsKeys_NSClassesValues_NSAccessibilityOidsValues]NSConnections[NSNamesKeys[NSFramework]NSClassesKeysZNSOidsKeys]NSNamesValues_NSAccessibilityConnectors]NSFontManager_NSVisibleWindows_NSObjectsValues_NSAccessibilityOidsKeysYNSNextOid\NSOidsValuesX;IW@HJAU?V*K234[NSClassName_DocumentWindowController789:X$classesZ$classname:;^NSCustomObjectXNSObject_IBCocoaFramework>?@ZNS.objects78BCCD;\NSMutableSetUNSSet>FGHIJ 79LMNOPR]NSDestinationXNSSourceWNSLabel6 5TUVWXYZ[\]^_`abcdefghij\NSWindowView\NSScreenRect]NSWindowTitleYNSWTFlags]NSWindowClass\NSWindowRectYNSMaxSize_NSWindowBacking_NSWindowStyleMaskYNSMinSize[NSViewClass41 0x 32_{{241, 745}, {494, 357}}PXNSWindowopqYNS.stringTView78sttu;_NSMutableStringXNSStringwxyz{|}~}_NSNextResponderZNSSubviewsXNSvFlags[NSFrameSizeXNSWindow[NSSuperview0./>Fwxyz{2|_}_[NSHScroller_NSOriginalClassNameXNSsFlags[NSVScroller]NSNextKeyView]NSContentView*-,&_ScalingScrollView\NSScrollView>F&*wxyz{|}YNScvFlagsYNSDocViewYNSBGColor% >Fwyz{2|}[NSExtensionY{135, 65}opŀVNSView[NSResponder78ɤ;\NSCustomViewVNSView78ͣ;^NSMutableArrayWNSArrayZ{479, 357}WNSColor\NSColorSpace[NSColorName]NSCatalogName$#"!VSystem\controlColorWNSWhite$K0.6666666978;WNSColor78;ZNSClipViewwy{|}XNSTargetWNSFrameXNSActionZNSCurValue)'(#?;_{{479, 0}, {15, 342}}\_doScroller:78;ZNSScrollerYNSControlwy{|})+(#?Ǵ%_{{-100, -100}, {479, 15}}Z{494, 357}78   ;^NSClassSwapperZ{494, 357}78 ʣ;_{{0, 0}, {1920, 1178}}Y{100, 36}_{3.40282e+38, 3.40282e+38}78;_NSWindowTemplateVwindow78;_NSNibOutletConnector^NSNibConnectorLMNOP6 8XdelegateLMNO#6:ZscrollView>&'>(P_< 23/=]NSApplication782΢;>&5>_P >&=>(P_< >&F>GHIJKLBCDEFG[ApplicationVWindow_!Scaling Scroll View (Custom View)\Content View[Custom View\File's Owner>&U>>&Y>>&]>(PH_JI< 97>&i>jklmnopqrLMNOPQRST(')&>F|>&>>&>78;^NSIBObjectData"'1:?DRTf!lsz-@Rlv (1<>?HO\bkmtvxz #0:L`jvxz|~*5>JS_acehjlnwy|~  !#%';HQSZ\^`  #%,8AJW^gn}   %-6?Jox % ' ) + - / 2 4 6 8 A ] h q v     / > O Q S U W ` q s u w y       ) + - / 1 3 5 A H l y           ! # % ' 0 2 3 < > ? H J K T Y hTextEdit-master/DocumentWindowController.h000066400000000000000000000011341271274630500212720ustar00rootroot00000000000000#import #import "ScalingScrollView.h" @interface DocumentWindowController : NSWindowController { // { IBOutlet ScalingScrollView *scrollView; NSLayoutManager *layoutMgr; BOOL hasMultiplePages; BOOL rulerIsBeingDisplayed; BOOL isSettingSize; } // Convenience initializer. Loads the correct nib automatically. - (id)init; - (NSUInteger)numberOfPages; - (void)doForegroundLayoutToCharacterIndex:(NSUInteger)loc; - (NSView *)documentView; - (void)breakUndoCoalescing; - (IBAction)chooseAndAttachFiles:(id)sender; @end TextEdit-master/DocumentWindowController.m000066400000000000000000001132531271274630500213050ustar00rootroot00000000000000/* DocumentWindowController.m Copyright (c) 1995-2009 by Apple Computer, Inc., all rights reserved. Author: David Remahl, adapted from old Document.m Document's main window controller object for TextEdit */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import "DocumentWindowController.h" #import "Document.h" #import "MultiplePageView.h" #import "TextEditDefaultsKeys.h" #import "TextEditMisc.h" #import "TextEditErrors.h" @interface DocumentWindowController(Private) - (void)setDocument:(Document *)doc; // Overridden with more specific type. Expects Document instance. - (void)setupInitialTextViewSharedState; - (void)setupTextViewForDocument; - (void)setupWindowForDocument; - (void)updateForRichTextAndRulerState; - (void)showRulerDelayed:(BOOL)flag; - (void)addPage; - (void)removePage; - (NSTextView *)firstTextView; - (void)printInfoUpdated; - (void)resizeWindowForViewSize:(NSSize)size; - (void)setHasMultiplePages:(BOOL)pages force:(BOOL)force; @end @implementation DocumentWindowController - (id)init { if ((self = [super initWithWindowNibName:@"DocumentWindow"])) { layoutMgr = [[NSLayoutManager allocWithZone:[self zone]] init]; [layoutMgr setDelegate:self]; //[layoutMgr setAllowsNonContiguousLayout:YES]; } return self; } - (void)dealloc { if ([self document]) [self setDocument:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self]; [[self firstTextView] removeObserver:self forKeyPath:@"backgroundColor"]; [scrollView removeObserver:self forKeyPath:@"scaleFactor"]; [layoutMgr release]; [self showRulerDelayed:NO]; [super dealloc]; // NSWindowController deallocates all the nib objects } /* This method can be called in three different situations (number three is a special TextEdit case): 1) When the window controller is created and set up with a new or opened document. (!oldDoc && doc) 2) When the document is closed, and the controller is about to be destroyed (oldDoc && !doc) 3) When the window controller is assigned to another document (a document has been opened and it takes the place of an automatically-created window). In that case this method is called twice. First as #2 above, second as #1. The window can be visible or hidden at the time of the message. */ - (void)setDocument:(Document *)doc { Document *oldDoc = [[self document] retain]; if (oldDoc) { [layoutMgr unbind:@"hyphenationFactor"]; [[self firstTextView] unbind:@"editable"]; } [super setDocument:doc]; if (doc) { [layoutMgr bind:@"hyphenationFactor" toObject:self withKeyPath:@"document.hyphenationFactor" options:nil]; [[self firstTextView] bind:@"editable" toObject:self withKeyPath:@"document.readOnly" options:[NSDictionary dictionaryWithObject:NSNegateBooleanTransformerName forKey:NSValueTransformerNameBindingOption]]; } if (oldDoc != doc) { if (oldDoc) { /* Remove layout manager from the old Document's text storage. No need to retain as we already own the object. */ [[oldDoc textStorage] removeLayoutManager:layoutMgr]; [oldDoc removeObserver:self forKeyPath:@"printInfo"]; [oldDoc removeObserver:self forKeyPath:@"richText"]; [oldDoc removeObserver:self forKeyPath:@"viewSize"]; [oldDoc removeObserver:self forKeyPath:@"hasMultiplePages"]; } if (doc) { [[doc textStorage] addLayoutManager:layoutMgr]; if ([self isWindowLoaded]) { [self setHasMultiplePages:[doc hasMultiplePages] force:NO]; [self setupInitialTextViewSharedState]; [self setupWindowForDocument]; if ([doc hasMultiplePages]) [scrollView setScaleFactor:[[self document] scaleFactor] adjustPopup:YES]; [[doc undoManager] removeAllActions]; } [doc addObserver:self forKeyPath:@"printInfo" options:0 context:NULL]; [doc addObserver:self forKeyPath:@"richText" options:0 context:NULL]; [doc addObserver:self forKeyPath:@"viewSize" options:0 context:NULL]; [doc addObserver:self forKeyPath:@"hasMultiplePages" options:0 context:NULL]; } } [oldDoc release]; } - (void)breakUndoCoalescing { [[self firstTextView] breakUndoCoalescing]; } - (NSLayoutManager *)layoutManager { return layoutMgr; } - (NSTextView *)firstTextView { return [[self layoutManager] firstTextView]; } - (void)setupInitialTextViewSharedState { NSTextView *textView = [self firstTextView]; [textView setUsesFontPanel:YES]; [textView setUsesFindPanel:YES]; [textView setDelegate:self]; [textView setAllowsUndo:YES]; [textView setAllowsDocumentBackgroundColorChange:YES]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; // Some settings are not enabled for plain text docs if the default "SubstitutionsEnabledInRichTextOnly" is set to YES. // There is no UI at this stage for this preference. //BOOL substitutionsOK = [[self document] isRichText] || ![defaults boolForKey:SubstitutionsEnabledInRichTextOnly]; [textView setContinuousSpellCheckingEnabled:[defaults boolForKey:CheckSpellingAsYouType]]; // [textView setGrammarCheckingEnabled:[defaults boolForKey:CheckGrammarWithSpelling]]; //[textView setAutomaticSpellingCorrectionEnabled:substitutionsOK && [defaults boolForKey:CorrectSpellingAutomatically]]; [textView setSmartInsertDeleteEnabled:[defaults boolForKey:SmartCopyPaste]]; //[textView setAutomaticQuoteSubstitutionEnabled:substitutionsOK && [defaults boolForKey:SmartQuotes]]; //[textView setAutomaticDashSubstitutionEnabled:substitutionsOK && [defaults boolForKey:SmartDashes]]; //[textView setAutomaticLinkDetectionEnabled:[defaults boolForKey:SmartLinks]]; //[textView setAutomaticDataDetectionEnabled:[defaults boolForKey:DataDetectors]]; //[textView setAutomaticTextReplacementEnabled:substitutionsOK && [defaults boolForKey:TextReplacement]]; [textView setSelectedRange:NSMakeRange(0, 0)]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == [self firstTextView]) { if ([keyPath isEqualToString:@"backgroundColor"]) { [[self document] setBackgroundColor:[[self firstTextView] backgroundColor]]; } } else if (object == scrollView) { if ([keyPath isEqualToString:@"scaleFactor"]) { [[self document] setScaleFactor:[scrollView scaleFactor]]; } } else if (object == [self document]) { if ([keyPath isEqualToString:@"printInfo"]) { [self printInfoUpdated]; } else if ([keyPath isEqualToString:@"richText"]) { if ([self isWindowLoaded]) { [self updateForRichTextAndRulerState]; } } else if ([keyPath isEqualToString:@"viewSize"]) { if (!isSettingSize) { NSSize size = [[self document] viewSize]; if (!NSEqualSizes(size, NSZeroSize)) { [self resizeWindowForViewSize:size]; } } } else if ([keyPath isEqualToString:@"hasMultiplePages"]) { [self setHasMultiplePages:[[self document] hasMultiplePages] force:NO]; } } } - (void)setupTextViewForDocument { Document *doc = [self document]; BOOL rich = [doc isRichText]; if (doc && (!rich || [[[self firstTextView] textStorage] length] == 0)) [[self firstTextView] setTypingAttributes:[doc defaultTextAttributes:rich]]; [self updateForRichTextAndRulerState]; [[self firstTextView] setBackgroundColor:[doc backgroundColor]]; } - (void)printInfoUpdated { if (hasMultiplePages) { NSUInteger cnt, numberOfPages = [self numberOfPages]; MultiplePageView *pagesView = [scrollView documentView]; NSArray *textContainers = [[self layoutManager] textContainers]; [pagesView setPrintInfo:[[self document] printInfo]]; for (cnt = 0; cnt < numberOfPages; cnt++) { NSRect textFrame = [pagesView documentRectForPageNumber:cnt]; NSTextContainer *textContainer = [textContainers objectAtIndex:cnt]; [textContainer setContainerSize:textFrame.size]; [[textContainer textView] setFrame:textFrame]; } } } /* Method to lazily display ruler. Call with YES to display, NO to cancel display; this method doesn't remove the ruler. */ - (void)showRulerDelayed:(BOOL)flag { if (!flag && rulerIsBeingDisplayed) { [[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(showRuler:) object:self]; } else if (flag && !rulerIsBeingDisplayed) { [self performSelector:@selector(showRuler:) withObject:self afterDelay:0.0]; } rulerIsBeingDisplayed = flag; } - (void)showRuler:(id)obj { if (rulerIsBeingDisplayed && !obj) [self showRulerDelayed:NO]; // Cancel outstanding request, if not coming from the delayed request if ([[NSUserDefaults standardUserDefaults] boolForKey:ShowRuler]) [[self firstTextView] setRulerVisible:YES]; } /* Used when converting to plain text */ - (void)removeAttachments { NSTextStorage *attrString = [[self document] textStorage]; NSTextView *view = [self firstTextView]; NSUInteger loc = 0; NSUInteger end = [attrString length]; [attrString beginEditing]; while (loc < end) { /* Run through the string in terms of attachment runs */ NSRange attachmentRange; /* Attachment attribute run */ NSTextAttachment *attachment = [attrString attribute:NSAttachmentAttributeName atIndex:loc longestEffectiveRange:&attachmentRange inRange:NSMakeRange(loc, end-loc)]; if (attachment) { /* If there is an attachment and it is on an attachment character, remove the character */ unichar ch = [[attrString string] characterAtIndex:loc]; if (ch == NSAttachmentCharacter) { if ([view shouldChangeTextInRange:NSMakeRange(loc, 1) replacementString:@""]) { [attrString replaceCharactersInRange:NSMakeRange(loc, 1) withString:@""]; [view didChangeText]; } end = [attrString length]; /* New length */ } else loc++; /* Just skip over the current character... */ } else loc = NSMaxRange(attachmentRange); } [attrString endEditing]; } /* This method implements panel-based "attach" functionality. Note that as-is, it's set to accept all files; however, by setting allowed types on the open panel it can be restricted to images, etc. */ - (void)chooseAndAttachFiles:(id)sender { NSOpenPanel *panel = [NSOpenPanel openPanel]; [panel setCanChooseDirectories:YES]; [panel setAllowsMultipleSelection:YES]; [panel beginSheetForDirectory: nil file: nil modalForWindow: [self window] modalDelegate: self didEndSelector: @selector(savePanelDidEnd:returnCode:contextInfo:) contextInfo: nil]; } - (void)savePanelDidEnd:(NSSavePanel *)savePanel returnCode:(NSInteger)result contextInfo:(void *)contextInfo { NSOpenPanel *panel = (NSOpenPanel*)savePanel; if (result == NSOKButton) { // Only if not cancelled NSArray *urls = [panel URLs]; NSTextView *textView = [self firstTextView]; NSInteger numberOfErrors = 0; NSError *error = nil; NSMutableAttributedString *attachments = [[NSMutableAttributedString alloc] init]; // Process all the attachments, creating an attributed string for (NSUInteger i = 0; i<[urls count]; i++) { NSURL *url = [urls objectAtIndex: i]; NSFileWrapper *wrapper = [[NSFileWrapper alloc] initWithPath: [url path]]; //URL:url options:NSFileWrapperReadingImmediate error:&error]; if (wrapper) { NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithFileWrapper:wrapper]; [attachments appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]]; [wrapper release]; [attachment release]; } else { numberOfErrors++; } } // We could actually take an approach where on partial success we allow the user to cancel the operation, but since it's easy enough to undo, this seems reasonable enough if ([attachments length] > 0) { NSRange selectionRange = [textView selectedRange]; if ([textView shouldChangeTextInRange:selectionRange replacementString:[attachments string]]) { // Shouldn't fail, since we are controlling the text view; but if it does, we simply don't allow the change [[textView textStorage] replaceCharactersInRange:selectionRange withAttributedString:attachments]; [textView didChangeText]; } } [attachments release]; [panel orderOut:nil]; // Strictly speaking not necessary, but if we put up an error sheet, a good idea for the panel to be dismissed first // Deal with errors opening some or all of the attachments if (numberOfErrors > 0) { if (numberOfErrors > 1) { // More than one failure, put up a summary error (which doesn't do a good job of communicating the actual errors, but multiple attachments is a relatively rare case). For one error, we present the actual NSError we got back. // The error message will be different depending on whether all or some of the files were successfully attached. NSString *description = (numberOfErrors == [urls count]) ? NSLocalizedString(@"None of the items could be attached.", @"Title of alert indicating error during 'Attach Files...' when user tries to attach (insert) multiple files and none can be attached.") : NSLocalizedString(@"Some of the items could not be attached.", @"Title of alert indicating error during 'Attach Files...' when user tries to attach (insert) multiple files and some fail."); error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditAttachFilesFailure userInfo:[NSDictionary dictionaryWithObjectsAndKeys:description, NSLocalizedDescriptionKey, NSLocalizedString(@"The files may be unreadable, or the volume they are on may be inaccessible. Please check in Finder.", @"Recommendation when 'Attach Files...' command fails"), NSLocalizedRecoverySuggestionErrorKey, nil]]; } [[self window] presentError:error modalForWindow:[self window] delegate:nil didPresentSelector:NULL contextInfo:NULL]; } } } /* Doesn't check to see if the prev value is the same --- Otherwise the first time doesn't work... attachmentFlag allows for optimizing some cases where we know we have no attachments, so we don't need to scan looking for them. */ - (void)updateForRichTextAndRulerState { NSTextView *view = [self firstTextView]; BOOL rich = [[self document] isRichText]; [view setRichText:rich]; [view setUsesRuler:rich]; // If NO, this correctly gets rid of the ruler if it was up if (!rich && rulerIsBeingDisplayed) [self showRulerDelayed:NO]; // Cancel delayed ruler request if (rich && ![[self document] isReadOnly]) [self showRulerDelayed:YES]; [view setImportsGraphics:rich]; } - (void)convertTextForRichTextStateRemoveAttachments:(BOOL)attachmentFlag { NSTextView *view = [self firstTextView]; Document *doc = [self document]; BOOL rich = [doc isRichText]; NSDictionary *textAttributes = [doc defaultTextAttributes:rich]; NSParagraphStyle *paragraphStyle = [textAttributes objectForKey:NSParagraphStyleAttributeName]; // Note, since the textview content changes (removing attachments and changing attributes) create undo actions inside the textview, we do not execute them here if we're undoing or redoing if (![[doc undoManager] isUndoing] && ![[doc undoManager] isRedoing]) { NSTextStorage *textStorage = [[self document] textStorage]; if (!rich && attachmentFlag) [self removeAttachments]; NSRange range = NSMakeRange(0, [textStorage length]); if ([view shouldChangeTextInRange:range replacementString:nil]) { [textStorage beginEditing]; [doc applyDefaultTextAttributes:rich]; [textStorage endEditing]; [view didChangeText]; } } [view setTypingAttributes:textAttributes]; [view setDefaultParagraphStyle:paragraphStyle]; } - (NSUInteger)numberOfPages { return hasMultiplePages ? [[scrollView documentView] numberOfPages] : 1; } - (void)addPage { NSZone *zone = [self zone]; NSUInteger numberOfPages = [self numberOfPages]; MultiplePageView *pagesView = [scrollView documentView]; NSSize textSize = [pagesView documentSizeInPage]; NSTextContainer *textContainer = [[NSTextContainer allocWithZone:zone] initWithContainerSize:textSize]; NSTextView *textView; [pagesView setNumberOfPages:numberOfPages + 1]; textView = [[NSTextView allocWithZone:zone] initWithFrame:[pagesView documentRectForPageNumber:numberOfPages] textContainer:textContainer]; [textView setHorizontallyResizable:NO]; [textView setVerticallyResizable:NO]; [pagesView addSubview:textView]; [[self layoutManager] addTextContainer:textContainer]; [textView release]; [textContainer release]; } - (void)removePage { NSUInteger numberOfPages = [self numberOfPages]; NSArray *textContainers = [[self layoutManager] textContainers]; NSTextContainer *lastContainer = [textContainers objectAtIndex:[textContainers count] - 1]; MultiplePageView *pagesView = [scrollView documentView]; [pagesView setNumberOfPages:numberOfPages - 1]; [[lastContainer textView] removeFromSuperview]; [[lastContainer layoutManager] removeTextContainerAtIndex:[textContainers count] - 1]; } - (NSView *)documentView { return [scrollView documentView]; } - (void)setHasMultiplePages:(BOOL)pages force:(BOOL)force { NSZone *zone = [self zone]; if (!force && (hasMultiplePages == pages)) return; hasMultiplePages = pages; [[self firstTextView] removeObserver:self forKeyPath:@"backgroundColor"]; [[self firstTextView] unbind:@"editable"]; if (hasMultiplePages) { NSTextView *textView = [self firstTextView]; MultiplePageView *pagesView = [[MultiplePageView allocWithZone:zone] init]; [scrollView setDocumentView:pagesView]; [pagesView setPrintInfo:[[self document] printInfo]]; // Add the first new page before we remove the old container so we can avoid losing all the shared text view state. [self addPage]; if (textView) { [[self layoutManager] removeTextContainerAtIndex:0]; } [scrollView setHasHorizontalScroller:YES]; // Make sure the selected text is shown [[self firstTextView] scrollRangeToVisible:[[self firstTextView] selectedRange]]; NSRect visRect = [pagesView visibleRect]; NSRect pageRect = [pagesView pageRectForPageNumber:0]; if (visRect.size.width < pageRect.size.width) { // If we can't show the whole page, tweak a little further NSRect docRect = [pagesView documentRectForPageNumber:0]; if (visRect.size.width >= docRect.size.width) { // Center document area in window visRect.origin.x = docRect.origin.x - floor((visRect.size.width - docRect.size.width) / 2); if (visRect.origin.x < pageRect.origin.x) visRect.origin.x = pageRect.origin.x; } else { // If we can't show the document area, then show left edge of document area (w/out margins) visRect.origin.x = docRect.origin.x; } [pagesView scrollRectToVisible:visRect]; } [pagesView release]; } else { NSSize size = [scrollView contentSize]; NSTextContainer *textContainer = [[NSTextContainer allocWithZone:zone] initWithContainerSize:NSMakeSize(size.width, CGFLOAT_MAX)]; NSTextView *textView = [[NSTextView allocWithZone:zone] initWithFrame:NSMakeRect(0.0, 0.0, size.width, size.height) textContainer:textContainer]; // Insert the single container as the first container in the layout manager before removing the existing pages in order to preserve the shared view state. [[self layoutManager] insertTextContainer:textContainer atIndex:0]; if ([[scrollView documentView] isKindOfClass:[MultiplePageView class]]) { NSArray *textContainers = [[self layoutManager] textContainers]; NSUInteger cnt = [textContainers count]; while (cnt-- > 1) { [[self layoutManager] removeTextContainerAtIndex:cnt]; } } [textContainer setWidthTracksTextView:YES]; [textContainer setHeightTracksTextView:NO]; /* Not really necessary */ [textView setHorizontallyResizable:NO]; /* Not really necessary */ [textView setVerticallyResizable:YES]; [textView setAutoresizingMask:NSViewWidthSizable]; [textView setMinSize:size]; /* Not really necessary; will be adjusted by the autoresizing... */ [textView setMaxSize:NSMakeSize(CGFLOAT_MAX, CGFLOAT_MAX)]; /* Will be adjusted by the autoresizing... */ /* The next line should cause the multiple page view and everything else to go away */ [scrollView setDocumentView:textView]; [scrollView setHasHorizontalScroller:NO]; [textView release]; [textContainer release]; // Show the selected region [[self firstTextView] scrollRangeToVisible:[[self firstTextView] selectedRange]]; } [[self firstTextView] addObserver:self forKeyPath:@"backgroundColor" options:0 context:NULL]; [[self firstTextView] bind:@"editable" toObject:self withKeyPath:@"document.readOnly" options:[NSDictionary dictionaryWithObject:NSNegateBooleanTransformerName forKey:NSValueTransformerNameBindingOption]]; [[scrollView window] makeFirstResponder:[self firstTextView]]; [[scrollView window] setInitialFirstResponder:[self firstTextView]]; // So focus won't be stolen (2934918) } - (void)resizeWindowForViewSize:(NSSize)size { NSWindow *window = [self window]; NSRect origWindowFrame = [window frame]; if (![[self document] hasMultiplePages]) { size.width += (defaultTextPadding() * 2.0); } NSRect scrollViewRect = [[window contentView] frame]; scrollViewRect.size = [[scrollView class] frameSizeForContentSize:size hasHorizontalScroller:[scrollView hasHorizontalScroller] hasVerticalScroller:[scrollView hasVerticalScroller] borderType:[scrollView borderType]]; NSRect newFrame = [window frameRectForContentRect:scrollViewRect]; newFrame.origin = NSMakePoint(origWindowFrame.origin.x, NSMaxY(origWindowFrame) - newFrame.size.height); [window setFrame:newFrame display:YES]; } - (void)setupWindowForDocument { NSSize viewSize = [[self document] viewSize]; [self setupTextViewForDocument]; if (!NSEqualSizes(viewSize, NSZeroSize)) { // Document has a custom view size that should be used [self resizeWindowForViewSize:viewSize]; } else { // Set the window size from defaults... if (hasMultiplePages) { [self resizeWindowForViewSize:[[scrollView documentView] pageRectForPageNumber:0].size]; } else { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSInteger windowHeight = [defaults integerForKey:WindowHeight]; NSInteger windowWidth = [defaults integerForKey:WindowWidth]; NSFont *font = [[self document] isRichText] ? [NSFont userFontOfSize:0.0] : [NSFont userFixedPitchFontOfSize:0.0]; NSSize size; #ifdef GNUSTEP const CGFloat defaultLineHeight = [font defaultLineHeightForFont]; #else const CGFloat defaultLineHeight = [[self layoutManager] defaultLineHeightForFont: font]; #endif size.height = ceil(defaultLineHeight * windowHeight); size.width = [@"x" sizeWithAttributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]].width; if (size.width == 0.0) size.width = [@" " sizeWithAttributes:[NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName]].width; /* try for space width */ if (size.width == 0.0) size.width = [font maximumAdvancement].width; /* or max width */ size.width = ceil(size.width * windowWidth); [self resizeWindowForViewSize:size]; } } } - (void)windowDidLoad { [super windowDidLoad]; // This creates the first text view [self setHasMultiplePages:[[self document] hasMultiplePages] force:YES]; // This sets it up [self setupInitialTextViewSharedState]; // This makes sure the window's UI (including text view shared state) is updated to reflect the document [self setupWindowForDocument]; // Changes to the zoom popup need to be communicated to the document if ([[self document] hasMultiplePages]) [scrollView setScaleFactor:[[self document] scaleFactor] adjustPopup:YES]; [scrollView addObserver:self forKeyPath:@"scaleFactor" options:0 context:NULL]; [[[self document] undoManager] removeAllActions]; } - (void)setDocumentEdited:(BOOL)edited { [super setDocumentEdited:edited]; } /* This method causes the text to be laid out in the foreground (approximately) up to the indicated character index. */ - (void)doForegroundLayoutToCharacterIndex:(NSUInteger)loc { NSUInteger len; if (loc > 0 && (len = [[[self document] textStorage] length]) > 0) { NSRange glyphRange; if (loc >= len) loc = len - 1; /* Find out which glyph index the desired character index corresponds to */ glyphRange = [[self layoutManager] glyphRangeForCharacterRange:NSMakeRange(loc, 1) actualCharacterRange:NULL]; if (glyphRange.location > 0) { /* Now cause layout by asking a question which has to determine where the glyph is */ (void)[[self layoutManager] textContainerForGlyphAtIndex:glyphRange.location - 1 effectiveRange:NULL]; } } } /* doToggleRich, called from toggleRich: or the endToggleRichSheet:... alert panel method, toggles the isRichText state (with undo) */ - (void)doToggleRichWithNewURL:(NSURL *)newURL { Document *doc = [self document]; BOOL rich = [doc isRichText], newRich = !rich; NSUndoManager *undoMgr = [doc undoManager]; [undoMgr registerUndoWithTarget:doc selector:@selector(setFileType:) object:[doc fileType]]; [undoMgr registerUndoWithTarget:self selector:@selector(doToggleRichWithNewURL:) object:[doc fileURL]]; [doc setRichText:newRich]; [doc setFileURL:newURL]; [self convertTextForRichTextStateRemoveAttachments:rich]; if (![undoMgr isUndoing]) { [undoMgr setActionName:newRich ? NSLocalizedString(@"Make Rich Text", @"Undo menu item text (without 'Undo ') for making a document rich text") : NSLocalizedString(@"Make Plain Text", @"Undo menu item text (without 'Undo ') for making a document plain text")]; } } /* toggleRich: puts up an alert before ultimately calling -doToggleRichWithNewURL: */ - (void)toggleRich:(id)sender { // Check if there is any loss of information if ([[self document] toggleRichWillLoseInformation]) { NSBeginAlertSheet(NSLocalizedString(@"Convert this document to plain text?", @"Title of alert confirming Make Plain Text"), NSLocalizedString(@"OK", @"OK"), NSLocalizedString(@"Cancel", @"Button choice allowing user to cancel."), nil, [[self document] windowForSheet], self, NULL, @selector(didEndToggleRichSheet:returnCode:contextInfo:), NULL, NSLocalizedString(@"Making a rich text document plain will lose all text styles (such as fonts and colors), images, attachments, and document properties.", @"Subtitle of alert confirming Make Plain Text")); } else { [self doToggleRichWithNewURL:nil]; } } - (void)didEndToggleRichSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo { if (returnCode == NSAlertDefaultReturn) [self doToggleRichWithNewURL:nil]; } @end @implementation DocumentWindowController(Delegation) /* Window delegation messages */ - (NSRect)windowWillUseStandardFrame:(NSWindow *)window defaultFrame:(NSRect)defaultFrame { if (!hasMultiplePages) { // If not wrap-to-page, use the default suggested return defaultFrame; } else { NSRect currentFrame = [window frame]; // Get the current size and location of the window NSRect standardFrame; NSSize paperSize = [[[self document] printInfo] paperSize]; // Get a frame size that fits the current printable page NSRect newScrollView; // Get a frame for the window content, which is a scrollView newScrollView.origin = NSZeroPoint; newScrollView.size = [[scrollView class] frameSizeForContentSize:paperSize hasHorizontalScroller:[scrollView hasHorizontalScroller] hasVerticalScroller:[scrollView hasVerticalScroller] borderType:[scrollView borderType]]; // The standard frame for the window is now the frame that will fit the scrollView content standardFrame.size = [[window class] frameRectForContentRect:newScrollView styleMask:[window styleMask]].size; // Set the top left of the standard frame to be the same as that of the current window standardFrame.origin.y = NSMaxY(currentFrame) - standardFrame.size.height; standardFrame.origin.x = currentFrame.origin.x; return standardFrame; } } - (void)windowDidResize:(NSNotification *)notification { [[self document] setTransient:NO]; // Since the user has taken an interest in the window, clear the document's transient status if (!isSettingSize) { // There is potential for recursion, but typically this is prevented in NSWindow which doesn't call this method if the frame doesn't change. However, just in case... isSettingSize = YES; NSSize viewSize = [[scrollView class] contentSizeForFrameSize:[scrollView frame].size hasHorizontalScroller:[scrollView hasHorizontalScroller] hasVerticalScroller:[scrollView hasVerticalScroller] borderType:[scrollView borderType]]; if (![[self document] hasMultiplePages]) { viewSize.width -= (defaultTextPadding() * 2.0); } [[self document] setViewSize:viewSize]; isSettingSize = NO; } } - (void)windowDidMove:(NSNotification *)notification { [[self document] setTransient:NO]; // Since the user has taken an interest in the window, clear the document's transient status } /* Text view delegation messages */ - (BOOL)textView:(NSTextView *)textView clickedOnLink:(id)link atIndex:(NSUInteger)charIndex { NSURL *linkURL = nil; if ([link isKindOfClass:[NSURL class]]) { // Handle NSURL links linkURL = link; } else if ([link isKindOfClass:[NSString class]]) { // Handle NSString links linkURL = [NSURL URLWithString:link relativeToURL:[[self document] fileURL]]; } if (linkURL) { NSWorkspace *workspace = [NSWorkspace sharedWorkspace]; if ([linkURL isFileURL]) { NSError *error; if (![linkURL checkResourceIsReachableAndReturnError:&error]) { // To be able to present an error panel, see if the file is reachable [[self window] presentError:error modalForWindow:[self window] delegate:nil didPresentSelector:NULL contextInfo:NULL]; return YES; } else { // Special case: We want to open text types in TextEdit, as presumably that is what was desired NSString *ext = [[linkURL path] pathExtension]; BOOL openInTextEdit = NO; if ([ext isEqualToString: @"rtf"] || [ext isEqualToString: @"rtfd"] || [ext isEqualToString: @"txt"]) { openInTextEdit = YES; } if (openInTextEdit) { if ([[NSDocumentController sharedDocumentController] openDocumentWithContentsOfURL:linkURL display:YES error:NULL]) return YES; } } // Other file URLs are displayed in Finder if ([workspace openURL:linkURL]) return YES; //[workspace activateFileViewerSelectingURLs:[NSArray arrayWithObject:linkURL]]; //return YES; } else // not file URL { // Other URLs are simply opened if ([workspace openURL:linkURL]) return YES; } } // We only get here on failure... Because we beep, we return YES to indicate "success", so the text system does no further processing. NSBeep(); return YES; } - (void)textView:(NSTextView *)view doubleClickedOnCell:(id )cell inRect:(NSRect)rect { BOOL success = NO; NSString *name = [[[cell attachment] fileWrapper] filename]; NSURL *docURL = [[self document] fileURL]; if (docURL && name && [docURL isFileURL]) { NSString *docPath = [docURL path]; NSString *pathToAttachment = [docPath stringByAppendingPathComponent:name]; if (pathToAttachment) success = [[NSWorkspace sharedWorkspace] openFile:pathToAttachment]; } if (!success) { if ([[self document] isDocumentEdited]) { NSBeginAlertSheet(NSLocalizedString(@"The attached document could not be opened.", @"Title of alert indicating attached document in TextEdit file could not be opened."), NSLocalizedString(@"OK", @"OK"), nil, nil, [view window], self, NULL, NULL, nil, NSLocalizedString(@"This is likely because the file has not yet been saved. If possible, try again after saving.", @"Message indicating text attachment could not be opened, likely because document has not yet been saved.")); } NSBeep(); } } - (NSArray *)textView:(NSTextView *)view writablePasteboardTypesForCell:(id )cell atIndex:(NSUInteger)charIndex { NSString *name = [[[cell attachment] fileWrapper] filename]; NSURL *docURL = [[self document] fileURL]; return (docURL && [docURL isFileURL] && name) ? [NSArray arrayWithObject:NSFilenamesPboardType] : nil; } - (BOOL)textView:(NSTextView *)view writeCell:(id )cell atIndex:(NSUInteger)charIndex toPasteboard:(NSPasteboard *)pboard type:(NSString *)type { NSString *name = [[[cell attachment] fileWrapper] filename]; NSURL *docURL = [[self document] fileURL]; if ([type isEqualToString:NSFilenamesPboardType] && name && [docURL isFileURL]) { NSString *docPath = [docURL path]; NSString *pathToAttachment = [docPath stringByAppendingPathComponent:name]; if (pathToAttachment) { [pboard setPropertyList:[NSArray arrayWithObject:pathToAttachment] forType:NSFilenamesPboardType]; return YES; } } return NO; } /* Layout manager delegation message */ - (void)layoutManager:(NSLayoutManager *)layoutManager didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer atEnd:(BOOL)layoutFinishedFlag { if (hasMultiplePages) { NSArray *containers = [layoutManager textContainers]; if (!layoutFinishedFlag || (textContainer == nil)) { // Either layout is not finished or it is but there are glyphs laid nowhere. NSTextContainer *lastContainer = [containers lastObject]; if ((textContainer == lastContainer) || (textContainer == nil)) { // Add a new page if the newly full container is the last container or the nowhere container. // Do this only if there are glyphs laid in the last container (temporary solution for 3729692, until AppKit makes something better available.) if ([layoutManager glyphRangeForTextContainer:lastContainer].length > 0) [self addPage]; } } else { // Layout is done and it all fit. See if we can axe some pages. NSUInteger lastUsedContainerIndex = [containers indexOfObjectIdenticalTo:textContainer]; NSUInteger numContainers = [containers count]; while (++lastUsedContainerIndex < numContainers) { [self removePage]; } } } } @end @implementation DocumentWindowController(NSMenuValidation) - (BOOL)validateMenuItem:(NSMenuItem *)aCell { SEL action = [aCell action]; if (action == @selector(toggleRich:)) { validateToggleItem(aCell, [[self document] isRichText], NSLocalizedString(@"&Make Plain Text", @"Menu item to make the current document plain text"), NSLocalizedString(@"&Make Rich Text", @"Menu item to make the current document rich text")); if ([[self document] isReadOnly]) return NO; } else if (action == @selector(chooseAndAttachFiles:)) { return [[self document] isRichText] && ![[self document] isReadOnly]; } return YES; } @end TextEdit-master/Edit_main.m000066400000000000000000000001661271274630500161620ustar00rootroot00000000000000#import int main(int argc, const char *argv[]) { return NSApplicationMain(argc, argv); } TextEdit-master/EncodingManager.h000066400000000000000000000022351271274630500173040ustar00rootroot00000000000000#import extern const NSUInteger NoStringEncoding; extern const NSInteger WantsAutomaticTag; @interface EncodingPopUpButtonCell : NSPopUpButtonCell { } @end @interface EncodingManager : NSObject { @private IBOutlet NSMatrix *encodingMatrix; NSArray *encodings; } /* There is just one instance... */ + (EncodingManager *)sharedInstance; /* List of encodings that should be shown in encoding lists */ - (NSArray *)enabledEncodings; /* Empties then initializes the supplied popup with the supported encodings. */ - (void)setupPopUpCell:(EncodingPopUpButtonCell *)button selectedEncoding:(NSStringEncoding)selectedEncoding withDefaultEntry:(BOOL)includeDefaultItem; /* Action methods for bringing up and dealing with changes in the encodings list panel */ - (IBAction)showPanel:(id)sender; - (IBAction)encodingListChanged:(id)sender; - (IBAction)clearAll:(id)sender; - (IBAction)selectAll:(id)sender; - (IBAction)revertToDefault:(id)sender; /* Internal method to save and communicate changes to the encoding list */ - (void)noteEncodingListChange:(BOOL)writeDefault updateList:(BOOL)updateList postNotification:(BOOL)post; @end TextEdit-master/EncodingManager.m000066400000000000000000000371341271274630500173170ustar00rootroot00000000000000/* EncodingManager.m Copyright (c) 2002-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer Helper class providing additional functionality for character encodings. This file also defines the EncodingPopUpButtonCell class. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import #import "EncodingManager.h" const NSUInteger NoStringEncoding = 0xFFFFFFFF; const NSInteger WantsAutomaticTag = -1; /* EncodingPopUpButtonCell is a subclass of NSPopUpButtonCell which provides the ability to automatically recompute its contents on changes to the encodings list. This allows sprinkling these around the app any have them automatically update themselves. Because we really only want to know when the cell's selectedItem is changed, we want to prevent the last item ("Customize...") from being selected. In a nib file, to indicate that a default entry is wanted, the first menu item is given a tag of -1. */ @implementation EncodingPopUpButtonCell - (id)initTextCell:(NSString *)stringValue pullsDown:(BOOL)pullDown { if ((self = [super initTextCell:stringValue pullsDown:pullDown])) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(encodingsListChanged:) name:@"EncodingsListChanged" object:nil]; [[EncodingManager sharedInstance] setupPopUpCell:self selectedEncoding:NoStringEncoding withDefaultEntry:NO]; } return self; } - (id)initWithCoder:(NSCoder *)coder { if ((self = [super initWithCoder:coder])) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(encodingsListChanged:) name:@"EncodingsListChanged" object:nil]; [[EncodingManager sharedInstance] setupPopUpCell:self selectedEncoding:NoStringEncoding withDefaultEntry:([self numberOfItems] > 0 && [[self itemAtIndex:0] tag] == WantsAutomaticTag)]; } return self; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; [super dealloc]; } /* Do not allow selecting the "Customize" item and the separator before it. (Note that the customize item can be chosen and an action will be sent, but the selection doesn't change to it.) */ - (void)selectItemAtIndex:(NSInteger)index { if (index + 2 <= [self numberOfItems]) [super selectItemAtIndex:index]; } /* Update contents based on encodings list customization */ - (void)encodingsListChanged:(NSNotification *)notification { [[EncodingManager sharedInstance] setupPopUpCell:self selectedEncoding:[[[self selectedItem] representedObject] unsignedIntegerValue] withDefaultEntry:([self numberOfItems] > 0 && [[self itemAtIndex:0] tag] == WantsAutomaticTag)]; } @end @implementation EncodingManager /* Manage single shared instance which both init and sharedInstance methods return. */ static EncodingManager *sharedInstance = nil; + (EncodingManager *)sharedInstance { return sharedInstance ? sharedInstance : [[self alloc] init]; } - (id)init { if (sharedInstance) { // We just have one instance of the EncodingManager class, return that one instead [self release]; } else if ((self = [super init])) { sharedInstance = self; } return sharedInstance; } - (void)dealloc { if (self != sharedInstance) [super dealloc]; // Don't free the shared instance } /* Sort using the equivalent Mac encoding as the major key. Secondary key is the actual encoding value, which works well enough. We treat Unicode encodings as special case, putting them at top of the list. */ static int encodingCompare(const void *firstPtr, const void *secondPtr) { NSStringEncoding first = *(NSStringEncoding *)firstPtr; NSStringEncoding second = *(NSStringEncoding *)secondPtr; NSStringEncoding macEncodingForFirst = first; //CFStringGetMostCompatibleMacStringEncoding(first); NSStringEncoding macEncodingForSecond = second; //CFStringGetMostCompatibleMacStringEncoding(second); if (first == second) return 0; // Should really never happen if (macEncodingForFirst == NSUnicodeStringEncoding || macEncodingForSecond == NSUnicodeStringEncoding) { if (macEncodingForSecond == macEncodingForFirst) return (first > second) ? 1 : -1; // Both Unicode; compare second order return (macEncodingForFirst == NSUnicodeStringEncoding) ? -1 : 1; // First is Unicode } if ((macEncodingForFirst > macEncodingForSecond) || ((macEncodingForFirst == macEncodingForSecond) && (first > second))) return 1; return -1; } /* Return a sorted list of all available string encodings. */ + (NSArray *)allAvailableStringEncodings { static NSMutableArray *allEncodings = nil; if (!allEncodings) { // Build list of encodings, sorted, and including only those with human readable names const NSStringEncoding *nsEncodings = [NSString availableStringEncodings]; NSStringEncoding *tmp; NSInteger cnt, num = 0; while (nsEncodings[num] != 0) num++; // Count tmp = malloc(sizeof(NSStringEncoding) * num); memcpy(tmp, nsEncodings, sizeof(NSStringEncoding) * num); // Copy the list qsort(tmp, num, sizeof(NSStringEncoding), encodingCompare); // Sort it allEncodings = [[NSMutableArray alloc] init]; // Now put it in an NSArray for (cnt = 0; cnt < num; cnt++) { NSStringEncoding nsEncoding = tmp[cnt]; if (nsEncoding && [NSString localizedNameOfStringEncoding:nsEncoding]) [allEncodings addObject:[NSNumber numberWithUnsignedInteger:nsEncoding]]; } free(tmp); } return allEncodings; } /* Called once (when the UI is first brought up) to properly setup the encodings list in the "Customize Encodings List" panel. */ - (void)setupEncodingsList { NSArray *allEncodings = [[self class] allAvailableStringEncodings]; NSInteger cnt, numEncodings = [allEncodings count]; for (cnt = 0; cnt < numEncodings; cnt++) { NSNumber *encodingNumber = [allEncodings objectAtIndex:cnt]; NSStringEncoding encoding = [encodingNumber unsignedIntegerValue]; NSString *encodingName = [NSString localizedNameOfStringEncoding:encoding]; NSCell *cell; if (cnt >= [encodingMatrix numberOfRows]) [encodingMatrix addRow]; cell = [encodingMatrix cellAtRow:cnt column:0]; [cell setTitle:encodingName]; [cell setRepresentedObject:encodingNumber]; } [encodingMatrix sizeToCells]; [self noteEncodingListChange:NO updateList:YES postNotification:NO]; } /* This method initializes the provided popup with list of encodings; it also sets up the selected encoding as indicated and if includeDefaultItem is YES, includes an initial item for selecting "Automatic" choice. All encoding items have an NSNumber with the encoding (or NoStringEncoding) as their representedObject. */ - (void)setupPopUpCell:(EncodingPopUpButtonCell *)popup selectedEncoding:(NSStringEncoding)selectedEncoding withDefaultEntry:(BOOL)includeDefaultItem { NSArray *encs = [self enabledEncodings]; NSUInteger cnt, numEncodings, itemToSelect = 0; // Put the encodings in the popup [popup removeAllItems]; // Put the initial "Automatic" item, if desired if (includeDefaultItem) { [popup addItemWithTitle:NSLocalizedString(@"Automatic", @"Encoding popup entry indicating automatic choice of encoding")]; [[popup itemAtIndex:0] setRepresentedObject:[NSNumber numberWithUnsignedInteger:NoStringEncoding]]; [[popup itemAtIndex:0] setTag:WantsAutomaticTag]; // so that the default entry is included again next time } // Make sure the initial selected encoding appears in the list if (!includeDefaultItem && (selectedEncoding != NoStringEncoding) && ![encs containsObject:[NSNumber numberWithUnsignedInteger:selectedEncoding]]) encs = [encs arrayByAddingObject:[NSNumber numberWithUnsignedInteger:selectedEncoding]]; numEncodings = [encs count]; // Fill with encodings for (cnt = 0; cnt < numEncodings; cnt++) { NSNumber *encodingNumber = [encs objectAtIndex:cnt]; NSStringEncoding encoding = [encodingNumber unsignedIntegerValue]; [popup addItemWithTitle:[NSString localizedNameOfStringEncoding:encoding]]; [[popup lastItem] setRepresentedObject:encodingNumber]; [[popup lastItem] setEnabled:YES]; if (encoding == selectedEncoding) itemToSelect = [popup numberOfItems] - 1; } // Add an optional separator and "customize" item at end if ([popup numberOfItems] > 0) { [[popup menu] addItem:[NSMenuItem separatorItem]]; } [popup addItemWithTitle:NSLocalizedString(@"Customize Encodings List\\U2026", @"Encoding popup entry for bringing up the Customize Encodings List panel (this also occurs as the title of the panel itself, they should have the same localization)")]; [[popup lastItem] setAction:@selector(showPanel:)]; [[popup lastItem] setTarget:self]; [popup selectItemAtIndex:itemToSelect]; } /* Returns the actual enabled list of encodings. */ - (NSArray *)enabledEncodings { static const NSInteger plainTextFileStringEncodingsSupported[] = { NSASCIIStringEncoding, NSNEXTSTEPStringEncoding, NSJapaneseEUCStringEncoding, NSUTF8StringEncoding, NSISOLatin1StringEncoding, NSSymbolStringEncoding, NSNonLossyASCIIStringEncoding, NSShiftJISStringEncoding, NSISOLatin2StringEncoding, NSUnicodeStringEncoding, NSWindowsCP1251StringEncoding, NSWindowsCP1252StringEncoding, NSWindowsCP1253StringEncoding, NSWindowsCP1254StringEncoding, NSWindowsCP1250StringEncoding, NSISO2022JPStringEncoding, NSMacOSRomanStringEncoding, 0 }; if (encodings == nil) { NSMutableArray *encs = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"Encodings"] mutableCopy]; if (encs == nil) { NSStringEncoding defaultEncoding = [NSString defaultCStringEncoding]; NSStringEncoding encoding; BOOL hasDefault = NO; NSInteger cnt = 0; encs = [[NSMutableArray alloc] init]; while (plainTextFileStringEncodingsSupported[cnt] != 0) { encoding = plainTextFileStringEncodingsSupported[cnt++]; [encs addObject:[NSNumber numberWithUnsignedInteger:encoding]]; if (encoding == defaultEncoding) hasDefault = YES; } if (!hasDefault) [encs addObject:[NSNumber numberWithUnsignedInteger:defaultEncoding]]; } encodings = encs; } return encodings; } /* Should be called after any customization to the encodings list. Writes the new list out to defaults; updates the UI; also posts notification to get all encoding popups to update. */ - (void)noteEncodingListChange:(BOOL)writeDefault updateList:(BOOL)updateList postNotification:(BOOL)post { if (writeDefault) [[NSUserDefaults standardUserDefaults] setObject:encodings forKey:@"Encodings"]; if (updateList) { NSInteger cnt, numEncodings = [encodingMatrix numberOfRows]; for (cnt = 0; cnt < numEncodings; cnt++) { NSCell *cell = [encodingMatrix cellAtRow:cnt column:0]; [cell setState:[encodings containsObject:[cell representedObject]] ? NSOnState : NSOffState]; } } if (post) [[NSNotificationCenter defaultCenter] postNotificationName:@"EncodingsListChanged" object:nil]; } /* Because we want the encoding list to be modifiable even when a modal panel (such as the open panel) is up, we indicate that both the encodings list panel and the target work when modal. (See showPanel: below for the former...) */ - (BOOL)worksWhenModal { return YES; } /* Action methods */ - (IBAction)showPanel:(id)sender { if (!encodingMatrix) { if (![NSBundle loadNibNamed:@"SelectEncodingsPanel" owner:self]) { NSLog(@"Failed to load SelectEncodingsPanel.nib"); return; } [(NSPanel *)[encodingMatrix window] setWorksWhenModal:YES]; // This should work when open panel is up [[encodingMatrix window] setLevel:NSModalPanelWindowLevel]; // Again, for the same reason [self setupEncodingsList]; // Initialize the list (only need to do this once) } [[encodingMatrix window] makeKeyAndOrderFront:nil]; } - (IBAction)encodingListChanged:(id)sender { NSInteger cnt, numRows = [encodingMatrix numberOfRows]; NSMutableArray *encs = [[NSMutableArray alloc] init]; for (cnt = 0; cnt < numRows; cnt++) { NSCell *cell = [encodingMatrix cellAtRow:cnt column:0]; NSNumber *encodingNumber = [cell representedObject]; if (([encodingNumber unsignedIntegerValue] != NoStringEncoding) && ([cell state] == NSOnState)) [encs addObject:encodingNumber]; } [encodings autorelease]; encodings = encs; [self noteEncodingListChange:YES updateList:NO postNotification:YES]; } - (IBAction)clearAll:(id)sender { [encodings autorelease]; encodings = [[NSArray array] retain]; // Empty encodings list [self noteEncodingListChange:YES updateList:YES postNotification:YES]; } - (IBAction)selectAll:(id)sender { [encodings autorelease]; encodings = [[[self class] allAvailableStringEncodings] retain]; // All encodings [self noteEncodingListChange:YES updateList:YES postNotification:YES]; } - (IBAction)revertToDefault:(id)sender { [encodings autorelease]; encodings = nil; [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"Encodings"]; (void)[self enabledEncodings]; // Regenerate default list [self noteEncodingListChange:NO updateList:YES postNotification:YES]; } @end TextEdit-master/English.lproj/000077500000000000000000000000001271274630500166265ustar00rootroot00000000000000TextEdit-master/English.lproj/DocumentProperties.nib/000077500000000000000000000000001271274630500232305ustar00rootroot00000000000000TextEdit-master/English.lproj/DocumentProperties.nib/designable.nib000066400000000000000000002244741271274630500260340ustar00rootroot00000000000000 1050 10A96 700 975.1 388.00 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES DocumentPropertiesPanelController FirstResponder 27 2 {{705, 574}, {333, 264}} -260571136 Document Properties NSPanel View {800, 600} {250, 206} 256 YES 268 {{5, 102}, {77, 14}} YES 67239424 71303168 Keywords: LucidaGrande 1.100000e+01 3100 6 System controlColor 3 MC42NjY2NjY2OQA 6 System controlTextColor 3 MAA 266 {{87, 100}, {233, 19}} YES -1804468671 4326400 YES 6 System textBackgroundColor 3 MQA 6 System textColor 268 {{5, 156}, {77, 14}} YES 67239424 71303168 VGl0bGU6Cg 266 {{87, 154}, {233, 19}} YES -1804468671 4326400 YES 266 {{87, 235}, {233, 19}} YES -1804468671 4326400 YES 268 {{5, 237}, {77, 14}} YES 67239424 71303168 Author: 266 {{87, 208}, {233, 19}} YES -1804468671 4326400 YES 268 {{5, 207}, {77, 17}} YES 67239424 71303168 Organization: 266 {{87, 181}, {233, 19}} YES -1804468671 4326400 YES 268 {{5, 183}, {77, 14}} YES 67239424 71303168 Copyright: 268 {{5, 75}, {77, 14}} YES 67239424 71303168 Comment: 274 {{87, 14}, {233, 78}} YES -1805517311 4325376 YES 268 {{5, 129}, {77, 14}} YES 67239424 71303168 U3ViamVjdDoKA 266 {{87, 127}, {233, 19}} YES -1804468671 4326400 YES {333, 264} {{0, 0}, {1920, 1178}} {250, 222} {800, 616} DocumentProperties YES subject author keywords comment copyright readOnly richText company title Document YES NSApplication NSApplication YES editable: selection.readOnly editable: selection.readOnly editable selection.readOnly YES YES NSRaisesForNotApplicableKeys NSValueTransformerName YES NSNegateBoolean 2 170 editable2: selection.richText editable2: selection.richText editable2 selection.richText YES YES NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys YES 2 172 editable: selection.readOnly editable: selection.readOnly editable selection.readOnly YES YES NSRaisesForNotApplicableKeys NSValueTransformerName YES NSNegateBoolean 2 174 editable2: selection.richText editable2: selection.richText editable2 selection.richText YES YES NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys YES 2 175 editable: selection.readOnly editable: selection.readOnly editable selection.readOnly YES YES NSRaisesForNotApplicableKeys NSValueTransformerName YES NSNegateBoolean 2 178 editable2: selection.richText editable2: selection.richText editable2 selection.richText YES YES NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys YES 2 180 editable: selection.richText editable: selection.richText editable selection.richText NSRaisesForNotApplicableKeys 2 182 editable2: selection.readOnly editable2: selection.readOnly editable2 selection.readOnly YES YES NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValueTransformerName YES NSNegateBoolean 2 183 editable: selection.readOnly editable: selection.readOnly editable selection.readOnly YES YES NSRaisesForNotApplicableKeys NSValueTransformerName YES NSNegateBoolean 2 186 editable2: selection.richText editable2: selection.richText editable2 selection.richText YES YES NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys YES 2 188 editable: selection.richText editable: selection.richText editable selection.richText NSRaisesForNotApplicableKeys 2 198 editable2: selection.readOnly editable2: selection.readOnly editable2 selection.readOnly YES YES NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSValueTransformerName YES NSNegateBoolean 2 200 value: selection.comment value: selection.comment value selection.comment YES YES NSAllowsEditingMultipleValuesSelection NSAlwaysPresentsApplicationModalAlerts NSConditionallySetsEditable NSConditionallySetsEnabled NSConditionallySetsHidden NSContinuouslyUpdatesValue NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValidatesImmediately YES 2 212 value: selection.keywords value: selection.keywords value selection.keywords YES YES NSAllowsEditingMultipleValuesSelection NSAlwaysPresentsApplicationModalAlerts NSConditionallySetsEditable NSConditionallySetsEnabled NSConditionallySetsHidden NSContinuouslyUpdatesValue NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValidatesImmediately YES 2 214 value: selection.subject value: selection.subject value selection.subject YES YES NSAllowsEditingMultipleValuesSelection NSAlwaysPresentsApplicationModalAlerts NSConditionallySetsEditable NSConditionallySetsEnabled NSConditionallySetsHidden NSContinuouslyUpdatesValue NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValidatesImmediately YES 2 229 initialFirstResponder 230 nextKeyView 231 nextKeyView 232 nextKeyView 233 nextKeyView 234 nextKeyView 235 nextKeyView 236 nextKeyView 237 editable: selection.readOnly editable: selection.readOnly editable selection.readOnly YES YES NSRaisesForNotApplicableKeys NSValueTransformerName YES NSNegateBoolean 2 243 editable2: selection.richText editable2: selection.richText editable2 selection.richText YES YES NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys YES 2 244 value: selection.title value: selection.title value selection.title YES YES NSAllowsEditingMultipleValuesSelection NSAlwaysPresentsApplicationModalAlerts NSConditionallySetsEditable NSConditionallySetsEnabled NSConditionallySetsHidden NSContinuouslyUpdatesValue NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValidatesImmediately YES 2 247 title 254 title 255 title 256 title 257 title 258 title 259 title 260 window 100223 contentObject: inspectedDocument contentObject: inspectedDocument contentObject inspectedDocument 2 100237 value: selection.author value: selection.author value selection.author YES YES NSAllowsEditingMultipleValuesSelection NSAlwaysPresentsApplicationModalAlerts NSConditionallySetsEditable NSConditionallySetsEnabled NSConditionallySetsHidden NSContinuouslyUpdatesValue NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValidatesImmediately YES 2 100238 value: selection.company value: selection.company value selection.company YES YES NSAllowsEditingMultipleValuesSelection NSAlwaysPresentsApplicationModalAlerts NSConditionallySetsEditable NSConditionallySetsEnabled NSConditionallySetsHidden NSContinuouslyUpdatesValue NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValidatesImmediately YES 2 100240 value: selection.copyright value: selection.copyright value selection.copyright YES YES NSAllowsEditingMultipleValuesSelection NSAlwaysPresentsApplicationModalAlerts NSConditionallySetsEditable NSConditionallySetsEnabled NSConditionallySetsHidden NSContinuouslyUpdatesValue NSMultipleValuesPlaceholder NSNoSelectionPlaceholder NSNotApplicablePlaceholder NSNullPlaceholder NSRaisesForNotApplicableKeys NSValidatesImmediately YES 2 100242 documentObjectController 100243 YES 0 YES -2 RmlsZSdzIE93bmVyA -1 First Responder 5 YES Panel 6 YES 14 YES 15 YES 16 YES 17 YES 18 YES 19 YES 20 YES 21 YES 22 YES 100 YES 101 YES 143 YES 221 YES 222 YES 63 250 Shared App 100014 100015 100016 100017 100018 100019 100020 100021 100022 100100 100101 100143 100221 100222 -3 Application YES YES -1.IBPluginDependency -2.IBPluginDependency 100.IBPluginDependency 100.ImportedFromIB2 101.CustomClassName 101.IBAttributePlaceholdersKey 101.IBPluginDependency 101.ImportedFromIB2 14.IBPluginDependency 14.ImportedFromIB2 143.IBAttributePlaceholdersKey 143.IBPluginDependency 143.ImportedFromIB2 15.IBAttributePlaceholdersKey 15.IBPluginDependency 15.ImportedFromIB2 16.IBAttributePlaceholdersKey 16.IBPluginDependency 16.ImportedFromIB2 17.IBPluginDependency 17.ImportedFromIB2 18.IBAttributePlaceholdersKey 18.IBPluginDependency 18.ImportedFromIB2 19.IBPluginDependency 19.ImportedFromIB2 20.IBAttributePlaceholdersKey 20.IBPluginDependency 20.ImportedFromIB2 21.IBPluginDependency 21.ImportedFromIB2 22.IBPluginDependency 22.ImportedFromIB2 221.IBPluginDependency 221.ImportedFromIB2 222.IBAttributePlaceholdersKey 222.IBPluginDependency 222.ImportedFromIB2 250.IBPluginDependency 250.ImportedFromIB2 5.IBEditorWindowLastContentRect 5.IBPluginDependency 5.IBWindowTemplateEditedContentRect 5.ImportedFromIB2 5.editorWindowContentRectSynchronizationRect 5.windowTemplate.hasMaxSize 5.windowTemplate.hasMinSize 5.windowTemplate.maxSize 5.windowTemplate.minSize 6.IBPluginDependency 6.ImportedFromIB2 63.IBPluginDependency 63.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin NSTokenField ToolTip ToolTip Keywords describing the document. Not applicable to plain text documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Comments. Not applicable to plain text documents. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Title of the document. Not applicable to plain text documents. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Author(s) of the document. Not applicable to plain text documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Company or organization name. Not applicable to plain text documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Copyright notice or other rights information. Not applicable to plain text documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Subject of the document. Not applicable to plain text documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{0, 887}, {333, 264}} com.apple.InterfaceBuilder.CocoaPlugin {{0, 887}, {333, 264}} {{705, 574}, {333, 264}} {800, 600} {250, 206} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES YES YES 100243 YES DocumentPropertiesPanelController NSWindowController toggleWindow: id YES YES documentObjectController inspectedDocument YES id id IBProjectSource DocumentPropertiesPanelController.h 0 ../TextEdit.xcodeproj 3 TextEdit-master/English.lproj/DocumentProperties.nib/keyedobjects.nib000066400000000000000000000405721271274630500264050ustar00rootroot00000000000000bplist00 X$versionT$topY$archiverX$objects]IB.objectdata_NSKeyedArchiveru 156<=AEow  &'()*+,-./346:?@ENOY^|}~  '(12;<EFOPYZdmnwx y{|}~     6>FO]emv   '/06?@NVWXt|  =@ADFj*vwxyz{|}~    U$null  !"#$%&'()*+,-./0VNSRootV$class]NSObjectsKeys_NSClassesValues_NSAccessibilityOidsValues]NSConnections[NSNamesKeys[NSFramework]NSClassesKeysZNSOidsKeys]NSNamesValues_NSAccessibilityConnectors]NSFontManager_NSVisibleWindows_NSObjectsValues_NSAccessibilityOidsKeysYNSNextOid\NSOidsValuestlak234[NSClassName_!DocumentPropertiesPanelController789:X$classesZ$classname:;^NSCustomObjectXNSObject_IBCocoaFramework>?@ZNS.objects78BCCD;\NSMutableSetUNSSet>FG2'HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn "&8<|}~Āǀʀ΀ЀҀր؀ڀހpqrstuv]NSDestinationXNSSourceWNSLabel! xyz{|}~_NSNextResponderWNSFrameVNSCellXNSvFlagsYNSEnabledXNSWindow[NSSuperview   x{}~ZNSSubviews[NSFrameSize uEs t_{{87, 208}, {233, 19}}u[NSCellFlags_NSBackgroundColorZNSContentsYNSSupport]NSControlView\NSCellFlags2_NSDrawsBackground[NSTextColorqA B PVNSSizeVNSNameXNSfFlags#@& \LucidaGrande78;VNSFontWNSColor\NSColorSpace[NSColorName]NSCatalogNameVSystem_textBackgroundColorWNSWhiteB178Ģ;WNSColorYtextColor̀B078Ф;_NSTextFieldCell\NSActionCellVNSCell78ե;[NSTextFieldYNSControlVNSView[NSResponderxyz{|}~  _{{87, 181}, {233, 19}}tqAB [nextKeyView78;_NSNibOutletConnector^NSNibConnectorpqrstv!# xyz{|}~ $% _{{87, 154}, {233, 19}}qA#B pqrs !'7__NSManagedProxyZNSEditable_NSObjectClassName^NSDeclaredKeys64 3(>F2 !"#$%)*+,-./01WsubjectVauthorXkeywordsWcommentYcopyrightXreadOnlyXrichTextWcompanyUtitle780112;^NSMutableArrayWNSArrayXDocument5578798;__NSManagedProxy__NSManagedProxy78;><=;_NSObjectController\NSController_NSObjectController_documentObjectControllerpqrsBv!9# xyz{|}~HIJ :; _{{87, 127}, {233, 19}}PBVqA9B pqrs[]!={_`abcdefghijklnopqrstuvwxyz{\NSWindowView_NSWindowContentMaxSize\NSScreenRect_NSFrameAutosaveName]NSWindowTitleYNSWTFlags]NSWindowClass_NSWindowContentMinSize\NSWindowRectYNSMaxSize_NSWindowBacking_NSWindowStyleMaskYNSMinSize[NSViewClass zCvy?x@D>xwA_{{705, 574}, {333, 264}}_Document PropertiesWNSPanelYNS.stringBTView78;_NSMutableStringXNSStringZ{800, 600}Z{250, 206}>F2utBFOU#Y\ `dhlo9xyz{|}~ GH _{{5, 102}, {77, 14}}JIF@MYKeywords:LK\controlColorK0.66666669N_controlTextColorxyz{|}2~_NSOriginalClassName TRQS P \NSTokenField_{{87, 100}, {233, 19}}qAOB 78ע;^NSClassSwapperxyz{|}~ VW _{{5, 156}, {77, 14}}JXU@MWTitle: xyz{|}~ Z[ _{{87, 235}, {233, 19}}qAYB xyz{|}~ ]^ _{{5, 237}, {77, 14}} J_\@MWAuthor:xyz{|}~ ab _{{5, 207}, {77, 17}}"%Jc`@M]Organization:xyz{|}~+,- ef _{{5, 183}, {77, 14}}369Jgd@MZCopyright:xyz{|}~?@A ij _{{5, 75}, {77, 14}}GJMJkh@MXComment:xyz{|}~STU mn _{{87, 14}, {233, 78}}[aalB xyz{|}~ghi pq _{{5, 129}, {77, 14}}oruJro@MYSubject: Z{333, 264}78zף;_{{0, 0}, {1920, 1178}}Z{250, 222}Z{800, 616}_DocumentProperties78;_NSWindowTemplateVwindowpqrsv!lO pqrsBv!O9 pqrsv!Yl pqrs[!Y=_initialFirstResponderpqrsuv! Y pqr txYNSKeyPathYNSBindingYNSOptions_NSNibBindingConnectorVersion'_editable: selection.readOnlyXeditable_selection.readOnly>WNS.keys_NSRaisesForNotApplicableKeys_NSValueTransformerName_NSNegateBoolean78;\NSDictionary78;_NSNibBindingConnector^NSNibConnector_NSNibBindingConnectorpqr Rtx_NSPreviousConnector'_editable2: selection.richTextYeditable2_selection.richText>րՀ׀_NSNullPlaceholder_NSNotApplicablePlaceholder_NSNoSelectionPlaceholder_NSMultipleValuesPlaceholderpqr x'l_value: selection.commentUvalue_selection.comment>_NSConditionallySetsEnabled_NSConditionallySetsHidden_NSValidatesImmediately_&NSAlwaysPresentsApplicationModalAlerts_NSContinuouslyUpdatesValue_&NSAllowsEditingMultipleValuesSelection_NSConditionallySetsEditablepqr x'#_value: selection.title_selection.title>)pqr =x'O>@Cpqr VNx'O>QWՀ׀pqr dx'#>gjpqr Xux'#>x~Հ׀pqr x'_ contentObject: inspectedDocument]contentObject_inspectedDocumentpqr x'O_value: selection.keywords_selection.keywords>pqr Bx'9>pqr \Bx'9>ՀՀ׀pqr ux' _value: selection.company_selection.company>􀋬pqr Bx'€9_value: selection.subject_selection.subject> pqr -.x'Yŀ_editable: selection.richText>24pqr `=>x'ĀYȀ_editable2: selection.readOnly>BHՀ׀pqr QtTUx'̀ˀ_value: selection.copyright_selection.copyright>Zgpqr -{x'lŀ>~pqr c=x'΀lȀ>Հ׀pqr x'ԀYӀ_value: selection.author_selection.author>pqr ux' >΀pqr fux'ր >​Հ׀pXNSMarkerVNSFile݀#܀_NSToolTipHelpKey_>Title of the document. Not applicable to plain text documents.78;_NSIBHelpConnector_NSIBHelpConnectorp݀Y߀_BAuthor(s) of the document. Not applicable to plain text documents.pu݀ _ECompany or organization name. Not applicable to plain text documents.pt݀_UCopyright notice or other rights information. Not applicable to plain text documents.p ݀O_IKeywords describing the document. Not applicable to plain text documents.p݀l_1Comments. Not applicable to plain text documents.pB݀9_@Subject of the document. Not applicable to plain text documents.>!u[, IhtT@7B; OW=f 'UY;Hlq^Fbdnj`%\S[#h9o23?]NSApplication23?78E22;>H!t[uB  Ud= 9F o\ ` lh # OY  >l"Bu[ ,IhTt@7;9 OW=' fUY;lHqnFdb^j`%\S[#ho>"     \Text Field-5ZText Field_Text Field Cell-4[Token Field_Text Field Cell (Title: )UPanel_Object Controller\Content View_Text Field Cell (Copyright:)_Static Text (Title: )\Text Field-1_Text Field Cell_Text Field Cell-6\Text Field-2_Text Field Cell (Keywords:)_Text Field Cell (Subject: )_Text Field Cell-3_Static Text (Keywords:)_Static Text (Copyright:)\Text Field-3_Text Field Cell (Organization:)_Text Field Cell (Author:)_Text Field Cell (Comment:)_Static Text (Organization:)_Text Field Cell-5_Static Text (Author:)_Text Field Cell-1_Text Field Cell-2[Application\File's OwnerZShared App\Text Field-4_Static Text (Comment:)_Static Text (Subject: )>؀O>܀ǀP>INnu_Kb^, chRdtVkOI\YLm7;XUHPiQ][[lZhITSTgfMe@a`WJBj} O8Wʀf'UY΀HqЀ~"`\,I-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`e?}~d/>F2ǁbefghijpqŕdU#c_AXTitleUIElement78ң;_NSNibAXRelationshipConnector^NSNibConnector_NSNibAXRelationshipConnectorpqrúd` cpqrt́ddcpqŕd\YcpqŕdFOcpqrB́do9cpqŕdhlc>Ɓhjegfbi>mnopqrs78 ;^NSIBObjectData"'1:?DRTfTZ #.<Xfy(1:EJYbu~  !#%')+-/13579;=?ACEGIKMOQSUWYjx  (3?ACEHJLNg   )07@BKMP]fkr    $ & ( * , 6 C E H Q Z l y  , 5 7 9 ; = ? D E G S \ c z     " $ ) * , = ? A C E Z l w     & - < D M R T ] b t  " $ & ( * - . 0 2 K p y { }   ,:DRkx%/16?FXalw$)+-/138:DY[]_an{}  2W`bdfhjopr{ 79;=?BCEG` 'HJLNPSTVXo"$&(*,13>_acegjkmo3<>@BDFKLNoqsuwz{} !6?DW^oqsuw(2QSUWY[]_~,5<Tc{!#%')468:<>Ro"$=?ACEGIKMOQSUnprtvxz|~Geg "$&(*,.02SUWY[]_anpuwy~,.357<>@egikmoqsu=?ACEGIKg|)+0249;=bdfhjlnpr   1 3 5 7 9 ; = ? A C E G I b d f h j l n p r t v x z !!!!!! ! !!!!!!!1!3!5!7!9!;!=!?!A!C!E!G!I!j!l!n!p!r!t!v!x!!!!!!!!!!!!!!!!"""""!"#"%"'")"4"6"8":"<">"_"a"c"e"g"i"k"m"""""""""""""""""""""##### # # ###2#4#6#8#:#<#>#@#M#O#R#T#W#Y#~################################$$+$8$:$S$U$W$Y$[$]$_$a$c$e$g$i$k$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%!%.%0%;%=%?%A%C%E%P%R%T%V%X%Z%k%t%{%}%%%%%%%%& && &"&$&&&k&|&~&&&&&&&&&'='N'P'R'T'V'''''''((((((K(T(V(((((((((((((((((((((((((((((((((((((())))))))c)e)g)i)k)m)o)q)s)u)w)y){)})))))))))))))))))))))))))))***** * * **********!*#*%*'*)*+*-*/*1*3*5*7*9*;*D*F*************************************+++9+?+S+`+++++++,,',A,\,i,,,,,--"-6-B-O-Z-g------------.Z.\.^.`.b.d.f.h.j.l.n.p.r.t.v.x.z.|.~.........................................................///////////////////////////////////////0000 0 0000000"0%0(0+0.0104070:0=0@0C0F0I0L0O0R0U0X0[0^0a0d0g0i0n0p0u0w0y0{000000000000000000000000000000000000000011 1 1 111111"1$1&1(1-1214161;1@1B1D1I1K1P1R1[1]1l1o1r1u1x1{1~111111111112 22 2"2$2'282;2=2?2B2S2V2X2Z2]2n2q2s2u2x22222222222222222222222223333 3 33333333(3-3<TextEdit-master/English.lproj/Edit.nib/000077500000000000000000000000001271274630500202625ustar00rootroot00000000000000TextEdit-master/English.lproj/Edit.nib/designable.nib000066400000000000000000007072551271274630500230710ustar00rootroot00000000000000 1050 10A231 708 998 406.00 com.apple.InterfaceBuilder.CocoaPlugin 708 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES NSApplication FirstResponder NSApplication Edit YES TextEdit 1048576 2147483647 NSImage NSMenuCheckmark NSImage NSMenuMixedState submenuAction: TextEdit YES About TextEdit 1048576 2147483647 YES YES 1048576 2147483647 UHJlZmVyZW5jZXPigKY , 1048576 2147483647 YES YES 1048576 2147483647 Services 1048576 2147483647 submenuAction: Services YES _NSServicesMenu YES YES 1048576 2147483647 Hide TextEdit h 1048576 2147483647 Hide Others h 1572864 2147483647 Show All 1048576 2147483647 YES YES 1048576 2147483647 Quit TextEdit q 1048576 2147483647 _NSAppleMenu File 1048576 2147483647 submenuAction: File YES New n 1048576 2147483647 T3BlbuKApg o 1048576 2147483647 Open Recent 1048576 2147483647 submenuAction: Open Recent YES Clear Menu 1048576 2147483647 _NSRecentDocumentsMenu YES YES 1048576 2147483647 Close w 1048576 2147483647 Save s 1048576 2147483647 U2F2ZSBBc+KApg S 1048576 2147483647 U2F2ZSBBcyBQREbigKY 2147483647 Save All 1048576 2147483647 Revert to Saved 2147483647 YES YES 1048576 2147483647 QXR0YWNoIEZpbGVz4oCmA A 1048576 2147483647 YES YES 1048576 2147483647 Show Properties p 1572864 2147483647 YES YES 1048576 2147483647 UGFnZSBTZXR1cOKApg P 1048576 2147483647 UHJpbnTigKY p 1048576 2147483647 Edit 1048576 2147483647 submenuAction: Edit YES Undo z 1048576 2147483647 Redo Z 1048576 2147483647 YES YES 1048576 2147483647 Cut x 1048576 2147483647 Copy c 1048576 2147483647 Paste v 1048576 2147483647 Paste and Match Style V 1572864 2147483647 Delete 1048576 2147483647 Complete Gw 524288 2147483647 Select All a 1048576 2147483647 YES YES 1048576 2147483647 Insert 1048576 2147483647 submenuAction: Insert YES Line Break 1048576 2147483647 Paragraph Break 2147483647 Page Break 1048576 2147483647 TGlua+KApg k 1048576 2147483647 YES YES 1048576 2147483647 Find 1048576 2147483647 submenuAction: Find YES RmluZOKApg f 1048576 2147483647 1 Find Next g 1048576 2147483647 2 Find Previous G 1048576 2147483647 3 Use Selection for Find e 1048576 2147483647 7 Jump to Selection j 1048576 2147483647 Select Line... l 1048576 2147483647 Spelling and Grammar 1048576 2147483647 submenuAction: Spelling and Grammar YES Show Spelling and Grammar : 1048576 2147483647 Check Document Now ; 1048576 2147483647 YES YES 2147483647 Check Spelling While Typing 1048576 2147483647 Check Grammar With Spelling 1048576 2147483647 Correct Spelling Automatically 1048576 2147483647 Substitutions 1048576 2147483647 submenuAction: Substitutions YES Show Substitutions 2147483647 YES YES 2147483647 Smart Copy/Paste 2147483647 Smart Quotes 2147483647 Smart Dashes 2147483647 Smart Links 1048576 2147483647 Data Detectors 1048576 2147483647 Text Replacement 1048576 2147483647 Transformations 2147483647 submenuAction: Transformations YES Make Upper Case 2147483647 Make Lower Case 2147483647 Capitalize 2147483647 Speech 1048576 2147483647 submenuAction: Speech YES Start Speaking 1048576 2147483647 Stop Speaking 1048576 2147483647 Format 1048576 2147483647 submenuAction: Format YES Font 1048576 2147483647 submenuAction: Font YES Show Fonts t 1048576 2147483647 Bold b 1048576 2147483647 2 Italic i 1048576 2147483647 1 Underline u 1048576 2147483647 Outline 2147483647 Styles... 2147483647 YES YES 1048576 2147483647 Bigger + 1048576 2147483647 3 Smaller - 1048576 2147483647 4 YES YES 1048576 2147483647 Kern 1048576 2147483647 submenuAction: Kern YES Use Default 1048576 2147483647 Use None 1048576 2147483647 Tighten [ 1572864 2147483647 Loosen ] 1572864 2147483647 Ligature 1048576 2147483647 submenuAction: Ligature YES Use Default 1048576 2147483647 Use None 1048576 2147483647 Use All 1048576 2147483647 Baseline 1048576 2147483647 submenuAction: Baseline YES Use Default 1048576 2147483647 Superscript 1048576 2147483647 Subscript 1048576 2147483647 Raise 2147483647 Lower 1048576 2147483647 Character Shape 1048576 2147483647 submenuAction: Character Shape YES Traditional Form 1048576 2147483647 YES YES 1048576 2147483647 Show Colors C 1048576 2147483647 YES YES 1048576 2147483647 Copy Style c 1572864 2147483647 Paste Style v 1572864 2147483647 _NSFontMenu Text 1048576 2147483647 submenuAction: Text YES Align Left { 1048576 2147483647 Center | 1048576 2147483647 Justify 1048576 2147483647 Align Right } 1048576 2147483647 YES YES 1048576 2147483647 Writing Direction 2147483647 submenuAction: Writing Direction YES YES Paragraph 2147483647 CURlZmF1bHQ 2147483647 CUxlZnQgdG8gUmlnaHQ 2147483647 CVJpZ2h0IHRvIExlZnQ 2147483647 YES YES 2147483647 YES Selection 2147483647 CURlZmF1bHQ 2147483647 CUxlZnQgdG8gUmlnaHQ 2147483647 CVJpZ2h0IHRvIExlZnQ 2147483647 YES YES 1048576 2147483647 Show Ruler r 1048576 2147483647 Copy Ruler c 1310720 2147483647 Paste Ruler v 1310720 2147483647 YES YES 1048576 2147483647 Spacing... 2147483647 YES YES 1048576 2147483647 Make Rich Text T 1048576 2147483647 Prevent Editing 1048576 2147483647 Wrap to Page W 1048576 2147483647 Allow Hyphenation 2147483647 YES YES 1048576 2147483647 TGlzdOKApg 2147483647 VGFibGXigKY 2147483647 Window 1048576 2147483647 submenuAction: Window YES Minimize m 1048576 2147483647 Zoom 1048576 2147483647 YES YES 1048576 2147483647 Bring All to Front 1048576 2147483647 _NSWindowsMenu Help 1048576 2147483647 submenuAction: Help YES TextEdit Help ? 1048576 2147483647 _NSMainMenu NSFontManager Controller Preferences DocumentController LinePanelController DocumentPropertiesPanelController YES New Document 1048576 2147483647 YES selectAll: 131 paste: 132 copy: 133 cut: 134 addFontTrait: 175 addFontTrait: 176 underline: 177 pasteFont: 178 copyFont: 179 orderFrontFontPanel: 183 toggleRich: 184 toggleRuler: 185 pasteRuler: 186 copyRuler: 187 alignRight: 188 alignCenter: 189 alignLeft: 190 useStandardKerning: 257 loosenKerning: 258 useStandardLigatures: 259 turnOffLigatures: 260 useAllLigatures: 261 turnOffKerning: 263 unscript: 264 raiseBaseline: 265 lowerBaseline: 266 tightenKerning: 267 delegate 272 orderFrontColorPanel: 373 superscript: 377 subscript: 378 togglePageBreaks: 382 printDocument: 390 performClose: 420 toggleHyphenation: 423 alignJustified: 425 undo: 454 redo: 455 clearRecentDocuments: 462 performZoom: 481 arrangeInFront: 482 performMiniaturize: 484 showGuessPanel: 495 checkSpelling: 497 toggleContinuousSpellChecking: 499 terminate: 509 hide: 510 hideOtherApplications: 516 unhideAllApplications: 518 showHelp: 527 orderFrontStandardAboutPanel: 528 toggleTraditionalCharacterShape: 532 toggleReadOnly: 536 startSpeaking: 542 modifyFont: 548 modifyFont: 549 stopSpeaking: 552 centerSelectionInVisibleArea: 570 performFindPanelAction: 571 performFindPanelAction: 572 performFindPanelAction: 573 performFindPanelAction: 574 delete: 576 complete: 577 outline: 580 orderFrontStylesPanel: 583 pasteAsPlainText: 586 insertLineBreak: 602 insertNewline: 603 insertContainerBreak: 604 orderFrontLinkPanel: 614 orderFrontSpacingPanel: 615 newDocument: 616 openDocument: 617 saveAllDocuments: 618 saveDocument: 619 saveDocumentAs: 620 revertDocumentToSaved: 621 runPageLayout: 623 toggleGrammarChecking: 628 toggleSmartInsertDelete: 639 toggleAutomaticQuoteSubstitution: 640 toggleAutomaticLinkDetection: 641 showWindow: 644 toggleWindow: 646 newDocument: 649 dockMenu 650 showWindow: 652 toggleAutomaticDashSubstitution: 659 toggleAutomaticTextReplacement: 660 toggleAutomaticSpellingCorrection: 663 capitalizeWord: 666 lowercaseWord: 667 uppercaseWord: 668 orderFrontSubstitutionsPanel: 673 saveDocumentAsPDFTo: 675 orderFrontListPanel: 757 orderFrontTablePanel: 758 chooseAndAttachFiles: 761 toggleAutomaticDataDetection: 783 makeBaseWritingDirectionNatural: 800 makeBaseWritingDirectionLeftToRight: 801 makeBaseWritingDirectionRightToLeft: 802 makeTextWritingDirectionNatural: 803 makeTextWritingDirectionLeftToRight: 804 makeTextWritingDirectionRightToLeft: 805 YES 0 -2 RmlsZSdzIE93bmVyA -1 First Responder -3 Application 4 YES MainMenu 96 YES 119 YES 101 108 112 120 124 310 YES 317 YES 311 312 314 315 316 643 410 451 452 453 493 YES 491 YES 494 496 498 626 537 YES 538 YES 539 541 575 584 599 YES 598 YES 597 600 601 606 629 YES 630 YES 631 632 633 150 YES 156 YES 158 YES 151 YES 155 157 164 167 169 171 424 550 594 605 159 YES 165 YES 152 154 161 163 168 172 239 YES 241 YES 242 255 256 375 376 243 YES 246 YES 244 253 254 247 YES 250 YES 248 251 252 262 372 529 YES 530 YES 531 543 544 545 546 547 554 578 581 162 381 422 534 551 274 YES 279 YES 276 277 278 281 283 284 399 404 406 419 433 459 YES 460 YES 461 587 588 474 YES 475 YES 476 477 478 479 511 YES 512 YES 25 501 504 YES 503 505 508 513 514 515 517 519 553 524 YES 526 YES 525 67 Font Manager 269 Controller 393 Preferences 622 DocumentController 642 LinePanelController 645 DocumentPropertiesPanelController 647 YES DockMenu 648 654 YES 655 YES 656 657 658 661 662 664 665 669 670 674 613 676 677 683 678 759 782 785 786 YES 787 YES 788 789 790 791 792 793 797 798 799 YES YES -3.ImportedFromIB2 101.IBPluginDependency 101.ImportedFromIB2 108.IBPluginDependency 108.ImportedFromIB2 112.IBPluginDependency 112.ImportedFromIB2 119.IBEditorWindowLastContentRect 119.IBPluginDependency 119.ImportedFromIB2 120.IBPluginDependency 120.ImportedFromIB2 124.IBPluginDependency 124.ImportedFromIB2 150.IBPluginDependency 150.ImportedFromIB2 151.IBEditorWindowLastContentRect 151.IBPluginDependency 151.ImportedFromIB2 152.IBPluginDependency 152.ImportedFromIB2 154.IBPluginDependency 154.ImportedFromIB2 155.IBPluginDependency 155.ImportedFromIB2 156.IBEditorWindowLastContentRect 156.IBPluginDependency 156.ImportedFromIB2 157.IBPluginDependency 157.ImportedFromIB2 158.IBPluginDependency 158.ImportedFromIB2 159.IBPluginDependency 159.ImportedFromIB2 161.IBPluginDependency 161.ImportedFromIB2 162.IBPluginDependency 162.ImportedFromIB2 163.IBPluginDependency 163.ImportedFromIB2 164.IBPluginDependency 164.ImportedFromIB2 165.IBEditorWindowLastContentRect 165.IBPluginDependency 165.ImportedFromIB2 167.IBPluginDependency 167.ImportedFromIB2 168.IBPluginDependency 168.ImportedFromIB2 169.IBPluginDependency 169.ImportedFromIB2 171.IBPluginDependency 171.ImportedFromIB2 172.IBPluginDependency 172.ImportedFromIB2 239.IBPluginDependency 239.ImportedFromIB2 241.IBEditorWindowLastContentRect 241.IBPluginDependency 241.ImportedFromIB2 242.IBPluginDependency 242.ImportedFromIB2 243.IBPluginDependency 243.ImportedFromIB2 244.IBPluginDependency 244.ImportedFromIB2 246.IBEditorWindowLastContentRect 246.IBPluginDependency 246.ImportedFromIB2 247.IBPluginDependency 247.ImportedFromIB2 248.IBPluginDependency 248.ImportedFromIB2 25.IBPluginDependency 25.ImportedFromIB2 250.IBEditorWindowLastContentRect 250.IBPluginDependency 250.ImportedFromIB2 251.IBPluginDependency 251.ImportedFromIB2 252.IBPluginDependency 252.ImportedFromIB2 253.IBPluginDependency 253.ImportedFromIB2 254.IBPluginDependency 254.ImportedFromIB2 255.IBPluginDependency 255.ImportedFromIB2 256.IBPluginDependency 256.ImportedFromIB2 262.IBPluginDependency 262.ImportedFromIB2 269.ImportedFromIB2 274.IBPluginDependency 274.ImportedFromIB2 276.IBPluginDependency 276.ImportedFromIB2 277.IBPluginDependency 277.ImportedFromIB2 278.IBPluginDependency 278.ImportedFromIB2 279.IBEditorWindowLastContentRect 279.IBPluginDependency 279.ImportedFromIB2 281.IBPluginDependency 281.ImportedFromIB2 283.IBPluginDependency 283.ImportedFromIB2 284.IBPluginDependency 284.ImportedFromIB2 310.IBPluginDependency 310.ImportedFromIB2 311.IBPluginDependency 311.ImportedFromIB2 312.IBPluginDependency 312.ImportedFromIB2 314.IBPluginDependency 314.ImportedFromIB2 315.IBPluginDependency 315.ImportedFromIB2 316.IBPluginDependency 316.ImportedFromIB2 317.IBPluginDependency 317.ImportedFromIB2 372.IBPluginDependency 372.ImportedFromIB2 375.IBPluginDependency 375.ImportedFromIB2 376.IBPluginDependency 376.ImportedFromIB2 381.IBPluginDependency 381.ImportedFromIB2 393.ImportedFromIB2 399.IBPluginDependency 399.ImportedFromIB2 4.IBEditorWindowLastContentRect 4.IBPluginDependency 4.ImportedFromIB2 404.IBPluginDependency 404.ImportedFromIB2 406.IBPluginDependency 406.ImportedFromIB2 410.IBPluginDependency 410.ImportedFromIB2 419.IBPluginDependency 419.ImportedFromIB2 422.IBPluginDependency 422.ImportedFromIB2 424.IBPluginDependency 424.ImportedFromIB2 433.IBPluginDependency 433.ImportedFromIB2 451.IBPluginDependency 451.ImportedFromIB2 452.IBPluginDependency 452.ImportedFromIB2 453.IBPluginDependency 453.ImportedFromIB2 459.IBPluginDependency 459.ImportedFromIB2 460.IBPluginDependency 460.ImportedFromIB2 461.IBPluginDependency 461.ImportedFromIB2 474.IBPluginDependency 474.ImportedFromIB2 475.IBEditorWindowLastContentRect 475.IBPluginDependency 475.ImportedFromIB2 476.IBPluginDependency 476.ImportedFromIB2 477.IBPluginDependency 477.ImportedFromIB2 478.IBPluginDependency 478.ImportedFromIB2 479.IBPluginDependency 479.ImportedFromIB2 491.IBEditorWindowLastContentRect 491.IBPluginDependency 491.ImportedFromIB2 493.IBPluginDependency 493.ImportedFromIB2 494.IBPluginDependency 494.ImportedFromIB2 496.IBPluginDependency 496.ImportedFromIB2 498.IBPluginDependency 498.ImportedFromIB2 501.IBPluginDependency 501.ImportedFromIB2 503.IBPluginDependency 503.ImportedFromIB2 504.IBPluginDependency 504.ImportedFromIB2 505.IBPluginDependency 505.ImportedFromIB2 508.IBPluginDependency 508.ImportedFromIB2 511.IBPluginDependency 511.ImportedFromIB2 512.IBEditorWindowLastContentRect 512.IBPluginDependency 512.ImportedFromIB2 513.IBPluginDependency 513.ImportedFromIB2 514.IBPluginDependency 514.ImportedFromIB2 515.IBPluginDependency 515.ImportedFromIB2 517.IBPluginDependency 517.ImportedFromIB2 519.IBPluginDependency 519.ImportedFromIB2 524.IBPluginDependency 524.ImportedFromIB2 525.IBPluginDependency 525.ImportedFromIB2 526.IBPluginDependency 526.ImportedFromIB2 529.IBPluginDependency 529.ImportedFromIB2 530.IBEditorWindowLastContentRect 530.IBPluginDependency 530.ImportedFromIB2 531.IBPluginDependency 531.ImportedFromIB2 534.IBPluginDependency 534.ImportedFromIB2 537.IBPluginDependency 537.ImportedFromIB2 538.IBEditorWindowLastContentRect 538.IBPluginDependency 538.ImportedFromIB2 539.IBPluginDependency 539.ImportedFromIB2 541.IBPluginDependency 541.ImportedFromIB2 543.IBPluginDependency 543.ImportedFromIB2 544.IBPluginDependency 544.ImportedFromIB2 545.IBPluginDependency 545.ImportedFromIB2 546.IBPluginDependency 546.ImportedFromIB2 547.IBPluginDependency 547.ImportedFromIB2 550.IBPluginDependency 550.ImportedFromIB2 551.IBPluginDependency 551.ImportedFromIB2 553.IBPluginDependency 553.ImportedFromIB2 554.IBPluginDependency 554.ImportedFromIB2 575.IBPluginDependency 575.ImportedFromIB2 578.IBPluginDependency 578.ImportedFromIB2 581.IBPluginDependency 581.ImportedFromIB2 584.IBPluginDependency 584.ImportedFromIB2 587.IBPluginDependency 587.ImportedFromIB2 588.IBPluginDependency 588.ImportedFromIB2 594.IBPluginDependency 594.ImportedFromIB2 597.IBPluginDependency 597.ImportedFromIB2 598.IBEditorWindowLastContentRect 598.IBPluginDependency 598.ImportedFromIB2 599.IBPluginDependency 599.ImportedFromIB2 600.IBPluginDependency 600.ImportedFromIB2 601.IBPluginDependency 601.ImportedFromIB2 605.IBPluginDependency 605.ImportedFromIB2 606.IBPluginDependency 606.ImportedFromIB2 613.IBPluginDependency 613.ImportedFromIB2 622.ImportedFromIB2 626.IBPluginDependency 626.ImportedFromIB2 629.IBPluginDependency 629.ImportedFromIB2 630.IBEditorWindowLastContentRect 630.IBPluginDependency 630.ImportedFromIB2 631.IBPluginDependency 631.ImportedFromIB2 632.IBPluginDependency 632.ImportedFromIB2 633.IBPluginDependency 633.ImportedFromIB2 642.ImportedFromIB2 643.IBPluginDependency 643.ImportedFromIB2 645.ImportedFromIB2 647.IBEditorWindowLastContentRect 647.IBPluginDependency 647.ImportedFromIB2 648.IBPluginDependency 648.ImportedFromIB2 654.IBPluginDependency 655.IBEditorWindowLastContentRect 655.IBPluginDependency 656.IBPluginDependency 657.IBPluginDependency 657.ImportedFromIB2 658.IBPluginDependency 658.ImportedFromIB2 661.IBPluginDependency 662.IBPluginDependency 662.ImportedFromIB2 664.IBPluginDependency 665.IBPluginDependency 669.IBPluginDependency 67.ImportedFromIB2 670.IBPluginDependency 674.IBPluginDependency 674.ImportedFromIB2 676.IBPluginDependency 676.ImportedFromIB2 677.IBPluginDependency 677.ImportedFromIB2 678.IBPluginDependency 678.ImportedFromIB2 683.IBPluginDependency 683.ImportedFromIB2 759.IBPluginDependency 759.ImportedFromIB2 782.IBPluginDependency 782.ImportedFromIB2 785.IBPluginDependency 785.ImportedFromIB2 786.IBPluginDependency 787.IBEditorWindowLastContentRect 787.IBPluginDependency 788.IBPluginDependency 789.IBPluginDependency 790.IBPluginDependency 791.IBPluginDependency 792.IBPluginDependency 793.IBPluginDependency 797.IBPluginDependency 798.IBPluginDependency 799.IBPluginDependency 96.IBPluginDependency 96.ImportedFromIB2 YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{642, 573}, {259, 353}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{905, 693}, {204, 213}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{686, 743}, {219, 183}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{540, 723}, {202, 343}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{742, 743}, {145, 103}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{742, 803}, {145, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{742, 803}, {163, 83}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{600, 623}, {200, 303}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{510, 926}, {374, 20}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{387, 993}, {194, 73}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{500, 728}, {278, 113}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{157, 883}, {192, 183}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{742, 803}, {179, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{901, 553}, {164, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{536, 803}, {177, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{901, 483}, {196, 153}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{383, 983}, {169, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{500, 738}, {173, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{1109, 643}, {164, 173}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES 805 YES Controller NSObject IBProjectSource Controller.h Controller NSObject YES YES createNew: open: saveAll: YES id id id IBUserSource Document NSDocument YES YES saveDocumentAsPDFTo: togglePageBreaks: toggleReadOnly: YES id id id IBProjectSource Document.h Document NSDocument IBUserSource DocumentController NSDocumentController IBProjectSource DocumentController.h DocumentController NSDocumentController IBUserSource DocumentPropertiesPanelController NSWindowController toggleWindow: id YES YES documentObjectController inspectedDocument YES id id IBProjectSource DocumentPropertiesPanelController.h DocumentPropertiesPanelController NSWindowController keywordsField id IBUserSource DocumentWindowController NSWindowController chooseAndAttachFiles: id scrollView ScalingScrollView IBProjectSource DocumentWindowController.h EncodingManager NSObject YES YES clearAll: encodingListChanged: revertToDefault: selectAll: showPanel: YES id id id id id encodingMatrix NSMatrix IBProjectSource EncodingManager.h EncodingManager NSObject IBUserSource FirstResponder NSObject YES YES capitalizeWord: close: doPageLayout: insertContainerBreak: insertLineBreak: insertNewline: insertParagraphSeparator: insertTab: lowercaseWord: orderFrontLinkPanel: orderFrontListPanel: orderFrontSpacingPanel: orderFrontSubstitutionsPanel: orderFrontTablePanel: revert: save: saveAs: saveTo: toggleAutomaticDashSubstitution: toggleAutomaticSpellingCorrection: toggleAutomaticTextReplacement: toggleBaseWritingDirection: toggleHyphenation: togglePageBreaks: toggleReadOnly: toggleRich: toggleTraditionalCharacterShape: uppercaseWord: YES id id id id id id id id id id id id id id id id id id id id id id id id id id id id IBUserSource LinePanelController NSWindowController YES YES lineFieldChanged: selectClicked: YES id id lineField NSTextField IBProjectSource LinePanelController.h LinePanelController NSWindowController IBUserSource NSApplication NSResponder unhideOtherApplications: id IBUserSource NSFontManager NSObject IBUserSource NSResponder NSObject YES YES makeBaseWritingDirectionLeftToRight: makeBaseWritingDirectionNatural: makeBaseWritingDirectionRightToLeft: makeTextWritingDirectionLeftToRight: makeTextWritingDirectionNatural: makeTextWritingDirectionRightToLeft: YES id id id id id id IBUserSource Preferences NSWindowController YES YES changePlainTextFont: changeRichTextFont: revertToDefault: YES id id id IBProjectSource Preferences.h Preferences NSWindowController YES YES miscChanged: ok: revert: showPanel: YES id id id id YES YES deleteBackupMatrix plainTextEncodingPopup plainTextFontNameField richTextFontNameField richTextMatrix saveFilesWritableButton showPageBreaksButton tabWidthField windowHeightField windowWidthField YES id id NSTextField NSTextField id id id id id id IBUserSource ScalingScrollView NSScrollView scalePopUpAction: id IBProjectSource ScalingScrollView.h YES NSApplication NSResponder IBFrameworkSource AppKit.framework/Headers/NSApplication.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSApplicationScripting.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSColorPanel.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSHelpManager.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSPageLayout.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSUserInterfaceItemSearching.h NSBrowser NSControl IBFrameworkSource AppKit.framework/Headers/NSBrowser.h NSControl NSView IBFrameworkSource AppKit.framework/Headers/NSControl.h NSDocument NSObject YES YES printDocument: revertDocumentToSaved: runPageLayout: saveDocument: saveDocumentAs: saveDocumentTo: YES id id id id id id IBFrameworkSource AppKit.framework/Headers/NSDocument.h NSDocument IBFrameworkSource AppKit.framework/Headers/NSDocumentScripting.h NSDocumentController NSObject YES YES clearRecentDocuments: newDocument: openDocument: saveAllDocuments: YES id id id id IBFrameworkSource AppKit.framework/Headers/NSDocumentController.h NSFontManager NSObject IBFrameworkSource AppKit.framework/Headers/NSFontManager.h NSFormatter NSObject IBFrameworkSource Foundation.framework/Headers/NSFormatter.h NSMatrix NSControl IBFrameworkSource AppKit.framework/Headers/NSMatrix.h NSMenu NSObject IBFrameworkSource AppKit.framework/Headers/NSMenu.h NSMenuItem NSObject IBFrameworkSource AppKit.framework/Headers/NSMenuItem.h NSMovieView NSView IBFrameworkSource AppKit.framework/Headers/NSMovieView.h NSObject IBFrameworkSource AppKit.framework/Headers/NSAccessibility.h NSObject NSObject NSObject NSObject NSObject IBFrameworkSource AppKit.framework/Headers/NSDictionaryController.h NSObject IBFrameworkSource AppKit.framework/Headers/NSDragging.h NSObject NSObject IBFrameworkSource AppKit.framework/Headers/NSFontPanel.h NSObject IBFrameworkSource AppKit.framework/Headers/NSKeyValueBinding.h NSObject NSObject IBFrameworkSource AppKit.framework/Headers/NSNibLoading.h NSObject IBFrameworkSource AppKit.framework/Headers/NSOutlineView.h NSObject IBFrameworkSource AppKit.framework/Headers/NSPasteboard.h NSObject IBFrameworkSource AppKit.framework/Headers/NSSavePanel.h NSObject IBFrameworkSource AppKit.framework/Headers/NSTableView.h NSObject IBFrameworkSource AppKit.framework/Headers/NSToolbarItem.h NSObject IBFrameworkSource AppKit.framework/Headers/NSView.h NSObject IBFrameworkSource Foundation.framework/Headers/NSArchiver.h NSObject IBFrameworkSource Foundation.framework/Headers/NSClassDescription.h NSObject IBFrameworkSource Foundation.framework/Headers/NSError.h NSObject IBFrameworkSource Foundation.framework/Headers/NSFileManager.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyValueCoding.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyValueObserving.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyedArchiver.h NSObject IBFrameworkSource Foundation.framework/Headers/NSObject.h NSObject IBFrameworkSource Foundation.framework/Headers/NSObjectScripting.h NSObject IBFrameworkSource Foundation.framework/Headers/NSPortCoder.h NSObject IBFrameworkSource Foundation.framework/Headers/NSRunLoop.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptClassDescription.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptKeyValueCoding.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptObjectSpecifiers.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptWhoseTests.h NSObject IBFrameworkSource Foundation.framework/Headers/NSThread.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURL.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURLConnection.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURLDownload.h NSResponder IBFrameworkSource AppKit.framework/Headers/NSInterfaceStyle.h NSResponder NSObject IBFrameworkSource AppKit.framework/Headers/NSResponder.h NSScrollView NSView IBFrameworkSource AppKit.framework/Headers/NSScrollView.h NSTableView NSControl NSText NSView IBFrameworkSource AppKit.framework/Headers/NSText.h NSTextField NSControl IBFrameworkSource AppKit.framework/Headers/NSTextField.h NSTextView NSText IBFrameworkSource AppKit.framework/Headers/NSTextView.h NSView IBFrameworkSource AppKit.framework/Headers/NSClipView.h NSView NSView IBFrameworkSource AppKit.framework/Headers/NSRulerView.h NSView NSResponder NSWindow IBFrameworkSource AppKit.framework/Headers/NSDrawer.h NSWindow NSResponder IBFrameworkSource AppKit.framework/Headers/NSWindow.h NSWindow IBFrameworkSource AppKit.framework/Headers/NSWindowScripting.h NSWindowController NSResponder showWindow: id IBFrameworkSource AppKit.framework/Headers/NSWindowController.h 0 ../TextEdit.xcodeproj 3 TextEdit-master/English.lproj/Edit.nib/keyedobjects.nib000066400000000000000000001211001271274630500234220ustar00rootroot00000000000000bplist00X$objectsT$topX$versionY$archiverf,04;>?CG(,-./3<=>?CLMNOS\]^_clmnos| !"#'01237@ABGPQRSW`defjswxy} "#$%)23459BCDEIRSTXaefghluvw{ !"#'0126?@ABFOPQRV_defjsxyz~ #$%)26789=FJKLPYZ[_hlmnr{|} "+,-1:;<=AJKLPY]^_cklmqyz{  #$%)23459BCDHPTUVZbcdhpqrv~Talmst     " - 2 3 4 7 M X c n o p v    % 0 1 5 8 ? J K L O e p { | }     " - 8 9 : E F Q R S V c n o p s z { N        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsvy      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~U$null  !"#$%&'()*+[NSNamesKeys]NSClassesKeys[NSFramework_NSAccessibilityOidsValuesZNSOidsKeys_NSObjectsValues]NSFontManager]NSConnections_NSAccessibilityOidsKeysVNSRootYNSNextOid_NSVisibleWindows]NSNamesValues]NSObjectsKeys\NSOidsValuesV$class_NSClassesValues_NSAccessibilityConnectors>d@ c'Ae?b-./[NSClassName123YNS.string]NSApplication5678X$classesZ$classname89:_NSMutableStringXNSStringXNSObject56<==:^NSCustomObject_IBCocoaFramework@ABZNS.objects56DEEF:\NSMutableSetUNSSet@HjIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ %+05:?DIOT[aejnrw{Àǀ̀рՀڀހ  $*/3:?DHLRW[`dimquy~ÁǁˁρӁׁہ#]NSDestinationWNSLabelXNSSource -. 13ZControllerXdelegate56ţ:_NSNibOutletConnector^NSNibConnector#WNSTitle[NSMenuItemsP@ՀVNSMenu]NSMnemonicLoc_NSKeyEquivModMaskYNSOnImageZNSKeyEquiv\NSMixedImage\New Document-^NSResourceNameWNSImage_NSMenuCheckmark56:_NSCustomResource-_NSMenuMixedState56:ZNSMenuItem56:^NSMutableArrayWNSArray56:VNSMenuXdockMenu##$   !"VNSNameksm^About TextEdit_orderFrontStandardAboutPanel:56:_NSNibControlConnector^NSNibConnector*$& !"#%'())+ZSelect AllQaZselectAll:02/$, 5679'-.XCompleteQYcomplete:@B4$1 EFGI'23UPasteQvVpaste:PR9$6 UVWY'78TCopyQcUcopy:`b>$; efgi'<=SCutQxTcut:prC$@tuvwIAB3}~J^K[Paste StyleZpasteFont:H$EtAFGYUnderlineQuZunderline:N$JKLMVCenterQ|\alignCenter:S$PKQRZAlign LeftQ{ZalignLeft:XZ$UtUNSTagAVWVItalicQi-.ˀY13]NSFontManager]addFontTrait:Ӏ`$\]^_wx^Make Rich TextQT[toggleRich:XZ$btAcdTBoldQbi$fKghlign RightQ}[alignRight:m$k   YKl8ZCopy RulerZcopyRuler:q$otYAp8ZCopy StyleYcopyFont:$&v$s)*+-KtuZShow RulerQr\toggleRuler:46z$x9:;IKy3aste Ruler[pasteRuler:DFX$|tIJKMA}~ZShow FontsQt_orderFrontFontPanel:TV$XYZ[倂acXY[Use DefaultYunscript:gi$klmn倇tvSTWUse All_useAllLigatures:z|$~[倌EF_useStandardKerning:$~倌VLoosenQ]^loosenKerning:$~倌WTightenQ[_tightenKerning:$k[倇_useStandardLigatures:$k倇XUse None_turnOffLigatures:ˀ$X倂URaise^raiseBaseline:ـ$X倂ULower^lowerBaseline:耩$~倌_turnOffKerning:$倬67eOpen &Qo]openDocument: $ 倬_Revert to Saved_revertDocumentToSaved:$倬SNewQn\newDocument:&($+,-/倬hSave As &QS_saveDocumentAs:68€$;<=?倬TSaveQs]saveDocument:FHƀ$KLM倬ŀXSave All_saveAllDocuments:UẀ$YZ[\^ƀʀˀbd*+eFind &Qf_performFindPanelAction:Uk̀$YnoprπЀYFind NextQgUz̀$Y}~ӀԀ]Find PreviousQGـ$Y׀؀_Jump to SelectionQj_centerSelectionInVisibleArea:Ù$Y܀݀_Use Selection for FindQe$tAhow ColorsQC_orderFrontColorPanel:$X倂uperscript\superscript:ɀ$X倂YSubscriptZsubscript:؀$]\Wrap to PageQW_togglePageBreaks:$倬fPrint &Qp^printDocument:$倬kPage Setup &QP^runPageLayout:$   倬UCloseQw]performClose:$]_Allow Hyphenation_toggleHyphenation:$&$)*+KWJustify_alignJustified:35 $ 89:<'  TUndoQzUundo:CE$  HIJL'TRedoQZUredo:SU$WXYZ`ac;=$;!<=]Hide TextEditQhUhide:#C$@!AB]Quit TextEditQqZterminate:# G$E  !F=ide Others_hideOtherApplications:#K$I!JXShow All_unhideAllApplications:&(Q$M*+,-/NOP35]TextEdit HelpQ?YshowHelp::<V$S>?@ATUGICD_Traditional Form_ toggleTraditionalCharacterShape:MOZ$XRST]Y_Prevent Editing_toggleReadOnly:\^_$\`abc]^ik35^Start Speaking^startSpeaking:oqc$a`tuv]b]Stop Speaking]stopSpeaking:Xh$etAfgVBiggerQ+[modifyFont:Xh$jtAklWSmallerQ-p$n 'oVDeleteWdelete:t$rtAsWOutlineXoutline:Xx$vtAwYStyles..._orderFrontStylesPanel:΁}$z '{|_Paste and Match StyleQV_pasteAsPlainText:߁$倬_Show Properties-._!DocumentPropertiesPanelController]toggleWindow:$KZSpacing..._orderFrontSpacingPanel:$  #%ZLine Break_insertLineBreak:$_Paragraph Break^insertNewline:!$$%&ZPage Break_insertContainerBreak:.0$ 3457'eLink &Qk_orderFrontLinkPanel:>@$CDE&_Check Grammar With Spelling_toggleGrammarChecking:MO$QRSTZ\[Smart Links_toggleAutomaticLinkDetection:`b$Qef\Smart Quotes_!toggleAutomaticQuoteSubstitution:np$Qst_Smart Copy/Paste_toggleSmartInsertDelete:|9$Y^Select Line...Ql-._LinePanelControllerՀ$$_Make Upper Case^uppercaseWord:$Q\Smart Dashes_ toggleAutomaticDashSubstitution:$Q_Text Replacement_toggleAutomaticTextReplacement:Ł€$&_Correct Spelling Automatically_"toggleAutomaticSpellingCorrection:ԁƀ$ŀ_Make Lower Case^lowercaseWord:ʀ$ɀZCapitalize_capitalizeWord:΀$Q̀_Show Substitutions_orderFrontSubstitutionsPanel:Ҁ$倬рlSave As PDF &_saveDocumentAsPDFTo:  ր$]ՀeList &_orderFrontListPanel:ڀ$]ـfTable &_orderFrontTablePanel:&(߀$+,-/倬݀ހmAttach Files &QA_chooseAndAttachFiles:68$Q;<=^Data Detectors_toggleAutomaticDataDetection:EG$IJKQSX Default_ makeBaseWritingDirectionNatural:WY$I\]^ Left to Right_$makeBaseWritingDirectionLeftToRight:eg$Ijk^ Right to Left_$makeBaseWritingDirectionRightToLeft:su$IxyX Default_ makeTextWritingDirectionNatural:$I^ Left to Right_$makeTextWritingDirectionLeftToRight:$I^ Right to Left_$makeTextWritingDirectionRightToLeft:@Sk6@0 qE>~Y|XOz|WFY5b `((grb &2 i  kp^k!W!&Rt8UH+.I12V<8QG:i@B*OFB}(Nu ΁Kx䀱 Eoa !BāTGɀ\0>7k؁\]Xv_%z"&eҁ`? f!Z|ȁ rE8Pndj];܁gM'̀ ہ&@;XI'Ё,0Lo2 P@y,\U!Ȁց s6A+ĀtbMr4SUJ&]nNA1߁@jԁUVXY]]\NSIsDisabled]NSIsSeparator!  UVcd]]]  _Transformations@nāȀTText@u&&6PJfskxUV]]K  IQYNSSubmenuXNSActionK_Writing Direction^submenuAction:@GYg!u   UI]  YParagraphUVI]]  UI]  YSelectionUV]]K  UV]]K   QZ']Substitutions^submenuAction:@pbO8́UVQ]]  UV ]]&  UVk ]]  -. _DocumentControllerUV  ]]]   $ % ' ,' ' / 1iTEdit^submenuAction:1 53TEdit@ 85EbRB20   ;61zn,&!"&',02UV O P]]'  UV Z []]'   e f m'#$VInsert^submenuAction:@ q!UV x y]]'   Y 'Ɂ()TFind^submenuAction:1 3TFind@ WkzȀ΀Ҁۀց  '&-._Spelling and Grammar^submenuAction:@ @Ł%+0  '1^submenuAction: `i ŀ']34VSpeech^submenuAction:@ ^q\a1 3TFile@ 8(H (F耵8>ЀĀ?܁@A W 9:[Open Recent^submenuAction:1 3[Open Recent@ U__NSRecentDocumentsMenuUV ]]  UV  ]]  UV  ]]  UV  ]]  UVt ' (]]A  _Character Shape@ 2<S1 63TKern@ 9| A Bt D I]AHITFont^submenuAction:1 M3TFont@ PF 1:r|bUErvBejLMPUZ\߁]o@UVt g h]]A  t r s~ u zANOTKern^submenuAction:t  k AQRXLigature^submenuAction:1 3XLigature@ it X AVWXBaseline^submenuAction:1 3XBaseline@ Vـ耠t >G ATC[^submenuAction:UVt ]]A  UVt ]]A  [_NSFontMenuUV ]]!   ݁acb1 3XServices@ __NSServicesMenu  efTFile^submenuAction:  ]Kh^submenuAction:@ N+@jdty  !klXTextEdit^submenuAction:@ B 2  n4_or;EI@UV $ %]]!   / 0 2 7!`pqXServices^submenuAction:UV < =]]!  \_NSAppleMenu H I K P]uvVFormat^submenuAction:1 T3VFormat@ WO Gg\Xԁ؀ e fk h mz{VWindow^submenuAction:1 q3VWindow@ t}i!^_NSWindowsMenu } ~* NTHelp^submenuAction:1 3THelp@ (M[_NSMainMenu-. ]NSApplication56 :@ SYI   YXIkt#tQ`  t1#:##ttt   tY ~k#k~ttQI Q t t* ~QXII#Ykt #  kt tQ QX`tNYYI ~W#ttX>QItkXI +@Q kt#Iɀ!]0g'&K&'ɀA]A]''dAZM]']&UK]KAA]A!&'''AɁoKKA8A'']A!K'A2!]N'Ɂ,AK'!KK''A!'!A'P]yAjɀɁK'G&K]AA!!TAK't!&'A!]"@ OSk6@ @qE ~Y|XOz|WFYb `(grb &2i  >ukp^k!(W!&Rt8UH+.I12V<#08QG:i5B*OFB}(N ΀EKx䀱 oa !Bā0Gɀ\0+7k؁\Xv_;z"&eҁ`? f!Z|%ȁ rE8>Pndj]܁g'̀ ہ&@;XI'Ё,Lo2 P@Ty,\UMȀց] s6AĀtbMr4SUJ&!]nNA1߁@jԁ@ S                   ! " # $ % & ' ( * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁      !"#$%&'()*+,-./0123456789:;<=_Menu Item (Find Next)_Menu Item (Underline)[Separator-8_Menu (Transformations)[Menu (Text)_Menu Item (Substitutions)\Separator-15_Menu Item (Paste Ruler)_'Menu Item (Check Grammar With Spelling)XDockMenu_Menu Item (Select Line...)_Menu Item (Superscript)_Menu Item (Revert to Saved)_Menu Item (Paragraph)[Separator-7_Menu Item (Help)[Separator-9_Menu Item (Copy Style)_Menu Item (Text Replacement)_Menu Item (Edit)_Menu Item (Stop Speaking)_Menu Item (Redo)YSeparator[Menu (File)\Separator-16_Menu Item (Make Lower Case)_Menu Item (Transformations)[Menu (Kern)_Menu Item (Font)[Menu (Find)_Menu Item (Make Rich Text)_'Menu Item (Check Spelling While Typing)_Menu (Baseline)_Menu Item (Check Document Now)_Menu Item ( Right to Left)[Preferences_Menu Item (Copy Ruler)oMenu Item (Table &)\Separator-17_Menu Item (Make Upper Case)_Menu Item (Prevent Editing)_Menu Item (Styles...)\Separator-11_Menu Item (Hide TextEdit)_!Menu Item (Paste and Match Style)_Menu Item (Insert)[Separator-1_Menu Item (Bigger)_Menu Item (Find Previous)_Menu (Services)_Menu Item (Loosen)_Menu Item (Use Default)[Separator-4ZController_Menu Item (Align Right)_Menu Item (Zoom)_Menu Item (Use Default)-1_Menu Item (Character Shape)\Separator-20_Menu (Open Recent)_Menu Item (Show Fonts)_%Menu Item (Show Spelling and Grammar)\Separator-14_Menu Item ( Left to Right)_Menu Item (Smart Quotes)oMenu Item (Page Setup &)_Menu Item (Capitalize)[Separator-2_Menu Item (Wrap to Page)_Menu Item (Outline)_Menu Item (New Document)_Menu Item (Hide Others)_Menu Item (Open Recent)[Separator-3_Menu Item (Align Left)_Menu Item (Delete)_Menu Item (File)_Menu Item (Smaller)]Menu (Speech)oMenu Item (Attach Files &)_Menu Item (Text)_Menu Item (Find)_Menu Item (Tighten)_Menu Item (Show Substitutions)_Menu Item (Subscript)\Separator-23_Menu Item ( Right to Left)-1XMainMenu_Menu Item (Line Break)_"Menu Item (Use Selection for Find)_Menu (Spelling and Grammar)_Menu Item (Use None)_Menu Item (Paste Style)\Separator-21_Menu Item (Cut)\Font Manager_Menu Item (Show All)[Menu (Edit)_Menu Item (Close)oMenu Item (Save As PDF &)_Menu Item (Justify)\Separator-22_Menu Item (Complete)_Menu Item (Bring All to Front)\Separator-19_Menu Item (Services)_Menu Item (Speech)_Menu Item (About TextEdit)_Menu Item (Ligature)_Menu Item (Smart Dashes)[Separator-5_Menu (Character Shape)_Menu Item ( Default)-1_Menu Item (Window)_ Menu Item (Spelling and Grammar)_Menu (Ligature)_Menu Item (New)_Menu Item (Smart Copy/Paste)_Menu Item (Raise)_Menu Item (Start Speaking)]Menu (Window)_Menu Item (Italic)_Menu Item (Page Break)_Menu Item (TextEdit Help)oMenu Item (Find &)_Menu Item (Jump to Selection)\Separator-18_Menu Item (Writing Direction)_Menu Item (Selection)_Menu Item (Show Ruler)_Menu Item (Copy)[Menu (Font)_Menu Item (Use None)-1\Separator-10_Menu Item (Save)_Menu Item (Clear Menu)_Menu Item (Save All)oMenu Item (Print &)_Menu Item (Format)_Menu Item (Spacing...)_Menu Item (Allow Hyphenation)[Application_Menu Item (Bold)_Menu (Writing Direction)_Menu Item (Kern)\Separator-12oMenu Item (Preferences &)_Menu Item (Use Default)-2_Menu Item (Traditional Form)_Menu Item (Show Properties)\File's OwneroMenu Item (Link &)_Menu Item (Data Detectors)_Menu (Substitutions)_Menu Item ( Default)_Menu Item (Baseline)_Menu Item (Use All)_Menu Item (Lower)_Menu Item (Center)_Menu Item (Undo)_Menu Item (Select All)_Menu (TextEdit)]Menu (Format)\Separator-13[Menu (Help)_*Menu Item (Correct Spelling Automatically)_Menu Item (Smart Links)[Separator-6_Menu Item (Paste)_Menu Item (Minimize)_Menu Item (Show Colors)_Menu Item (Quit TextEdit)oMenu Item (Open &)oMenu Item (Save As &)_Menu Item (TextEdit)_Menu Item ( Left to Right)-1oMenu Item (List &)]Menu (Insert)_Menu Item (Paragraph Break)@tS@wS@zS lvz@6(Q0BIQ^a^X@[b5LrXk.2ub gWPHn_Ep:>yi* sYJxFW|qO#O}\U 1{GN!&V(urO 2hb t jUZtRW(w`kp<M8IczS`ReB8+&f|N d}kig~KTqVm|k~iYYoF]!ҁBx?3noUDׁn\?r`e7%Ѐ@ueۀہ,򀓁Zd&fb%j':yĀǁˀ сL~ց>UT_ȁNLǀ\ހɀ!AaaXEwT;Mg0 ]dsMā!ڀ5or+;$ ?0Á:"Ár EG䀴yn!W6i\Xȁ ܀PS+@ I/I]&Dkv1m0PtӁ&j Ԁ K΁82*OqՀ[Á߀4j@R`́'ρ]|؀{  J,Hz[@S       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`akV]n~":*re)uZv?R [x(#%G<l ^ w;=;m!"u=oUK&&wY$ z}>fXi| tWB g'wh\Jyx%C7$yAeE !p@ L8D:jl`tx<6#H@@S@S56:^NSIBObjectData]IB.objectdata_NSKeyedArchiver"'0:  [ g u   " 0 = D V r u x z }    ' 0 5 D W ` k l n w ~ q s u w y { }           # & ) , / 2 5 8 ; > A D G J M P S V Y \ _ b e h k n q t w z }   *,.02?GSUWYZcfhj#5>CVcegi| "$&(*;BEHJM\|  *79;=^`ejlnprt}"$&(*,139FHJLmoty{} ?AFKMOQSU_aly{}!#%')+68CTVXZ\ "$&368;JLXikmoq  &(*,MOTY[]_acny  "-/<IKMOprw|~!#%FHMRTVXZ\ilnq}57<ACEGIKX[]`v  "*,>KMOQrty~79>@BDFHN]jlnp%')+LNSXZ\^`bortw  249>@BDFHLN[hjln  )68:<]_dikmoqs|')+-RTY^`bdfhrt         2 4 T a c e g !!!!! !!!/!!@!B!c!e!j!o!q!s!u!w!y!!!!!!!!!!!!!!!!!!""""%"'","1"3"5"7"9";"H"J"^"k"m"o"q""""""""""""""""""#### # ###'#)#8#E#G#I#K#l#n#s#x#z#|#~##################$$$$$$;$=$B$G$J$L$N$P$R$Z$l$y$|$~$$$$$$$$$$$$$$$$$$$%% % %%%%%%%"%/%2%4%7%X%[%`%e%h%j%l%n%p%%%%%%%%%%%%%%%%%%%%&&&&&&.&@&M&P&R&U&v&y&~&&&&&&&&&&&&&&&&&&&&&&'''' '"'%'F'I'N'S'V'X'[']'_'l'o'q't''''''''''''''''(( ((&()(+(.(O(R(W(\(_(a(c(e(g(((((((((((((((())))!)$)-)9);)G)X)Z)])_)b)))))))))))))))))))))))****** *1*3*6*8*;*\*^*c*h*k*m*p*r*t*****************++++ +#+D+G+L+Q+T+V+Y+[+]+j+m+o+r++++++++++++++++++++,,%,2,5,7,:,[,],b,g,j,l,n,p,r,,,,,,,,,,,,,,,,,,,---$-'-)-,-M-P-U-Z-]-_-a-c-e-s-------------------.... ...0.5.:.=.?.B.D.F.H.P.R._.b.d.g........................///////;/=/B/E/G/I/K/M/W/p/}////////////////00000)0+0005080:0<0>0@0R0[0]0`000000000000000011 1 11114191>1A1C1E1G1I1V1Y1[1^1i1|111111111111111111222 2%2(2*2,2.202;2S2`2c2e2h222222222222222222333 3 333313J3W3Z3\3_33333333333333333334 44444444+4O4\4_4a4d4444444444444444555 555555&5(5153565L5Y5[5]5_5l5o5q5t5555555555555555556 66666666,6O6\6_6a6d66666666666666677 7777777 7A7f7s7v7x7{777777777777777888 8 8 8888.8;8>8@8C8`8c8h8k8m8o8q8s88888888888888999)9,9.919N9P9U9X9Z9\9^9`9k999999999999999999::!:#:(:-:0:2:5:7:9:T:V:n:{:~::::::::::::::::;;; ;%;(;*;,;.;0;=;@;B;E;N;q;~;;;;;;;;;;;;;;;;<<GgGiGnGsGuGwGyGzG|G~GGGGGGGGGGGGGGGGGGGGHH!H&H+H-H/H1H2H4H6H7H`HbHgHlHnHqHsHuHwHyH|HHHHHHHHHHHHHHHHHHHIIIIII I"I1I:IGIJIMIPISIVIYI[IIIIIIIIIIIIIIIIIIIIIIIJJ JJJJJ"J'J)J2JWJYJ[J^JaJcJeJgJjJlJnJqJtJwJzJ}JJJJJJJJJJJJJJJJJJJKKK K K%KNKPKUKZK\K^K`KaKcKeKfKKKKKKKKKKKKKKKKKKKKKKLLLLLL!L#L$L&L(L)LRLTLYL^L`LbLdLeLgLiLjL|LLLLLLLLLLLLLLLLLLLLLLLLLMMMM M"M+MTMVMXMZM\M_MbMeMhMkMnMqMtMwMzM}MMMMMMMMMMMMMMMMMMMMNNNNN N NNN"NKNMNRNWNYN\N^N`NbNdNgNpNNNNNNNNNNNNNNNNNNNNNNOOOOO%O0O2O4O6O8O:OTATDTGTJTLT[TTTTTTTTTTTTTTTTTTTTTTTTTUU UVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWW W WWWWWWWW W"W%W'W*W,W.W0W2W4W6W8W:W=W?WBWDWFWHWKWMWOWRWTWWWZW\W_WaWdWfWhWjWlWnWpWsWuWwWyW{W}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXX X XXXXXXXXX X#X&X(X+X.X1X:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZ ZZZZZZZZ"Z%Z(Z+Z.Z1Z3Z6Z8Z:Z=Z?ZAZDZFZIZLZOZQZTZWZZZ]Z_ZbZeZgZjZlZoZrZuZwZzZ}ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[ [ [[[[[[[[["[%[([*[-[0[3[6[8[;[>[@[C[F[I[L[O[Q[S[U[X[Z[\[^[a[d[g[j[m[o[r[t[w[z[|[~[[[[[[[]] ]]]]]]] ]#]&])],]/]2]5]8];]>]A]D]G]J]M]P]S]V]Y]\]_]b]e]h]k]n]q]t]w]z]}]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^ ^ ^^^^^^^"^%^(^+^.^1^4^7^:^=^@^C^F^I^L^O^R^U^X^[^^^a^d^g^j^m^p^s^v^y^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^____ _ _______!_$_'_*_-_E_]_i______``!`;`Y`q`}`````aaa a,a9aWauaaaaaabb7bCb\bbbbbbc c1cFcRcgcccccccdd$dBdOddd}ddddee4e@e[eqeeeeeef f#f1fffyfffffggg)gNglggggggghh3hIhVhmhhhhhhii"i;iTiiiiiiijjj#js@sCsEsHsKsNsQsTsWsYs\s^sasdsfshsjslsosrsusxs{s}ssssssssssssssssssssssssssssssssssssssssssssssssstttt t tttttttt!t$t&t(t+t-t/t2t4t7t:tt@tCtEtHtJtLtOtRtUtXt[t^tatctftitltntqtttvtyt|t~ttttttttttttttttttttttttttttttttttttttttttttttttuwHwKwNwQwTwWwZw]w`wcwfwiwlwowrwuwxw{w~wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxx xxxxxxx x#x&x)x,x/x2x5x8x;x>xAxDxGxJxMxPxSxVxYx\x_xbxexhxkxnxqxtxwxzx}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyy y yyyyyyy"y%y(y+y.y1y4y7y:y=y@yCyFyIyLyOyRyUyXy[y^yaydygyjymypysyvyyy|yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzz z zzzzzzz!z$z'z*z-z0z3z6z9z|A|D|F|I|L|O|R|U|X|[|^|`|c|f|h|k|n|q|t|v|y||||||||||||||||||||||||||||||||||||||||||||||||}}}} } }}}}}}}}!}$}&}(}+}.}1}4}7}:}=}?}B}E}H}K}N}P}S}V}Y}\}_}b}e}h}k}m}p}s}u}x}{}~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~)~+~0~BTextEdit-master/English.lproj/EncodingAccessory.nib/000077500000000000000000000000001271274630500227775ustar00rootroot00000000000000TextEdit-master/English.lproj/EncodingAccessory.nib/designable.nib000066400000000000000000001226051271274630500255740ustar00rootroot00000000000000 1050 10A201 706 993 403.00 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES OpenSaveAccessoryOwner FirstResponder NSApplication 256 YES 256 {{152, 27}, {264, 26}} YES 67239488 1024 LucidaGrande 13 1558 -2038284033 1 LucidaGrande 13 16 400 75 DO NOT LOCALIZE 1048576 2147483647 1 NSImage NSMenuCheckmark NSImage NSMenuMixedState _popUpItemAction: YES OtherViews YES YES 3 YES YES 1 256 {{153, 2}, {262, 22}} YES 67239424 0 DO NOT LOCALIZE 1211912703 0 NSImage NSSwitch NSSwitch 200 25 256 {{8, 33}, {142, 17}} YES 67239424 71303168 Plain Text Encoding: LucidaGrande 13 1044 6 System controlColor 3 MC42NjY2NjY2NwA 6 System controlTextColor 3 MAA {423, 58} NSView NSResponder YES encodingPopUp 66 checkBox 71 accessoryView 73 title 80 YES 0 YES -2 RmlsZSdzIE93bmVyA -1 First Responder 72 YES View 60 YES 62 YES 69 YES 76 YES 77 78 57 YES 59 -3 Application YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency 57.IBEditorWindowLastContentRect 57.IBPluginDependency 57.ImportedFromIB2 59.IBPluginDependency 59.ImportedFromIB2 60.IBAttributePlaceholdersKey 60.IBPluginDependency 60.ImportedFromIB2 62.IBPluginDependency 62.ImportedFromIB2 69.IBPluginDependency 69.ImportedFromIB2 72.IBEditorWindowLastContentRect 72.IBPluginDependency 72.ImportedFromIB2 76.CustomClassName 76.IBPluginDependency 77.IBPluginDependency 78.IBPluginDependency YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{162, 1094}, {264, 23}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Encoding to use if there is no encoding specified with the file. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{21, 1064}, {423, 58}} com.apple.InterfaceBuilder.CocoaPlugin EncodingPopUpButtonCell com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES YES YES 80 YES EncodingPopUpButtonCell NSPopUpButtonCell IBProjectSource EncodingManager.h FirstResponder NSObject IBUserSource OpenSaveAccessoryOwner NSObject YES YES accessoryView checkBox encodingPopUp YES id id id IBUserSource YES NSActionCell NSCell IBFrameworkSource AppKit.framework/Headers/NSActionCell.h NSApplication NSResponder IBFrameworkSource AppKit.framework/Headers/NSApplication.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSApplicationScripting.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSColorPanel.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSHelpManager.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSPageLayout.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSUserInterfaceItemSearching.h NSButton NSControl IBFrameworkSource AppKit.framework/Headers/NSButton.h NSButtonCell NSActionCell IBFrameworkSource AppKit.framework/Headers/NSButtonCell.h NSCell NSObject IBFrameworkSource AppKit.framework/Headers/NSCell.h NSControl NSView IBFrameworkSource AppKit.framework/Headers/NSControl.h NSFormatter NSObject IBFrameworkSource Foundation.framework/Headers/NSFormatter.h NSMenu NSObject IBFrameworkSource AppKit.framework/Headers/NSMenu.h NSMenuItem NSObject IBFrameworkSource AppKit.framework/Headers/NSMenuItem.h NSMenuItemCell NSButtonCell IBFrameworkSource AppKit.framework/Headers/NSMenuItemCell.h NSObject IBFrameworkSource AppKit.framework/Headers/NSAccessibility.h NSObject NSObject NSObject NSObject NSObject IBFrameworkSource AppKit.framework/Headers/NSDictionaryController.h NSObject IBFrameworkSource AppKit.framework/Headers/NSDragging.h NSObject IBFrameworkSource AppKit.framework/Headers/NSFontManager.h NSObject IBFrameworkSource AppKit.framework/Headers/NSFontPanel.h NSObject IBFrameworkSource AppKit.framework/Headers/NSKeyValueBinding.h NSObject NSObject IBFrameworkSource AppKit.framework/Headers/NSNibLoading.h NSObject IBFrameworkSource AppKit.framework/Headers/NSOutlineView.h NSObject IBFrameworkSource AppKit.framework/Headers/NSPasteboard.h NSObject IBFrameworkSource AppKit.framework/Headers/NSSavePanel.h NSObject IBFrameworkSource AppKit.framework/Headers/NSTableView.h NSObject IBFrameworkSource AppKit.framework/Headers/NSToolbarItem.h NSObject IBFrameworkSource AppKit.framework/Headers/NSView.h NSObject IBFrameworkSource Foundation.framework/Headers/NSArchiver.h NSObject IBFrameworkSource Foundation.framework/Headers/NSClassDescription.h NSObject IBFrameworkSource Foundation.framework/Headers/NSError.h NSObject IBFrameworkSource Foundation.framework/Headers/NSFileManager.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyValueCoding.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyValueObserving.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyedArchiver.h NSObject IBFrameworkSource Foundation.framework/Headers/NSObject.h NSObject IBFrameworkSource Foundation.framework/Headers/NSObjectScripting.h NSObject IBFrameworkSource Foundation.framework/Headers/NSPortCoder.h NSObject IBFrameworkSource Foundation.framework/Headers/NSRunLoop.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptClassDescription.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptKeyValueCoding.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptObjectSpecifiers.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptWhoseTests.h NSObject IBFrameworkSource Foundation.framework/Headers/NSThread.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURL.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURLConnection.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURLDownload.h NSPopUpButton NSButton IBFrameworkSource AppKit.framework/Headers/NSPopUpButton.h NSPopUpButtonCell NSMenuItemCell IBFrameworkSource AppKit.framework/Headers/NSPopUpButtonCell.h NSResponder IBFrameworkSource AppKit.framework/Headers/NSInterfaceStyle.h NSResponder NSObject IBFrameworkSource AppKit.framework/Headers/NSResponder.h NSTextField NSControl IBFrameworkSource AppKit.framework/Headers/NSTextField.h NSTextFieldCell NSActionCell IBFrameworkSource AppKit.framework/Headers/NSTextFieldCell.h NSView IBFrameworkSource AppKit.framework/Headers/NSClipView.h NSView NSView IBFrameworkSource AppKit.framework/Headers/NSRulerView.h NSView NSResponder 0 ../TextEdit.xcodeproj 3 TextEdit-master/English.lproj/EncodingAccessory.nib/keyedobjects.nib000066400000000000000000000135211271274630500261460ustar00rootroot00000000000000bplist00 X$versionY$archiverT$topX$objects_NSKeyedArchiver ]IB.objectdata 156<=AELT ekwx  "#'(+02;<GHMWXY]`efinq ruvz     $(,-U$null  !"#$%&'()*+,-./0]NSObjectsKeysV$class_NSAccessibilityOidsValues[NSNamesKeys]NSConnections_NSAccessibilityOidsKeysZNSOidsKeys]NSFontManager_NSObjectsValues_NSVisibleWindows_NSAccessibilityConnectors[NSFramework\NSOidsValues]NSClassesKeysVNSRootYNSNextOid]NSNamesValues_NSClassesValuesR~|W{fVwgdSXe234[NSClassName_OpenSaveAccessoryOwner789:Z$classnameX$classes^NSCustomObject9;XNSObject_IBCocoaFramework>?@ZNS.objects78BC\NSMutableSetBD;UNSSet>FG&HIJK JLNMNOPQR-]NSDestinationWNSLabelXNSSourceI HUVWXY2Z[\]^_^abcd[NSFrameSizeXNSvFlags_NSNextResponderXNSWindow[NSSuperviewZNSSubviews[NSExtensionC G DE F>Fg&hij *4VlWXmnYopQr^tuQYNSEnabledWNSFrameVNSCell )  _{{152, 27}, {264, 26}}yz{|}~2hppp]NSControlView_NSPreferredEdgeVNSMenu_NSPeriodicDelay]NSButtonFlags[NSCellFlags_NSPeriodicInterval]NSAltersState_NSUsesItemFromMenu_NSMenuItemRespectAlignment\NSCellFlags2_NSAlternateImage_NSOriginalClassName_NSKeyEquivalent_NSArrowPosition^NSButtonFlags2YNSSupportZNSMenuItem @@(K _EncodingPopUpButtonCell_NSPopUpButtonCellVNSSizeVNSNameXNSfFlags#@*\LucidaGrande78VNSFont;#@*YNS.stringP78_NSMutableString;XNSString{uXNSTargetWNSState]NSMnemonicLocWNSTitleYNSOnImageXNSAction_NSKeyEquivModMask\NSMixedImageZNSKeyEquiv#" p^NSNoAutoenable[NSMenuItemsZNSMenuFont %'$_DO NOT LOCALIZEP2^NSResourceNameWNSImage_NSMenuCheckmark78_NSCustomResource;2܀!_NSMenuMixedState__popUpItemAction:78ZNSMenuItem;ZOtherViews>F&78^NSMutableArray;WNSArray78VNSMenu;78^NSClassSwapper;78]NSPopUpButton;XNSButtonYNSControlVNSView[NSResponderVlWXmnYpQ^  Q 3 +, _{{153, 2}, {262, 22}}y|}~iZNSContents_NSAlternateContents]NSNormalImage*Hj@ABCDEF[NSTextColor_NSBackgroundColor4>A7@98_Plain Text Encoding:IL#@*NOPQRSTUV\NSColorSpaceWNSColor]NSCatalogName[NSColorName=<:;VSystem\controlColorNZS\WNSWhite=K0.6666666778^_WNSColor^;NOPQRSbUd=@:?_controlTextColorNZSh=B078jk_NSTextFieldCelljlm;\NSActionCellVNSCell78op[NSTextFieldo;Y{423, 58}78st\NSCustomViews;]accessoryView78wx_NSNibOutletConnectorwy;^NSNibConnectorMNOPi}-I*KXcheckBoxMNOPh-I M]encodingPopUpMhXNSMarkerVNSFilePQO _NSToolTipHelpKey_@Encoding to use if there is no encoding specified with the file.78_NSIBHelpConnector;_NSIBHelpConnector>Uuihj9Q * 46S ,23T]NSApplication78;>UuhQQQj--i 4*>Uu-hj9iQ  46*S ,>ÀU΀YZ[\]^_`abc_Menu (OtherViews)_-Encoding Pop Up Button Cell (DO NOT LOCALIZE)\File's Owner]Pop Up Button_"Static Text (Plain Text Encoding:)_&Text Field Cell (Plain Text Encoding:)_Check Box (DO NOT LOCALIZE)[ApplicationTView_Menu Item (DO NOT LOCALIZE)_Button Cell (DO NOT LOCALIZE)>܀Uu>U>UHiQKJI-9j hu * NSLJ64, >UhijklmnopqrstuvI>;HRBGQ9NEM<L>F&xMNOjhz4y _AXTitleUIElement78 !_NSNibAXRelationshipConnector"#;_NSNibAXRelationshipConnector^NSNibConnector>&Ux>*U+}P78./^NSIBObjectData.;",1:?QVdfgm(6H[w  %.9BQV_r{%1:LUalxz}Ygy!7I[jt !*16GPRTV_iklu*,.0579;@BDYht    2 ; F K T V a j l o q z    5 8 9 ; = ? A C E ]     # , B G P ] f s z     " $ ) + - D U ^ ` b e z      0 = ? B K ] f s z  ):<>@BPajqsuwy%')+-/13579BDFT]bkmJWe )+.09;>@IKlnprtvxz|~  "5>]d0TextEdit-master/English.lproj/Preferences.nib/000077500000000000000000000000001271274630500216365ustar00rootroot00000000000000TextEdit-master/English.lproj/Preferences.nib/designable.nib000066400000000000000000007206261271274630500244420ustar00rootroot00000000000000 1040 10A389 731 1026 428.00 com.apple.InterfaceBuilder.CocoaPlugin 731 YES YES com.apple.InterfaceBuilder.CocoaPlugin YES YES YES YES Preferences FirstResponder NSApplication 3 2 {{380, 492}, {449, 574}} -260571136 Preferences NSWindow View {1.79769e+308, 1.79769e+308} {154.928, 5} 256 YES 256 {{14, 7}, {189, 32}} YES 67239424 134217728 Restore All Defaults LucidaGrande 13 1044 -2038284033 1 200 25 256 {{13, 35}, {417, 523}} YES 256 YES 256 {{180, 422}, {102, 18}} YES 67239424 131072 Wrap to page LucidaGrande 11 3100 1211912703 0 NSSwitch 200 25 256 {{19, 404}, {91, 36}} YES 2 1 YES -2080244224 131072 Rich text 1 1211912703 2 NSRadioButton 200 25 67239424 131072 Plain text 1211912703 2 200 25 {91, 18} {0, 0} 1143472128 NSActionCell 67239424 0 Radio -935575297 0 549453824 {21, 21} YES YES TU0AKgAABuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEY BgYGZxQUFKolJSXeLS0t+yQkJN4UFBSqBgYGZwAAABgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABAAAAAgwMDEggICC2Q0ND/2JiYv96enr/goKC/3h4eP9kZGT/QkJC/xsbG7YHBwdI AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADEBAQSzw8PM9ra2v/j4+P/66urv+9vb3/ w8PD/7y8vP+rq6v/kZGR/2hoaP80NDTPDAwMSwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAIGBgYg Pj4+u3d3d/+bm5v/t7e3/8rKyv/W1tb/2dnZ/9nZ2f/R0dH/wMDA/5ubm/9vb2//MjIyuwQEBCAAAAAC AAAAAQAAAAAAAAAAAAAAAQAAAAciIiJ1dnZ2/5OTk/+tra3/v7+//8jIyP/Ly8v/zMzM/8/Pz//Kysr/ wcHB/6urq/+MjIz/aGho/x0dHXUAAAAHAAAAAQAAAAAAAAAAAAAABAAAABFISEi6jo6O/6ampv+0tLT/ vLy8/8DAwP++vr7/wMDA/7+/v/+9vb3/urq6/7S0tP+ioqL/iIiI/0FBQboAAAARAAAABAAAAAAAAAAB AAAABwAAAB5xcXHnpKSk/7i4uP++vr7/xMTE/8TExP/ExMT/wcHB/8HBwf/CwsL/wsLC/729vf+1tbX/ nJyc/2hoaOcAAAAeAAAABwAAAAEAAAABAAAACgAAACqRkZH9tbW1/8XFxf/Ly8v/0dHR/9HR0f/S0tL/ 0tLS/9DQ0P/Pz8//zMzM/8zMzP/CwsL/sbGx/4qKiv0AAAAqAAAACgAAAAEAAAABAAAADAAAADOJiYns wsLC/9LS0v/X19f/3d3d/93d3f/g4OD/4eHh/97e3v/d3d3/2dnZ/9bW1v/Nzc3/vLy8/4SEhOwAAAAz AAAADAAAAAEAAAABAAAADQAAADZqamrRyMjI/9jY2P/i4uL/5ubm/+np6f/q6ur/6+vr/+rq6v/p6en/ 5OTk/97e3v/V1dX/wMDA/2dnZ9EAAAA2AAAADQAAAAEAAAABAAAADAAAADM+Pj6rycnJ/97e3v/q6ur/ 8PDw//X19f/4+Pj/+Pj4//Pz8//x8fH/7e3t/+bm5v/b29v/w8PD/z09PasAAAAzAAAADAAAAAEAAAAB AAAACgAAACoMDAx0hYWF4d/f3//u7u7/9vb2//v7+/////////////39/f/4+Pj/8vLy/+rq6v/b29v/ gYGB4QwMDHQAAAAqAAAACgAAAAEAAAABAAAABwAAAB4AAABRLy8vqaioqO7u7u7/+vr6//7+/v////// ///////////9/f3/9fX1/+vr6/+lpaXuLS0tqQAAAFEAAAAeAAAABwAAAAEAAAAAAAAABAAAABEAAAA2 AAAAbDIyMrSamprn8/Pz//r6+v/8/Pz//f39//z8/P/6+vr/8fHx/5iYmOcyMjK0AAAAbAAAADYAAAAR AAAABAAAAAAAAAAAAAAAAQAAAAcAAAAdAAAARgAAAHQPDw+hVVVVzZeXl+bOzs727e3t/s7OzvaXl5fm VVVVzQ8PD6EAAAB0AAAARgAAAB0AAAAHAAAAAQAAAAAAAAAAAAAAAQAAAAIAAAAMAAAAIgAAAEYAAABs AAAAiwAAAJ0AAACnAAAAqgAAAKcAAACdAAAAiwAAAGwAAABGAAAAIgAAAAwAAAACAAAAAQAAAAAAAAAA AAAAAAAAAAEAAAADAAAACwAAAB0AAAA3AAAAUQAAAGcAAAB1AAAAegAAAHUAAABnAAAAUQAAADcAAAAd AAAACwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAcAAAASAAAAHwAAACoAAAAz AAAANgAAADMAAAAqAAAAHwAAABIAAAAHAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEAAAADAAAABwAAAAoAAAAMAAAADQAAAAwAAAAKAAAABwAAAAMAAAABAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABUAAAEBAAMAAAABABUAAAEC AAMAAAAEAAAHmgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAESAAMAAAABAAEAAAEV AAMAAAABAAQAAAEWAAMAAAABABUAAAEXAAQAAAABAAAG5AEcAAMAAAABAAEAAAFSAAMAAAABAAEAAAFT AAMAAAAEAAAHoodzAAcAAAUoAAAHqgAAAAAACAAIAAgACAABAAEAAQABAAAFKGFwcGwCIAAAbW50clJH QiBYWVogB9IABQANAAwAAAAAYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA 0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANclhZWgAA ASAAAAAUZ1hZWgAAATQAAAAUYlhZWgAAAUgAAAAUd3RwdAAAAVwAAAAUY2hhZAAAAXAAAAAsclRSQwAA AZwAAAAOZ1RSQwAAAZwAAAAOYlRSQwAAAZwAAAAOZGVzYwAAAawAAAA/Y3BydAAAAlQAAABIdmNndAAA AewAAAAwbmRpbgAAAhwAAAA4ZHNjbQAAApwAAAKMWFlaIAAAAAAAAHRLAAA+HQAAA8tYWVogAAAAAAAA WnMAAKymAAAXJlhZWiAAAAAAAAAoGAAAFVcAALgzWFlaIAAAAAAAAPNSAAEAAAABFs9zZjMyAAAAAAAB DEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAAAQHNAABkZXNjAAAAAAAA ABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAdmNndAAA AAAAAAABAAC4UgAAAAAAAQAAAAC4UgAAAAAAAQAAAAC4UgAAAAAAAQAAbmRpbgAAAAAAAAA4AAChSAAA VwoAAEuFAACa4QAAJ64AABO2AABQDQAAVDkAAoAAAAKAAAACgAB0ZXh0AAAAAENvcHlyaWdodCAyMDAy IC0gMjAwMyBBcHBsZSBDb21wdXRlciBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgBtbHVjAAAAAAAA AA8AAAAMZW5VUwAAACYAAAJmZXNFUwAAACYAAAFqZGFESwAAAC4AAAHSZGVERQAAACwAAAGQZmlGSQAA ACgAAADEZnJGVQAAACgAAAESaXRJVAAAACgAAAI+bmxOTAAAACgAAAIAbm9OTwAAACYAAADscHRCUgAA ACYAAAFqc3ZTRQAAACYAAADsamFKUAAAABoAAAE6a29LUgAAABYAAAIoemhUVwAAABYAAAFUemhDTgAA ABYAAAG8AFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQBz AGsAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAcgBvAGYAaQBsACAARwDpAG4A6QByAGkAcQB1AGUAIABS AFYAQk4AgiwAIABSAEcAQgAgMNcw7TDVMKEwpDDrkBp1KAAgAFIARwBCACCCcl9pY8+P8ABQAGUAcgBm AGkAbAAgAFIARwBCACAARwBlAG4A6QByAGkAYwBvAEEAbABsAGcAZQBtAGUAaQBuAGUAcwAgAFIARwBC AC0AUAByAG8AZgBpAGxmbpAaACAAUgBHAEIAIGPPj/Blh072AEcAZQBuAGUAcgBlAGwAIABSAEcAQgAt AGIAZQBzAGsAcgBpAHYAZQBsAHMAZQBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBl AGzHfLwYACAAUgBHAEIAINUEuFzTDMd8AFAAcgBvAGYAaQBsAG8AIABSAEcAQgAgAEcAZQBuAGUAcgBp AGMAbwBHAGUAbgBlAHIAaQBjACAAUgBHAEIAIABQAHIAbwBmAGkAbABlA 3 MCAwAA 549453824 {21, 21} YES YES TU0AKgAABuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAMY BAQOZw4OFKoaGhreICAg+xoaGt4NDQ6qBAQKZwAAAhgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAABAAAAAgEBD0gMDC+2MTFb/1ZWbv9ycoD/e3t//29vc/9YWGj/NDRR/w4OKLYBAQxI AAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAMTSwsMSc8wMIH/aWmo/6Cgyf+9vdn/ ysrg/8PD2f+np8j/d3er/z09ff8QEEPPAQEQSwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAIAAgYg AxhHuxc7i/9HabX/g5TU/6625//IyfP/09P2/9DS9f+8wu//lqPc/1VotP8hMIP/BAg+uwAABSAAAAAC AAAAAQAAAAAAAAAAAAAAAQAAAAcADyV1CkGH/xxcqv8/f8j/a6De/4Cx5v+Mten/jrbp/4687v+Ds+f/ a6Lf/z59x/8VU6f/BSt7/wAIIXUAAAAHAAAAAQAAAAAAAAAAAAAABAAAABEJKVC6IF2j/zZ3wv9Mi9P/ W5Ta/1SAs/8/Umj/MjQ2/z5SaP9Sfa//V5TY/0qJ1P8wb7z/FVKd/wAeS7oAAAARAAAABAAAAAAAAAAB AAAABwAAAB4fSn3nQHm8/1SR1v9fmN//ZKDh/yI0Rf8EBAT/BAQE/wQEBP8hM0X/Yp3g/1qV3P9MjNP/ MW21/xI+ducAAAAeAAAABwAAAAEAAAABAAAACgAAACo6aqH9XJPP/3Kn5f91ref/eq7m/wQFB/8AAAD/ AAAA/wAAAP8DBAb/cqbh/3Wt6f9qouH/UYnK/y9fm/0AAAAqAAAACgAAAAEAAAABAAAADAAAADNFbJrs cqbg/4e79f+Nv/T/ibbn/yEsOv8AAAD/AAAA/wAAAP8hLDr/ga7k/4m88/97se//Z5zY/zhjlOwAAAAz AAAADAAAAAEAAAABAAAADQAAADY5VnbRfa/l/5XH/f+dzP//k8Hu/1x2k/8fKDL/AwQE/x8nMv9adpP/ kbzu/5TG/f+Nwfn/dKbe/zRRcdEAAAA2AAAADQAAAAEAAAABAAAADAAAADMiMkWrhLPl/5/P//+q2f// p9D//5K43P9/nrv/dpSv/3ubu/+Os9r/oMz7/6PU//+Uxv7/eqrc/yAwQ6sAAAAzAAAADAAAAAEAAAAB AAAACgAAACoGCg10WHaV4aPS//+14f//teP//6vT9P+cw9z/lLnS/5vB3P+kzvT/r97//63e//+cyv// UnCR4QYJDXQAAAAqAAAACgAAAAEAAAABAAAABwAAAB4AAABRHSgzqXeawe615P//xO///8Tw//+/6/// u+b9/73r//+96///vOz//7Tf//93mb3uHigyqQAAAFEAAAAeAAAABwAAAAEAAAAAAAAABAAAABEAAAA2 AAAAbCItObR1kaznw/D//9D9///T/v//z/7//9D7///M+f//vOn//3OPrOckLTi0AAAAbAAAADYAAAAR AAAABAAAAAAAAAAAAAAAAQAAAAcAAAAdAAAARgAAAHQLDhGhQlJczXuYpeat0tv2y/X7/qzS2/Z7l6Xm QVFczQsOEaEAAAB0AAAARgAAAB0AAAAHAAAAAQAAAAAAAAAAAAAAAQAAAAIAAAAMAAAAIgAAAEYAAABs AAAAiwAAAJ0AAACnAAAAqgAAAKcAAACdAAAAiwAAAGwAAABGAAAAIgAAAAwAAAACAAAAAQAAAAAAAAAA AAAAAAAAAAEAAAADAAAACwAAAB0AAAA3AAAAUQAAAGcAAAB1AAAAegAAAHUAAABnAAAAUQAAADcAAAAd AAAACwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAcAAAASAAAAHwAAACoAAAAz AAAANgAAADMAAAAqAAAAHwAAABIAAAAHAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAEAAAADAAAABwAAAAoAAAAMAAAADQAAAAwAAAAKAAAABwAAAAMAAAABAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAB AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABUAAAEBAAMAAAABABUAAAEC AAMAAAAEAAAHmgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAESAAMAAAABAAEAAAEV AAMAAAABAAQAAAEWAAMAAAABABUAAAEXAAQAAAABAAAG5AEcAAMAAAABAAEAAAFSAAMAAAABAAEAAAFT AAMAAAAEAAAHoodzAAcAAAUoAAAHqgAAAAAACAAIAAgACAABAAEAAQABAAAFKGFwcGwCIAAAbW50clJH QiBYWVogB9IABQANAAwAAAAAYWNzcEFQUEwAAAAAYXBwbAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA 0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANclhZWgAA ASAAAAAUZ1hZWgAAATQAAAAUYlhZWgAAAUgAAAAUd3RwdAAAAVwAAAAUY2hhZAAAAXAAAAAsclRSQwAA AZwAAAAOZ1RSQwAAAZwAAAAOYlRSQwAAAZwAAAAOZGVzYwAAAawAAAA/Y3BydAAAAlQAAABIdmNndAAA AewAAAAwbmRpbgAAAhwAAAA4ZHNjbQAAApwAAAKMWFlaIAAAAAAAAHRLAAA+HQAAA8tYWVogAAAAAAAA WnMAAKymAAAXJlhZWiAAAAAAAAAoGAAAFVcAALgzWFlaIAAAAAAAAPNSAAEAAAABFs9zZjMyAAAAAAAB DEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1cnYAAAAAAAAAAQHNAABkZXNjAAAAAAAA ABRHZW5lcmljIFJHQiBQcm9maWxlAAAAAAAAAAAAAAAUR2VuZXJpYyBSR0IgUHJvZmlsZQAAdmNndAAA AAAAAAABAAC4UgAAAAAAAQAAAAC4UgAAAAAAAQAAAAC4UgAAAAAAAQAAbmRpbgAAAAAAAAA4AAChSAAA VwoAAEuFAACa4QAAJ64AABO2AABQDQAAVDkAAoAAAAKAAAACgAB0ZXh0AAAAAENvcHlyaWdodCAyMDAy IC0gMjAwMyBBcHBsZSBDb21wdXRlciBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgBtbHVjAAAAAAAA AA8AAAAMZW5VUwAAACYAAAJmZXNFUwAAACYAAAFqZGFESwAAAC4AAAHSZGVERQAAACwAAAGQZmlGSQAA ACgAAADEZnJGVQAAACgAAAESaXRJVAAAACgAAAI+bmxOTAAAACgAAAIAbm9OTwAAACYAAADscHRCUgAA ACYAAAFqc3ZTRQAAACYAAADsamFKUAAAABoAAAE6a29LUgAAABYAAAIoemhUVwAAABYAAAFUemhDTgAA ABYAAAG8AFkAbABlAGkAbgBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBpAGwAaQBHAGUAbgBlAHIAaQBz AGsAIABSAEcAQgAtAHAAcgBvAGYAaQBsAFAAcgBvAGYAaQBsACAARwDpAG4A6QByAGkAcQB1AGUAIABS AFYAQk4AgiwAIABSAEcAQgAgMNcw7TDVMKEwpDDrkBp1KAAgAFIARwBCACCCcl9pY8+P8ABQAGUAcgBm AGkAbAAgAFIARwBCACAARwBlAG4A6QByAGkAYwBvAEEAbABsAGcAZQBtAGUAaQBuAGUAcwAgAFIARwBC AC0AUAByAG8AZgBpAGxmbpAaACAAUgBHAEIAIGPPj/Blh072AEcAZQBuAGUAcgBlAGwAIABSAEcAQgAt AGIAZQBzAGsAcgBpAHYAZQBsAHMAZQBBAGwAZwBlAG0AZQBlAG4AIABSAEcAQgAtAHAAcgBvAGYAaQBl AGzHfLwYACAAUgBHAEIAINUEuFzTDMd8AFAAcgBvAGYAaQBsAG8AIABSAEcAQgAgAEcAZQBuAGUAcgBp AGMAbwBHAGUAbgBlAHIAaQBjACAAUgBHAEIAIABQAHIAbwBmAGkAbABlA 200 25 3 MQA 256 {{17, 359}, {47, 16}} YES 67239424 0 Width: 6 System controlTextColor 3 MAA 256 {{69, 359}, {39, 19}} YES -1804468672 -2143288320 YES YES allowsFloats formatterBehavior locale maximum minimum numberStyle roundingIncrement YES # # NaN YES YES 3 YES YES YES . , NO NO NO YES 6 System textBackgroundColor 256 {{113, 359}, {75, 16}} YES 67239424 0 characters 256 {{69, 337}, {39, 19}} YES -1804468672 -2143288320 YES YES allowsFloats formatterBehavior locale maximum minimum YES # # NaN 3 YES YES YES . , NO NO NO YES 256 {{113, 337}, {74, 16}} YES 67239424 0 lines 256 {{17, 336}, {47, 17}} YES 67239424 0 Height: 256 {{17, 285}, {89, 17}} YES 67239424 0 Plain text font: 256 {{180, 264}, {198, 17}} YES 70385217 1024 Font name 256 {{104, 280}, {77, 28}} YES 67239424 134348800 Change... -2038284033 1 200 25 256 {{104, 259}, {77, 28}} YES 67239424 134348800 Change... -2038284033 1 200 25 256 {{180, 285}, {198, 17}} YES 70385217 1024 Font name 256 {{17, 264}, {89, 17}} YES 67239424 0 Rich text font: 266 {{96, 175}, {287, 19}} YES -1804468671 4326400 YES 6 System textColor 268 {{17, 177}, {66, 14}} YES 67239424 4194304 Author: 6 System controlColor 3 MC42NjY2NjY2NjY3AA 266 {{96, 153}, {287, 19}} YES -1804468671 4326400 YES 268 {{17, 141}, {80, 28}} YES 67239424 4194304 Organization: 266 {{96, 131}, {287, 19}} YES -1804468671 4326400 YES 268 {{17, 133}, {66, 14}} YES 67239424 4194304 Copyright: 256 {{17, 24}, {195, 18}} YES 67239424 131072 Show ruler 1211912703 2 200 25 256 {{17, 84}, {195, 18}} YES 67239424 131072 Check spelling as you type 1211912703 2 200 25 256 {{17, 463}, {219, 14}} YES 67239424 4194304 Format LucidaGrande-Bold 11 3357 256 {{17, 382}, {134, 14}} YES 67239424 4194304 Window Size 256 {{17, 309}, {134, 14}} YES 67239424 4194304 Font 256 {{17, 237}, {134, 14}} YES 67239424 4194304 Properties 256 {{17, 106}, {134, 14}} YES 67239424 4194304 Options 256 {{17, 441}, {361, 18}} YES 67239424 4194304 Use the Format menu to choose settings for individual documents. 256 {{17, 202}, {369, 30}} YES 67239424 4194304 RG9jdW1lbnQgcHJvcGVydGllcyBjYW4gb25seSBiZSB1c2VkIGluIHJpY2ggdGV4dCBmaWxlcy4gQ2hv b3NlIApGaWxlID4gU2hvdyBQcm9wZXJ0aWVzIHRvIGNoYW5nZSBzZXR0aW5ncyBmb3IgaW5kaXZpZHVh bCBkb2N1bWVudHMuA 256 {{17, 64}, {195, 18}} YES 67239424 131072 Check grammar with spelling 1211912703 2 200 25 256 {{17, 44}, {195, 18}} YES 67239424 131072 Correct spelling automatically 1211912703 2 200 25 256 {{250, 64}, {135, 18}} YES 67239424 131072 Smart quotes 1211912703 2 200 25 256 {{250, 44}, {135, 18}} YES 67239424 131072 Smart dashes 1211912703 2 200 25 256 {{250, 24}, {135, 18}} YES 67239424 131072 Smart links 1211912703 2 200 25 256 {{250, 4}, {135, 18}} YES 67239424 131072 Text replacement 1211912703 2 200 25 256 {{17, 4}, {195, 18}} YES 67239424 131072 Data detectors 1211912703 2 200 25 256 {{250, 84}, {135, 18}} YES 67239424 131072 Smart copy/paste 1211912703 2 200 25 {{10, 33}, {397, 477}} New Document 256 YES 256 {{17, 418}, {285, 18}} YES 67239424 131072 Ignore rich text commands in RTF files 1211912703 2 200 25 256 {{17, 439}, {285, 18}} YES 67239424 131072 Ignore rich text commands in HTML files 1211912703 2 200 25 256 {{17, 363}, {259, 18}} YES 67239424 131072 Delete the automatic backup file 1211912703 0 200 25 256 {{17, 343}, {259, 18}} YES 67239424 131072 Add ".txt" extension to plain text files 1211912703 2 200 25 256 {{111, 226}, {275, 22}} YES -2080244160 132096 -2038284033 1 400 75 Automatic (DO NOT REMOVE) 1048576 2147483647 1 NSImage NSMenuCheckmark NSImage NSMenuMixedState _popUpItemAction: -1 YES OtherViews YES YES 3 YES YES 1 256 {{111, 201}, {275, 22}} YES 67239488 132096 -2038284033 1 400 75 Automatic (DO NOT REMOVE) 1048576 2147483647 1 _popUpItemAction: -1 YES OtherViews YES YES 3 YES YES 1 256 {{17, 228}, {85, 17}} YES 67239424 0 Opening files: 256 {{17, 203}, {85, 17}} YES 67239424 0 Saving files: 256 {{17, 387}, {134, 14}} YES 67239424 4194304 When Saving a File: 256 {{17, 463}, {134, 14}} YES 67239424 4194304 When Opening a File: 256 {{17, 255}, {248, 14}} YES 67239424 4194304 Plain Text File Encoding 256 {{17, 172}, {248, 14}} YES 67239424 4194304 HTML Saving Options 256 {{17, 74}, {154, 18}} YES -2080244224 131072 Preserve white space 1211912703 2 200 25 256 {{17, 146}, {98, 17}} YES 67239424 0 Document type: 256 {{17, 97}, {98, 17}} YES 67239424 0 Encoding: 256 {{111, 144}, {275, 22}} YES -2080244160 132096 109199615 1 400 75 XHTML 1.0 Transitional 1048576 2147483647 1 _popUpItemAction: 3 YES OtherViews YES HTML 4.01 Strict 1048576 2147483647 _popUpItemAction: HTML 4.01 Transitional 1048576 2147483647 _popUpItemAction: 1 XHTML 1.0 Strict 1048576 2147483647 _popUpItemAction: 2 3 3 YES YES 1 256 {{17, 122}, {98, 16}} YES 67239424 0 Styling: 256 {{111, 119}, {275, 22}} YES -2080244160 132096 109199615 1 400 75 Embedded CSS 1048576 2147483647 1 _popUpItemAction: YES OtherViews YES Inline CSS 1048576 2147483647 _popUpItemAction: 1 No CSS 1048576 2147483647 _popUpItemAction: 2 3 YES YES 1 256 {{111, 94}, {275, 22}} YES 67239488 132096 -2038284033 1 400 75 YES OtherViews YES -1 3 YES YES 1 256 {{17, 312}, {248, 14}} YES 67239424 4194304 Autosaving 256 {{197, 285}, {189, 22}} YES 71433792 133120 109199615 1 LucidaGrande 11 16 400 75 Every 30 seconds 1048576 2147483647 1 _popUpItemAction: 30 YES OtherViews YES Every 15 seconds 1048576 2147483647 _popUpItemAction: 15 Every minute 1048576 2147483647 _popUpItemAction: 60 Every 5 minutes 1048576 2147483647 _popUpItemAction: 300 Never 1048576 2147483647 _popUpItemAction: 1 3 YES YES 1 256 {{17, 288}, {178, 16}} YES 67239424 0 Autosave modified documents: {{10, 33}, {397, 477}} Open and Save 0 YES YES YES {449, 574} {{0, 0}, {1920, 1178}} {154.928, 27} {1.79769e+308, 1.79769e+308} YES YES changeRichTextFont: 126 changePlainTextFont: 127 revertToDefault: 132 delegate 138 delegate 446 selectedTag: values.AutosaveDelay selectedTag: values.AutosaveDelay selectedTag values.AutosaveDelay 2 581 title 585 title 586 title 587 title 588 title 589 title 590 title 591 title 592 title 593 title 595 value: values.ShowPageBreaks value: values.ShowPageBreaks value values.ShowPageBreaks 2 100578 delegate 100581 value: values.HeightInChars value: values.HeightInChars value values.HeightInChars 2 100583 delegate 100584 value: values.author value: values.author value values.author 2 100585 value: values.company value: values.company value values.company 2 100586 value: values.copyright value: values.copyright value values.copyright 2 100587 value: values.CheckSpellingWhileTyping value: values.CheckSpellingWhileTyping value values.CheckSpellingWhileTyping 2 100588 value: values.CheckGrammarWithSpelling value: values.CheckGrammarWithSpelling value values.CheckGrammarWithSpelling 2 100589 value: values.ShowRuler value: values.ShowRuler value values.ShowRuler 2 100590 value: values.SmartCopyPaste value: values.SmartCopyPaste value values.SmartCopyPaste 2 100591 value: values.SmartQuotes value: values.SmartQuotes value values.SmartQuotes 2 100592 value: values.SmartLinks value: values.SmartLinks value values.SmartLinks 2 100593 value: values.IgnoreHTML value: values.IgnoreHTML value values.IgnoreHTML 2 100594 value: values.IgnoreRichText value: values.IgnoreRichText value values.IgnoreRichText 2 100595 value: values.DeleteBackup value: values.DeleteBackup value values.DeleteBackup 2 100596 value: values.AddExtensionToNewPlainTextFiles value: values.AddExtensionToNewPlainTextFiles value values.AddExtensionToNewPlainTextFiles 2 100597 selectedTag: values.RichText selectedTag: values.RichText selectedTag values.RichText 2 100598 title 100599 title 100600 title 100601 value: values.PreserveWhitespace value: values.PreserveWhitespace value values.PreserveWhitespace 2 100602 selectedTag: HTMLStylingMode selectedTag: HTMLStylingMode selectedTag HTMLStylingMode 2 100609 selectedTag: HTMLDocumentType selectedTag: HTMLDocumentType selectedTag HTMLDocumentType 2 100613 window 100618 value: values.WidthInChars value: values.WidthInChars value values.WidthInChars NSValidatesImmediately 2 100619 value: plainTextFont value: plainTextFont value plainTextFont NSValueTransformerName FontNameTransformer 2 100639 value: richTextFont value: richTextFont value richTextFont NSValueTransformerName FontNameTransformer 2 100640 selectedObject: values.PlainTextEncoding selectedObject: values.PlainTextEncoding selectedObject values.PlainTextEncoding 2 100641 selectedObject: values.PlainTextEncodingForWrite selectedObject: values.PlainTextEncodingForWrite selectedObject values.PlainTextEncodingForWrite 2 100642 selectedObject: values.HTMLEncoding selectedObject: values.HTMLEncoding selectedObject values.HTMLEncoding 2 100643 value: values.CorrectSpellingAutomatically value: values.CorrectSpellingAutomatically value values.CorrectSpellingAutomatically 2 100649 value: values.SmartDashes value: values.SmartDashes value values.SmartDashes 2 100651 value: values.TextReplacement value: values.TextReplacement value values.TextReplacement 2 100655 value: values.DataDetectors value: values.DataDetectors value values.DataDetectors 2 100659 YES 0 -2 File's Owner -1 First Responder 9 YES Panel 19 YES 54 YES 365 YES 366 YES 367 YES 171 YES 172 YES 175 YES 177 YES 180 YES 181 YES 200 YES 220 YES 407 YES 408 YES 409 YES 410 YES 413 YES 417 YES 418 YES 421 YES 456 YES 457 YES 491 YES 560 YES 572 YES 577 YES 368 YES 369 YES 2 YES 3 YES 13 YES 14 YES 21 YES 539 540 35 YES 36 YES 37 YES 38 YES 40 YES 41 YES 52 YES 69 YES 70 YES 224 YES 262 YES 397 YES 398 YES 399 YES 400 YES 401 YES 402 YES 426 YES 427 YES 428 YES 429 YES 430 YES 471 YES 472 YES 543 YES 547 YES 549 YES 551 YES 569 Shared Defaults 100054 100171 100172 100175 100177 YES 100180 100181 YES 100200 100220 100407 100408 100409 100410 YES 100413 100417 100418 100421 100456 100457 YES 100491 YES 100560 100572 YES 100577 100002 100003 100013 100014 100035 100036 100037 YES 100038 YES 100040 100041 100052 100069 100070 100224 100262 100397 100398 100399 100400 100401 100402 100426 100427 100428 100429 100430 100471 100472 100543 100547 100549 100551 100021 174 YES 179 173 YES 184 411 YES 455 452 451 412 458 YES 465 464 460 492 YES 573 YES 580 578 576 575 574 -3 Application 100580 100582 100644 YES 100645 100646 YES 100647 100652 YES 100653 100656 YES 100657 YES YES -3.IBPluginDependency 100002.IBPluginDependency 100003.IBPluginDependency 100013.IBPluginDependency 100014.IBPluginDependency 100021.IBPluginDependency 100035.IBPluginDependency 100036.IBPluginDependency 100037.IBPluginDependency 100038.IBPluginDependency 100040.IBPluginDependency 100041.IBPluginDependency 100052.IBPluginDependency 100054.IBPluginDependency 100069.IBPluginDependency 100070.IBPluginDependency 100171.IBPluginDependency 100172.IBPluginDependency 100175.IBPluginDependency 100177.CustomClassName 100177.IBPluginDependency 100180.IBPluginDependency 100181.CustomClassName 100181.IBPluginDependency 100200.IBPluginDependency 100220.IBPluginDependency 100224.IBPluginDependency 100262.IBPluginDependency 100397.IBPluginDependency 100398.IBPluginDependency 100399.IBPluginDependency 100400.IBPluginDependency 100401.IBPluginDependency 100402.IBPluginDependency 100407.IBPluginDependency 100408.IBPluginDependency 100409.IBPluginDependency 100410.IBPluginDependency 100413.IBPluginDependency 100417.IBPluginDependency 100418.IBPluginDependency 100421.IBPluginDependency 100426.IBPluginDependency 100427.IBPluginDependency 100428.IBPluginDependency 100429.IBPluginDependency 100430.IBPluginDependency 100456.IBPluginDependency 100457.IBPluginDependency 100471.IBPluginDependency 100472.IBPluginDependency 100491.CustomClassName 100491.IBPluginDependency 100543.IBPluginDependency 100547.IBPluginDependency 100549.IBPluginDependency 100551.IBPluginDependency 100560.IBPluginDependency 100572.IBPluginDependency 100577.IBPluginDependency 100580.IBNumberFormatterLocalizesFormatMetadataKey 100580.IBPluginDependency 100582.IBNumberFormatterLocalizesFormatMetadataKey 100582.IBPluginDependency 100644.IBAttributePlaceholdersKey 100644.IBPluginDependency 100644.ImportedFromIB2 100645.IBPluginDependency 100646.IBAttributePlaceholdersKey 100646.IBPluginDependency 100646.ImportedFromIB2 100647.IBPluginDependency 100652.IBAttributePlaceholdersKey 100652.IBPluginDependency 100652.ImportedFromIB2 100653.IBPluginDependency 100656.IBAttributePlaceholdersKey 100656.IBPluginDependency 100656.ImportedFromIB2 100657.IBPluginDependency 13.IBPluginDependency 13.ImportedFromIB2 14.IBPluginDependency 14.ImportedFromIB2 171.IBAttributePlaceholdersKey 171.IBPluginDependency 171.ImportedFromIB2 172.IBPluginDependency 172.ImportedFromIB2 173.IBEditorWindowLastContentRect 173.IBPluginDependency 173.ImportedFromIB2 174.IBEditorWindowLastContentRect 174.IBPluginDependency 174.ImportedFromIB2 175.IBPluginDependency 175.ImportedFromIB2 177.IBAttributePlaceholdersKey 177.IBPluginDependency 177.ImportedFromIB2 179.IBPluginDependency 179.ImportedFromIB2 180.IBAttributePlaceholdersKey 180.IBPluginDependency 180.ImportedFromIB2 181.IBAttributePlaceholdersKey 181.IBPluginDependency 181.ImportedFromIB2 184.IBPluginDependency 184.ImportedFromIB2 19.IBPluginDependency 19.ImportedFromIB2 2.IBPluginDependency 2.ImportedFromIB2 200.IBPluginDependency 200.ImportedFromIB2 21.IBPluginDependency 21.ImportedFromIB2 220.IBAttributePlaceholdersKey 220.IBPluginDependency 220.ImportedFromIB2 224.IBAttributePlaceholdersKey 224.IBPluginDependency 224.ImportedFromIB2 262.IBAttributePlaceholdersKey 262.IBPluginDependency 262.ImportedFromIB2 3.IBPluginDependency 3.ImportedFromIB2 35.IBPluginDependency 35.ImportedFromIB2 36.IBPluginDependency 36.ImportedFromIB2 365.IBPluginDependency 365.ImportedFromIB2 366.IBPluginDependency 366.ImportedFromIB2 367.IBPluginDependency 367.ImportedFromIB2 368.IBPluginDependency 368.ImportedFromIB2 369.IBPluginDependency 369.ImportedFromIB2 37.IBPluginDependency 37.ImportedFromIB2 38.IBPluginDependency 38.ImportedFromIB2 397.IBPluginDependency 397.ImportedFromIB2 398.IBPluginDependency 398.ImportedFromIB2 399.IBPluginDependency 399.ImportedFromIB2 40.IBPluginDependency 40.ImportedFromIB2 400.IBPluginDependency 400.ImportedFromIB2 401.IBPluginDependency 401.ImportedFromIB2 402.IBPluginDependency 402.ImportedFromIB2 407.IBPluginDependency 407.ImportedFromIB2 408.IBPluginDependency 408.ImportedFromIB2 409.IBPluginDependency 409.ImportedFromIB2 41.IBPluginDependency 41.ImportedFromIB2 410.IBAttributePlaceholdersKey 410.IBPluginDependency 410.ImportedFromIB2 411.IBEditorWindowLastContentRect 411.IBPluginDependency 411.ImportedFromIB2 412.IBPluginDependency 412.ImportedFromIB2 413.IBPluginDependency 413.ImportedFromIB2 417.IBPluginDependency 417.ImportedFromIB2 418.IBAttributePlaceholdersKey 418.IBPluginDependency 418.ImportedFromIB2 421.IBPluginDependency 421.ImportedFromIB2 426.IBPluginDependency 426.ImportedFromIB2 427.IBPluginDependency 427.ImportedFromIB2 428.IBPluginDependency 428.ImportedFromIB2 429.IBPluginDependency 429.ImportedFromIB2 430.IBPluginDependency 430.ImportedFromIB2 451.IBPluginDependency 451.ImportedFromIB2 452.IBPluginDependency 452.ImportedFromIB2 455.IBPluginDependency 455.ImportedFromIB2 456.IBPluginDependency 456.ImportedFromIB2 457.IBAttributePlaceholdersKey 457.IBPluginDependency 457.ImportedFromIB2 458.IBEditorWindowLastContentRect 458.IBPluginDependency 458.ImportedFromIB2 460.IBPluginDependency 460.ImportedFromIB2 464.IBPluginDependency 464.ImportedFromIB2 465.IBPluginDependency 465.ImportedFromIB2 471.IBPluginDependency 471.ImportedFromIB2 472.IBPluginDependency 472.ImportedFromIB2 491.IBAttributePlaceholdersKey 491.IBPluginDependency 491.ImportedFromIB2 492.IBEditorWindowLastContentRect 492.IBPluginDependency 492.ImportedFromIB2 52.IBAttributePlaceholdersKey 52.IBPluginDependency 52.ImportedFromIB2 539.IBAttributePlaceholdersKey 539.IBPluginDependency 539.ImportedFromIB2 54.IBAttributePlaceholdersKey 54.IBPluginDependency 54.ImportedFromIB2 540.IBAttributePlaceholdersKey 540.IBPluginDependency 540.ImportedFromIB2 543.IBAttributePlaceholdersKey 543.IBPluginDependency 543.ImportedFromIB2 547.IBAttributePlaceholdersKey 547.IBPluginDependency 547.ImportedFromIB2 549.IBAttributePlaceholdersKey 549.IBPluginDependency 549.ImportedFromIB2 551.IBAttributePlaceholdersKey 551.IBPluginDependency 551.ImportedFromIB2 560.IBPluginDependency 560.ImportedFromIB2 569.IBPluginDependency 569.ImportedFromIB2 572.IBAttributePlaceholdersKey 572.IBPluginDependency 572.ImportedFromIB2 573.IBEditorWindowLastContentRect 573.IBPluginDependency 573.ImportedFromIB2 574.IBPluginDependency 574.ImportedFromIB2 575.IBPluginDependency 575.ImportedFromIB2 576.IBPluginDependency 576.ImportedFromIB2 577.IBPluginDependency 577.ImportedFromIB2 578.IBPluginDependency 578.ImportedFromIB2 580.IBPluginDependency 580.ImportedFromIB2 69.IBPluginDependency 69.ImportedFromIB2 70.IBPluginDependency 70.ImportedFromIB2 9.IBEditorWindowLastContentRect 9.IBPluginDependency 9.IBWindowTemplateEditedContentRect 9.ImportedFromIB2 9.windowTemplate.hasMinSize 9.windowTemplate.maxSize 9.windowTemplate.minSize YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin EncodingPopUpButtonCell com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin EncodingPopUpButtonCell com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin EncodingPopUpButtonCell com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Spelling to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Substitutions to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Substitutions to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Substitutions to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Select to open RTF files as plain text with no formatting com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{123, 847}, {275, 20}} com.apple.InterfaceBuilder.CocoaPlugin {{123, 822}, {275, 20}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose the default text encoding to use when saving Plain Text files. Choose Automatic to save files with the same encoding used when opened. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Select to open HTML files as plain text with no formatting com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose the default text encoding to use when opening Plain Text files. If you don't want to use a specific encoding, choose Automatic. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Specify the default setting for the save option which automatically adds ".txt" to the supplied file name if the name does not have a known extension. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Spelling to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Press Command-R to view or hide the ruler in an open document. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose the document type for saved HTML files. com.apple.InterfaceBuilder.CocoaPlugin {{123, 714}, {275, 71}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Select to include HTML code that preserves the blank areas currently in your document. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose the form of cascading style sheets (CSS) you want, otherwise choose No CSS. com.apple.InterfaceBuilder.CocoaPlugin {{123, 706}, {275, 54}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose the text encoding for saved HTML files. com.apple.InterfaceBuilder.CocoaPlugin {{123, 731}, {275, 4}} com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Select to make text wrap to document margins rather than window boundaries. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Select to create files that allow special text or document formatting. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Restore all preferences to their initial values com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Select to create files that don't contain formatting. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Spelling to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Substitutions to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Substitutions to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Choose Edit > Substitutions to change this option for individual documents. com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin ToolTip ToolTip Specify how often TextEdit should save side-copies of documents being modified. These "autosave" copies can be used to recover contents of unsaved documents. com.apple.InterfaceBuilder.CocoaPlugin {{209, 838}, {189, 88}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{184, 432}, {449, 574}} com.apple.InterfaceBuilder.CocoaPlugin {{184, 432}, {449, 574}} {3.40282e+38, 3.40282e+38} {154.928, 5} YES YES YES YES 100659 YES EncodingPopUpButtonCell NSPopUpButtonCell IBProjectSource EncodingManager.h FirstResponder NSObject : id IBUserSource Preferences NSWindowController YES YES changePlainTextFont: changeRichTextFont: revertToDefault: YES id id id IBProjectSource Preferences.h Preferences NSWindowController IBUserSource YES NSActionCell NSCell IBFrameworkSource AppKit.framework/Headers/NSActionCell.h NSApplication NSResponder IBFrameworkSource AppKit.framework/Headers/NSApplication.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSApplicationScripting.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSColorPanel.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSHelpManager.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSPageLayout.h NSApplication IBFrameworkSource AppKit.framework/Headers/NSUserInterfaceItemSearching.h NSButton NSControl IBFrameworkSource AppKit.framework/Headers/NSButton.h NSButtonCell NSActionCell IBFrameworkSource AppKit.framework/Headers/NSButtonCell.h NSCell NSObject IBFrameworkSource AppKit.framework/Headers/NSCell.h NSControl NSView IBFrameworkSource AppKit.framework/Headers/NSControl.h NSController NSObject IBFrameworkSource AppKit.framework/Headers/NSController.h NSFormatter NSObject IBFrameworkSource Foundation.framework/Headers/NSFormatter.h NSMatrix NSControl IBFrameworkSource AppKit.framework/Headers/NSMatrix.h NSMenu NSObject IBFrameworkSource AppKit.framework/Headers/NSMenu.h NSMenuItem NSObject IBFrameworkSource AppKit.framework/Headers/NSMenuItem.h NSMenuItemCell NSButtonCell IBFrameworkSource AppKit.framework/Headers/NSMenuItemCell.h NSNumberFormatter NSFormatter IBFrameworkSource Foundation.framework/Headers/NSNumberFormatter.h NSObject IBFrameworkSource AppKit.framework/Headers/NSAccessibility.h NSObject NSObject NSObject NSObject NSObject IBFrameworkSource AppKit.framework/Headers/NSDictionaryController.h NSObject IBFrameworkSource AppKit.framework/Headers/NSDragging.h NSObject IBFrameworkSource AppKit.framework/Headers/NSFontManager.h NSObject IBFrameworkSource AppKit.framework/Headers/NSFontPanel.h NSObject IBFrameworkSource AppKit.framework/Headers/NSKeyValueBinding.h NSObject NSObject IBFrameworkSource AppKit.framework/Headers/NSNibLoading.h NSObject IBFrameworkSource AppKit.framework/Headers/NSOutlineView.h NSObject IBFrameworkSource AppKit.framework/Headers/NSPasteboard.h NSObject IBFrameworkSource AppKit.framework/Headers/NSSavePanel.h NSObject IBFrameworkSource AppKit.framework/Headers/NSTableView.h NSObject IBFrameworkSource AppKit.framework/Headers/NSToolbarItem.h NSObject IBFrameworkSource AppKit.framework/Headers/NSView.h NSObject IBFrameworkSource Foundation.framework/Headers/NSArchiver.h NSObject IBFrameworkSource Foundation.framework/Headers/NSClassDescription.h NSObject IBFrameworkSource Foundation.framework/Headers/NSError.h NSObject IBFrameworkSource Foundation.framework/Headers/NSFileManager.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyValueCoding.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyValueObserving.h NSObject IBFrameworkSource Foundation.framework/Headers/NSKeyedArchiver.h NSObject IBFrameworkSource Foundation.framework/Headers/NSObject.h NSObject IBFrameworkSource Foundation.framework/Headers/NSObjectScripting.h NSObject IBFrameworkSource Foundation.framework/Headers/NSPortCoder.h NSObject IBFrameworkSource Foundation.framework/Headers/NSRunLoop.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptClassDescription.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptKeyValueCoding.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptObjectSpecifiers.h NSObject IBFrameworkSource Foundation.framework/Headers/NSScriptWhoseTests.h NSObject IBFrameworkSource Foundation.framework/Headers/NSThread.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURL.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURLConnection.h NSObject IBFrameworkSource Foundation.framework/Headers/NSURLDownload.h NSPopUpButton NSButton IBFrameworkSource AppKit.framework/Headers/NSPopUpButton.h NSPopUpButtonCell NSMenuItemCell IBFrameworkSource AppKit.framework/Headers/NSPopUpButtonCell.h NSResponder IBFrameworkSource AppKit.framework/Headers/NSInterfaceStyle.h NSResponder NSObject IBFrameworkSource AppKit.framework/Headers/NSResponder.h NSTabView NSView IBFrameworkSource AppKit.framework/Headers/NSTabView.h NSTabViewItem NSObject IBFrameworkSource AppKit.framework/Headers/NSTabViewItem.h NSTextField NSControl IBFrameworkSource AppKit.framework/Headers/NSTextField.h NSTextFieldCell NSActionCell IBFrameworkSource AppKit.framework/Headers/NSTextFieldCell.h NSUserDefaultsController NSController IBFrameworkSource AppKit.framework/Headers/NSUserDefaultsController.h NSView IBFrameworkSource AppKit.framework/Headers/NSClipView.h NSView NSView IBFrameworkSource AppKit.framework/Headers/NSRulerView.h NSView NSResponder NSWindow IBFrameworkSource AppKit.framework/Headers/NSDrawer.h NSWindow NSResponder IBFrameworkSource AppKit.framework/Headers/NSWindow.h NSWindow IBFrameworkSource AppKit.framework/Headers/NSWindowScripting.h NSWindowController NSResponder showWindow: id IBFrameworkSource AppKit.framework/Headers/NSWindowController.h 0 com.apple.InterfaceBuilder.CocoaPlugin.macosx com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 YES ../TextEdit.xcodeproj 3 TextEdit-master/English.lproj/Preferences.nib/keyedobjects.nib000066400000000000000000001522611271274630500250120ustar00rootroot00000000000000bplist00X$versionX$objectsY$archiverT$top-15<?@DH #-U_`jwx}#-.8ABJKLOTWXbn ,-./349:DLMNVWabltu"#&01;EFOPZ[eopyz    !"+,-:;>GHUVYbcpqt}~  7@AJWX[ders{|  #,-6ITZ[^bkltuv~ #.3458?JKLWXYdefklu}~      + 0 1 2 5 = I J K W X Y e f g r s t | }          " # ( ) . / 4 5 : ; @ A F G L M R S ] a f g h i n u v w ~          " # $ + , - 4 5 6 = > ? F G H O P Q Z [ \ b c d k l m u v w } ~  + . / h      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./01234567GLMRW\afkpuzU$null  !"#$%&'()*+,_NSAccessibilityOidsKeys_NSVisibleWindows]NSObjectsKeys_NSClassesValues[NSFrameworkVNSRoot_NSAccessibilityOidsValues]NSClassesKeys\NSOidsValuesV$classYNSNextOidZNSOidsKeys]NSConnections_NSObjectsValues[NSNamesKeys_NSAccessibilityConnectors]NSFontManager]NSNamesValuesaM de݀f./0[NSClassName234YNS.string[Preferences6789Z$classnameX$classes_NSMutableString8:;XNSStringXNSObject67=>^NSCustomObject=;_IBCocoaFrameworkABCZNS.objects67EF\NSMutableSetEG;UNSSetAIJ6>KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ÁŁƁǁȁˁ́ρӁԁՁׁ؁فځہ܁ށ !$'*-0369<?BEHKNTW] WNSLabel]NSDestinationXNSSource \NSWindowRect]NSWindowTitleYNSMaxSize\NSWindowViewYNSMinSize_NSWindowContentMaxSize\NSScreenRect_NSWindowContentMinSize_NSWindowBackingYNSWTFlags]NSWindowClass[NSViewClass_NSWindowStyleMask x_{{380, 492}, {449, 574}}[PreferencesXNSWindow23TView_{1.79769e+308, 1.79769e+308}\{154.928, 5}[NSSuperviewXNSvFlags_NSNextResponder[NSFrameSizeXNSWindowZNSSubviews AIŀ6ǀ YNSEnabledWNSFrameVNSCell _{{14, 7}, {189, 32}}_NSPeriodicInterval[NSCellFlags]NSButtonFlags\NSCellFlags2_NSAlternateContents_NSKeyEquivalent_NSAlternateImageZNSContents]NSControlViewYNSSupport_NSPeriodicDelay^NSButtonFlags2@_Restore All DefaultsVNSNameVNSSizeXNSfFlags#@*\LucidaGrande67VNSFont;P23P67\NSButtonCell;\NSActionCellVNSCell67XNSButton  ;YNSControlVNSView[NSResponder  _NSSelectedTabViewItem^NSTabViewItemsVNSFontYNSTvFlags_NSAllowTruncatedLabels_NSDrawsBackground ! AI!6""$%&),]NSNextKeyViewˁ   #AI/6%0123456789:;<=>?@ABCDE%GHIJKLMNOPQRST$-PR\{}xŀˀ&̀ـǀ$GXY"[" &%'""_{{180, 422}, {102, 18}}$2cd"fg" PҀӀ"Z"klmnqr0uvH =EX{21, 21}AI6?AD@A_NSTIFFRepresentationCBO MM*g%%%---$$$g H CCCbbbzzzxxxdddBBBHK<<>>wwwooo222 """uvvvhhhuHHHAAAqqq礤hhh **  33  6jjjggg6  3>>>===3  * t t* Q///---Q6l222222l6FtUUU͗UUUtF "FllF"  7QguzugQ7 *363* RSs((appl mntrRGB XYZ  acspAPPLappl-appl rXYZ gXYZ4bXYZHwtpt\chadp,rTRCgTRCbTRCdesc?cprtTHvcgt0ndin8dscmXYZ tK>XYZ Zs&XYZ (W3XYZ Rsf32 B&lcurvdescGeneric RGB ProfileGeneric RGB ProfilevcgtRRRndin8HW K'P T9textCopyright 2002 - 2003 Apple Computer Inc., all rights reserved.mluc enUS&fesES&jdaDK.deDE,fiFI(frFU(itIT(>nlNL(noNO&ptBR&jsvSE&jaJP:koKR(zhTWTzhCNYleinen RGB-profiiliGenerisk RGB-profilProfil Gnrique RVBN, RGB 000000u( RGB r_icϏPerfil RGB GenricoAllgemeines RGB-Profilfn RGB cϏeNGenerel RGB-beskrivelseAlgemeen RGB-profiel| RGB \ |Profilo RGB GenericoGeneric RGB Profile67_NSBitmapImageRep;_NSBitmapImageRepZNSImageRep67;\NSColorSpaceWNSWhiteFD0 067WNSColor;67WNSImage;   GJ IEX{21, 21}AI6KAD@LCMO MM*g   gH /11[VVnrr{{oosXXh44Q( HK I00iiww==}CK G;GiUh!0> %u A\?kk>}S+{!u )P ]6wL[T?Rh246>RhR}WJ0oRKJ}@yT_d"4E!3EbZL1m>v *:j\ruzrujQ/_*  3Elr!,:!,:{g8c3  69Vv}\v(2'2Zvt4Qq6  3"2Ev{z 0C3  * tXvRp t* Q(3ww(2Q6l"-9us$-8l6Ft BR\{{AQ\ tF "FllF"  7QguzugQ7 *363* RSs((appl mntrRGB XYZ  acspAPPLappl-appl rXYZ gXYZ4bXYZHwtpt\chadp,rTRCgTRCbTRCdesc?cprtTHvcgt0ndin8dscmXYZ tK>XYZ Zs&XYZ (W3XYZ Rsf32 B&lcurvdescGeneric RGB ProfileGeneric RGB ProfilevcgtRRRndin8HW K'P T9textCopyright 2002 - 2003 Apple Computer Inc., all rights reserved.mluc enUS&fesES&jdaDK.deDE,fiFI(frFU(itIT(>nlNL(noNO&ptBR&jsvSE&jaJP:koKR(zhTWTzhCNYleinen RGB-profiiliGenerisk RGB-profilProfil Gnrique RVBN, RGB 000000u( RGB r_icϏPerfil RGB GenricoAllgemeines RGB-Profilfn RGB cϏeNGenerel RGB-beskrivelseAlgemeen RGB-profiel| RGB \ |Profilo RGB GenericoGeneric RGB ProfileFB167 !XNSMatrix"  ;XNSMatrix$3&'")g" RQS"Z"_{{17, 359}, {47, 16}}$412"4g" \[]"Z"9:;2=>u[NSTextColorTPYU)NVWidth:CDEGHI]NSCatalogName[NSColorNameVFWXVSystem_controlTextColorNFB067PQ_NSTextFieldCellPRS;\NSActionCellVNSCell67UV[NSTextFieldU  ;_{{69, 359}, {39, 19}}$7[\"^g" xwy"Z"9cde3=>ulm[NSFormatterq@@RYU) ^uopqrstuvwxyz{|}~++++\NS.localizedVNS.nil_NS.negativeformat[NS.rounding_NS.negativeattrs_NS.positiveformatWNS.zero_NS.positiveattrsVNS.nanVNS.maxVNS.minZNS.decimal[NS.thousand_NS.hasthousands_NS.allowsfloats]NS.attributes jpjkfhrs_tAWNS.keysi`abcdef@@@ghWmaximum[numberStyle_roundingIncrement\allowsFloats_formatterBehaviorWminimum#@È#?67_NSMutableDictionary;\NSDictionaryQ#\NSAttributesXNSStringmolSNaNAn67;67_NSAttributedString;_NSAttributedString_NS.raise.dividebyzero_NS.raise.underflow_NS.raise.overflow_NS.roundingmode q 67_NSDecimalNumberHandler;_NSDecimalNumberHandlerQ.Q,67_NSNumberFormatter;_NSNumberFormatter[NSFormatterCDEHVFvN_textBackgroundColor_{{113, 359}, {75, 16}}$5"g" {"Z"94=>uz\YU)NZcharacters$6"g" }|~"Z"_{{69, 337}, {39, 19}}$H"g" "Z"9c5=>u mq@@{YU) uopqrstuvwxyz{|}~++++ jjrstA"'icde`)@#?#@È2moSNaN q _{{113, 337}, {74, 16}}$8=>"@g" Հր"Z"9EF6=>u}YU)NUlines_{{17, 336}, {47, 17}}9OP7=>uxYU)NWHeight:$=Z["]g" "Z"_{{17, 285}, {89, 17}}$:ef"hg" "Z"9mn8=>uYU)N_Plain text font:$Ixy"{g" "Z"_{{180, 264}, {198, 17}}$L"g" ـ؀ڀ"Z"99=>u1AYU)NYFont name$;"" ""_{{104, 280}, {77, 28}}$<"" ""u:u@))YChange..._{{104, 259}, {77, 28}}$9"g" "Z"u;u@))_{{180, 285}, {198, 17}}9<=>u1AYU)N_{{17, 264}, {89, 17}}9==>uYU)N_Rich text font:$A"g" " Z"_{{96, 175}, {287, 19}}$@"g" " Z"9>=umqABY) uCDEHIVFXYtextColor$>  "g" " Z"_{{17, 177}, {66, 14}}9?=>u@YU)WAuthor:CDE H!VF\controlColor%FM0.6666666667$C)*",g" " Z"_{{96, 153}, {287, 19}}$B45"7g" " Z"9<=@=umqABY) u_{{17, 141}, {80, 28}}9GHIA=>u@YU)]Organization:$JST"Vg" " Z"_{{96, 131}, {287, 19}}$E^_"ag" ŀ܀݀"Z"9fgB=umqABY) u_{{17, 133}, {66, 14}}9qrsC=>u@YU)ZCopyright:|}"" €""_{{17, 24}, {195, 18}}qDuH@πˀYUЀVFormatހ#@& _LucidaGrande-Bold_{{17, 382}, {134, 14}}9G=>@Ԁ&YUЀ[Window Size_{{17, 309}, {134, 14}}9H=>@׀YUЀTFont_{{17, 237}, {134, 14}}$?"g" "Z"9I=>@ۀYUЀZProperties_{{17, 106}, {134, 14}}9 J=>@ހYUЀWOptions_{{17, 441}, {361, 18}}9K=>u@̀YU)_@Use the Format menu to choose settings for individual documents._{{17, 202}, {369, 30}}9#$%L=>u@ـYU)_Document properties can only be used in rich text files. Choose File > Show Properties to change settings for individual documents._{{17, 64}, {195, 18}}./013q5Mu9H)<_Automatic (DO NOT REMOVE).^NSResourceName765WNSImage_NSMenuCheckmark67 _NSCustomResource;. 795_NSMenuMixedState__popUpItemAction:67ZNSMenuItem;23ZOtherViewsAI6ށ167VNSMenu;67^NSClassSwapper;67!"]NSPopUpButton!  ;$,&') CBD@_{{111, 201}, {275, 22}}$.013g \[]Z.&89:;=AuPuHAF@@?K )0/)EJK8'QGF4D;83UuYI >)H__popUpItemAction:23]ZOtherViewsAI`6HE$%efhg +KLZ_{{17, 228}, {85, 17}}9mn'=>uMJYU)N^Opening files:_{{17, 203}, {85, 17}}9wx(=>uP-YU)N]Saving files:$#g  RSZ_{{17, 387}, {134, 14}}9=>@TQYUЀ_When Saving a File:_{{17, 463}, {134, 14}}9*=>@W'YUЀ_When Opening a File:_{{17, 255}, {248, 14}}9+=>@ZYUЀ_Plain Text File Encoding_{{17, 172}, {248, 14}}$0g dceZ9,=>@^CYUЀ_HTML Saving Options$ `a_{{17, 74}, {154, 18}}q-uHuf\YU)N^Document type:$3g ihjZ_{{17, 97}, {98, 17}}$- _@9/=>ukgYU)NYEncoding:_{{111, 144}, {275, 22}}$2  g Z0uu_NSSelectedIndexdq@@K )o)p23"P$%+-sq4n;8r/u2u>)t_XHTML 1.0 Transitional__popUpItemAction:237ZOtherViewsAI:6;<=vy|p@AGIxq4n;8w_HTML 4.01 Strict__popUpItemAction:MNTV{q4n;8z_HTML 4.01 Transitional__popUpItemAction:Z[ac~q4n;8}_XHTML 1.0 Strict__popUpItemAction:67ghij;^NSMenuItemCell\NSActionCellVNSCell_{{17, 122}, {98, 16}}$/opr g@9vw1=>umYU)NXStyling:_{{111, 119}, {275, 22}}u2uK@@) ) 23Pp4;8u>)\Embedded CSS__popUpItemAction:23ZOtherViewsAI6p4;8ZInline CSS__popUpItemAction:pŁ4;8VNo CSS__popUpItemAction:_{{111, 94}, {275, 22}}.3uu+i@@?K )0/)23ހPu>)23ZOtherViewsAI6g Z_{{17, 312}, {248, 14}}94=>@YUЀZAutosaving   @_{{197, 285}, {189, 22}}5     u @A@K )  #@&23 P ! "   ( *4;8 ,u />)_Every 30 seconds__popUpItemAction:23 4ZOtherViewsAI 76 8  : ; < > ? @   F H4;8_Every 15 seconds__popUpItemAction: L M N   T V<4;8\Every minute__popUpItemAction: Z [ \   b d,4;8_Every 5 minutes__popUpItemAction: h i   o q4;8UNever__popUpItemAction: v w yg Z_{{17, 288}, {178, 16}}9 ~ 6=>uYU)N_Autosave modified documents:_{{10, 33}, {397, 477}}]Open and Save67 YNSTabView   ;YNSTabViewZ{449, 574}_{{0, 0}, {1920, 1178}}]{154.928, 27}_{1.79769e+308, 1.79769e+308}67 _NSWindowTemplate ;Vwindow67 _NSNibOutletConnector ;^NSNibConnector Ā Xdelegate 3ĀR 5Ā{ %ǁā+  ;ʁɀ_changeRichTextFont:67 _NSNibControlConnector ;^NSNibConnector :ʁ̀_changePlainTextFont: Ɓʁ΀_revertToDefault:  EXNSMarkerVNSFileсЁҀ_NSToolTipHelpKey_FChoose Edit > Spelling to change this option for individual documents.67 _NSIBHelpConnector ;_NSIBHelpConnector  MсЁҀ  NсЁҀ  OցЁҀ_KChoose Edit > Substitutions to change this option for individual documents.  QցЁҀ  TցЁҁ  PցЁҀ  RցЁҀ  SցЁҁ  %݁Ёҁ+_Choose the default text encoding to use when opening Plain Text files. If you don't want to use a specific encoding, choose Automatic.  &߁ЁҁA_Choose the default text encoding to use when saving Plain Text files. Choose Automatic to save files with the same encoding used when opened.   0Ёҁd_.Choose the document type for saved HTML files.  2Ёҁ_RChoose the form of cascading style sheets (CSS) you want, otherwise choose No CSS.   3Ёҁi_.Choose the text encoding for saved HTML files.   DЁҀ_>Press Command-R to view or hide the ruler in an open document.   ƁЁҀ_/Restore all preferences to their initial values  $ ЁҀ0_FSelect to create files that allow special text or document formatting.  * ЁҀ4_5Select to create files that don't contain formatting.  0 -Ёҁ__VSelect to include HTML code that preserves the blank areas currently in your document.  6 0ЁҀ$_KSelect to make text wrap to document margins rather than window boundaries.  < "Ёҁ_:Select to open HTML files as plain text with no formatting  B !Ёҁ_9Select to open RTF files as plain text with no formatting  H 5Ёҁ_Specify how often TextEdit should save side-copies of documents being modified. These "autosave" copies can be used to recover contents of unsaved documents.  N $Ёҁ%_Specify the default setting for the save option which automatically adds ".txt" to the supplied file name if the name does not have a known extension. T U V W X Y Z [SYNSKeyPath_NSNibBindingConnectorVersionYNSBinding ^ __NSSharedInstance 67 b c_NSUserDefaultsController d e;_NSUserDefaultsController\NSController_value: values.DataDetectorsUvalue_values.DataDetectors67 j k_NSNibBindingConnector l m;_NSNibBindingConnector^NSNibConnector T U V o X Y r [R_value: values.TextReplacement_values.TextReplacement T U V x X Y { [P_value: values.SmartDashes_values.SmartDashes T U V X Y [N _*value: values.CorrectSpellingAutomatically_#values.CorrectSpellingAutomatically T U V Y [5   _!selectedTag: values.AutosaveDelay[selectedTag_values.AutosaveDelay T U V X Y [T_value: values.SmartCopyPaste_values.SmartCopyPaste T U V X Y [Q_value: values.SmartLinks_values.SmartLinks T U V X Y [O_value: values.SmartQuotes_values.SmartQuotes T U V X Y [M_&value: values.CheckGrammarWithSpelling_values.CheckGrammarWithSpelling T U V Y [3i_#selectedObject: values.HTMLEncoding^selectedObject_values.HTMLEncoding T U V Y 2  _selectedTag: HTMLStylingMode_HTMLStylingMode T U V X Y [-#"__ value: values.PreserveWhitespace_values.PreserveWhitespace T U V Y 0& %d_selectedTag: HTMLDocumentType_HTMLDocumentType T U V X Y [B)(_value: values.copyright_values.copyright T U V X Y [@,+_value: values.company^values.company T U V X Y [>/._value: values.author]values.author T U V X Y [D21_value: values.ShowRuler_values.ShowRuler T U V  X Y  [E54_&value: values.CheckSpellingWhileTyping_values.CheckSpellingWhileTyping T U V X Y [$87%_-value: values.AddExtensionToNewPlainTextFiles_&values.AddExtensionToNewPlainTextFiles T U V  X Y  [#;: _value: values.DeleteBackup_values.DeleteBackup T U V  Y  [%>=+_(selectedObject: values.PlainTextEncoding_values.PlainTextEncoding T U V % X Y ( ["A@_value: values.IgnoreHTML_values.IgnoreHTML T U V . Y 1 [&DCA_0selectedObject: values.PlainTextEncodingForWrite_ values.PlainTextEncodingForWrite T U V 7 X Y : [!GF_value: values.IgnoreRichText_values.IgnoreRichText T U V @ X Y C [0JI$_value: values.ShowPageBreaks_values.ShowPageBreaks T U V I X Y L [5ML{_value: values.HeightInChars_values.HeightInChars T U V R S X Y V [3 YYNSOptionsPORQ_value: values.WidthInChars_values.WidthInCharsA ^ `n _R aS_NSValidatesImmediately#? T U V e Y h [1V U-_selectedTag: values.RichText_values.RichText T U V R n X Y q < tYXZ_value: plainTextFont]plainTextFontA y {n z[ |\_NSValueTransformerName_FontNameTransformer T U V R X Y 9 _^`_value: richTextFont\richTextFontA n z[ |\A D :C8"20DT _<2'2+> [v wYp=0Q>IEAH\=6TJ;, 5l"4;@- <';f(*NG?M 8/O8R'!w9651B f\1*   $3A.#d :L[P&1y5 ;HEKS<_3%%7}4ځF]$:yVqȁDP"S'adOրYE|}vCp^"\_S-'0.&ǁQڀ4gJ {mLy]b %1R\ Ӂj(΀ـA-2ŀ́~e݁i ˀ+xn./ -c]NSApplicationA 1D "'3""A1B1"*E&"" #60L2"-p"(H"+N8OR<"""57C2""" 2!=41>%K"""" I1"""P"6;S"" 'M4,@ ""G/$?"%"8""9 ""Q"""5.JT":3"D0"DR""-mq'nŁA"" Q$ف"_"-"Fq"""qqx]"""P-+ ̀""""-""""}"" Jǀ\C~2"" &g%"ˀ"""."""""{\"i"dA ̀DC :8"20D_T 2<'2+> [v wYp=Q0I>AE\HT6=J;,5 l"4;@ -'f;(* <NG?M 8/OR8'!w9651B f\1*   $3A.#d :L[P&1y5HE ;KS<_3%%7}4ڀF]$:qVyDȀP"S'adOրYE}|vCp^"\_S-'0.&ǁQځg4J {mLy]b %R1\ Ӂj(΀ـA-2Ł́~e݁ iˁ+xnA jD k l m n o p q r s t u v w x y z { | } ~  ghijklmnopqrstuvwxyz{|}~ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁_Static Text (Copyright:)_Menu Item (Every minute)_Menu (OtherViews)-2_3Check Box (Ignore rich text commands in HTML files)_Text Field Cell-4_Check Box (Wrap to page)_Check Box (Show ruler)_5Button Cell (Ignore rich text commands in HTML files)_Text Field Cell-3_Text Field Cell (Organization:)_Text Field Cell (Styling:)_Prototype Button Cell (Radio)_Menu (OtherViews)-1]Pop Up Button_&Text Field Cell (When Opening a File:)_"Menu Item (HTML 4.01 Transitional)_7Encoding Pop Up Button Cell (Automatic (DO NOT REMOVE))_)Button Cell (Check spelling as you type )_Static Text (Width:)_&Static Text (Plain Text File Encoding)ZText Field_Shared Defaults_.Button Cell (Delete the automatic backup file)_%Text Field Cell (When Saving a File:)_.Text Field Cell (Autosave modified documents:)_Button Cell (Wrap to page)_Text Field Cell (Document properties can only be used in rich text files. Choose File > Show Properties to change settings for individual documents.)_!Pop Up Button Cell (Embedded CSS)_Static Text (Rich text font:)_"Button Cell (Preserve white space)_Menu (OtherViews)_Check Box (Smart links)_Pop Up Button-1_Static Text (Properties)_Text Field Cell (Saving files:)_Text Field Cell (Font)_,Button Cell (Correct spelling automatically)_*Text Field Cell (Plain Text File Encoding)_Button Cell (Smart quotes)_Button Cell (Text replacement)TView_%Menu Item (Automatic (DO NOT REMOVE))_Text Field Cell (Font name)-1_Check Box (Smart copy/paste)_Static Text (lines)_Menu Item (XHTML 1.0 Strict)_Static Text (Options)_Menu Item (HTML 4.01 Strict)_!Static Text (HTML Saving Options)_Text Field Cell (Height:)_Text Field Cell (Copyright:)_%Pop Up Button Cell (Every 30 seconds)_"Menu Item (XHTML 1.0 Transitional)_Number Formatter-1VView-1_Static Text (characters)_Push Button (Change...)\Text Field-1\File's Owner_Menu Item (Inline CSS)_ Check Box (Preserve white space)_Text Field Cell (Width:)_!Text Field Cell (Rich text font:)_4Button Cell (Ignore rich text commands in RTF files)_Text Field Cell_Static Text (Saving files:)_"Static Text (When Opening a File:)_Text Field Cell (Autosaving)\Content View_Button Cell (Rich text)_9Encoding Pop Up Button Cell (Automatic (DO NOT REMOVE))-1_RText Field Cell (Use the Format menu to choose settings for individual documents.)_Menu Item (Never)_*Check Box (Correct spelling automatically)_Static Text (Window Size)_Static Text (Author:)_(Check Box (Check grammar with spelling )_!Static Text (When Saving a File:)_Menu Item (Every 15 seconds)_Text Field Cell (Properties)_Static Text (Encoding:)_Check Box (Smart quotes)_Check Box (Text replacement)_Static Text (Plain text font:)_Button Cell (Plain text)_Static Text (Opening files:)_2Check Box (Ignore rich text commands in RTF files)_*Top Tab View (New Document, Open and Save)_Menu Item (Embedded CSS)_Button Cell (Smart dashes)_Static Text (Font name)_Text Field Cell (lines)_*Static Text (Autosave modified documents:)_Menu Item (No CSS)_Button Cell (Change...)_Button Cell (Data detectors)\Text Field-2_Static Text (Styling:)\Text Field-3_Menu Item (Every 30 seconds)_Tab View Item (Open and Save)_ Text Field Cell (Opening files:)_*Button Cell (Check grammar with spelling )_Text Field Cell (characters)_%Text Field Cell (HTML Saving Options)_Text Field Cell-1_Menu (OtherViews)-3[ApplicationUPanel_"Button Cell (Restore All Defaults)_Number Formatter_4Check Box (Add ".txt" extension to plain text files)\Text Field-4_'Menu Item (Automatic (DO NOT REMOVE))-1_Static Text (Organization:)_%Selected Tab View Item (New Document)_Static Text (Document type:)_"Push Button (Restore All Defaults)_,Check Box (Delete the automatic backup file)_Text Field Cell (Window Size)_Text Field Cell (Encoding:)_6Button Cell (Add ".txt" extension to plain text files)_Text Field Cell (Author:)_Push Button (Change...)-1_Text Field Cell (Format)_Static Text (Document properties can only be used in rich text files. Choose File > Show Properties to change settings for individual documents.)_"Text Field Cell (Plain text font:)_Check Box (Smart dashes)_Pop Up Button-2VMatrix_Menu (OtherViews)-5_Text Field Cell (Font name)_Button Cell (Smart links)_Pop Up Button-3_Static Text (Font)_'Check Box (Check spelling as you type )_Menu Item (Every 5 minutes)_NStatic Text (Use the Format menu to choose settings for individual documents.)_Menu (OtherViews)-4_Check Box (Data detectors)_Static Text (Font name)-1_Text Field Cell-2_ Text Field Cell (Document type:)_Text Field Cell (Options)_Button Cell (Smart copy/paste)_Pop Up Button-4_Static Text (Format)_Pop Up Button-5_Button Cell (Change...)-1_Encoding Pop Up Button Cell_Static Text (Height:)_Button Cell (Show ruler)_Static Text (Autosaving)_+Pop Up Button Cell (XHTML 1.0 Transitional)AD'D.AD܁///ADHVP_p5En%e< <.Oh/%YWK3A_ :>:OX1N 59;6`M25vBUb(q wT$}N80yi3GuyY?M'8"pTZswd4; @c[+z[EKm&Ho;Q1Sl-IdA\ r6\*]PJ4}fR|D#g2 ;>l*v~S=' 0fR\, 8w2 <a=!Q'f7C_jtx{1T" k  ^L [L߀ՀŁ+ya\ǁȀgˁq'׀ R〧րB؀-<4:Łn]{"T(ԁ-p%ƁFd*i&ـǀ~1D"ڀӀ\02 ہW-ÝAE vˀ m^_Ky}EށȀ΁6Q3 eP]ڀ'!9πJ$Ĺ܁CVSj$b|HSxO݁ N.'0]Ӂ?فÀAD      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہF&Ti2)1<BB6wG %x=@L -"#H!$h<KA>:&h0|I5p1n?JQFq'K6'K(. @L9+Em0A%4)/7~0JoB,=8#? M/CE4L98>7AD%$-ON :U#EE3D=;9AI96:;<=>?@ABCDEFށHI=9߀_AXTitleUIElement67NO_NSNibAXRelationshipConnectorPQ;_NSNibAXRelationshipConnector^NSNibConnectorHI8<߀HI23߀PRHI75߀x{HI(&߁-AHI'%߁J+HI?>߀HIA@߀HICB߀HI.0߁\dHI12߁mHI/3߁giHI65߁ADF?AC=<E;D>B@:ADSNPJIKQOML67^NSIBObjectData;_NSKeyedArchiver]IB.objectdata"+5:?=C  % , 6 A O a m     & / A H Q Z c r w N P S V Y \ _ b e h k n q t w z }     . 7 : = ? A z    + ? A C F H K M P S U W ` b d f "+69<?ADFHQSXZ\}!.DVit  #09@EFOQR[hq~ ",EY\_bdfilnprsuv "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfil)+05:<>@BDFHJWhjlux)=IU`jt:@BKPUWY[]_aceoxz| "/`npu~!#$$$$-$8$A$F$S$`$h$j$o$x$$$$$$$$$$$$$$$$$$$$$$$$111111122*2+2-2/212326282:2<2T2y2z2|2~222222222222222222233333 33#3032353>3P3Y3f3m3v33333333333334444#4%4'4)4+4-4.40424y44444444445555-5?5M5N5P5R5T5V5X5Z5\5^5`5b5d5f5g5h5j5l5y55555555555555555555566666$6:6A6N6P6]6j6s6u6w6y6}66666666666777*7<7=7?7@7A7J7c7h7777777777777788:8;8=8?8A8C8F8H8J8L8m8r8t8v8x8z8|8~8888888888888899999 9 9 9989A9J9L9N9P9R9T9U9W9Y99999999999999999999999999999999:::::::1:2:4:5:6:O:t:u:w:y:{:}:::::::::::::::::;;;;;;;5;6;8;:;<;>;A;C;E;G;_;;;;;;;;;;;;;;;;;;;<<<<<< < <<<<,>>>">'>)>+>->/>1>3>5>7>Q>r>w>z>|>~>>>>>>>>>>>>>>??? ? ???????2?W?X?Z?\?^?`?c?e?g?i??????????????????????@@@@@@@@E@J@L@N@P@R@T@V@^@s@u@w@y@{@@@@@@@@@@@@@@@AAAAA!A#A&A(A*A,AQAZA_AaAcAeAgAiAjAlAAAAAAAAAAAAAAAAAAAABBB>B?BABCBEBGBJBLBNBPBuB~BBBBBBBBBBBBBBBBBBBC C CCCCCCCC3ChCjCoCtCyC{C}CCCCCCCCCCCCCCCCCCCCCDDDDDDD D"D$D&D[D]DbDgDlDnDpDrDtDvDxDzD|DDDDDDDDDDDDDDDEEEE E"E$E'E)E+E-ENESEXEZE\E^E`EbEdEkE|E~EEEEEEEEEEEEEEEFF6F;F@FBFDFFFHFJFLFQFjFFFFFFFFFFFFFFFFFFFFFGG"G'G)G+G-G/G1G3G;GTGuGzGGGGGGGGGHH HHHHHHHHHHHHHIIII I I IIII2I;I=I>I_I`IbIdIfIiIkImIoIIIIIIIIIIIIIIIJJ J J+J,J.J0J2J5J7J9J;JTJJJJJJJJJJJJJJJJJJJJJJJJJJK KBKDKIKNKSKUKWKYK[K]K_KaKcKpKyK{K|KKKKKKKKKKKKLLL LLLLLLLLL(L1L3L4LULVLXLZL\L_LaLcLeL}LLLLLLLLLLLLLLLLLMMMMMM!M#M%M'M>MsMuMzMMMMMMMMMMMMMMMMMMMMMMMMN3N5N:N?NDNFNINKNNNQNSNUNWNjNsNuNvNNNNNNNNNNNNNNNNOO OO$O)O7OLOOOQOTOWOYOrOuOxO{O~OOOOOOOOOOOOOOOOOOOOOOOOOOOP P!P$P'P*P-P0P2P5PNPoPpPsPvPyP|PPPPPPPPPPPPPPPPQQQQQ3Q4Q7Q:Q=Q@QCQEQHQaQQQQQQQQQQQQQQRRRRR RRRR,RaRcRhRmRrRtRwRyR|RRRRRRRRRRRRRRRRRSS$S%S(S+S.S1S4S6S9SnSpSuSzSSSSSSSSSSSSSSSSSSSSSTTT;T`R`[`]`h`q`s`|`````````````````a&a)a.a1a4a7a:an@nQnTnWnZn]nnnqntnwnynnnnnnnnnnnnnnnoXoioloooroupppppp"pSpdpgpjpmppppppppqq$q'q*q-q/qpqqqqqqqqqqqr#r4r7r:r=r?rwrrrrrrrssss sWshsksnsqstsssssst ttt!t$t'ttttttu}uuuuuuuuuuuuuuvv#v*vEvRvpvvvvvvvvvvvwwww w*wCw`wcwfwiwlwowqwwwwwwwwwwx#x@xCxFxIxLxOxRxvxxxxxxxxxxxyyy"y%y(y+y-yHy\yyy|yyyyyyyyyyyyyyzz4zQzTzWzZz]z`zczzzzzzzzzzz{ {*{-{0{3{6{9{<{_{{{{{{{{{{{{{{|||| |$|7|T|W|Z|]|`|c|e|}||||||||||||}}}} } }'}:}W}Z}]}`}c}f}h}}}}}}}}}~~;~X~[~^~a~d~g~j~~~~~~~~~~/258;>A\p!$C[x{~݀ #DNQTWZ]_bɁҁ1RUX[^`be|Ԃ+8:=@CFOQĄDŽɄ˄΄Єӄքلۄބ  "%'*-02479;=?ACFIKMPRTVY\^acegjmortwy|ÅŅȅʅͅЅ҅ԅօ؅ۅޅ &(]`behjlnprtwz}‡ŇLJɇ̇·Ї҇Շ؇ۇއ !#&(*,/2479;=@CEHJMORTWY[^`cegiknqsuwz|ÈƈɈˈ͈Јӈ܈ފ "$&)+-0258;>ACEHJMPSVXZ]_begjloqsvxz}ŠĊNJɊ̊ΊЊҊԊ׊ڊ܊ߊ "$&(+-0258:=?BEGIKMOQTVY[]`bdgiloqsvx{~Ԍ׌ڌ݌ "%(+.147:=@CFILORUX[^adgjmpsvy|čǍʍ͍ЍӍ֍ٍ܍ߍ !$'*-0369^͛ +1ViלADGJMPSVY\_behknqtwz}©ũȩ˩Ωѩԩשکݩ "%(+.147:=@CFILORUX[^adgjmpsvy|ĪɪΪӪ֪٪ܪ "%*/27GJLQTV[^chkmrwzíȭͭЭӭխڭ !$'8;>@BU^}îƮɮˮͮޮ 147:=NQTVXiloqs¯ůȯٯܯ߯ (+.147:=@CFILOXZux{~ðưɰҰ  TextEdit-master/English.lproj/PrintPanelAccessory.nib/000077500000000000000000000000001271274630500233255ustar00rootroot00000000000000TextEdit-master/English.lproj/PrintPanelAccessory.nib/designable.nib000066400000000000000000000215561271274630500261250ustar00rootroot00000000000000 0 11C74 1938 1138.23 567.00 com.apple.InterfaceBuilder.CocoaPlugin 1938 YES NSUserDefaultsController NSButtonCell NSButton NSCustomObject YES com.apple.InterfaceBuilder.CocoaPlugin PluginDependencyRecalculationVersion YES PrintPanelAccessoryController FirstResponder NSApplication 268 {199, 43} YES -2080244224 0 Print header and footer LucidaGrande 13 1044 1211912703 2 NSImage NSSwitch NSSwitch 200 25 YES YES changePageNumbering: 3 view 4 value: values.NumberPagesWhenPrinting value: values.NumberPagesWhenPrinting value values.NumberPagesWhenPrinting 2 7 YES 0 YES -2 File's Owner -1 First Responder -3 Application 1 YES 2 6 YES YES -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency 1.IBPluginDependency 2.IBPluginDependency 6.IBPluginDependency YES com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin YES YES 7 0 IBCocoaFramework com.apple.InterfaceBuilder.CocoaPlugin.macosx com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 YES 3 NSSwitch {15, 15} TextEdit-master/English.lproj/PrintPanelAccessory.nib/keyedobjects.nib000066400000000000000000000055371271274630500265040ustar00rootroot00000000000000bplist00X$versionX$objectsY$archiverT$top:#$*.28@PQmnvwzU$null _NSVisibleWindows]NSObjectsKeysVNSRoot\NSOidsValuesV$classZNSOidsKeys]NSConnections_NSObjectsValues_NSAccessibilityConnectors_NSAccessibilityOidsKeys_NSAccessibilityOidsValues(.9-,788 !"[NSClassName_PrintPanelAccessoryController%&'(Z$classnameX$classes^NSCustomObject')XNSObject +,-ZNS.objects%&/0\NSMutableSet/1)UNSSet +34'567 9:;<=>WNSLabel]NSDestinationXNSSource ABCDE FGHIJKLMKOYNSEnabled]NSNextKeyViewVNSCell[NSSuperviewXNSvFlags_NSNextResponder[NSFrameSize   Y{199, 43}RSTUVWXYZ[ \]^_`abccef>hijkl_NSPeriodicInterval[NSCellFlags]NSButtonFlags\NSCellFlags2_NSAlternateContents_NSKeyEquivalent]NSNormalImageZNSContents]NSControlView_NSAlternateImageYNSSupport_NSPeriodicDelay^NSButtonFlags2HYNSKeyPath_NSNibBindingConnectorVersionYNSBinding%$&#! H_NSSharedInstance" %&_NSUserDefaultsController)_NSUserDefaultsController\NSController_%value: values.NumberPagesWhenPrintingUvalue_values.NumberPagesWhenPrinting%&_NSNibBindingConnector)_NSNibBindingConnector^NSNibConnector%&^NSMutableArray)WNSArray +ǀ+>J) ! !΀*]NSApplication%&Ѣ) +Ԁ+>  +ۀ+>J567) ! ++/0123456      +3' ++%&^NSIBObjectData)_NSKeyedArchiver]IB.objectdata"+5:? %0>Pl"+4?ABKX_enpwy{} ()+-/2468B{#5DFOTVXZ\^`bdfhj-2;GIKTjopy )+-/1HQip%@Mu{ &(*,.79;IRW`bkmoqs|~  " ' 5 7TextEdit-master/English.lproj/SelectEncodingsPanel.nib/000077500000000000000000000000001271274630500234265ustar00rootroot00000000000000TextEdit-master/English.lproj/SelectEncodingsPanel.nib/classes.nib000066400000000000000000000010171271274630500255540ustar00rootroot00000000000000{ IBClasses = ( { ACTIONS = { clearAll = id; encodingListChanged = id; revertToDefault = id; selectAll = id; showEncodingsPanel = id; }; CLASS = EncodingManager; LANGUAGE = ObjC; OUTLETS = {encodingMatrix = id; }; SUPERCLASS = NSObject; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } ); IBVersion = 1; }TextEdit-master/English.lproj/SelectEncodingsPanel.nib/info.nib000066400000000000000000000007041271274630500250540ustar00rootroot00000000000000 IBDocumentLocation 124 20 356 240 0 0 1440 878 IBFramework Version 388.0 IBOpenObjects 5 IBSystem Version 8A210 TextEdit-master/English.lproj/SelectEncodingsPanel.nib/keyedobjects.nib000066400000000000000000000165741271274630500266100ustar00rootroot00000000000000bplist00 Y$archiverX$versionT$topX$objects_NSKeyedArchiver ]IB.objectdata 156<=AEMTs#'(-.1589<?@CDEFIMNQRSTY[gikloxyz}y7h  U$null  !"#$%&'()*+,-./0_NSObjectsValues_NSAccessibilityConnectors_NSClassesValuesZNSOidsKeys[NSNamesKeys]NSClassesKeys_NSAccessibilityOidsValues\NSOidsValues_NSVisibleWindowsV$class]NSConnections]NSNamesValues]NSObjectsKeys_NSAccessibilityOidsKeys[NSFramework]NSFontManagerYNSNextOidVNSRoot{|}S234[NSClassName_EncodingManager789:X$classesZ$classname:;^NSCustomObjectXNSObject_IBCocoaFramework>?@ZNS.objects78BCCD;\NSMutableSetUNSSet>FLGHIJK 8;ELNOPQRS0]NSDestinationWNSLabelXNSSource 67UVWXYZ[\]^_`abcdeffghihjklmnopjqr[NSFrameSize_NSNextResponder[NSSuperview_NSCellBackgroundColorYNSNumRows]NSMatrixFlagsYNSNumCols]NSSelectedCol_NSIntercellSpacingYNSEnabledWNSCells[NSCellClass[NSProtoCell]NSSelectedRowZNSCellSize_NSBackgroundColor 1% &5'$0tVWuvwxyz{||QrQ}~ZNSSubviews]NSNextKeyViewYNSBGColorYNSDocViewYNScvFlagsWNSFrameXNSvFlagsXVY ZY{329, 18}>LQ_NSKeyEquivalent_NSAlternateImage]NSNormalImageYNSSupportZNSContents]NSControlView^NSButtonFlags2_NSPeriodicInterval]NSButtonFlags_NSPeriodicDelay[NSCellFlags_NSAlternateContents\NSCellFlags2 HL>_NSTIFFRepresentationOMM*01111111!/***QQQhhhmmmmmmkkkmmmiiiWWW222G)))777"<<L,>-./B1[NSColorName]NSCatalogName432VSystem\controlColorK0.6666666978      ;XNSMatrixY%NSMatrixYNSControlVNSView[NSResponder^encodingMatrix78;_NSNibOutletConnector^NSNibConnectorNOP0Q9:_encodingListChanged:78;_NSNibControlConnectorNOP0D<VWy^zl !"=>$C?tVy$.%&itu_{{1, 8}, {96, 28}})*h+,A@@ZSelect all/0YNS.stringB782334;_NSMutableStringXNSString78677   ;XNSButtonZselectAll:NOP0:;KFVWy^z=l !>GH_{{95, 8}, {96, 28}}AB;h+,JIYClear all/0YclearAll:NOP0GHRMVWy^zJlK!LN!O_{{189, 8}, {146, 28}}OPHh+,QP_Revert to default/0_revertToDefault:>UVH|WXQ;TdjZhUtVWuy\z]^_`fabcdeff[NSHScrollerXNSsFlags[NSVScroller]NSContentViewWb_[c>hLfeb>jLQ_{{1, 1}, {311, 119}}78mnn  ;ZNSClipViewVWpyz]qr|||sttuvwXNSTargetYNSPercentXNSAction\^"?e y]_{{312, 1}, {11, 119}}\_doScroller:78{||   ;ZNSScrollerVWpy^z]qr|||~ltu`"?}/Ӏa_{{-100, -100}, {330, 15}}_{{6, 40}, {324, 121}}78  ;\NSScrollView_NSWindowStyleMask_NSWindowBackingYNSMinSize]NSWindowTitle]NSWindowClass\NSWindowRect\NSScreenRectYNSMaxSize\NSWindowViewYNSWTFlags[NSViewClass_NSFrameAutosaveNamewfgevxxzhy_{{749, 501}, {336, 187}}_Customize Encodings ListWNSPanel/0TView>L|X;HVWy^zlk sl_{{6, 165}, {347, 14}}dgX[NSTextColoronmr@_;Enable the text encodings you would like to be able to use."A Ҁqp_controlTextColorB078;_NSTextFieldCell78¦   ;[NSTextField\%NSTextField_{{1, 1}, {336, 187}}78   ;_{{0, 0}, {1440, 878}}Z{336, 136}[{500, 1016}^Text Encodings78͢;_NSWindowTemplate>Q0WQ|>WH;0X>ڀ~UPanelZNSButton11YNSButton1\File's OwnerYNSButton4]NSTextField11>>>VJ;H|XHWQKIG0>    >L>> 78   ;^NSIBObjectData#,1:LQVdf"4?KYu  !#%')+-/8DFHZclw| (1357~#/=H\^`bdmvxy{} Tfy!#%').02;@ARY`inprt !#%   # 0 5 7 9 B G P W _ h q }  -357<CXZ\ehjsxz|$.5APY`w ')+-Bwy{ .02H}#%';DW`uwy{&-69PYbm)+.35Qir{ #-:DPfhjlnprt} AMOQSUZ&2?V_f~!'2<ISajktu~"#,1@TextEdit-master/English.lproj/SelectLinePanel.nib/000077500000000000000000000000001271274630500224045ustar00rootroot00000000000000TextEdit-master/English.lproj/SelectLinePanel.nib/classes.nib000066400000000000000000000007151271274630500245360ustar00rootroot00000000000000{ IBClasses = ( { ACTIONS = {"" = id; }; CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { ACTIONS = {lineFieldChanged = id; selectClicked = id; }; CLASS = LinePanelController; LANGUAGE = ObjC; OUTLETS = {lineField = id; }; SUPERCLASS = NSWindowController; } ); IBVersion = 1; }TextEdit-master/English.lproj/SelectLinePanel.nib/info.nib000066400000000000000000000006731271274630500240370ustar00rootroot00000000000000 IBDocumentLocation 82 12 356 240 0 0 1920 1178 IBFramework Version 456.0 IBOpenObjects 7 IBSystem Version 9A373 TextEdit-master/English.lproj/SelectLinePanel.nib/keyedobjects.nib000066400000000000000000000107061271274630500255550ustar00rootroot00000000000000bplist00 X$versionT$topY$archiverX$objects]IB.objectdata_NSKeyedArchiver` 156<=AEMUcij~  #()./278?AHOVWX[^kxyz{|}~U$null  !"#$%&'()*+,-./0VNSRootV$class]NSObjectsKeys_NSClassesValues_NSAccessibilityOidsValues]NSConnections[NSNamesKeys[NSFramework]NSClassesKeysZNSOidsKeys]NSNamesValues_NSAccessibilityConnectors]NSFontManager_NSVisibleWindows_NSObjectsValues_NSAccessibilityOidsKeysYNSNextOid\NSOidsValues_@J]CIKDWB\L234[NSClassName_LinePanelController789:X$classesZ$classname:;^NSCustomObjectXNSObject_IBCocoaFramework>?@ZNS.objects78BCCD;\NSMutableSetUNSSet>FG/HIJKL 9;>NOPQRST]NSDestinationXNSMarkerVNSFile VWXYZ[\]^_`a\_NSNextResponderWNSFrameVNSCellXNSvFlagsYNSEnabled[NSSuperview   VWd+fghZNSSubviews10'_{{20, 20}, {116, 22}}klmnopqrstuvwxRza|}[NSCellFlags_NSBackgroundColorZNSContentsYNSSupport]NSControlView\NSCellFlags2_NSDrawsBackground_NSPlaceholderString[NSTextColorqA  PVNSSizeVNSNameXNSfFlags#@*\LucidaGrande78;VNSFont[Line numberWNSColor\NSColorSpace[NSColorName]NSCatalogNameVSystem_textBackgroundColorWNSWhiteB178;YtextColorB078X;_NSTextFieldCell\NSActionCell78;[NSTextField\%NSTextFieldYNSControlVNSView[NSResponder_NSToolTipHelpKey_pLine number to select. Can specify a range (e.g. 10-20), or line number relative to current selection (e.g. -5).78;_NSIBHelpConnectorNXNSSourceWNSLabel8!7\\NSWindowView\NSScreenRect_NSFrameAutosaveName]NSWindowTitleYNSWTFlags]NSWindowClass\NSWindowRectYNSMaxSize_NSWindowBacking_NSWindowStyleMaskYNSMinSize[NSViewClass 625#pH$"43&_{{60, 56}, {249, 62}}[Select LineYNS.string%WNSPanel78;_NSMutableStringXNSString%TView>F/R (VWXYZ[\`a\ .)* _{{145, 12}, {90, 32}}kmnopwxx_NSAlternateContents_NSPeriodicInterval^NSButtonFlags2_NSAlternateImage_NSKeyEquivalent_NSPeriodicDelay]NSButtonFlags-,+(@VSelectQ 78    X;\NSButtonCell]%NSButtonCell78;XNSButton78;^NSMutableArrayWNSArray_{{1, 1}, {249, 62}}78;_{{0, 0}, {1920, 1178}}Y{213, 52}_{3.40282e+38, 3.40282e+38}ZSelectLine78;_NSWindowTemplateVwindow78 !!";_NSNibOutletConnector^NSNibConnectorNR'8 :YlineFieldN*-=(<^selectClicked:78011";_NSNibControlConnectorN*R6= ?_lineFieldChanged:>9:AR\! (78@;>9CA\\ ! >9JAR! (>9QARSTUEFGHUPanel\File's Owner>9ZA>9]A>9`ARLI\JKH! >  (9; >9mAnopqrstuvwMNOPQRSTUV     >F/XR_AXAttributeValueArchiveKey_AXAttributeTypeArchiveKey_AXDestinationArchiveKeyZ[Y ]AXDescription[line number78;_NSNibAXAttributeConnector>9AX>9A^78;^NSIBObjectData"'1:?DRTf)/z-;N`z1:EGHQXektv !#%'*+->IKMOQi !#%')+01356GNU^`ikn{ #,1FHJLNXegjs|mv{,6DQ[m    ' ) . 7 9 > @ B _ a c e g h j   ( 6 ; = ? A C E G I K M O T ] d f o z  " ? J S X k r {   , . 0 2 4 H Q S \ ^ ` b d m r { }         ! # % . 0 E G I K M O Q S U W Y [ ] _ a c e g i k t v y {  +469;DFIKMV[jTextEdit-master/FontNameTransformer.h000066400000000000000000000001311271274630500202060ustar00rootroot00000000000000#import @interface FontNameTransformer : NSValueTransformer { } @end TextEdit-master/FontNameTransformer.m000066400000000000000000000060461271274630500202260ustar00rootroot00000000000000/* FontNameTransformer.m Copyright (c) 2008-2009 by Apple Computer, Inc., all rights reserved. Author: Jordan Rose Value transformer that turns fonts into a human-readable string with the font's name and size. This is used in the preferences window. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import "FontNameTransformer.h" @implementation FontNameTransformer + (Class)tranformedValueClass { return [NSString class]; } + (BOOL)allowsReverseTransformation { return NO; } - (id)transformedValue:(id)value { if (value && [value isKindOfClass:[NSFont class]]) { return [NSString stringWithFormat:@"%@ %g", [value displayName], [value pointSize]]; } else { return @""; } } @end TextEdit-master/GNUmakefile000066400000000000000000000016761271274630500161740ustar00rootroot00000000000000# # This file generated by pbxbuild # include $(GNUSTEP_MAKEFILES)/common.make APP_NAME=TextEdit VERSION=264 TextEdit_OBJC_FILES=\ Controller.m\ Document.m\ DocumentController.m\ DocumentPropertiesPanelController.m\ DocumentWindowController.m\ Edit_main.m\ EncodingManager.m\ FontNameTransformer.m\ LinePanelController.m\ MultiplePageView.m\ Preferences.m\ PrintPanelAccessoryController.m\ ScalingScrollView.m TextEdit_RESOURCE_FILES=\ DocumentWindow.nib\ accessories-text-editor.icns TextEdit_LOCALIZED_RESOURCE_FILES=\ DocumentProperties.nib\ Edit.nib\ EncodingAccessory.nib\ InfoPlist.strings\ LinePanel.strings\ Localizable.strings\ Preferences.nib\ PrintPanelAccessory.nib\ PrintPanelAccessory.strings\ SelectEncodingsPanel.nib\ SelectLinePanel.nib\ ServicesMenu.strings\ ZoomValues.strings TextEdit_LANGUAGES=\ English ADDITIONAL_CPPFLAGS += -DGNUSTEP -std=gnu99 include $(GNUSTEP_MAKEFILES)/application.make TextEdit-master/LinePanelController.h000066400000000000000000000003151271274630500201730ustar00rootroot00000000000000#import @interface LinePanelController : NSWindowController { IBOutlet NSTextField *lineField; } - (IBAction)lineFieldChanged:(id)sender; - (IBAction)selectClicked:(id)sender; @end TextEdit-master/LinePanelController.m000066400000000000000000000233471271274630500202120ustar00rootroot00000000000000/* LinePanelController.m Copyright (c) 2007-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer "Select Line" panel controller for TextEdit. Enables selecting a single line, range of lines, from start or relative to current selected range. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import "LinePanelController.h" #import "TextEditErrors.h" #import "TextEditMisc.h" @implementation LinePanelController - (id)init { return [super initWithWindowNibName:@"SelectLinePanel"]; } /* A short and sweet example of use of NSScanner. Parses user's line specification, in the form of N, or N-M, or +N-M, or -N-M. Returns NO on error. Assumes none of the out parameters are NULL! */ - (BOOL)parseLineDescription:(NSString *)desc fromLineSpec:(NSInteger *)fromLine toLineSpec:(NSInteger *)toLine relative:(NSInteger *)relative { NSScanner *scanner = [NSScanner localizedScannerWithString:desc]; *relative = [scanner scanString:@"+" intoString:NULL] ? 1 : ([scanner scanString:@"-" intoString:NULL] ? -1 : 0); // Look for "+" or "-"; set relative to 1 or -1, or 0 if neither found if (![scanner scanInteger:fromLine]) return NO; // Get the "from" spec if ([scanner scanString:@"-" intoString:NULL]) { // If "-" seen, look for the "to" spec if (![scanner scanInteger:toLine] || (*toLine < *fromLine)) return NO; // There needs to be a number that is not less than the "from" spec } else { *toLine = *fromLine; // If not a range, set the "to" spec to be the same as "from" } return [scanner isAtEnd] ? YES : NO; // If more stuff, error. Note that the scanner skips over white space } /* getRange:... gets the range to be selected in the specified textView using the indicated start, end, and relative values If relative = 0, then select from start of fromLine to end of toLine. The first line of the text is line 1. If relative != 0 then select from start of fromLine lines from current selected range to toLine lines from current selected range. toLine == fromLine means a one-line selection */ - (BOOL)getRange:(NSRange *)rangePtr inTextView:(NSTextView *)textView fromLineSpec:(NSInteger)fromLine toLineSpec:(NSInteger)toLine relative:(NSInteger)relative { NSRange newSelection = {0, 0}; // Character locations for the new selection NSString *textString = [textView string]; if (relative != 0) { // Depending on relative direction, set the starting point to beginning of line at the start or end of the existing selected range NSRange curSel = [textView selectedRange]; if (relative > 0) curSel.location = NSMaxRange(curSel) - ((curSel.length > 0) ? 1 : 0); [textString getLineStart:&newSelection.location end:NULL contentsEnd:NULL forRange:NSMakeRange(curSel.location, 0)]; } else { if (fromLine == 0) return NO; // "0" is not a valid absolute line spec } // At this point, newSelection.location points at the beginning of the line we want to start from if (relative < 0) { // Backwards relative from that spot for (NSInteger cnt = 1; cnt < fromLine; cnt++) { if (newSelection.location == 0) return NO; // Invalid specification NSRange lineRange = [textString lineRangeForRange:NSMakeRange(newSelection.location - 1, 0)]; newSelection.location = lineRange.location; } NSInteger end = newSelection.location; // This now marks the end of the range to be selected for (NSInteger cnt = fromLine; cnt <= toLine; cnt++) { if (newSelection.location == 0) return NO; // Invalid specification NSRange lineRange = [textString lineRangeForRange:NSMakeRange(newSelection.location - 1, 0)]; newSelection.location = lineRange.location; } newSelection.length = end - newSelection.location; } else { // Forwards NSInteger textLength = [textString length]; for (NSInteger cnt = (relative == 0) ? 1 : 0; cnt < fromLine; cnt++) { // If not a relative selection, we start counting from 1, since the first line is "line 1" to the user if (newSelection.location == textLength) return NO; // Invalid specification NSRange lineRange = [textString lineRangeForRange:NSMakeRange(newSelection.location, 0)]; newSelection.location = NSMaxRange(lineRange); } NSInteger end = newSelection.location; for (NSInteger cnt = fromLine; cnt <= toLine; cnt++) { // If not relative, the end of the range is an absolute line number; otherwise it's relative if (end == textLength) return NO; // Invalid specification NSRange lineRange = [textString lineRangeForRange:NSMakeRange(end, 0)]; end = NSMaxRange(lineRange); } newSelection.length = end - newSelection.location; } if (rangePtr) *rangePtr = newSelection; return YES; } /* selectLinesUsingDescription:error: selects the specified lines. On error it returns NO and sets *error if not NULL. */ - (BOOL)selectLinesUsingDescription:(NSString *)desc error:(NSError **)error { id firstResponder = [[NSApp mainWindow] firstResponder]; if ([firstResponder isKindOfClass:[NSTextView class]]) { NSInteger fromLine, toLine, relative; if (![self parseLineDescription:desc fromLineSpec:&fromLine toLineSpec:&toLine relative:&relative]) { if (error) *error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditInvalidLineSpecification userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:NSLocalizedStringFromTable(@"Invalid line specification \\U201c%@\\U201d.", @"LinePanel", @"Error message indicating invalid line specification for 'Select Line'"), truncatedString(desc, 100)], NSLocalizedDescriptionKey, NSLocalizedStringFromTable(@"Please enter the line number or numbers (separated by dash) of the line(s) to select.", @"LinePanel", @"Suggestion for correcting invalid line specification"), NSLocalizedRecoverySuggestionErrorKey, nil]]; return NO; } NSRange range; if (![self getRange:&range inTextView:firstResponder fromLineSpec:fromLine toLineSpec:toLine relative:relative]) { if (error) *error = [NSError errorWithDomain:TextEditErrorDomain code:TextEditOutOfRangeLineSpecification userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:NSLocalizedStringFromTable(@"Invalid line specification \\U201c%@\\U201d.", @"LinePanel", @"Error message indicating invalid line specification for 'Select Line'"), truncatedString(desc, 100)], NSLocalizedDescriptionKey, NSLocalizedStringFromTable(@"Please enter the line number or numbers (separated by dash) of the line(s) to select.", @"LinePanel", @"Suggestion for correcting invalid line specification"), NSLocalizedRecoverySuggestionErrorKey, nil]]; return NO; } [firstResponder setSelectedRange:range]; [firstResponder scrollRangeToVisible:range]; } return YES; } /* If the user enters a line specification and hits return, we want to order the panel out if successful. Hence this extra action method. */ - (IBAction)lineFieldChanged:(id)sender { NSError *error; if ([@"" isEqual:[sender stringValue]]) return; // Don't do anything on empty string if ([self selectLinesUsingDescription:[sender stringValue] error:&error]) { [[self window] orderOut:nil]; } else { [[self window] presentError:error]; [[self window] makeKeyAndOrderFront:nil]; } } /* Default action for the "Select" button. */ - (IBAction)selectClicked:(id)sender { NSError *error; if ([@"" isEqual:[lineField stringValue]]) return; // Don't do anything on empty string if (![self selectLinesUsingDescription:[lineField stringValue] error:&error]) { [[self window] presentError:error]; [[self window] makeKeyAndOrderFront:nil]; } } @end TextEdit-master/MultiplePageView.h000066400000000000000000000013361271274630500175070ustar00rootroot00000000000000#import @interface MultiplePageView : NSView { NSPrintInfo *printInfo; NSColor *lineColor; NSColor *marginColor; NSUInteger numPages; } - (void)setPrintInfo:(NSPrintInfo *)anObject; - (NSPrintInfo *)printInfo; - (CGFloat)pageSeparatorHeight; - (NSSize)documentSizeInPage; /* Returns the area where the document can draw */ - (NSRect)documentRectForPageNumber:(NSUInteger)pageNumber; /* First page is page 0 */ - (NSRect)pageRectForPageNumber:(NSUInteger)pageNumber; /* First page is page 0 */ - (void)setNumberOfPages:(NSUInteger)num; - (NSUInteger)numberOfPages; - (void)setLineColor:(NSColor *)color; - (NSColor *)lineColor; - (void)setMarginColor:(NSColor *)color; - (NSColor *)marginColor; @end TextEdit-master/MultiplePageView.m000066400000000000000000000175031271274630500175170ustar00rootroot00000000000000/* MultiplePageView.m Copyright (c) 1995-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer View which holds all the pages together in the multiple-page case */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import #import "MultiplePageView.h" #import "Document.h" // For defaultTextPadding(); #import "TextEditMisc.h" @implementation MultiplePageView - (id)initWithFrame:(NSRect)rect { if ((self = [super initWithFrame:rect])) { numPages = 0; [self setLineColor:[NSColor lightGrayColor]]; [self setMarginColor:[NSColor whiteColor]]; /* This will set the frame to be whatever's appropriate... */ [self setPrintInfo:[NSPrintInfo sharedPrintInfo]]; } return self; } - (BOOL)isFlipped { return YES; } - (BOOL)isOpaque { return YES; } - (void)updateFrame { if ([self superview]) { NSRect rect = NSZeroRect; rect.size = [printInfo paperSize]; rect.size.height = rect.size.height * numPages; if (numPages > 1) rect.size.height += [self pageSeparatorHeight] * (numPages - 1); rect.size = [self convertSize:rect.size toView:[self superview]]; [self setFrame:rect]; } } - (void)setPrintInfo:(NSPrintInfo *)anObject { if (printInfo != anObject) { [printInfo autorelease]; printInfo = [anObject copyWithZone:[self zone]]; [self updateFrame]; [self setNeedsDisplay:YES]; /* Because the page size or margins might change (could optimize this) */ } } - (NSPrintInfo *)printInfo { return printInfo; } - (void)setNumberOfPages:(NSUInteger)num { if (numPages != num) { NSRect oldFrame = [self frame]; NSRect newFrame; numPages = num; [self updateFrame]; newFrame = [self frame]; if (newFrame.size.height > oldFrame.size.height) { [self setNeedsDisplayInRect:NSMakeRect(oldFrame.origin.x, NSMaxY(oldFrame), oldFrame.size.width, NSMaxY(newFrame) - NSMaxY(oldFrame))]; } } } - (NSUInteger)numberOfPages { return numPages; } - (CGFloat)pageSeparatorHeight { return 5.0; } - (void)dealloc { [printInfo release]; [super dealloc]; } - (NSSize)documentSizeInPage { NSSize paperSize = [printInfo paperSize]; paperSize.width -= ([printInfo leftMargin] + [printInfo rightMargin]) - defaultTextPadding() * 2.0; paperSize.height -= ([printInfo topMargin] + [printInfo bottomMargin]); return paperSize; } - (NSRect)documentRectForPageNumber:(NSUInteger)pageNumber { /* First page is page 0, of course! */ NSRect rect = [self pageRectForPageNumber:pageNumber]; rect.origin.x += [printInfo leftMargin] - defaultTextPadding(); rect.origin.y += [printInfo topMargin]; rect.size = [self documentSizeInPage]; return rect; } - (NSRect)pageRectForPageNumber:(NSUInteger)pageNumber { NSRect rect; rect.size = [printInfo paperSize]; rect.origin = [self frame].origin; rect.origin.y += ((rect.size.height + [self pageSeparatorHeight]) * pageNumber); return rect; } - (void)setLineColor:(NSColor *)color { if (color != lineColor) { [lineColor autorelease]; lineColor = [color copyWithZone:[self zone]]; [self setNeedsDisplay:YES]; } } - (NSColor *)lineColor { return lineColor; } - (void)setMarginColor:(NSColor *)color { if (color != marginColor) { [marginColor autorelease]; marginColor = [color copyWithZone:[self zone]]; [self setNeedsDisplay:YES]; } } - (NSColor *)marginColor { return marginColor; } - (void)drawRect:(NSRect)rect { if ([[NSGraphicsContext currentContext] isDrawingToScreen]) { NSSize paperSize = [printInfo paperSize]; NSUInteger firstPage = rect.origin.y / (paperSize.height + [self pageSeparatorHeight]); NSUInteger lastPage = NSMaxY(rect) / (paperSize.height + [self pageSeparatorHeight]); NSUInteger cnt; [marginColor set]; NSRectFill(rect); [lineColor set]; for (cnt = firstPage; cnt <= lastPage; cnt++) { // Draw boundary around the page, making sure it doesn't overlap the document area in terms of pixels NSRect docRect = NSInsetRect([self centerScanRect:[self documentRectForPageNumber:cnt]], -1.0, -1.0); NSFrameRectWithWidth(docRect, 1.0); } if ([[self superview] isKindOfClass:[NSClipView class]]) { NSColor *backgroundColor = [(NSClipView *)[self superview] backgroundColor]; [backgroundColor set]; for (cnt = firstPage; cnt <= lastPage; cnt++) { NSRect pageRect = [self pageRectForPageNumber:cnt]; NSRectFill (NSMakeRect(pageRect.origin.x, NSMaxY(pageRect), pageRect.size.width, [self pageSeparatorHeight])); } } } } /**** Printing support... ****/ - (BOOL)knowsPageRange:(NSRangePointer)aRange { aRange->length = [self numberOfPages]; return YES; } - (NSRect)rectForPage:(NSInteger)page { return [self documentRectForPageNumber:page-1]; /* Our page numbers start from 0; the kit's from 1 */ } /* This method makes sure that we center the view on the page. By default, the text view "bleeds" into the margins by defaultTextPadding() as a way to provide padding around the editing area. If we don't do anything special, the text view appears at the margin, which causes the text to be offset on the page by defaultTextPadding(). This method makes sure the text is centered. */ - (NSPoint)locationOfPrintRect:(NSRect)rect { NSSize paperSize = [printInfo paperSize]; return NSMakePoint((paperSize.width - rect.size.width) / 2.0, (paperSize.height - rect.size.height) / 2.0); } @end TextEdit-master/Preferences.h000066400000000000000000000015501271274630500165230ustar00rootroot00000000000000#import enum { HTMLDocumentTypeOptionUseTransitional = (1 << 0), HTMLDocumentTypeOptionUseXHTML = (1 << 1) }; typedef NSUInteger HTMLDocumentTypeOptions; enum { HTMLStylingUseEmbeddedCSS = 0, HTMLStylingUseInlineCSS = 1, HTMLStylingUseNoCSS = 2 }; typedef NSInteger HTMLStylingMode; @interface Preferences : NSWindowController { BOOL changingRTFFont; NSInteger originalDimensionFieldValue; } - (IBAction)revertToDefault:(id)sender; - (IBAction)changeRichTextFont:(id)sender; /* Request to change the rich text font */ - (IBAction)changePlainTextFont:(id)sender; /* Request to change the plain text font */ - (void)changeFont:(id)fontManager; /* Sent by the font manager */ - (NSFont *)richTextFont; - (void)setRichTextFont:(NSFont *)newFont; - (NSFont *)plainTextFont; - (void)setPlainTextFont:(NSFont *)newFont; @end TextEdit-master/Preferences.m000066400000000000000000000212201271274630500165240ustar00rootroot00000000000000/* Preferences.m Copyright (c) 1995-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer Preferences controller, subclass of NSWindowController. Since the switch to a bindings-based preferences interface, the class has become a lot simpler; its only duties now are to manage the user fonts for rich and plain text documents, translate HTML saving options from backwards-compatible defaults values into pop-up menu item tags, and revert everything to the initial defaults if the user so chooses. The Preferences instance also acts as a delegate for the window, in order to validate edits before it closes, and for the two text fields bound to the window size in characters, so that invalid entries trigger a reset to a field's previous value. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import #import "Preferences.h" #import "EncodingManager.h" #import "FontNameTransformer.h" #import "TextEditDefaultsKeys.h" @implementation Preferences - (id)init { return [super initWithWindowNibName:@"Preferences"]; } - (void)windowDidLoad { NSWindow *window = [self window]; [window setHidesOnDeactivate:NO]; [window setExcludedFromWindowsMenu:YES]; } //#pragma mark *** Font changing code *** - (IBAction)changeRichTextFont:(id)sender { // validate whatever's currently being edited first if ([[self window] makeFirstResponder:nil]) { changingRTFFont = YES; NSFontManager *fontManager = [NSFontManager sharedFontManager]; [fontManager setSelectedFont:[self richTextFont] isMultiple:NO]; [fontManager orderFrontFontPanel:self]; } } - (IBAction)changePlainTextFont:(id)sender { // validate whatever's currently being edited first if ([[self window] makeFirstResponder:nil]) { changingRTFFont = NO; NSFontManager *fontManager = [NSFontManager sharedFontManager]; [fontManager setSelectedFont:[self plainTextFont] isMultiple:NO]; [fontManager orderFrontFontPanel:self]; } } - (void)changeFont:(id)fontManager { if (changingRTFFont) { [self setRichTextFont:[fontManager convertFont:[self richTextFont]]]; } else { [self setPlainTextFont:[fontManager convertFont:[self plainTextFont]]]; } } - (void)setRichTextFont:(NSFont *)newFont { [NSFont setUserFont:newFont]; } - (void)setPlainTextFont:(NSFont *)newFont { [NSFont setUserFixedPitchFont:newFont]; } - (NSFont *)richTextFont { return [NSFont userFontOfSize:0.0]; } - (NSFont *)plainTextFont { return [NSFont userFixedPitchFontOfSize:0.0]; } //#pragma mark *** HTML document type and styling code *** /* The user chooses the HTML document type using a popup button, but the actual type is represented as a two-bit bitfield, where one bit represents whether or not to use a transitional DTD and another bit determines whether or not to use XHTML. The popup button uses the bitfield's integer value as its tag. */ - (HTMLDocumentTypeOptions)HTMLDocumentType { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; HTMLDocumentTypeOptions type = 0; if ([defaults boolForKey:UseXHTMLDocType]) type |= HTMLDocumentTypeOptionUseXHTML; if ([defaults boolForKey:UseTransitionalDocType]) type |= HTMLDocumentTypeOptionUseTransitional; return type; } - (void)setHTMLDocumentType:(HTMLDocumentTypeOptions)newType { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool:((newType & HTMLDocumentTypeOptionUseXHTML) == HTMLDocumentTypeOptionUseXHTML) forKey:UseXHTMLDocType]; [defaults setBool:((newType & HTMLDocumentTypeOptionUseTransitional) == HTMLDocumentTypeOptionUseTransitional) forKey:UseTransitionalDocType]; } /* The style mode is how style information is encoded when saving HTML: using embedded or inline CSS, or using older HTML tags and attributes. For backwards compatibility this information is stored in user defaults as two boolean values, rather than a style mode name or enumerated integer value. */ - (HTMLStylingMode)HTMLStylingMode { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults boolForKey:UseEmbeddedCSS]) { return HTMLStylingUseEmbeddedCSS; } else if ([defaults boolForKey:UseInlineCSS]) { return HTMLStylingUseInlineCSS; } else { return HTMLStylingUseNoCSS; } } - (void)setHTMLStylingMode:(HTMLStylingMode)newMode { BOOL useEmbedded = NO; BOOL useInline = NO; switch (newMode) { case HTMLStylingUseEmbeddedCSS: useEmbedded = YES; break; case HTMLStylingUseInlineCSS: useInline = YES; break; // ignore default case } NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool:useEmbedded forKey:UseEmbeddedCSS]; [defaults setBool:useInline forKey:UseInlineCSS]; } //#pragma mark *** Reverting to defaults *** - (IBAction)revertToDefault:(id)sender { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [self willChangeValueForKey:@"HTMLDocumentType"]; [defaults removeObjectForKey:UseXHTMLDocType]; [defaults removeObjectForKey:UseTransitionalDocType]; [self didChangeValueForKey:@"HTMLDocumentType"]; [self willChangeValueForKey:@"HTMLStylingMode"]; [defaults removeObjectForKey:UseEmbeddedCSS]; [defaults removeObjectForKey:UseInlineCSS]; [self didChangeValueForKey:@"HTMLStylingMode"]; [self setRichTextFont:nil]; [self setPlainTextFont:nil]; [[NSUserDefaultsController sharedUserDefaultsController] revertToInitialValues:nil]; // For the rest of the defaults } //#pragma mark *** Window delegation *** /* We do this to catch the case where the user enters a value into one of the text fields but closes the window without hitting enter or tab. */ - (BOOL)windowShouldClose:(NSWindow *)window { return [window makeFirstResponder:nil]; // validate editing } //#pragma mark *** Window size field delegation *** - (void)controlTextDidBeginEditing:(NSNotification *)note { originalDimensionFieldValue = [[note object] integerValue]; } /* Handle the case when the user enters a ridiculous value for the window size. We just set it back to what it started as. */ - (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(NSString *)error { [control setIntegerValue:originalDimensionFieldValue]; return YES; } @end TextEdit-master/PrintPanelAccessoryController.h000066400000000000000000000003441271274630500222560ustar00rootroot00000000000000#import @interface PrintPanelAccessoryController : NSViewController// - (IBAction)changePageNumbering:(id)sender; - (void)setPageNumbering:(BOOL)flag; - (BOOL)pageNumbering; @end TextEdit-master/PrintPanelAccessoryController.m000066400000000000000000000111601271274630500222610ustar00rootroot00000000000000/* PrintPanelAccessoryController.m Copyright (c) 2007-2009 by Apple Computer, Inc., all rights reserved. Author: Ali Ozer PrintPanelAccessoryController is a subclass of NSViewController demonstrating how to add an accessory view to the print panel. */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import "PrintPanelAccessoryController.h" #import "TextEditDefaultsKeys.h" @implementation PrintPanelAccessoryController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { // We override the designated initializer, ignoring the nib since we need our own return [super initWithNibName:@"PrintPanelAccessory" bundle:nibBundleOrNil]; } /* The first time the printInfo is supplied, initialize the value of the pageNumbering setting from defaults */ - (void)setRepresentedObject:(id)printInfo { [super setRepresentedObject:printInfo]; [self setPageNumbering:[[[NSUserDefaults standardUserDefaults] objectForKey:NumberPagesWhenPrinting] boolValue]]; } - (void)setPageNumbering:(BOOL)flag { NSPrintInfo *printInfo = [self representedObject]; [[printInfo dictionary] setObject:[NSNumber numberWithBool:flag] forKey:NSPrintHeaderAndFooter]; } - (BOOL)pageNumbering { NSPrintInfo *printInfo = [self representedObject]; return [[[printInfo dictionary] objectForKey:NSPrintHeaderAndFooter] boolValue]; } - (IBAction)changePageNumbering:(id)sender { [self setPageNumbering:[sender state] ? YES : NO]; } - (NSSet *)keyPathsForValuesAffectingPreview { return [NSSet setWithObject:@"pageNumbering"]; } /* This enables TextEdit-specific settings to be displayed in the Summary pane of the print panel */ - (NSArray *)localizedSummaryItems { return [NSArray array]; /* return [NSArray arrayWithObject: [NSDictionary dictionaryWithObjectsAndKeys: NSLocalizedStringFromTable(@"Header and Footer", @"PrintPanelAccessory", @"Print panel summary item title for whether header and footer (page number, date, document title) should be printed"), NSPrintPanelAccessorySummaryItemNameKey, [self pageNumbering] ? NSLocalizedStringFromTable(@"On", @"PrintPanelAccessory", @"Print panel summary value when header and footer printing is on") : NSLocalizedStringFromTable(@"Off", @"PrintPanelAccessory", @"Print panel summary value when header and footer printing is off"), NSPrintPanelAccessorySummaryItemDescriptionKey, nil]]; */ } @end TextEdit-master/ScalingScrollView.h000066400000000000000000000004461271274630500176570ustar00rootroot00000000000000#import @class NSPopUpButton; @interface ScalingScrollView : NSScrollView { NSPopUpButton *_scalePopUpButton; CGFloat scaleFactor; } - (IBAction)scalePopUpAction:(id)sender; - (void)setScaleFactor:(CGFloat)factor adjustPopup:(BOOL)flag; - (CGFloat)scaleFactor; @end TextEdit-master/ScalingScrollView.m000066400000000000000000000223621271274630500176650ustar00rootroot00000000000000/* ScalingScrollView.m Copyright (c) 1995-2009 by Apple Computer, Inc., all rights reserved. Author: Mike Ferris */ /* IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in consideration of your agreement to the following terms, and your use, installation, modification or redistribution of this Apple software constitutes acceptance of these terms. If you do not agree with these terms, please do not use, install, modify or redistribute this Apple software. In consideration of your agreement to abide by the following terms, and subject to these terms, Apple grants you a personal, non-exclusive license, under Apple's copyrights in this original Apple software (the "Apple Software"), to use, reproduce, modify and redistribute the Apple Software, with or without modifications, in source and/or binary forms; provided that if you redistribute the Apple Software in its entirety and without modifications, you must retain this notice and the following text and disclaimers in all such redistributions of the Apple Software. Neither the name, trademarks, service marks or logos of Apple Computer, Inc. may be used to endorse or promote products derived from the Apple Software without specific prior written permission from Apple. Except as expressly stated in this notice, no other rights or licenses, express or implied, are granted by Apple herein, including but not limited to any patent rights that may be infringed by your derivative works or by other works in which the Apple Software may be incorporated. The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import #import "ScalingScrollView.h" /* For genstrings: NSLocalizedStringFromTable(@"10%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"25%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"50%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"75%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"100%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"125%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"150%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"200%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"400%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"800%", @"ZoomValues", @"Zoom popup entry") NSLocalizedStringFromTable(@"1600%", @"ZoomValues", @"Zoom popup entry") */ static NSString *_NSDefaultScaleMenuLabels[] = {/* @"Set...", */ @"10%", @"25%", @"50%", @"75%", @"100%", @"125%", @"150%", @"200%", @"400%", @"800%", @"1600%"}; static const CGFloat _NSDefaultScaleMenuFactors[] = {/* 0.0, */ 0.1, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 4.0, 8.0, 16.0}; static NSUInteger _NSDefaultScaleMenuSelectedItemIndex = 4; static const CGFloat _NSScaleMenuFontSize = 10.0; @implementation ScalingScrollView - (id)initWithFrame:(NSRect)rect { if ((self = [super initWithFrame:rect])) { scaleFactor = 1.0; } return self; } - (void)makeScalePopUpButton { if (_scalePopUpButton == nil) { NSUInteger cnt, numberOfDefaultItems = (sizeof(_NSDefaultScaleMenuLabels) / sizeof(NSString *)); id curItem; // create it _scalePopUpButton = [[NSPopUpButton allocWithZone:[self zone]] initWithFrame:NSMakeRect(0.0, 0.0, 1.0, 1.0) pullsDown:NO]; [(NSPopUpButtonCell *)[_scalePopUpButton cell] setBezelStyle:NSShadowlessSquareBezelStyle]; [[_scalePopUpButton cell] setArrowPosition:NSPopUpArrowAtBottom]; // fill it for (cnt = 0; cnt < numberOfDefaultItems; cnt++) { [_scalePopUpButton addItemWithTitle:NSLocalizedStringFromTable(_NSDefaultScaleMenuLabels[cnt], @"ZoomValues", nil)]; curItem = [_scalePopUpButton itemAtIndex:cnt]; if (_NSDefaultScaleMenuFactors[cnt] != 0.0) { [curItem setRepresentedObject:[NSNumber numberWithDouble:_NSDefaultScaleMenuFactors[cnt]]]; } } [_scalePopUpButton selectItemAtIndex:_NSDefaultScaleMenuSelectedItemIndex]; // hook it up [_scalePopUpButton setTarget:self]; [_scalePopUpButton setAction:@selector(scalePopUpAction:)]; // set a suitable font [_scalePopUpButton setFont:[NSFont toolTipsFontOfSize:_NSScaleMenuFontSize]]; // Make sure the popup is big enough to fit the cells. [_scalePopUpButton sizeToFit]; // don't let it become first responder [_scalePopUpButton setRefusesFirstResponder:YES]; // put it in the scrollview [self addSubview:_scalePopUpButton]; [_scalePopUpButton release]; } } - (void)tile { // Let the superclass do most of the work. [super tile]; if (![self hasHorizontalScroller]) { if (_scalePopUpButton) [_scalePopUpButton removeFromSuperview]; _scalePopUpButton = nil; } else { NSScroller *horizScroller; NSRect horizScrollerFrame, buttonFrame; if (!_scalePopUpButton) [self makeScalePopUpButton]; horizScroller = [self horizontalScroller]; horizScrollerFrame = [horizScroller frame]; buttonFrame = [_scalePopUpButton frame]; // Now we'll just adjust the horizontal scroller size and set the button size and location. horizScrollerFrame.size.width = horizScrollerFrame.size.width - buttonFrame.size.width; [horizScroller setFrameSize:horizScrollerFrame.size]; buttonFrame.origin.x = NSMaxX(horizScrollerFrame); buttonFrame.size.height = horizScrollerFrame.size.height + 1.0; buttonFrame.origin.y = [self bounds].size.height - buttonFrame.size.height + 1.0; [_scalePopUpButton setFrame:buttonFrame]; } } - (void)drawRect:(NSRect)rect { NSRect verticalLineRect; [super drawRect:rect]; if ([_scalePopUpButton superview]) { verticalLineRect = [_scalePopUpButton frame]; verticalLineRect.origin.x -= 1.0; verticalLineRect.size.width = 1.0; if (NSIntersectsRect(rect, verticalLineRect)) { [[NSColor blackColor] set]; NSRectFill(verticalLineRect); } } } - (IBAction)scalePopUpAction:(id)sender { NSNumber *selectedFactorObject = [[sender selectedCell] representedObject]; if (selectedFactorObject == nil) { NSLog(@"Scale popup action: setting arbitrary zoom factors is not yet supported."); return; } else { [self setScaleFactor:[selectedFactorObject doubleValue] adjustPopup:NO]; } } - (CGFloat)scaleFactor { return scaleFactor; } - (void)setScaleFactor:(CGFloat)newScaleFactor { if (scaleFactor != newScaleFactor) { scaleFactor = newScaleFactor; NSView *clipView = [[self documentView] superview]; // Get the frame. The frame must stay the same. NSSize curDocFrameSize = [clipView frame].size; // The new bounds will be frame divided by scale factor NSSize newDocBoundsSize = {curDocFrameSize.width / scaleFactor, curDocFrameSize.height / scaleFactor}; [clipView setBoundsSize:newDocBoundsSize]; // Not required on OS X, but this is an implementation detail; // it's a bug not to call this here because -[NSView setBoundsSize:] is // explicitly not supposed to mark the view as needing display. [clipView setNeedsDisplay: YES]; } } - (void)setScaleFactor:(CGFloat)newScaleFactor adjustPopup:(BOOL)flag { if (flag) { // Coming from elsewhere, first validate it NSUInteger cnt = 0, numberOfDefaultItems = (sizeof(_NSDefaultScaleMenuFactors) / sizeof(CGFloat)); // We only work with some preset zoom values, so choose one of the appropriate values (Fudge a little for floating point == to work) while (cnt < numberOfDefaultItems && newScaleFactor * .99 > _NSDefaultScaleMenuFactors[cnt]) cnt++; if (cnt == numberOfDefaultItems) cnt--; [_scalePopUpButton selectItemAtIndex:cnt]; newScaleFactor = _NSDefaultScaleMenuFactors[cnt]; } [self setScaleFactor:newScaleFactor]; } - (void)setHasHorizontalScroller:(BOOL)flag { if (!flag) [self setScaleFactor:1.0 adjustPopup:NO]; [super setHasHorizontalScroller:flag]; } /* Reassure AppKit that ScalingScrollView supports live resize content preservation, even though it's a subclass that could have modified NSScrollView in such a way as to make NSScrollView's live resize content preservation support inoperative. By default this is disabled for NSScrollView subclasses. */ - (BOOL)preservesContentDuringLiveResize { return [self drawsBackground]; } @end TextEdit-master/TextEdit.xcodeproj/000077500000000000000000000000001271274630500176365ustar00rootroot00000000000000TextEdit-master/TextEdit.xcodeproj/project.pbxproj000066400000000000000000000726571271274630500227330ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 176A30480E23EB0600857A3B /* FontNameTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 176A30460E23EB0600857A3B /* FontNameTransformer.h */; }; 176A30490E23EB0600857A3B /* FontNameTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 176A30470E23EB0600857A3B /* FontNameTransformer.m */; }; 176A304D0E23EB6B00857A3B /* TextEditDefaultsKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 176A304C0E23EB6B00857A3B /* TextEditDefaultsKeys.h */; }; 41097A6808F6EE81001E6639 /* TextEditErrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 41097A6708F6EE81001E6639 /* TextEditErrors.h */; }; 411131DA0D4FA70D00AF3A0E /* TextEditMisc.h in Headers */ = {isa = PBXBuildFile; fileRef = 411131D90D4FA70D00AF3A0E /* TextEditMisc.h */; }; 412CFBD50B62AC8A00A46D76 /* LinePanelController.h in Headers */ = {isa = PBXBuildFile; fileRef = 412CFBD30B62AC8A00A46D76 /* LinePanelController.h */; }; 412CFBD60B62AC8A00A46D76 /* LinePanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 412CFBD40B62AC8A00A46D76 /* LinePanelController.m */; }; 413912160BD54AB700760A3D /* DocumentPropertiesPanelController.h in Headers */ = {isa = PBXBuildFile; fileRef = 413912140BD54AB700760A3D /* DocumentPropertiesPanelController.h */; }; 413912170BD54AB800760A3D /* DocumentPropertiesPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 413912150BD54AB700760A3D /* DocumentPropertiesPanelController.m */; }; 415B215C07BC0732009CEA53 /* Document.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE20903FE93D5F211CA2CEA /* Document.h */; }; 415B215D07BC0732009CEA53 /* Controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE20904FE93D5F211CA2CEA /* Controller.h */; }; 415B215E07BC0732009CEA53 /* MultiplePageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE20905FE93D5F211CA2CEA /* MultiplePageView.h */; }; 415B215F07BC0732009CEA53 /* ScalingScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE20907FE93D5F211CA2CEA /* ScalingScrollView.h */; }; 415B216007BC0732009CEA53 /* Preferences.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE20908FE93D5F211CA2CEA /* Preferences.h */; }; 415B216107BC0732009CEA53 /* EncodingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 92A68B0A02972957007F9DE6 /* EncodingManager.h */; }; 415B216307BC0732009CEA53 /* EncodingAccessory.nib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE2090CFE93D5F211CA2CEA /* EncodingAccessory.nib */; }; 415B216407BC0732009CEA53 /* Preferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE20910FE93D5F211CA2CEA /* Preferences.nib */; }; 415B216507BC0732009CEA53 /* Edit.nib in Resources */ = {isa = PBXBuildFile; fileRef = 6FE20912FE93D5F211CA2CEA /* Edit.nib */; }; 415B217207BC0732009CEA53 /* DocumentWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = F549503200E2A3BB01CA0CA4 /* DocumentWindow.nib */; }; 415B217307BC0732009CEA53 /* SelectEncodingsPanel.nib in Resources */ = {isa = PBXBuildFile; fileRef = 92A68B1702972AB9007F9DE6 /* SelectEncodingsPanel.nib */; }; 415B217707BC0732009CEA53 /* DocumentProperties.nib in Resources */ = {isa = PBXBuildFile; fileRef = 41278ABE06AF663000B5D78D /* DocumentProperties.nib */; }; 415B217907BC0732009CEA53 /* Document.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE208FBFE93D5F211CA2CEA /* Document.m */; settings = {ATTRIBUTES = (); }; }; 415B217B07BC0732009CEA53 /* Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE208FDFE93D5F211CA2CEA /* Controller.m */; settings = {ATTRIBUTES = (); }; }; 415B217C07BC0732009CEA53 /* ScalingScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE208FEFE93D5F211CA2CEA /* ScalingScrollView.m */; settings = {ATTRIBUTES = (); }; }; 415B217D07BC0732009CEA53 /* MultiplePageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE208FFFE93D5F211CA2CEA /* MultiplePageView.m */; settings = {ATTRIBUTES = (); }; }; 415B217E07BC0732009CEA53 /* Preferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE20900FE93D5F211CA2CEA /* Preferences.m */; settings = {ATTRIBUTES = (); }; }; 415B217F07BC0732009CEA53 /* Edit_main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6FE2090AFE93D5F211CA2CEA /* Edit_main.m */; settings = {ATTRIBUTES = (); }; }; 415B218007BC0732009CEA53 /* EncodingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 92A68B0B02972957007F9DE6 /* EncodingManager.m */; }; 415B218207BC0732009CEA53 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0230D2BAFF2F83FC11CA0C5D /* Cocoa.framework */; }; 419167BC0B78226D00B4CA33 /* SelectLinePanel.nib in Resources */ = {isa = PBXBuildFile; fileRef = 419167BA0B78226C00B4CA33 /* SelectLinePanel.nib */; }; 41FA793A0B95E61A00FA84AA /* PrintPanelAccessoryController.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FA79380B95E61A00FA84AA /* PrintPanelAccessoryController.h */; }; 41FA793B0B95E61A00FA84AA /* PrintPanelAccessoryController.m in Sources */ = {isa = PBXBuildFile; fileRef = 41FA79390B95E61A00FA84AA /* PrintPanelAccessoryController.m */; }; 41FA79A10B95F0F300FA84AA /* PrintPanelAccessory.nib in Resources */ = {isa = PBXBuildFile; fileRef = 41FA799F0B95F0F300FA84AA /* PrintPanelAccessory.nib */; }; 66B13B0914D8B4C20040230D /* accessories-text-editor.icns in Resources */ = {isa = PBXBuildFile; fileRef = 66B13B0814D8B4C20040230D /* accessories-text-editor.icns */; }; FB69D020085E20E300646BBF /* DocumentWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = FB69D01E085E20E300646BBF /* DocumentWindowController.h */; }; FB69D021085E20E300646BBF /* DocumentWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = FB69D01F085E20E300646BBF /* DocumentWindowController.m */; }; FBF176CA084E77CE005F6CEB /* DocumentController.h in Headers */ = {isa = PBXBuildFile; fileRef = FBF176C8084E77CE005F6CEB /* DocumentController.h */; }; FBF176CB084E77CE005F6CEB /* DocumentController.m in Sources */ = {isa = PBXBuildFile; fileRef = FBF176C9084E77CE005F6CEB /* DocumentController.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 0230D2BAFF2F83FC11CA0C5D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 0230D2BFFF2F85EF11CA0C5D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 0230D2C1FF2F85EF11CA0C5D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 176A30460E23EB0600857A3B /* FontNameTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FontNameTransformer.h; sourceTree = ""; }; 176A30470E23EB0600857A3B /* FontNameTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FontNameTransformer.m; sourceTree = ""; }; 176A304C0E23EB6B00857A3B /* TextEditDefaultsKeys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextEditDefaultsKeys.h; sourceTree = ""; }; 41097A6708F6EE81001E6639 /* TextEditErrors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextEditErrors.h; sourceTree = ""; }; 411131D90D4FA70D00AF3A0E /* TextEditMisc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextEditMisc.h; sourceTree = ""; }; 41278ABF06AF663000B5D78D /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/DocumentProperties.nib; sourceTree = ""; }; 412CFBD30B62AC8A00A46D76 /* LinePanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinePanelController.h; sourceTree = ""; }; 412CFBD40B62AC8A00A46D76 /* LinePanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LinePanelController.m; sourceTree = ""; }; 413912140BD54AB700760A3D /* DocumentPropertiesPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentPropertiesPanelController.h; sourceTree = ""; }; 413912150BD54AB700760A3D /* DocumentPropertiesPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DocumentPropertiesPanelController.m; sourceTree = ""; }; 415B218607BC0732009CEA53 /* TextEdit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TextEdit.app; sourceTree = BUILT_PRODUCTS_DIR; }; 419167BB0B78226D00B4CA33 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SelectLinePanel.nib; sourceTree = ""; }; 41FA79380B95E61A00FA84AA /* PrintPanelAccessoryController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrintPanelAccessoryController.h; sourceTree = ""; }; 41FA79390B95E61A00FA84AA /* PrintPanelAccessoryController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrintPanelAccessoryController.m; sourceTree = ""; }; 41FA79A00B95F0F300FA84AA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/PrintPanelAccessory.nib; sourceTree = ""; }; 669922A113D4B3CB000E6FCB /* TextEditInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = TextEditInfo.plist; sourceTree = ""; }; 66B13B0814D8B4C20040230D /* accessories-text-editor.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "accessories-text-editor.icns"; sourceTree = ""; }; 6FE208FBFE93D5F211CA2CEA /* Document.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Document.m; sourceTree = ""; }; 6FE208FDFE93D5F211CA2CEA /* Controller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Controller.m; sourceTree = ""; }; 6FE208FEFE93D5F211CA2CEA /* ScalingScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ScalingScrollView.m; sourceTree = ""; }; 6FE208FFFE93D5F211CA2CEA /* MultiplePageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiplePageView.m; sourceTree = ""; }; 6FE20900FE93D5F211CA2CEA /* Preferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Preferences.m; sourceTree = ""; }; 6FE20903FE93D5F211CA2CEA /* Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Document.h; sourceTree = ""; }; 6FE20904FE93D5F211CA2CEA /* Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Controller.h; sourceTree = ""; }; 6FE20905FE93D5F211CA2CEA /* MultiplePageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiplePageView.h; sourceTree = ""; }; 6FE20907FE93D5F211CA2CEA /* ScalingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScalingScrollView.h; sourceTree = ""; }; 6FE20908FE93D5F211CA2CEA /* Preferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Preferences.h; sourceTree = ""; }; 6FE2090AFE93D5F211CA2CEA /* Edit_main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Edit_main.m; sourceTree = ""; }; 6FE2090DFE93D5F211CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/EncodingAccessory.nib; sourceTree = ""; }; 6FE20911FE93D5F211CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Preferences.nib; sourceTree = ""; }; 6FE20914FE93D5F211CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/Edit.nib; sourceTree = ""; }; 92A68B0A02972957007F9DE6 /* EncodingManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EncodingManager.h; sourceTree = ""; }; 92A68B0B02972957007F9DE6 /* EncodingManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EncodingManager.m; sourceTree = ""; }; 92A68B1802972AB9007F9DE6 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SelectEncodingsPanel.nib; sourceTree = ""; }; F549503200E2A3BB01CA0CA4 /* DocumentWindow.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = DocumentWindow.nib; sourceTree = ""; }; FB69D01E085E20E300646BBF /* DocumentWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentWindowController.h; sourceTree = ""; }; FB69D01F085E20E300646BBF /* DocumentWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DocumentWindowController.m; sourceTree = ""; }; FBF176C8084E77CE005F6CEB /* DocumentController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentController.h; sourceTree = ""; }; FBF176C9084E77CE005F6CEB /* DocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DocumentController.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 415B218107BC0732009CEA53 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 415B218207BC0732009CEA53 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 0230D2BEFF2F85A411CA0C5D /* References (Non-linked frameworks) */ = { isa = PBXGroup; children = ( 0230D2BFFF2F85EF11CA0C5D /* AppKit.framework */, 0230D2C1FF2F85EF11CA0C5D /* Foundation.framework */, ); name = "References (Non-linked frameworks)"; sourceTree = ""; }; 0866A932FE94153C11CA2CEA /* Products */ = { isa = PBXGroup; children = ( 415B218607BC0732009CEA53 /* TextEdit.app */, ); name = Products; sourceTree = ""; }; 6FE208F9FE93D5F211CA2CEA /* TextEdit */ = { isa = PBXGroup; children = ( 669922A113D4B3CB000E6FCB /* TextEditInfo.plist */, 6FE20903FE93D5F211CA2CEA /* Document.h */, 6FE208FBFE93D5F211CA2CEA /* Document.m */, FB69D01E085E20E300646BBF /* DocumentWindowController.h */, FB69D01F085E20E300646BBF /* DocumentWindowController.m */, FBF176C8084E77CE005F6CEB /* DocumentController.h */, FBF176C9084E77CE005F6CEB /* DocumentController.m */, 6FE20904FE93D5F211CA2CEA /* Controller.h */, 6FE208FDFE93D5F211CA2CEA /* Controller.m */, 412CFBD30B62AC8A00A46D76 /* LinePanelController.h */, 412CFBD40B62AC8A00A46D76 /* LinePanelController.m */, 413912140BD54AB700760A3D /* DocumentPropertiesPanelController.h */, 413912150BD54AB700760A3D /* DocumentPropertiesPanelController.m */, 41FA79380B95E61A00FA84AA /* PrintPanelAccessoryController.h */, 41FA79390B95E61A00FA84AA /* PrintPanelAccessoryController.m */, 6FE20907FE93D5F211CA2CEA /* ScalingScrollView.h */, 6FE208FEFE93D5F211CA2CEA /* ScalingScrollView.m */, 6FE20905FE93D5F211CA2CEA /* MultiplePageView.h */, 6FE208FFFE93D5F211CA2CEA /* MultiplePageView.m */, 6FE20908FE93D5F211CA2CEA /* Preferences.h */, 6FE20900FE93D5F211CA2CEA /* Preferences.m */, 176A30460E23EB0600857A3B /* FontNameTransformer.h */, 176A30470E23EB0600857A3B /* FontNameTransformer.m */, 92A68B0A02972957007F9DE6 /* EncodingManager.h */, 92A68B0B02972957007F9DE6 /* EncodingManager.m */, 176A304C0E23EB6B00857A3B /* TextEditDefaultsKeys.h */, 41097A6708F6EE81001E6639 /* TextEditErrors.h */, 411131D90D4FA70D00AF3A0E /* TextEditMisc.h */, 6FE2090AFE93D5F211CA2CEA /* Edit_main.m */, 6FE2090BFE93D5F211CA2CEA /* Interfaces */, 6FE20917FE93D5F211CA2CEA /* Images */, 6FE2091BFE93D5F211CA2CEA /* Resources */, 6FE2092DFE93D5F211CA2CEA /* Supporting Files */, 6FE20939FE93D5F211CA2CEA /* External Frameworks and Libraries */, 0866A932FE94153C11CA2CEA /* Products */, ); name = TextEdit; sourceTree = ""; }; 6FE2090BFE93D5F211CA2CEA /* Interfaces */ = { isa = PBXGroup; children = ( F549503200E2A3BB01CA0CA4 /* DocumentWindow.nib */, 6FE20912FE93D5F211CA2CEA /* Edit.nib */, 6FE20910FE93D5F211CA2CEA /* Preferences.nib */, 6FE2090CFE93D5F211CA2CEA /* EncodingAccessory.nib */, 41FA799F0B95F0F300FA84AA /* PrintPanelAccessory.nib */, 92A68B1702972AB9007F9DE6 /* SelectEncodingsPanel.nib */, 41278ABE06AF663000B5D78D /* DocumentProperties.nib */, 419167BA0B78226C00B4CA33 /* SelectLinePanel.nib */, ); name = Interfaces; sourceTree = ""; }; 6FE20917FE93D5F211CA2CEA /* Images */ = { isa = PBXGroup; children = ( 66B13B0814D8B4C20040230D /* accessories-text-editor.icns */, ); name = Images; sourceTree = ""; }; 6FE2091BFE93D5F211CA2CEA /* Resources */ = { isa = PBXGroup; children = ( ); name = Resources; sourceTree = ""; }; 6FE2092DFE93D5F211CA2CEA /* Supporting Files */ = { isa = PBXGroup; children = ( ); name = "Supporting Files"; sourceTree = ""; }; 6FE20939FE93D5F211CA2CEA /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( 0230D2BAFF2F83FC11CA0C5D /* Cocoa.framework */, 0230D2BEFF2F85A411CA0C5D /* References (Non-linked frameworks) */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 415B215B07BC0732009CEA53 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 415B215C07BC0732009CEA53 /* Document.h in Headers */, 415B215D07BC0732009CEA53 /* Controller.h in Headers */, 415B215E07BC0732009CEA53 /* MultiplePageView.h in Headers */, 415B215F07BC0732009CEA53 /* ScalingScrollView.h in Headers */, 415B216007BC0732009CEA53 /* Preferences.h in Headers */, 415B216107BC0732009CEA53 /* EncodingManager.h in Headers */, FBF176CA084E77CE005F6CEB /* DocumentController.h in Headers */, FB69D020085E20E300646BBF /* DocumentWindowController.h in Headers */, 41097A6808F6EE81001E6639 /* TextEditErrors.h in Headers */, 412CFBD50B62AC8A00A46D76 /* LinePanelController.h in Headers */, 41FA793A0B95E61A00FA84AA /* PrintPanelAccessoryController.h in Headers */, 413912160BD54AB700760A3D /* DocumentPropertiesPanelController.h in Headers */, 411131DA0D4FA70D00AF3A0E /* TextEditMisc.h in Headers */, 176A30480E23EB0600857A3B /* FontNameTransformer.h in Headers */, 176A304D0E23EB6B00857A3B /* TextEditDefaultsKeys.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 415B215A07BC0732009CEA53 /* TextEdit */ = { isa = PBXNativeTarget; buildConfigurationList = 41534B8E08A2B299002069FE /* Build configuration list for PBXNativeTarget "TextEdit" */; buildPhases = ( 415B215B07BC0732009CEA53 /* Headers */, 415B216207BC0732009CEA53 /* Resources */, 415B217807BC0732009CEA53 /* Sources */, 415B218107BC0732009CEA53 /* Frameworks */, 415B218307BC0732009CEA53 /* Rez */, 415B218407BC0732009CEA53 /* ShellScript */, ); buildRules = ( ); dependencies = ( ); name = TextEdit; productInstallPath = "$(SYSTEM_APPS_DIR)"; productName = TextEdit; productReference = 415B218607BC0732009CEA53 /* TextEdit.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 6FE208F8FE93D5F211CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = 41534B9208A2B299002069FE /* Build configuration list for PBXProject "TextEdit" */; compatibilityVersion = "Xcode 2.4"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( English, Japanese, French, German, ); mainGroup = 6FE208F9FE93D5F211CA2CEA /* TextEdit */; projectDirPath = ""; projectRoot = ""; targets = ( 415B215A07BC0732009CEA53 /* TextEdit */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 415B216207BC0732009CEA53 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 415B216307BC0732009CEA53 /* EncodingAccessory.nib in Resources */, 415B216407BC0732009CEA53 /* Preferences.nib in Resources */, 415B216507BC0732009CEA53 /* Edit.nib in Resources */, 415B217207BC0732009CEA53 /* DocumentWindow.nib in Resources */, 415B217307BC0732009CEA53 /* SelectEncodingsPanel.nib in Resources */, 415B217707BC0732009CEA53 /* DocumentProperties.nib in Resources */, 419167BC0B78226D00B4CA33 /* SelectLinePanel.nib in Resources */, 41FA79A10B95F0F300FA84AA /* PrintPanelAccessory.nib in Resources */, 66B13B0914D8B4C20040230D /* accessories-text-editor.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ 415B218307BC0732009CEA53 /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 415B218407BC0732009CEA53 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 8; files = ( ); runOnlyForDeploymentPostprocessing = 1; shellPath = /bin/sh; shellScript = "# This shell-script build phase happens only when installing and causes the \n# project sources (which are shipped as an example) to be installed along \n# with the application.\n\nEXAMPLESDIR=${SYSTEM_DEVELOPER_DIR}/Examples\n\n# install the source\nxcodebuild installsrc \"SYMROOT=${SYMROOT}\" \"OBJROOT=${OBJROOT}\" \"DSTROOT=${DSTROOT}\" \"SRCROOT=${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}\"\n\n# fix up some stuff\nsed '/APPLE INTERNAL SELF TEST/q' ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}/Controller.m | grep -v \"APPLE INTERNAL SELF TEST\" > ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}/Controller.m~\nmv ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}/Controller.m~ ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}/Controller.m\n\n# strip out garbage\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \"*~\" -exec rm -rf {} \\; -prune ; \nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \"*~.*\" -exec rm -rf {} \\; -prune ; \nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -type d -name \"CVS\" -exec rm -rf {} \\; -prune ;\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \"*.pbxuser\" -exec rm -rf {} \\; ;\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \"*.perspective*\" -exec rm -rf {} \\; ;\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \"*.mode[1234567890]\" -exec rm -rf {} \\; ;\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \".nfs*\" -exec rm -rf {} \\; ;\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \".gdb*\" -exec rm -rf {} \\; ;\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \".#*\" -exec rm -rf {} \\; ;\nfind ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME} -name \".DS_Store\" -exec rm -rf {} \\; ;\nfind ${DSTROOT} -name \"._*\" -exec rm -rf {} \\; ;\nrm -rf ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}/build\n\n# set permissions\t\nchmod -R u+rwX,go+rX,go-w ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}\nchown -R ${INSTALL_OWNER}:${INSTALL_GROUP} ${DSTROOT}${EXAMPLESDIR}/${PRODUCT_NAME}\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 415B217807BC0732009CEA53 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 415B217907BC0732009CEA53 /* Document.m in Sources */, 415B217B07BC0732009CEA53 /* Controller.m in Sources */, 415B217C07BC0732009CEA53 /* ScalingScrollView.m in Sources */, 415B217D07BC0732009CEA53 /* MultiplePageView.m in Sources */, 415B217E07BC0732009CEA53 /* Preferences.m in Sources */, 415B217F07BC0732009CEA53 /* Edit_main.m in Sources */, 415B218007BC0732009CEA53 /* EncodingManager.m in Sources */, FBF176CB084E77CE005F6CEB /* DocumentController.m in Sources */, FB69D021085E20E300646BBF /* DocumentWindowController.m in Sources */, 412CFBD60B62AC8A00A46D76 /* LinePanelController.m in Sources */, 41FA793B0B95E61A00FA84AA /* PrintPanelAccessoryController.m in Sources */, 413912170BD54AB800760A3D /* DocumentPropertiesPanelController.m in Sources */, 176A30490E23EB0600857A3B /* FontNameTransformer.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ 41278ABE06AF663000B5D78D /* DocumentProperties.nib */ = { isa = PBXVariantGroup; children = ( 41278ABF06AF663000B5D78D /* English */, ); name = DocumentProperties.nib; sourceTree = ""; }; 419167BA0B78226C00B4CA33 /* SelectLinePanel.nib */ = { isa = PBXVariantGroup; children = ( 419167BB0B78226D00B4CA33 /* English */, ); name = SelectLinePanel.nib; sourceTree = ""; }; 41FA799F0B95F0F300FA84AA /* PrintPanelAccessory.nib */ = { isa = PBXVariantGroup; children = ( 41FA79A00B95F0F300FA84AA /* English */, ); name = PrintPanelAccessory.nib; sourceTree = ""; }; 6FE2090CFE93D5F211CA2CEA /* EncodingAccessory.nib */ = { isa = PBXVariantGroup; children = ( 6FE2090DFE93D5F211CA2CEA /* English */, ); name = EncodingAccessory.nib; sourceTree = ""; }; 6FE20910FE93D5F211CA2CEA /* Preferences.nib */ = { isa = PBXVariantGroup; children = ( 6FE20911FE93D5F211CA2CEA /* English */, ); name = Preferences.nib; sourceTree = ""; }; 6FE20912FE93D5F211CA2CEA /* Edit.nib */ = { isa = PBXVariantGroup; children = ( 6FE20914FE93D5F211CA2CEA /* English */, ); name = Edit.nib; sourceTree = ""; }; 92A68B1702972AB9007F9DE6 /* SelectEncodingsPanel.nib */ = { isa = PBXVariantGroup; children = ( 92A68B1802972AB9007F9DE6 /* English */, ); name = SelectEncodingsPanel.nib; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 41534B8F08A2B299002069FE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 264; FRAMEWORK_SEARCH_PATHS = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_ENABLE_OBJC_GC = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; INFOPLIST_FILE = TextEditInfo.plist; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = "$(cflags)"; OTHER_LDFLAGS = ""; PRODUCT_NAME = TextEdit; VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; }; name = Debug; }; 41534B9008A2B299002069FE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CURRENT_PROJECT_VERSION = 264; FRAMEWORK_SEARCH_PATHS = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_ENABLE_OBJC_GC = NO; INFOPLIST_FILE = TextEditInfo.plist; LIBRARY_SEARCH_PATHS = ""; OTHER_CFLAGS = "$(cflags)"; OTHER_LDFLAGS = ""; PRODUCT_NAME = TextEdit; SECTORDER_FLAGS = ( "-sectorder", __TEXT, __text, TextEdit.scatterload, "-e", start, ); VERSIONING_SYSTEM = "apple-generic"; WARNING_CFLAGS = ( "-Wmost", "-Wno-four-char-constants", "-Wno-unknown-pragmas", ); WRAPPER_EXTENSION = app; }; name = Release; }; 41534B9308A2B299002069FE /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { MACOSX_DEPLOYMENT_TARGET = 10.6; }; name = Debug; }; 41534B9408A2B299002069FE /* Release */ = { isa = XCBuildConfiguration; buildSettings = { MACOSX_DEPLOYMENT_TARGET = 10.6; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 41534B8E08A2B299002069FE /* Build configuration list for PBXNativeTarget "TextEdit" */ = { isa = XCConfigurationList; buildConfigurations = ( 41534B8F08A2B299002069FE /* Debug */, 41534B9008A2B299002069FE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 41534B9208A2B299002069FE /* Build configuration list for PBXProject "TextEdit" */ = { isa = XCConfigurationList; buildConfigurations = ( 41534B9308A2B299002069FE /* Debug */, 41534B9408A2B299002069FE /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 6FE208F8FE93D5F211CA2CEA /* Project object */; } TextEdit-master/TextEditDefaultsKeys.h000066400000000000000000000034311271274630500203400ustar00rootroot00000000000000// Note that not all keys in this file are exposed in the UI. Some of them are not used at all, but are kept for reference. #define DeleteBackup @"DeleteBackup" #define RichText @"RichText" #define ShowPageBreaks @"ShowPageBreaks" #define AddExtensionToNewPlainTextFiles @"AddExtensionToNewPlainTextFiles" #define WindowWidth @"WidthInChars" #define WindowHeight @"HeightInChars" #define PlainTextEncodingForRead @"PlainTextEncoding" #define PlainTextEncodingForWrite @"PlainTextEncodingForWrite" #define IgnoreRichText @"IgnoreRichText" #define IgnoreHTML @"IgnoreHTML" #define TabWidth @"TabWidth" #define ForegroundLayoutToIndex @"ForegroundLayoutToIndex" #define OpenPanelFollowsMainWindow @"OpenPanelFollowsMainWindow" #define CheckSpellingAsYouType @"CheckSpellingWhileTyping" #define CheckGrammarWithSpelling @"CheckGrammarWithSpelling" #define CorrectSpellingAutomatically @"CorrectSpellingAutomatically" #define ShowRuler @"ShowRuler" #define SmartCopyPaste @"SmartCopyPaste" #define SmartQuotes @"SmartQuotes" #define SmartDashes @"SmartDashes" #define SmartLinks @"SmartLinks" #define DataDetectors @"DataDetectors" #define TextReplacement @"TextReplacement" #define SubstitutionsEnabledInRichTextOnly @"SubstitutionsEnabledInRichTextOnly" #define UseXHTMLDocType @"UseXHTMLDocType" #define UseTransitionalDocType @"UseTransitionalDocType" #define UseEmbeddedCSS @"UseEmbeddedCSS" #define UseInlineCSS @"UseInlineCSS" #define HTMLEncoding @"HTMLEncoding" #define PreserveWhitespace @"PreserveWhitespace" #define AutosaveDelay @"AutosaveDelay" #define NumberPagesWhenPrinting @"NumberPagesWhenPrinting" // Use different convention for the key values here, to be consistent with the keys in Document #define AuthorProperty @"author" #define CompanyProperty @"company" #define CopyrightProperty @"copyright" TextEdit-master/TextEditErrors.h000066400000000000000000000007561271274630500172200ustar00rootroot00000000000000/* Definition of TextEdit-specific error domain and codes for NSError. */ #define TextEditErrorDomain @"com.apple.TextEdit" enum { TextEditSaveErrorConvertedDocument = 1, TextEditSaveErrorLossyDocument = 2, TextEditSaveErrorRTFDRequired = 3, TextEditSaveErrorEncodingInapplicable = 4, TextEditOpenDocumentWithSelectionServiceFailed = 100, TextEditInvalidLineSpecification = 200, TextEditOutOfRangeLineSpecification = 201, TextEditAttachFilesFailure = 300 }; TextEdit-master/TextEditInfo.plist000066400000000000000000000102151271274630500175320ustar00rootroot00000000000000 ApplicationName TextEdit CFBundleDocumentTypes CFBundleTypeExtensions rtf CFBundleTypeMIMETypes text/rtf CFBundleTypeName RTF Document CFBundleTypeRole Editor LSItemContentTypes rtf NSDocumentClass Document CFBundleTypeExtensions txt CFBundleTypeMIMETypes text/plain CFBundleTypeName Text Document CFBundleTypeRole Editor LSItemContentTypes text NSDocumentClass Document CFBundleTypeExtensions rtfd CFBundleTypeName RTFD Document CFBundleTypeRole Editor LSItemContentTypes rtfd LSTypeIsPackage NSDocumentClass Document CFBundleIconFile accessories-text-editor.icns NSIcon accessories-text-editor NSMainNibFile Edit NSPrincipalClass NSApplication NSServices NSMenuItem default TextEdit/Open Selection NSMessage openSelection NSPortName TextEdit NSSendTypes NSStringPboardType NSRTFPboardType NSRTFDPboardType NSMenuItem default TextEdit/Open File NSMessage openFile NSPortName TextEdit NSSendTypes NSStringPboardType NSFilenamesPboardType NSTypes NSDOSExtensions rtf NSDocumentClass Document NSHumanReadableName RTF Document NSIcon FileIcon_rtf NSMIMETypes text/rtf NSName rtf NSRole Editor NSUnixExtensions rtf NSDOSExtensions rtfd NSDocumentClass Document NSHumanReadableName RTFD Document NSIcon FileIcon_rtf NSName rtfd NSRole Editor NSUnixExtensions rtfd NSDOSExtensions txt NSDocumentClass Document NSHumanReadableName Text Document NSIcon FileIcon_txt NSMIMETypes text/plain NSName text NSRole Editor NSUnixExtensions txt TextEdit-master/TextEditMisc.h000066400000000000000000000006751271274630500166370ustar00rootroot00000000000000/* Returns the default padding on the left/right edges of text views */ CGFloat defaultTextPadding(void); /* Helper used in toggling menu items in validate methods, based on a condition (useFirst) */ void validateToggleItem(NSMenuItem *menuItem, BOOL useFirst, NSString *first, NSString *second); /* Truncate string to no longer than truncationLength; should be > 10 */ NSString *truncatedString(NSString *str, NSUInteger truncationLength); TextEdit-master/accessories-text-editor.icns000066400000000000000000003364261271274630500215550ustar00rootroot00000000000000icnsTOC His32rs8mkil32l8mkit32At8mk@ic08[ic09is32r v vدددددrv毮rrv r꾉rvӂ r꾌rrv r黈rrvӀr繈rvvr沌r^v vbXr|sv vr9Tr͞v vӿrPyѣv vvvꄣvv wጁ wGw挮GGw GoGwӂ GsGGw GoGGwӀGޔpGwwGݍsG^w wbHqG|sw wG2EG͞w wӿGPyѣw wwwꄣww! r!!!!!! r!=!=!=!=!=!r!!!!!dr ]Grӂ ]Ir \HrӀ[IrrWI^r rb.zH|sr r+͞r rӿPyѣr rrrꄣrrs8mkDDDDDDf\33il32ysyysyysyysyysyysypppppppppppp~~pppppppppppp~qqqqqqqqqqqqxttt~}s||szysxxΆ܉䈃臃 wKIKE rOLm򀠂 kRGgTȺeK|cWfHH>~큝 UW^KRA~ Z^ʿ|ZT~뜂rNʾvRRx쳁|TڳpQd~v焙 qRǵkL[}tցELJKViyn偖sf ߀k]߁݂cU߁݂܂XIL>ÔC8=843475d^dd^dd^dd^dd^dd^d[[[[[[[[[[[[~~ZZZZZZZZZZZZ~[[[[Z[Z[ZZZZyt_ss_rr_qp_oo_mm_lyΆ܉䈃臃 s6561 a:tf7m򀠂 Y=\=2T?q(66|OBt|uD25+~큝 wCByz\E7B6~ GF|xXC?~뜂h:uSÔC8=843475IIIIII}}PPPPPP~IIIIIIu::9998766554u͆܉䈃臃 i >PIm򀠂 6cުX619cO|+;bJ/)`% ~큝 g ?bG-(!~ #BaD,({~뜂RF_A+&]쳁|v,%,~v焙 Qexj)p}tZ :yn偖xgnsf ߀k]߁݂cU߁݂܂XIL>ÔC8=843475l8mk^btx') <OQacrt *3)$)))))))))))))))))))))%$ it32AqqpnmqppqmppqqqqpnmqppqmppqqqqpnmqppqopqmpmqpoopqmpmqpoopqmpmqpoqpopqqppqpqqpopqRqppՆppmqpqqpqmppբppqqppՆppmqpqqpqmppբppqqppՆppmqpqqpqpppoppppoppppppoppppoppppppoppppRrppppvppppvpppprrppppvppppvpppprrppppvppppRuppppzppppzppppuuppppzppppzppppuuppppzppppRuppppzppppzppppuuppppzppppzppppuuppppzppppZppppppppppppppppppppppppppppppppRppppppppppppppppppppppppppppppppRpppppppppppppppppppppppppppppppp\|ppppppppppppzypppppppp~ppppvvppppzpppp|}\|ppppqppqppppyxpppp~qppq{ppppu}}uppppwzzppppww ppxprE$GPZcmx߇쮀mee倗gE GS^kv݂jjkc䊖hEEGTcqۋ쿀haڂÙ݋ǀf_܈߅πd]ʀɁȀ΀݅ߋրbZ[[ Հԁӂ݅ߐ݀`X߂݋ߐ݄^Vߐ݊]\\TߐݐgZZRߐݐ܃qXXPPQߐݐ܉{VVNNWߐݏܐTTLLcߐݏܐۃꐀRKKoߏݐܐۉꛀPII{ߏݐܐۏꥀN)GGߏݐܐېڂLLH0EEߐݐܐېڈKKC1CCߐݐܐېڏII@2AAFF?2@@DD>2>>ȂBB;/<<ߓAA9,9:ߓ??7*88ߓ==5(66ߓ;;3&44ޣ992%3388033j66*133Nߔh54323&-232/bZ[YjZ[[Zj[[ZbbZ[YjZ[[Zj[[ZbbZ[YjZ[[ZYZ\jZj\ZYYZ\jZj\ZYYZ\jZjbZY[ZYZbbZZ[ZbbZYZ[ZpZZ\ZZ[[ZZ\ZZpZZpZZ\ZZ[[ZZ\ZZpZZpZZ\ZZ[[ZZZߦZ ZZzzZZZӀZZߦZ ZZzzZZZӀZZߦZ ZZzzZZR_ZZ߮ZZgZZ߄ZZgZZZZ__ZZ߮ZZgZZ߄ZZgZZZZ__ZZ߮ZZgZZ߄ZZRfZZ߮ZZrZZ߄ZZrZZZZffZZ߮ZZrZZ߄ZZrZZZZffZZ߮ZZrZZ߄ZZRfZZ߮ZZrZZ߄ZZrZZZZffZZ߮ZZrZZ߄ZZrZZZZffZZ߮ZZrZZ߄ZZZxZZ߮ZZZZ߄ZZZZZZwwZZ߮ZZZZ߄ZZZZZZuuZZ߮ZZZZ߄ZZRyZZ߮ZZZZ߄ZZZZZZxxZZ߮ZZZZ߄ZZZZZZvvZZ߮ZZZZ߄ZZRyZZ߮ZZZZ߄ZZZZZZxxZZ߮ZZZZ߄ZZZZZZvvZZ߮ZZZZ߄ZZ\mZZ߮ZZ}ZZ߄ZZ{ZZZZjjZZ߮ZZxZZ߄ZZvZZZZggZZ߮ZZrZZ߄ZZ}~\mZZߙZZ~\ZnnZ\|ZZZZjjZZߙZZw\ZnnZ\uZZZZg~~gZZߙZZq{{[ZnnZ[xx\ZZpbZ^lZZZZk^ZbpZZyzZZpbZ^iZZZZh]ZbpZZs~~sZZpbZ]z{{fZZZZexxaZrZoZ`_ZnzZykZ^~^Zi{sZrxx k[Z^rxcZZcvo^ZZh~}hZZ^nraZZaq}k]ZZfw~veZZ]iy{ l`ZZ_lyxx}ywyxs|~}}yq{||{zzrqyxx~}|{zyxx~}|{zyxxϘ׀ÀˀӀۀׂ 老ԂԂ߀ȀA14ЁW121oH1[1Py{N21\1 Xq<110􄡐U1[{ri`Y3115P1 ]xof]UMEE1򋸐ˎM1t~ulb[RJC<78112H1y|i`WOHA:40-+<11D12zfME?83.,*(&=11jA12[A61-+)'&$"511>14_e,*('%#!!711߆<15d(&$" ,1ہ916h%" %511/|618m}q )1u51:q} y*81'p51=t} _*510k31?y}))21V21C}}|^01펝N1F}{gN`614툟K1J}zcMHH_415I3V1O}w`KHG=1AY|P1R~}u\JHE;1H뇁M1W}rYIHE81P񒁁I12Z}nVHHD71 Z񛁁E13`}lSHGC512d񤁁뉶w>15c}|hQHG@314iǃ𭁁냜m:16h}{eNHG>216\ʀ𵀁됛e18l}yaLHE=19bɄ𽀁114p}v^KHE;1Cہŀ114ƫ}t[JHD81L̀~114Ѵ}qXHHC61UԀ{{| 114Ф~}mUHGB412`ۀyyz 114Ƈ}|jRHG@314kÐw r114ǩ}{gOHF>215eх}u甙b113»}zcMHE<16^Dž{s琙_113 }w`KHD:1 :`ǂ}yyq {113]JHC71Dل߅wwo{11<bGB71Kߋuummnz11<,WI41Psskkvx112>>ȂBB;/<<ߓAA9,9:ߓ??7*88ߓ==5(66ߓ;;3&44ޣ992%3388033j66*133Nߔh54323&-232/(@88@((@88@((@88KP4 !PP!4PKKP4 !PP!4PKKP4 !PP!RPP80%PP%08PPPP80%PP%08PPPP80%PP%R,PP8P%PP%P8PP,,PP8P%PP%P8PP,,PP8P%PP%R,PP8P%PP%P8PP,,PP8P%PP%P8PP,,PP8P%PP%Z:PP8p%PP%o8PP99PP8n%PP%l8PP88PP8j%PP%R<PP8r%PP%q8PP::PP8o%PP%n8PP99PP8l%PP%R<PP8r%PP%q8PP::PP8o%PP%n8PP99PP8l%PP%\0PP8Y%PP%V8PP/.PP8S%PP%Q8PP,,PP8O||%PP%xz\3CP.]PPZ.PC11CP.WPP~}T.PC.zz.CP.PvvPPss\_,2&&1,YZ,}.&&.~}y,UzzS,svv,&&,ss>ig=:b`~}}9zy7wvvZYss l-?}O  M(y=,ed+:uJI~~}}q9*^{z])7mwv DDtss{[ggWurU~``~}xQm{zyxjOswvuuYYtssþ~}|{zyxwvutssľ~}|{zyxwvutssΗրÀˀӀۀׂ 老ԂԂ߀ȀЁBe,<,Yf]+<1|d􄡐43xne\M0 4ulbYPH@)򋸐ˎ+Q{qi^VMD=5/(&Yye\SJB:3-'$""YbH?81+&#! |(m;/)$"!v+Vglb#! n/Yg g2[gZa5]gV8)BY9`gS5) - S;bgP2) ^M?cgfL1)%9BegdI/)O펝x0FfgbF-)"Q툟s-IgaD,)(!(P.5"Lg^@+)' Ey0%Pg\=*)'&釁,(SgY;)&/񒁁'+VgV8)% :񛁁#/YgR5)$E񤁁뉶b1\gP2)#L𭁁냜Z5^gfL1)("Eʀ𵀁됛O8`gdI/)(!LɄ𽀁q:bgbF-)' !{فŀrkjgaC,)&+̀~rmwg^@+)%5Ԁ{{| rj^[=*)%Aۀyyz qe5)$Nw\_a)"Kх}u甙LX})(!GDž{s琙JQy} 6)'  Kǂ}yyq dLosux{}}~}}zx3 #pل߅wwodfikoqstutsp%+yߋuummncy,4egjklmj^Q1}sskkvbC \TKB8-#7qqiic =݈ogg冻 ^$-2>>ȂBB;/<<ߓAA9,9:ߓ??7*88ߓ==5(66ߓ;;3&44ޣ992%3388033j66*133Nߔh54323&-232/t8mk@nJ''InnJ''InnJ''t66tt66tt6[\\[\[nnnnnWWWWW9PPPPPPPPPPPPPPPPPPC.& /AS%e7wI[m+=O"a4sFXj|'/[8 u1WCUjgy s;./@"Rdw 1CU+g=yOat -?Q(c:uL_q)>U 1j  G~  \  o  u#  "v'"   %w*%   "'v,'"  #(v-(#  #(s,(#  "&L+&"   $)J)$   "&Jy*&"  "&hndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATx $G&jUu]}@GuK%HCa,hf}|Y40 a@2B'HH IHHh5Vw|GeyzxDFdFfFu_{E$0%_ՎjI $DX n"H XXU=@d>I`K 2 G @" ,` D`7~TH.|zq<7bevN}G g>ҹ(>KL^O(^[S?/VA4K;{g !\zs\B ?ShïA/w~# 9F?ΛX#O<'?yP F?ퟳ1ˈ0/ n8+߲s3ݧrgn<"Fe UGcu '@ܱDfF'ЬE,﫤H-Z,4SoT綛iѢLQpa[w  S,cǏr]"/jok3*# Y̖-]F+WfCf7:e< (k[( e(Y" =kMƙvl+b?{DHQUU[c+9WS[SGF(0 hn6~k*!6PYiA}}}{WXy-?;8}D=c4=4?g& ?xV'F<  faMMN3 p PWU06#XEveÜ%Hxjj$MΓ-{]M4ka*K-^hMMe;2Mh2+lhu9جSLd ږբzPfc)hEAfAl3nPxoyJL`i8?Y~2{B"Pw֟*Ls yyJDܡEz`4_SVU-Р084?=4`p6]0d䬈*C|"榵WXEw:[@&|o&lf1ȂO!_ut&:5.DSU.,79E˫UtqX>*H^ZD PK$;ibTVWwdHll?^YG WR2I3R{nA ^F#s0Wٺ32#e9{D>76kYz5<{##_׺IsgmXtw,4@y;/ʪm1+FBjzwEfH[tSn] j[y 䱁IF:Vs49 *kuMHg Us4p=$,?ןT<5*>7ּ4" {O (\s)0Sq5Lq"YKuo`(YI+?B'~ G,?ʑl*,t$ڮ[ib8c1ȟCmܮ+h/m D5n`^ lXB~ @^d:Qz+=|zƆIV/$/%FR4xURZ4>|cJumU-DLYTtz3wSLM akw ӥ買u:zWmX0v0)8- V5Zj//rJF5=^ O,|AMO ]'YR QWʔ3 ]HOyaˤ[89KFPݩb[i8e],0u0t0u+FLmh԰0*2 #%'a$jWj 9Mm?^y w5 (Q!\ 0)Fچx^j7鯟#Vʧ1rjZ$چ {@ VP ze;Wz od JLvx (m@JhVALOR#PtSb6Mq+9 <9lnm̩A˲C +V4XXM: ~\Qg鯝&u\VBuԒĝ$;q xRg#CөVȀ|%9mD#&D.l?J7*RĩAT'{S)mS CgB_/?!x?~Ipmli&D'Mhݟ؎A{WBɤIjx%!oDFpQ m.{nJ 1ݻ چAZgwwz= hӪt˕7Pu=1I'&ht^~tQȈ&v] Z#wdc7-Rt kW$/;< 켵_󃴼㼔³LZ?ˊjr.mL\g5ǛxQ|ϩ,>(E8 )d0,_/=3{_n ׯp+-mLSS438`SzQ~Lq,05I[SFb#`6pz(AL0{]x< /غ^,1VG膁~Ӂ}8]iݾVZܲOLES~zl_r3}Bu~n/01/̯$_A 4=ĽtNGTYK~q3i~(`Ob` 8~15uoxܟȼ7z$NSė :P=zߤ\3į>=}RgjV +W?5ʳG?Vaz>MutO<%I Q彛rL=??9uƄb]wF[füNJ?Oj*}n>;| J+9MAz"+`S\$?VcYqd;?_T%pVk8R(JQ^Cg|46P"N[wdE5edwtZ}oRbtĚdcjakϞgFiܢS|)L6jx 1 Xu{G3]*V+ݬ  #_a -Mw=S?L/UF@nA"6V3hSOPM)ŷ|3PvOൿTz JpA{(\^tF ` Qa+ Wnů.KyK?35 xT%4pʐv90IxG^zi=ѕi0OO#̏K[$* KjnQgqirTfy.$_u㯮&N^^5 jn{~nJL IDATHKC|We\jX;y5K< y/:|V3c/ V<O?SɆ>E) Q r8irVfX{9Ҽk_ywk}07 u nJmڶm'0{NPr|5nXCXT_ <6[':9EO9+~```lK:0} cpT Vc^(+SOI @3RPʗtP)DdFo空ےti5Nܟ&Q7ikRojZaا~ffye!W%̲8 ڵѷVE@A9UrʗtrĩR e<Ndv WnukWS<'GiA>Οk70EQ:H 񬩿io̻U`bIv!T˒L``a X{9'㫺+6К+9=p351LCpih3I\JZ)ӿO}aiYiy `2H/lF+Y/h۹PI NX(o(l@!+{ayߥ6>iղ3͐u˛7Ҋ9Z3"AVс[xn]1E~%t_M uoMLq2(\RIS|Ƽ&WR`*L\ Ҍݻ&yZE܇2n^B].f`bR11fR!}ORK(~w#8["z=A]L`^@"LF)\eFY_1c|3u/]|쾝REݪW)?hzi?3_8K'NQh6o-J:^\Vr)vVcV?E1|tգSVA^9ԫ,`iܲRhevGz.#]q]wfjk밥-4x Men$wCo,\KxJXs|\g_5MC-_+3vV Pe\=[TcK(# Rtӆ={wLù1vn]m35=` c?LS ᫾X܃Do9m; xO+A*`+T_XTK߬JjL3Q&HNK HOEQV`{OЃ?*&u$WbolȾ𩾑#4t(M: q3qV1 E#?udş8t~~_cϳ+0'*\)wJֺ?UU [7Q]-3Wvef?Ʒ\i艓| bs ڟ}_nwYwrJf𧠦`}Ea4@A+.ߞSGCYOwtU|%w#$kurŧY⟰>Y1-,DN]thg oX+"a/No ^}U[Bi+_U^ctx.^=&KV5t֩=^;yO<虥X%)3=hIajaw|pXVcLǀ΁3JF%WXC7ё{O7Wn k3> >sש=?şg?6Fg[P| N['Ik]mF݂o[Cw7ʭnHG^ˇ^cdYd-/r>zퟥ.7AcǡVM@?gBiHO?ɏEN>1o{˺N, NԞZc+ﭓ4>iW| AQPH}jL? JG^Pv'D;s X|3o -jo%=C4܃S{v,6a+pWqMq_o)ة`{gu7156) dj@?hhq۪& *l6~i|l[Cߣ}7.>g)]}fjo9!N,#9OP|Qpy)}[?Ao wu|q^#N@HR*ё}wHC?|QV޶ݪ;mr|?OnyY]YB?/aEa+ciş)~&zm #. _c1e( ȼXGR"|G2$'w']y]y u^ЙK}rk(-tz _w?2>Cgxbs]x1ßu\ b9]v0*UyH FO? {_]+/^MeThܨ=|jo8rS~O;>u<(>{ ٔRD.ZV?%+6P` 8Ιh"%@{E>+/ϽVSSIWo]ˣ>YfuGOZڛo0?̋z6yߴo*YEW].C38\; C%m#ۏB8aC! w!.VR~gx>q3K7RuUS<'sr|c-^[yXם߭:Ѝovw1T fN UR׿VHPa@PӮ~Nn[6GM56E管ʊ /PQ;SGA ^+j׀ko2 &^jEWO[pk6V| *++:Ls(rT;sqTaU_߲ڈijx@p(hz{ytVO5<ƖZմ|%t2_o `^y` @AlEC-_OK)F{lX[334̇wzpj/+߂(X/Vv`lbNž׭V?\Kݫޖ< &\WvMf/_;Y_Ks,+)~_^ɢ;<^ǫ9(4OU{,[{޷:ѻ1ꝷi 1q^h:Ϳ+i9):$&/عZŇ7yUEU 4zMG7ç9nh[yGMWw=^]z5A\uK`m*S~!+UFШKN@FM,TQ _85z`qS,fYX*>_le&9Mޣ<)2Mq#~^{.稟6ئs3J\x|lCЖa̴HiF]D.zq̢5G&<9쒝Y LJ6H kQN<)sS 8+b1+,8b~kgpX*\ c'Ó'/cm>+3?Y˜]8NfJl줎Mө/Z8`+qbо=`8eoo}j,~d祌|qtEwc@F_bM /G'O̺@S,{F=x1Ksc>Pckw&c)l:3M 0 ƂAQFyd[yPqV3ImZoˮR+ I#=^4yz cO;f7煑`}=K4~/_=gA>'\'׶֝ -Z9;r&o!5g2i<>y)N3&ĠI8NnRviPM㑟# +|cegǡXl)~aTP *Uu414(FO2a3masJZsұB:ҋ%. ٪MM :T8Ro/00P?BK:y~ [ ߚ&tӷ1}6&TYd4vN9_g{qX_|9jkJ]RRɪUʅ#mMx`47 fRy{Qx_ĥs wǓ/EP_E7RSK3N#?k=>ˣ>fsc?BC->00l,X_Qϋwx?ɔ<ϕedV~ʹrӕT]Zї_*u&ʯjy>EmWutm5 SL vu9sc<P0|tt$Mh<]PE;XR ~O<շF (?+=dY%y~ i~j䷀ߖ%Y Α[y??;"&jmi5ƌCuUz&_G<_fU/_j>1au++Xx볔)W2U | o/8O>v7f[x<[#ɱSHΘAS]xOgř pHF"R#ltN`3Vv(=t3iNK|w,Š~ZEEaW4%|F.eI9ʡ[g0A7 59F#Cü5D}C?L;z\]:?<>XpE)%2}}%48KK.h! Bt/8~ lY+U֘T.Wc<}I<.q5atħ~z=y#鉉.O}hM6 }mZļ83dj >8B}#J7L{GT cM4\]ڲFjhCQJ&8`4 zH~ \q8yT:ËC|)߼7\6]N7u &EHWa(q().^Ji'̙wq>| xbkzy톆FYЙa:7Ϩ5ϳEZ*Zy+R)h(((+oRx'`UiUT\; ĩtp刌\ xobVIDAT>; [t& ݔ+$]= H3`ǃz~wS6z~g?<ȫ.v-K'n:W[yPp8Qt#0C79QE(L8z:h,`~f [,67jc8Tyq[,tG84y繈jLĩ2NɪTũ:n1^<ꛚX//T1).eDŗBW̓4\Bp#񃎫 mdZ dT0\a)éSw,&0y|*.:Vi2wá適sY]}%ϧ%k𝽹/#/00810RHWR$pb|| XOEnaA̩@U|Ï=XY|nH,q1 :sr қmLXS][_i:Vچkhv~8Fl>T( ]AXUr5 ԸU|@h)0!/_|-|} ^; {Qj7xIx~Tt"iU޿igBrz]C?TOߴ4>uTSX|Ui?n>S I.|ݰ'OTi<9fj@E5xѝ("nl!t Wa/uSU~:VfjhjRl(w#o54/bOdFEgQ|ES`&_x4K~t< p ʗAq)*DG۽3g+T6A4԰/^⒎& ?E|U[_goln[-/&/||F9[t/E$_8zx&x01EdpSulG~pwԲuf:[IPny ~T_8\Z*\-"2w+"_8*YdLnHA53d.FҙpdQ4tD<q/Zt_+pD „?F&_Q$K:|A0EZ+}|-+$\r``!m #@pȆzh ~0a!I>x4 ,@⪯\B\ _#0U¢*\pqt)MAKҚϯ@ V2p _P AW: :|UԸ0'\yR_]6V_J>pU8| w_h@:f 1HRq.ݜI%/| IQ#S"8*$R5)N//4$VqH/T~˅0}h7?E{hh7BN:=hd4̍|˒ _R|Q|1 (˔ p8Ƀ[W;Y#eq'>%,K\tǹ;zA䁼u;T~h뮻(WQ4M'qTpKN">d0N0MVq Wq%M|q_hMuX&yxux[x Tq*+s5+O)s%"ēNG:W;pA+a5M B_N*, a]^n(~R2)6O(#w6(SMuaH/0} T邸aa+9 }ͨck Fb`9W8)a+Rt6Typl:E1SҞKV"E چ*_qԮ )rarZ"=Fuxd@Tr//R N9|]F//j‡8뼨qu'@䭷jmxQfXD֝:N1*׭.&*-BW<x$~PϷIA-F6,O1/ acAKuO55{ҤQVy*5Or;M 3"0@ yݟ؆aćW b.a*|Npf㑢x1dFy.DU|n3Z4o}谪?rQ+,2O2Pg \Dـ_Wz ÷o:c?3V$I@$z f#000`%;fN @Wz=1(#ʯ*3R)ǵ`0H%АC!hjN`: ȌeȂ(JǷHEI 0c П 8e`YةS2E:P::O,$ 5n{wUccDHt `GU:^φaޭ1)Pz^ %Mś9y:::=΢y饗h߾}tM7[.8p$"/wMO>o&zcw \]P-XǑ/ @FI&E7?z@㕕Nײ1wH%0͋xAp߿yN((x:_ fS]O B͋p_ kTg9-+n%+YHaOq_[ԓXqb3DooAoR<7I?uו).J-74q|dD?$0L}XFvzTe_Y HU_#nz$ದLi "JTF#JXQ|#I`>KJ;8G),Yoq?Yt~%UF(q ` G)!xGo+Do\ ×Waz8sݜ2(ġ!UeApHSWӢp$0J@q7KR#M&0GO wtJ%%E0pN|a8S/`+f‘$+ҏUaC_D% T_ [8- >~m@/lDix8*|_ud"  5*a+gWH&芮Qt9eHK@E Q0ePQj5,0+=p R| q">N%ijXUP%.(DWÒO%]|=_hmR QnGaW])T(I .I;U(35&>|u#>_[D?_$uBb(*G4Vү !|GHaEePKJWD*g%iFAՙ 3%=# Q(ʭ,(H8W!ɈF$bK)b3~ *1xKI(W7~+G$]ڻ"Hg"p5iTH%ﲊ0# u YפQ" xKhndStCkWZ6!Hm\$~ًo:w> كo{ a"L"4M'S9'^qZ/USO^C+hMJ&G@Ӳylto߫c՚  5"Yi\t։15LsX g8ocግ#f45@ B:K@8i ΁'&.)@ry[:Vͦ#wQ?HBd(B acĪL"JitTy8;(Gx_^[%׎ŷQ麲uan7m QH^eOQu6Su 2%vX ^*l O—ޭˀq,>S%LdB1CZ$M9P 'w\/].r#E|!3>_oa۾d1Zӑz'=~V+cjJtO%mN |-bWO+ o ^ IH.;S]i_s9*p.7U^s.3u |^,<;c=ma>Vt.[՟Ϫ x# ¡_2 IDATx$q&nz~]$I(R=ݝtuN:DщH075z;;޴y]==m"DS]GVFd  -|*VA@1 D@  ],  u@A@ bxPRdA@A@  B"  bHA@<YA@@  AХȂ RA@" .EA@:  x1<(t)  A@AAKA@1 D@  ],  u@A@ vE!S)}-ƿo ]߾kv #gJ|i|Wדy]||y}yلOKfggW*? 6EJP *^MT\x~,^g⵼Dkx݉|Zg&WxmË2V Ro:^E^-DhsǔRtoMݝU/~L4BJxS8#o *D`s^הϐcegGC^/@E~@"jF5 _->ȟI?LBxX ?xSaF^/* yZ89y'? l@W?f^WȿBD{S%b(U.)6R+Rn:ymgףz1ϻ!]{x} G_$jo׳1/Z(ky5e|L-W,/Y;ZT5)Q 1[k]vÞ {)W,/cvRgt{CXfaN+6N&V'?"@'χ< 1A=xc遼,6e4’[qRhzl0_vXqOYW6->ČUWm╿&" `j3}J+_CF]R" Ŋ}:LM塯Wϭ"`+)TU V\ :bcfjHS^}5#UhYW$b^1{%r.2)e@"SZؤ\س3.Le"SZVBdbX$, 1+LA@ 1,VA@`׾eo|tfw.MċX2ش`=|y6O*S|Y*C2*Tԅ?m1J|$bAu!];?ʦ70Լbt9!UD; ׂ С]l??A@"@'ݎ<PX)6!_b+A@ o \Ya1"^x,_2A@:gl7ZGhA@#@P3V#$g{ʡ 9qzAuECn/Jf˵kioCp1:k575+fc9C5O_B2Sy_|Y6CzN{j(H$ K"|Hп{0\CwuCۢ~j*p7TcbY~lg/]Ԭ @"h<SS051u[pyHq]Jz}*R$ſpQk>7\RKPYw8cFldmlّfv2D ZK1\4S#|ѫ, 9V"m-C$q Ra898 4mHy^?camkjJVmmbr4ֶQYhA@p3-@W_?!LOR?@b1 񻵆HNEO3Z+WH)  h(vŊUz%oqO`U7xі%C]+W,I@" p(Ȧgזk{ma=׳l{IQAtw@_"JN@'BQiR +M!A@ :PjXʼn -5W}A@ymav9%S/hR4z&X/AA$MMI]% s̮@91 @-7XefbnnY$/A@B ̟ t Cݲ7uE8gwhmcIITtCC#Pw@Ѥ9ۄM/pQ:_NMEa<zݏWF;}[-Hc qpq^U$b!WiNJ&9eebp::D[0[FG籐<<8z4[xXQxᛎۚaGG TK,@ФQELfzMXPJF^P!AAZ 1Ex`)]HYb֏'qB2 @$P:*dH(UdZ(cf*$TŒTTl.b i$L?6YL,f# B_D\اxs-*\UdB_{0tfg s3:\TDrF ҞOvh liA0*d}d| OaMsCzpY6o5lM, 5U!/U8`}!Wk'P@BaҵJ0Bt( a. 5hTnCx--!8ztRss{zZMqBMO& DwQG~7 c&Lc0{I'%}0,Y==0:r_ZshhxJL)oћ)o|R~cpnY,s:t'9۽LW_=͔/T:o7Xzt{k>g".R8璪 ZRLIo^߲t7B|%Egϸv2CDyR*!Լ _R 0Un* Uyg58f?Y'[hD̐?pB4B 0EF1HV^ 3W~||8d lo!t8stBғ Ӵ,2ҭ$M +J[%PH+Gi_qj[/U+; Lr"*Hr}JX"ܾ O^UnJ>wC:~쭆k(D0ԾM9)S-[=0srY;Te@8F/I еJ^u4o^ M V/HJ< -}d0џdKRϯ_ee$S^~@CB=l,/KǪ.rFJY:l㑱Qyr</@P`Y#P K$@Y,b d0AnY -=u,{WǂmA+AJ@elDѕ5v` 8FbۀiT#4b/2aXQu䑹*CmxM h@CuJe/8l|BTcAJye9Ax@X1om^zz>>_:^oO17TXyDUd4Vnh4-8*Vk p*WP&E2y6."EER&le /C뢊^ *A!e"y.S*) ʷ+I ؏0 w@1_sk66a]JgκסBE檹r6[ U@ G]k',FhZqnъ#Kc(M%/Py/$LoSop_ w!JP#S krt!>q0@@a5&+^DR}hG8l[&gxs${PߤF77_ߔ5F:]Gڗ^-sk窯 6@/ 0_qo=jYzm˿_1GURQ mPGSd ­!k"=IŲ/䱧`۸tqt_Ӡ-&?cxM phh/R|ݟĽ,'p)[T>*wNjfě/z+@>.Xϴ 8_ۿ@nu!ceR )]΋Q{k @)cp-Z. p|+LZ -X||Yе0qUTO@6C;!gi0ThNc`C3.U_BD#C1BbJ] {LL4|#ođ`UOvBl9zȲ4'ei/L{b#{G)nciy` =3;jbiM˓vjH1l@I3ߴ>_Jϸ}J(7ZƵ+y 2Fއ~Mk,C.o\+p~ӌsAF5=Ⓡ :y S5A. pzW8ތqhu@qHyۃA{b#ۢt 4t#}+{k牗+3R>ۯv 41MLnqnKI+\IQa'v! HN+{8|?]X[F5s4ry~ꀆFLr= Whjim?ԊvaymqꍆB > 3ADO{p},7R%nX 3S{0;7#2O"pD%~# yI<wU KTa.$8eZ|@mkr] 2c4r"EĞ<^IDClFI{m@ 2u^J&pA0uV4pSH kKOs61lhG@AD)좧c_Rd{8*XqiC>T6tMy͂<+=FM><LJA H:;3|ġ1Tڦ>tOxLEߴfChd}!~VD)xSEr[lJpH b ea9ym1.X"J[-ቀsPausi `ɒe쳤T&KcGZQz &2b0rK4tvv SR!#(X V|(Vuuuk&b,=Lˑdh&G VL#/X V|( !EK逷B$bp=KTQ|@޿pQ*(/>\`G@R=ab+*q3O{,GEr@QF* Q@@EςI#*V㨴q2?ٚS,;(]k^JUIn+X%+X"JR.TA]Nj9]І_[LȩdnNyPY!c`$+>|J"J3CZ o07̤w Hr9YV)y,>(EUn))u("3bPN08MNƣ/QЙuK }g~ Svl@X C-?K fQX(z>VDYͺEyxRlv[@[GV;Tv٬O*XENJ(TBJPAl*ZJEwT0 +5P/>^XJ{0ejH:ڳ ` Lp V\Rt/fcOŔnWdP8RhX 2L Vjh ^|Dr["t:,}Q*O lJ$_%/P50G)xqԫlt@ӂX`l@(ДH!x(~/_q|o^(|/@alrx$o|x^)g>L&+>V(iB`D,*H L6~ VЙN|L =UURhY"?GYvz|0EU}w1q%x? /"Q%u>Xfȃ>Tá}8ɇ4ЅC>U8wHl߰B/E%rPM(> V3f +5H-b &u Yұr`H$ )TR=1݇bN~> 0FTC(X%NJ(nr:Vexจҳba & V| E"J[|܊U>h. a)QeDg`Hb+Fmឋ \WW5=ГU X~uבȑӦ! u-[ŋL[@H$8A4,AID:c&1xHDTvP|nO)sOz(]91.P->nX񜡂tꬎ#PzOtX5^I\=/WE/PX|ΝCI@*h܈^(UuKaW15YU9+EѮ|UZ._[^/WeY@ihjOQ%-5EeURIWaWzv K !W@0+HR uJ-G}+?<3 @#$WoXśk<()JqHN,j|sCg4[(ԣRͽnSlxx+k ,O XPiSϤA[nSu'`UF"db~ E˰ f40[n-^KԌٔ#̯TPXHIG|ޓe(_' /uK#F%@IA@>|J~ Qj2zKcEW~ P+,n'1& '޲o a+>jvq7.tK</Db|n@(ʘ8p0.ʋ`%XP4 &b0+Kn; Ʈ5/Q^|4+e5-J1s,II4n ē8UW1tcR`UϭhTdE蘧,eBZU />+;Y=_,GnP!,]*hnUWc5^|+>VNlP\S,NoYB0lLIePcrY1M+N>DWʏK+;)^:|-x:D;+ aX'PXeTyRQRjx V|f)n܎#|JW(VUA@^h̪!)xXyRlW+[Q K/8*ҕƘ`NJ(/>^^NJާcD<Δ[MƘ`NJ(/>^S[q@ ~5%[pslU*3#1pQ ^|D*D޳H\<NJcScE/Q|zE92NW"'1Jd,QEPZ^%_)M VjxceVOL$YzSh<pIf}4N)X'xEz%@qY`@ VWL!Z1`(.>VBYk%jwMO7 sF<Yp8Kpv<QV x(/ E8ayfGi$'$xX%![/Q|R x+j\H s #Bc?mXr,Y 0|MgL'ҭm}gJ1,> `ɛ(CR s[Nd .a}5}0.gJ3V! !Y`E:{G8px0JEvR/pRq+^ s98BO'8B1K0CD=$*U;5xqa Oܒ@>5WKywIt$&JKd\.s@p8/(򱓘m SB@.VȁOJb8BL1)<,%9\ o ^|WUC|N)k VZTĆ TYŐ͉( H+"^mmmj J 06Uyvڲ)!G+>VDi^N9%0N@.6:Ȏpq5t:/AfOŔRԄku] 51ל%0'v`j.Q&($c6~]L)JMvNj qNXh<3`'*ŗ(z>VRXNR?SSSHlDIf5v`l$^yaЬ:7q=z&P7E{r`Jgv&t.=]~\{y4>i@a;HeQAb&EK+t:^*+ Tn؄'ǫX C`MIL>|KAc5>'y( 0A MӭtdE%XHQ*eb j.Ë5JF$b:܆7!\f`j42j&8pҩDH+u4F:`#v SC3^KjS|.-h=e=: ;@oBW0 Qw?~4e>G#Wy+=@" V&plٓR_.36!y{v)}{i|475ùnKN@p2"?!Ҽ$&/^sdw ʛxH3@,яU5ZV`~FM , !npG-ktJcE/7b xw@(P__sj`gcl7<ş T)# G@7^Y?|iٰ~γ06IJ, ʐz( T Hri>Qx%: ^1) X w*CE,VGe>nlwa7fu@A0mi_ ڼ^ j=ap?߫zQ|IK]cE/aE O w}^>P .:C~%n~22?cAB5[;_8 㵍G>G x>{NrX6`͎'q}ױsfO\{NC=uR8_͗rx^7> `Pd$hT~kBVn2DFV\^%XO$6F(hՊ$8H`Wl8WVX*Ju*ߕU6jDͿ½9Ҥ_g^ _Z_p*S?/ a9ӛG%1 ?'%N7uŏ q _^ ~vhJI?4C#- ^pkC ˖O< V|R*W<p?ʼn|y2K? :kY[WlnT>͏fnPhЫ\Z90 y#G?O2 KLsm9#i`H V|+VC>b<'{3S<> ZWihjV>?/GCAr{=OJ=5@.2R_7ڎani{SxƉd}jHG\QJOƞox`rb2)/:c \w5ي{ػ_㶽4VOJhͽO)Bn~--~2鼴T]ٹw4/! <ˣ`%XPǫ6st{w)moAupyem'c  AF6IpmOpZq8=\t+`)S[ʈF{4F:En?W{OĻh\%*NĦ s> mMKOz؋.'EvNy*ޜW 9H+p]N2vS#N3)>sJGSwOOi)=3! O3 z`M,쑜4|9pjmm'bJV..rѬj1{pǍ^~isL p'Vn@+ůmKJ.)\7?)hz~_͟Vؙtx}ţӊ<>(~E1tOx BG>g%s ^@^nsyqY%4|V5j[۽ M ðjrh×>w=,?f|אe#؈4D>uh 3Ri SzA&6,m /d6h`7|v^| M%X"|Z SoMvk)LS_ kgi SU<<x%מ`vj%Y{k|aֲ1Q>XK+= ;? )_Wi KS=mhJ\Oun|ZO^W1@4Ax>֔?P@d9E=^6_ W7UI2NUo^|>G}eF7@xِ1~+~Gzz` .tڟ2r? >(zLGS^~F٣J{S_'@#C*}66*q%">Ž4(&,{t`+8^ Xr7c7CiAX?P?>?+ :k'OvX鉂޼n~H)xk@ >i"n~2|,7HFgM,m T08Xr@` IDAT/8#w/' ~I S`ɇn{o19t0aov5u Ӽu}t`1D%Hh\L7쵿5Eh">ůgYπ7um +hQ"y! XU}.ITs‰cs)o@&K{ĄQƺߏ-^;qX{В}rӧy?LO)^=Qƭ=oo`&%Q)c2:== cv٢C]Zqsel|W~l*8g7,ܽC32yg<~yRst |j=܃ܯ4i+5 ^|r?w(''FVg,PW=\y1X{̆!D=niM߁3=1;ryйg'qGArv n~mv_ hʜM)t\wE>']N|fVp@}}Ieh4e%H/>^˛z9 iKXK^ +W,%8x`D_ #6m(˄^7y.]dc#;},Iv+|Ě:xOhNg+\坙ԗG40,:= '^ 8K> JRn^'XIZelIY^ <]At\ @/_l]KpLϋ U~M$$m󯀑csO (37؛AРܵ7;O+וu^l~h zJѧͯ==櫿:81Dك{Lၫ գ `J:Ay-? pృp/O= c69_Aſ.sWBAހ!< 2{XW SBiK;nҔ'O]y}? ɽ9%'e?g<(ϤC,D|x!ݰB=]oq`z| V|uu=p'E6k2nI3*U *=_/ =g0b`;Dl͹7e?l9L7pN{H0u=3OsvVVfoF;G3DϷޡr ;oP'p|'R*1`+7r+y O$򍨕zZloQתn3曖^-y[BkGQ=şU@ ĞuB7St|J9E4ŏ6$`dG饆0, 2pn 7 Y<8Hט)nGJ@f2P16% K9^~ `{YF8sNs6Vo Š{i8<F˻v[<{vD8>8Eunb-%_ty |2(+}n7SDhk8;>PS++~=nu"Q7YLiKWanٍ/FӛN[ X,ìD=д;J(Kw`|n߅)5ŏ~n^L7\sC 4v+yYjm`X^ȏyV )$XڧՏCy 7 P̤-K6쀱RP(K\s]+RHח) 3LsGDLi?M/Vp+ 5Q%q xVؠcy u+W7>&L g@w 2%e'W-Z.d+JsS ?7)Z&7wD p鹫`o ĉ?[<Kmvuxonׁ~g&!;3 ):Tx U)؇+/Օ? ?Aݨt df!`84&ԫ'Ƈ[voRk-e箆d><~)!`bN#uY<̄GzusƉ =BoMF}F9n~(7 ֋g"1pu$F"UAe+ye)?vn_BW>]xaz*§7å笅K`J_!'c06&N:k_ƺWm=j8NW c^ͯUax7Qu~a}ZVpO4V6r TdZkZUՓ'=7}~!Uee@_85ڮm6Q<:ch};zn46us;9< `6y3=~!Ş*6Rta\N & 5Tv,81VXdg>oRԤu^M?#P;!)+;P񯃞9?65cXYl|&nlf[."6~wc]ox(槸-ntN{Ǖ$DS` )ir?vQRV삻n8{Xm[]]t@sBtC'@٦f-\s=%b۷鞽6 pgn~i @?LazhZՄ*oU BJۉJR99[|`ϻڑ<4PW|cgo.S2Ytq՝ѺQ)qm6>Sb6~饆RL.}QLJMQPip'BVU*@ Xʉ8keW-->b`{kڑob2^2m{-력)`}G]QzUǠsA Q*n?6KO@%_֌|y96@1󙱲[pZN3%uXmE_  C}9}ݼZMOߪgf8@[klCύěwClz*t\_sw`Oʁ S?{-0+P_.fQnNgH5yGJyIgH矵mZ 873ڧPHEnlSr7~앗p`z_UYw⏢)bܾyP܊Ohм7>p`Xy*э kBnA&V0*3@E[3B}=kS!uHg4}?*Y*:o8X78ğnwܵ#i}h;pev$o1Z*Ao(B ir?@8Rc|[K^|^{,vN[AK˅XWнo@ Of$\7?mBW, 㐇6G4}_'׿e@sr$!+D{=(9,8wR8(hcwmo %[WH^R)v#'H֘tho}nA- $ @W~TdXS|8+[|Y۵(`c`')^MjRxd2O=| wO衣)Pvqp<眦7>=h>HiS$=V{5hߗ?Ե@ L :Iiq7`90U*.x,^MO}7w NÞaaW#\vXv9 kMҮ}`zܚ:/ vQϠ׀ +9?VfEspL9$Ȉ,hmU<G)

֬ZׂGͰfw98wJ6dGms*;agwfpEFH׍QB%pBES5p+jn(U2ţ`'nf%p *%gԫs[kԮ}qZH@CL{n/VIT=x!)b1z ;BoxB99`TM[9iFr+_lz>x]t?Z 'E c]pCU۵bN&d=V$pR>|ptgJ[_]yn^AtbgYq+mY,`2ZTxG`{A"AŚN[ۃGn9G۵o*0+G4I@"pچC%o]x5ÜMo\iD"[oܙSimY\,إO{<m&:<#y;;X9(/d2[G71Rux(OPz$;.OρT;!~?܈7Q_x :*+M>E_eϾςႏ^y|{HSc[7@{kcvÉ}6ص Ȼ`0T5aIL ſ)d,mT) '*V1*(z>zX %Qls}Aؿٚl+9g,#yCs ezx79&Gf[99$Q{`ϱ(LEtMn\_?<BPz~GW*q(z~OM(9uk~xGس3_C(6-sdH#.5sHM1ܼg㪂@,1 {F#TD~ů3ٻR?]{S1_POg2v D(~olS[A@ bu=.v3HpX"7z|/D՗[ĒR1H&K[tzןɃ>0 |Ӽ XU9-OF~gĪ8P[pV2aRGp٫`k>]Di>ڮ769,p\Q8TpvonM?5 VmEk_=Brn\ij`J)uBiνKaz$+8kEhi#yWÙBSCڵ(n޳Q74FKptf(Di72φz9hz'uJ',*it).9R 3ԡWx{nGس˚]{k\rZ89gGp\ ĉ4Lpr< zM%:xv.Eſ"-=q'7yi Y T\࿚yZ ǽ=p-?{ZRܵon)jbp+Mdf>kv3o=Myߍ=~ڽO%j Rc8D)PCw*M7*@!d%Z= V6UkղPWܘGon >@u7|`\ Vbj>ڼ#wC{jJD$ aߪi5h&֗<ժt`rUZn5d+fZbLw38~Ԛ=`~}@4'i>5ɗu TR(׫Jhz?\6?O^ Y^1[DZ6~#Oxs/;a :᷿&fRpu}ONtdQ=2:C<˫HOFQR8s7X̒΍$I4I^NzF'7rT^#&FN~}x⡻!::e ̷ڊL d}8ClyQ?0IXJЖьpm\WBUoW*@3HY={xhq&kxHAVnjQ/>np߁'}1j>pHI'm9}y8cms79r{ 5 `kw2 IDAT)5]|0|OUvtk%TYޭa$/5UʐQb/*ٌ bLC2QKX;;DR(y|k%.mC01?fbR#ѿO*NgTOӶW}>?Hs)p= (" 1Qd%Uc/cuhN O?ը) p]\M 8/k߉C@8-*OУ5# GOM̴Bwu/˯ \tR>KaĴzTvy:w@Jbaɇ˯5=7~ ^}e_s)Dͫ`髠'`7?IG:o'i)qWS!޾) ov_`Eנq¹7IhWR @$uE(alG*,_~x嗲z\cinn6m\a̗ڵow̑8tD:=!\ *bup NrJ46Ys +ZtrYT>i/(>x9߃w|?-n] gB]Ei6_\-o1N'CY<\DqICM8Qµm[@ѱ}Cܵi)и0 0UvS[ν}KVDGKu+]"A@Ċ@}RM㕫scp߇;v2wOw\oX 8)Vw#́AZ1xO3<>/kбBIEWbk5 x0 N° @#xPJ=ٓʔ_Qщ?8q>Ńyd)xT)k55G˯?'D[D K&ny>%W '1p+y6O⪊ޘ:acw}?h|e=%p9aQk1HԤ)8T3ZGk?BS<CO]y%O|ᒫo`:PSSMP)1XaQ^|y V|ELzVܫ᣹+MV,]wXH*fr^ka;AM{k׎㥥|NRQߧp,+?p%ׁomGMmcwfHjP`Ucʦ Vj1SL&_0xDa,W=/lu⟙M!dyQC\w4}f I4'Y_z5\?3ϹYd*mBǑ*z)XkW dyUH7('-X- ]SV*\hWן^y!5:?ӿ~b\η5k.V]hމAڵ-Ҧy8@6-nȃpgjK֜&t zjR23'0Qʚ! ypJyݻw/vP+K!jW"o=;~S滵i֩âNg3~ܼǙNv0kUBj)MKZ<@_eU36q];T|x"^Zz~b7(t 0\2pW }Ʉ=J o7I!5߭z85u@Ow[m'rqO=qRCt/7xo5\z#=R8K+[/N =I 4N0n K5ȥ;Axf(X;Vqo^HP}]眵:q@Ow?&FpiRQmrׯ|#8Ϫb&X} 7YMt}&r<%}$@.fP<2i/a551_:$,Ϧs׷"6h[C5pIk8^:eO%d@+&/H#:e83U)nG*2<*T NlbR(1^xĒ#y#M 5e H!9G6Qk_[ʇ5mzd6\ea]PEo`aYr CZ~41^nj'æ#s7y ?~ܵor?<▽*{Ӏ.1.峠߾/a/z5Cʋs  Bµ!j$[͏kBwduPŏ{A|[ kGpBwg]})}Q_ k3_JY$SW^>@<UbLJdױ2[wugV/p g}k <?U z_SG.] ֞u)w-.5_g.&g SPT5v8 b96d@/Ӕ?tg +>hůw {k-5_%K8^2R|MYSY6m; , Q! knКܝ`œʟ&vǶnu:!/LuT33qܸv;]]}=K8m׋ܬP=V~If)~PǑ bryv< )t'0IJ$|@X Vn(%ex7/60{`v2Jx4n2EOUjʳҼ+OEqV hvJIm%ʿ.up_py7s=*xCmkhxXfP0*­P*sv/TI.^AT9^=t׏Pׇ=KzcW Ad@;y>:w7{< qW St*T=3@.CWg.˸?dvL6c*9kp'6L{UGx*)DS`zzs7_lĪFRaHAPera^ȕOqT ɇG\L^9qP?-|+_ޤ:!$Ɔlw7GGˁqN$6>ůjՙyxg:?4,ٮN(nSڵo7QkV?=}rZ|P|t<.>лx {UUv ^#lArec mm)PMgI(z>* ?UuʊCz7{Y]  }kF TkQܵov#w=mKKSh>+\K}8_r%\qݟCǂ^lGkw@H/P6sB=o9*Ô5@%6;c90OF;޵HĢUTh)><NS R>tĠD%RM1Dz;}^ ]S[{P 1zDة_ 괭OSZ?u> W'fкb3LxbY<.k_ܔ4-Gcҩ|%u~ {`ێL0<7?Mϒ%Yek%[X0  0M!Dhj*\EU]UQcf%Y5Xӓ.;N=M=,"򗤋rQ`<[wuo7\捤־s\i@h`: 4Y.^3V}?)< aؐu|}'LNK_{/)iÅKx9Oق=CrPbj]Ck _`dKR2x&u@oGE{\SÇDن'R2!:a KҞ /7mΝ:"_wj;'=#/}BtVI)%Fݭ۶[?v:Oʣϟ{OVܓ_||  "V<.6i>ȉŭ).5Y2h& ^}Y0^Vqd oA1-Vi= P_ /*k7nzWx?qVGZnKv?)+fI+. ýѰeRY/=l9/PLEG5^QIhٯ s[8G쯂W)Z, a U$~'dapMG©79%|o|&w5]']`JXM4W<بoKumE>ũOO-Ɖ=.'w ᣟQ .v.bװL3) k`#/Nx(\M=;%/V>WG=y뭷y>{Q3{_sA@]~idW@Ʉ7޿4^7?E, p?8Qt ( rѬ벀(ՙ! wק'$$<ߟ`(]&]woh4fkY? ] 2cʯl_3];K/yU&YY~0C9+ }כ? ,Aʇs>OXOM"oڲ){ɰcaoM>lI3WݻC1y/9&`@8@_&(xA@=n:?|1WF əG$Kp+1K9rNGi4\R 1S#˄?j-T mY'vpPUt^)yɗSr |]m [׼.ybb\;팱e2:_Ls"O.XKOp/TkG?aAFGGE@e˿: N8G;P9xqS p7UDe oK+㍏|; 7o 5y$C*|Ok k¹Oɉx2ǧZg+:cc)?-#D`ԏW~A$fyc 3.]-|`@_WBuQɀn% ް1\p>uqxSlAʣzsADg&R˯=,FS|ޤN*vv}wz4B2I+,]Lql{m5ا㜖`CH-*v#"?tE0qk^ {l #. @H (" 18Џqv?`;v3G^^t4f[MD͏_htv:pp-&:< ĬN[hyn[qX/Z;7Z&uX|lAs#V]|5*v a_@kH501y<\C'fw!?0xnQ zz(tY s)ڲi~3r_IxOț P_9J\n-mX_e3+r6䡌1_6=iNj:1)[/}f% mbUur|cH[HiIn~ѯ~Q7}o%ʃ|[cÅ4@ eR"eahk> 3}pр/ZIn Ϸ_[zzV>PƇu,ǎoC֮[ yKiZ0 㼢/ԇ-u_ IDATMIAiKlqB R'/dP7( 4]N 9Nur]f͞j?}ѿ9;>"~WA 6|I:8c![?A6 B<8ycd$7O)~5VdB|ȓ.o%zpEy)͟=;5o3V9+1Fy}A|R肟. )ty֡,*oV{e>l~I|Q?XK%Oo1ˁy׻5v}(j s<SYd(t/i.OJa}|>n ;o*|CL$!!vc!G-~(|##E*>ZЕ8E4BҐTdh\ $IO^NjL7Cռ? oy[x,\ۆ/.Rs

Q?WIC}(z,*<g7گڅYz{-ԸnPJu>Kq> 2(tR֥(Q/?awve\WM#!dW|XГgDHh-,ɋ:C=-x>Q^=c='\я{Tt? ʇ1gp"<ԁ`KU+堜7LۂĢ :,oP$~)-kYymM 8~[ y{dPp&S21'ݖigI9&,r:9i:є=[u?tEx/-#|% ' KR`-Ӡ^ R݃ ll[huiu;wG" :86o>3O[{Rt Ay;KTes>R\JO,P[ɩ'L}0`^4 ؄V63q}̻1 偊eRY֔y`QgO:=i;+}/_{ R~Gp䂿*UW *[hdB@Vؤf) ؕV`ɋsɽosxǝ ca]U[1Bli)OS_h/D'(g K9뤍_)Ic'ēg2ǩzg%@v$}wѾY .2|5e>A eD?c#|X;?W&lٱ?O O#\p,yF]C]S\s>>bD>ZS{e2~گvV<#^. ʪ..0L.ܮ8  $Sʃ/~-cǎ{.<gx{A4#ug0- xR)#ǃXED%6>1ra"arp4uu\xճ5T] pRڻ7qrv]ʇ%Զ.h1Lԥ@̀ >uy&EQi=E>)'_]Iy`>7wЙL u_T_{%/R_:SʃVG6k%zw>/<(g[ / K/{w7\SZ`Ο GJL%M@IƇ9N:{@ j&(BҲt(km/o?>,FwSڽwOz\ہСC1+ѣgH/ \s. ]8/i`8vU\ٱE6ܙn ILbۆr  r"DLp+n5Zu:p8x-u|`Ք;]v_?0rdן",h-Kl|/1f =8XkU?âQ0^<G¾c/u!>sLO},5®$ӖmDgl#)ۊYCRAL=m <%ǴM2[xBiS>{Z >hj+}cSJ5_Tuτo=Y?qȑx &x?x8 X,b '-gPj/ \5۳`~ԕ.?.O^|8ӟDX~l#=$\c0HĀ !CtY8/cZ<}P_VK?9+'):q<.Az+)%mB֭[|s!3E i:ʤG$N1R4_i=uRur갬uOHg oo=5g8vS_?- y׼ 8%@!L!GZ\$dQ.S\ B_Rϝ'O ǎ G z*pxiy1sDIloش1 7ewU\0]f@MmC˜+viYR'G}L=O>$ʨMԙ&e;Y'0"eW.SfK +U_և)LucdO]퇼jIgC з{õoȷnW_ Ǐ7‘x Q^80/._ӨՊ!r~QQ{pD\pBGĆnm[M't D;g |:,m˘[rmE ?K#AzQ>֡X|Nh[uMQSIxܹs,MR,% Pi/liJe,<`OL:P&/`mv~?(Ig]X%hFJ%jȄ/]Ν/g'$ K?z9GSؾsgx; |u4h9DL4Sb1Օ9a]iPGїu5 RPH2RuBG#wEnJiC2)u`ٻr,r}LiAeRH>RG˴>ZeaeǮaãvȏgΜAi=<<>D%_<.=N<cg,L8B g gō}M7\}10aܐ 75 DiYw.z2u`4~6#C%җ+mgi=G]}K%mjz@/_$] dQ{J&.uܶ~/RQ7l[\[u[߷[:K$CvN<+g l[.k Xw ޼(Xu [;ivS)VwDsП%/}x^ˇW=\]w.uiÚpęϩ^{›}a1 悒,sJ o͇!Ϲ ٱ"GZqGOk[=i"~)%(9|0/Jy>mS_$1OuF=?ԡ5rٚGF6o6oX+tm؂Mk֍kM&r\xom6on?-.Ɵ[uA>2G_ےW&OM+őKiu=5}s?M(Yjda Ji]6u|Q{º%ZVVyF[6A~+5aŋϖ`͛µoygmŞG.ꓒOYpiAE=]Hqoꑶϻ\w /:|3%:8<1:)KyP6):gs'{p`Wg[%oIfRL%x+cH)eGt_G67|m;ҙ?|3w^_=՞ɮ ]am¾kc`N:G \u^O)OXN)mǔO]SLPsv:H1ϵ?KԡOM)#ղyx,>^~f@v8 @}x:7|R]ISOy"d%^^8DUA <{~aoaнa~-X;ВGȫ vu:>d)_A;rJ-#_1#n+yl#u4mR,xU; yZ$``9+Τ +Kq hCjiMTփ 8pEV ~+;v %o+k`;uYOuY'ziNQشP+4)nƊ1GJQ;<86+mz9^MUw?H̀iκ.0M}u0OJL>hNj}K<2c~˶aܷ/H`;Y >/KQXmR iO9=7Kth֕KbC] ؁O >H:J9{XMCZ|.*+xV,[$0ۍgIX6LJ/}m!eyhQQ+9#3x}wB?v: 2 .I,ЭApiZ/my׿s; w/,v_<~bAxA%GC|-O-?ڶQmuD4O.ju6hKN?g)MO=Zj}LR=oSdݻ Ҫ~P$g໲ŁCeR turꒂǃxi=U!m|%˙{ܫsexP {)v2`^i5Dt4/Zy̓nIKm)K)G_)I+]MhӤ۞ӣT'vAeD8 M&pE kƼKC8N ȓC92`g.{w,={عK}žc0b)ȯШ$ |IKGҋ&ꀦe>嗖ٞ]*K >ղ|PRFX7F]c},Z4`iӒ7jg~gps4`%; Nc6aOL_XXmHs6-;{I? 2_v*nCT=_nݺ! aC(3K6i=S}-eˤ}RFJ;@OhG }ULyηcm|y:@z!Z<6餲FlM,>OiWzh37;ki;2gbg>}s-~ӫ3PM tgwR߼ࠕb2hi7TEcaWع{1wE {u`2ڊ?< wԯ}ˮWPЦ'K<yZ2SؒG})mPf\Hh> HIQțx1hBuSԝJꫳ<9^>uu3Ё>An6uzSݱdY|.9q^-db.uafцI2f'-w|omd6 °M}G}sԡ?PR}<* >u]l7}NPF_a9>tRki]9}96l6 M. ©:䥺!A9uE;(Ll/Z@OKT/WuAΤ}֥e]zǺ4lR^SY˴G],ju'vThHːA_PF^~4$VMX0VS}j $ ·d'8e|Iv`R]OP.2R}z<wݾLZuerإe٧vd_J] IDATN/ǃ<}_nZֶ:=|I2m42h0 bG]RtleZ>GiNvj|.ǃ44Oa?-k[PR)#WOX|4Yv_m@%V PG_4]1?1b@IR2mx+ėrPu?*i}AG"6u$uR.PiLt9IuYQ/uKI=x~rzi}5Mkn`JROkJ{S@{+Wr`eG2G] <"mG.d@OǓ6H*-2h<\NNO=g7/OI^'K䩞.<&?#VyIH:ɷS P>mX\G_r e Y伿@/nk/#z nK=Ku]m8Z>eм&8h;Y&oOsyi9i](!ͭ> z O:L-9o;& K>_%ZM$'=p9FA= 6@s6Z>|ny̧vizR'I|}mjL͝iO!:thY2'SZ,~'WZ`҇2R:/͢pX.g eY[gJOԢCqƥOښT/- )/-~\/O=)~T}å{Pw?[7t7;0*dvu=$]|z@|r ><ϼE]|Ҿji C:}ZOQ.|7 xM}eN8`_:2(f)lX[V+KSu>/]<\X,}iF˙:LK~I'2iǬ2y,n =;_5?bլR"PW}:h; z$lWimA7/CR~Znk|#E89Gho@4zim xƦaysp\@.Oyӥ:y_G:9ϹfYḙIp`$0iYHG.;6e(\[,螵4дCu:iҲnw.ߦ` ynҺ%%uf c^Xҿ%/ѼZixM"n,WVu삿ҏ3]`}znk}ou7  `fLсcUe+huna-c(ﱴeXw:ُ[{OXx@oj%+ O` |N\uvu75v9 cUe4}[SŴ @Yd;Vex@oj5+kq]sY4/i@ɛuBM=}DZ*ˎz;Vy^O={X_XPӑA1XP2qZUH;^v^k?MWǬ,>r)~-7-O;),JZèvj;VvXA/[vJdv.١MĂ@>Auu5Rcexʎ4q@yY>\ToF߾ezed20jceGޱc͒32+O}LK*/@}kb b^X^DXq)lڭGٱcMv|nM v1_؇Ҕ  )+Ndvȱ*/[dޮ7b@F\X$% O~jZg˧*Ǫ =*CfϭqfUI w |NT @O%=Q;t!/l\9 7o}`XG+hܲ㵒o61;5u;Rrb|ĚXȱce,vsˎjF^,d68X hiU6Iߣv}t<۱-;^U9V`Æ … 8fq0m^,db6Ǡ`~pR”MGˎW^|k*?ǫ/bDd Ϗ=ڤBYcRh/H#p{28ӿ`+:^ ގ+;VtxX]tɌ? ;Ś28 :,Y9};]::d}^-Ǥx5Tfʪ;F}S[ٖf6[/47[[Hٵs+kQksIٶLcmU?k輵?z3 @¼jJwpK%\c6-աl/;^ªo.{j| 7/ S2='8ܲcMˎ״*Èg yP2%lmkSGiJ`Rgs|j9&Myī`]7dz&%'&qR$xri}nu/l{닀`S7`_Yc>>+;e:Jw2~|P6[&%?aj 3"QX(\is?P6We +&{J}hCAsg>>+;einᘳvmP6J ЕNsO.y{/5[v+;Vt4ȯ(w˴e"x7%MbrO§/まl|nr+;ֹ͚w2>uӑ]x#4IW9=З -;^ceGLsz?|`i"`@K`8csó>ARpjY&pAhëMNN?~&? X}79 biW[ܟjC& JWzZ麎}+;V> .G<[+ HeL~PL a8,;]@_j:KznNv+;e]ϭ;q =C@B]] NRb*Ĵ~.z뭸te -:CG=+h:^v+;VӜ[%c-u'OěꆋOg!0qI 1/@4ceܶ͵s/p N+Uo)}@[c!>Ϧz&0$;O55N˸yuVjq~ɗ{zVeIje`Ur<-y <7?.uXpU|,L)z1:Mdq zq@7._23ijEYx*XO{H/;ƪd|KN@A,?~.(\ -"AatH(返OdC@o|7롦ejubU28ζ^~1N_czN=H)/寊d|Ns[w>Bc(%;RnӱT.D>nU.?^ V-[ѭp9=Pf5FXek5cU7fNw6G>xU8ٟF^H| k] I&vt'< MǪl/;^U+7ѡ"ub;; \$(vM lu*7L]J]sFXٱz ;hb9n SGz :id Ql"O9 V,5HtixV~ 8Gp 'N?%v'z =CG @lLu_W@?'(gfoNO#8 K/'r-XQ}ƠO ?M A>J_MrvBt0I*/ܗX ֏ GpV6{dw'֘%zx&g,zk,.@@@@U 5kqegLyG[0u8#hZ@ה'e L X{6.%[cmglxJ)#M(#+gӓ#8#CmСCQE?F5/5.b'tgSgȓ m [0TBNFgeط.QW_}U#8X9N< mf<'SFucbeYҶHi,ayHe4lHSk&\8#P52XE5)iC)䑦2s&.I =ȓGjj>xdY#8# X 9Ӵ79mXPFu#R.z `H!2#%t[@,e.t(6NGpVi QR5) ڤZNi*cqe3Q'e1WGR^N,M*9pG(@dXHY/Is-T؊=&XL #:<:k賖ց^kGpGR8/x:`lЍbc#'zF;X/w#8#"bd@ѷjuC,)'h|Oy2w`X!TzJC#AݪyGpG k|):uct-/vm뿻jsAlvG+y6tGX)2-e\c~?OJSr2qJs:98t!g$`7|ʮke[_E1(u2zWJitF MHM@mSieyhЛvyƍ'!apGwr\rԩ^JaBGr:LGbxi(JR6PMx#&#D}5E :L:O^Jq'GpdpÔeMe4c޴)m <Ϙ1"j>哤` NehL\ieM<\<)dH.ĺ\8#Pu1[Lהyڰ ڔɛxZƳ|Lt." ^Upѱ4B6M[γntY+i}58#0*8[eyX&(t'Ar<ڂ+kYUO;ʜ:#Ŷc8tu)XQK(<2MdԃL E PCpŭ>s2R[\eH!cOҲwGQ@eRC^j(yؤv䑲-,/~g jACnh4tDs&|R^r 'i>rS\5pG`4Jحe&urT&^Vn4t.J[93iOKE)Hz+G?O#8#?I'ˤIR:J>gċ ~kh9 ip SW,yCh9hSw8#0]@3,T4!ȗM?pQ| 6y4X]D$y[t6ͳL]hX2AS}O^Z&ߩ#8t=9-k٨] N?ZYTdZjZ<,"i~ZNeѠ4s#8BA$0yb WQJv h>j"p@pe-agV=;js`(!݄TPq#8 ^ڻ5M0YPwG۱*@1dK :M(xpG#>pG6i#9#8=@=o#8#0m|0mĽ>GpGMpGp/8#_` #8Gp  7pG66^#8#|ЃA&8#8FH?7yIENDB`icnV C