textedit.app-4.0+20061029/0000755000000000000000000000000010521105346013360 5ustar rootroottextedit.app-4.0+20061029/German.lproj/0000755000000000000000000000000010521104636015717 5ustar rootroottextedit.app-4.0+20061029/German.lproj/Localizable.strings0000644000000000000000000001124610032131636021554 0ustar rootroot/*** German strings by Johannes Bauer 2004/03/27 ***/ /* Zoom popup entry */ "10%" = "10%"; /* Zoom popup entry */ "800%" = "800%"; /* Zoom popup entry */ "50%" = "50%"; /* Zoom popup entry */ "128%" = "128%"; /* Zoom popup entry */ "75%" = "75%"; /* Zoom popup entry */ "25%" = "25%"; /* Zoom popup entry */ "400%" = "400%"; /* Zoom popup entry */ "1600%" = "1600%"; /* Zoom popup entry */ "200%" = "200%"; /* Zoom popup entry */ "100%" = "100%"; /* Button choice which allows the user to abort the save of a document which is being closed. */ "Don't Save" = "Nicht speichern"; /* Title of alert indicating file couldn't be reverted */ "Couldn't Revert" = "Konnte nicht wiederherstellen"; /* Menu item to make the current document rich text */ "&Make Rich Text" = "In Rich Text umwandeln"; /* Name of new, untitled document */ "UNTITLED" = "UNBENANNT"; /* Menu item to cause text to be laid out to the size of the currently selected page type */ "&Wrap to Page" = "Textumbruch an der Seite"; /* Title of save and alert panels when saving RTFD */ "Save RTFD" = "RTFD speichern"; /* Message confirming revert of specified document name. */ "Revert to saved version of %@?" = "Gespeicherte Version von %@ wiederherstellen?"; /* Title of save and alert panels when saving RTF */ "Save RTF" = "RTF speichern"; /* Question asked of user when he/she tries to close a window containing an unsaved document. */ "Document has been edited. Save?" = "Das Dokument wurde bearbeitet. \u00c4nderungen speichern?"; /* Message indicating file couldn't be reverted. */ "Couldn't revert to saved version of %@." = "Konnte gespeicherte Version von %@ nicht wiederherstellen."; /* Menu item to cause text to be laid out to size of the window */ "&Wrap to Window" = "Textumbruch am Fenster"; /* Title of save and alert panels when saving plain text */ "Save Plain Text" = "Reinen Text speichern"; /* Encoding popup entry indicating default encoding */ "Default" = "Voreinstellung"; /* Title of alert indicating file couldn't be opened */ "File system error" = "Dateisystem-Fehler"; /* Button choice which allows the user to save the document. */ "Save" = "Speichern"; /* Message indicating document couldn't be saved under the given name. */ "Couldn't save document as %@." = "Konnte das Dokument nicht als %@ speichern."; /* Message indicating file couldn't be opened. */ "Couldn't open file %@." = "Konnte Datei %@ nicht \u00f6ffnen."; /* Button choice allowing user to cancel. */ "Cancel" = "Abbrechen"; /* Menu item to disallow hyphenation in the document */ "Disallow &Hyphenation" = "Silbentrennung abschalten"; /* Menu item to allow hyphenation in the document */ "Allow &Hyphenation" = "Silbentrennung anschalten"; /* Title of alert confirming Make Plain Text */ "Make Plain Text" = "In reinen Text umwandeln"; /* Contents of alert panel informing user that the file's string encoding needs to be changed */ "Document can no longer be saved using its original %@ encoding. Please choose another encoding (%@ is one possibility)." = "Das Dokument kann nicht mehr mit seiner urspr\u00fcnglichen Zeichenkodierung %@ gespeichert werden. Bitte eine andere Kodierung w\u00e4hlen (%@ ist eine M\u00f6glichkeit)."; /* Message confirming Make Plain Text */ "Convert document to plain text? This will lose fonts, colors, and other text attribute settings." = "Dokument in reinen Text umwandeln? Dadurch gehen Schriftarten, Farben und andere Textattribute verloren."; /* Menu item to make the current document plain text */ "&Make Plain Text" = "In reinen Text umwandeln"; /* Title of alert confirming revert */ "Revert" = "Revert"; /* Button allowing user to abort opening multiple files after one couldn't be opened */ "Abort" = "Abbrechen"; /* OK. */ "OK" = "OK"; /* Title of alert panel which comes when the user tries to quit or close a window containing an unsaved document. */ "Close" = "Schlie\u00dfen"; /* Version string. %s is replaced by the version number. */ "Release 4 (v%s)" = "Release 4 (v%s)"; /* Button choice allowing user to cancel. */ "Cancel" = "Abbrechen"; /* Title of alert panel which comes up when user chooses Quit and there are unsaved documents. */ "Quit" = "Beenden"; /* Message in the alert panel which comes up when user chooses Quit and there are unsaved documents. */ "You have unsaved documents." = "Einige Dokumente wurden noch nicht gespeichert."; /* Choice (on a button) given to user which allows him/her to review all unsaved documents if he/she quits the application without saving them all first. */ "Review Unsaved" = "Ansehen"; /* Choice (on a button) given to user which allows him/her to quit the application even though there are unsaved documents. */ "Quit Anyway" = "Trotzdem beenden"; textedit.app-4.0+20061029/Russian.lproj/0000755000000000000000000000000010521104636016132 5ustar rootroottextedit.app-4.0+20061029/Russian.lproj/Localizable.strings0000644000000000000000000002006410144243032021763 0ustar rootroot/* Translation by Dmitriy Kostiuk . */ /* Zoom popup entry */ "10%" = "10%"; /* Zoom popup entry */ "800%" = "800%"; /* Zoom popup entry */ "50%" = "50%"; /* Zoom popup entry */ "128%" = "128%"; /* Zoom popup entry */ "75%" = "75%"; /* Zoom popup entry */ "25%" = "25%"; /* Zoom popup entry */ "400%" = "400%"; /* Zoom popup entry */ "1600%" = "1600%"; /* Zoom popup entry */ "200%" = "200%"; /* Zoom popup entry */ "100%" = "100%"; /* Button choice which allows the user to abort the save of a document which is being closed. */ "Don't Save" = "Не сохранять"; /* Title of alert indicating file couldn't be reverted */ "Couldn't Revert" = "Восстановление не удалось"; /* Menu item to make the current document rich text */ "&Make Rich Text" = "С&делать Rich Text"; /* Name of new, untitled document */ "UNTITLED" = "БЕЗЫМЯННЫЙ"; /* Menu item to cause text to be laid out to the size of the currently selected page type */ "&Wrap to Page" = "&Переносить как на странице"; /* Title of save and alert panels when saving RTFD */ "Save RTFD" = "Сохранение RTFD"; /* Message confirming revert of specified document name. */ "Revert to saved version of %@?" = "Восстановить сохраненную версию %@?"; /* Title of save and alert panels when saving RTF */ "Save RTF" = "Сохранение RTF"; /* Question asked of user when he/she tries to close a window containing an unsaved document. */ "Document has been edited. Save?" = "Документ был изменен. Сохранить?"; /* Message indicating file couldn't be reverted. */ "Couldn't revert to saved version of %@." = "Не удалось восстановить сохраненную версию %@."; /* Menu item to cause text to be laid out to size of the window */ "&Wrap to Window" = "&Переносить как в окне"; /* Title of save and alert panels when saving plain text */ "Save Plain Text" = "Сохранение Plain Text"; /* Encoding popup entry indicating default encoding */ "Default" = "По-умолчанию"; /* Title of alert indicating file couldn't be opened */ "File system error" = "Ошибка файловой системы"; /* Button choice which allows the user to save the document. */ "Save" = "Сохранить"; /* Message indicating document couldn't be saved under the given name. */ "Couldn't save document as %@." = "Не удалось сохранить документ как %@."; /* Message indicating file couldn't be opened. */ "Couldn't open file %@." = "Не удалось открыть файл %@."; /* Button choice allowing user to cancel. */ "Cancel" = "Отмена"; /* Menu item to disallow hyphenation in the document */ "Disallow &Hyphenation" = "Не разбивать &слова при переносе"; /* Menu item to allow hyphenation in the document /* Zoom popup entry */ "10%" = "10%"; /* Zoom popup entry */ "800%" = "800%"; /* Zoom popup entry */ "50%" = "50%"; /* Zoom popup entry */ "128%" = "128%"; /* Zoom popup entry */ "75%" = "75%"; /* Zoom popup entry */ "25%" = "25%"; /* Zoom popup entry */ "400%" = "400%"; /* Zoom popup entry */ "1600%" = "1600%"; /* Zoom popup entry */ "200%" = "200%"; /* Zoom popup entry */ "100%" = "100%"; /* Button choice which allows the user to abort the save of a document which is being closed. */ "Don't Save" = "Не сохранять"; /* Title of alert indicating file couldn't be reverted */ "Couldn't Revert" = "Восстановление не удалось"; /* Menu item to make the current document rich text */ "&Make Rich Text" = "С&делать Rich Text"; /* Name of new, untitled document */ "UNTITLED" = "БЕЗЫМЯННЫЙ"; /* Menu item to cause text to be laid out to the size of the currently selected page type */ "&Wrap to Page" = "&Переносить как на странице"; /* Title of save and alert panels when saving RTFD */ "Save RTFD" = "Сохранение RTFD"; /* Message confirming revert of specified document name. */ "Revert to saved version of %@?" = "Восстановить сохраненную версию %@?"; /* Title of save and alert panels when saving RTF */ "Save RTF" = "Сохранение RTF"; /* Question asked of user when he/she tries to close a window containing an unsaved document. */ "Document has been edited. Save?" = "Документ был изменен. Сохранить?"; /* Message indicating file couldn't be reverted. */ "Couldn't revert to saved version of %@." = "Не удалось восстановить сохраненную версию %@."; /* Menu item to cause text to be laid out to size of the window */ "&Wrap to Window" = "&Переносить как в окне"; /* Title of save and alert panels when saving plain text */ "Save Plain Text" = "Сохранение Plain Text"; /* Encoding popup entry indicating default encoding */ "Default" = "По-умолчанию"; /* Title of alert indicating file couldn't be opened */ "File system error" = "Ошибка файловой системы"; /* Button choice which allows the user to save the document. */ "Save" = "Сохранить"; /* Message indicating document couldn't be saved under the given name. */ "Couldn't save document as %@." = "Не удалось сохранить документ как %@."; /* Message indicating file couldn't be opened. */ "Couldn't open file %@." = "Не удалось открыть файл %@."; /* Button choice allowing user to cancel. */ "Cancel" = "Отмена"; /* Menu item to disallow hyphenation in the document */ "Disallow &Hyphenation" = "Не разбивать &слова при переносе"; /* Menu item to allow hyphenation in the document */ "Allow &Hyphenation" = "Разбивать &слова при переносе"; /* Title of alert confirming Make Plain Text */ "Make Plain Text" = "Создание Plain Text"; /* Contents of alert panel informing user that the file's string encoding needs to be changed */ "Document can no longer be saved using its original %@ encoding. Please choose another encoding (%@ is one possibility)." = "Документ больше не может быть сохранен в оригинальной кодировке %@ . Пожалуйста, выберите другую кодировку (%@ - один из вариантов)."; /* Message confirming Make Plain Text */ "Convert document to plain text? This will lose fonts, colors, and other text attribute settings." = "Преобразовать документ в plain text? Это приведет к потере информации о шрифтах, цветах и других установленных атрибутах текста."; /* Menu item to make the current document plain text */ "&Make Plain Text" = "С&делать Plain Text"; /* Title of alert confirming revert */ "Revert" = "Восстановить"; /* Button allowing user to abort opening multiple files after one couldn't be opened */ "Abort" = "Прервать"; /* OK. */ "OK" = "OK"; /* Title of alert panel which comes when the user tries to quit or close a window containing an unsaved document. */ "Close" = "Закрыть"; /* Version string. %s is replaced by the version number. */ "Release 4 (v%s)" = "Релиз 4 (v%s)"; /* Button choice allowing user to cancel. */ "Cancel" = "Отмена"; /* Title of alert panel which comes up when user chooses Quit and there are unsaved documents. */ "Quit" = "Выход"; /* Message in the alert panel which comes up when user chooses Quit and there are unsaved documents. */ "You have unsaved documents." = "Имеются несохраненные документы."; /* Choice (on a button) given to user which allows him/her to review all unsaved documents if he/she quits the application without saving them all first. */ "Review Unsaved" = "Просмотреть"; /* Choice (on a button) given to user which allows him/her to quit the application even though there are unsaved documents. */ "Quit Anyway" = "Выйти все равно"; textedit.app-4.0+20061029/English.lproj/0000755000000000000000000000000010521104636016077 5ustar rootroottextedit.app-4.0+20061029/English.lproj/Document.gorm/0000755000000000000000000000000010521104636020620 5ustar rootroottextedit.app-4.0+20061029/English.lproj/Document.gorm/data.classes0000644000000000000000000002427107747541557023145 0ustar rootroot{ Document = { Outlets = ( scrollView ); Super = NSObject; }; FirstResponder = { Actions = ( "activateContextHelpMode:", "alignCenter:", "alignJustified:", "alignLeft:", "alignRight:", "arrangeInFront:", "cancel:", "capitalizeWord:", "changeColor:", "changeFont:", "checkSpelling:", "close:", "complete:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "deleteBackward:", "deleteForward:", "deleteToBeginningOfLine:", "deleteToBeginningOfParagraph:", "deleteToEndOfLine:", "deleteToEndOfParagraph:", "deleteToMark:", "deleteWordBackward:", "deleteWordForward:", "deminiaturize:", "deselectAll:", "fax:", "hide:", "hideOtherApplications:", "indent:", "loosenKerning:", "lowerBaseline:", "lowercaseWord:", "makeKeyAndOrderFront:", "miniaturize:", "miniaturizeAll:", "moveBackward:", "moveBackwardAndModifySelection:", "moveDown:", "moveDownAndModifySelection:", "moveForward:", "moveForwardAndModifySelection:", "moveLeft:", "moveRight:", "moveToBeginningOfDocument:", "moveToBeginningOfLine:", "moveToBeginningOfParagraph:", "moveToEndOfDocument:", "moveToEndOfLine:", "moveToEndOfParagraph:", "moveUp:", "moveUpAndModifySelection:", "moveWordBackward:", "moveWordBackwardAndModifySelection:", "moveWordForward:", "moveWordForwardAndModifySelection:", "ok:", "open:", "orderBack:", "orderFront:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "orderOut:", "pageDown:", "pageUp:", "paste:", "pasteAsPlainText:", "pasteAsRichText:", "pasteFont:", "pasteRuler:", "performClose:", "performMiniaturize:", "performZoom:", "print:", "raiseBaseline:", "runPageLayout:", "runToolbarCustomizationPalette:", "scrollLineDown:", "scrollLineUp:", "scrollPageDown:", "scrollPageUp:", "scrollViaScroller:", "selectAll:", "selectLine:", "selectNextKeyView:", "selectParagraph:", "selectPreviousKeyView:", "selectText:", "selectText:", "selectToMark:", "selectWord:", "showContextHelp:", "showGuessPanel:", "showHelp:", "showWindow:", "stop:", "subscript:", "superscript:", "swapWithMark:", "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:", "terminate:", "tightenKerning:", "toggle:", "toggleContinuousSpellChecking:", "toggleRuler:", "toggleToolbarShown:", "toggleTraditionalCharacterShape:", "transpose:", "transposeWords:", "turnOffKerning:", "turnOffLigatures:", "underline:", "unhide:", "unhideAllApplications:", "unscript:", "uppercaseWord:", "useAllLigatures:", "useStandardKerning:", "useStandardLigatures:", "yank:", "zoom:" ); Super = NSObject; }; IBInspector = { Actions = ( "ok:", "revert:", "touch:" ); Outlets = ( window ); Super = NSObject; }; IBPalette = { Actions = ( ); Outlets = ( originalWindow ); Super = NSObject; }; NSActionCell = { Super = NSCell; }; NSApplication = { Actions = ( "arrangeInFront:", "hide:", "hideOtherApplications:", "miniaturizeAll:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "runPageLayout:", "stop:", "terminate:", "unhide:", "unhideAllApplications:" ); Outlets = ( delegate ); Super = NSResponder; }; NSArray = { Super = NSObject; }; NSBrowser = { Actions = ( "doClick:", "doDoubleClick:", "selectAll:" ); Outlets = ( delegate ); Super = NSControl; }; NSBrowserCell = { Super = NSCell; }; NSButton = { Actions = ( "performClick:" ); Super = NSControl; }; NSButtonCell = { Actions = ( "performClick:" ); Super = NSActionCell; }; NSCStringText = { Actions = ( "clear:", "selectText:" ); Super = NSText; }; NSCell = { Actions = ( "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeStringValueFrom:" ); Super = NSObject; }; NSColorWell = { Actions = ( "takeColorFrom:" ); Super = NSControl; }; NSComboBox = { Outlets = ( dataSource ); Super = NSTextField; }; NSControl = { Actions = ( "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:" ); Outlets = ( target ); Super = NSView; }; NSCursor = { Super = NSObject; }; NSDateFormatter = { Super = NSFormatter; }; NSDictionary = { Super = NSObject; }; NSDocument = { Actions = ( "printDocument:", "revertDocumentToSaved:", "runPageLayout:", "saveDocument:", "saveDocumentAs:", "saveDocumentTo:" ); Super = NSObject; }; NSDocumentController = { Actions = ( "clearRecentDocuments:", "newDocument:", "openDocument:", "saveAllDocuments:" ); Super = NSObject; }; NSDrawer = { Actions = ( "close:", "open:", "toggle:" ); Outlets = ( delegate ); Super = NSResponder; }; NSFontManager = { Actions = ( "addFontTrait:", "modifyFont:", "modifyFontViaPanel:", "orderFrontFontPanel:", "removeFontTrait:" ); Outlets = ( menu ); Super = NSResponder; }; NSForm = { Super = NSMatrix; }; NSFormCell = { Super = NSActionCell; }; NSFormatter = { Super = NSObject; }; NSHelpManager = { Actions = ( "activateContextHelpMode:", "showHelp:" ); Super = NSResponder; }; NSImage = { Super = NSObject; }; NSImageView = { Super = NSControl; }; NSMatrix = { Actions = ( "selectAll:", "selectText:" ); Outlets = ( delegate ); Super = NSControl; }; NSMenu = { Super = NSObject; }; NSMenuItem = { Outlets = ( target ); Super = NSObject; }; NSMutableArray = { Super = NSArray; }; NSMutableDictionary = { Super = NSDictionary; }; NSNumberFormatter = { Super = NSFormatter; }; NSOutlineView = { Super = NSTableView; }; NSPanel = { Super = NSWindow; }; NSPopUpButton = { Super = NSButton; }; NSProgressIndicator = { Actions = ( "animate:", "startAnimation:", "stopAnimation:" ); Super = NSObject; }; NSResponder = { Actions = ( "deselectAll:", "selectAll:", "selectText:" ); Outlets = ( menu ); Super = NSObject; }; NSRulerView = { Super = NSView; }; NSScrollView = { Super = NSView; }; NSScroller = { Super = NSControl; }; NSSecureTextField = { Super = NSTextField; }; NSSecureTextFieldCell = { Super = NSTextFieldCell; }; NSSlider = { Super = NSControl; }; NSSliderCell = { Super = NSActionCell; }; NSSplitView = { Super = NSView; }; NSTabView = { Actions = ( "selectFirstTabViewItem:", "selectLastTabViewItem:", "selectNextTabViewItem:", "selectPreviousTabViewItem:", "takeSelectedTabViewItemFromSender:" ); Outlets = ( delegate ); Super = NSView; }; NSTableColumn = { Super = NSObject; }; NSTableHeaderCell = { Super = NSTextFieldCell; }; NSTableHeaderView = { Super = NSView; }; NSTableView = { Actions = ( "deselectAll:", "selectAll:" ); Outlets = ( dataSource, delegate ); Super = NSControl; }; NSText = { Actions = ( "alignCenter:", "alignLeft:", "alignRight:", "changeFont:", "changeSpelling:", "checkSpelling:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "ignoreSpelling:", "paste:", "pasteFont:", "pasteRuler:", "selectAll:", "showGuessPanel:", "subscript:", "superscript:", "toggleRuler:", "underline:", "unscript:" ); Outlets = ( delegate ); Super = NSView; }; NSTextField = { Actions = ( "selectText:" ); Outlets = ( delegate ); Super = NSControl; }; NSTextFieldCell = { Super = NSActionCell; }; NSTextView = { Actions = ( "alignJustified:", "changeColor:", "deleteBackwards:", "insertBacktab:", "insertNewLine:", "insertParagraphSeparator:", "insertTab:", "loosenKerning:", "lowerBaseline:", "moveBackward:", "moveDown:", "moveForward:", "moveLeft:", "moveRight:", "moveUp:", "pasteAsPlainText:", "pasteAsRichText:", "raiseBaseline:", "tightenKerning:", "toggleContinuousSpellChecking:", "toggleTraditionalCharacterShape:", "turnOffKerning:", "turnOffLigatures:", "useAllLigatures:", "useDefaultBaseline:", "useDefaultKerning:", "useDefaultLigatures:", "useStandardBaseline:", "useStandardKerning:", "useStandardLigatures:" ); Super = NSText; }; NSView = { Actions = ( "fax:", "print:" ); Outlets = ( nextKeyView ); Super = NSResponder; }; NSWindow = { Actions = ( "deminiaturize:", "fax:", "makeKeyAndOrderFront:", "miniaturize:", "orderBack:", "orderFront:", "orderOut:", "performClose:", "performMiniaturize:", "performZoom:", "print:", "runToolbarCustomizationPalette:", "selectNextKeyView:", "selectPreviousKeyView:", "toggleToolbarShown:", "zoom:" ); Outlets = ( delegate, initialFirstResponder ); Super = NSResponder; }; NSWindowController = { Actions = ( "showWindow:" ); Outlets = ( document, window ); Super = NSResponder; }; Object = { }; ScalingScrollView = { Super = NSView; }; }textedit.app-4.0+20061029/English.lproj/Document.gorm/data.info0000644000000000000000000000032210411350453022401 0ustar rootrootGNUstep archive00002a96:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&% Latest Version0& %  Typed Streamtextedit.app-4.0+20061029/English.lproj/Document.gorm/objects.gorm0000644000000000000000000000231610411350453023137 0ustar rootrootGNUstep archive00002a96:00000013:0000001b:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&% Document0&% GSCustomClassMap0&0&% GormCustomView01 GSCustomView1 GSNibItem0 &% ScalingScrollView  C C&0 & %  GormNSWindow0 1NSWindow1 NSResponder% ? A C C&% C D>0 1 NSView% ? A C C  C C&0 1 NSMutableArray1 NSArray&01 NSColor0&%NSNamedColorSpace0&% System0& %  controlColor0&% Window0&% Window0&%Window CF B F@ F@%0 &01NSNibConnector 0&%NSOwner0 01NSNibOutletConnector01NSMutableString& %  scrollView01 GSMutableSet1 NSMutableSet1NSSet& textedit.app-4.0+20061029/English.lproj/FindPanel.strings0000644000000000000000000000033007747541557021375 0ustar rootroot/* Status displayed in find panel when indicated number of matches are replaced. */ "%d replaced" = "%d replaced"; /* Status displayed in find panel when the find string is not found. */ "Not found" = "Not found"; textedit.app-4.0+20061029/English.lproj/Localizable.strings0000644000000000000000000001047607747541557021772 0ustar rootroot/* Zoom popup entry */ "10%" = "10%"; /* Zoom popup entry */ "800%" = "800%"; /* Zoom popup entry */ "50%" = "50%"; /* Zoom popup entry */ "128%" = "128%"; /* Zoom popup entry */ "75%" = "75%"; /* Zoom popup entry */ "25%" = "25%"; /* Zoom popup entry */ "400%" = "400%"; /* Zoom popup entry */ "1600%" = "1600%"; /* Zoom popup entry */ "200%" = "200%"; /* Zoom popup entry */ "100%" = "100%"; /* Button choice which allows the user to abort the save of a document which is being closed. */ "Don't Save" = "Don't Save"; /* Title of alert indicating file couldn't be reverted */ "Couldn't Revert" = "Couldn't Revert"; /* Menu item to make the current document rich text */ "&Make Rich Text" = "&Make Rich Text"; /* Name of new, untitled document */ "UNTITLED" = "UNTITLED"; /* Menu item to cause text to be laid out to the size of the currently selected page type */ "&Wrap to Page" = "&Wrap to Page"; /* Title of save and alert panels when saving RTFD */ "Save RTFD" = "Save RTFD"; /* Message confirming revert of specified document name. */ "Revert to saved version of %@?" = "Revert to saved version of %@?"; /* Title of save and alert panels when saving RTF */ "Save RTF" = "Save RTF"; /* Question asked of user when he/she tries to close a window containing an unsaved document. */ "Document has been edited. Save?" = "Document has been edited. Save?"; /* Message indicating file couldn't be reverted. */ "Couldn't revert to saved version of %@." = "Couldn't revert to saved version of %@."; /* Menu item to cause text to be laid out to size of the window */ "&Wrap to Window" = "&Wrap to Window"; /* Title of save and alert panels when saving plain text */ "Save Plain Text" = "Save Plain Text"; /* Encoding popup entry indicating default encoding */ "Default" = "Default"; /* Title of alert indicating file couldn't be opened */ "File system error" = "File system error"; /* Button choice which allows the user to save the document. */ "Save" = "Save"; /* Message indicating document couldn't be saved under the given name. */ "Couldn't save document as %@." = "Couldn't save document as %@."; /* Message indicating file couldn't be opened. */ "Couldn't open file %@." = "Couldn't open file %@."; /* Button choice allowing user to cancel. */ "Cancel" = "Cancel"; /* Menu item to disallow hyphenation in the document */ "Disallow &Hyphenation" = "Disallow &Hyphenation"; /* Menu item to allow hyphenation in the document */ "Allow &Hyphenation" = "Allow &Hyphenation"; /* Title of alert confirming Make Plain Text */ "Make Plain Text" = "Make Plain Text"; /* Contents of alert panel informing user that the file's string encoding needs to be changed */ "Document can no longer be saved using its original %@ encoding. Please choose another encoding (%@ is one possibility)." = "Document can no longer be saved using its original %@ encoding. Please choose another encoding (%@ is one possibility)."; /* Message confirming Make Plain Text */ "Convert document to plain text? This will lose fonts, colors, and other text attribute settings." = "Convert document to plain text? This will lose fonts, colors, and other text attribute settings."; /* Menu item to make the current document plain text */ "&Make Plain Text" = "&Make Plain Text"; /* Title of alert confirming revert */ "Revert" = "Revert"; /* Button allowing user to abort opening multiple files after one couldn't be opened */ "Abort" = "Abort"; /* OK. */ "OK" = "OK"; /* Title of alert panel which comes when the user tries to quit or close a window containing an unsaved document. */ "Close" = "Close"; /* Version string. %s is replaced by the version number. */ "Release 4 (v%s)" = "Release 4 (v%s)"; /* Button choice allowing user to cancel. */ "Cancel" = "Cancel"; /* Title of alert panel which comes up when user chooses Quit and there are unsaved documents. */ "Quit" = "Quit"; /* Message in the alert panel which comes up when user chooses Quit and there are unsaved documents. */ "You have unsaved documents." = "You have unsaved documents."; /* Choice (on a button) given to user which allows him/her to review all unsaved documents if he/she quits the application without saving them all first. */ "Review Unsaved" = "Review Unsaved"; /* Choice (on a button) given to user which allows him/her to quit the application even though there are unsaved documents. */ "Quit Anyway" = "Quit Anyway"; textedit.app-4.0+20061029/English.lproj/Edit.gorm/0000755000000000000000000000000010521104636017727 5ustar rootroottextedit.app-4.0+20061029/English.lproj/Edit.gorm/data.classes0000644000000000000000000001013207747541557022243 0ustar rootroot{ Controller = { Actions = ( "createNew:", "open:", "saveAll:", "showInfoPanel:" ); Outlets = ( ); Super = NSObject; }; FirstResponder = { Actions = ( "addFontTrait:", "activateContextHelpMode:", "alignCenter:", "alignJustified:", "alignLeft:", "alignRight:", "arrangeInFront:", "cancel:", "capitalizeWord:", "changeColor:", "changeFont:", "checkSpelling:", "close:", "complete:", "copy:", "copyFont:", "copyRuler:", "cut:", "delete:", "deleteBackward:", "deleteForward:", "deleteToBeginningOfLine:", "deleteToBeginningOfParagraph:", "deleteToEndOfLine:", "deleteToEndOfParagraph:", "deleteToMark:", "deleteWordBackward:", "deleteWordForward:", "deminiaturize:", "deselectAll:", "enterSelection:", "fax:", "findNext:", "findPrevious:", "hide:", "hideOtherApplications:", "indent:", "jumpToSelection:", "loosenKerning:", "lowerBaseline:", "lowercaseWord:", "makeKeyAndOrderFront:", "miniaturize:", "miniaturizeAll:", "moveBackward:", "moveBackwardAndModifySelection:", "moveDown:", "moveDownAndModifySelection:", "moveForward:", "moveForwardAndModifySelection:", "moveLeft:", "moveRight:", "moveToBeginningOfDocument:", "moveToBeginningOfLine:", "moveToBeginningOfParagraph:", "moveToEndOfDocument:", "moveToEndOfLine:", "moveToEndOfParagraph:", "moveUp:", "moveUpAndModifySelection:", "moveWordBackward:", "moveWordBackwardAndModifySelection:", "moveWordForward:", "moveWordForwardAndModifySelection:", "oderFrontFindPanel:", "ok:", "open:", "orderBack:", "orderFront:", "orderFrontColorPanel:", "orderFrontDataLinkPanel:", "orderFrontFindPanel:", "orderFrontFontPanel:", "orderFrontHelpPanel:", "orderFrontStandardAboutPanel:", "orderFrontStandardInfoPanel:", "orderOut:", "pageDown:", "pageUp:", "paste:", "pasteAsPlainText:", "pasteAsRichText:", "pasteFont:", "pasteRuler:", "performClose:", "performMiniaturize:", "performZoom:", "print:", "printDocument:", "raiseBaseline:", "revert:", "runPageLayout:", "runToolbarCustomizationPalette:", "save:", "saveAs:", "saveTo:", "scrollLineDown:", "scrollLineUp:", "scrollPageDown:", "scrollPageUp:", "scrollViaScroller:", "selectAll:", "selectLine:", "selectNextKeyView:", "selectParagraph:", "selectPreviousKeyView:", "selectText:", "selectText:", "selectToMark:", "selectWord:", "showContextHelp:", "showGuessPanel:", "showHelp:", "showWindow:", "stop:", "subscript:", "superscript:", "swapWithMark:", "takeDoubleValueFrom:", "takeFloatValueFrom:", "takeIntValueFrom:", "takeObjectValueFrom:", "takeStringValueFrom:", "terminate:", "tightenKerning:", "toggle:", "toggleContinuousSpellChecking:", "toggleHyphenation:", "togglePageBreaks:", "toggleRich:", "toggleRuler:", "toggleToolbarShown:", "toggleTraditionalCharacterShape:", "transpose:", "transposeWords:", "turnOffKerning:", "turnOffLigatures:", "underline:", "unhide:", "unhideAllApplications:", "unscript:", "uppercaseWord:", "useAllLigatures:", "useStandardKerning:", "useStandardLigatures:", "yank:", "zoom:" ); Super = NSObject; }; Preferences = { Actions = ( "changePlainTextFont:", "changeRichTextFont:", "miscChanged:", "ok:", "revert:", "revertToDefault:", "showPanel:" ); Outlets = ( deleteBackupMatrix, plainTextEncodingPopup, plainTextFontNameField, richTextFontNameField, richTextMatrix, saveFilesWritableButton, showPageBreaksButton, windowHeightField, windowWidthField ); Super = NSObject; }; }textedit.app-4.0+20061029/English.lproj/Edit.gorm/objects.gorm0000644000000000000000000005736307747541557022313 0ustar rootrootGNUstep archive00002905:0000000e:00000352:00000031:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%GSCustomClassMap0&0& %  MenuItem14001 NSMenuItem0& % Colors...0&%C&&%0 1NSImage0 &%common_2DCheckMark0 0 & % common_2DDash2 orderFrontColorPanel:v12@0:4@8%0 & %  MenuItem14100& % Copy Font0&%3&&% 2 copyFont:v12@0:4@8%0& %  MenuItem14200& % Paste Font0&%4&&% 2 pasteFont:v12@0:4@8%0& %  MenuItem7000&%Services0&&&% 2submenuAction:%01NSMenu01 NSMutableArray1 NSArray&00&%TextEdit0 &  00&%Info0 &&&% %0!0" &0#0$& % Info Panel...0%&&&% 2 infoPanel:@12@0:4@8%0&0'&%Preferences...0(&&&% %0)0*&%Help...0+&%?&&% 2 showHelp:v12@0:4@8%0,0-&%Document0.&&&% %0/-00 &0102&%Open...03&%o&&% 2 open:@12@0:4@8%0405&%New06&%n&&% 2new:%0708&%Save...09&%s&&% 2  save:@12@0:4@8%0:0;& % Save As...0<&%S&&% 2  saveAs:@12@0:4@8%0=0>& % Save To...0?&&&% 2 saveTo:%0@0A&%Save All0B&&&% 2  saveAll:@12@0:4@8%0C0D&%Revert To Saved0E&%u&&% 2  revert:v12@0:4@8%0F0G&%Close0H&&&% 2 performClose:v12@0:4@8%0I0J&%Edit0K&&&% %0LJ0M &0N0O&%Cut0P&%x&&% 2 cut:@12@0:4@8%0Q0R&%Copy0S&%c&&% 2 copy:@12@0:4@8%0T0U&%Paste0V&%v&&% 2 paste:@12@0:4@8%0W0X&%Delete0Y&&&% 2 delete:@12@0:4@8%0Z0[&%Find0\&&&% %0][0^ &0_0`& % Find Panel...0a&%f&&% %0b0c& % Find Next0d&%g&&% %0e0f& % Find Previous0g&%d&&% %0h0i&%Enter Selection0j&%e&&% %0k0l&%Jump To Selection0m&%j&&% %L0n0o& % Spelling...0p&%:&&% 2 showGuessPanel:v12@0:4@8%0q0r&%Check Spelling0s&%;&&% 2 checkSpelling:v12@0:4@8%0t0u& % Select All0v&%a&&% 2 selectAll:v12@0:4@8%0w0x&%Format0y&&&% %0zx0{ &0|0}&%Font0~&&&% %0}0 &  00& % Font Panel...0&%t&&% %00&%Bold0&%b&&% %00&%Italic0&%i&&% %00& % Underline0&&&% 2 underline:v12@0:4@8%00&%Kern0&&&% %00 &00& % Use Standard0&&&% 2 useStandardKerning:v12@0:4@8%00&%Use None0&&&% 2 turnOffKerning:v12@0:4@8%00&%Tighten0&&&% 2 tightenKerning:v12@0:4@8%00&%Loosen0&&&% 2 loosenKerning:v12@0:4@8%00&%Ligature0&&&% %00 &00& % Use Standard0&&&% 2 useStandardLigatures:v12@0:4@8%00&%Use None0&&&% 2 turnOffLigatures:v12@0:4@8%00&%Use All0&&&% 2 useAllLigatures:v12@0:4@8%00&%Baseline0&&&% %00 &00& % Use Standard0&&&% 2 unscript:v12@0:4@8%00& % Superscript0&&&% 2 superscript:v12@0:4@8%00& % Subscript0&&&% 2 subscript:v12@0:4@8%00&%Raise0&&&% 2! raiseBaseline:v12@0:4@8%00&%Lower0&&&% 2" lowerBaseline:v12@0:4@8%z00&%Text0±&&&% %0ñ0ı &0ű0Ʊ& % Align Left0DZ&&&% 2# alignLeft:v12@0:4@8%0ȱ0ɱ&%Center0ʱ&&&% 2$ alignCenter:v12@0:4@8%0˱0̱& % Align Right0ͱ&&&% 2% alignRight:v12@0:4@8%0α0ϱ& % Show Ruler0б&&&% 2& toggleRuler:v12@0:4@8%0ѱ0ұ& % Copy Ruler0ӱ&%1&&% 2' copyRuler:v12@0:4@8%0Ա0ձ& % Paste Ruler0ֱ&%2&&% 2( pasteRuler:v12@0:4@8%z0ױ0ر&%Make Rich Text0ٱ&%R&&% %0ڱ0۱& % Wrap to Page0ܱ&&&% %0ݱ0ޱ&%Allow Hyphenation0߱&&&% %00&%Page Layout...0&%P&&% 2) runPageLayout:v12@0:4@8%00&%Windows0&&&% %00 &00&%Arrange in Front0&&&% 2* arrangeInFront:v12@0:4@8%00&%Miniaturize Window0&%m&&% 2+ performMiniaturize:v12@0:4@8%00& % Close Window0&%w&&% %00&%Print...0&%p&&% 2, printDocument:v12@0:4@8%00&%Hide0&%h&&% 2- hide:v12@0:4@8%00&%Quit0&%q&&% 2. terminate:v12@0:4@8%0& %  MenuItem1430& %  MenuItem710& %  MenuItem1440& %  MenuItem720& %  MenuItem1450& %  MenuItem73PP& % Align LeftP&%{&&% #%P& %  MenuItem146P& %  MenuItem74PP&%CenterP&%-&&% $%P& %  MenuItem147P & %  MenuItem75P P & % Align RightP &%}&&% %%P & %  MenuItem148P& %  MenuItem76PP& % Show RulerP&%r&&% &%P& %  MenuItem149P& %  MenuItem77PP& % Copy RulerP&%1&&% '%P& %  MenuItem78PP& % Paste RulerP&%2&&% (%P& %  MenuItem79P& %  MenuItem100P& %  MenuItem101P& %  MenuItem30ZP& %  MenuItem102P & %  MenuItem31_P!& %  MenuItem103P"& %  MenuItem104P#& %  MenuItem32bP$& %  MenuItem105P%P&&%JustifyP'&&&% 2/ alignJustified:v12@0:4@8%P(& %  MenuItem33eP)& %  MenuItem106,P*& %  MenuItem34hP+& %  MenuItem107IP,& %  MenuItem35kP-& %  MenuItem108wP.& %  MenuItem36nP/& %  MenuItem109P0P1&%BoldP2&%b&&% 20 addFontTrait:v12@0:4@8%P3& %  MenuItem37qP4& %  MenuItem38P5& %  MenuItem39P6& %  MenuItem150P7& %  MenuItem151P8& %  MenuItem80P9& %  MenuItem152P:& %  MenuItem81P;& %  MenuItem153P<& %  MenuItem82P=& %  MenuItem154P>& %  MenuItem83P?& % NSVisibleP@ &PA& %  MenuItem84PB& %  MenuItem85PC& %  MenuItem86PD& %  MenuItem87PE& %  MenuItem88PF& %  MenuItem89PG& %  MenuItem110PHPI&%ItalicPJ&%i&&% 0%PK& %  MenuItem111PLPM& % UnderlinePN&&&% %PO& %  MenuItem112PPPQ& % SuperscriptPR&&&% %PS& %  MenuItem40PT& %  MenuItem113PUPV& % SubscriptPW&&&%  %PX& %  MenuItem41PYPZ& % Font Panel...P[&%t&&% 21 orderFrontFontPanel:v12@0:4@8%P\& %  MenuItem114P]P^&%UnscriptP_&&&% %P`& %  MenuItem42PaPb&%BoldPc&%b&&% 0%Pd& %  MenuItem115PePf& % Copy FontPg&%3&&% %Ph& %  MenuItem43PiPj&%ItalicPk&%i&&% 0%Pl& %  MenuItem116PmPn& % Paste FontPo&%4&&% %Pp& %  MenuItem44PqPr& % UnderlinePs&&&% %Pt& %  MenuItem117Pu& %  MenuItem45PvPw& % Colors...Px&%C&&% %Py& %  MenuItem118PzP{& % Font Panel...P|&%t&&% 1%P}& %  MenuItem46P~& %  MenuItem119PP&%BoldP&%b&&% 0%P& %  MenuItem47P& %  MenuItem48PP& % Copy FontP&%3&&% %P& %  MenuItem49PP& % Paste FontP&%4&&% %P& % FontManagerP1 GSNibItemP& % NSFontManager  &P&%NSMenuP& %  GormNSMenu1/P& %  MenuItem90P& %  GormNSMenu2LP& %  MenuItem91P& %  GormNSMenu3zP& %  MenuItem92P& %  GormNSMenu4P& %  MenuItem93P& %  GormNSMenu5P& %  MenuItem94P& %  GormNSMenu6]P& %  MenuItem95P& %  GormNSMenu7PP&%FontP &  YaiqPP&%KernP&&&% %PP &PP& % Use DefaultP&&&% %PP&%Use NoneP&&&% %PP&%TightenP&&&% %PP&%LoosenP&&&% %PP&%LigatureP&&&% %PP &PP& % Use DefaultP&&&% %PP&%Use NoneP&&&% %PP&%Use AllP&&&% %PP&%BaselineP&&&% %PP± &PñPı& % Use DefaultPű&&&% %PƱPDZ& % SuperscriptPȱ&&&% %PɱPʱ& % SubscriptP˱&&&%  %P̱Pͱ&%RaisePα&&&% !%PϱPб&%LowerPѱ&&&% "%vPұ& %  MenuItem96Pӱ& %  GormNSMenu8PԱ& %  MenuItem97Pձ& %  GormNSMenu9Pֱ& % ControllerPױ   &Pر& %  MenuItem98Pٱ& %  MenuItem99Pڱ& %  MenuItem120P۱Pܱ&%ItalicPݱ&%i&&% 0%Pޱ& %  MenuItem121P߱P& % UnderlineP&&&% %P& %  MenuItem122PP& % SuperscriptP&&&% %P& %  MenuItem50P& %  MenuItem123PP& % SubscriptP&&&%  %P& %  MenuItem51P& %  MenuItem124PP&%UnscriptP&&&% %P& %  MenuItem52P& %  MenuItem125PP& % Copy FontP&%3&&% %P& %  MenuItem53P& %  MenuItem126PP& % Paste FontP&%4&&% %P& %  MenuItem54P& %  MenuItem127P& %  MenuItem55P& %  MenuItem56P& %  MenuItem128P& %  MenuItem57P& %  MenuItem129P& %  MenuItem58P& % PreferencesP   &P& %  MenuItem59P& %  MenuItem10:P& %  MenuItem11=P& %  MenuItem12@P& %  MenuItem13CP & %  MenuItem14FP & %  MenuItem15IP & %  MenuItem16NP &%NSOwnerP & % NSApplicationP& %  GormNSMenu10P& %  MenuItem17QP& %  GormNSMenu11PP&%TextP &% P& %  MenuItem18TP& %  GormNSMenu12PP&%FontP &  PP& % Font Panel...P&%t&&% 1%0HLPU]emP& %  MenuItem19tP& %  GormNSMenu13PP&%FontP &  zP!& %  GormNSMenu14P"& %  GormNSMenu15P#& %  GormNSMenu16P$& %  GormNSMenu17P%& %  GormNSMenu18P&& %  MenuItem130P'& %  MenuItem131P(& %  MenuItem132P)& %  MenuItem60P*& %  MenuItem133P+& % GormNSMenu!P,& %  MenuItem61P-& %  MenuItem134P.& %  MenuItem62P/& %  MenuItem135P0& %  MenuItem63P1& %  MenuItem136P2& %  MenuItem64P3& %  MenuItem137P4& %  MenuItem65,P5& %  MenuItem138P6& %  MenuItem66IP7& %  MenuItem139P8& %  MenuItem67wP9& %  MenuItem68P:& %  MenuItem69P;&%MenuItemP<& %  MenuItem1P=& %  MenuItem2P>& %  MenuItem20wP?& %  MenuItem21|P@& %  MenuItem3#PA& %  MenuItem22PB& %  MenuItem4&PC& %  MenuItem5)PD& %  MenuItem23PE& %  MenuItem6,PF& %  MenuItem24PG& %  MenuItem71PH& %  MenuItem25PI& %  MenuItem84PJ& %  MenuItem26PK& %  MenuItem97PL& %  MenuItem27PM& %  MenuItem28PN& %  MenuItem29WPO &PP1 NSNibConnectorPQ&%NSOwnerPR ;PS <PT =PU +=PV @+PW B+PX C+PY EPZ EP[ GP\ IP] KP^ P_ P` Pa Pb  Pc 6Pd 6Pe  Pf Pg Ph Pi >Pj >Pk DPl FPm FPn HPo JPp LPq MPr MPs NPt1 NSNibControlConnectorNPu&%NSFirstPv&%delete:Pw Px Py  Pz #P{ (P| *P} ,P~ .P 3P 4P 5P SP XP `P hP pP P P P P ӐP ӐP ӐP ӐP P P ՐP ՐP ՐP P P )P ,P .P 0P 2P uP :P P P  P P P P QP1NSNibOutletConnectorQP&%delegateP QP BP& %  showPanel:P GP&%open:P IP& % createNew:P P&%saveAll:P @P&%showInfoPanel:P ;QP&%hide:P CuP& % showHelp:P KuP&%save:P uP&%saveAs:P uP&%saveTo:P uP&%revert:P  uP& % performClose:P  uP&%cut:P uP±&%copy:Pñ uPı&%paste:Pű  uPƱ&%orderFrontFindPanel:PDZ #uPȱ& % findNext:Pɱ (uPʱ& % findPrevious:P˱ *uP̱&%enterSelection:Pͱ ,uPα&%jumpToSelection:Pϱ DuPб&%runPageLayout:Pѱ .uPұ&%showGuessPanel:Pӱ 3uPԱ&%checkSpelling:Pձ uPֱ& % selectAll:Pױ puPر& % underline:Pٱ uPڱ&%useStandardKerning:P۱ uPܱ&%turnOffKerning:Pݱ uPޱ&%tightenKerning:P߱ uP&%loosenKerning:P uP&%useStandardLigatures:P uP&%turnOffLigatures:P uP&%useAllLigatures:P )uP& % unscript:P ,uP& % superscript:P .uP& % subscript:P 0uP&%raiseBaseline:P 2uP&%lowerBaseline:P uuP&%orderFrontColorPanel:P uP& % copyFont:P uP& % pasteFont:P !P "P !uP& % alignLeft:P "uP& % alignCenter:P $P $uP&%alignJustified:P  uP& % alignRight:P uP& % toggleRuler:P uP& % copyRuler:P uP& % pasteRuler:P 4uP & % toggleRich:P 5uP &%togglePageBreaks:P SuP &%toggleHyphenation:P HuP&%arrangeInFront:P JuP&%performMiniaturize:P LuP :uP&%printDocument:P <uP& % terminate:P AP /P GP KP OP TP \P dP lP yP! ~P" P# P$ P% P& P' P( P) tP* !tP+ !P, !P- !P. &!P/ '!P0 (!P1 ?P2 "?P3 *"P4 -"P5 /"P6 1"P7 3"P8 5"P9 7"P: "P; "P< "P= #3P> #P? #P@ #PA #PB $5PC $PD  $PE $PF %7PG 6%PH 7%PI 9%PJ ;%PK =%PL PM& % FontManagerQPN *MPO&%orderFrontFontPanel:PP -MPQ& % addFontTrait:PR /MQtextedit.app-4.0+20061029/English.lproj/EncodingAccessory.gorm/0000755000000000000000000000000010521104636022444 5ustar rootroottextedit.app-4.0+20061029/English.lproj/EncodingAccessory.gorm/data.classes0000644000000000000000000000252210506737274024752 0ustar rootroot{ "## Comment" = "Do NOT change this file, Gorm maintains it"; Controller = { Actions = ( "createNew:", "open:", "saveAll:", "showInfoPanel:" ); Outlets = ( ); Super = NSObject; }; Document = { Outlets = ( encodingAccessory, encodingPopupButton, hasMultiplePagesField, numberOfPagesField, pageLayoutAccessory ); Super = NSObject; }; FirstResponder = { Actions = ( "enterSelection:", "findNext:", "findPrevious:", "jumpToSelection:", "oderFrontFindPanel:", "orderFrontFindPanel:", "printDocument:", "revert:", "save:", "saveAs:", "saveTo:", "toggleHyphenation:", "togglePageBreaks:", "toggleRich:" ); Super = NSObject; }; NSResponder = { Actions = ( "deselectAll:", "selectAll:", "selectText:" ); Super = NSObject; }; Preferences = { Actions = ( "changePlainTextFont:", "changeRichTextFont:", "miscChanged:", "ok:", "revert:", "revertToDefault:", "showPanel:" ); Outlets = ( deleteBackupMatrix, plainTextEncodingPopup, plainTextFontNameField, richTextFontNameField, richTextMatrix, saveFilesWritableButton, showPageBreaksButton, windowHeightField, windowWidthField ); Super = NSObject; }; }textedit.app-4.0+20061029/English.lproj/EncodingAccessory.gorm/data.info0000644000000000000000000000027010506737274024246 0ustar rootrootGNUstep archive00002bc0:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamtextedit.app-4.0+20061029/English.lproj/EncodingAccessory.gorm/objects.gorm0000644000000000000000000000436110506737274025004 0ustar rootrootGNUstep archive00002bc0:00000020:00000037:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&%Document0&%GSCustomClassMap0&0&%Window01GSWindowTemplate1GSClassSwapper0 &%NSWindow1NSWindow1 NSResponder%  C C5&% C D^@0 1 NSView%  C C5  C C5&0 1 NSMutableArray1 NSArray&0 1 NSBox% A B C BH  C BH&0 &0 % @ @ C A  C A&0 &01 NSPopUpButton1NSButton1 NSControl% A A C A  C A&*0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont%0& %  DejaVuSans A@A@&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%Item 10&&&%01NSImage0& % common_Nibble%%0&0&&&&%%%%%0 1NSTextFieldCell0!&%Plain Text Encoding&&&&&&&&0%0"1NSColor0#&%NSNamedColorSpace0$&%System0%& % controlColor0&#0'&%System0(& % textColor %%"0)&%Window0*&%Dummy* @ ? F@ F@%&   D D@0+& % PopUpButton0,&% Box1 0-&%MenuItem0. &0/1NSNibConnector00+011NSNibOutletConnector+02&%encodingPopupButton03,04-05,06&%encodingAccessory071 GSMutableSet1 NSMutableSet1 NSSet&textedit.app-4.0+20061029/English.lproj/FindPanel.gorm/0000755000000000000000000000000010521104636020702 5ustar rootroottextedit.app-4.0+20061029/English.lproj/FindPanel.gorm/data.classes0000644000000000000000000000076610506737274023220 0ustar rootroot{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "ignoreCase:" ); Super = NSObject; }; TextFinder = { Actions = ( "findNext:", "findNextAndOrderFindPanelOut:", "findPrevious:", "replace:", "replaceAll:", "replaceAndFind:" ); Outlets = ( findNextButton, findTextField, ignoreCaseButton, replaceAllScopeMatrix, replaceTextField, statusField ); Super = NSObject; }; }textedit.app-4.0+20061029/English.lproj/FindPanel.gorm/data.info0000644000000000000000000000027010506737274022504 0ustar rootrootGNUstep archive00002b5d:00000003:00000003:00000000:01GormFilePrefsManager1NSObject% 01NSString&%Latest Version0& % Typed Streamtextedit.app-4.0+20061029/English.lproj/FindPanel.gorm/objects.gorm0000644000000000000000000002075310506737274023245 0ustar rootrootGNUstep archive00002b5d:0000001f:000000f2:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0& % TextFinder0&% Button501NSButton1 NSControl1NSView1 NSResponder% A Ap B A  B A&01 NSMutableArray1 NSArray&%01 NSButtonCell1 NSActionCell1NSCell0 & % Ignore Case0 1NSImage0 1NSMutableString&% common_SwitchOff0 1NSFont%0 & % Helvetica A@A@&&&&&&&&%0&0&00&% common_SwitchOn&&&0& % TextField01 NSTextField% B C C A  C A&0% B B C A  C A&0 &%01NSTextFieldCell0&0%0& %  DejaVuSans A@A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0 % C A B$ A  B$ A&0!% C A B A  B A& 0"% C( A B A  B A&!0#% B A B| A  B| A&"0$% A A B A  B A&#0% &%0& 0'& % Replace All&&&&&&&&%0(&0)&&&&0* &%0+ 0,&%Replace&&&&&&&&%0-&0.&&&&0/ &%00 01&%Replace & Find&&&&&&&&%02&03&&&&04 &%05 06&%Previous&&&&&&&&%07&08&&&&09 &%0: 0;&%Next&&&&&&&&%0<&0=&&&&0> &%0?0@&&&&&&&&&0%0A0B&%System0C&%textBackgroundColor0DB0E& % textColor0F&% Button60G% A A B A  B A&0H &%0I 0J& % Ignore Case &&&&&&&&%0K&0L&&&&0M&%Button$0N&%GSCustomClassMap0O&0P& % GormNSWindow0Q&%NSPanel0R&%Window0S&%NSPanel0T&%Box0U1NSBox% B B  C B|  C B|&0V &0W% @ @ C B(  C B(&0X &0Y1NSMatrix% A  B B(  B B(&0Z &%0[ 0\&&&&&&&&&%% B A 0]0^&%System0_&%controlBackgroundColor]0`& % NSButtonCell0a 0b&%Radio0c0d&% common_RadioOff &&&&&&&&%0e&0f&0g0h&% common_RadioOn&&&%%0i &0j 0k& % Entire Filec&&&&&&&&%*efg&&&0l 0m& % Selectionc&&&&&&&&%+efg&&&j0n0o&%"Replace All" Scope&&&&&&&&0%0p0q&%System0r&%windowBackgroundColor0s0t&%System0u& % textColor %%0v&% Matrix1Y0w& %  TextField10x&%Matrix0y% A A B B  B B&0z &%0{ 0|& &&&&&&&&%% B A 0}0~&%System0&%controlBackgroundColor}0& % NSButtonCell0 0&%Radioc &&&&&&&&%0&0&g&&&%%0 &0 0& % Entire Filec &&&&&&&&%*g&&&0 0& % Selectionc &&&&&&&&%g&&&0&%Window01GSWindowTemplate1GSClassSwapperS1NSWindow%  C C!&% C D;0%  C C!  C C!&0 &  0% A C B A  B A&0 &%00&%Find:&&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor0% A B B A  B A&0 &%00& % Replace with:&&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor$!"# 0% A B  B B\  B B\&0 &%00&&&&&&&&&0%00&%NSCalibratedWhiteColorSpace ? ?0 ? ?U0% C B  C B|  C B|&0 &0% @ @ C B(  C B(&0 &G00& % Find Options&&&&&&&&0%p00&%System0& % textColor %%p0&%Window0& % Find Panel ? ? F@ F@%&   D D@0& %  TextField20&% Button1!0& %  TextField30& %  TextField40&% Button2"0&% Box10&% Button3#0&% Button4 0 &""01NSNibConnectorx001NSNibControlConnector0&%NSFirst0& % ignoreCase:000±w0ñ0ı0űM0Ʊ0DZ0ȱ0ɱ0ʱ01NSNibOutletConnector0̱&%delegate0ͱ0α&%initialFirstResponder0ϱM0б& % replaceAll:0ѱ0ұ&%replace:0ӱ0Ա&%replaceAndFind:0ձ0ֱ& % findPrevious:0ױ0ر& % findNext:0ٱ0ڱ&%findNextAndOrderFindPanelOut:0۱w0ܱ0ݱ& % statusField0ޱT0߱0F0v0F0& % ignoreCase:00&%findNextButton00& % findTextField0w0&%replaceTextField0v0&%replaceAllScopeMatrix0F0&%ignoreCaseButton01 GSMutableSet1 NSMutableSet1NSSet&textedit.app-4.0+20061029/English.lproj/Info.gorm/0000755000000000000000000000000010521104636017735 5ustar rootroottextedit.app-4.0+20061029/English.lproj/Info.gorm/Edit.tiff0000644000000000000000000002252210506737274021514 0ustar rootrootII*$P0@P0@PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0@@@PPPP0@P@P0PPPP0@@@P0P PPPP0@P@P0P P0PPPP0@@@P0P P0P PPPP0@P@P0P P0` P0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0@@@P0P P0P P0P PPPP0@P@P0P P0P0P0P @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0@@@P0P P0P P0P @ 0 PPPP0@P@P0P P0` P0P @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @0 @ 0 PPPP0@P@P0P P0P0P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @ 0 @ 0 @ PPPP0@P@P0P P0` P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @0 @ 0 @ PPPP0@P@P0P P0P0P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @ 0 @ 0 @ PPPPP0@P@P0P P0` P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @0 @ 0 @ @0PPPPP0@P@P0P P0P0P0P @ 0 @ 0 @ @0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠``@P0P P0P P0P @ 0 @ 0 @ @0PPPP`pP0P P0` P0P @ 0 @ 0 @ @0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP``P0P @0 @ 0 @ @0𠠐PPPPPPPp`А`p``@ 0 @ 0 @ @0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP`````@0`000 @ 0 @ @0PPPP`pАА`p`@@@ 000 @ @0 @ @0PPPPPPPPPPPPPPPPPPP𠠐`````@0@ 0 @ @0 `00 @0PPPPp``pP@0@ 000 @ 0P00P0@pPP``PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠``p``P@0@ 0 `0@P00@PP@pPPPPPPPPPPPPP`pАpp`PPP@00 000 `00pPPPPpPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠠠``p``PPP00@ P00@PpP@pPPPP`ppPP`000 @ 0P@0PPpPPPPPPPPPPPPPPPPPPPPPPPPP𠠠PPP@ 0 `00P@pPPPP P0@``PPPPPPPPPPPPPPPPPPP𠠠𠠠PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𐠠𠠠𠠠𠠠𐠠PPPP𠠠𠠠𠠐𠐠𠠠𠠠𠠐PPPP𐠠𠠠𠠠𠠠𐠠𠠠𠠠𠠠𐠠PPPP𠠠𠠠𠠐𠐠𠠠𠠠𠠐𠐠𠠠𠠠𠠐PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP00$   $$*%%%(1:%REdit.tiffHHImageMagick 5.5.7 06/10/03 Q16 http://www.imagemagick.orgtextedit.app-4.0+20061029/English.lproj/Info.gorm/EditTitle.tiff0000644000000000000000000004374610506737274022531 0ustar rootrootII*F P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU90BHm_yI  JK`]ol.K(,&^Na;J+]Unl#BLMy6#[,@B a~C:!S^6DI7lsLnN^rh6 |3Y<tA%p2/tvZ]NvR ȇI̳&y)h ;P<Ѝȧ/3` bꁟziΆY;9=, K#F()/C#E'#~8IF,~<Ӂ=OHQEeLx',\ՈN!ų}Aж 5c Ihف2@}%iJർw'}wHZ]R(a^yE}NJHF(^XIL :By,yȧ~L!2rǑXB%b鴁8`p->T(ytzPwriGգ":iPjjԲ+C z:1Q Xǖz gBX[`4 ;{p# i\nV `" ˛h"@ 7Phl}1tEB ڻz-;y DMu ) Yʐ*rGs&@>zڇy8*,W: 0A@0mFaڇI9Ff0!spd .]RFJ (HC(#Q@qedzǬ#r9\c@H;'sZ @3}   @QÇ- -$ζX(`.Q*8|CDMq e#6f@6x( QQWfc;ܴ/ e#Æ]uf[{]lM6Qd@ nwYH%1`|80-QֈE1>$TXLXxg2o4:@*@z;X=`1dqn$_[ '5ՍEEhB7p}Gƕ0Y]JD_8?l+5c<O$`~!rlܠ @ B@ adQ!4n bae"FTb`X:o!!Ir|4Aʢ_K4NHJHHe&aP@TW6 `J0gǂLD nJ ] BZg R P0 h$OV 6e,I` oQV I|(6iDF#d` :@OJjpAtaHUh^Iz jxb♁擡hऄ2"!&"(!tmJ4h~" oT-8H&1r xH0:OH%F q ,SI ́GAG. ANzI`.aN't$%+!HN>zhF_Ia ay(,ЊbaLD&WƠG BIa]N%iBb "2¡|nAā<Ư"M@d74 NIt QZ("^ĵ<5mAȞE&RP!@:@N7M8K*ҰҴIr ,]_R-r*bl @@֧T]\mA,HLR !$ 8 [p$1>H0/ ]:Ts 8L*^I`"A "E!XŶHH-*PX"aG̳@2#AƇ:5e3ZA5 B!& C, e#8Zq} :9Gb@l #V+ MN愁1!p`/TI`20I6(Hֆ,j!4EDMEUEEŧFFEFFʸr ͜DhhϮāa{_Mz8#m! /O/S/G0Id1 Q ` aށ.h/ā3D5 7] u(q!l$fah}VT \`Y"@\a *HHAA,L8chAQI:TB@x"zA`.L!z26W1"-+,.:@HlLpuom+ehC\s]]W]'^^_F'O!&5 [`VI2ֈTp/xl8w j5I)ǩ"6F,ԣlB<@`@i8HH `p7P ּ ` e!a}pBPN@\KbN:`4`a, ҬMĄi{``0w!.alhHAi:t=bB T#bLug3gah O!* N`4@@iV'BHD]Z# d QK2L(ԮP"tm85 8Dz{ g, I ;, 8`:p` k氩bsVbaZ!ܷ3;|̘w"}~~~eD0 re-89(dT#6Vragm_aǍb-m !FP{nĊHgTp`` @d9{`4!n 4@@b@H@<@@fod".0x`$L@5N" EI `|%qHO0֊!k#aM@IlABωgX a!Eɾ1GF hRz G#kw  0F %a`4p` |"im"^ "A/q ``, C 9, ;>Ӈ%G|ԠTdH9ӝyڜBYy 9IXVHfSxHVn"Oa8 b8G26 H05I`;I t H 4M+ {? "*W[<i nr(h?>aӢA3"/`NL$"REafBqHax)tL #)ǩd|C6ߺ ზ~ `I!Ae1Hht&O1 |< sn!l6*f> ӻ""t9t + `܌ ڼ$Ln#mfbopQǕB&pABoGk09p+dD"LHąf 8@v=$+d~" VR䅷HBā!vF̴C|P8Q r P. R# A C4iKZ#sJ\H[``pްI Qݥy!ꮮ#>BpP0&xsY[b]=@:@uNHY0N;/Jj9p 1:߳ׄ)hj >/KSQT`ISYXH ڥIam)\{sqP"ĢKu=pȋf0`n)H S5\UvTb@ MBNs]pm@-tx-[iH ɩ#Y}UWjC=X^DR%i{8.bȎ7 A?˓_&"8/ќ\Y,.^0ގI)H(4E&/+ЪԛmFv粞$~b:A\^ 1UI%nPp42J#*n % H,#Ȉ0R|*)zM'64GwGvROȷ@^Ц؉D/l+Y< 4(@oN'qRaU Nw"9gBRԪ` S[n}q`AL#'ifI^Hv% o 0* Pcr7dÂr1G%zM9֛ I,$_&o~X@ EVH4bs'`36&7ʒRlLJ#W6c:S=\h@f?v秅B hyiloQԉ^)qFVЂ ղ9jZUHŸɸā(ͨ ԣ"w/R/q@$=\jg:R{df1^vtF`4dke fekA}Ѻ;wchd+f'ӽ8 GN [h{'oa PA# _qNSdBc#FU{8aM8\0,0 0$`F##4ƍ 0 Z/3?,'h\E\6h0W CNi`( ;!^Qxv<d$Qi߰#tH/ &)xmFExVX0U5vu1N6@rU wPm-@<!|0+`.G:-B! @eCכäv,yGX!iiHݝ04P4-Uc? -)P+ A ^4p(4B$n P,gsY}@t8ZEn]fҕ Dj.1.'5بb]2ѕcbt;:ǘ gA@7%\6Wh$ kq ШڄlGJC^,C:FxXTYnaō7(h;Aƒk.X-E,xQyTF*.17*0QSH+|q#5 c6hkAPG`G =Ӑ6W05˃3@! G|1Cȡ,J cP5UaQ껤_/_6XBÕieb:uD yx_LdGHtJLKDDЋ9EQR@7T, 8xtq`(|rAdB S yH;X Pp)xo=.r8s؛;1D(HcuI\:+1`6G끘⨆HL%8CI[M@+PidM cӣ;2WMysPc8dh5QLPM :<'z!XШr 8wt8;V"(4 {0xz4Wb^Om(~*ueAihHJx5(قx5OȁvS,WHf8MHMYh|͙uMMM RI 5](}05q8[i3u )S0 _SPk(@zYyyW$14x m=@(T0{4u X0h/A-N9Մ$ɕ@i;LtPla2Hi1 qyjx"ΤS Lj|kFSc,FYaXZ55T SP_cPԈx+s(\3Kv7rk=m(j允[mX#JGubzB*7XsO@zQOXqWʗ9!s,BHkU bV5dVPfVuhThmp) ^3ֶ0wSZh^ZAq |N$# 㓍`PGe~ 9;hTx=`W3/ l|ؔX DhcMUqq#@ Q&/E-ZsJ(HD֕j^$Bxw1FI뭨vXBܝ(|8чDh@= P#Xm N~/fG((z)`mF`9+7:@ȭc̀#c,O|P5x)3ZިC`^\@!a{3, Rس8h H'ҍ)8@@q^aIi6n8H`zJ@T)=?s$sYJyqTQH)eUŘ&p(0z~$>aXt^-K9HFIA:+p ʚZAeW5cNeg'fh iWk &l R)2 0k\hyOx]3ㇵQ@%HZaPaφD P:"kʈ啎5HAPǞpD bgx-ig "k tsNPhIp}^%٤U #CӐ!:x{.iGR\t* kZXx)gP: ; 8g`m;g /Ika/,m!~{C0SGosУy,Hcժ !P!qz慡I ӠညYUܐ~ݛn6n.8eP6 /B8[+/5sq,q"C`l ԇ m+B詇z:e؁݊ 8aM ;,!LF1Kt`mt`K=9Ľ‹r+ `1hp }K8hmHoT`v;X 8$ ^9ׇ:)k v>nZ"Ti+mksXAcC4OWxb /,ȇ[+Y;  8xpݫ BZ+qZNt`"uRu0u@Pdug^upg# fffҙ΂x!U)"&#ކ$> m>)jnRo @J>Qcϑ)nǘi/ȫrpi:%:P6 yNh 9 8]DjM38}cJ1C c4 {'{P9/ G&RC`OxʛAWeۚ.{F߳%:cto٬wfM]8[̈́9#o凞Mf4KOTO3O)/\tKS_0󍿲 bQ5,ν* 7YLiKֺ'TܯcXm ]0L0ެݧH/iyn2=q(7vF{y@}^hpd$m Lt锗PaL4}0;\%B؛Elq@z頊zē cm.˩43>4-Jӵ1TL +;5gmG^[&yK(?%GK sH4`wT H h.X OTp"j*:mK#9+YUl'(]$}+*6|)=dqiRbfED`3 dHodi-^3`=CBY/"sXH@z-!:|K` @@ΝϘ%n. ,a 0ɵ281*q4k%4j2APfVِA2Bh GHe #o4_?/!ȅ|XæVp)+pl -J8sыUm1 |^ѶX%1P48EI_It8P_xPۅi* ~ Q?x@9/4h@8ߍS0<[;tLbH@:CiQ83qÄU@ \}1 %&tfL;\ wF5/77NX *%QDqi~ہFx Fa +@06%r BH̖XPtn02€N:elM%M[K/UFL6v*0;ˑJ9Y"+ Na2e6z@7x#Pew`o,0D_+aң\sq2l-KmY/j,}`3ј6>fKei.uit6&g9k<VX`HvED| 107Xku؂d^tG$ mAƤW!s $d:)!a@D,\ AY-A (;A#a2af0x/fcZBN #0q .3 0 fJ`8!846( c(n z;Oel A `zdAdRNifKg!>rB(v 4 `Fvtm"oF'R` nHa[w`<2a;;a]N`KJ ޸``@] PƦ*`{* a 0$'`8l+!͡VR(oz 1A!^2 q* +#a6} gd$q.g14Dw(3h3E4 9G`k)`F6g悵(BhP9gY) 2 ";AT</,H1 +#a*#`zФ=iM"9A%Ec@2-xY/\0V@ Q0x P4p4% @KAm@ !a 8a%"X#a"KA洁@ b;8R9..,@ ɠaF`$/%ACRQ2 $.(@AH3#֣+Hq>g !7@#a#as5GB 4 h=FIl"6"4>g66r>vqzV83 ӊͳ9"59m@:.) a-hX |@p( 0!h&j!hZ g#B8áDPF06( a~Q~IPz6cXF Y0Zi!Ҡrc4 eb6'A겶6! bau)`b146{(CDm x 9. "_%_gv 1@ *Y'D5`<.&dD(0FDJ5A6H=d6DklŖe!x >2``lQ2qz&DF6 U$K"H/\-.AhQ^`QSYJ3YEYZ('ZhZ[/[@[5[ҪK 54TظNgv;A/~\._wKוyzz{2A{mU,EdF`bp4x.5r.h ^LD `mzAASь$Twaw`8R8 qYdb!<,{@ #a:- .w`Ei¸G.BTΧsr>3ApR*.'-pQw eu y9 erAvҤT4ۋ4S!'W7^b3J:Erzס`B+22-4(Y$DT:3w`wɸv: Vy!yR9A0`HyXAZ9p F Z   %d qd@l+b,b 3N TC A PD@ `αz~('gj6'knQc"$`G6, e,vGgv<>aa-2c:x`t}d5<¾r!DU&Zd1H*RrA/) ͠1۽! %,;Cp*%Al\ D=yT<.`yp)Š".bR={V{Z^b2[f{jSR,6xC:Z_#mB#[q c1'!gZ(ZD q^ !^G V %A%|iS1v($B,{0r dzljHnoڠ6wa`,B@#:vfFt:0<Q0\9r6A`ʋ  FxDa+@"2b::0,Tb5 _KnHGbR ! 3'ˏ7 ؎ F?RA :O(#bX6H.n . mA@6$D6[!L+ѨKTyH``ńJ Y`ش$ т4QAx+n& l3fb5ȃ=ؽݖcݚ2]:}S9}jO'jUF!|#`ܥbQ+z.p"- \R83"7 ##w C3!@QN2ы#A=U%vb dD1Ú[D2AġO#~c&Fղ>e,* s@'~RE,kÀބͺ, "$DQ(39kfs4*DAG 87{a-:_l-{EqF8G߰ >>X,Y-5;wEzYEr͟Y+M Rԁ,,U|]`E(v鋽H}n@ Mey2 q%J#(޹8óh4(yWcj`umo g`FJ>?% 9O CKs۟͞x5^Jȃq%Ar0 ?iB̞{c拴r7'J#9PRCr+7B2  AM  ȤZD=AP !"8uƲ |򑼤4$@x /.H (4!:}(q,ܞCV  פ@ZD$@Q(LȀkПG;8zǍ:ZKBt$[7P)-  0+[gzrяA{r8R:Hg"'{Bqitm'gcʱ dnS@.p`}%s,)< ܞ-SGyHHBQ%f'g xf۵pYS* ȁ@2؃3@+4 @Ąm܁*S*'Мґ)cqˡ,gi` .1!4&jO~7'ʐ|7;:{DҊ Ÿ$ JL!P!!"DR,)ϿSxiIF >Rö6 ImWxiF\ɡg*f|0XYgO,؃LHETVNA$q## "B&iQG1#IHpr+2nd-28@clpg"ѸFd?r:5a%ב4Tzp轎5>kS@)H})ط>NAPjk̕2=c W?DMDzpz!B/2υy8Dzy (@lKv~ڏRWuHBҔ\Gk#kkw- 2[D3~7QL驶M5 dYaHu!UZۛϺ/E *%.6 hacr<dӮ@ץ9tTةdf1yjr# o\˖ni3j.6 &hmٻBr~Lܝ'P]Jl`~ȇ鹬5rkuL;d=s~hȺvdA ތpg;.49Gaiv^u|Q]~] h)p^Wa>bv%׼6G}i_o~= gs?7m.Gx\@@8G GG@FGG(=R/home/deek/Source/Backbone/System/Applications/TextEdit/EditTitle.tiffHHtextedit.app-4.0+20061029/English.lproj/Info.gorm/data.classes0000644000000000000000000000045710506737274022250 0ustar rootroot{ "## Comment" = "Do NOT change this file, Gorm maintains it"; Controller = { Actions = ( ); Outlets = ( infoPanel, versionField ); Super = NSObject; }; NSResponder = { Actions = ( "deselectAll:", "selectAll:", "selectText:" ); Super = NSObject; }; }textedit.app-4.0+20061029/English.lproj/Info.gorm/data.info0000644000000000000000000000027010506737274021537 0ustar rootrootGNUstep archive00002bc0:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamtextedit.app-4.0+20061029/English.lproj/Info.gorm/objects.gorm0000644000000000000000000015513510506737274022303 0ustar rootrootGNUstep archive00002bc0:00000021:0000005e:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&%NSOwner0& % Controller0&%GSCustomClassMap0&0& % ImageView01 NSImageView1 NSControl1NSView1 NSResponder% A B B B`  B B`&0 1 NSMutableArray1 NSArray&%0 1 NSImageCell1 NSCell0 1NSImage0 &%NSApplicationIcon0 1NSFont%0& % Helvetica A@A@&&&&&&&&%%% B@ B@0&%Box01NSBox% A C @  C @&0 &0% @ @ C   C &0 &01NSTextFieldCell1 NSActionCell0&%Box &&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0& % controlColor00&%System0& % textColor %%0& % TextField01 NSTextField% A B A@  B A@&0 &%0 0!& % Release 40"%0#& %  DejaVuSans AA&&&&&&&&0%0$0%&%System0&&%textBackgroundColor0'%0(& % textColor0)& %  TextField10*% B A Cy A@  Cy A@&0+ &%0,0-&*%*by Mike Ferris, Rick McGowan, and Ali Ozer"&&&&&&&&0%0.0/&%System00&%textBackgroundColor01/02& % textColor03& % GormNSWindow041GSWindowTemplate1GSClassSwapper05&%NSWindow1NSWindow%  C B&% C€ D@06%  C B  C B&07 &*08% @ @ C AP  C AP&09 &%0:0;&@%@Copyright 1995-1996 by NeXT Software, Inc. All Rights Reserved.";&&&&&&&&0%0<0=&%System0>&%textBackgroundColor0?=0@& % textColor0A% B B Cu B`  Cu B`&0B &%0C 0D Ch B`0E0F&%NSCalibratedWhiteColorSpace 0G &0H1NSBitmapImageRep1 NSImageRep0I&%NSDeviceRGBColorSpace Ch B`%%%80J1 NSDataMalloc1 NSDataStatic1NSData&˚˚II*===bVVV}JJJp <<<`PPPw000PLLLs___________________________________________________________________________________________________08___________________________________________________________________________________________________***I :PPPwMMMs***I .jjjEEEk"""=]]]KDDDi4LLLs` kOOO h+WWW~ڞ|||hhhlll‡"k... :::hhhêM#s" 20 ccc```]]]???* e3#XpppnX <(((F'---MJJJaaa  hO*(Rxxxzrqppqv mmmAAAkT 0777"""_) Z -xxx ###&&&&&&&&&%%%$$$###"""{ ?SSSz%%%A 0???000 &&&%%%###"""""""""""""""""""""###!!! 㑑###I+++###h) cccU!SSSz%%%A"""000///...---,,,,,,...***''''''((('''}}}mmm---((( BKKKq  xxx...***$$$  """$$$'''!!!###+++O'''..."""\   '''{ 6KKKq " ...222111///+++'''NNN777 222---%%%"""@@@!!!000((( 8>>>b& (((///&&&_RPQSW^iy"""///+++F888`\\\111+++IlllͿಲUUU+++ E>>>b&YYY +++111000+++%%%y000(((V CI]}///%%%j) ===bmmm UUU222+++S)!) 4 Ge=== 000((( 7111((( 7%222,,,H===bmmm'''$$$---...((( tO 4)))///###c+" :***---!!!VEEEk""" MMMs 111(((} 7  *jjj...%%%j) """///%%%h' P """333111))) ?EEEk""" www&&&+++&&&\ 5###ETTT222,,,JHHH+++))) B\\\NK,$$$///$$$e% >111+++!!!W0}}}///--- R 6x%%%---111222000,,,###i, \\\NK, c&&&$$$P(mmm 111(((~ 7 " %%%$$$u 1  }q =yyy000--- P111RJJJp ~ %%% Efff111 222*** ?K$$$)))***((("""w @ }q =W"""O$ $$$///$$$f'   ^#999]AAA """ =...N--- 222*** =ބ' gr 4000&&&r.  "Fld > 999]AAA """ =+cT&  rrr000--- Q#SH8```Ӏ 999]eee5 ddd媪!!!;(((F$$$666000u 2 xxx000&&&p, qqq:::uK 4h{W$ 999]JJJp***..."""[  )))GSSSz|||111k @ 9((((F$$$666000u 2  0avZ -PPPw"""222*** = Bmd 4```2111R]]]8 DDDia$+++..."""Z...N #HU 9555XKKKqTTT222+++ G*ZZZ DDDia$ (JN 2000&&&o,  -J A cccKKK|###|444U666h$$$@^^^yyy\"TTT222+++F$$$@C %, ((( 111(((| 5eee.yyy\%#,,,..."""X#222Y: 2bccc/}}} '''YYY 111((({ 4 NNNu]]]"0+  '''$$$///$$$e&))){NNN ''' 444UBBB 222+++ D{{{Z?$$$ 4hhh+++  \\\!;憆ކޅyyy#$$$///$$$d%###Bddd @V D ###V B Uttt000,,,PeHHH  E 6 1憆ކޅyyy#111'''x 3 4 BbW( }N#  Q'SSSQ 4ߜڡШγgsO qqqlz((( 222*** =JJJj 7 SSSQ 4'''///###a#CCCSk~TTTS"   9Sggg B[[[QQQ:::lllǨ㦦 I3BBB###[( 999]sJ"""$$$###000&&&o, yyyvvv(((''' BBBB###[( ,___111,,,L  $$$ ; % EaJJJg&&&WZZZ+++###d) 3444222000...***!!!g+ 캺ںٻ׽888!!!} =[[[]]])))***&&&w,,,..."""Y,,, 000((( ; 2444222000...***!!!g+ bbb111))) 9###$$$'''###(((,,,N , ?Viii ...///%%%n/999s'''222///+++(((%%%S  nnn'''###p/ 2***...)))`EEE}KKK222+++ E 000&&&o, 888s'''222///+++(((%%%S !!!000%%%i( ``` )))+++'''ppp..."""W%JJJ}}}pQ&&&,,,///000111222111---###c)~~~eee222...'''tX 00;;; !!!+++!!!]!sss000,,,"""h 2zzz111(((z 3 IIIq)))..."""Y ~~~eee222...'''tX 0 {{{///--- T0///%%%///+++ 222~///...!!!T ({ D{"""&&&&&&'''(((***++++++%%% G 222***] ? 2$ddd333///((( 999___///+++IDDDi000///'''~ >%%%///###c$RRR222+++F222***] ? 2$EEEk... 222*** @111...%%%y 222,,, Gddd ;i }u|wO% * 000%%%o 2 (((222...)))$$$""""""###&&&$$$000((( 7111,,, U!9mmm000,,,N 111((({ 4 ' 000%%%o 2 000'''r/ 444U]]])))000)))!!! 333000'''z 5QQQ^asP 80 4 = D B 4  ]]]......!!!U___222///(((!!!### ///$$$h( MMMsJJJ...///&&&v 5xxx111))) ;)))G$$$///$$$d%]]]......!!!U+++..."""\  222...222qqq 222222,,, X!'~m B   >>> 222*** AEEEk222***dJ C D HQc၁+++,,, S222,,,S 000%%%l* ssssss111,,,O>>> 222*** A(((FLLL222+++ G"""=!!!888|||111222...%%%u 7 LLL&&&"""vF 111'''u 0 !!!000%%%o 4)777)))((( @)))G$$$111(((| 7IIIp---...!!!V''' 222))) <111'''u 0 ttt111(((| 5~~~ؒ111222...''' Hrrr+++&&&W& >>>b(((///###^!...--- S > """"""p/ VVV222---"""\"BBB 222+++ C 000&&&n+ >>>b(((///###^!%%%///$$$d%絵555 &&&000111...'''R# ,,,T!!!&&&x 8bbb111,,,J%%%A;;; 222*** ? xW  222*** B999^111'''w 1 RRRy+++..."""Xbbb111,,,Jiii111,,,O%BBB222(((...///,,,%%%R' @@@$$$c% 111))) 8ppp000'''s/ , Fvt B4---K7###000%%%m, '''///###`#LLL222+++ D111))) 8WWW~222))) ;KKKq eb&&&+++,,,(((!!!vI$ ###`"7 ///%%%h( (((///###]! :aZ/(RRRy000--- TJJJrddd111,,,K111(((y 3 7 ///%%%h( 000&&&m+ ppp'''&&&"""vY^w%%%'''&&&!!!\ 8 UUU|n+ iii...--- S ___111,,,I+ E </-}}}222*** >111))) 9222T%%%///###b$iii...--- S---...!!!V333...%%%!!! {] >$)))G'''JJJ <999 222*** @PPPw111(((~ 7">777111&&&q - 000%%%j) |||ppp111,,,N999 222*** @<<<`<<< 222+++ C 222,,,$$$}sbM 7#```%CCCP 000P000'''v/ !!!///%%%g' 000U///###]KKK{ccc......@@@["""222)))ʙeee000'''v/ 111'''v 1 000(((cP G > 3%8 &oooKKK000g' @@@e(((//////@@@q...--- RnnnuuuV ? B)--- AAA'''>>> 222:::}}}%000^^^???r @@@e(((//////@@@q (((///###_"bbbyyy..."""c1 ;ahhhLLLs JJJpWI :jjjTTT~0yyyeee111---պ4LLLsPPP 222*** ?;;;_Qod 7UUU222nnn%%%ojjj444^TTT{,,,AAA񛛛fyyyeee111---պ4\\\111,,,J ;YYY N~~~UUU~{ 6hpppQ]]] 111111UUU@...000'''s/ HHHn n 5fff...򻻻EEEppp<<<A111111UUU@ 111))) 7^^^>>>jCCCjggg.Z000 sZ 999%%% IIIp$$$///###]!DDDiTTT###b' SSSz nnn::: 999%%%  )))000%%%i( 444krrr$ 8 H1Vzpw**^  444X㤤͍''''''LvU#,"TTT(1 >/^  *444UQQQx臇XXX<<<5 ooo111-Iei D[}i Ef"""% :Q G%||| %...jAAAeee,,,&&&z 6lll C1 GP 8\\\SSSS 5RX ;||| % = D -@@@l V[[[UUU <\xgEEE qvq C"$,,,@ ?_iM$ PPP0!!!`333...---"""_# ~AAAdddISh` : ((( AUiZ 2 PPP0Fa[ 54R {C UUU钒۽۞mmm  i]xr H#:::ژ===!!!###### }L"  E nnnݷࠠ???{`oxd : xxxߣUUU RQiq o[j111*** E HHH߮ߙ333%%%%%%###(((Пᶶqqq qxuT) ffffʼޠKKKpfqi E xxxߣUUU RQiqT) I B|!!!vI#N......+++%%%T' #v%%%### uI! {z{s)))///&&&q/  )000000+++$$$y+++$$$e 8 '''&&&wS){z{d :, @c)))000333333333444444333222...###s D* (b   ###&&&%%%%%%%%%$$$q E!  m '''333222...(((Z+ < '''222///***$$$U)  D """111...''' l C!# 2Kt""",,,111333333333444444333222///(((!!!"""%%%(((,,,///111222333333222,,, UP  )))333222...'''T 6 e 000222...(((!!!t B 8  $$$333000+++$$$^ 2 D """111...''' l B , EZr$$$***---.........//////......,,,&&&rW =!  9q"""***///111222222222111///...,,,***'''"""c ;  9'''///222222111---'''[ -!S(((...111222222000---&&&[ - .n$$$---111222222111---'''q E" 5Mc} ''',,,........./////////......---+++(((&&&$$$$$$$$$%%%&&&''')))***,,,---...............,,,&&&~ ; 3p###,,,000222222000---&&&W* :}'''///222222111///***###{H  )e""",,,111222222111---'''e 6 .n$$$---111222222111---'''q E   7Thy!!!""""""""""""$$$$$$"""""""""xdJ) =j$$$)))+++,,,---,,,+++)))&&&"""nK, &\'''++++++((("""S*+[%%%***++++++((("""U,I$$$***,,,+++)))$$$h ?  " C]o """"""""""""$$$$$$$$$"""""""""!!!!!! !!!!!!!!!"""""""""""""""""" Q" Bx"""(((++++++((("""P( $W'''++++++***&&&o C   A{###)))++++++(((###^ 4I$$$***,,,+++)))$$$h ? $ 6 A GMQSTTTUUUTTTQM G >/ /Mh~s^F/  1[~}a @" )Lnc A# #IojL.+ ; DJORTTTTUUUTTTTSSRRRSSSSTTTTTTUTN >%  =c|` >!  -UyqR 3   CjfF( #IojL.  ) 6 A GI G C :/" % 8 B A 6&   - < C B 7&  / > E C 9*  ' 9 B A 6%" 5 A D =. , < D B 8(  / > E C 9*                8R0K%&&&&&&&&%%% Ch B`0L&%Window0M&%InfoM ? B F@ F@%&   D D@0N& %  ImageView1A0O& %  TextField280P &  0Q1NSNibConnector30R30S30T)30U30VO30W1NSNibOutletConnector30X& % infoPanel0Y0Z& % versionField0[N0\1 GSMutableSet1 NSMutableSet1!NSSet&4textedit.app-4.0+20061029/English.lproj/Preferences.gorm/0000755000000000000000000000000010521104636021303 5ustar rootroottextedit.app-4.0+20061029/English.lproj/Preferences.gorm/data.classes0000644000000000000000000000143210506737274023610 0ustar rootroot{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "changePlainTextFont:", "changeRichTextFont:", "miscChanged:", "revert:", "revertToDefault:", "showPanel:" ); Super = NSObject; }; Preferences = { Actions = ( "showPanel:", "revert:", "ok:", "revertToDefault:", "miscChanged:", "changeRichTextFont:", "changePlainTextFont:", "changeFont:" ); Outlets = ( richTextFontNameField, plainTextFontNameField, keepBackupButton, saveFilesWritableButton, richTextMatrix, showPageBreaksButton, windowWidthField, windowHeightField, plainTextEncodingPopup, tabWidthField, writeBOMButton ); Super = NSObject; }; }textedit.app-4.0+20061029/English.lproj/Preferences.gorm/data.info0000644000000000000000000000027010506737274023105 0ustar rootrootGNUstep archive00002bc0:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamtextedit.app-4.0+20061029/English.lproj/Preferences.gorm/objects.gorm0000644000000000000000000002701010506737274023637 0ustar rootrootGNUstep archive00002bc0:00000025:0000014c:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&"01NSString&% Button501NSButton1 NSControl1NSView1 NSResponder% A A C A  C A&01 NSMutableArray1 NSArray&%01 NSButtonCell1 NSActionCell1NSCell0&#%# Write Byte-Order Markers for UTF-801NSImage0 1NSMutableString&% common_SwitchOff0 1NSFont%&&&&&&&&%0 &0 &0 0&% common_SwitchOn&&&0& % GormNSPanel01GSWindowTemplate1GSClassSwapper0&%NSPanel1NSPanel1NSWindow%  C Cր&% B D80%  C Cր  C Cր&0 &01NSBox% C C B  C B&0 &0% @ @ C B  C B&0 &0% A B C A  C A&0 &%0 0&% Keep Backup Files &&&&&&&&%0&0&&&&0% A B  C A  C A&0 &%0 0!&% Save Files Writable !&&&&&&&&%0"&0#& &&&0$0%& % Save Options %&&&&&&&& %%0&% C^ C B  C B&0' &0(% @ @ C B  C B&0) &0*1NSMatrix% A B  C B   C B &0+ &%0, 0-& &&&&&&&&%% C A 0.1NSColor0/&%NSNamedColorSpace00&%System01&%controlBackgroundColor.02& % NSButtonCell03 04&%Radio0506&% common_RadioOff &&&&&&&&%07&08&090:&% common_RadioOn&&&%%0; &0< 0=&% Rich Text Format5 =&&&&&&&&%70>&9&&&0? 0@& %  Plain Text5 @&&&&&&&&%70A&9&&&<0B% A A C A  C A&0C &%0D 0E&% Wrap to Page  E&&&&&&&&%0F&0G& &&&0H0I& % New Documents I&&&&&&&& %%0J% C  C B  C B&0K &0L% @ @ C B  C B&0M &0N1 NSTextField% B B4 C A  C A&0O &%0P1NSTextFieldCell0Q& % Font Name0R%0S& %  DejaVuSans A@A@Q&&&&&&&&0%0T/0U&%System0V&%textBackgroundColor0W/U0X& % textColor0Y% B B4 B A  B A&0Z &%0[ 0\&%Set...0]%0^& %  DejaVuSans AA\&&&&&&&&%0_&0`&&&&0a% A B4 B A  B A&0b &%0c0d& % Rich Text: 0e% A@d&&&&&&&&0%0f/0g&%System0h&%textBackgroundColor0i/g0j& % textColor0k% B A C A  C A&0l &%0m0n& % Font NameRn&&&&&&&&0%0o/0p&%System0q&%textBackgroundColor0r/p0s& % textColor0t% B A B A  B A&0u &%0v 0w&%Set...]w&&&&&&&&%0x&0y&&&&0z% A A B A  B A&0{ &%0|0}& % Plain Text: e}&&&&&&&&0%0~/0&%System0&%textBackgroundColor0/0& % textColor00& % Text Fonts &&&&&&&& %%0% BX C B  C B&0 &0% @ @ C B  C B&0 &0% B B4 B( A  B( A&0 &%00&%80 &&&&&&&&0%0/0&%System0&%textBackgroundColor0/0& % textColor0% B A B( A  B( A&0 &%00&%40 &&&&&&&&0%0/0&%System0&%textBackgroundColor0/0& % textColor0% B B4 C1 A  C1 A&0 &%00& %  Characterse&&&&&&&&0%0/0&%System0&%textBackgroundColor0/0& % textColor0% B A C1 A  C1 A&0 &%00&% Linese&&&&&&&&0%0/0&%System0&%textBackgroundColor0/0& % textColor0% A B4 BD A  BD A&0 &%00&%Width: e&&&&&&&&0%0/0&%System0&%textBackgroundColor0/0& % textColor0% A A BD A  BD A&0 &%00&%Height: e&&&&&&&&0%0/0&%System0&%textBackgroundColor0/0& % textColor00&%New Window Size &&&&&&&& %%0%  C B  C B&0± &0ñ% @ @ C B8  C B8&0ı &01 NSPopUpButton% A A C A  C A&0Ʊ &%01NSPopUpButtonCell1NSMenuItemCell0ȱ& &&&&&&&&01NSMenu0ʱ&0˱ &01 NSMenuItem0ͱ&%Item 1&&%0α0ϱ& % common_Nibble%%0б&А&&&̰ɰ%%%%%0ѱ0ұ&%Plain Text Encoding &&&&&&&& %%0ӱ/00Ա&%windowBackgroundColor0ձ&%Window0ֱ& % Preferences ? ? F@ F@%&   D D@0ױ&%Button0ر&% Box1&0ٱ&% Box2J0ڱ&% Box30۱& % TextFieldN0ܱ&% Box40ݱ&%GSCustomClassMap0ޱ&0߱&% View10&% View2(0&% View3L0&% View40& % NSVisible0 &0&% View50&%Box0& %  TextField1a0& %  TextField2k0& %  TextField3z0& %  TextField40& %  TextField50& %  TextField60&%NSOwner0& %  Preferences0& %  TextField70& %  TextField80&%MenuItem0&%Matrix*0& %  TextField90&% Button10&% Button2B0&%GormNSPopUpButton0&% Button3Y0&%View0&% Button4t0 &??01 NSNibConnector0 0 װ0 0 P ߰P ؐP ذP ؐP ۰ِP ِP ِP ٰP ِP P P P P ߐP ڐP ڐP ڐP ڐP ڐP ڐP ڰP ڐP ܐP P ܰP ܐP1!NSNibOutletConnectorP&% delegateP!װP& %  nextKeyViewP!P!P !P!!P"!P#!P$!P%!P&!P'1"NSNibControlConnectorװP(& %  miscChanged:P)"(P*"(P+"(P,"(P-"P.&% changeRichTextFont:P/"P0&% changePlainTextFont:P1"(P2"(P3"(P4!P5&% keepBackupButtonP6!P7&% saveFilesWritableButtonP8!P9&% writeBOMButtonP:!P;&% richTextMatrixP!P?&% richTextFontNameFieldP@!PA&% plainTextFontNameFieldPB!PC&% windowWidthFieldPD!PE&% windowHeightFieldPF!PG&% plainTextEncodingPopupPH!PI&% initialFirstResponderPJ1# GSMutableSet1$ NSMutableSet1%NSSet&textedit.app-4.0+20061029/Controller.h0000644000000000000000000000120207761712626015670 0ustar rootroot#import @interface Controller: NSObject { id infoPanel; } /* NSApplication delegate methods */ - (BOOL) application: (NSApplication *)app openFile: (NSString *)filename; - (BOOL) application: (NSApplication *)app openTempFile: (NSString *)filename; - (BOOL) applicationOpenUntitledFile: (NSApplication *)app; - (BOOL) applicationShouldTerminate: (NSApplication *)app; /* Action methods */ - (void) createNew: (id)sender; - (void) open: (id)sender; - (void) saveAll: (id)sender; - (void) showInfoPanel: (id)sender; /* Outlet methods */ - (void) setVersionField: (id)anObject; /* Fake; there's no outlet */ @end textedit.app-4.0+20061029/Controller.m0000644000000000000000000001221310054671011015656 0ustar rootroot/* Controller.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. Central controller object for Edit... */ #import #import #import "Controller.h" #import "Document.h" #import "Preferences.h" @implementation Controller - (BOOL) applicationShouldTerminate: (NSApplication *)app { NSArray *windows = [app windows]; unsigned count = [windows count]; BOOL needsSaving = NO; // Determine if there are any unsaved documents... while (!needsSaving && count--) { NSWindow *window = [windows objectAtIndex: count]; Document *document = [Document documentForWindow: window]; if (document && [document isDocumentEdited]) needsSaving = YES; } if (needsSaving) { int choice = NSRunAlertPanel ( NSLocalizedString (@"Quit", @"Title of alert panel which comes up when user chooses Quit and there are unsaved documents."), NSLocalizedString (@"You have unsaved documents.", @"Message in the alert panel which comes up when user chooses Quit and there are unsaved documents."), NSLocalizedString (@"Review Unsaved", @"Choice (on a button) given to user which allows him/her to review all unsaved documents if he/she quits the application without saving them all first."), NSLocalizedString (@"Quit Anyway", @"Choice (on a button) given to user which allows him/her to quit the application even though there are unsaved documents."), NSLocalizedString (@"Cancel", @"Button choice allowing user to cancel.") ); if (choice == NSAlertOtherReturn) { /* Cancel */ return NO; } else if (choice != NSAlertAlternateReturn) { /* Review unsaved; Quit Anyway falls through */ count = [windows count]; while (count--) { NSWindow *window = [windows objectAtIndex: count]; Document *document = [Document documentForWindow: window]; if (document) { [window makeKeyAndOrderFront: nil]; if (![document canCloseDocument]) return NO; } } } } [Preferences saveDefaults]; return YES; } - (BOOL) application: (NSApplication *)sender openFile: (NSString *)filename { return [Document openDocumentWithPath: filename encoding: UnknownStringEncoding]; } /* -application:openTempFile: This is like -application:openFile:, except the method deletes the file once it has been opened. */ - (BOOL) application: (NSApplication *)sender openTempFile: (NSString *)filename { NSFileManager *fm = [NSFileManager defaultManager]; Document *document; BOOL tmp = [Document openDocumentWithPath: filename encoding: UnknownStringEncoding]; document = [Document documentForPath: filename]; if (document) { [document setDocumentEdited: YES]; [document setDocumentName: nil]; [fm removeFileAtPath: filename handler: nil]; } return tmp; } - (BOOL) applicationOpenUntitledFile: (NSApplication *) sender { return [Document openUntitled]; } - (BOOL) application: (NSApplication *)sender printFile: (NSString *)filename { BOOL retval = NO; BOOL releaseDoc = NO; Document *document = [Document documentForPath: filename]; if (!document) { document = [[Document alloc] initWithPath: filename encoding: UnknownStringEncoding]; releaseDoc = YES; } if (document) { BOOL useUI = [NSPrintInfo defaultPrinter] ? NO : YES; [document printDocumentUsingPrintPanel: useUI]; retval = YES; if (releaseDoc) { // If we created it, we get rid of it. [document release]; } } return retval; } - (void) createNew: (id)sender { [Document openUntitled]; } - (void) open: (id)sender { [Document open: sender]; } - (void) saveAll: (id)sender { NSArray *windows = [NSApp windows]; unsigned count = [windows count]; while (count--) { NSWindow *window = [windows objectAtIndex: count]; Document *document = [Document documentForWindow: window]; if (document && [document isDocumentEdited]) { if (![document saveDocument: NO]) return; } } } /*** Info Panel related stuff ***/ - (void) showInfoPanel: (id)sender { if (!infoPanel) { if (![NSBundle loadNibNamed: @"Info" owner: self]) { NSLog (@"Failed to load Info.nib"); NSBeep (); return; } [infoPanel center]; } [infoPanel makeKeyAndOrderFront: nil]; } - (void) setVersionField: (id)versionField { const char *TextEdit_VERS_NUM = "40"; if (strlen (TextEdit_VERS_NUM) > 0) { NSString *versionString = [NSString stringWithFormat: NSLocalizedString (@"Release 4 (v%s)", @"Version string. %s is replaced by the version number."), TextEdit_VERS_NUM]; [versionField setStringValue: versionString]; } } #ifdef GNUSTEP - (void) applicationWillFinishLaunching: (NSNotification *)not { NSMenu *menu = [NSApp mainMenu]; [[NSFontManager sharedFontManager] setFontMenu: [[[[menu itemWithTitle: @"Format"] submenu] itemWithTitle: @"Font"] submenu]]; [NSApp setWindowsMenu: [[menu itemWithTitle: @"Windows"] submenu]]; [NSApp setServicesMenu: [[menu itemWithTitle: @"Services"] submenu]]; } #endif @end /* 1/28/95 aozer Created for Edit II. 7/21/95 aozer Command line file names */ textedit.app-4.0+20061029/Document.h0000644000000000000000000001341707761712626015336 0ustar rootroot#import #import @class NSTextView; @class NSTextStorage; @class NSPrintInfo; /* These get added to the string encodings so we have a common language to refer to file types */ enum { UnknownStringEncoding = -1000, RichTextStringEncoding = -1001, RichTextWithGraphicsStringEncoding = -1002 }; /* List of encodings to display in the open/save panels */ extern const int *SupportedEncodings (void); /* Set up an encoding popup with the specified parameters. If the popup contains 1 item, it's also initialized with the supported encodings. */ extern void SetUpEncodingPopupButton(NSPopUpButton *popup, int selectedEncoding, BOOL includeDefaultItem); @interface Document : NSObject { NSTextStorage *textStorage; NSString *documentName; /* If nil, never saved */ NSScrollView *scrollView; /* ScrollView containing document */ NSPrintInfo *printInfo; /* PrintInfo, used when hasMultiplePages is true */ NSString *potentialSaveDirectory; /* if non-nil, is path prefix where to save it. */ BOOL isDocumentEdited; BOOL hasMultiplePages; BOOL isRichText; int encodingIfPlainText; } // Don't call -init; call one of these methods... */ /* Should be an absolute path here; nil for untitled. */ - (id) initWithPath: (NSString *)filename encoding: (int)encoding; /* Brings window front. Checks to see if document already open. */ + (BOOL) openDocumentWithPath: (NSString *)filename encoding: (int)encoding; + (BOOL) openUntitled; /* Brings window front */ /* These set/get the documentName instance var and also set the window title accordingly. "nil" is used if no title. */ - (void) setDocumentName: (NSString *)fileName; - (NSString *) documentName; /* These determine if document has been edited since last save */ - (void) setDocumentEdited: (BOOL)flag; - (BOOL) isDocumentEdited; /* Is the document rich? */ - (BOOL) isRichText; - (void) setRichText: (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)size; /* Attributes */ - (NSTextStorage *) textStorage; - (NSTextView *) firstTextView; - (NSWindow *) window; - (NSLayoutManager *) layoutManager; /* Misc methods */ + (Document *) documentForWindow: (NSWindow *)window; + (Document *) documentForPath: (NSString *)filename; + (NSString *) cleanedUpPath: (NSString *)filename; + (NSView *) encodingAccessory: (int)defaultEncoding includeDefaultEntry: (BOOL)includeDefaultItem; + (unsigned int) numberOfOpenDocuments; - (void) doForegroundLayoutToCharacterIndex: (unsigned)loc; /* Page-oriented methods */ - (void) addPage; - (void) removePage; - (unsigned int) numberOfPages; - (void) setHasMultiplePages:(BOOL)flag; - (BOOL) hasMultiplePages; - (void) setPrintInfo:(NSPrintInfo *)anObject; - (NSPrintInfo *) printInfo; /* Printing a document */ - (void) printDocumentUsingPrintPanel: (BOOL)uiFlag; // Saving helpers. These return NO or nil if user cancels the save... - (BOOL) getDocumentName: (NSString **)newName encoding: (int *)encodingForSaving oldName: (NSString *)oldName oldEncoding: (int)encoding; /* Saves under documentName; if not set, tries to set it first */ - (BOOL) saveDocument: (BOOL)showSavePanel; /* Assures document is saved or user doesn't care about the changes; returns NO if user cancels */ - (BOOL) canCloseDocument; + (void) openWithEncodingAccessory: (BOOL)flag; /* Outlet methods */ + (void) setEncodingPopupButton: (id)anObject; /* In the save panel... */ + (void) setEncodingAccessory: (id)anObject; /* In the save panel... */ /* Action methods */ + (void) open: (id)sender; - (void) saveAs: (id)sender; - (void) saveTo: (id)sender; - (void) save: (id)sender; - (void) revert: (id)sender; - (void) close: (id)sender; - (void) runPageLayout: (id)sender; - (void) orderFrontFindPanel: (id)sender; - (void) findNext: (id)sender; - (void) findPrevious: (id)sender; - (void) enterSelection: (id)sender; - (void) jumpToSelection: (id)sender; - (void) toggleRich: (id)sender; - (void) togglePageBreaks: (id)sender; /* action cover for [self printDocumentUsingPrintPanel:YES] */ - (void) printDocument: (id)sender; /* When the preference "OpenPanelFollowsMainWindow" is set to YES, this is used to save/get the last used directory for the save/open panel. */ + (void) setLastOpenSavePanelDirectory: (NSString *)dir; + (NSString *) openSavePanelDirectory; /* setPotentialSaveDirectory gets called automatically when a doc is made "new" UNTITLED. The name is taken from the current main window, if any. The directory is used to put up the save panel the first time the doc is saved from the UNTITLED state. It is only used when the preference "OpenPanelFollowsMainWindow" is set to YES. */ - (void) setPotentialSaveDirectory: (NSString *)nm; - (NSString *) potentialSaveDirectory; /* Delegation messages */ - (void) textView: (NSTextView *)view doubleClickedOnCell: (id )cell inRect: (NSRect)rect; - (void) textView: (NSTextView *)view draggedCell: (id )cell inRect: (NSRect)rect event: (NSEvent *)event; - (void) textDidChange: (NSNotification *)textObject; - (void) layoutManager: (NSLayoutManager *)layoutManager didCompleteLayoutForTextContainer: (NSTextContainer *)textContainer atEnd: (BOOL)layoutFinishedFlag; - (BOOL) windowShouldClose: (id)sender; - (void) windowWillClose: (NSNotification *)notification; @end @interface Document (ReadWrite) /* File loading. Returns NO if not successful. Doesn't set documentName. If encoding is Unknown, try to guess. */ - (BOOL) loadFromPath: (NSString *)fileName encoding: (int)encoding; - (BOOL) saveToPath: (NSString *)fileName encoding: (int)encoding updateFilenames: (BOOL)updateFileNamesFlag; @end textedit.app-4.0+20061029/Document.m0000644000000000000000000012364107761712626015344 0ustar rootroot/* Document.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. Document object for Edit... */ #include #include #include // for NULL #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #import "Document.h" #import "MultiplePageView.h" #import "TextFinder.h" #import "Preferences.h" @implementation Document - (void) setupInitialTextViewSharedState { NSTextView *textView = [self firstTextView]; [textView setUsesFontPanel: YES]; [textView setDelegate: self]; [self setRichText: [[Preferences objectForKey: RichText] boolValue]]; [self setHyphenationFactor: 0.0]; } - (id) init { static NSPoint cascadePoint = {0.0, 0.0}; NSLayoutManager *layoutManager; self = [super init]; textStorage = [[NSTextStorage alloc] init]; if (![NSBundle loadNibNamed: @"Document" owner: self]) { NSLog (@"Failed to load Document.nib"); [self release]; return nil; } layoutManager = [[NSLayoutManager alloc] init]; [textStorage addLayoutManager: layoutManager]; [layoutManager setDelegate: self]; [layoutManager release]; encodingIfPlainText = [[Preferences objectForKey: PlainTextEncoding] intValue]; [self setPrintInfo: [NSPrintInfo sharedPrintInfo]]; [[self printInfo] setHorizontalPagination: NSFitPagination]; [[self printInfo] setHorizontallyCentered: NO]; [[self printInfo] setVerticallyCentered: NO]; // This gives us our first view [self setHasMultiplePages: [[Preferences objectForKey: ShowPageBreaks] boolValue]]; // This ensures the first view gets set up correctly [self setupInitialTextViewSharedState]; if (NSEqualPoints (cascadePoint, NSZeroPoint)) { /* First time through... */ NSRect frame = [[self window] frame]; cascadePoint = NSMakePoint (frame.origin.x, NSMaxY (frame)); } cascadePoint = [[self window] cascadeTopLeftFromPoint: cascadePoint]; [[self window] setDelegate: self]; // Set the window size from defaults... if ([self hasMultiplePages]) { [self setViewSize: [[scrollView documentView] pageRectForPageNumber: 0].size]; } else { int windowHeight = [[Preferences objectForKey: WindowHeight] intValue]; int windowWidth = [[Preferences objectForKey: WindowWidth] intValue]; NSFont *font = [Preferences objectForKey: [self isRichText] ? RichTextFont : PlainTextFont]; NSSize size; #ifdef GNUSTEP NSFont *screenFont = [font screenFont]; NSGlyph nGlyph; if (screenFont) font = screenFont; if ([font respondsToSelector: @selector(glyphForCharacter:)]) nGlyph = (NSGlyph) [font glyphForCharacter: 'n']; else nGlyph = 'n'; if ([font glyphIsEncoded: nGlyph]) { /* Better to use n-width than the maximum, for rich text fonts... */ size.width = [font advancementForGlyph: nGlyph].width; #else if ([font glyphIsEncoded: 'n']) { /* Better to use n-width than the maximum, for rich text fonts... */ size.width = [font advancementForGlyph: nGlyph].width; #endif } else { size.width = [font maximumAdvancement].width; } size.width = ceil (size.width * windowWidth + [[[self firstTextView] textContainer] lineFragmentPadding] * 2.0); size.height = ceil ([font boundingRectForFont].size.height) * windowHeight; [self setViewSize: size]; } [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (fixUpScrollViewBackgroundColor:) name: NSSystemColorsDidChangeNotification object: nil]; potentialSaveDirectory = nil; return self; } - (id) initWithPath: (NSString *)filename encoding: (int)encoding { if (!(self = [self init])) { return nil; } if (filename && ![self loadFromPath: filename encoding: encoding]) { [self release]; return nil; } if (filename) { [Document setLastOpenSavePanelDirectory: [filename stringByDeletingLastPathComponent]]; } [[self firstTextView] setSelectedRange: NSMakeRange (0, 0)]; [self setDocumentName: filename]; return self; } + (BOOL) openUntitled { Document *document = [[self alloc] initWithPath: nil encoding: UnknownStringEncoding]; if (document) { [document setPotentialSaveDirectory: [Document openSavePanelDirectory]]; [document setDocumentName: nil]; [[document window] makeKeyAndOrderFront: nil]; return YES; } else { return NO; } } + (BOOL) openDocumentWithPath: (NSString *)filename encoding: (int)encoding { Document *document = [self documentForPath: filename]; if (!document) { document = [[self alloc] initWithPath: filename encoding: encoding]; } if (document) { [document doForegroundLayoutToCharacterIndex: [[Preferences objectForKey: ForegroundLayoutToIndex] intValue]]; [[document window] makeKeyAndOrderFront:nil]; return YES; } else { return NO; } } /* Clear the delegates of the text views and window, then release all resources and go away... */ - (void) dealloc { NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center removeObserver: self name: NSSystemColorsDidChangeNotification object: nil]; [center removeObserver: self name: NSTextStorageDidProcessEditingNotification object: [self textStorage]]; [[self firstTextView] setDelegate: nil]; [[self window] setDelegate: nil]; [documentName release]; [textStorage release]; [printInfo release]; [super dealloc]; } - (NSTextView *) firstTextView { return [[self layoutManager] firstTextView]; } - (NSSize) viewSize { return [scrollView contentSize]; } - (void)setViewSize: (NSSize)size { NSWindow *window = [scrollView window]; NSRect origWindowFrame = [window frame]; [window setContentSize: [NSScrollView frameSizeForContentSize: size hasHorizontalScroller: [scrollView hasHorizontalScroller] hasVerticalScroller: [scrollView hasVerticalScroller] borderType: [scrollView borderType]]]; [window setFrameTopLeftPoint: NSMakePoint (origWindowFrame.origin.x, NSMaxY (origWindowFrame))]; } /* This method causes the text to be laid out in the foreground (approximately) up to the indicated character index. */ - (void) doForegroundLayoutToCharacterIndex: (unsigned)loc { unsigned int len; if (loc > 0 && (len = [[self 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]; /* Now cause layout by asking a question which has to determine where the glyph is */ if (glyphRange.location > 0) { [[self layoutManager] textContainerForGlyphAtIndex: glyphRange.location - 1 effectiveRange: NULL]; } } } + (NSString *) cleanedUpPath: (NSString *)filename { NSString *resolvedSymlinks = [filename stringByResolvingSymlinksInPath]; if ([resolvedSymlinks length] > 0) { NSString *standardized = [resolvedSymlinks stringByStandardizingPath]; return [standardized length] ? standardized : resolvedSymlinks; } return filename; } - (void) setDocumentName: (NSString *)filename { [documentName autorelease]; if (filename) { documentName = [[filename stringByResolvingSymlinksInPath] copy]; [[self window] setTitleWithRepresentedFilename: documentName]; } else { NSString *untitled = _(@"UNTITLED"); if ([self isRichText]) untitled = [untitled stringByAppendingPathExtension: @"rtf"]; if (potentialSaveDirectory) { [[self window] setTitleWithRepresentedFilename: [potentialSaveDirectory stringByAppendingPathComponent: untitled]]; } else { [[self window] setTitle: untitled]; } documentName = nil; } } - (NSString *) documentName { return documentName; } - (void) setPotentialSaveDirectory: (NSString *)nm { if (![[Preferences objectForKey: OpenPanelFollowsMainWindow] boolValue]) return; [potentialSaveDirectory autorelease]; potentialSaveDirectory = [nm copy]; } - (NSString *) potentialSaveDirectory { if (![[Preferences objectForKey: OpenPanelFollowsMainWindow] boolValue]) return NSHomeDirectory (); return potentialSaveDirectory; } - (void) setDocumentEdited: (BOOL)flag { if (flag != isDocumentEdited) { isDocumentEdited = flag; [[self window] setDocumentEdited: isDocumentEdited]; } } - (BOOL) isDocumentEdited { return isDocumentEdited; } - (NSTextStorage *) textStorage { return textStorage; } - (NSWindow *) window { return [[self firstTextView] window]; } - (NSLayoutManager *) layoutManager { return [[textStorage layoutManagers] objectAtIndex: 0]; } - (void) setPrintInfo: (NSPrintInfo *)anObject { if (printInfo == anObject || [[printInfo dictionary] isEqual: [anObject dictionary]]) return; [printInfo autorelease]; printInfo = [anObject copy]; if ([self hasMultiplePages]) { unsigned int cnt; unsigned int numberOfPages = [self numberOfPages]; MultiplePageView *pagesView = [scrollView documentView]; NSArray *textContainers = [[self layoutManager] textContainers]; [pagesView setPrintInfo: 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]; } } } - (NSPrintInfo *) printInfo { return printInfo; } /* Multiple page related code */ - (unsigned int) numberOfPages { if (hasMultiplePages) { return [[scrollView documentView] numberOfPages]; } else { return 1; } } - (BOOL) hasMultiplePages { return hasMultiplePages; } - (void) addPage { unsigned int numberOfPages = [self numberOfPages]; MultiplePageView *pagesView = [scrollView documentView]; NSSize textSize = [pagesView documentSizeInPage]; NSTextContainer *textContainer = [[NSTextContainer alloc] initWithContainerSize: textSize]; NSTextView *textView; [pagesView setNumberOfPages: numberOfPages + 1]; textView = [[NSTextView alloc] 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 { unsigned int 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]; } /* This method determines whether the document has multiple pages or not. It can be called at any time. */ - (void) setHasMultiplePages: (BOOL)flag { hasMultiplePages = flag; if (hasMultiplePages) { NSTextView *textView = [self firstTextView]; MultiplePageView *pagesView = [[MultiplePageView alloc] init]; [scrollView setDocumentView: pagesView]; [pagesView setPrintInfo: [self printInfo]]; // MF: 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]; } else { NSSize size = [scrollView contentSize]; NSTextContainer *textContainer = [[NSTextContainer alloc] initWithContainerSize: NSMakeSize (size.width, FLT_MAX)]; NSTextView *textView = [[NSTextView alloc] 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]; unsigned int 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]; #ifndef GNUSTEP [textView setMinSize: size]; // Will be adjusted by the autoresizing... #else [textView setMinSize: NSMakeSize (0, 0)]; // is necessary on GNUstep #endif [textView setMaxSize: NSMakeSize(FLT_MAX, FLT_MAX)]; // Will be adjusted /* 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]; } [[scrollView window] makeFirstResponder: [self firstTextView]]; } /* Outlet methods */ - (void) setScrollView: (id)anObject { scrollView = anObject; [scrollView setHasVerticalScroller: YES]; [scrollView setHasHorizontalScroller: NO]; [[scrollView contentView] setAutoresizesSubviews: YES]; } static NSPopUpButton *encodingPopupButton = nil; static NSView *encodingAccessory = nil; + (void) loadEncodingPopupButton: (NSPopUpButton *)anObject { } /* Outlet method... */ + (void) setEncodingPopupButton: (id)anObject { encodingPopupButton = [anObject retain]; [self loadEncodingPopupButton: encodingPopupButton]; } /* Outlet method... */ + (void)setEncodingAccessory: (id)anObject { encodingAccessory = [anObject retain]; } /* Use this method to get the accessory. It reinitailizes the popup, selects the specified item, and also includes or deletes the first entry (corresponding to "Default") */ + (NSView *) encodingAccessory: (int)encoding includeDefaultEntry: (BOOL)includeDefaultItem { if (!encodingAccessory) { if (![NSBundle loadNibNamed: @"EncodingAccessory" owner: self]) { NSLog (@"Failed to load EncodingAccessory.nib"); } } SetUpEncodingPopupButton (encodingPopupButton, encoding, includeDefaultItem); return encodingAccessory; } - (void) removeAttachments { NSTextStorage *attrString = [self textStorage]; unsigned int loc = 0; unsigned int end = [attrString length]; [attrString beginEditing]; while (loc < end) { /* Run through the string in terms of attachment runs */ NSRange attachmentRange; /* Attachment attribute run */ NSTextAttachment *attachment; attachment = [attrString attribute: NSAttachmentAttributeName atIndex: loc longestEffectiveRange: &attachmentRange inRange: NSMakeRange (loc, end - loc)]; if (attachment) { // If attachment, make sure it's valid unichar ch = [[attrString string] characterAtIndex: loc]; if (ch == NSAttachmentCharacter) { [attrString replaceCharactersInRange: NSMakeRange (loc, 1) withString: @""]; end = [attrString length]; /* New length */ } else { loc++; /* Just skip over the current character... */ } } else { loc = NSMaxRange (attachmentRange); } } [attrString endEditing]; } /* The hyphenation methods are added to NSLayoutManager in OPENSTEP 4.2. Given that we'd like the app to keep on running against earlier versions of OPENSTEP, we make all hyphenation-related calls check to see if they are implemented. */ static BOOL hyphenationSupported (void) { return [NSLayoutManager instancesRespondToSelector: @selector(setHyphenationFactor:)]; } - (void) setHyphenationFactor: (float)factor { if (hyphenationSupported ()) [[self layoutManager] setHyphenationFactor: factor]; } - (float) hyphenationFactor { return hyphenationSupported() ? [[self layoutManager] hyphenationFactor] : 0.0; } /* ??? Doesn't check to see if the prev value is the same! (Otherwise the first time doesn't work...) */ - (void) setRichText: (BOOL)flag { NSTextView *view = [self firstTextView]; NSMutableDictionary *textAttributes = [[NSMutableDictionary alloc] initWithCapacity:2]; isRichText = flag; if (isRichText) { [textAttributes setObject: [Preferences objectForKey: RichTextFont] forKey: NSFontAttributeName]; [textAttributes setObject: [NSParagraphStyle defaultParagraphStyle] forKey: NSParagraphStyleAttributeName]; /* Make sure we aren't watching the DidProcessEditing notification since we don't adjust tab stops in rich text. */ [[NSNotificationCenter defaultCenter] removeObserver: self name: NSTextStorageDidProcessEditingNotification object: [self textStorage]]; } else { [textAttributes setObject: [Preferences objectForKey:PlainTextFont] forKey: NSFontAttributeName]; [textAttributes setObject: [NSParagraphStyle defaultParagraphStyle] forKey: NSParagraphStyleAttributeName]; [self removeAttachments]; /* Register for DidProcessEditing to fix the tabstops. */ [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(textStorageDidProcessEditing:) name: NSTextStorageDidProcessEditingNotification object: [self textStorage]]; } [view setRichText: isRichText]; [view setUsesRuler: isRichText]; // If NO, get rid of the ruler [view setImportsGraphics: isRichText]; if ([textStorage length]) { [textStorage setAttributes: textAttributes range: NSMakeRange (0, [textStorage length])]; } [view setTypingAttributes: textAttributes]; [textAttributes release]; } - (BOOL) isRichText { return isRichText; } /* User commands... */ - (void) printDocumentUsingPrintPanel: (BOOL)uiFlag { NSPrintOperation *op; op = [NSPrintOperation printOperationWithView: [scrollView documentView] printInfo: printInfo]; [op setShowPanels: uiFlag]; [op runOperation]; } - (void) printDocument: (id)sender { [self printDocumentUsingPrintPanel: YES]; } - (void)toggleRich: (id)sender { if (isRichText && ([textStorage length] > 0)) { int choice = NSRunAlertPanel (_(@"Make Plain Text"), _(@"Convert document to plain text? This will lose fonts, colors, and other text attribute settings."), _(@"OK"), _(@"Cancel"), nil); if (choice != NSAlertDefaultReturn) return; } [self setRichText: !isRichText]; [self setDocumentEdited: YES]; [self setDocumentName: nil]; } - (void) togglePageBreaks: (id)sender { [self setHasMultiplePages: ![self hasMultiplePages]]; } - (void) toggleHyphenation: (id)sender { /* Toggle between 0.0 and 0.9 */ [self setHyphenationFactor: ([self hyphenationFactor] > 0.0) ? 0.0 : 0.9]; if ([self isRichText]) { [self setDocumentEdited: YES]; } } - (void) runPageLayout: (id)sender { NSPrintInfo *tempPrintInfo = [[self printInfo] copy]; NSPageLayout *pageLayout = [NSPageLayout pageLayout]; int runResult; runResult = [pageLayout runModalWithPrintInfo: tempPrintInfo]; if (runResult == NSOKButton) { [self setPrintInfo: tempPrintInfo]; } [tempPrintInfo release]; } - (void) revert: (id)sender { if (documentName) { NSString *fileName = [documentName lastPathComponent]; int choice = NSRunAlertPanel(_(@"Revert"), _(@"Revert to saved version of %@?"), _(@"OK"), _(@"Cancel"), nil, fileName); if (choice == NSAlertDefaultReturn) { if (![self loadFromPath: documentName encoding: encodingIfPlainText]) { NSRunAlertPanel(_(@"Couldn't Revert"), _(@"Couldn't revert to saved version of %@."), _(@"OK"), nil, nil, documentName); } else { [self setDocumentEdited: NO]; } } } } - (void) close: (id)sender { [[self window] close]; } /* Not correct! */ - (void) saveTo: (id)sender { [self saveAs: sender]; } - (void) saveAs: (id)sender { [self saveDocument: YES]; } - (void) save: (id)sender { [self saveDocument: NO]; } + (void) openWithEncodingAccessory: (BOOL)flag { NSOpenPanel *panel = [NSOpenPanel openPanel]; if (flag) { [panel setAccessoryView: [self encodingAccessory: [[Preferences objectForKey: PlainTextEncoding] intValue] includeDefaultEntry: YES]]; } [panel setAllowsMultipleSelection: YES]; [panel setDirectory: [Document openSavePanelDirectory]]; if ([panel runModal]) { NSArray *filenames = [panel filenames]; unsigned cnt, numFiles = [filenames count]; for (cnt = 0; cnt < numFiles; cnt++) { NSString *filename = [filenames objectAtIndex: cnt]; if (![Document openDocumentWithPath: filename encoding: flag ? [[encodingPopupButton selectedItem] tag] : UnknownStringEncoding]) { NSString *alternate = (cnt + 1 == numFiles) ? nil : _(@"Abort"); unsigned choice = NSRunAlertPanel(_(@"File system error"), _(@"Couldn't open file %@."), _(@"OK"), alternate, nil, filename); if (choice == NSCancelButton) break; } } } } + (void) open: (id)sender { [self openWithEncodingAccessory: YES]; } /* Find submenu commands */ - (void) orderFrontFindPanel: (id)sender { [[TextFinder sharedInstance] orderFrontFindPanel: sender]; } - (void) findNext: (id)sender { [[TextFinder sharedInstance] findNext: sender]; } - (void) findPrevious: (id)sender { [[TextFinder sharedInstance] findPrevious: sender]; } - (void)enterSelection: (id)sender { NSRange range = [[self firstTextView] selectedRange]; if (range.length) { [[TextFinder sharedInstance] setFindString:[[textStorage string] substringWithRange:range]]; } else { NSBeep (); } } - (void) jumpToSelection: (id)sender { NSTextView *textView = [self firstTextView]; [textView scrollRangeToVisible: [textView selectedRange]]; } /* Returns YES if the document can be closed. If the document is edited, gives the user a chance to save. Returns NO if the user cancels. */ - (BOOL) canCloseDocument { if (isDocumentEdited) { int result = NSRunAlertPanel ( _(@"Close"), _(@"Document has been edited. Save?"), _(@"Save"), _(@"Don't Save"), _(@"Cancel")); if (result == NSAlertDefaultReturn) { /* Save */ if (![self saveDocument: NO]) return NO; } else if (result == NSAlertOtherReturn) { /* Cancel */ return NO; } /* Don't save case, falls through to the YES return */ } return YES; } /* Saves the document. Puts up save panel if necessary or if showSavePanel is YES. Returns NO if the user cancels the save... */ - (BOOL) saveDocument: (BOOL)showSavePanel { NSString *nameForSaving = [self documentName]; int encodingForSaving; BOOL haveToChangeType = NO; BOOL showEncodingAccessory = NO; if ([self isRichText]) { if (nameForSaving && [[nameForSaving pathExtension] isEqualToString: @"rtfd"]) { encodingForSaving = RichTextWithGraphicsStringEncoding; } else { encodingForSaving = [textStorage containsAttachments] ? RichTextWithGraphicsStringEncoding : RichTextStringEncoding; if ((encodingForSaving == RichTextWithGraphicsStringEncoding) && nameForSaving && [[nameForSaving pathExtension] isEqualToString: @"rtf"]) { nameForSaving = nil; /* Force the user to provide a new name... */ } } } else { NSString *string = [textStorage string]; showEncodingAccessory = YES; encodingForSaving = encodingIfPlainText; if ((encodingForSaving != UnknownStringEncoding) && ![string canBeConvertedToEncoding: encodingForSaving]) { haveToChangeType = YES; encodingForSaving = UnknownStringEncoding; } if (encodingForSaving == UnknownStringEncoding) { NSStringEncoding defaultEncoding = [[Preferences objectForKey: PlainTextEncoding] intValue]; if ([string canBeConvertedToEncoding: defaultEncoding]) { encodingForSaving = defaultEncoding; } else { const int *plainTextEncoding = SupportedEncodings(); while (*plainTextEncoding != -1) { if ((*plainTextEncoding >= 0) && (*plainTextEncoding != defaultEncoding) && (*plainTextEncoding != NSUnicodeStringEncoding) && (*plainTextEncoding != NSUTF8StringEncoding) && [string canBeConvertedToEncoding:*plainTextEncoding]) { encodingForSaving = *plainTextEncoding; break; } plainTextEncoding++; } } if (encodingForSaving == UnknownStringEncoding) encodingForSaving = NSUTF8StringEncoding; if (haveToChangeType) { NSRunAlertPanel(_( @"Save Plain Text"), _(@"Document can no longer be saved using its original %@ encoding. Please choose another encoding (%@ is one possibility)."), _(@"OK"), nil, nil, [NSString localizedNameOfStringEncoding: encodingIfPlainText], [NSString localizedNameOfStringEncoding: encodingForSaving]); } } } while (1) { if (!nameForSaving || haveToChangeType || showSavePanel) { if (![self getDocumentName: &nameForSaving encoding: (haveToChangeType || showEncodingAccessory) ? &encodingForSaving : NULL oldName: nameForSaving oldEncoding: encodingForSaving]) return NO; /* Cancelled */ } /* The value of updateFileNames: below will have to become conditional on whether we're doing Save To at some point. Also, we'll want to avoid doing the stuff inside the if if we're doing Save To. */ if ([self saveToPath: nameForSaving encoding: encodingForSaving updateFilenames: YES]) { if (![self isRichText]) encodingIfPlainText = encodingForSaving; [self setDocumentName: nameForSaving]; [self setDocumentEdited: NO]; [Document setLastOpenSavePanelDirectory: [nameForSaving stringByDeletingLastPathComponent]]; return YES; } else { NSRunAlertPanel(@"Couldn't Save", _(@"Couldn't save document as %@."), _(@"OK"), nil, nil, nameForSaving); nameForSaving = nil; } } return YES; } /* Puts up a save panel to get a final name from the user. If the user cancels, returns NO. If encoding is non-NULL, puts up the encoding accessory. */ - (BOOL) getDocumentName: (NSString **)newName encoding: (int *)encodingForSaving oldName: (NSString *)oldName oldEncoding: (int)encoding { NSSavePanel *panel = [NSSavePanel savePanel]; switch (encoding) { case RichTextStringEncoding: [panel setRequiredFileType: @"rtf"]; [panel setTitle: _(@"Save RTF")]; encodingForSaving = NULL; break; case RichTextWithGraphicsStringEncoding: [panel setRequiredFileType: @"rtfd"]; [panel setTitle: _(@"Save RTFD")]; encodingForSaving = NULL; break; default: [panel setTitle: _(@"Save Plain Text")]; if (encodingForSaving) { unsigned int cnt; [panel setAccessoryView: [[self class] encodingAccessory: *encodingForSaving includeDefaultEntry: NO]]; for (cnt = 0; cnt < [encodingPopupButton numberOfItems]; cnt++) { int encoding = [[encodingPopupButton itemAtIndex: cnt] tag]; if ((encoding != UnknownStringEncoding) && ![[textStorage string] canBeConvertedToEncoding: encoding]) { [[encodingPopupButton itemAtIndex: cnt] setEnabled: NO]; } } } break; } if (potentialSaveDirectory) { [Document setLastOpenSavePanelDirectory: potentialSaveDirectory]; } if (oldName ? [panel runModalForDirectory: [oldName stringByDeletingLastPathComponent] file: [oldName lastPathComponent]] : [panel runModalForDirectory: [Document openSavePanelDirectory] file: @""]) { *newName = [panel filename]; if (potentialSaveDirectory) { [self setPotentialSaveDirectory:nil]; } if (encodingForSaving) *encodingForSaving = [[encodingPopupButton selectedItem] tag]; return YES; } else { return NO; } } /* Window delegation messages */ - (BOOL) windowShouldClose: (id)sender { return [self canCloseDocument]; } - (void) windowWillClose: (NSNotification *)notification { NSWindow *window = [self window]; [window setDelegate: nil]; [self release]; } /* Text view delegation messages */ - (void) textDidChange: (NSNotification *)textObject { if (!isDocumentEdited) { [self setDocumentEdited: YES]; } } - (void) textView: (NSTextView *)view doubleClickedOnCell: (id )cell inRect: (NSRect)rect { NSString *name = [[[cell attachment] fileWrapper] filename]; BOOL success = NO; if (name && documentName && ![name isEqualToString: @""] && ![documentName isEqualToString:@""]) { NSString *fullPath = [documentName stringByAppendingPathComponent:name]; success = [[NSWorkspace sharedWorkspace] openFile: fullPath]; } if (!success) { NSBeep (); } } - (void)textView: (NSTextView *)view draggedCell: (id )cell inRect: (NSRect)rect event: (NSEvent *)event { NSString *name = [[[cell attachment] fileWrapper] filename]; BOOL success = NO; if (name && documentName && ![name isEqualToString:@""] && ![documentName isEqualToString:@""]) { NSString *fullPath = [documentName stringByAppendingPathComponent:name]; NSImage *image = nil; if ([cell isKindOfClass:[NSCell class]]) image = [(NSCell *)cell image]; /* Cheezy; should really draw the cell into an image... */ if (!image) image = [[NSWorkspace sharedWorkspace] iconForFile:fullPath]; if (image) { NSSize cellSizeInBaseCoords = [view convertSize: rect.size toView: nil]; NSSize imageSize = [image size]; NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard]; [pasteboard declareTypes: [NSArray arrayWithObject: NSFilenamesPboardType] owner: nil]; [pasteboard setPropertyList: [NSArray arrayWithObject: fullPath] forType: NSFilenamesPboardType]; if (!NSEqualSizes (cellSizeInBaseCoords, imageSize)) { NSPoint mouseDownLocation = [view convertPoint: [event locationInWindow] fromView: nil]; rect.origin.x = mouseDownLocation.x - (imageSize.width - floor (imageSize.width/4.0)); rect.origin.y = mouseDownLocation.y - (imageSize.height - floor (imageSize.height/4.0)); } else { /* We need to pass the image origin which means we need to unflip the rect we're getting. */ rect.origin.y += rect.size.height; } [view dragImage: image at: rect.origin offset: NSZeroSize event: event pasteboard: pasteboard source: self slideBack: YES]; success = YES; } } if (!success) { NSBeep (); } } - (unsigned int) draggingSourceOperationMaskForLocal: (BOOL)flag { return NSDragOperationGeneric | NSDragOperationCopy; } /*** Layout manager delegation message ***/ - (void) layoutManager: (NSLayoutManager *)layoutManager didCompleteLayoutForTextContainer: (NSTextContainer *)textContainer atEnd: (BOOL)layoutFinishedFlag { if ([self hasMultiplePages]) { NSArray *containers = [layoutManager textContainers]; /* Either layout is not finished, or it is but there are glyphs laid nowhere. */ if (!layoutFinishedFlag || !textContainer) { NSTextContainer *lastContainer = [containers lastObject]; if (!textContainer || textContainer == lastContainer) { /* Add a new page only if the newly full container is the last container or the nowhere container. */ [self addPage]; } } else { // Layout is done and it all fit. See if we can axe some pages. unsigned int lastUsedContainerIndex = [containers indexOfObjectIdenticalTo: textContainer]; unsigned int numContainers = [containers count]; while (++lastUsedContainerIndex < numContainers) { [self removePage]; } } } } /*** Text storage notification message ***/ static NSArray * tabStopArrayForFontAndTabWidth (NSFont *font, unsigned tabWidth) { static NSMutableArray *array = nil; static float currentWidthOfTab = -1; float charWidth; float widthOfTab; unsigned int i; if ([font glyphIsEncoded: (NSGlyph) ' ']) { charWidth = [font advancementForGlyph: (NSGlyph) ' '].width; } else { charWidth = [font maximumAdvancement].width; } widthOfTab = (charWidth * tabWidth); if (!array) { array = [[NSMutableArray alloc] initWithCapacity: 100]; } if (widthOfTab != currentWidthOfTab) { // NSLog (@"Calculating tabstops for font %@, tabWidth %u, real width %f.", font, tabWidth, widthOfTab); [array removeAllObjects]; for (i = 1; i <= 100; i++) { NSTextTab *tab = [[NSTextTab alloc] initWithType: NSLeftTabStopType location: widthOfTab * i]; [array addObject: tab]; [tab release]; } currentWidthOfTab = widthOfTab; } return array; } - (void) textStorageDidProcessEditing: (NSNotification *)notification { NSTextStorage *theTextStorage = [notification object]; NSString *string = [theTextStorage string]; if ([string length] > 0) { /* Generally NSTextStorage's attached to plain text NSTextViews only have one font, but this is not generally true. To ensure the tabstops are uniform throughout the document we always base them on the font of the first character in the NSTextStorage. */ NSFont *font = [theTextStorage attribute: NSFontAttributeName atIndex: 0 effectiveRange: NULL]; /* Substitute a screen font if the layout manager will do so for display. */ // MF: printing will probably be an issue here... font = [[self layoutManager] substituteFontForFont: font]; if ([font isFixedPitch]) { unsigned int tabWidth = [[Preferences objectForKey: TabWidth] intValue]; NSArray *desiredTabStops = tabStopArrayForFontAndTabWidth (font, tabWidth); NSRange editedRange = [theTextStorage editedRange]; NSRange eRange; NSParagraphStyle *paraStyle; NSMutableParagraphStyle *newStyle; editedRange = [string lineRangeForRange: editedRange]; /* We will traverse the edited range by paragraphs, fixing the paragraph styles */ while (editedRange.length > 0) { paraStyle = [theTextStorage attribute: NSParagraphStyleAttributeName atIndex: editedRange.location longestEffectiveRange: &eRange inRange: editedRange]; if (!paraStyle) { paraStyle = [NSParagraphStyle defaultParagraphStyle]; } eRange = NSIntersectionRange (editedRange, eRange); if (![[paraStyle tabStops] isEqual: desiredTabStops]) { // Make sure we don't change stuff outside editedRange. newStyle = [paraStyle mutableCopy]; [newStyle setTabStops: desiredTabStops]; [theTextStorage addAttribute: NSParagraphStyleAttributeName value: newStyle range: eRange]; [newStyle release]; } if (NSMaxRange (eRange) < NSMaxRange (editedRange)) { editedRange.length = NSMaxRange (editedRange) - NSMaxRange (eRange); editedRange.location = NSMaxRange (eRange); } else { editedRange = NSMakeRange (NSMaxRange (editedRange), 0); } } } } } /* Return the document in the specified window. */ + (Document *) documentForWindow: (NSWindow *)window { id delegate = [window delegate]; if (delegate && [delegate isKindOfClass: [Document class]]) return delegate; return nil; } /* Return an existing document... */ + (Document *) documentForPath: (NSString *)filename { NSArray *windows = [[NSApplication sharedApplication] windows]; unsigned int cnt; unsigned int numWindows = [windows count]; filename = [self cleanedUpPath: filename]; /* Clean up the incoming path */ for (cnt = 0; cnt < numWindows; cnt++) { Document *document = [Document documentForWindow: [windows objectAtIndex: cnt]]; NSString *docName = [document documentName]; if (docName && [filename isEqual: [self cleanedUpPath: docName]]) return document; } return nil; } + (unsigned int) numberOfOpenDocuments { NSArray *windows = [[NSApplication sharedApplication] windows]; unsigned int cnt; unsigned int numWindows = [windows count]; unsigned int numDocuments = 0; for (cnt = 0; cnt < numWindows; cnt++) { if ([Document documentForWindow: [windows objectAtIndex: cnt]]) numDocuments++; } return numDocuments; } /* 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 static void validateToggleItem (NSMenuItem *aCell, BOOL useFirst, NSString *first, NSString *second) { if (useFirst) { if ([aCell tag] != TagForFirst) { [aCell setTitleWithMnemonic: first]; [aCell setTag: TagForFirst]; #ifdef GNUSTEP [[aCell menu] sizeToFit]; #else [((NSMenu *)[[(NSCell *)aCell controlView] window]) sizeToFit]; #endif } } else { if ([aCell tag] != TagForSecond) { [aCell setTitleWithMnemonic: second]; [aCell setTag: TagForSecond]; #ifdef GNUSTEP [[aCell menu] sizeToFit]; #else [((NSMenu *)[[(NSCell *)aCell controlView] window]) sizeToFit]; #endif } } } /* Menu validation */ - (BOOL) validateMenuItem: (NSMenuItem *)aCell { SEL action = [aCell action]; #ifdef GNUSTEP const char *sel_name = sel_get_name (action); if (!strcmp (sel_name, sel_get_name (@selector (toggleRich:)))) { validateToggleItem (aCell, [self isRichText], _(@"&Make Plain Text"), _(@"&Make Rich Text")); } else if (!strcmp (sel_name, sel_get_name (@selector (togglePageBreaks:)))) { validateToggleItem (aCell, [self hasMultiplePages], _(@"&Wrap to Window"), _(@"&Wrap to Page")); } else if (!strcmp (sel_name, sel_get_name (@selector (toggleHyphenation:)))) { if (!hyphenationSupported()) // Disable it return NO; validateToggleItem (aCell, ([self hyphenationFactor] > 0.0), _(@"Disallow &Hyphenation"), _(@"Allow &Hyphenation")); } #else if (action == @selector(toggleRich:)) { validateToggleItem(aCell, [self isRichText], _(@"&Make Plain Text"), _(@"&Make Rich Text")); } else if (action == @selector(togglePageBreaks:)) { validateToggleItem(aCell, [self hasMultiplePages], _(@"&Wrap to Window"), _(@"&Wrap to Page")); } else if (action == @selector(toggleHyphenation:)) { if (!hyphenationSupported()) return NO; /* Disable it... */ validateToggleItem(aCell, ([self hyphenationFactor] > 0.0), _(@"Disallow &Hyphenation"), _(@"Allow &Hyphenation")); } #endif return YES; } static NSString *lastOpenSavePanelDir = nil; /* Sets the directory in which a save was last done... */ + (void) setLastOpenSavePanelDirectory: (NSString *)dir { if (lastOpenSavePanelDir != dir) { [lastOpenSavePanelDir autorelease]; lastOpenSavePanelDir = [dir copy]; } } /* Returns the directory in which open/save panels should come up... */ + (NSString *) openSavePanelDirectory { if ([[Preferences objectForKey: OpenPanelFollowsMainWindow] boolValue]) { Document *doc = [Document documentForWindow: [NSApp mainWindow]]; if (doc && [doc documentName]) { return [[doc documentName] stringByDeletingLastPathComponent]; } else if (doc && lastOpenSavePanelDir) { return lastOpenSavePanelDir; } } else if (lastOpenSavePanelDir) { return lastOpenSavePanelDir; } return NSHomeDirectory (); } @end /* Get list of supported encodings from the file Encodings.txt (containing comma-separated ints). If the file doesn't exist, a default, built-in list is used. */ const int * SupportedEncodings (void) { static const int *encodings = NULL; static const int plainTextFileStringEncodingsSupported[] = { NSNEXTSTEPStringEncoding, NSISOLatin1StringEncoding, NSWindowsCP1252StringEncoding, NSISOLatin2StringEncoding, NSJapaneseEUCStringEncoding, NSUTF8StringEncoding, NSUnicodeStringEncoding, -1 }; if (!encodings) { NSString *str = [[NSBundle mainBundle] pathForResource: @"Encodings" ofType: @"txt"]; if (str && (str = [[NSString alloc] initWithContentsOfFile: str])) { unsigned int numEncodings = 0; int encoding; NSScanner *scanner = [NSScanner scannerWithString:str]; [scanner setCharactersToBeSkipped: [NSCharacterSet characterSetWithCharactersInString: @" ,\t"]]; while ([scanner scanInt: &encoding]) if ([NSString localizedNameOfStringEncoding: encoding]) numEncodings++; if (numEncodings) { int *tmp = NSZoneMalloc (NULL, (numEncodings + 1) * sizeof (int)); encodings = tmp; [scanner setScanLocation: 0]; while ([scanner scanInt: tmp]) if ([NSString localizedNameOfStringEncoding: *tmp]) tmp++; *tmp = -1; } [str release]; } if (!encodings) encodings = plainTextFileStringEncodingsSupported; /* Default value... */ } return encodings; } void SetUpEncodingPopupButton (NSPopUpButton *popup, int selectedEncoding, BOOL includeDefaultItem) { BOOL defaultItemIsIncluded = NO; unsigned int cnt = [popup numberOfItems]; if (cnt <= 1) { /* Seems like the popup hasn't been initialized yet... */ const int *enc = SupportedEncodings (); [popup removeAllItems]; while (*enc != -1) { [popup addItemWithTitle:[NSString localizedNameOfStringEncoding:*enc]]; [[popup lastItem] setTag:*enc]; enc++; } } else { /* Check to see if the default item is in there... */ while (!defaultItemIsIncluded && cnt-- > 0) { NSButtonCell *item = [popup itemAtIndex:cnt]; if ([item tag] == UnknownStringEncoding) defaultItemIsIncluded = YES; } } if (includeDefaultItem && !defaultItemIsIncluded) { [popup insertItemWithTitle: _(@"Default") atIndex: 0]; [[popup itemAtIndex: 0] setTag: UnknownStringEncoding]; } else if (!includeDefaultItem && defaultItemIsIncluded) { [popup removeItemAtIndex: 0]; } defaultItemIsIncluded = includeDefaultItem; cnt = [popup numberOfItems]; while (cnt-- > 0) { NSButtonCell *item = [popup itemAtIndex: cnt]; [item setEnabled: YES]; if ([item tag] == selectedEncoding) [popup selectItemAtIndex: cnt]; } } /* 1/28/95 aozer Created for Edit II. 2/16/95 aozer Added multiple page support. 3/28/95 mferris Removed some old code and fixed firstTextView method to just call layout manager instead of doing it itself. 4/11/95 aozer Paper size read/write support 8/16/95 aozer Added plain text tabs (but they're semi broken) 10/4/95 aozer Combined open/save and open/save with encoding panels 3/3/96 aozer Got rid of page layout accessory Switched over to public RTF/attributed string API 4/19/96 aozer Foreground layout Create each document in its own zone 8/29/96 rick Added potentialSaveDirectory for untitled docs, to follow the main window at time the untitled doc is created 11/7/96 aozer Hyphenation support */ textedit.app-4.0+20061029/DocumentReadWrite.m0000644000000000000000000002500310506737274017141 0ustar rootroot/* DocumentReadWrite.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. File I/O code... We define a few convenience methods on NSAttributedString as well. */ #import #import "Document.h" #import "Preferences.h" #import #define IgnoreRichText NO #import // For memcmp()... static const unsigned char bigMarker[] = {0xff, 0xfe}; static const unsigned char littleMarker[] = {0xfe, 0xff}; static const unsigned char utf8Marker[] = {0xef, 0xbb, 0xbf}; static const unsigned char rtfHeader[] = {'{', '\\', 'r', 't', 'f'}; @interface NSAttributedString (EditExtensions) - (id) initWithRTF: (NSData *)data viewSize: (NSSize *)size hyphenationFactor: (float *)factor; - (id) initWithRTFDFile: (NSString *)path viewSize:(NSSize *)size hyphenationFactor:(float *)factor; - (BOOL) writeRTFDToFile: (NSString *)path updateFilenames: (BOOL)flag viewSize: (NSSize)size hyphenationFactor: (float)factor; - (NSData *) RTFFromRange: (NSRange)range viewSize: (NSSize)size hyphenationFactor: (float)factor; @end @implementation NSAttributedString (EditExtensions) static float defaultPadding (void) { static float padding = -1; if (padding < 0.0) { NSTextContainer *container = [[NSTextContainer alloc] init]; padding = [container lineFragmentPadding]; [container release]; } return padding; } - (id) initWithRTF: (NSData *)data viewSize: (NSSize *)size hyphenationFactor: (float *)factor { NSDictionary *docAttrs; if ((self = [self initWithRTF: data documentAttributes: &docAttrs])) { NSValue *value; NSNumber *number; if (size && (value = [docAttrs objectForKey: @"PaperSize"])) { *size = [value sizeValue]; /* The size has the 12 pt padding from old Edit; compensate for that... Note that we should really be getting the margins here! */ if (size->width > 0 && size->height > 0) size->width = size->width - (6.0 * 2) + (defaultPadding () * 2); } if (factor && (number = [docAttrs objectForKey: @"HyphenationFactor"])) *factor = [number floatValue]; } return self; } - (id) initWithRTFDFile: (NSString *)path viewSize: (NSSize *)size hyphenationFactor: (float *)factor { NSDictionary *docAttrs; if ((self = [self initWithPath: path documentAttributes: &docAttrs])) { NSValue *value; NSNumber *number; if (size && (value = [docAttrs objectForKey: @"PaperSize"])) { *size = [value sizeValue]; /* The size has the 12 pt padding from old Edit; compensate for that... Note that we should really be getting the margins here! */ if (size->width > 0 && size->height > 0) size->width = size->width - (6.0 * 2) + (defaultPadding () * 2); } if (factor && (number = [docAttrs objectForKey:@"HyphenationFactor"])) *factor = [number floatValue]; } return self; } - (BOOL) writeRTFDToFile: (NSString *)path updateFilenames: (BOOL)flag viewSize: (NSSize)size hyphenationFactor: (float)factor { NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSValue valueWithSize: NSMakeSize (size.width + (6.0 * 2) - (defaultPadding () * 2), size.height)], @"PaperSize", [NSNumber numberWithFloat: factor], @"HyphenationFactor", nil]; NSFileWrapper *wrapper = [self RTFDFileWrapperFromRange: NSMakeRange (0, [self length]) documentAttributes: dict]; if (wrapper) { return [wrapper writeToFile: path atomically: YES updateFilenames: flag]; } else { return NO; } } - (NSData *) RTFFromRange: (NSRange)range viewSize: (NSSize)size hyphenationFactor: (float)factor { NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: [NSValue valueWithSize: NSMakeSize (size.width + (6.0 * 2) - (defaultPadding () * 2), size.height)], @"PaperSize", [NSNumber numberWithFloat: factor], @"HyphenationFactor", nil]; return [self RTFFromRange: range documentAttributes: dict]; } @end @implementation Document (ReadWrite) /* -loadFromPath:encoding: Loads from the specified path, sets encoding and textStorage. Note that if the file looks like RTF or RTFD, this method will open the file in rich text mode, regardless of the setting of encoding. */ - (BOOL) loadFromPath: (NSString *)fileName encoding: (int)encoding { NSData *fileContentsAsData = nil; NSDictionary *attrs; NSString *extension = [fileName pathExtension]; BOOL success = NO; BOOL isDirectory; if (!(attrs = [[NSFileManager defaultManager] fileAttributesAtPath: fileName traverseLink: YES])) return NO; isDirectory = [[attrs fileType] isEqualToString: NSFileTypeDirectory]; if (isDirectory) { if (![@"rtfd" isEqual: extension]) // if directory, should be .rtfd return NO; encoding = RichTextWithGraphicsStringEncoding; } else if ([@"rtf" isEqual: extension] && !IgnoreRichText) { // file looks like RTF encoding = RichTextStringEncoding; } else if (encoding == UnknownStringEncoding) { // do some autodetection if ((fileContentsAsData = [[NSData alloc] initWithContentsOfFile: fileName])) { const unsigned char *bytes = [fileContentsAsData bytes]; unsigned len = [fileContentsAsData length]; /* Unicode plain text files start with the Unicode BOM char; check for that first... */ if (((len & 1) == 0) && (len >= 2) && (!memcmp (bytes, bigMarker, 2) || !memcmp (bytes, littleMarker, 2))) { encoding = NSUnicodeStringEncoding; } else if ((len > 2) && (!memcmp(bytes, utf8Marker, 3))) { encoding = NSUTF8StringEncoding; } else if (((len >= 6) && !memcmp(bytes, rtfHeader, 5)) && !IgnoreRichText) { encoding = RichTextStringEncoding; } if (encoding == UnknownStringEncoding) { encoding = [[Preferences objectForKey: PlainTextEncoding] intValue]; if (encoding == UnknownStringEncoding) { encoding = [NSString defaultCStringEncoding]; } } } else { return NO; /* File couldn't be opened, I guess */ } } if (encoding == RichTextWithGraphicsStringEncoding) { NSSize size = NSZeroSize; float factor = 0.0; NSTextStorage *newTextStorage = [[NSTextStorage alloc] initWithRTFDFile:fileName viewSize:&size hyphenationFactor:&factor]; if (newTextStorage) { [self setRichText: YES]; if (size.width > 0 && size.height > 0 && ![self hasMultiplePages]) [self setViewSize: size]; [self setHyphenationFactor: factor]; [[self layoutManager] replaceTextStorage: newTextStorage]; [textStorage release]; textStorage = newTextStorage; success = YES; } } else { if (!fileContentsAsData) fileContentsAsData = [[NSData alloc] initWithContentsOfFile: fileName]; if (fileContentsAsData) { if (encoding == RichTextStringEncoding) { NSSize size = NSZeroSize; float factor = 0.0; NSTextStorage *newTextStorage = [[NSTextStorage alloc] initWithRTF:fileContentsAsData viewSize:&size hyphenationFactor:&factor]; if (newTextStorage) { [self setRichText: YES]; if (size.width > 0 && size.height > 0 && ![self hasMultiplePages]) [self setViewSize:size]; [self setHyphenationFactor: factor]; [[self layoutManager] replaceTextStorage: newTextStorage]; [textStorage release]; textStorage = newTextStorage; success = YES; } } else { NSString *fileContents = [[NSString alloc] initWithData: fileContentsAsData encoding: encoding]; if (fileContents) { [textStorage beginEditing]; [[textStorage mutableString] setString: fileContents]; [self setRichText: NO]; [textStorage endEditing]; [fileContents release]; encodingIfPlainText = encoding; success = YES; } } } } [fileContentsAsData release]; return success; } - (BOOL) saveToPath: (NSString *)fileName encoding: (int)encoding updateFilenames: (BOOL)updateFileNamesFlag { NSFileManager *fileManager = [NSFileManager defaultManager]; NSDictionary *curAttributes = [fileManager fileAttributesAtPath: fileName traverseLink: YES]; NSString *actualFileNameToSave = [fileName stringByResolvingSymlinksInPath]; // follow links to save BOOL success = NO; if (curAttributes) { // If not nil, the file exists... NSString *backupFileName = [actualFileNameToSave stringByAppendingString: @"~"]; if ([fileManager fileExistsAtPath: backupFileName]) { // if there was a backup file, delete it [fileManager removeFileAtPath: backupFileName handler: nil]; } // if user wants to keep backups, move the old file aside if (![[Preferences objectForKey: DeleteBackup] boolValue]) { [fileManager movePath: actualFileNameToSave toPath: backupFileName handler: nil]; } } switch (encoding) { case RichTextWithGraphicsStringEncoding: success = [textStorage writeRTFDToFile: actualFileNameToSave updateFilenames: updateFileNamesFlag viewSize: [self viewSize] hyphenationFactor: [self hyphenationFactor]]; break; case RichTextStringEncoding: { NSData *data = [textStorage RTFFromRange: NSMakeRange (0, [textStorage length]) viewSize: [self viewSize] hyphenationFactor: [self hyphenationFactor]]; success = data && [data writeToFile: actualFileNameToSave atomically: YES]; break; } case NSUTF8StringEncoding: { NSMutableData *bom = [NSMutableData dataWithBytes: &utf8Marker length: sizeof (utf8Marker)]; NSData *data = [[textStorage string] dataUsingEncoding: encoding]; if (![[Preferences objectForKey: WriteBOM] boolValue]) { success = [data writeToFile: actualFileNameToSave atomically: YES]; break; } if (!data) break; [bom appendData: data]; success = [bom writeToFile: actualFileNameToSave atomically: YES]; break; } default: { NSData *data = [[textStorage string] dataUsingEncoding: encoding]; success = data && [data writeToFile: actualFileNameToSave atomically: YES]; break; } } /* Apply the original permissions to the new file. Also make it writable if needed. */ if (success && curAttributes) { id permissions = [curAttributes objectForKey: NSFilePosixPermissions]; if (permissions) { if ([[Preferences objectForKey: SaveFilesWritable] boolValue]) { permissions = [NSNumber numberWithUnsignedLong: ([permissions unsignedLongValue] | 0200)]; } [fileManager changeFileAttributes: [NSDictionary dictionaryWithObjectsAndKeys: permissions, NSFilePosixPermissions, nil] atPath: actualFileNameToSave]; } } return success; } @end /* 2/21/95 aozer Created for Edit II. 4/11/95 aozer Added some preliminary paper size support 4/13/95 aozer Permissions 7/21/95 aozer Follow links correctly for saving 11/7/96 aozer Read/write hyphenation factor in RTF files */ textedit.app-4.0+20061029/Edit.tiff0000644000000000000000000002252207747541557015152 0ustar rootrootII*$P0@P0@PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0@@@PPPP0@P@P0PPPP0@@@P0P PPPP0@P@P0P P0PPPP0@@@P0P P0P PPPP0@P@P0P P0` P0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0@@@P0P P0P P0P PPPP0@P@P0P P0P0P0P @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0@@@P0P P0P P0P @ 0 PPPP0@P@P0P P0` P0P @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @0 @ 0 PPPP0@P@P0P P0P0P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @ 0 @ 0 @ PPPP0@P@P0P P0` P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @0 @ 0 @ PPPP0@P@P0P P0P0P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @ 0 @ 0 @ PPPPP0@P@P0P P0` P0P @ 0 @ 0 @ PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠P0@@@P0P P0P P0P @0 @ 0 @ @0PPPPP0@P@P0P P0P0P0P @ 0 @ 0 @ @0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠``@P0P P0P P0P @ 0 @ 0 @ @0PPPP`pP0P P0` P0P @ 0 @ 0 @ @0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP``P0P @0 @ 0 @ @0𠠐PPPPPPPp`А`p``@ 0 @ 0 @ @0PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP`````@0`000 @ 0 @ @0PPPP`pАА`p`@@@ 000 @ @0 @ @0PPPPPPPPPPPPPPPPPPP𠠐`````@0@ 0 @ @0 `00 @0PPPPp``pP@0@ 000 @ 0P00P0@pPP``PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠐠``p``P@0@ 0 `0@P00@PP@pPPPPPPPPPPPPP`pАpp`PPP@00 000 `00pPPPPpPPPPPPPPPPPPPPPPPPPPPPPPPPPP𠠠``p``PPP00@ P00@PpP@pPPPP`ppPP`000 @ 0P@0PPpPPPPPPPPPPPPPPPPPPPPPPPPP𠠠PPP@ 0 `00P@pPPPP P0@``PPPPPPPPPPPPPPPPPPP𠠠𠠠PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP𐠠𠠠𠠠𠠠𐠠PPPP𠠠𠠠𠠐𠐠𠠠𠠠𠠐PPPP𐠠𠠠𠠠𠠠𐠠𠠠𠠠𠠠𐠠PPPP𠠠𠠠𠠐𠐠𠠠𠠠𠠐𠐠𠠠𠠠𠠐PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP00$   $$*%%%(1:%REdit.tiffHHImageMagick 5.5.7 06/10/03 Q16 http://www.imagemagick.orgtextedit.app-4.0+20061029/EditTitle.tiff0000644000000000000000000004374610506737274016155 0ustar rootrootII*F P8$ BaPd6DbQ8V-FcQv=HdR9$M'JeRd]/LfS9m7NgS}?PhT:%GRiTe6OTjU90BHm_yI  JK`]ol.K(,&^Na;J+]Unl#BLMy6#[,@B a~C:!S^6DI7lsLnN^rh6 |3Y<tA%p2/tvZ]NvR ȇI̳&y)h ;P<Ѝȧ/3` bꁟziΆY;9=, K#F()/C#E'#~8IF,~<Ӂ=OHQEeLx',\ՈN!ų}Aж 5c Ihف2@}%iJർw'}wHZ]R(a^yE}NJHF(^XIL :By,yȧ~L!2rǑXB%b鴁8`p->T(ytzPwriGգ":iPjjԲ+C z:1Q Xǖz gBX[`4 ;{p# i\nV `" ˛h"@ 7Phl}1tEB ڻz-;y DMu ) Yʐ*rGs&@>zڇy8*,W: 0A@0mFaڇI9Ff0!spd .]RFJ (HC(#Q@qedzǬ#r9\c@H;'sZ @3}   @QÇ- -$ζX(`.Q*8|CDMq e#6f@6x( QQWfc;ܴ/ e#Æ]uf[{]lM6Qd@ nwYH%1`|80-QֈE1>$TXLXxg2o4:@*@z;X=`1dqn$_[ '5ՍEEhB7p}Gƕ0Y]JD_8?l+5c<O$`~!rlܠ @ B@ adQ!4n bae"FTb`X:o!!Ir|4Aʢ_K4NHJHHe&aP@TW6 `J0gǂLD nJ ] BZg R P0 h$OV 6e,I` oQV I|(6iDF#d` :@OJjpAtaHUh^Iz jxb♁擡hऄ2"!&"(!tmJ4h~" oT-8H&1r xH0:OH%F q ,SI ́GAG. ANzI`.aN't$%+!HN>zhF_Ia ay(,ЊbaLD&WƠG BIa]N%iBb "2¡|nAā<Ư"M@d74 NIt QZ("^ĵ<5mAȞE&RP!@:@N7M8K*ҰҴIr ,]_R-r*bl @@֧T]\mA,HLR !$ 8 [p$1>H0/ ]:Ts 8L*^I`"A "E!XŶHH-*PX"aG̳@2#AƇ:5e3ZA5 B!& C, e#8Zq} :9Gb@l #V+ MN愁1!p`/TI`20I6(Hֆ,j!4EDMEUEEŧFFEFFʸr ͜DhhϮāa{_Mz8#m! /O/S/G0Id1 Q ` aށ.h/ā3D5 7] u(q!l$fah}VT \`Y"@\a *HHAA,L8chAQI:TB@x"zA`.L!z26W1"-+,.:@HlLpuom+ehC\s]]W]'^^_F'O!&5 [`VI2ֈTp/xl8w j5I)ǩ"6F,ԣlB<@`@i8HH `p7P ּ ` e!a}pBPN@\KbN:`4`a, ҬMĄi{``0w!.alhHAi:t=bB T#bLug3gah O!* N`4@@iV'BHD]Z# d QK2L(ԮP"tm85 8Dz{ g, I ;, 8`:p` k氩bsVbaZ!ܷ3;|̘w"}~~~eD0 re-89(dT#6Vragm_aǍb-m !FP{nĊHgTp`` @d9{`4!n 4@@b@H@<@@fod".0x`$L@5N" EI `|%qHO0֊!k#aM@IlABωgX a!Eɾ1GF hRz G#kw  0F %a`4p` |"im"^ "A/q ``, C 9, ;>Ӈ%G|ԠTdH9ӝyڜBYy 9IXVHfSxHVn"Oa8 b8G26 H05I`;I t H 4M+ {? "*W[<i nr(h?>aӢA3"/`NL$"REafBqHax)tL #)ǩd|C6ߺ ზ~ `I!Ae1Hht&O1 |< sn!l6*f> ӻ""t9t + `܌ ڼ$Ln#mfbopQǕB&pABoGk09p+dD"LHąf 8@v=$+d~" VR䅷HBā!vF̴C|P8Q r P. R# A C4iKZ#sJ\H[``pްI Qݥy!ꮮ#>BpP0&xsY[b]=@:@uNHY0N;/Jj9p 1:߳ׄ)hj >/KSQT`ISYXH ڥIam)\{sqP"ĢKu=pȋf0`n)H S5\UvTb@ MBNs]pm@-tx-[iH ɩ#Y}UWjC=X^DR%i{8.bȎ7 A?˓_&"8/ќ\Y,.^0ގI)H(4E&/+ЪԛmFv粞$~b:A\^ 1UI%nPp42J#*n % H,#Ȉ0R|*)zM'64GwGvROȷ@^Ц؉D/l+Y< 4(@oN'qRaU Nw"9gBRԪ` S[n}q`AL#'ifI^Hv% o 0* Pcr7dÂr1G%zM9֛ I,$_&o~X@ EVH4bs'`36&7ʒRlLJ#W6c:S=\h@f?v秅B hyiloQԉ^)qFVЂ ղ9jZUHŸɸā(ͨ ԣ"w/R/q@$=\jg:R{df1^vtF`4dke fekA}Ѻ;wchd+f'ӽ8 GN [h{'oa PA# _qNSdBc#FU{8aM8\0,0 0$`F##4ƍ 0 Z/3?,'h\E\6h0W CNi`( ;!^Qxv<d$Qi߰#tH/ &)xmFExVX0U5vu1N6@rU wPm-@<!|0+`.G:-B! @eCכäv,yGX!iiHݝ04P4-Uc? -)P+ A ^4p(4B$n P,gsY}@t8ZEn]fҕ Dj.1.'5بb]2ѕcbt;:ǘ gA@7%\6Wh$ kq ШڄlGJC^,C:FxXTYnaō7(h;Aƒk.X-E,xQyTF*.17*0QSH+|q#5 c6hkAPG`G =Ӑ6W05˃3@! G|1Cȡ,J cP5UaQ껤_/_6XBÕieb:uD yx_LdGHtJLKDDЋ9EQR@7T, 8xtq`(|rAdB S yH;X Pp)xo=.r8s؛;1D(HcuI\:+1`6G끘⨆HL%8CI[M@+PidM cӣ;2WMysPc8dh5QLPM :<'z!XШr 8wt8;V"(4 {0xz4Wb^Om(~*ueAihHJx5(قx5OȁvS,WHf8MHMYh|͙uMMM RI 5](}05q8[i3u )S0 _SPk(@zYyyW$14x m=@(T0{4u X0h/A-N9Մ$ɕ@i;LtPla2Hi1 qyjx"ΤS Lj|kFSc,FYaXZ55T SP_cPԈx+s(\3Kv7rk=m(j允[mX#JGubzB*7XsO@zQOXqWʗ9!s,BHkU bV5dVPfVuhThmp) ^3ֶ0wSZh^ZAq |N$# 㓍`PGe~ 9;hTx=`W3/ l|ؔX DhcMUqq#@ Q&/E-ZsJ(HD֕j^$Bxw1FI뭨vXBܝ(|8чDh@= P#Xm N~/fG((z)`mF`9+7:@ȭc̀#c,O|P5x)3ZިC`^\@!a{3, Rس8h H'ҍ)8@@q^aIi6n8H`zJ@T)=?s$sYJyqTQH)eUŘ&p(0z~$>aXt^-K9HFIA:+p ʚZAeW5cNeg'fh iWk &l R)2 0k\hyOx]3ㇵQ@%HZaPaφD P:"kʈ啎5HAPǞpD bgx-ig "k tsNPhIp}^%٤U #CӐ!:x{.iGR\t* kZXx)gP: ; 8g`m;g /Ika/,m!~{C0SGosУy,Hcժ !P!qz慡I ӠညYUܐ~ݛn6n.8eP6 /B8[+/5sq,q"C`l ԇ m+B詇z:e؁݊ 8aM ;,!LF1Kt`mt`K=9Ľ‹r+ `1hp }K8hmHoT`v;X 8$ ^9ׇ:)k v>nZ"Ti+mksXAcC4OWxb /,ȇ[+Y;  8xpݫ BZ+qZNt`"uRu0u@Pdug^upg# fffҙ΂x!U)"&#ކ$> m>)jnRo @J>Qcϑ)nǘi/ȫrpi:%:P6 yNh 9 8]DjM38}cJ1C c4 {'{P9/ G&RC`OxʛAWeۚ.{F߳%:cto٬wfM]8[̈́9#o凞Mf4KOTO3O)/\tKS_0󍿲 bQ5,ν* 7YLiKֺ'TܯcXm ]0L0ެݧH/iyn2=q(7vF{y@}^hpd$m Lt锗PaL4}0;\%B؛Elq@z頊zē cm.˩43>4-Jӵ1TL +;5gmG^[&yK(?%GK sH4`wT H h.X OTp"j*:mK#9+YUl'(]$}+*6|)=dqiRbfED`3 dHodi-^3`=CBY/"sXH@z-!:|K` @@ΝϘ%n. ,a 0ɵ281*q4k%4j2APfVِA2Bh GHe #o4_?/!ȅ|XæVp)+pl -J8sыUm1 |^ѶX%1P48EI_It8P_xPۅi* ~ Q?x@9/4h@8ߍS0<[;tLbH@:CiQ83qÄU@ \}1 %&tfL;\ wF5/77NX *%QDqi~ہFx Fa +@06%r BH̖XPtn02€N:elM%M[K/UFL6v*0;ˑJ9Y"+ Na2e6z@7x#Pew`o,0D_+aң\sq2l-KmY/j,}`3ј6>fKei.uit6&g9k<VX`HvED| 107Xku؂d^tG$ mAƤW!s $d:)!a@D,\ AY-A (;A#a2af0x/fcZBN #0q .3 0 fJ`8!846( c(n z;Oel A `zdAdRNifKg!>rB(v 4 `Fvtm"oF'R` nHa[w`<2a;;a]N`KJ ޸``@] PƦ*`{* a 0$'`8l+!͡VR(oz 1A!^2 q* +#a6} gd$q.g14Dw(3h3E4 9G`k)`F6g悵(BhP9gY) 2 ";AT</,H1 +#a*#`zФ=iM"9A%Ec@2-xY/\0V@ Q0x P4p4% @KAm@ !a 8a%"X#a"KA洁@ b;8R9..,@ ɠaF`$/%ACRQ2 $.(@AH3#֣+Hq>g !7@#a#as5GB 4 h=FIl"6"4>g66r>vqzV83 ӊͳ9"59m@:.) a-hX |@p( 0!h&j!hZ g#B8áDPF06( a~Q~IPz6cXF Y0Zi!Ҡrc4 eb6'A겶6! bau)`b146{(CDm x 9. "_%_gv 1@ *Y'D5`<.&dD(0FDJ5A6H=d6DklŖe!x >2``lQ2qz&DF6 U$K"H/\-.AhQ^`QSYJ3YEYZ('ZhZ[/[@[5[ҪK 54TظNgv;A/~\._wKוyzz{2A{mU,EdF`bp4x.5r.h ^LD `mzAASь$Twaw`8R8 qYdb!<,{@ #a:- .w`Ei¸G.BTΧsr>3ApR*.'-pQw eu y9 erAvҤT4ۋ4S!'W7^b3J:Erzס`B+22-4(Y$DT:3w`wɸv: Vy!yR9A0`HyXAZ9p F Z   %d qd@l+b,b 3N TC A PD@ `αz~('gj6'knQc"$`G6, e,vGgv<>aa-2c:x`t}d5<¾r!DU&Zd1H*RrA/) ͠1۽! %,;Cp*%Al\ D=yT<.`yp)Š".bR={V{Z^b2[f{jSR,6xC:Z_#mB#[q c1'!gZ(ZD q^ !^G V %A%|iS1v($B,{0r dzljHnoڠ6wa`,B@#:vfFt:0<Q0\9r6A`ʋ  FxDa+@"2b::0,Tb5 _KnHGbR ! 3'ˏ7 ؎ F?RA :O(#bX6H.n . mA@6$D6[!L+ѨKTyH``ńJ Y`ش$ т4QAx+n& l3fb5ȃ=ؽݖcݚ2]:}S9}jO'jUF!|#`ܥbQ+z.p"- \R83"7 ##w C3!@QN2ы#A=U%vb dD1Ú[D2AġO#~c&Fղ>e,* s@'~RE,kÀބͺ, "$DQ(39kfs4*DAG 87{a-:_l-{EqF8G߰ >>X,Y-5;wEzYEr͟Y+M Rԁ,,U|]`E(v鋽H}n@ Mey2 q%J#(޹8óh4(yWcj`umo g`FJ>?% 9O CKs۟͞x5^Jȃq%Ar0 ?iB̞{c拴r7'J#9PRCr+7B2  AM  ȤZD=AP !"8uƲ |򑼤4$@x /.H (4!:}(q,ܞCV  פ@ZD$@Q(LȀkПG;8zǍ:ZKBt$[7P)-  0+[gzrяA{r8R:Hg"'{Bqitm'gcʱ dnS@.p`}%s,)< ܞ-SGyHHBQ%f'g xf۵pYS* ȁ@2؃3@+4 @Ąm܁*S*'Мґ)cqˡ,gi` .1!4&jO~7'ʐ|7;:{DҊ Ÿ$ JL!P!!"DR,)ϿSxiIF >Rö6 ImWxiF\ɡg*f|0XYgO,؃LHETVNA$q## "B&iQG1#IHpr+2nd-28@clpg"ѸFd?r:5a%ב4Tzp轎5>kS@)H})ط>NAPjk̕2=c W?DMDzpz!B/2υy8Dzy (@lKv~ڏRWuHBҔ\Gk#kkw- 2[D3~7QL驶M5 dYaHu!UZۛϺ/E *%.6 hacr<dӮ@ץ9tTةdf1yjr# o\˖ni3j.6 &hmٻBr~Lܝ'P]Jl`~ȇ鹬5rkuL;d=s~hȺvdA ތpg;.49Gaiv^u|Q]~] h)p^Wa>bv%׼6G}i_o~= gs?7m.Gx\@@8G GG@FGG(=R/home/deek/Source/Backbone/System/Applications/TextEdit/EditTitle.tiffHHtextedit.app-4.0+20061029/EditTitle.xcf.gz0000644000000000000000000004315710506737274016420 0ustar rootrootJEEditTitle.xcfwxTE7>lnz! BM$" HG4"XbG`P V, ҤCS~g}]=ss鳮*v┒)gNfw>uLˤ ?I{?c_}5:NJh]̚5y7o'\3}& 4dj38YNvM7}RT1u3'L`'.>gJ[Ŕ̜3MbB—W^; ϞZkLDk hMƨ3e Jn"Mٙ? .\D5WU>ӇMB?|`jiXѳVΚƟSκN=:= XΪk㙑ǐN\A>?N|=E]XX[k!ǫY!SlaXS RXGLZ4ӓZlӬ;>h"T ebMTɖ^OeT6[5e׹4Du (J.PIH4p6P|IWÚuLD1@bMJ-Ya ѿ47c]R)Q m1`~ 4vxǸ[@yskt7 e{P{'.Cۮ 8BDS7ȵu~W]"b@n24LmG. jS?d1mkV-wnͅ` .g(+zL|E\I) @m虯hZ2fHmn޹ɡ"dg3-Nc,2MB6NZld"W/L"G5myQ ?C*C2qF&M wN~&Damk^85b灥wAPXVmɽ 37s{ソዝqB%}0"7b8i`8GE(DI m\]M\+ڡiz` Bs=hlB5m4c ^]O4r: Te)[Puޡ IJհ."R0׉f+u`Q/ _aߨ=2i1Mp]iw${Gu#4qʹZ('4"H"~ 0"VAaK!1J\\Ohwl]6') 8eSLk{P_EvUFb$WJQ%Wj,4adfCXt?ԝmp/;Y#NX.{Za/qfaCWa+>EhwH = ӵIe {گ.t@ޤ1!+P! 򝇲6Ǒ #Cq_41Kx` !/(C> V7$>3 GAPۙa[,`;ga w DLu1J}1L{]ٷ2V,c<$@YS$$`gjJvHC؍7?Zk#o'_Znqhc,œHD)|`ޥx':<`&MCvu'0VCr1d0.ƦڮsW'#i$+Mk™vMy [y؟Hw !H\ Ũ7 TuOڮ=ɔv)sN ZۑI_pH{W)ڲ!^!WXļAmjpr1-yb$p&Ňis X2xh{ȼK;=eA)wT/R` 5\?-Cfx]LP=sUg3КsyyP8l!m::\BhJ4bVK `.i/ ɳ4'`0#TTmJovIfC4󈦽n*c)՛]Bhv,٭isf hšq%:(4bu3Yʳ9kB8>fRB[Γ&A'CmCTŊp{yFO+SYZ&l`xJӞS*>e:dF{e2CG= NKNfuHv[G` ߫i􆏑,u-S]`^Fa O,;T5t콃"g O#9heiM}Ek)`^XhksU='@XgJC Ecdi)M%ﰧg M.ճxIIǯEEs UK8vZ/n.U-\xEp6@7ɭ&~@SHKlF8h0H1cuFY([1:[ 9J~iF?3b](M (;c'0[@ziEVsA4h  @c X}a)D|'dbeYy 7[hGRG Ѩ%pJ̽h.T+w ^.g7íhzd+>N ,Z3Q"z1pz/VE#EÂAS5DwpWYa\beCdu'i}YOv"eŬ,"t 35a<[y8[q VXZ(DsaMOv )]3>(")uglӹ%{_|RSI 򄻼@%W$K,k<ۜc*/4t^_hyMy/aߕ:x[iܞĒHlKHvNE?;-E5a|ERcy [4iQ[wH^C~X.{'q%F-O|ꗪ |y1O)V" 56ùOPfބ*7KоHC8:+ !OWw,yTp!~`=Oc[6'7ƓOܼ UQU^(Tӆ* PuTvG<_ˣ|ǵ0ƹzl&dNϣv Z5pwzUdf Ij|5xұUUËͬ77ȧUxc7FɎ z E(oBii] z#VEj)zmk ܧ4u6X GS}lp&Ԑw8idҫ{M$s6ps1F}؍*!qGz y$y,5B|5@{Ym Uzv33Mx+h2hf'nKC%kzV ͽ4n|8WDrNMN"*۩nhzB.{+P5|!BOyU3Tvhͫ4nCk0ZiY(IӦ變\<\?5\ h i(o6_TG95tfi%`\Ϥ%[Cw۳rm@%\_ ETk!/VRu5M rnqi ,͝ Jzh !hc؛$ҵc]U][Ja*X$}(,;5 nKc̕ʊn㸫Щv}adESKERiB yՀo.lnd}r@*ē <\|YC[+,.d}z7ז󒳣oaBx&^t4x{4C𤶆ՠѻEB|lφ Z-VV RDzѴ'ƴt=2?jOt<3ArYx[ WnY\Qp?eP%ӟY-X Sj"P:pϓY4*8<_Rl|Wu5R/$pC>@`KGyUqU%>SBo(ly85tF̕|:αɐ'vO'ɓϊx:ώs:- zwl)pjkT yvtI.SzB dܧC*fȍgPbKؑG{\{t~& 9RΤgĂS^ $UI.)h1*İ$$!!INQ;~& TU |D4eaF H ,@V ^dɅTr4~` hH^DTG0$K(;$ Ʀ@R<As% $ZήLJA%7 𒛜4J M|3ꤱir@D u:,1$E*!s| q0s$j:K;˩8ͯπncUz/pt 4f}+]Sڝ\0uʙz$Oi]:A Y0 AAq Ƌoؤx+ѠĠ!]د('ѡ!$ЧfrM+l $TMŽN`Gw`+{+J)R?u xqđUnWy1I HUh z;`q{B!eJ xi=DiEr$]ZK*(bjk\y܎JqE^(z!e^W'"8^~ȆHyJ 'VRA}KᡮHI:OF&s8ݜDR1rd.BKƊЍ4gj9Ԃ$p b B<)vJN(*H&JƂ v0.ĝACঋsP#>.crJ|5|!2n.:]&kD)B>J4tA6:9.)8(.gݕx,}@ uA:XYvNy[햼ݒ[vKn-y%o햼ݒ[vKn-y%eɿc1hS`6~f1 d#x*~.ew'%Yfq6x ̷ Yp|afHR|k̔p{o,Vs+6ԑ #_oN)Y5)O>6& 6{wR;^ao:7HBBwգ]V V>SCY&a!bT'BXLw S$L嘱Vy}KnYd"lNvT4l1J˶1p͈ESJN1#΢hTʎ7_+p#jJ^1yAEA0 ]:, #V{`ؕ7^{GZ 6 QC:?߈X/3IYoTBʩnCBpo}" /r/7!^j;+|E/~'ac7ݷb@P;O X~@j5# xFx]8>{Ϸg@kLܳb` c$ǿ[-U_6ɱYjtcJ,l y945Ϳ&&[c?pX7l'Z\w&_߁ CRsp+A)&تuQxŖs̵KeSvuTA(-?/7$}f)s8u^{yee].RDFKJw³(ǮVj621Us.gzPYZv[8 11)Su+ńXs<ֲ{sL ѧ5;NEe9|`gۿs)Ͻ?6efʮ?zރo{Ǐλs dm7fw'[[/=&ݖl>,#]w׿[NX'( Y}W(ς~Ɗ7~Ն>1`:f妟~dLGMC)/GShb,y!nU+X6Oa72f.{`J쐛o Ѽܜ$`J-$ă)M1\Ïh0A$޲FdMJOmQhM$.Fb%BY-y">ƥXVԆ 5HŊSw6hA 26)#gU1# PE>x_('*)@Q性RBj8Ĉ*Xk3C(%]YKxCú0Qs2|<]~IS/v;<|'dq EhNxzxzJ%w97jb6F(`b}2z'U9]hDvClOpϟ;P!Z QἧH0"x" ts0 u`"Bg }:U}B%r#$ #I !;O`ę(`K `D$\vu;]mcTr<1wN!Z{ & Rb4 EAF@9r\E$˧s#M !xy'=LV5ʝMtCh$b誀@KzSUΊ_(▘KO_4Bn@EQV"1+A'KṮ~*}DH\U^1&DR 0.s=\5ܖY^NDZ[=S .C FjdTP^*i"^ 3EbQ$II@7ijG=Һ#^ (qd0\$F\6vnmwnvvnmwn2Y4ZXw,ƌ>x1߆Nv| Fy}$^1eXa!/py\ۺOun}6vz|ݒ, 8a-U9m^AHO& ݸ)- Wq+Xl~C`,q{|Uʷk: x']wWܿ,+ {r+?pA ou)$<ya<~jcs̨w6^ICZǒ}xǠ)xI&EUp.'\>4 ᙰM_T02:g SyQ2hHuY֘=l87Rۿx%&)= vaɥٸЉ_Xe4?ح .fAiQA4&7ESrm^9}q[e Su$R>FL_^[GeJGw)_)|?o~b+%CQ~"if6ԂwxԩCoOf&AQХ,&[L滘Zi|q$9"!+4Q~|>8z3,ON9TF=QiQO_0G5λ{'mymPi gcw4gb|-|r8noAఋ`tf#c?bݒD?[n)ާn{lרo F5d03tjNb.YXg]H*Rw[oH7wIOw> D~ Un?qۯ1w7}xuEӇ8l䝗>[n3naKS]7=qӁ:~εZKJ<;yɰ玬LŤ {Ooh:w{w,O5$}~Wʭ{xl3f^#x^tI lִ?UMi޶:ּFWa;6璍VqQeAy'ܺg3w9'ނu;NEbxy2Wow<-[~^&$gǩ֖oZ=ivQpOnep?{ 㤘Vu}o_LFH‚@:"G8;qK(0 Xʋc3Tx$ $S(G,D^z4q)`FFh& {KJCjԶSx8wx5x:9q;Y1:8"R%nC #>of*~X?Ǎ'u˫ܥ&+NEzGf?'LOQ{xlÉ[~n|):Љ]ǾK/:@5|v AA'V}x P:D.ʧS$ 0Dx%Dn鬱i-.wvgG1}*fmc!_#W'vKL <%!Y{=<@9'z`,_vN~f ^R\ʝY9Xęr_qL,CdriX' :DdIIVDapH8AOymG C^D q6PhKvpك5n$DpN%3eǑb2؟ |~\V3Χ3IpuP78'yppUD3Ņ >d[k1h`9CdbA!.>qA1rHy<<)I1g4 Ezr4zNKj @ \.d=cBzDɠ+6!pL zHJO!9!/cCo y"&u"hsgӨiܬgI3'%0AXMi`m q ]~W1F$q?х`xM!!Cq$SN;:oD39-8e&r0|[/?ǏpFsm!o>"8C(7 \IG^Y0.UcOq& YɫWB n{=__A-l{'~Fyо1V/팷~_M(|>ew= Zr#Mok㍽:v%⭟3FL[_\W/4ZvɭTC>vA>6=swʽ'Z';ų-Bx5_`GƭNsO̾ǃ>8q*#: tpw ss ;qZ\|CmJf H[s{\ †_û_Sʇ7/hw5d*$XJF{ׄ_<)7moʌ7]PcG\ ^з7 Rc_s,%!ўp(uAO+_VMv"VտgGv,TWOԗ7 ōs%I4YL2Gs]x\I(ڄڼ+1۳-xJ؁W&<d+I(KRj }.R&#ٺ}Ǐw.Pɠfjbm6UjBϏ=ᢿNXL0`#Nzg}e%wח_xF->^`Ϧm2rf?~~ݪ*\BHuNeTo|MsIs}v݃]ܵp'vm|$M)naYshm>:V1ʒцO[]HxvXmU{[㩿^z?m#J|$]u 09)Vzѷ{'Μ7/,ϨJּܽ߾/w=&JS}[Ruɑ_SF1(3/eJe Ɔkk`pQzt?_U3-M*Y7uym)d1NYʖ *|7X<5=N6䬝;˖3+R2gJmhx@g@˪aACE0llsʁ(3P ,7o7Wn-#z—p1X8o9 i6GL\-! r8 V :goK+BuD eG&5b&.& Rx9<;ߋSԁ.$܊% hʡ.8DMjʁoĈDIsY1D4:Gr@\qЧk;F|Hh@KM "0 r:u02t# a`8`P)RPIX_V"51c}9 {4//@8D !fŀ$x "BsAHd9E\Čq896 ßvVNމuFאX* )Iqʸ3C=ha H5DY~Dv1a;"*!WzZ-P(m lUHɈ8˪&VHKUVuM,}A 휀e[,2D(4:>43Ys=/mml^^.d3FٗeMGxߥ kۚ($3p$2ձyD#a).07A|sЮR@壬^wʇ/qM"KNܵҁא;i9-Ou>mb`T(O$KUg .݌aiv_u#?]Xֿ==zrz W_ Oo㖠.textedit.app-4.0+20061029/Edit_main.m0000644000000000000000000000016710054671011015431 0ustar rootroot#import int main(int argc, const char *argv[]) { return NSApplicationMain (argc, argv); } textedit.app-4.0+20061029/Encodings.txt0000644000000000000000000000002207747541557016054 0ustar rootroot2,12,5,9,3,8,4,10 textedit.app-4.0+20061029/GNUmakefile0000644000000000000000000000202110506737551015441 0ustar rootrootinclude $(GNUSTEP_MAKEFILES)/common.make APP_NAME= TextEdit PACKAGE_NAME= TextEdit TextEdit_PRINCIPAL_CLASS= NSApplication TextEdit_APPLICATION_ICON= Edit.tiff # # Resource files # TextEdit_MAIN_MODEL_FILE= Edit.gorm TextEdit_RESOURCE_FILES= \ Edit.tiff \ EditTitle.tiff \ Encodings.txt \ rtf.tiff \ rtfd.tiff \ text.tiff TextEdit_LOCALIZED_RESOURCE_FILES= \ Document.gorm \ Edit.gorm \ FindPanel.gorm \ Info.gorm \ EncodingAccessory.gorm \ Preferences.gorm \ FindPanel.strings \ Localizable.strings TextEdit_LANGUAGES= \ English \ German \ Russian # # Source # TextEdit_HEADER_FILES= \ Controller.h \ Document.h \ DocumentReadWrite.h \ MultiplePageView.h \ Preferences.h \ ScalingScrollView.h \ TextFinder.h TextEdit_OBJC_FILES= \ Controller.m \ Document.m \ DocumentReadWrite.m \ MultiplePageView.m \ Preferences.m \ ScalingScrollView.m \ TextFinder.m TextEdit_OBJC_FILES += Edit_main.m -include GNUmakefile.preamble include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble textedit.app-4.0+20061029/GNUmakefile.postamble0000644000000000000000000000152507747541557017452 0ustar rootroot# # Makefile.postamble # # Project specific makefile rules # # Uncomment the targets you want. # The double colons (::) are important, do not make them single colons # otherwise the normal makefile rules will not be performed. # # Things to do before compiling # before-all:: # Things to do after compiling # after-all:: # Things to do before installing # before-install:: # Things to do after installing # after-install:: # Things to do before uninstalling # before-uninstall:: # Things to do after uninstalling # after-uninstall:: # Things to do before cleaning # before-clean:: # Things to do after cleaning # after-clean:: # Things to do before distcleaning # before-distclean:: # Things to do after distcleaning # after-distclean:: # Things to do before checking # before-check:: # Things to do after checking # after-check:: textedit.app-4.0+20061029/GNUmakefile.preamble0000644000000000000000000000161410477017725017237 0ustar rootroot# # Makefile.preamble # # Project specific makefile variables, and additional # # Do not put any Makefile rules in this file, instead they should # be put into Makefile.postamble. # # # Flags dealing with compiling and linking # # Additional flags to pass to the preprocessor ADDITIONAL_CPPFLAGS += # Additional flags to pass to the Objective-C compiler ADDITIONAL_OBJCFLAGS += # Additional flags to pass to the C compiler ADDITIONAL_CFLAGS += # Additional include directories the compiler should search ADDITIONAL_INCLUDE_DIRS += # Additional LDFLAGS to pass to the linker ADDITIONAL_LDFLAGS += # Additional library directories the linker should search ADDITIONAL_LIB_DIRS += ADDITIONAL_TOOL_LIBS += # # Flags dealing with installing and uninstalling # GNUSTEP_INSTALLATION_DIR=$(GNUSTEP_SYSTEM_ROOT) # Additional directories to be created during installation ADDITIONAL_INSTALL_DIRS += textedit.app-4.0+20061029/MultiplePageView.h0000644000000000000000000000137007747541557017005 0ustar rootroot#import @class NSPrintInfo; @class NSColor; @interface MultiplePageView : NSView { NSPrintInfo *printInfo; NSColor *lineColor; NSColor *marginColor; unsigned numPages; } - (void)setPrintInfo:(NSPrintInfo *)anObject; - (NSPrintInfo *)printInfo; - (float)pageSeparatorHeight; - (NSSize)documentSizeInPage; /* Returns the area where the document can draw */ - (NSRect)documentRectForPageNumber:(unsigned)pageNumber; /* First page is page 0 */ - (NSRect)pageRectForPageNumber:(unsigned)pageNumber; /* First page is page 0 */ - (void)setNumberOfPages:(unsigned)num; - (unsigned)numberOfPages; - (void)setLineColor:(NSColor *)color; - (NSColor *)lineColor; - (void)setMarginColor:(NSColor *)color; - (NSColor *)marginColor; @end textedit.app-4.0+20061029/MultiplePageView.m0000644000000000000000000001167007761712626017007 0ustar rootroot/* MultiplePageView.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. View which holds all the pages together in the multiple-page case */ #import #import "MultiplePageView.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 copy]; [self updateFrame]; [self setNeedsDisplay:YES]; /* Because the page size might change (could optimize this) */ } } - (NSPrintInfo *)printInfo { return printInfo; } - (void)setNumberOfPages:(unsigned)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))]; } } } - (unsigned)numberOfPages { return numPages; } - (float)pageSeparatorHeight { return 5.0; } - (void)dealloc { [printInfo release]; [super dealloc]; } - (NSSize)documentSizeInPage { NSSize paperSize = [printInfo paperSize]; paperSize.width -= ([printInfo leftMargin] + [printInfo rightMargin]); paperSize.height -= ([printInfo topMargin] + [printInfo bottomMargin]); return paperSize; } - (NSRect)documentRectForPageNumber:(unsigned)pageNumber { /* First page is page 0, of course! */ NSRect rect = [self pageRectForPageNumber:pageNumber]; rect.origin.x += [printInfo leftMargin]; rect.origin.y += [printInfo topMargin]; rect.size = [self documentSizeInPage]; return rect; } - (NSRect)pageRectForPageNumber:(unsigned)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 copy]; [self setNeedsDisplay:YES]; } } - (NSColor *)lineColor { return lineColor; } - (void)setMarginColor:(NSColor *)color { if (color != marginColor) { [marginColor autorelease]; marginColor = [color copy]; [self setNeedsDisplay:YES]; } } - (NSColor *)marginColor { return marginColor; } - (void)drawRect:(NSRect)rect { if ([[NSGraphicsContext currentContext] isDrawingToScreen]) { NSSize paperSize = [printInfo paperSize]; unsigned firstPage = rect.origin.y / (paperSize.height + [self pageSeparatorHeight]); unsigned lastPage = NSMaxY(rect) / (paperSize.height + [self pageSeparatorHeight]); unsigned cnt; [marginColor set]; NSRectFill(rect); [lineColor set]; for (cnt = firstPage; cnt <= lastPage; cnt++) { NSRect docRect = NSInsetRect([self documentRectForPageNumber:cnt], -1.0, -1.0); NSFrameRectWithWidth(docRect, 0.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)knowsPagesFirst:(int *)firstPageNum last:(int *)lastPageNum { *lastPageNum = [self numberOfPages]; return YES; } - (NSRect)rectForPage:(int)page { return [self documentRectForPageNumber:page-1]; /* Our page numbers start from 0; the kit's from 1 */ } @end /* 2/16/95 aozer Created for Edit II. 4/20/95 aozer Implemented printing */ textedit.app-4.0+20061029/Preferences.h0000644000000000000000000000444710506737274016021 0ustar rootroot#import #import #import #import "Document.h" /* Keys in the dictionary... */ #define RichTextFont @"RichTextFont" #define PlainTextFont @"PlainTextFont" #define DeleteBackup @"DeleteBackup" #define SaveFilesWritable @"SaveFilesWritable" #define RichText @"RichText" #define WriteBOM @"WriteBOM" #define ShowPageBreaks @"ShowPageBreaks" #define WindowWidth @"WidthInChars" #define WindowHeight @"HeightInChars" #define PlainTextEncoding @"PlainTextEncoding" #define TabWidth @"TabWidth" #define ForegroundLayoutToIndex @"ForegroundLayoutToIndex" #define OpenPanelFollowsMainWindow @"OpenPanelFollowsMainWindow" @interface Preferences: NSObject { id richTextFontNameField; id plainTextFontNameField; id keepBackupButton; id saveFilesWritableButton; id richTextMatrix; id showPageBreaksButton; id windowWidthField; id windowHeightField; id plainTextEncodingPopup; id tabWidthField; id writeBOMButton; NSDictionary *curValues; NSMutableDictionary *displayedValues; } + (id) objectForKey: (id)key; /* Convenience for getting global preferences */ + (void) saveDefaults; /* Convenience for saving global preferences */ + (Preferences *) sharedInstance; - (NSDictionary *) preferences; /* The current preferences; contains values for the documented keys */ - (void) showPanel: (id)sender; /* Shows the panel */ - (void) updateUI; /* Updates the displayed values in the UI */ - (void) commitDisplayedValues; /* The displayed values are made current */ - (void) discardDisplayedValues; /* The displayed values are replaced with current prefs and updateUI is called */ - (void) revert: (id)sender; /* Reverts the displayed values to the current preferences */ - (void) ok: (id)sender; /* Calls commitUI to commit the displayed values as current */ - (void) revertToDefault: (id)sender; - (void) miscChanged: (id)sender; /* Action message for most of the misc items in the UI to get displayedValues */ - (void) changeRichTextFont: (id)sender; /* Request to change the rich text font */ - (void) changePlainTextFont: (id)sender; /* Request to change the plain text font */ - (void) changeFont: (id)fontManager; /* Sent by the font manager */ + (NSDictionary *) preferencesFromDefaults; + (void) savePreferencesToDefaults:(NSDictionary *)dict; @end textedit.app-4.0+20061029/Preferences.m0000644000000000000000000002351510506764307016020 0ustar rootroot/* Preferences.m Copyright (C) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. Preferences controller for Edit... To add new defaults search for one of the existing keys. Some keys have UI, others don't; use one similar to the one you're adding. displayedValues is a mirror of the UI. These are committed by copying these values to curValues. This module allows for UI where there is or there isn't an OK button. If you wish to have an OK button, connect OK to ok:, Revert to revert:, and don't call commitDisplayedValues from the various action messages. */ #import "Preferences.h" #import #import static NSDictionary * defaultValues (void) { static NSDictionary *dict = nil; if (!dict) { dict = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithBool:YES], DeleteBackup, [NSNumber numberWithBool:NO], SaveFilesWritable, [NSNumber numberWithBool:YES], RichText, [NSNumber numberWithBool:NO], ShowPageBreaks, [NSNumber numberWithBool:NO], OpenPanelFollowsMainWindow, [NSNumber numberWithBool:NO], WriteBOM, [NSNumber numberWithInt:80], WindowWidth, [NSNumber numberWithInt:30], WindowHeight, [NSNumber numberWithInt:UnknownStringEncoding], PlainTextEncoding, [NSNumber numberWithInt:8], TabWidth, [NSNumber numberWithInt:100000], ForegroundLayoutToIndex, [NSFont userFixedPitchFontOfSize:0.0], PlainTextFont, [NSFont userFontOfSize:0.0], RichTextFont, nil]; } return dict; } @implementation Preferences static Preferences *sharedInstance = nil; + (id) objectForKey: (id)key { return [[[self sharedInstance] preferences] objectForKey: key]; } + (void) saveDefaults { if (sharedInstance) { [Preferences savePreferencesToDefaults: [sharedInstance preferences]]; } } + (Preferences *) sharedInstance { return sharedInstance ? sharedInstance : [[self alloc] init]; } - (id) init { if (sharedInstance) { [self dealloc]; } else { [super init]; curValues = [[[self class] preferencesFromDefaults] copy]; [self discardDisplayedValues]; sharedInstance = self; } return sharedInstance; } - (void) dealloc { } - (NSDictionary *) preferences { return curValues; } - (void) showPanel: (id)sender { if (!richTextFontNameField) { if (![NSBundle loadNibNamed: @"Preferences" owner:self]) { NSLog (@"Failed to load Preferences.nib"); NSBeep (); return; } [[richTextFontNameField window] setExcludedFromWindowsMenu: YES]; [[richTextFontNameField window] setMenu: nil]; [self updateUI]; [[richTextFontNameField window] center]; } [[richTextFontNameField window] makeKeyAndOrderFront: nil]; } static void showFontInField (NSFont *font, NSTextField *field) { [field setStringValue: font ? [NSString stringWithFormat:@"%@ %g", [font fontName], [font pointSize]] : @""]; } - (void) updateUI { showFontInField ([displayedValues objectForKey:RichTextFont], richTextFontNameField); showFontInField ([displayedValues objectForKey:PlainTextFont], plainTextFontNameField); [keepBackupButton setState: [[displayedValues objectForKey: DeleteBackup] boolValue]]; [saveFilesWritableButton setState: [[displayedValues objectForKey: SaveFilesWritable] boolValue]]; [richTextMatrix selectCellWithTag: [[displayedValues objectForKey: RichText] boolValue] ? 1 : 0]; [showPageBreaksButton setState: [[displayedValues objectForKey: ShowPageBreaks] boolValue]]; [writeBOMButton setState: [[displayedValues objectForKey: WriteBOM] boolValue]]; [windowWidthField setIntValue: [[displayedValues objectForKey: WindowWidth] intValue]]; [windowHeightField setIntValue: [[displayedValues objectForKey: WindowHeight] intValue]]; SetUpEncodingPopupButton (plainTextEncodingPopup, [[displayedValues objectForKey: PlainTextEncoding] intValue], YES); } /* Gets everything from UI except for fonts... */ - (void) miscChanged: (id)sender { static NSNumber *yes = nil; static NSNumber *no = nil; int anInt; if (!yes) { yes = [[NSNumber alloc] initWithBool: YES]; no = [[NSNumber alloc] initWithBool: NO]; } [displayedValues setObject: ([[richTextMatrix selectedCell] tag] ? yes : no) forKey: RichText]; [displayedValues setObject: ([keepBackupButton state] ? yes : no) forKey: DeleteBackup]; [displayedValues setObject: ([writeBOMButton state] ? yes : no) forKey: WriteBOM]; [displayedValues setObject: ([saveFilesWritableButton state] ? yes : no) forKey: SaveFilesWritable]; [displayedValues setObject: ([showPageBreaksButton state] ? yes : no) forKey: ShowPageBreaks]; [displayedValues setObject: [NSNumber numberWithInt: [[plainTextEncodingPopup selectedItem] tag]] forKey: PlainTextEncoding]; anInt = [windowWidthField intValue]; if (anInt < 1 || anInt > 10000) { anInt = [[displayedValues objectForKey: WindowWidth] intValue]; if (anInt < 1 || anInt > 10000) anInt = [[defaultValues() objectForKey: WindowWidth] intValue]; [windowWidthField setIntValue: anInt]; } else { [displayedValues setObject: [NSNumber numberWithInt: anInt] forKey: WindowWidth]; } anInt = [windowHeightField intValue]; if (anInt < 1 || anInt > 10000) { anInt = [[displayedValues objectForKey:WindowHeight] intValue]; if (anInt < 1 || anInt > 10000) anInt = [[defaultValues() objectForKey: WindowHeight] intValue]; [windowHeightField setIntValue: [[displayedValues objectForKey: WindowHeight] intValue]]; } else { [displayedValues setObject: [NSNumber numberWithInt: anInt] forKey: WindowHeight]; } [self commitDisplayedValues]; } /**** Font changing code ****/ static BOOL changingRTFFont = NO; - (void) changeRichTextFont: (id)sender { changingRTFFont = YES; [[richTextFontNameField window] makeFirstResponder: [richTextFontNameField window]]; [[NSFontManager sharedFontManager] setSelectedFont: [curValues objectForKey: RichTextFont] isMultiple: NO]; [[NSFontManager sharedFontManager] orderFrontFontPanel: self]; } - (void) changePlainTextFont: (id)sender { changingRTFFont = NO; [[richTextFontNameField window] makeFirstResponder: [richTextFontNameField window]]; [[NSFontManager sharedFontManager] setSelectedFont: [curValues objectForKey: PlainTextFont] isMultiple: NO]; [[NSFontManager sharedFontManager] orderFrontFontPanel: self]; } - (void) changeFont: (id)fontManager { if (changingRTFFont) { [displayedValues setObject: [fontManager convertFont: [curValues objectForKey: RichTextFont]] forKey: RichTextFont]; showFontInField ([displayedValues objectForKey: RichTextFont], richTextFontNameField); } else { [displayedValues setObject: [fontManager convertFont: [curValues objectForKey: PlainTextFont]] forKey: PlainTextFont]; showFontInField ([displayedValues objectForKey: PlainTextFont], plainTextFontNameField); } [self commitDisplayedValues]; } /**** Commit/revert etc ****/ - (void) commitDisplayedValues { if (curValues != displayedValues) { [curValues release]; curValues = [displayedValues copy]; } } - (void) discardDisplayedValues { if (curValues != displayedValues) { [displayedValues release]; displayedValues = [curValues mutableCopy]; [self updateUI]; } } - (void) ok: (id)sender { [self commitDisplayedValues]; } - (void) revertToDefault: (id)sender { curValues = [defaultValues () copy]; [self discardDisplayedValues]; } - (void) revert: (id)sender { [self discardDisplayedValues]; } /**** Code to deal with defaults ****/ #define getBoolDefault(name) \ {NSString *str = [defaults stringForKey:name]; \ [dict setObject:str ? [NSNumber numberWithBool:[str hasPrefix:@"Y"]] : [defaultValues() objectForKey:name] forKey:name];} #define getIntDefault(name) \ {NSString *str = [defaults stringForKey:name]; \ [dict setObject:str ? [NSNumber numberWithInt:[str intValue]] : [defaultValues() objectForKey:name] forKey:name];} + (NSDictionary *) preferencesFromDefaults { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity: 10]; getBoolDefault (RichText); getBoolDefault (DeleteBackup); getBoolDefault (ShowPageBreaks); getBoolDefault (SaveFilesWritable); getBoolDefault (OpenPanelFollowsMainWindow); getBoolDefault (WriteBOM); getIntDefault (WindowWidth); getIntDefault (WindowHeight); getIntDefault (PlainTextEncoding); getIntDefault (TabWidth); getIntDefault (ForegroundLayoutToIndex); [dict setObject: [NSFont userFontOfSize: 0.0] forKey: RichTextFont]; [dict setObject: [NSFont userFixedPitchFontOfSize: 0.0] forKey: PlainTextFont]; return dict; } #define setBoolDefault(name) \ {if ([[defaultValues() objectForKey:name] isEqual:[dict objectForKey:name]]) [defaults removeObjectForKey:name]; else [defaults setObject:([[dict objectForKey:name] boolValue]? @"YES" : @"NO") forKey:name];} #define setIntDefault(name) \ {if ([[defaultValues() objectForKey:name] isEqual:[dict objectForKey:name]]) [defaults removeObjectForKey:name]; else [defaults setObject:[[dict objectForKey:name] stringValue] forKey:name];} + (void) savePreferencesToDefaults: (NSDictionary *)dict { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; setBoolDefault (RichText); setBoolDefault (DeleteBackup); setBoolDefault (ShowPageBreaks); setBoolDefault (SaveFilesWritable); setBoolDefault (OpenPanelFollowsMainWindow); setBoolDefault (WriteBOM); setIntDefault (WindowWidth); setIntDefault (WindowHeight); setIntDefault (PlainTextEncoding); setIntDefault (TabWidth); setIntDefault (ForegroundLayoutToIndex); if (![[dict objectForKey: RichTextFont] isEqual: [NSFont userFontOfSize: 0.0]]) [NSFont setUserFont: [dict objectForKey: RichTextFont]]; if (![[dict objectForKey: PlainTextFont] isEqual: [NSFont userFixedPitchFontOfSize: 0.0]]) [NSFont setUserFixedPitchFont: [dict objectForKey: PlainTextFont]]; } @end /* 10/24/95 aozer Created. */ textedit.app-4.0+20061029/README.rtf0000644000000000000000000001750310411350451015035 0ustar rootroot{\rtf1\ansi\ansicpg10000\cocoartf102{\fonttbl\f0\fswiss Helvetica;} {\colortbl;\red0\green0\blue0;} \paperw11920\paperh9300\hyphauto1\hyphfactor0\f0\fs48\b\pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\ql TextEdit\b0 \par \fs24 \par TextEdit is a simple text editor based on the OpenStep text system.\par \par \fs28\b Changes since 4.2\par \cf0\fs24\b0\cf1 \'B7 Removed the InterfaceStyle stuff.\par \'B7 Removed the use of NSZones \u8212 things are crudded up enough as it is.\par \'B7 Made to work on GNUstep \u8212 still contains code for non-GNUstep, but that\rquote s not where we\rquote re going.\par \cf0 \par \fs28\b Changes since 4.1\par \cf0\fs24\b0\cf1 \'B7 Changed #ifdef WIN32 in Document.m to more dynamic calls to NSInterfaceStyleForKey()\par \'B7 Added support for the new hyphenation feature in the text system\par \'B7 Got tab stop locations in plain text mode to be recomputed when needed\par \par \fs28\b Major source files and what\rquote s interesting about them:\par \cf0\fs24\b0 \par \fs28\b Document.m\par \fs24\b0 \par Contains most of the implementation for the \b Document\b0 class. One instance of this is created for every document (new or saved) in TextEdit. The internal designated initializer for this class is \b init\b0 ; however, external clients should go through \b initWithPath:encoding:\b0 ; or better yet \b openUntitled\b0 or \b openDocumentWithPath:encoding:\b0 .\par \par The text contents (characters, attachments, attributes) of the document are kept in an instance of NSTextStorage. There is also one NSLayoutManager, and one or more NSTextViews (depending on whether "wrap to page" mode is selected). \b setHasMultiplePages:\b0 determines whether the document is in "wrap to page" mode or not; study this method, \b addPage\b0 , and \b removePage\b0 to see how to create and manipulate NSTextViews programmatically.\par \par \b setRichText:\b0 demonstrates what needs to happen when you want to convert an attributed string from being "rich" to "plain" and back. Note that in the new text system setting setRichText: on a text view simply prevents the user from manipulating attributes; however, the backing store can still contain multiple fonts, colors, etc. This is why this method needs to do the things it does.\par \par As you will note, there is a good deal of code to deal with encoding of the characters in the document when the document contains plain text. The instance variable \b encodingIfPlainText\b0 stores the encoding of the document; this is either deduced from the file or specified by the user when the document is opened. Keeping this encoding around allows the document to be saved with the same encoding as it was read. (When in memory the character encoding of the document is somewhat meaningless, because the characters in the document are stored in an NSString, whose backing stores are always expressed in terms of Unicode characters. The encoding determines how to save the document when saved as plain text.)\par \par The encodings recognized by NSString are listed in NSString.h; the encodings listed in the open panel accessory view are listed in the resource file \b Encodings.txt\b0 . TextEdit uses three additional values for encodings to denote unknown encoding, RTF, and RTFD; this is somewhat of a hack, but the chosen values are unlikely to be used as encoding values in the system.\par \par Document class contains an instance of NSPrintInfo to store the default settings for printing. Setting horizontal pagination to \b NSFitPagination\b0 allows the text to be printed with the same wrapping as on the screen. In non-"wrap to page" mode this means the text might need to be scaled smaller when printed.\par \par The method \b doForegroundLayoutToCharacterIndex: \b0 shows how to get the text system to lay text out in the foreground up to a certain character location. By default the text system does its layout in the background, which allows bringing up the window fairly quickly. The user can even edit, print, or save the document while the background layout is going on. Although this is rather interesting in practice, having the scrollbar race down the page when the document first comes up can be confusing to some users. Thus TextEdit causes a portion of the document (by default the first 100,000 characters) to be laid out before the document is displayed. For documents that are larger the layout will still continue in the background once the document is displayed. Note that the user can always cause a full layout to happen by hitting the "End" key on the keyboard.\par \par There are a couple of instances of Windows-specific code in Document.m. Both are concerned with tweaking the look of the document scrollview to match the Windows guidelines. Note that rather than using a compile-time default (#ifdef WIN32), we look at the interface style to dynamically match the look & feel.\par \par Features poorly implemented in Document include \b saveTo:\b0 (which would save the document elsewhere without changing its current path) and dynamically changing the tab stops in plain text documents on font changes (this should really be handled by the text system at some point). It would also be great (and easy!) to add undo.\par \par One final note on the Document class: The example program \b Yap\b0 has a cleaner Document, which Yap subclasses to add Yap-specific functionality. If you need a very simple document class to handle text documents, you might want to check out Yap\rquote s Document.m.\par \par \fs28\b DocumentReadWrite.m\par \fs24\b0 \par This file contains the file I/O code, including a few convenience methods on NSAttributedString. The method \b loadFromPath:encoding:\b0 opens the specified file using the specified encoding, and the method\b saveToPath:encoding:updateFilenames:\b0 saves the document using the specified name and encoding.\b \b0 \par \par \fs28\b Controller.m\par \fs24\b0 \par This file contains the central controller object for TextEdit, which responds to application messages such as openFile:, printFile:, etc, and also implements the info panel.\par \par \fs28\b MultiplePageView.m\par \par \fs24\b0 In "wrap to page" mode there is one NSTextView per page. \b MultiplePageView\b0 is the top level view which groups all of these views. It is inserted as the document view of the scroll view in the document window. MultiplePageView is fairly simple, providing support for conversions between page numbers and rects, and drawing the background for the pages.\par \par A possible enhancement to this class would be to have it allow the user to manipulate the page margins by dragging guides around. An advanced exercise would be to add custom markers to the ruler to allow changing the page margins via the ruler as well.\par \par \fs28\b ScalingScrollView.m\par \par \fs24\b0 Contains \b ScalingScrollView\b0 , a subclass of NSView to implement a scroll view with a popup to allow setting the zoom factor. This class is fairly generic and can easily be used in a variety of cases.\par \par \fs28\b TextFinder.m\par \par \fs24\b0 Along with the corresponding nib file \b FindPanel.nib\b0 implements basic replace and find functionality on text stored in an NSTextStorage. Among other things demonstrates communicating with the pasteboard to get/set the find string.\par \par \fs28\b Preferences.m\par \par \fs24\b0 Provides a preferences controller to read/write preferences stored in the defaults database. Provides support for specifying default values for the preferences, and tries to minimize the amount of information written out to the database by removing entries which have default values. \par \par Note that the preferences panel in TextEdit does not have an "OK" button to confirm the changes; changes take place immediately. However the Preferences class supports a panel with OK/Revert buttons; simply connect the OK button to \b ok:\b0 , and the Revert button to \b revert:\b0 .\par \par }textedit.app-4.0+20061029/ScalingScrollView.h0000644000000000000000000000045407747541557017156 0ustar rootroot#import @class NSPopUpButton; @interface ScalingScrollView : NSScrollView { NSPopUpButton *_scalePopUpButton; float scaleFactor; } - (void)scalePopUpAction:(id)sender; - (void)_makeScalePopUpButton; - (void)setScaleFactor:(float)factor; - (float)scaleFactor; @end textedit.app-4.0+20061029/ScalingScrollView.m0000644000000000000000000001255310411347442017141 0ustar rootroot/* ScalingScrollView.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Mike Ferris You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. */ #import "ScalingScrollView.h" #import #import #import #import #import /* For genstrings: NSLocalizedString(@"10%", @"Zoom popup entry") NSLocalizedString(@"25%", @"Zoom popup entry") NSLocalizedString(@"50%", @"Zoom popup entry") NSLocalizedString(@"75%", @"Zoom popup entry") NSLocalizedString(@"100%", @"Zoom popup entry") NSLocalizedString(@"128%", @"Zoom popup entry") NSLocalizedString(@"200%", @"Zoom popup entry") NSLocalizedString(@"400%", @"Zoom popup entry") NSLocalizedString(@"800%", @"Zoom popup entry") NSLocalizedString(@"1600%", @"Zoom popup entry") */ static NSString *_NSDefaultScaleMenuLabels[] = {/* @"Set...", */ @"10%", @"25%", @"50%", @"75%", @"100%", @"128%", @"200%", @"400%", @"800%", @"1600%"}; static float _NSDefaultScaleMenuFactors[] = {/* 0.0, */ 0.1, 0.25, 0.5, 0.75, 1.0, 1.28, 2.0, 4.0, 8.0, 16.0}; static unsigned _NSDefaultScaleMenuSelectedItemIndex = 4; static float _NSButtonPadding = 1.0; static float _NSScaleMenuFontSize = 10.0; @implementation ScalingScrollView - (id) initWithFrame: (NSRect)rect { if ((self = [super initWithFrame: rect])) { scaleFactor = 1.0; // FIXME -- was in alex's version -- why? [self setHasHorizontalRuler: YES]; } return self; } - (void) _makeScalePopUpButton { if (_scalePopUpButton == nil) { unsigned int cnt, numberOfDefaultItems = (sizeof(_NSDefaultScaleMenuLabels) / sizeof(NSString *)); #ifdef GNUSTEP id curItem; #else NSButtonCell *curItem; #endif // create it _scalePopUpButton = [[NSPopUpButton allocWithZone: [self zone]] initWithFrame: NSMakeRect (0.0, 0.0, 1.0, 1.0) pullsDown: NO]; // fill it for (cnt = 0; cnt < numberOfDefaultItems; cnt++) { [_scalePopUpButton addItemWithTitle: NSLocalizedString (_NSDefaultScaleMenuLabels[cnt], nil)]; curItem = [_scalePopUpButton itemAtIndex:cnt]; if (_NSDefaultScaleMenuFactors[cnt] != 0.0) { [curItem setRepresentedObject: [NSNumber numberWithFloat: _NSDefaultScaleMenuFactors[cnt]]]; } } [_scalePopUpButton selectItemAtIndex: _NSDefaultScaleMenuSelectedItemIndex]; // hook it up [_scalePopUpButton setTarget: self]; [_scalePopUpButton setAction: @selector(scalePopUpAction:)]; // set a suitable font [_scalePopUpButton setFont: [NSFont systemFontOfSize: _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, incrementLineFrame; if (!_scalePopUpButton) [self _makeScalePopUpButton]; horizScroller = [self horizontalScroller]; horizScrollerFrame = [horizScroller frame]; incrementLineFrame = [horizScroller rectForPart:NSScrollerIncrementLine]; 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 - _NSButtonPadding; [horizScroller setFrameSize:horizScrollerFrame.size]; buttonFrame.origin.x = NSMaxX(horizScrollerFrame); buttonFrame.size.height = incrementLineFrame.size.height; buttonFrame.origin.y = horizScrollerFrame.origin.y + incrementLineFrame.origin.y; [_scalePopUpButton setFrame:buttonFrame]; } } - (void) scalePopUpAction: (id)sender { #ifdef GNUSTEP NSNumber *selectedFactorObject = [[_scalePopUpButton selectedItem] representedObject]; #else NSNumber *selectedFactorObject = [[sender selectedCell] representedObject]; #endif if (selectedFactorObject == nil) { NSLog (@"Scale popup action: setting arbitrary zoom factors is not yet supported."); return; } else { [self setScaleFactor: [selectedFactorObject floatValue]]; } } - (float) scaleFactor { return scaleFactor; } - (void) setScaleFactor: (float)newScaleFactor { if (scaleFactor != newScaleFactor) { NSSize curDocFrameSize, newDocBoundsSize; NSView *clipView = [[self documentView] superview]; scaleFactor = newScaleFactor; // Get the frame. The frame must stay the same. curDocFrameSize = [clipView frame].size; // The new bounds will be frame divided by scale factor newDocBoundsSize.width = curDocFrameSize.width / newScaleFactor; newDocBoundsSize.height = curDocFrameSize.height / newScaleFactor; [clipView setBoundsSize:newDocBoundsSize]; } } - (void) setHasHorizontalScroller: (BOOL) flag { if (!flag) [self setScaleFactor: 1.0]; [super setHasHorizontalScroller: flag]; } @end /* 12/94 mferris Created 3/4/95 aozer Use in Edit; added ability to turn popup off/on 5/4/95 aozer Scale the clipview rather than the docview 7/20/95 aozer Made popup entries localizable */ textedit.app-4.0+20061029/TextEdit.rtf0000644000000000000000000000530407747541557015661 0ustar rootroot{\rtf0\ansi{\fonttbl\f0\froman Times-Roman;\f1\ftech Symbol;\f2\fswiss Helvetica; } \paperw12500\paperh10440 \pard\tx960\tx1920\tx2880\tx3840\tx4800\tx5760\tx6720\tx7680\tx8640\tx9600\ql\qnatural \f0\fs24 \cf0 OPENSTEP Release 4.2 Copyright \f1 \f0 1997 by NeXT Software, Inc. All Rights Reserved.\ \pard\ql\qnatural \f2\fs30 \cf0 \ \ \pard\tx0\tx2520\tx2880\tx3240\li720\fi20\ql\qnatural \f0\fs48 \cf0 OPENSTEP 4.2 Release Notes: \ TextEdit \fs30 \ \pard\li1440\ql\qnatural \fs28 \cf0 \ \pard\tx1800\li720\ql\qnatural \cf0 \ \pard\tx1800\li1440\ql\qnatural \cf0 TextEdit is a new application based on the new text system. In addition to the standard text editing features in the 3.3 Edit application, it provides:\ \ \pard\tx1640\li1640\fi-200\ql\qnatural \cf0 "Wrap to Page" mode. This mode causes the document to be wrapped to the current page size (as opposed to the window size), and thus shows you a simple WYSIWYG representation of your pages. This mode also allows zooming.\ \ Support for new text object features such as hyphenation, kerning, ligatures, and baseline offsets.\ \ Ability to read/write plain text files in different 8-bit character encodings and Unicode. Coupled with the Kanji support in the new text object, you can read/write/edit Kanji files created by 3.3J or 4.1J. (You will need Kanji fonts and input manager.)\ \ The alternate encoding to apply to a file is specified by a popup in the Open or Save panels. The default item, "Default," tells TextEdit to use either the default 8-bit encoding of the system or Unicode. Other choices let you select different encodings. You can also set the default setting of this popup via the Preferences panel.\ \ \pard\tx1800\li1440\ql\qnatural \cf0 Sources to TextEdit are available with the developer software, in \b /NextDeveloper/Examples/AppKit/TextEdit \b0 .\ \pard\tx1640\li1640\fi-200\ql\qnatural \cf0 \ \pard\tx1800\li1440\ql\qnatural \cf0 \ \pard\tx0\tx2520\tx2880\tx3240\ql\qnatural \fs36 \cf0 Known Problems in This Release \fs28 \ \pard\tx2540\tx11440\li2540\fi-1100\ql\qnatural \cf0 \ \f2\fs18 Reference: \f0\fs28 None\ \fs12 \ \f2\fs18 Problem: \f0\fs28 Encoding popup in Open/Save panels not available under NT3.51 \ \fs12 \ \f2\fs18 Description: \f0\fs28 Because accessory views aren't supported under NT3.51, there is no encoding popup in the Open/Save panels.\ \fs12 \ \f2\fs18 Workaround: \f0\fs28 You can use the popup in the Preferences panel to set the default choice for the popup, which will then be used when files are opened or saved.\ \ \pard\tx1800\li1440\ql\qnatural \cf0 In addition, please refer to the Application Kit release notes for the new text system bugs.\ \pard\tx2540\tx11440\li2540\fi-1100\ql\qnatural \cf0 \ } textedit.app-4.0+20061029/TextEditInfo.plist0000644000000000000000000000116107747541557017032 0ustar rootroot{ ApplicationDescription = "an OpenStep text editor"; ApplicationIcon = Edit.tiff; ApplicationName = TextEdit; ApplicationRelease = 4; Authors = ( "Ali Ozer", "Jeff Teunissen" ); Copyright = ( "Copyright \U00a9 1995-1996 NeXT Software, Inc.", "Copyright \U00a9 2001-2003 Dusk to Dawn Computing, Inc." ); CopyrightDescription = "You may freely copy, distribute, and reuse the code in this example."; NSExtensions = { // "" = { // NSIcon = text.tiff; // }; rtf = { NSIcon = rtf.tiff; }; rtfd = { NSIcon = rtfd.tiff; }; txt = { NSIcon = text.tiff; }; }; }textedit.app-4.0+20061029/TextFinder.h0000644000000000000000000000313107747541557015633 0ustar rootroot#import #define Forward YES #define Backward NO @interface TextFinder : NSObject { NSString *findString; id findTextField; id replaceTextField; id ignoreCaseButton; id findNextButton; id replaceAllScopeMatrix; id statusField; BOOL findStringChangedSinceLastPasteboardUpdate; BOOL lastFindWasSuccessful; /* A bit of a kludge */ } /* Common way to get a text finder. One instance of TextFinder per app is good enough. */ + (id)sharedInstance; /* Main method for external users; does a find in the first responder. Selects found range or beeps. */ - (BOOL)find:(BOOL)direction; /* Loads UI lazily */ - (NSPanel *)findPanel; /* Gets the first responder and returns it if it's an NSTextView */ - (NSTextView *)textObjectToSearchIn; /* Get/set the current find string. Will update UI if UI is loaded */ - (NSString *)findString; - (void)setFindString:(NSString *)string; /* Misc internal methods */ - (void)appDidActivate:(NSNotification *)notification; - (void)addWillDeactivate:(NSNotification *)notification; - (void)loadFindStringFromPasteboard; - (void)loadFindStringToPasteboard; /* Methods sent from the find panel UI */ - (void)findNext:(id)sender; - (void)findPrevious:(id)sender; - (void)findNextAndOrderFindPanelOut:(id)sender; - (void)replace:(id)sender; - (void)replaceAndFind:(id)sender; - (void)replaceAll:(id)sender; - (void)orderFrontFindPanel:(id)sender; @end @interface NSString (NSStringTextFinding) - (NSRange)findString:(NSString *)string selectedRange:(NSRange)selectedRange options:(unsigned)mask wrap:(BOOL)wrapFlag; @end textedit.app-4.0+20061029/TextFinder.m0000644000000000000000000002267010411347442015624 0ustar rootroot/* TextFinder.m Copyright (c) 1995-1996, NeXT Software, Inc. All rights reserved. Author: Ali Ozer You may freely copy, distribute and reuse the code in this example. NeXT disclaims any warranty of any kind, expressed or implied, as to its fitness for any particular use. Find and replace functionality with a minimal panel... In addition to including this class and FindPanel.nib in your app, you probably need to hook up the following action methods in your document object (or whatever object is first responder) to call the appropriate methods in [TextFinder sharedInstance]: orderFrontFindPanel: findNext: findPrevious: enterSelection: (calls setFindString:) */ #import #import "TextFinder.h" @implementation TextFinder - (id) init { if (!(self = [super init])) return nil; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (appDidActivate:) name: NSApplicationDidBecomeActiveNotification object: [NSApplication sharedApplication]]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector (addWillDeactivate:) name: NSApplicationWillResignActiveNotification object: [NSApplication sharedApplication]]; [self setFindString: @""]; [self loadFindStringFromPasteboard]; return self; } - (void) appDidActivate: (NSNotification *)notification { [self loadFindStringFromPasteboard]; } - (void)addWillDeactivate: (NSNotification *)notification { [self loadFindStringToPasteboard]; } - (void)loadFindStringFromPasteboard { NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:NSFindPboard]; if ([[pasteboard types] containsObject:NSStringPboardType]) { NSString *string = [pasteboard stringForType:NSStringPboardType]; if (string && [string length]) { [self setFindString: string]; findStringChangedSinceLastPasteboardUpdate = NO; } } } - (void) loadFindStringToPasteboard { NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName: NSFindPboard]; if (findStringChangedSinceLastPasteboardUpdate) { [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; [pasteboard setString:[self findString] forType:NSStringPboardType]; findStringChangedSinceLastPasteboardUpdate = NO; } } static id sharedFindObject = nil; + (id)sharedInstance { if (!sharedFindObject) { sharedFindObject = [[self alloc] init]; } return sharedFindObject; } - (void) loadUI { if (!findTextField) { if (![NSBundle loadNibNamed: @"FindPanel" owner: self]) { NSLog (@"Failed to load FindPanel.nib"); NSBeep (); } if (self == sharedFindObject) [[findTextField window] setFrameAutosaveName: @"Find"]; } [findTextField setStringValue: [self findString]]; } - (void) dealloc { if (self != sharedFindObject) { [findString release]; [super dealloc]; } } - (NSString *) findString { return findString; } - (void) setFindString: (NSString *)string { if ([string isEqualToString: findString]) return; [findString autorelease]; findString = [string copy]; if (findTextField) { [findTextField setStringValue: string]; [findTextField selectText: nil]; } findStringChangedSinceLastPasteboardUpdate = YES; } - (NSTextView *) textObjectToSearchIn { id obj = [[NSApp mainWindow] firstResponder]; return (obj && [obj isKindOfClass: [NSTextView class]]) ? obj : nil; } - (NSPanel *) findPanel { if (!findTextField) [self loadUI]; return (NSPanel *) [findTextField window]; } /* The primitive for finding; this ends up setting the status field (and beeping if necessary)... */ - (BOOL) find: (BOOL)direction { NSTextView *text = [self textObjectToSearchIn]; lastFindWasSuccessful = NO; if (text) { NSString *textContents = [text string]; unsigned int textLength; if (textContents && (textLength = [textContents length])) { NSRange range; unsigned int options = 0; if (direction == Backward) options |= NSBackwardsSearch; if ([ignoreCaseButton state]) options |= NSCaseInsensitiveSearch; range = [textContents findString: [self findString] selectedRange: [text selectedRange] options: options wrap: YES]; if (range.length) { [text setSelectedRange: range]; [text scrollRangeToVisible: range]; lastFindWasSuccessful = YES; } } } if (!lastFindWasSuccessful) { NSBeep (); [statusField setStringValue: NSLocalizedStringFromTable (@"Not found", @"FindPanel", @"Status displayed in find panel when the find string is not found.")]; } else { [statusField setStringValue: @""]; } return lastFindWasSuccessful; } - (void) orderFrontFindPanel: (id)sender { NSPanel *panel = [self findPanel]; [findTextField selectText: nil]; [panel makeKeyAndOrderFront: nil]; } /**** Action methods for gadgets in the find panel; these should all end up setting or clearing the status field ****/ - (void) findNextAndOrderFindPanelOut: (id)sender { [findNextButton performClick: nil]; if (lastFindWasSuccessful) { [[self findPanel] orderOut: sender]; } else { [findTextField selectText: nil]; } } - (void) findNext: (id)sender { if (findTextField) [self setFindString: [findTextField stringValue]]; /* findTextField should be set */ [self find: Forward]; } - (void) findPrevious: (id)sender { if (findTextField) [self setFindString:[findTextField stringValue]]; /* findTextField should be set */ [self find: Backward]; } - (void) replace: (id)sender { NSTextView *text = [self textObjectToSearchIn]; if (!text) { NSBeep (); } else { [[text textStorage] replaceCharactersInRange: [text selectedRange] withString: [replaceTextField stringValue]]; [text didChangeText]; } [statusField setStringValue: @""]; } - (void) replaceAndFind: (id)sender { [self replace: sender]; [self findNext: sender]; } #define ReplaceAllScopeEntireFile 42 #define ReplaceAllScopeSelection 43 - (void) replaceAll: (id)sender { NSTextView *text = [self textObjectToSearchIn]; if (!text) { NSBeep(); } else { NSTextStorage *textStorage = [text textStorage]; NSString *textContents = [text string]; NSString *replaceString = [replaceTextField stringValue]; BOOL entireFile = replaceAllScopeMatrix ? ([replaceAllScopeMatrix selectedTag] == ReplaceAllScopeEntireFile) : YES; NSRange replaceRange = entireFile ? NSMakeRange (0, [textStorage length]) : [text selectedRange]; unsigned int options = NSBackwardsSearch | ([ignoreCaseButton state] ? NSCaseInsensitiveSearch : 0); unsigned int replaced = 0; if (findTextField) [self setFindString:[findTextField stringValue]]; while (1) { NSRange foundRange = [textContents rangeOfString: [self findString] options: options range: replaceRange]; if (foundRange.length == 0) break; if ([text shouldChangeTextInRange: foundRange replacementString: replaceString]) { if (replaced == 0) [textStorage beginEditing]; replaced++; [textStorage replaceCharactersInRange: foundRange withString: replaceString]; replaceRange.length = foundRange.location - replaceRange.location; } } if (replaced > 0) { /* There was at least one replacement */ [textStorage endEditing]; /* We need this to bracket the beginEditing */ [text didChangeText]; /* We need one of these to terminate the shouldChange... methods we sent */ [statusField setStringValue: [NSString localizedStringWithFormat: NSLocalizedStringFromTable (@"%d replaced", @"FindPanel", @"Status displayed in find panel when indicated number of matches are replaced."), replaced]]; } else { /* No replacements were done... */ NSBeep(); [statusField setStringValue:NSLocalizedStringFromTable(@"Not found", @"FindPanel", @"Status displayed in find panel when the find string is not found.")]; } } } @end @implementation NSString (NSStringTextFinding) - (NSRange) findString: (NSString *)string selectedRange: (NSRange)selectedRange options: (unsigned)options wrap: (BOOL)wrap { BOOL forwards = (options & NSBackwardsSearch) == 0; unsigned int length = [self length]; NSRange searchRange, range; if (forwards) { searchRange.location = NSMaxRange(selectedRange); searchRange.length = length - searchRange.location; range = [self rangeOfString:string options:options range:searchRange]; if ((range.length == 0) && wrap) { /* If not found look at the first part of the string */ searchRange.location = 0; searchRange.length = selectedRange.location; range = [self rangeOfString:string options:options range:searchRange]; } } else { searchRange.location = 0; searchRange.length = selectedRange.location; range = [self rangeOfString:string options:options range:searchRange]; if ((range.length == 0) && wrap) { searchRange.location = NSMaxRange(selectedRange); searchRange.length = length - searchRange.location; range = [self rangeOfString:string options:options range:searchRange]; } } return range; } @end /* 2/21/95 aozer Created for Edit II. 2/24/95 aozer Find pasteboard support 8/16/95 aozer Replace functionality 10/4/95 aozer Status field update 11/12/96 aozer Correctly send shouldChange... to the textview while doing a replace */ textedit.app-4.0+20061029/rtf.tiff0000644000000000000000000002252207747541557015060 0ustar rootrootII*$PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0 0 0 000 0 0 PPPPPPPPPPPP            PPPPPPPP            PPPPPPPP          PPPPPPPPpp p p p pp pp p pPPPPPPPPp pppp ppp ppp ppp pppp ppp pppp PPPPPPPP`p`p`p`p``p`p`pp`p`pp`pp`PPPPPPPPPPPPPPPP 00000 00 0 00 00PPPPPPPPPPPPP`@PP`@PP`@PP`P`@PP`@PP`@PP`P`@PP`@PP`@PP`@PP`P`@PP`PPPPPPPP@P@P0@@P@P@P0@@P@P0@@P@P@P0@@P@P@P0@@P@P0@@P@P@P0@@PPPPPPPPP0@000@0@0@000@0@000@0@0@0@0@0@000@0@0@0@0@0@000@0@0@PPPPPPPP00 0 000 00000 000 000 0 000 000 00000 000 000 000PPPPPPPP PPPPPPPP      PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP00$   $$*%%%(1:%Rrtf.tiffHHImageMagick 5.5.7 06/10/03 Q16 http://www.imagemagick.orgtextedit.app-4.0+20061029/rtfd.tiff0000644000000000000000000002252207747541557015224 0ustar rootrootII*$PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP0 0 0 000 0 0 PPPPPPPPPPPP            PPPPPPPP            PPPPPPPP          PPPPPPPPp ppppp pp ppp PPPPPPPPpppppppppppppppppppppppppPPPPPPPP`p`p`p`p``p`p`pp`p`pp`pp`PPPPPPPPPPPPPPPP00000000000000000PPPPPPPPPPPP 0p 0 00 @p0p0P0p0` ` ` ` ` pPPPP @0@@P0@ 0 @ @ @@@ 0 00p p0pPPPPP@`0`@`0P@```0`0` P PPPPPppp`p00P@@`P`pPpPp@`P`@`@P@P@PPPPP@p@p@p@p``Pp```PPPPPPPPP𐐰ppp`pp``pp`pP`PpPPPPpppppppppPPPPp`p`p`p````p`pp`p`𐐀𠀀𠀀𰀀𰀀𰀀PPPPpp`pp`pPp`@pPpPppppЀ`PPp𰠀`PPPPPPPPPPPP        PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP00$   $$*%%%(1:%Rrtfd.tiffHHImageMagick 5.5.7 06/10/03 Q16 http://www.imagemagick.orgtextedit.app-4.0+20061029/text.tiff0000644000000000000000000002252207747541557015251 0ustar rootrootII*$PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPppPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPP`Pp@`P`P`Pp@`P`P`PpP`PpPPPPPPPP@P@`PP@P@`@PPP@P@`@PPP@`@PPP@P@`PPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPp0@PpPpPpPPPPPPPP000@000@0@000@000@000@PpPpPpPPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPp 0 PPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPp PPPPPPPPPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPpPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP00$   $$*%%%(1:%Rtext.tiffHHImageMagick 5.5.7 06/10/03 Q16 http://www.imagemagick.org