├── .gitignore ├── BirchEditor ├── BirchEditor.swift │ ├── .gitignore │ ├── BirchEditor │ │ ├── Base.lproj │ │ │ ├── ChoicePalette.storyboard │ │ │ ├── OutlineEditorView.storyboard │ │ │ ├── OutlineEditorWindow.storyboard │ │ │ ├── OutlineSidebarView.storyboard │ │ │ ├── OutlineSplitView.storyboard │ │ │ ├── Preferences.storyboard │ │ │ ├── PreviewTitlebarAccessory.storyboard │ │ │ ├── PrintAccessoryViewController.xib │ │ │ └── SearchbarView.storyboard │ │ ├── BirchEditor.swift │ │ ├── BirchError.swift │ │ ├── BirchScriptContext.swift │ │ ├── CALayer.swift │ │ ├── Checkers.h │ │ ├── Checkers.m │ │ ├── ChoicePaletteItemType.swift │ │ ├── ChoicePaletteRowView.swift │ │ ├── ChoicePaletteTableCellView.swift │ │ ├── ChoicePaletteTableView.swift │ │ ├── ChoicePaletteTextField.swift │ │ ├── ChoicePaletteViewController.swift │ │ ├── ChoicePaletteWindow.swift │ │ ├── ChoicePaletteWindowController.swift │ │ ├── Commands.swift │ │ ├── ComputedStyle.swift │ │ ├── ConfigurationOutlinesController.swift │ │ ├── CoreFoundation-Extensions.swift │ │ ├── CoreGraphics-Extensions.swift │ │ ├── CoreText-Extensions.swift │ │ ├── DatePicker.storyboard │ │ ├── DatePicker.swift │ │ ├── DatePickerViewController.swift │ │ ├── DatePickerWindowController.swift │ │ ├── Debouncer.swift │ │ ├── Font.swift │ │ ├── GetMACAddress.swift │ │ ├── ItemPasteboardUtilities.swift │ │ ├── ItemView.swift │ │ ├── ItemViewController.swift │ │ ├── ItemViewController.xib │ │ ├── JGMethodSwizzler.h │ │ ├── JGMethodSwizzler.m │ │ ├── JSON.swift │ │ ├── NSAppleEventDescriptor-AEM.h │ │ ├── NSAppleEventDescriptor-AEM.m │ │ ├── NSApplication-IsPreview.swift │ │ ├── NSFileManager-UserPaths.swift │ │ ├── NSLayoutManager.swift │ │ ├── NSMenu-Additions.swift │ │ ├── NSMenu-Markdown.swift │ │ ├── NSMutableAttributedString-Performance.h │ │ ├── NSMutableAttributedString-Performance.m │ │ ├── NSPoint.swift │ │ ├── NSRect.swift │ │ ├── NSTextField-AttributedString.swift │ │ ├── NSTextStorage-Performance.h │ │ ├── NSTextStorage-Performance.m │ │ ├── NSTextStorageBase.h │ │ ├── NSTextStorageBase.m │ │ ├── NSTextView-AccessibilityPerformanceHacks.h │ │ ├── NSTextView-AccessibilityPerformanceHacks.m │ │ ├── NSTextView-RangeForUserCompletionAdditions.h │ │ ├── NSTextView-RangeForUserCompletionAdditions.m │ │ ├── NSTextView.swift │ │ ├── NSView-ContextMenu.swift │ │ ├── NSView-Hiearchy.swift │ │ ├── NSViewController-Hiearchy.swift │ │ ├── NSVisualEffectView.swift │ │ ├── NSWindow-Centering.swift │ │ ├── NSWindow-TitleLayout.h │ │ ├── NSWindow-TitleLayout.m │ │ ├── NSWindowTabbedBase.h │ │ ├── NSWindowTabbedBase.m │ │ ├── OutlineDocument.swift │ │ ├── OutlineEditorAppDelegate.swift │ │ ├── OutlineEditorCollectionView.storyboard │ │ ├── OutlineEditorCollectionView.swift │ │ ├── OutlineEditorCollectionViewController.swift │ │ ├── OutlineEditorCollectionViewLayout.swift │ │ ├── OutlineEditorHandleClickGestureRecognizer.swift │ │ ├── OutlineEditorHandleDragGestureRecognizer.swift │ │ ├── OutlineEditorLayoutManager.swift │ │ ├── OutlineEditorSplitView.swift │ │ ├── OutlineEditorSplitViewController.swift │ │ ├── OutlineEditorTextClipView.swift │ │ ├── OutlineEditorTextContainer.swift │ │ ├── OutlineEditorTextStorage-StorageItems.swift │ │ ├── OutlineEditorTextStorage.swift │ │ ├── OutlineEditorTextStorageItem.swift │ │ ├── OutlineEditorType.swift │ │ ├── OutlineEditorTypesetter.swift │ │ ├── OutlineEditorView.swift │ │ ├── OutlineEditorViewController-Actions.swift │ │ ├── OutlineEditorViewController-Delegates.swift │ │ ├── OutlineEditorViewController.swift │ │ ├── OutlineEditorWeakProxy.swift │ │ ├── OutlineEditorWindow.swift │ │ ├── OutlineEditorWindowController.swift │ │ ├── OutlineSidebarItem.swift │ │ ├── OutlineSidebarRowView.swift │ │ ├── OutlineSidebarSearchEditorViewController.swift │ │ ├── OutlineSidebarType.swift │ │ ├── OutlineSidebarView.swift │ │ ├── OutlineSidebarViewController.swift │ │ ├── PaletteViewController.swift │ │ ├── PaletteWindow.swift │ │ ├── PaletteWindowController.swift │ │ ├── PathMonitor.swift │ │ ├── PreferencesWindowController.swift │ │ ├── PreviewTitlebarAccessoryViewController.swift │ │ ├── PrintAccessoryViewController.swift │ │ ├── Range-Extensions.swift │ │ ├── RemindersStore.swift │ │ ├── ScriptCommands.swift │ │ ├── SearchBarSearchField.swift │ │ ├── SearchBarSearchFieldCell.swift │ │ ├── SearchBarSegmentedCell.swift │ │ ├── SearchBarViewController.swift │ │ ├── String-RangeExtensions.swift │ │ ├── String.swift │ │ ├── StyleSheet.swift │ │ ├── URL-ExtendedAttributes.swift │ │ ├── delay.swift │ │ ├── getFileDescriptorPath.h │ │ └── getFileDescriptorPath.m │ ├── BirchEditorTests │ │ ├── OutlineDocumentTests.swift │ │ ├── OutlineEditorStorageTests.swift │ │ ├── OutlineEditorTests.swift │ │ └── StyleSheetTests.swift │ ├── Dependencies │ │ └── bircheditor.js │ ├── ItemPasteboardProvider.swift │ ├── NSColor.swift │ ├── OutlineEditorWindowControllerTests.swift │ └── aem │ │ ├── base.h │ │ ├── base.m │ │ ├── codecs.h │ │ ├── codecs.m │ │ ├── objectrenderer.h │ │ ├── objectrenderer.m │ │ ├── specifier.h │ │ ├── specifier.m │ │ ├── test.h │ │ ├── test.m │ │ ├── types.h │ │ ├── types.m │ │ ├── unittype.h │ │ ├── unittype.m │ │ ├── utils.h │ │ └── utils.m └── birch-editor.js │ ├── .gitignore │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── coffeelint.json │ ├── doc │ └── api │ │ ├── AttributedString.md │ │ ├── DateTime.md │ │ ├── Item.md │ │ ├── ItemSerializer.md │ │ ├── Mutation.md │ │ ├── Outline.md │ │ ├── OutlineEditor.md │ │ ├── Selection.md │ │ └── class-list.html │ ├── gulpfile.coffee │ ├── package-lock.json │ ├── package.json │ ├── spec │ ├── src │ ├── birch.coffee │ ├── choice-palette-item.coffee │ ├── choice-palette.coffee │ ├── commands.coffee │ ├── configuration-outlines.coffee │ ├── index.coffee │ ├── item-buffer │ │ ├── index.coffee │ │ └── item-span.coffee │ ├── less.coffee │ ├── line-buffer │ │ ├── index.coffee │ │ └── line-span.coffee │ ├── outline-editor-commands.coffee │ ├── outline-editor-native.coffee │ ├── outline-editor.coffee │ ├── outline-sidebar-item.coffee │ ├── outline-sidebar.coffee │ ├── plugins │ │ ├── taskpaper.coffee │ │ └── writeroom.coffee │ ├── preferences.coffee │ ├── selection.coffee │ └── style-sheet.coffee │ ├── test │ ├── atomTestRunner.coffee │ ├── config.coffee │ ├── item-buffer-spec.coffee │ ├── line-buffer-spec.coffee │ ├── load-outline-fixture.coffee │ ├── mocha.opts │ ├── outline-editor-spec.coffee │ ├── outline-sidebar-spec.coffee │ └── style-sheet-spec.coffee │ └── webpack.config.coffee ├── BirchOutline ├── BirchOutline.swift │ ├── .gitignore │ ├── .gitrepo │ ├── .travis.yml │ ├── BirchOutline.podspec.md │ ├── BirchOutline.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ ├── BirchOutline.xcscmblueprint │ │ │ └── IDEWorkspaceChecks.plist │ ├── BirchOutline │ │ ├── BirchOutline.h │ │ ├── Info.plist │ │ ├── OutlineFixture.bml │ │ └── OutlineFixture.txt │ ├── BirchOutlineTests │ │ └── Info.plist │ ├── BirchOutlineiOS │ │ ├── BirchOutlineiOS.h │ │ └── Info.plist │ ├── BirchOutlineiOSTests │ │ └── Info.plist │ ├── Common │ │ ├── Sources │ │ │ ├── BirchCrossPlatform.swift │ │ │ ├── BirchOutline.swift │ │ │ ├── BirchScriptContext.swift │ │ │ ├── DateTime.swift │ │ │ ├── DisposableType.swift │ │ │ ├── ItemPathQueryType.swift │ │ │ ├── ItemType.swift │ │ │ ├── JSContext-GarbageCollection.h │ │ │ ├── JSContext-GarbageCollection.m │ │ │ ├── JSValue.swift │ │ │ ├── MutationType.swift │ │ │ ├── ObjC.h │ │ │ ├── ObjC.m │ │ │ ├── OutlineType.swift │ │ │ ├── String-Localize.swift │ │ │ └── String-Path.swift │ │ └── Tests │ │ │ ├── ItemTests.swift │ │ │ ├── JavaScriptContextTests.swift │ │ │ └── OutlineTests.swift │ └── Dependencies │ │ └── birchoutline.js └── birch-outline.js │ ├── .gitignore │ ├── .gitrepo │ ├── .npmignore │ ├── .travis.yml │ ├── CHANGELOG.md │ ├── coffeelint.json │ ├── doc │ ├── contributing.md │ └── getting-started.md │ ├── gulpfile.coffee │ ├── package-lock.json │ ├── package.json │ ├── spec │ ├── src │ ├── attributed-string-bml-tags.coffee │ ├── attributed-string-from-bml.coffee │ ├── attributed-string-to-bml.coffee │ ├── attributed-string.coffee │ ├── birch.coffee │ ├── date-time-parser.js │ ├── date-time-parser.pegjs │ ├── date-time.coffee │ ├── dom.coffee │ ├── extensions.coffee │ ├── index.coffee │ ├── item-path-parser.js │ ├── item-path-parser.pegjs │ ├── item-path-query.coffee │ ├── item-path.coffee │ ├── item-serializer.coffee │ ├── item.coffee │ ├── mutation.coffee │ ├── outline.coffee │ ├── run-buffer │ │ ├── index.coffee │ │ └── run-span.coffee │ ├── serializations │ │ ├── bml.coffee │ │ ├── item-references.coffee │ │ ├── opml.coffee │ │ ├── paths.coffee │ │ ├── taskpaper │ │ │ ├── change-delegate.coffee │ │ │ ├── index.coffee │ │ │ ├── smart-links.coffee │ │ │ ├── tags.coffee │ │ │ └── types.coffee │ │ ├── text.coffee │ │ └── writeroom │ │ │ └── index.coffee │ ├── shortid │ │ ├── README.md │ │ ├── alphabet.js │ │ ├── encode.js │ │ ├── index.js │ │ ├── random.js │ │ └── shortid.js │ ├── span-buffer │ │ ├── index.coffee │ │ ├── marker.coffee │ │ ├── span-branch.coffee │ │ ├── span-leaf.coffee │ │ └── span.coffee │ ├── undo-manager.coffee │ └── util.coffee │ ├── test │ ├── atomTestRunner.coffee │ ├── attributed-string-spec.coffee │ ├── date-time-parser-spec.coffee │ ├── date-time-spec.coffee │ ├── item-path-query-spec.coffee │ ├── item-path-spec.coffee │ ├── item-serializer-spec.coffee │ ├── item-spec.coffee │ ├── load-outline-fixture.coffee │ ├── mocha.opts │ ├── outline-spec.coffee │ ├── run-buffer-spec.coffee │ ├── serializations │ │ ├── bml-spec.coffee │ │ ├── item-references-spec.coffee │ │ ├── opml-spec.coffee │ │ ├── taskpaper-spec.coffee │ │ └── text-spec.coffee │ └── span-buffer-spec.coffee │ └── webpack.config.coffee ├── Cartfile ├── Cartfile.resolved ├── Carthage └── Build │ ├── .AppReceiptValidator.version │ ├── .Mac-Framework-V4.version │ ├── .Sparkle.version │ └── Mac │ └── Paddle.framework │ ├── Headers │ ├── Modules │ ├── Paddle │ ├── Resources │ └── Versions │ ├── A │ ├── Headers │ │ ├── PADAlert.h │ │ ├── PADCheckoutOptions.h │ │ ├── PADDisplayConfiguration.h │ │ ├── PADError.h │ │ ├── PADPriceOverride.h │ │ ├── PADProduct.h │ │ ├── PADProductConfiguration.h │ │ └── Paddle.h │ ├── Modules │ │ └── module.modulemap │ ├── Paddle │ └── Resources │ │ ├── Base.lproj │ │ ├── PADActivateWindow.nib │ │ ├── PADCheckoutWindow.nib │ │ ├── PADProductNoTrialWindow.nib │ │ │ ├── keyedobjects-101300.nib │ │ │ └── keyedobjects.nib │ │ └── PADProductWindow.nib │ │ │ ├── keyedobjects-101300.nib │ │ │ └── keyedobjects.nib │ │ ├── Info.plist │ │ ├── PADWebPopWindowController.nib │ │ ├── de.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── en.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── error.html │ │ ├── es.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── fr.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── it.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── ja.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── nl.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── pl.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── pt.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── ru.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ ├── zh-Hans.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ │ └── zh-TW.lproj │ │ ├── Localizable.strings │ │ ├── PADActivateWindow.strings │ │ ├── PADCheckoutWindow.strings │ │ ├── PADProductNoTrialWindow.strings │ │ └── PADProductWindow.strings │ └── Current ├── LICENSE.md ├── Markdown.pl ├── README.md ├── TaskPaper.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm │ │ └── Package.resolved └── xcshareddata │ └── xcschemes │ ├── TaskPaper Direct.xcscheme │ ├── TaskPaper Setapp.xcscheme │ └── TaskPaper.xcscheme ├── TaskPaper ├── AppReview.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-1024.png │ │ ├── Icon-128.png │ │ ├── Icon-256.png │ │ ├── Icon-257.png │ │ ├── Icon-32.png │ │ ├── Icon-512.png │ │ ├── Icon-513.png │ │ ├── Icon-64.png │ │ ├── Taskpaper-16x16.png │ │ └── Taskpaper-16x16@2x.png │ ├── Contents.json │ ├── RemindersIcon.imageset │ │ ├── Contents.json │ │ ├── Reminders.png │ │ └── Reminders@2x.png │ ├── TaskPaperDocument.iconset │ │ ├── icon_128x128.png │ │ ├── icon_128x128@2x.png │ │ ├── icon_16x16.png │ │ ├── icon_16x16@2x.png │ │ ├── icon_256x256.png │ │ ├── icon_256x256@2x.png │ │ ├── icon_32x32.png │ │ ├── icon_32x32@2x.png │ │ ├── icon_512x512.png │ │ └── icon_512x512@2x.png │ ├── TaskPaperOLD.appiconset │ │ ├── Contents.json │ │ ├── Taskpaper-128x128.png │ │ ├── Taskpaper-128x128@2x.png │ │ ├── Taskpaper-16x16.png │ │ ├── Taskpaper-16x16@2x.png │ │ ├── Taskpaper-256x256.png │ │ ├── Taskpaper-256x256@2x.png │ │ ├── Taskpaper-32x32.png │ │ ├── Taskpaper-32x32@2x.png │ │ ├── Taskpaper-512x512.png │ │ └── Taskpaper-512x512@2x.png │ └── ToolbarSearchIcon.imageset │ │ ├── Contents.json │ │ └── search.png ├── Base.lproj │ └── MainMenu.storyboard ├── Bridging-Header.h ├── DMGTemplate-Direct.dmgCanvas │ ├── Disk Image │ └── QuickLook │ │ └── Preview.jpg ├── DMGTemplate-Setapp.dmgCanvas │ ├── Disk Image │ └── QuickLook │ │ └── Preview.jpg ├── Default.less ├── ExportOptions-Direct.plist ├── OutlineEditorSplitViewController-TaskPaper.swift ├── OutlineEditorViewController-TaskPaper.swift ├── OutlineEditorWindowController-TaskPaper.swift ├── Resources │ └── es.lproj │ │ └── Setapp.strings ├── SetappAppIcon.png ├── TaskPaper-Direct-Info.plist ├── TaskPaper-Direct-Notes.md ├── TaskPaper-Direct.entitlements ├── TaskPaper-Info.plist ├── TaskPaper-Setapp-Info.plist ├── TaskPaper.entitlements ├── TaskPaper.sdef ├── TaskPaperAppDelegate.swift ├── TaskPaperDocument.swift ├── TaskPaperInfoPlist.strings ├── Welcome.txt ├── base-stylesheet.less ├── libSetapp │ └── Resources │ │ ├── ja.lproj │ │ └── Setapp.strings │ │ ├── ko.lproj │ │ └── Setapp.strings │ │ ├── nl.lproj │ │ └── Setapp.strings │ │ ├── pl.lproj │ │ └── Setapp.strings │ │ ├── ru.lproj │ │ └── Setapp.strings │ │ ├── uk.lproj │ │ └── Setapp.strings │ │ └── zh-Hans.lproj │ │ └── Setapp.strings ├── searches.taskpaper ├── setappPublicKey.pem └── tags.taskpaper ├── TaskPaperTests ├── Info.plist └── TaskPaperTests.swift ├── build.sh └── javascript.sh /.gitignore: -------------------------------------------------------------------------------- 1 | ## Build generated 2 | /build 3 | /DerivedData 4 | 5 | # Carthage, Keep Build/Mac, ignore everything else 6 | Carthage/Build/iOS 7 | Carthage/Build/tvOS 8 | Carthage/Build/watchOS 9 | Carthage/Checkouts 10 | 11 | ## Various settings 12 | *.pbxuser 13 | !default.pbxuser 14 | *.mode1v3 15 | !default.mode1v3 16 | *.mode2v3 17 | !default.mode2v3 18 | *.perspectivev3 19 | !default.perspectivev3 20 | xcuserdata/ 21 | 22 | ## Other 23 | *.moved-aside 24 | *.xcuserstate 25 | 26 | ## Obj-C/Swift specific 27 | *.hmap 28 | *.ipa 29 | *.dSYM.zip 30 | *.dSYM 31 | 32 | dist 33 | min 34 | node_modules 35 | lib 36 | .DS_Store 37 | npm-debug.log 38 | *.swp -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output 66 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/BirchError.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | public enum BirchError: Error { 4 | case runtimeError(String) 5 | } 6 | 7 | extension BirchError: LocalizedError { 8 | public var errorDescription: String? { 9 | switch self { 10 | case .runtimeError(let string): 11 | return string 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/BirchScriptContext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JavaScriptContext.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 6/28/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import BirchOutline 10 | import Foundation 11 | import JavaScriptCore 12 | 13 | extension BirchScriptContext { 14 | var jsBirch: JSValue { 15 | return jsBirchExports.forProperty("Birch") 16 | } 17 | 18 | var jsBirchCommands: JSValue { 19 | return jsBirch.forProperty("commands") 20 | } 21 | 22 | var jsBirchPreferences: JSValue { 23 | return jsBirch.forProperty("preferences") 24 | } 25 | 26 | public var jsOutlineSidebarClass: JSValue { 27 | return jsBirchExports.forProperty("OutlineSidebar") 28 | } 29 | 30 | public var jsOutlineEditorClass: JSValue { 31 | return jsBirchExports.forProperty("OutlineEditor") 32 | } 33 | 34 | public var jsChoicePaletteClass: JSValue { 35 | return jsBirchExports.forProperty("ChoicePalette") 36 | } 37 | 38 | public var jsStyleSheetClass: JSValue { 39 | return jsBirchExports.forProperty("StyleSheet") 40 | } 41 | 42 | public var jsSearchesConfigurationOutline: JSValue { 43 | return jsBirchExports.forProperty("searchesConfigurationOutline") 44 | } 45 | 46 | public var jsTagsConfigurationOutline: JSValue { 47 | return jsBirchExports.forProperty("tagsConfigurationOutline") 48 | } 49 | 50 | public var jsTaskPaperPluginInitFunction: JSValue { 51 | return jsBirchExports.forProperty("taskPaperPluginInitFunction") 52 | } 53 | 54 | public var jsWriteRoomPluginInitFunction: JSValue { 55 | return jsBirchExports.forProperty("writeRoomPluginInitFunction") 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/Checkers.h: -------------------------------------------------------------------------------- 1 | // 2 | // Checkers.h 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 8/31/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface Checkers : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/Checkers.m: -------------------------------------------------------------------------------- 1 | // 2 | // Checkers.m 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 8/31/16. 6 | // 7 | // 8 | 9 | #import "Checkers.h" 10 | 11 | @implementation Checkers 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/ChoicePaletteRowView.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | 3 | let sharedTableRowView = NSTableRowView() 4 | 5 | class ChoicePaletteRowView: NSTableRowView { 6 | 7 | override var isEmphasized: Bool { 8 | get { 9 | return isSelected 10 | } 11 | set(value) {} 12 | } 13 | 14 | override func drawSelection(in dirtyRect: NSRect) { 15 | NSColor(red: 94 / 255.0, green: 151 / 255.0, blue: 247 / 255.0, alpha: 1.0).set() 16 | dirtyRect.fill() 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/ChoicePaletteTableCellView.swift: -------------------------------------------------------------------------------- 1 | import AppKit 2 | import Foundation 3 | 4 | class ChoicePaletteTableCellView: NSTableCellView { 5 | 6 | @IBOutlet var titleTextField: NSTextField! 7 | @IBOutlet var detailTextField: NSTextField! 8 | @IBOutlet var indentationLayoutConstraint: NSLayoutConstraint! 9 | 10 | override var backgroundStyle: NSView.BackgroundStyle { 11 | didSet { 12 | updateLabelColors() 13 | } 14 | } 15 | 16 | func updateLabelColors() { 17 | if backgroundStyle == .normal { 18 | titleTextField.textColor = NSColor.controlTextColor 19 | detailTextField.textColor = NSColor.controlTextColor 20 | } else if backgroundStyle == .emphasized { 21 | titleTextField.textColor = NSColor.alternateSelectedControlTextColor 22 | detailTextField.textColor = NSColor.alternateSelectedControlTextColor 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/ChoicePaletteTableView.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | 3 | class ChoicePaletteTableView: NSTableView { 4 | 5 | override var canBecomeKeyView: Bool { 6 | return false 7 | } 8 | 9 | override var acceptsFirstResponder: Bool { 10 | return false 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/ChoicePaletteTextField.swift: -------------------------------------------------------------------------------- 1 | import AppKit 2 | 3 | class ChoicePaletteTextField: NSTextField {} 4 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/ChoicePaletteWindow.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChoicePaletteWindow.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/11/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ChoicePaletteWindow: NSPanel { 12 | override init(contentRect: NSRect, styleMask _: NSWindow.StyleMask, backing bufferingType: NSWindow.BackingStoreType, defer flag: Bool) { 13 | super.init(contentRect: contentRect, styleMask: .borderless, backing: bufferingType, defer: flag) 14 | commonInit() 15 | } 16 | 17 | override var canBecomeKey: Bool { 18 | return true 19 | } 20 | 21 | func commonInit() { 22 | isOpaque = false 23 | backgroundColor = NSColor.windowBackgroundColor 24 | styleMask = [.titled, .fullSizeContentView, .utilityWindow] 25 | isMovableByWindowBackground = true 26 | titlebarAppearsTransparent = true 27 | titleVisibility = .hidden 28 | showsToolbarButton = false 29 | standardWindowButton(NSWindow.ButtonType.zoomButton)?.isHidden = true 30 | standardWindowButton(NSWindow.ButtonType.miniaturizeButton)?.isHidden = true 31 | standardWindowButton(NSWindow.ButtonType.closeButton)?.isHidden = true 32 | standardWindowButton(NSWindow.ButtonType.zoomButton)?.isHidden = true 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/CoreFoundation-Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CoreFoundation-Extensions.swift 3 | // TextInputClientText 4 | // 5 | // Created by Jesse Grosjean on 2/10/17. 6 | // Copyright © 2017 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension CFRange { 12 | var toNSRange: NSRange { 13 | return NSRange(location: location, length: length) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/CoreGraphics-Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CoreGraphics-Extensions.swift 3 | // TextInputClientText 4 | // 5 | // Created by Jesse Grosjean on 2/10/17. 6 | // Copyright © 2017 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension CGPoint { 12 | func distance(to point: CGPoint) -> CGFloat { 13 | return CGFloat(hypotf(Float(x - point.x), Float(y - point.y))) 14 | } 15 | } 16 | 17 | extension CGRect { 18 | var center: CGPoint { 19 | return CGPoint(x: midX, y: midY) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/DatePicker.swift: -------------------------------------------------------------------------------- 1 | class DatePicker: NSDatePicker { 2 | 3 | override var acceptsFirstResponder: BooleanLiteralType { 4 | false 5 | } 6 | 7 | } 8 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/Debouncer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Debouncer.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/5/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class Debouncer: NSObject { 12 | weak var timer: Timer? 13 | 14 | let callback: () -> Void 15 | let delay: Double 16 | 17 | init(delay: Double, callback: @escaping (() -> Void)) { 18 | self.delay = delay 19 | self.callback = callback 20 | } 21 | 22 | func call() { 23 | cancel() 24 | timer = Timer.scheduledTimer(timeInterval: delay, target: self, selector: #selector(Debouncer.fire), userInfo: nil, repeats: false) 25 | } 26 | 27 | func cancel() { 28 | timer?.invalidate() 29 | timer = nil 30 | } 31 | 32 | @objc func fire() { 33 | callback() 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/Font.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Font.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 6/11/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #if os(iOS) 10 | import UIKit 11 | typealias Font = UIFont 12 | #elseif os(OSX) 13 | import Cocoa 14 | typealias Font = NSFont 15 | #endif 16 | 17 | func defaultUserFont() -> Font { 18 | #if os(iOS) 19 | return Font.preferredFontForTextStyle(UIFontTextStyleBody) 20 | #elseif os(OSX) 21 | return Font.userFont(ofSize: 0)! 22 | #endif 23 | } 24 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/ItemViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ItemViewController.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 2/2/17. 6 | // 7 | // 8 | 9 | import BirchOutline 10 | import Cocoa 11 | 12 | class ItemViewController: NSCollectionViewItem { 13 | @IBOutlet var itemView: ItemView! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | } 18 | 19 | override var representedObject: Any? { 20 | didSet { 21 | itemView!.string = (representedObject as? ItemType)?.body.appending("\n") ?? "\n" 22 | } 23 | } 24 | 25 | override func preferredLayoutAttributesFitting(_ layoutAttributes: NSCollectionViewLayoutAttributes) -> NSCollectionViewLayoutAttributes { 26 | return super.preferredLayoutAttributesFitting(layoutAttributes) 27 | } 28 | 29 | override func apply(_ layoutAttributes: NSCollectionViewLayoutAttributes) { 30 | super.apply(layoutAttributes) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/JSON.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JSON.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 5/31/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension String { 12 | func JSONValue() -> Any? { 13 | if count == 0 { 14 | return nil 15 | } 16 | 17 | do { 18 | return try JSONSerialization.jsonObject(with: data(using: String.Encoding.utf8)!, options: JSONSerialization.ReadingOptions()) 19 | } catch { 20 | print(error) 21 | } 22 | 23 | return nil 24 | } 25 | } 26 | 27 | func JSONRepresentation(_ jsonObject: Any) -> String? { 28 | do { 29 | let data = try JSONSerialization.data(withJSONObject: jsonObject, options: JSONSerialization.WritingOptions()) 30 | return NSString(data: data, encoding: String.Encoding.utf8.rawValue) as String? 31 | } catch { 32 | print(error) 33 | } 34 | return nil 35 | } 36 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSAppleEventDescriptor-AEM.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSAppleEventDescriptor-Extensions.h 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/19/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSAppleEventDescriptor (AEM) 12 | 13 | + (nullable NSAppleEventDescriptor *)pack:(nonnull id)objects; 14 | 15 | - (nullable id)unpack; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSAppleEventDescriptor-AEM.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSAppleEventDescriptor-Extensions.m 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/19/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import "NSAppleEventDescriptor-AEM.h" 10 | #import "codecs.h" 11 | 12 | @implementation NSAppleEventDescriptor (AEM) 13 | 14 | + (nullable NSAppleEventDescriptor *)pack:(nonnull id)objects { 15 | return [[AEMCodecs defaultCodecs] pack:objects]; 16 | } 17 | 18 | - (nullable id)unpack { 19 | return [[AEMCodecs defaultCodecs] unpack:self]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSApplication-IsPreview.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSApplication-IsPreview.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/19/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | extension NSApplication { 12 | public var isPreview: Bool { 13 | let bundleInfo = Bundle.main.infoDictionary! 14 | let currentShortVersion = bundleInfo["CFBundleShortVersionString"] as! String 15 | return currentShortVersion.range(of: "Preview") != nil 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSLayoutManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutManager.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 7/11/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | extension NSLayoutManager { 12 | public var drawsGuides: Bool { 13 | get { 14 | return false 15 | } 16 | set(value) {} 17 | } 18 | 19 | public func snapshotForGlyphRange(_ glyphRange: NSRange, textContainer: NSTextContainer? = nil) -> (image: NSImage, bounds: NSRect) { 20 | let tc = textContainer ?? textContainers[0] 21 | let tv = tc.textView 22 | 23 | var rect = boundingRect(forGlyphRange: glyphRange, in: tc) 24 | rect = tv!.centerScanRect(rect) 25 | rect.size.width += rect.origin.x 26 | rect.origin.x = 0 27 | 28 | let image = NSImage(size: rect.size) 29 | let point = rect.origin.pointByNegation() 30 | let savedDrawsGuides = drawsGuides 31 | 32 | image.lockFocusFlipped(true) 33 | drawsGuides = false 34 | drawBackground(forGlyphRange: glyphRange, at: point) 35 | drawGlyphs(forGlyphRange: glyphRange, at: point) 36 | drawsGuides = savedDrawsGuides 37 | image.unlockFocus() 38 | 39 | return (image: image, bounds: rect) 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSMenu-Additions.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | 3 | extension NSMenu { 4 | func item(withAction action: Selector) -> NSMenuItem? { 5 | for each in items { 6 | if each.action == action { 7 | return each 8 | } 9 | } 10 | return nil 11 | } 12 | 13 | func submenuItem(withAction action: Selector) -> NSMenuItem? { 14 | for each in items { 15 | if each.action == action { 16 | return each 17 | } 18 | if each.hasSubmenu { 19 | if let item = each.submenu?.submenuItem(withAction: action) { 20 | return item 21 | } 22 | } 23 | } 24 | return nil 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSMutableAttributedString-Performance.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString-Performance.h 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 7/14/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSMutableAttributedString (Performance) 12 | 13 | - (void)noConversionSetAttributes:(nullable id)attrs range:(NSRange)range; 14 | - (void)noConversionAddAttributes:(nonnull id)attrs range:(NSRange)range; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSMutableAttributedString-Performance.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSMutableAttributedString-Performance.m 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 7/14/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import "NSMutableAttributedString-Performance.h" 10 | 11 | @implementation NSMutableAttributedString (Performance) 12 | 13 | - (void)noConversionSetAttributes:(nullable id)attrs range:(NSRange)range { 14 | [self setAttributes:attrs range:range]; 15 | } 16 | 17 | - (void)noConversionAddAttributes:(nonnull id)attrs range:(NSRange)range { 18 | [self addAttributes:attrs range:range]; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSPoint.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSPoint.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 7/11/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension NSPoint { 12 | public func pointByTranslating(_ delta: NSPoint) -> NSPoint { 13 | var translatedPoint = self 14 | translatedPoint.x += delta.x 15 | translatedPoint.y += delta.y 16 | return translatedPoint 17 | } 18 | 19 | public func pointByNegation() -> NSPoint { 20 | var p = self 21 | p.x = -p.x 22 | p.y = -p.y 23 | return p 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSRect.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSRect.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 7/5/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension NSRect { 12 | var minXminY: NSPoint { 13 | return NSMakePoint(minX, minY) 14 | } 15 | 16 | var minXmaxY: NSPoint { 17 | return NSMakePoint(minX, maxY) 18 | } 19 | 20 | var maxXminY: NSPoint { 21 | return NSMakePoint(maxX, minY) 22 | } 23 | 24 | var maxXmaxY: NSPoint { 25 | return NSMakePoint(maxX, maxY) 26 | } 27 | 28 | public func rectByCenteringInRect(_ outerRect: NSRect) -> NSRect { 29 | var centeredRect = self 30 | centeredRect.origin.x = outerRect.origin.x + (outerRect.size.width - centeredRect.size.width) / 2.0 31 | centeredRect.origin.y = outerRect.origin.y + (outerRect.size.height - centeredRect.size.height) / 2.0 32 | return centeredRect 33 | } 34 | 35 | public func rectByTranslating(_ delta: NSPoint) -> NSRect { 36 | var translatedRect = self 37 | translatedRect.origin.x += delta.x 38 | translatedRect.origin.y += delta.y 39 | return translatedRect 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSTextField-AttributedString.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextField.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 11/3/16. 6 | // 7 | // 8 | 9 | import Cocoa 10 | 11 | extension NSTextField { 12 | var attributedStringValueRemovingForegroundColor: NSMutableAttributedString { 13 | let attributedString = attributedStringValue.mutableCopy() as! NSMutableAttributedString 14 | attributedString.removeAttribute(NSAttributedString.Key.foregroundColor, range: NSMakeRange(0, attributedString.length)) 15 | return attributedString 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSTextStorage-Performance.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | // Implement common NSString calls to avoid needing to call textStorage.string in Swift ... since that does a string conversion. 4 | 5 | @interface NSTextStorage (Performance) 6 | 7 | - (unichar)characterAtIndex:(NSUInteger)index; 8 | - (NSString * _Nonnull)substringWithRange:(NSRange)range; 9 | - (NSRange)paragraphRangeForRange:(NSRange)range; 10 | - (void)enumerateParagraphRangesInRange:(NSRange)range usingBlock:(nonnull void (^)(NSRange enclosingRange, BOOL * __nullable stop))block; 11 | - (void)enumerateSubstringsInRange:(NSRange)range options:(NSStringEnumerationOptions)opts usingBlock:(nonnull void (^)(NSString * __nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * __nullable stop))block; 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSTextStorageBase.h: -------------------------------------------------------------------------------- 1 | // 2 | // OutlineEditorTextStorage.h 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 7/14/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSTextStorageBase : NSTextStorage 12 | 13 | @property (nonatomic) NSTextStorage *backingStorage; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSTextStorageBase.m: -------------------------------------------------------------------------------- 1 | // 2 | // OutlineEditorTextStorage.m 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 7/14/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import "NSTextStorageBase.h" 10 | #import "JGMethodSwizzler.h" 11 | 12 | @implementation NSTextStorageBase 13 | 14 | - (instancetype)init { 15 | self = [super init]; 16 | if (self) { 17 | _backingStorage = [[NSTextStorage alloc] init]; 18 | } 19 | return self; 20 | } 21 | 22 | - (NSString *)string { 23 | return [_backingStorage string]; 24 | } 25 | 26 | - (NSUInteger)length { 27 | return [_backingStorage length]; 28 | } 29 | 30 | - (NSDictionary *)attributesAtIndex:(NSUInteger)index effectiveRange:(NSRangePointer)aRange { 31 | NSRange effectiveRange; 32 | NSDictionary *attributes = [_backingStorage attributesAtIndex:index effectiveRange:&effectiveRange]; 33 | NSString *storageItemID = attributes[@"StorageItemID"]; 34 | 35 | if (storageItemID) { 36 | if (aRange) { 37 | aRange->location = effectiveRange.location; 38 | aRange->length = effectiveRange.length; 39 | } 40 | return attributes; 41 | } else { 42 | [self fillBackingStoreAttributesInRange:effectiveRange]; 43 | return [_backingStorage attributesAtIndex:index effectiveRange:aRange]; 44 | } 45 | } 46 | 47 | - (void)fillBackingStoreAttributesInRange:(NSRange)range { 48 | } 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSTextView-AccessibilityPerformanceHacks.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextView-AccessibilityPerformanceHacks.h 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 11/14/18. 6 | // 7 | 8 | #import 9 | 10 | @interface NSTextView (AccessibilityPerformanceHacks) 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSTextView-AccessibilityPerformanceHacks.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextView-AccessibilityPerformanceHacks.m 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 11/14/18. 6 | // 7 | 8 | #import "NSTextView-AccessibilityPerformanceHacks.h" 9 | 10 | // Accessibility API calls these methods and then iterates over all attributes in NSTextView 11 | // to find all links and attachments. This means all items need to be loaded into text view 12 | // when they are suposed to be loaded lazily... to expensive. Lots of beachballs. 13 | 14 | @implementation NSTextView (AccessibilityPerformanceHacks) 15 | 16 | - (id)accessibilityTextLinks { 17 | return nil; 18 | } 19 | 20 | - (id)accessibilityAttachments { 21 | return nil; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSTextView-RangeForUserCompletionAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextView-RangeForUserCompletionAdditions.h 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/3/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSTextView (RangeForUserCompletionAdditions) 12 | 13 | @property (nonatomic, nullable) NSCharacterSet *wordRangeLeadExtensionCharacters; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSView-ContextMenu.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSView-ContextMenu.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/4/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | extension NSView { 10 | func simulateClickToShowContextMenu(_ localPoint: NSPoint) { 11 | let location = convert(localPoint, to: nil) 12 | 13 | let event = NSEvent.mouseEvent( 14 | with: .leftMouseDown, 15 | location: location, 16 | modifierFlags: [], 17 | timestamp: NSDate.timeIntervalSinceReferenceDate, 18 | windowNumber: window!.windowNumber, 19 | context: NSGraphicsContext.current, 20 | eventNumber: 0, 21 | clickCount: 1, 22 | pressure: 1.0 23 | ) 24 | 25 | if let event = event { 26 | NSApp.sendEvent(event) 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSView-Hiearchy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSView-RootView.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/7/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | extension NSView { 10 | var rootView: NSView { 11 | var each = self 12 | while let superview = each.superview { 13 | each = superview 14 | } 15 | return each 16 | } 17 | 18 | var ancestorViews: [NSView] { 19 | var ancestors = [NSView]() 20 | var each = self 21 | while let superview = each.superview { 22 | ancestors.append(superview) 23 | each = superview 24 | } 25 | return ancestors 26 | } 27 | 28 | var ancestorViewsWithSelf: [NSView] { 29 | var ancestors = ancestorViews 30 | ancestors.insert(self, at: 0) 31 | return ancestors 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSViewController-Hiearchy.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSViewController-DescendentViewControllers.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/4/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | extension NSViewController { 10 | var rootViewController: NSViewController { 11 | var each = self 12 | while let parentController = each.parent { 13 | each = parentController 14 | } 15 | return each 16 | } 17 | 18 | var ancestorViewControllers: [NSViewController] { 19 | var ancestors = [NSViewController]() 20 | var each = self 21 | while let parentController = each.parent { 22 | ancestors.append(parentController) 23 | each = parentController 24 | } 25 | return ancestors 26 | } 27 | 28 | var ancestorViewControllersWithSelf: [NSViewController] { 29 | var ancestors = ancestorViewControllers 30 | ancestors.insert(self, at: 0) 31 | return ancestors 32 | } 33 | 34 | var descendentViewControllers: [NSViewController] { 35 | var descendants = [NSViewController]() 36 | func visit(_ viewController: NSViewController) { 37 | for each in viewController.children { 38 | descendants.append(each) 39 | visit(each) 40 | } 41 | } 42 | visit(self) 43 | return descendants 44 | } 45 | 46 | var descendentViewControllersWithSelf: [NSViewController] { 47 | var descendants = descendentViewControllers 48 | descendants.insert(self, at: 0) 49 | return descendants 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSVisualEffectView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSVisualEffectView-Colors.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/7/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | extension NSView { 10 | var enclosingVisualEffectView: NSVisualEffectView? { 11 | var each = superview 12 | while each != nil { 13 | if let visualEffectView = each as? NSVisualEffectView { 14 | return visualEffectView 15 | } 16 | each = each?.superview 17 | } 18 | return nil 19 | } 20 | } 21 | 22 | /* 23 | Doesn't work on 10.12, layer names are gone, instead seems to be private API in NSVisualEffectView to access these layers 24 | extension NSVisualEffectView { 25 | 26 | var backdropColor: CGColor? { 27 | get { 28 | return layer?.layerNamed("Backdrop")?.backgroundColor 29 | } 30 | set(color) { 31 | delay(1) { [weak self] in 32 | self?.layer?.layerNamed("Backdrop")?.backgroundColor = color 33 | } 34 | } 35 | } 36 | 37 | var tintColor: CGColor? { 38 | get { 39 | return layer?.layerNamed("Tint")?.backgroundColor 40 | } 41 | set(color) { 42 | delay(1) { [weak self] in 43 | self?.layer?.layerNamed("Tint")?.backgroundColor = color 44 | } 45 | } 46 | } 47 | 48 | } 49 | */ 50 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSWindow-Centering.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSWindow-CenterOnScreen.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/11/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | extension NSWindow { 10 | func centerOnScreen(_ screen: NSScreen?) { 11 | if let screen = screen ?? self.screen { 12 | let screenFrame = screen.visibleFrame 13 | let screenSize = screenFrame.size 14 | let origin = NSPoint( 15 | x: screenFrame.minX + (screenSize.width - frame.size.width) / 2, 16 | y: screenFrame.minY + (screenSize.height - frame.size.height) / 2 17 | ) 18 | setFrameOrigin(origin) 19 | } 20 | } 21 | 22 | func centerOnWindow(_ window: NSWindow?) { 23 | if let window = window { 24 | let windowFrame = window.frame 25 | let windowSize = windowFrame.size 26 | let origin = NSPoint( 27 | x: windowFrame.minX + (windowSize.width - frame.size.width) / 2, 28 | y: windowFrame.minY + (windowSize.height - frame.size.height) / 2 29 | ) 30 | setFrameOrigin(origin) 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSWindow-TitleLayout.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSWindow.h 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/3/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @protocol TitleLayoutLocator 12 | - (CGFloat)locateTitleCenter; 13 | @end 14 | 15 | @interface NSWindow (TitleLayout) 16 | 17 | - (void)updateTitleLayout:(id )locator; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSWindowTabbedBase.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSWindowTabbedBase.h 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 9/14/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @interface NSWindowTabbedBase : NSWindow 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/NSWindowTabbedBase.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSWindowTabbedBase.m 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 9/14/16. 6 | // 7 | // 8 | 9 | #import "NSWindowTabbedBase.h" 10 | 11 | @implementation NSWindowTabbedBase 12 | 13 | - (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSWindowStyleMask)style backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag { 14 | self = [super initWithContentRect:contentRect styleMask:style backing:bufferingType defer:flag]; 15 | if (self) { 16 | } 17 | return self; 18 | } 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/OutlineEditorCollectionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OutlineEditorCollectionView.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 2/10/17. 6 | // 7 | // 8 | 9 | import Cocoa 10 | 11 | class OutlineEditorCollectionView: NSCollectionView {} 12 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/OutlineEditorHandleClickGestureRecognizer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HandleClickGestureRecognizer.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 11/11/16. 6 | // 7 | // 8 | 9 | import Cocoa 10 | 11 | class OutlineEditorHandleClickGestureRecognizer: NSGestureRecognizer { 12 | var mouseDown: NSPoint? 13 | var minimumDragDistance: Float = 5 14 | 15 | override func reset() { 16 | mouseDown = nil 17 | super.reset() 18 | } 19 | 20 | override func mouseDown(with event: NSEvent) { 21 | mouseDown = event.locationInWindow 22 | state = .possible 23 | } 24 | 25 | override func mouseDragged(with event: NSEvent) { 26 | if state == .possible, let mouseDown = mouseDown { 27 | let current = event.locationInWindow 28 | let distance = hypotf(Float(mouseDown.x - current.x), Float(mouseDown.y - current.y)) 29 | if distance >= minimumDragDistance { 30 | state = .failed 31 | } 32 | } 33 | } 34 | 35 | override func mouseUp(with _: NSEvent) { 36 | if state == .possible { 37 | state = .recognized 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/OutlineEditorHandleDragGestureRecognizer.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HandleDragGestureRecognizer.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 11/11/16. 6 | // 7 | // 8 | 9 | import Cocoa 10 | 11 | class OutlineEditorHandleDragStartGestureRecognizer: NSGestureRecognizer { 12 | var mouseDown: NSPoint? 13 | var minimumDragDistance: Float = 5 14 | 15 | override func reset() { 16 | mouseDown = nil 17 | super.reset() 18 | } 19 | 20 | override func mouseDown(with event: NSEvent) { 21 | mouseDown = event.locationInWindow 22 | state = .possible 23 | } 24 | 25 | override func mouseDragged(with event: NSEvent) { 26 | if state == .possible, let mouseDown = mouseDown { 27 | let current = event.locationInWindow 28 | let distance = hypotf(Float(mouseDown.x - current.x), Float(mouseDown.y - current.y)) 29 | if distance > minimumDragDistance { 30 | state = .recognized 31 | } 32 | } 33 | } 34 | 35 | override func mouseUp(with _: NSEvent) { 36 | if state == .possible { 37 | state = .failed 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/OutlineEditorTextClipView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OutlineEditorTextClipView.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/8/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | class OutlineEditorTextClipView: NSClipView { 10 | override func scroll(to newOrigin: NSPoint) { 11 | var p = newOrigin 12 | p.x = p.x.rounded() 13 | p.y = p.y.rounded() 14 | if p.x != 0 { 15 | // Clap x to 0. Sometimes when scrolling very fast (very big view) x comes in as a non zero... not sure why. Seems to be a genral bug, as I can make it happen in xCode. 16 | super.scroll(to: NSMakePoint(0, p.y)) 17 | } else { 18 | super.scroll(to: p) 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/OutlineSidebarRowView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OutlineSidebarRowView.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/17/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class OutlineSidebarRowView: NSTableRowView { 12 | override func drawSelection(in dirtyRect: NSRect) { 13 | NSColor(red: 94 / 255.0, green: 151 / 255.0, blue: 247 / 255.0, alpha: 1.0).set() 14 | dirtyRect.fill() 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/OutlineSidebarSearchEditorViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // OutlineSidebarSearchEditorViewController.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 9/7/16. 6 | // 7 | // 8 | 9 | import BirchOutline 10 | import Cocoa 11 | 12 | class OutlineSidebarSearchEditorViewController: NSViewController { 13 | @IBOutlet var titleTextField: NSTextField! 14 | 15 | @objc var label: String = "" 16 | @objc var search: String = "" 17 | @objc var embedded: Bool = false 18 | var creatingNew: Bool = false 19 | var completionCallback: ((String, String, Bool) -> Void)? 20 | 21 | @objc var validated: Bool { 22 | return label.utf16.count > 0 && search.utf16.count > 0 23 | } 24 | 25 | @objc class func keyPathsForValuesAffectingValidated() -> Set { 26 | return ["label", "search"] 27 | } 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | if creatingNew { 32 | titleTextField.stringValue = NSLocalizedString("New Search", tableName: "SavedSearchSheet", comment: "label") 33 | } else { 34 | titleTextField.stringValue = NSLocalizedString("Edit Search", tableName: "SavedSearchSheet", comment: "label") 35 | } 36 | } 37 | 38 | @IBAction func ok(_ sender: Any?) { 39 | completionCallback?(label, search, embedded) 40 | dismiss(sender) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/PaletteViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PaletteViewController.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 10/28/16. 6 | // 7 | // 8 | 9 | import Cocoa 10 | 11 | class PaletteViewController: NSViewController { 12 | var completionHandler: ((Any?) -> Void)? 13 | 14 | func performAction(_ sender: Any?) { 15 | completionHandler?(sender) 16 | completionHandler = nil 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/PaletteWindow.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PaletteWindow.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 10/28/16. 6 | // 7 | // 8 | 9 | import Cocoa 10 | 11 | class PaletteWindow: NSPanel { 12 | override init(contentRect: NSRect, styleMask _: NSWindow.StyleMask, backing bufferingType: NSWindow.BackingStoreType, defer flag: Bool) { 13 | super.init(contentRect: contentRect, styleMask: .borderless, backing: bufferingType, defer: flag) 14 | commonInit() 15 | } 16 | 17 | override var canBecomeKey: Bool { 18 | return true 19 | } 20 | 21 | func commonInit() { 22 | isOpaque = false 23 | backgroundColor = NSColor.windowBackgroundColor 24 | styleMask = [.titled, .fullSizeContentView, .utilityWindow] 25 | isMovableByWindowBackground = true 26 | titlebarAppearsTransparent = true 27 | titleVisibility = .hidden 28 | showsToolbarButton = false 29 | standardWindowButton(NSWindow.ButtonType.zoomButton)?.isHidden = true 30 | standardWindowButton(NSWindow.ButtonType.miniaturizeButton)?.isHidden = true 31 | standardWindowButton(NSWindow.ButtonType.closeButton)?.isHidden = true 32 | standardWindowButton(NSWindow.ButtonType.zoomButton)?.isHidden = true 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/PaletteWindowController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PaletteWindowController.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 10/28/16. 6 | // 7 | // 8 | 9 | class PaletteWindowController: NSWindowController { 10 | override func windowDidLoad() { 11 | super.windowDidLoad() 12 | NotificationCenter.default.addObserver(self, selector: #selector(windowDidResignKey(_:)), name: NSWindow.didResignKeyNotification, object: window) 13 | } 14 | 15 | @objc func windowDidResignKey(_: Notification) { 16 | paletteViewController?.performAction(nil) 17 | } 18 | 19 | var paletteViewController: PaletteViewController? { 20 | return contentViewController as? PaletteViewController 21 | } 22 | 23 | deinit { 24 | NotificationCenter.default.removeObserver(self) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/Range-Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSRange-Extensions.swift 3 | // TextInputClientText 4 | // 5 | // Created by Jesse Grosjean on 2/10/17. 6 | // Copyright © 2017 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension NSRange { 12 | var toCFRange: CFRange { 13 | return CFRange(location: location, length: length) 14 | } 15 | 16 | var max: Int { 17 | return location + length 18 | } 19 | 20 | func intersection(range: CFRange) -> NSRange? { 21 | return intersection(range: NSMakeRange(range.location, range.length)) 22 | } 23 | 24 | func intersection(range: NSRange) -> NSRange? { 25 | var first = self 26 | var second = range 27 | 28 | if first.location > range.location { 29 | let tmp = first 30 | first = second 31 | second = tmp 32 | } 33 | 34 | if second.location < first.max { 35 | let end = min(first.max, second.max) 36 | return NSRange(location: second.location, length: end - second.location) 37 | } 38 | 39 | return nil 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/SearchBarSearchField.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchBarSearchField.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/1/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | protocol FirstResponderDelegate { 10 | func controlDidBecomeFirstResponder(_ sender: NSControl) 11 | func controlDidResignFirstResponder(_ sender: NSControl) 12 | } 13 | 14 | class SearchBarSearchField: NSSearchField { 15 | override func becomeFirstResponder() -> Bool { 16 | let didBecomeFirstResponder = super.becomeFirstResponder() 17 | if didBecomeFirstResponder { 18 | (delegate as? FirstResponderDelegate)?.controlDidBecomeFirstResponder(self) 19 | } 20 | return didBecomeFirstResponder 21 | } 22 | 23 | override func resignFirstResponder() -> Bool { 24 | let didResignFirstResponder = super.resignFirstResponder() 25 | if didResignFirstResponder { 26 | (delegate as? FirstResponderDelegate)?.controlDidResignFirstResponder(self) 27 | } 28 | return didResignFirstResponder 29 | } 30 | 31 | override func rectForSearchButton(whenCentered _: Bool) -> NSRect { 32 | var r = super.rectForSearchButton(whenCentered: false) 33 | r.size.width = 0 34 | return r 35 | } 36 | 37 | override func rectForSearchText(whenCentered _: Bool) -> NSRect { 38 | return bounds 39 | } 40 | 41 | override func rectForCancelButton(whenCentered _: Bool) -> NSRect { 42 | var r = super.rectForCancelButton(whenCentered: false) 43 | r.origin.x += r.size.width 44 | r.size.width = 0 45 | return r 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/SearchBarSearchFieldCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchBarSearchFieldCell.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/1/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | class SearchBarSearchFieldCell: NSSearchFieldCell { 10 | override func searchButtonRect(forBounds bounds: NSRect) -> NSRect { 11 | var rect = super.searchButtonRect(forBounds: bounds) 12 | rect.origin.x = 0 13 | // rect.size.width = 0 14 | return rect 15 | } 16 | 17 | override func searchTextRect(forBounds bounds: NSRect) -> NSRect { 18 | let maxButton = NSMaxX(searchButtonRect(forBounds: bounds)) 19 | let minCancel = NSMinX(cancelButtonRect(forBounds: bounds)) 20 | 21 | var rect = super.searchTextRect(forBounds: bounds) 22 | rect.origin.x = maxButton 23 | rect.size.width = minCancel - maxButton 24 | return rect 25 | } 26 | 27 | override func cancelButtonRect(forBounds rect: NSRect) -> NSRect { 28 | var rect = super.cancelButtonRect(forBounds: rect) 29 | rect.origin.x = rect.maxX 30 | rect.size.width = 0 31 | return rect 32 | } 33 | 34 | override func draw(withFrame _: NSRect, in _: NSView) { 35 | // drawInterior(withFrame: cellFrame, in: controlView) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/SearchBarSegmentedCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SearchBarButtonCell.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/9/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | class SearchBarSegmentedCell: NSSegmentedCell { 10 | override func draw(withFrame cellFrame: NSRect, in controlView: NSView) { 11 | drawInterior(withFrame: cellFrame, in: controlView) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/String-RangeExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String-RangeExtensions.swift 3 | // TextInputClientText 4 | // 5 | // Created by Laurel Grosjean on 2/4/17. 6 | // Copyright © 2017 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import AppKit 10 | 11 | extension String { 12 | /* func nsRange(from range: Range) -> NSRange { 13 | let from = range.lowerBound.samePosition(in: utf16) 14 | let to = range.upperBound.samePosition(in: utf16) 15 | return NSRange(location: utf16.distance(from: utf16.startIndex, to: from), 16 | length: utf16.distance(from: from, to: to)) 17 | } 18 | 19 | func range(from nsRange: NSRange) -> Range? { 20 | guard 21 | let from16 = utf16.index(utf16.startIndex, offsetBy: nsRange.location, limitedBy: utf16.endIndex), 22 | let to16 = utf16.index(from16, offsetBy: nsRange.length, limitedBy: utf16.endIndex), 23 | let from = String.Index(from16, within: self), 24 | let to = String.Index(to16, within: self) 25 | else { return nil } 26 | return from ..< to 27 | } 28 | 29 | func nsRangeOfComposedCharacterSequences(for nsRange: NSRange) -> NSRange? { 30 | if let range = range(from: nsRange) { 31 | let compostedRange = rangeOfComposedCharacterSequences(for: range) 32 | return self.nsRange(from: compostedRange) 33 | } 34 | return nil 35 | } */ 36 | } 37 | 38 | extension NSMutableAttributedString { 39 | func replaceCharacters(in range: NSRange, with str: Any) { 40 | if let string = str as? NSAttributedString { 41 | replaceCharacters(in: range, with: string) 42 | } else { 43 | replaceCharacters(in: range, with: str as! String) 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/URL-ExtendedAttributes.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SURL-ExtendedAttributes.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 9/8/16. 6 | // 7 | // 8 | 9 | import Foundation 10 | 11 | extension URL { 12 | func extendedAttributeString(forName name: String) -> String? { 13 | if let utf8 = extendedAttribute(forName: name) { 14 | return String(bytes: utf8, encoding: .utf8) 15 | } 16 | return nil 17 | } 18 | 19 | func extendedAttribute(forName name: String) -> [UInt8]? { 20 | let path = standardizedFileURL.path 21 | let length = getxattr(path, name, nil, 0, 0, 0) 22 | guard length >= 0 else { return nil } 23 | var data = [UInt8](repeating: 0, count: length) 24 | let result = getxattr(path, name, &data, data.count, 0, 0) 25 | guard result >= 0 else { return nil } 26 | return data 27 | } 28 | 29 | func setExtendedAttribute(string: String, forName name: String) -> Bool { 30 | return setExtendedAttribute(data: [UInt8](string.utf8), forName: name) 31 | } 32 | 33 | // Set extended attribute. Returns `true` on success and `false` on failure. 34 | func setExtendedAttribute(data: [UInt8], forName name: String) -> Bool { 35 | let path = standardizedFileURL.path 36 | let result = data.withUnsafeBufferPointer { 37 | setxattr(path, name, $0.baseAddress, data.count, 0, 0) 38 | } 39 | return result == 0 40 | } 41 | 42 | // Remove extended attribute. Returns `true` on success and `false` on failure. 43 | func removeExtendedAttribute(forName name: String) -> Bool { 44 | let path = standardizedFileURL.path 45 | let result = removexattr(path, name, 0) 46 | return result == 0 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/delay.swift: -------------------------------------------------------------------------------- 1 | // 2 | // delay.swift 3 | // BirchEditor 4 | // 5 | // Created by Jesse Grosjean on 8/7/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | func delay(_ delay: Double, closure: @escaping () -> Void) { 12 | DispatchQueue.main.asyncAfter( 13 | deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/getFileDescriptorPath.h: -------------------------------------------------------------------------------- 1 | // 2 | // getFileDescriptorPath.h 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 9/6/16. 6 | // 7 | // 8 | 9 | #import 10 | 11 | NSString* __nullable getFileDescriptorPath(int fd); -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditor/getFileDescriptorPath.m: -------------------------------------------------------------------------------- 1 | // 2 | // getFileDescriptorPath.m 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 9/6/16. 6 | // 7 | // 8 | 9 | #import "getFileDescriptorPath.h" 10 | 11 | NSString* __nullable getFileDescriptorPath(int fd) { 12 | char filePath[PATH_MAX]; 13 | if (fcntl(fd, F_GETPATH, filePath) != -1) 14 | { 15 | return [NSString stringWithCString:filePath encoding:NSUTF8StringEncoding]; 16 | } 17 | return nil; 18 | } -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/BirchEditorTests/StyleSheetTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StyleSheetTests.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 6/9/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import BirchOutline 10 | import JavaScriptCore 11 | @testable import TaskPaper 12 | import XCTest 13 | 14 | class StyleSheetTests: XCTestCase { 15 | var styleSheet: StyleSheet? 16 | weak var weakStyleSheet: StyleSheet? 17 | 18 | override func setUp() { 19 | styleSheet = StyleSheet(source: nil, scriptContext: BirchOutline.sharedContext) 20 | weakStyleSheet = styleSheet 21 | super.setUp() 22 | } 23 | 24 | override func tearDown() { 25 | super.tearDown() 26 | styleSheet = nil 27 | XCTAssertNil(weakStyleSheet) 28 | } 29 | 30 | func testComputeStyleKeyForElement() { 31 | let computedStyle = styleSheet?.computedStyleForElement(["tagName": "window"]) 32 | XCTAssertNil(computedStyle?.allValues["missingkey"]) 33 | XCTAssertNotNil(computedStyle?.allValues["appearance"]) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/ItemPasteboardProvider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ItemPasteboardProvider.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 8/23/16. 6 | // 7 | // 8 | 9 | import BirchOutline 10 | import Cocoa 11 | 12 | class ItemPasteboardProvider: NSObject, NSPasteboardItemDataProvider { 13 | let item: ItemType 14 | weak var outlineEditor: OutlineEditorType? 15 | 16 | init(item: ItemType, outlineEditor: OutlineEditorType) { 17 | self.item = item 18 | self.outlineEditor = outlineEditor 19 | } 20 | 21 | @objc func pasteboard(_: NSPasteboard?, item: NSPasteboardItem, provideDataForType type: NSPasteboard.PasteboardType) { 22 | // Local variable inserted by Swift 4.2 migrator. 23 | let type = convertFromNSPasteboardPasteboardType(type) 24 | 25 | if let outlineEditor = outlineEditor { 26 | if let items = ItemPasteboardUtilities.readItemsSerializedItemReferences(item, editor: outlineEditor) { 27 | item.setString(outlineEditor.serializeItems(items, options: ["type": type as Any]), forType: convertToNSPasteboardPasteboardType(type)) 28 | } 29 | } 30 | } 31 | } 32 | 33 | // Helper function inserted by Swift 4.2 migrator. 34 | private func convertFromNSPasteboardPasteboardType(_ input: NSPasteboard.PasteboardType) -> String { 35 | return input.rawValue 36 | } 37 | 38 | // Helper function inserted by Swift 4.2 migrator. 39 | private func convertToNSPasteboardPasteboardType(_ input: String) -> NSPasteboard.PasteboardType { 40 | return NSPasteboard.PasteboardType(rawValue: input) 41 | } 42 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/NSColor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSColor.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 9/6/18. 6 | // 7 | 8 | import Cocoa 9 | 10 | extension NSColor { 11 | convenience init(hexString: String, alpha: CGFloat = 1.0) { 12 | let hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) 13 | let scanner = Scanner(string: hexString) 14 | if hexString.hasPrefix("#") { 15 | scanner.scanLocation = 1 16 | } 17 | var color: UInt32 = 0 18 | scanner.scanHexInt32(&color) 19 | let mask = 0x0000_00FF 20 | let r = Int(color >> 16) & mask 21 | let g = Int(color >> 8) & mask 22 | let b = Int(color) & mask 23 | let red = CGFloat(r) / 255.0 24 | let green = CGFloat(g) / 255.0 25 | let blue = CGFloat(b) / 255.0 26 | self.init(red: red, green: green, blue: blue, alpha: alpha) 27 | } 28 | 29 | var hexString: String { 30 | guard let rgbColor = usingType(.componentBased) else { 31 | return "FFFFFF" 32 | } 33 | let red = Int(round(rgbColor.redComponent * 0xFF)) 34 | let green = Int(round(rgbColor.greenComponent * 0xFF)) 35 | let blue = Int(round(rgbColor.blueComponent * 0xFF)) 36 | let hexString = NSString(format: "#%02X%02X%02X", red, green, blue) 37 | return hexString as String 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/aem/objectrenderer.h: -------------------------------------------------------------------------------- 1 | // 2 | // formatter.m 3 | // appscript 4 | // 5 | 6 | #import 7 | 8 | @interface AEMObjectRenderer : NSObject 9 | 10 | +(NSString *)formatOSType:(OSType)code; 11 | 12 | +(void)formatObject:(id)obj indent:(NSString *)indent result:(NSMutableString *)result; 13 | 14 | +(NSString *)formatObject:(id)obj; 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/aem/unittype.h: -------------------------------------------------------------------------------- 1 | // 2 | // unittype.h 3 | // aem 4 | // 5 | 6 | #import 7 | #import "types.h" 8 | #import "utils.h" 9 | 10 | 11 | /**********************************************************************/ 12 | // Unit type definition 13 | 14 | @interface AEMUnitTypeDefinition : NSObject { 15 | NSString *name; 16 | DescType code; 17 | } 18 | 19 | + (id)definitionWithName:(NSString *)name_ code:(DescType)code_; 20 | 21 | - (id)initWithName:(NSString *)name_ code:(DescType)code_; 22 | 23 | - (NSString *)name; 24 | 25 | - (DescType)code; 26 | 27 | /* 28 | * The default implementation packs and unpacks the descriptor's data 29 | * handle as a double. Override these methods to support other formats. 30 | */ 31 | - (NSAppleEventDescriptor *)pack:(ASUnits *)obj; 32 | 33 | - (ASUnits *)unpack:(NSAppleEventDescriptor *)desc; 34 | 35 | @end 36 | 37 | /**********************************************************************/ 38 | // called by -[AEMCodecs init] 39 | 40 | void AEMGetDefaultUnitTypeDefinitions(NSDictionary **definitionsByName, 41 | NSDictionary **definitionsByCode); -------------------------------------------------------------------------------- /BirchEditor/BirchEditor.swift/aem/utils.m: -------------------------------------------------------------------------------- 1 | // 2 | // utils.m 3 | // Appscript 4 | // 5 | 6 | #import "utils.h" 7 | 8 | extern const char *GetMacOSStatusCommentString(OSStatus err) __attribute__((weak_import)); 9 | 10 | NSString *ASDescriptionForError(OSStatus err) { 11 | return [NSString stringWithFormat: @"Mac OS error %i", err]; 12 | } 13 | 14 | 15 | NSAppleEventDescriptor *AEMNewRecordOfType(DescType descriptorType) { 16 | NSAppleEventDescriptor *recordDesc, *desc; 17 | recordDesc = [[NSAppleEventDescriptor alloc] initRecordDescriptor]; 18 | desc = [recordDesc coerceToDescriptorType: descriptorType]; 19 | [recordDesc release]; 20 | return desc; 21 | } 22 | 23 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | min 3 | node_modules 4 | lib 5 | .DS_Store 6 | npm-debug.log 7 | *.swp 8 | .coffee 9 | api.json 10 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "node" 4 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/BirchEditor/birch-editor.js/CHANGELOG.md -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/coffeelint.json: -------------------------------------------------------------------------------- 1 | { 2 | "no_tabs": { 3 | "level": "error" 4 | }, 5 | "no_trailing_whitespace": { 6 | "level": "error", 7 | "allowed_in_comments": false 8 | }, 9 | "max_line_length": { 10 | "value": 800, 11 | "level": "error" 12 | }, 13 | "camel_case_classes": { 14 | "level": "error" 15 | }, 16 | "indentation": { 17 | "value": 2, 18 | "level": "error" 19 | }, 20 | "no_implicit_braces": { 21 | "level": "ignore" 22 | }, 23 | "no_trailing_semicolons": { 24 | "level": "error" 25 | }, 26 | "no_plusplus": { 27 | "level": "ignore" 28 | }, 29 | "no_throwing_strings": { 30 | "level": "error" 31 | }, 32 | "cyclomatic_complexity": { 33 | "value": 10, 34 | "level": "ignore" 35 | }, 36 | "no_backticks": { 37 | "level": "error" 38 | }, 39 | "line_endings": { 40 | "level": "ignore", 41 | "value": "unix" 42 | }, 43 | "no_implicit_parens": { 44 | "level": "ignore" 45 | }, 46 | "empty_constructor_needs_parens": { 47 | "level": "ignore" 48 | }, 49 | "non_empty_constructor_needs_parens": { 50 | "level": "ignore" 51 | }, 52 | "no_empty_param_list": { 53 | "level": "ignore" 54 | }, 55 | "space_operators": { 56 | "level": "ignore" 57 | }, 58 | "duplicate_key": { 59 | "level": "error" 60 | }, 61 | "newlines_after_classes": { 62 | "value": 3, 63 | "level": "ignore" 64 | }, 65 | "no_stand_alone_at": { 66 | "level": "ignore" 67 | }, 68 | "arrow_spacing": { 69 | "level": "ignore" 70 | }, 71 | "coffeescript_error": { 72 | "level": "error" 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/doc/api/class-list.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "birch-editor", 3 | "version": "0.1.0", 4 | "description": "Edit buffer for birch-outline models", 5 | "main": "lib/index", 6 | "atomTestRunner": "./spec/atomTestRunner", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/jessegrosjean/birch-editor.git" 10 | }, 11 | "bugs": { 12 | "url": "https://github.com/jessegrosjean/birch-editor/issues" 13 | }, 14 | "homepage": "https://github.com/jessegrosjean/birch-editor#readme", 15 | "author": "Jesse Grosjean", 16 | "dependencies": { 17 | "birch-outline": "file:../../BirchOutline/birch-outline.js", 18 | "css": "^2.2.1", 19 | "css-selector-parser": "^1.1.0", 20 | "event-kit": "^2.5.3", 21 | "fuzzaldrin-plus": "^0.3.1", 22 | "less": "^2.7.1", 23 | "moment": "^2.24.0", 24 | "parse-color": "^1.0.0", 25 | "reduce-flatten": "^1.0.1", 26 | "specificity": "^0.2.1", 27 | "string-hash": "^1.1.0", 28 | "underscore-plus": "^1.7.0" 29 | }, 30 | "devDependencies": { 31 | "birch-doc": "0.0.2", 32 | "chai": "^3.5.0", 33 | "coffee-script": "^1.10.0", 34 | "coffeescript": "^2.4.1", 35 | "gulp": "^3.9.1", 36 | "gulp-cached": "^1.1.0", 37 | "gulp-clean": "^0.3.2", 38 | "gulp-coffee": "^2.3.2", 39 | "gulp-coffeelint": "^0.6.0", 40 | "gulp-mocha": "^2.2.0", 41 | "gulp-util": "^3.0.7", 42 | "loophole": "^1.1.0", 43 | "mocha": "^3.5.3", 44 | "simple-mock": "^0.7.0", 45 | "webpack-stream": "^3.2.0" 46 | }, 47 | "scripts": { 48 | "prepublish": "./node_modules/gulp/bin/gulp.js prepublish", 49 | "start": "./node_modules/gulp/bin/gulp.js", 50 | "test": "./node_modules/mocha/bin/mocha" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/spec: -------------------------------------------------------------------------------- 1 | ./test/ -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/birch.coffee: -------------------------------------------------------------------------------- 1 | BirchOutline = require 'birch-outline' 2 | Preferences = require './preferences' 3 | Commands = require './commands' 4 | 5 | BirchOutline.preferences = new Preferences 6 | BirchOutline.commands = new Commands 7 | 8 | module.exports = BirchOutline 9 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/choice-palette-item.coffee: -------------------------------------------------------------------------------- 1 | module.exports = 2 | class ChoicePaletteItem 3 | 4 | constructor: (@type, @title, @representedObject) -> 5 | @parent = null 6 | @children = [] 7 | 8 | Object.defineProperty @::, 'root', 9 | get: -> 10 | each = @ 11 | while each.parent 12 | if each.parent.children.indexOf(each) isnt -1 13 | each = each.parent 14 | else 15 | return each 16 | each 17 | 18 | Object.defineProperty @::, 'isGroup', 19 | get: -> 20 | @type is 'group' 21 | 22 | Object.defineProperty @::, 'isSelectable', 23 | get: -> 24 | @type isnt 'group' and @type isnt 'label' 25 | 26 | appendChild: (child) -> 27 | child.parent = @ 28 | @children.push(child) 29 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/configuration-outlines.coffee: -------------------------------------------------------------------------------- 1 | { Outline, ItemSerializer } = require 'birch-outline' 2 | 3 | module.exports = 4 | searches: new Outline(ItemSerializer.TaskPaperType) 5 | tags: new Outline(ItemSerializer.TaskPaperType) -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/index.coffee: -------------------------------------------------------------------------------- 1 | { Outline, Item, Mutation, ItemPath, DateTime } = require 'birch-outline' 2 | configurationOutlines = require './configuration-outlines' 3 | OutlineSidebar = require './outline-sidebar' 4 | OutlineEditor = require './outline-editor' 5 | ChoicePalette = require './choice-palette' 6 | StyleSheet = require './style-sheet' 7 | Birch = require './birch' 8 | 9 | taskPaperPluginInitFunction = require './plugins/taskpaper' 10 | writeRoomPluginInitFunction = require './plugins/writeroom' 11 | 12 | module.exports = 13 | Birch: Birch 14 | OutlineSidebar: OutlineSidebar 15 | OutlineEditor: OutlineEditor 16 | ChoicePalette: ChoicePalette 17 | StyleSheet: StyleSheet 18 | ItemPath: ItemPath 19 | DateTime: DateTime 20 | Outline: Outline 21 | Item: Item 22 | Mutation: Mutation 23 | searchesConfigurationOutline: configurationOutlines.searches 24 | tagsConfigurationOutline: configurationOutlines.tags 25 | taskPaperPluginInitFunction: taskPaperPluginInitFunction 26 | writeRoomPluginInitFunction: writeRoomPluginInitFunction 27 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/item-buffer/item-span.coffee: -------------------------------------------------------------------------------- 1 | { AttributedString } = require 'birch-outline' 2 | LineSpan = require '../line-buffer/line-span' 3 | 4 | class ItemSpan extends LineSpan 5 | 6 | constructor: (@item) -> 7 | super(@item.bodyString) 8 | @bodyAttributedStringClone = @item.bodyAttributedString.clone() 9 | 10 | clone: -> 11 | new @constructor(@item.clone(false)) 12 | 13 | ### 14 | Section: Characters 15 | ### 16 | 17 | getLineContent: -> 18 | @string 19 | 20 | getLineContentSuffix: (location) -> 21 | @bodyAttributedStringClone.attributedSubstringFromRange(location, -1) 22 | 23 | replaceRange: (location, length, text) -> 24 | if text instanceof AttributedString 25 | string = text.string 26 | else 27 | string = text 28 | 29 | super(location, length, string) 30 | 31 | if root = @getRoot() 32 | unless root.isUpdatingIndex 33 | root.beginUpdatingOutline() 34 | @item.replaceBodyRange(location, length, text) 35 | root.endUpdatingOutline() 36 | else 37 | @item.replaceBodyRange(location, length, text) 38 | 39 | @bodyAttributedStringClone = @item.bodyAttributedString.clone() 40 | 41 | ### 42 | Section: Debug 43 | ### 44 | 45 | toString: -> 46 | super(@item.id) 47 | 48 | module.exports = ItemSpan 49 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/less.coffee: -------------------------------------------------------------------------------- 1 | 2 | # Lots of extra ()'s in file because otherwise donna.generateMetadata fails on this file 3 | 4 | # Doesnt work to require less directly... get browser stuff and won't run in 5 | # JavaScriptCore. But requring these things manually seems to work well. I've 6 | # commented out all the requires that I can while still keeping it working. 7 | fileManagers = [] 8 | SourceMapBuilder = null 9 | 10 | module.exports = 11 | version: [2, 7, 1] 12 | #data: require('less/lib/less/data'), 13 | #tree: require('less/lib/less/tree'), 14 | Environment: (Environment = require('less/lib/less/environment/environment')) 15 | #AbstractFileManager: require("less/lib/less/environment/abstract-file-manager"), 16 | environment: (environment = new Environment(environment, fileManagers)) 17 | #visitors: require('less/lib/less/visitors'), 18 | #Parser: require('less/lib/less/parser/parser'), 19 | functions: (require('less/lib/less/functions')(environment)) 20 | #contexts: require("less/lib/less/contexts"), 21 | #SourceMapOutput: (SourceMapOutput = require('less/lib/less/source-map-output')(environment)), 22 | #SourceMapBuilder: (SourceMapBuilder = require('less/lib/less/source-map-builder')(SourceMapOutput, environment)), 23 | ParseTree: (ParseTree = (require('less/lib/less/parse-tree')(SourceMapBuilder))) 24 | ImportManager: (ImportManager = (require('less/lib/less/import-manager')(environment))) 25 | render: (require("less/lib/less/render")(environment, ParseTree, ImportManager)) 26 | parse: (require("less/lib/less/parse")(environment, ParseTree, ImportManager)) 27 | #LessError: require('less/lib/less/less-error'), 28 | #transformTree: require('less/lib/less/transform-tree'), 29 | #utils: require('less/lib/less/utils'), 30 | #PluginManager: require('less/lib/less/plugin-manager'), 31 | #logger: require('less/lib/less/logger') 32 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/line-buffer/line-span.coffee: -------------------------------------------------------------------------------- 1 | { Itme, Span, util } = require 'birch-outline' 2 | assert = util.assert 3 | 4 | class LineSpan extends Span 5 | 6 | constructor: (text) -> 7 | super(text) 8 | 9 | getLineContent: -> 10 | @string 11 | 12 | getLineContentSuffix: (location) -> 13 | @getLineContent().substr(location) 14 | 15 | getLength: -> 16 | @string.length + 1 17 | 18 | getString: -> 19 | @getLineContent() + '\n' 20 | 21 | setString: (string='') -> 22 | assert(string.indexOf('\n') is -1) 23 | super(string) 24 | 25 | deleteRange: (location, length) -> 26 | assert(location + length <= @string.length) 27 | super(location, length) 28 | 29 | insertString: (location, text) -> 30 | assert(text.indexOf('\n') is -1) 31 | super(location, text) 32 | 33 | module.exports = LineSpan 34 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/plugins/writeroom.coffee: -------------------------------------------------------------------------------- 1 | Birch = require '../birch' 2 | 3 | module.exports = () -> 4 | 5 | Birch.commands.add 'outline-editor', 6 | 'outline-editor:toggle-bold': (e) -> @toggleTextAttribute 'b' 7 | 'outline-editor:toggle-italic': (e) -> @toggleTextAttribute 'i' 8 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/src/preferences.coffee: -------------------------------------------------------------------------------- 1 | {Emitter, CompositeDisposable} = require 'event-kit' 2 | 3 | module.exports = 4 | class Preferences 5 | 6 | @nativePreferences = null 7 | 8 | constructor: -> 9 | @emitter = new Emitter 10 | @map = new Map() 11 | 12 | onDidChange: (callback) -> 13 | @emitter.on "did-change", callback 14 | 15 | onDidChangeKey: (key, callback) -> 16 | @emitter.on "did-change-#{key}", callback 17 | 18 | get: (key) -> 19 | if @nativePreferences 20 | @nativePreferences.getPreference(key) 21 | else 22 | @map.get(key) 23 | 24 | set: (key, value) -> 25 | if @nativePreferences 26 | @nativePreferences.storePreference(key, value) 27 | else 28 | @map.set(key, value) 29 | @emitter.emit "did-change-#{key}" 30 | @emitter.emit "did-change" 31 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/test/atomTestRunner.coffee: -------------------------------------------------------------------------------- 1 | fs = require 'fs' 2 | path = require 'path' 3 | Mocha = require 'mocha' 4 | 5 | {allowUnsafeEval, allowUnsafeNewFunction} = require 'loophole' 6 | 7 | module.exports = (args) -> 8 | 9 | # Fixes CSP eval restriction 10 | allowUnsafeEval -> 11 | 12 | mocha = new Mocha( 13 | ui: 'bdd' 14 | reporter: 'html' 15 | ) 16 | 17 | applicationDelegate = args.buildDefaultApplicationDelegate() 18 | 19 | # Create element for mocha reporter 20 | element = document.createElement 'div' 21 | element.id = 'mocha' 22 | document.body.appendChild element 23 | document.body.style.overflow = 'scroll' 24 | 25 | link = document.createElement('link') 26 | link.setAttribute('rel', 'stylesheet') 27 | link.setAttribute('href', path.join(__dirname, '..', 'node_modules/mocha/mocha.css')) 28 | document.head.appendChild(link) 29 | 30 | # Build atom global 31 | window.atom = args.buildAtomEnvironment({ 32 | applicationDelegate, window, document 33 | configDirPath: process.env.ATOM_HOME 34 | enablePersistence: false 35 | }) 36 | 37 | for each in args.testPaths 38 | Mocha.utils.lookupFiles(each, ['js', 'coffee'], true).forEach(mocha.addFile.bind(mocha)) 39 | 40 | # Run tests and return a promise 41 | new Promise((resolve, reject) -> 42 | mocha.run((failures) -> 43 | resolve(failures) 44 | ) 45 | ) 46 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/test/config.coffee: -------------------------------------------------------------------------------- 1 | module.exports = 2 | class Config 3 | 4 | constructor: -> 5 | @map = new Map() 6 | 7 | get: (key) -> 8 | @map.get(key) 9 | 10 | set: (key, value) -> 11 | @map.set(key, value) 12 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/test/load-outline-fixture.coffee: -------------------------------------------------------------------------------- 1 | { Outline } = require 'birch-outline' 2 | 3 | # one 4 | # two 5 | # three @t 6 | # four @t 7 | # five 8 | # six @t(23) 9 | 10 | module.exports = (type) -> 11 | 12 | outline = new Outline(type) 13 | 14 | one = outline.createItem('one', '1') 15 | 16 | two = outline.createItem('two', '2') 17 | one.appendChildren(two) 18 | 19 | three = outline.createItem('three', '3') 20 | three.setAttribute('data-t', '') 21 | two.appendChildren(three) 22 | 23 | four = outline.createItem('four', '4') 24 | four.setAttribute('data-t', '') 25 | four.addBodyAttributeInRange('b', {}, 2, 1) 26 | 27 | two.appendChildren(four) 28 | 29 | five = outline.createItem('five', '5') 30 | one.appendChildren(five) 31 | 32 | six = outline.createItem('six', '6') 33 | six.setAttribute('data-t', '23') 34 | five.appendChildren(six) 35 | 36 | outline.root.appendChildren(one) 37 | outline.changeCount = 0 38 | outline.undoManager.removeAllActions() 39 | 40 | {} = 41 | outline: outline 42 | root: outline.root 43 | one: outline.getItemForID('1') 44 | two: outline.getItemForID('2') 45 | three: outline.getItemForID('3') 46 | four: outline.getItemForID('4') 47 | five: outline.getItemForID('5') 48 | six: outline.getItemForID('6') 49 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --recursive 2 | --reporter nyan 3 | --ui bdd 4 | --compilers coffee:coffee-script/register 5 | -------------------------------------------------------------------------------- /BirchEditor/birch-editor.js/webpack.config.coffee: -------------------------------------------------------------------------------- 1 | webpack = require 'webpack-stream' 2 | 3 | uglifyConfig = 4 | compress: 5 | warnings: false 6 | mangle:false 7 | 8 | module.exports = 9 | devtool: 'source-map' 10 | entry: 11 | 'bircheditor': './lib/index.js' 12 | output: 13 | path: './min' 14 | library: '[name]' 15 | filename: '[name].js' 16 | module: 17 | loaders: [ 18 | test: /\.json$/, 19 | loader: "json-loader" 20 | ] 21 | plugins: [ 22 | #new webpack.webpack.optimize.UglifyJsPlugin(uglifyConfig) 23 | ] 24 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output 66 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/.gitrepo: -------------------------------------------------------------------------------- 1 | ; DO NOT EDIT (unless you know what you are doing) 2 | ; 3 | ; This subdirectory is a git "subrepo", and this file is maintained by the 4 | ; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme 5 | ; 6 | [subrepo] 7 | remote = https://github.com/jessegrosjean/BirchOutline 8 | branch = master 9 | commit = a965c079a604312c06657fae81993ef8d965410f 10 | parent = 8afaf4228ad57530e6a4be708fdb32856d4d44b2 11 | cmdver = 0.3.0 12 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode7.3 3 | script: xcodebuild test -scheme SharedTravisBuild 4 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline.podspec.md: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'BirchOutline' 3 | s.version = '0.1.0' 4 | s.summary = 'Read, process, and serialize TaskPaper outlines.' 5 | s.homepage = 'https://github.com/jessegrosjean/BirchOutline' 6 | 7 | s.license = 'MIT' 8 | s.author = { 'Jesse Grosjean' => 'jesse@hogbaysoftware.com' } 9 | s.social_media_url = 'http://twitter.com/jessegrosjean' 10 | 11 | s.ios.deployment_target = '8.0' 12 | s.ios.source_files = 'Common/Sources/**/*.{h,m,swift}', 'BirchOutlineiOS/**/*.{h,m,swift}' 13 | 14 | s.osx.deployment_target = '10.9' 15 | s.osx.source_files = 'Common/Sources/**/*.{h,m,swift}', 'BirchOutline/**/*.{h,m,swift}' 16 | 17 | s.source = { :git => 'https://github.com/jessegrosjean/BirchOutline.git', :commit => '4798756fa66bbd3242275de0077261678b23369c' } 18 | end 19 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline.xcodeproj/project.xcworkspace/xcshareddata/BirchOutline.xcscmblueprint: -------------------------------------------------------------------------------- 1 | { 2 | "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "4D2A25B29DF3044CB7C8F6562FECCA962AD85B3A", 3 | "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { 4 | 5 | }, 6 | "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { 7 | "4D2A25B29DF3044CB7C8F6562FECCA962AD85B3A" : 0, 8 | "47FB398CF68C166BB012BDFDC409950BF4D7C7C7" : 0 9 | }, 10 | "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "718DAB93-E647-43D5-B981-7B2E29547B9C", 11 | "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { 12 | "4D2A25B29DF3044CB7C8F6562FECCA962AD85B3A" : "BirchOutline\/", 13 | "47FB398CF68C166BB012BDFDC409950BF4D7C7C7" : "birch-outline\/" 14 | }, 15 | "DVTSourceControlWorkspaceBlueprintNameKey" : "BirchOutline", 16 | "DVTSourceControlWorkspaceBlueprintVersion" : 204, 17 | "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "BirchOutline.xcodeproj", 18 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ 19 | { 20 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/jessegrosjean\/birch-outline.git", 21 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 22 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "47FB398CF68C166BB012BDFDC409950BF4D7C7C7" 23 | }, 24 | { 25 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/jessegrosjean\/BirchOutline.git", 26 | "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", 27 | "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "4D2A25B29DF3044CB7C8F6562FECCA962AD85B3A" 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline/BirchOutline.h: -------------------------------------------------------------------------------- 1 | // 2 | // BirchOutline.h 3 | // BirchOutline 4 | // 5 | // Created by Jesse Grosjean on 6/24/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for BirchOutline. 12 | FOUNDATION_EXPORT double BirchOutlineVersionNumber; 13 | 14 | //! Project version string for BirchOutline. 15 | FOUNDATION_EXPORT const unsigned char BirchOutlineVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | #import 20 | #import 21 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 3 23 | NSHumanReadableCopyright 24 | Copyright © 2005–2020 Jesse Grosjean. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline/OutlineFixture.bml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Outline 5 | 6 | 7 | 8 |
    9 |
  • 10 |

    one

    11 |
      12 |
    • 13 |

      two

      14 |
        15 |
      • 16 |

        three

        17 |
      • 18 |
      • 19 |

        four

        20 |
      • 21 |
      22 |
    • 23 |
    • 24 |

      five

      25 |
        26 |
      • 27 |

        six

        28 |
      • 29 |
      30 |
    • 31 |
    32 |
  • 33 |
34 | 35 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutline/OutlineFixture.txt: -------------------------------------------------------------------------------- 1 | one 2 | two 3 | three 4 | four 5 | five 6 | six -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutlineTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 3 23 | 24 | 25 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutlineiOS/BirchOutlineiOS.h: -------------------------------------------------------------------------------- 1 | // 2 | // BirchOutlineiOS.h 3 | // BirchOutlineiOS 4 | // 5 | // Created by Jesse Grosjean on 6/24/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for BirchOutlineiOS. 12 | FOUNDATION_EXPORT double BirchOutlineiOSVersionNumber; 13 | 14 | //! Project version string for BirchOutlineiOS. 15 | FOUNDATION_EXPORT const unsigned char BirchOutlineiOSVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | #import 20 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutlineiOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 3 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/BirchOutlineiOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 3 23 | 24 | 25 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/BirchOutline.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Birch.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 6/10/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | open class BirchOutline { 10 | 11 | static var _sharedContext: BirchScriptContext! 12 | 13 | public static var sharedContext: BirchScriptContext { 14 | set { 15 | _sharedContext = newValue 16 | } 17 | get { 18 | if let context = _sharedContext { 19 | return context 20 | } else { 21 | _sharedContext = BirchScriptContext() 22 | return _sharedContext! 23 | } 24 | } 25 | } 26 | 27 | public static func createOutline(_ type: String?, content: String?) -> OutlineType { 28 | return sharedContext.createOutline(type, content: content) 29 | } 30 | 31 | public static func createTaskPaperOutline(_ content: String?) -> OutlineType { 32 | return sharedContext.createTaskPaperOutline(content) 33 | } 34 | 35 | public static func createWriteRoomOutline(_ content: String?) -> OutlineType { 36 | return sharedContext.createWriteRoomOutline(content) 37 | } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/DateTime.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DateTime.swift 3 | // BirchOutline 4 | // 5 | // Created by Jesse Grosjean on 10/18/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import JavaScriptCore 11 | 12 | public protocol DateTimeType: AnyObject { 13 | 14 | static func parse(dateTime: String) -> Date? 15 | static func format(dateTime: Date, showMillisecondsIfNeeded: Bool, showSecondsIfNeeded: Bool) -> String 16 | 17 | } 18 | 19 | public class DateTime: DateTimeType { 20 | 21 | static let jsDateTimeClass = BirchOutline.sharedContext.jsDateTimeClass 22 | 23 | public class func parse(dateTime: String) -> Date? { 24 | return jsDateTimeClass.invokeMethod("parse", withArguments: [dateTime]).selfOrNil()?.toDate() 25 | } 26 | 27 | public class func format(dateTime: Date, showMillisecondsIfNeeded: Bool=true, showSecondsIfNeeded: Bool=true) -> String { 28 | return jsDateTimeClass.invokeMethod("format", withArguments: [dateTime, showMillisecondsIfNeeded, showSecondsIfNeeded]).toString() 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/DisposableType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // BirchOutline 4 | // 5 | // Created by Jesse Grosjean on 7/6/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import JavaScriptCore 11 | 12 | public protocol DisposableType: AnyObject { 13 | 14 | func dispose() 15 | 16 | } 17 | 18 | extension JSValue: DisposableType { 19 | 20 | public func dispose() { 21 | invokeMethod("dispose", withArguments: []) 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/JSContext-GarbageCollection.h: -------------------------------------------------------------------------------- 1 | // 2 | // JSContext-GarbageCollection.h 3 | // BirchOutline 4 | // 5 | // Created by Jesse Grosjean on 8/22/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface JSContext (GarbageCollection) 13 | 14 | - (void)garbageCollect; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/JSContext-GarbageCollection.m: -------------------------------------------------------------------------------- 1 | // 2 | // JSContext-GarbageCollection.m 3 | // BirchOutline 4 | // 5 | // Created by Jesse Grosjean on 8/22/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import "JSContext-GarbageCollection.h" 10 | 11 | @implementation JSContext (GarbageCollection) 12 | 13 | - (void)garbageCollect { 14 | } 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/JSValue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JSValue.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 6/14/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import JavaScriptCore 11 | 12 | extension JSValue { 13 | 14 | public func selfOrNil() -> JSValue? { 15 | if isNull || isUndefined { 16 | return nil 17 | } 18 | return self 19 | } 20 | 21 | // must be ... 22 | public class func fromItemTypeArray(_ items: [ItemType], context: JSContext) -> JSValue { 23 | let jsItems = JSValue(newArrayIn: context) 24 | for i in 0.. [ItemType] { 32 | let length = Int(forProperty("length").toInt32()) 33 | var result: [ItemType] = [] 34 | for i in 0.. 10 | 11 | @interface ObjC : NSObject 12 | 13 | + (BOOL)catchException:(void(^)(void))tryBlock error:(__autoreleasing NSError **)error; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/ObjC.m: -------------------------------------------------------------------------------- 1 | // 2 | // ObjC.m 3 | // TaskPaper 4 | // 5 | // Created by Jesse Grosjean on 7/6/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | #import "ObjC.h" 10 | 11 | @implementation ObjC 12 | 13 | + (BOOL)catchException:(void(^)(void))tryBlock error:(__autoreleasing NSError **)error { 14 | @try { 15 | tryBlock(); 16 | return YES; 17 | } 18 | @catch (NSException *exception) { 19 | *error = [[NSError alloc] initWithDomain:exception.name code:0 userInfo:exception.userInfo]; 20 | } 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/String-Localize.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String.swift 3 | // BirchOutline 4 | // 5 | // Created by Jesse Grosjean on 6/28/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public extension String { 12 | 13 | func localized(_ comment: String? = nil) -> String { 14 | return NSLocalizedString(self, comment: comment ?? "") 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Sources/String-Path.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String-Path.swift 3 | // BirchOutline 4 | // 5 | // Created by Jesse Grosjean on 7/10/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public extension String { 12 | 13 | var lastPathComponent: String { 14 | get { 15 | return (self as NSString).lastPathComponent 16 | } 17 | } 18 | 19 | var pathExtension: String { 20 | get { 21 | return (self as NSString).pathExtension 22 | } 23 | } 24 | 25 | var stringByDeletingLastPathComponent: String { 26 | get { 27 | return (self as NSString).deletingLastPathComponent 28 | } 29 | } 30 | 31 | var stringByDeletingPathExtension: String { 32 | get { 33 | return (self as NSString).deletingPathExtension 34 | } 35 | } 36 | 37 | var pathComponents: [String] { 38 | get { 39 | return (self as NSString).pathComponents 40 | } 41 | } 42 | 43 | func stringByAppendingPathComponent(_ path: String) -> String { 44 | let nsSt = self as NSString 45 | return nsSt.appendingPathComponent(path) 46 | } 47 | 48 | func stringByAppendingPathExtension(_ ext: String) -> String? { 49 | let nsSt = self as NSString 50 | return nsSt.appendingPathExtension(ext) 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /BirchOutline/BirchOutline.swift/Common/Tests/JavaScriptContextTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Birch_iOSTests.swift 3 | // Birch iOSTests 4 | // 5 | // Created by Jesse Grosjean on 6/10/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import BirchOutline 11 | 12 | class JavaScriptContextTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | } 17 | 18 | override func tearDown() { 19 | super.tearDown() 20 | } 21 | 22 | func testInit() { 23 | XCTAssertNotNil(BirchOutline.sharedContext.context) 24 | XCTAssertNotNil(BirchOutline.sharedContext.jsBirchExports) 25 | XCTAssertNotNil(BirchOutline.sharedContext.jsOutlineClass) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | min 3 | node_modules 4 | lib 5 | .DS_Store 6 | npm-debug.log 7 | *.swp 8 | .coffee 9 | api.json 10 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/.gitrepo: -------------------------------------------------------------------------------- 1 | ; DO NOT EDIT (unless you know what you are doing) 2 | ; 3 | ; This subdirectory is a git "subrepo", and this file is maintained by the 4 | ; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme 5 | ; 6 | [subrepo] 7 | remote = https://github.com/jessegrosjean/birch-outline 8 | branch = master 9 | commit = 66aa29097b4df45c11ddac379c2d310f5ef0a7c2 10 | parent = bc21687b65b1f58c5ab45c9fe720291978878587 11 | cmdver = 0.3.0 12 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | script 3 | src 4 | *.coffee 5 | .npmignore 6 | .DS_Store 7 | npm-debug.log 8 | .travis.yml 9 | .pairs 10 | .coffee 11 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "node" 4 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/BirchOutline/birch-outline.js/CHANGELOG.md -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/coffeelint.json: -------------------------------------------------------------------------------- 1 | { 2 | "no_tabs": { 3 | "level": "error" 4 | }, 5 | "no_trailing_whitespace": { 6 | "level": "error", 7 | "allowed_in_comments": false 8 | }, 9 | "max_line_length": { 10 | "value": 800, 11 | "level": "error" 12 | }, 13 | "camel_case_classes": { 14 | "level": "error" 15 | }, 16 | "indentation": { 17 | "value": 2, 18 | "level": "error" 19 | }, 20 | "no_implicit_braces": { 21 | "level": "ignore" 22 | }, 23 | "no_trailing_semicolons": { 24 | "level": "error" 25 | }, 26 | "no_plusplus": { 27 | "level": "ignore" 28 | }, 29 | "no_throwing_strings": { 30 | "level": "error" 31 | }, 32 | "cyclomatic_complexity": { 33 | "value": 10, 34 | "level": "ignore" 35 | }, 36 | "no_backticks": { 37 | "level": "error" 38 | }, 39 | "line_endings": { 40 | "level": "ignore", 41 | "value": "unix" 42 | }, 43 | "no_implicit_parens": { 44 | "level": "ignore" 45 | }, 46 | "empty_constructor_needs_parens": { 47 | "level": "ignore" 48 | }, 49 | "non_empty_constructor_needs_parens": { 50 | "level": "ignore" 51 | }, 52 | "no_empty_param_list": { 53 | "level": "ignore" 54 | }, 55 | "space_operators": { 56 | "level": "ignore" 57 | }, 58 | "duplicate_key": { 59 | "level": "error" 60 | }, 61 | "newlines_after_classes": { 62 | "value": 3, 63 | "level": "ignore" 64 | }, 65 | "no_stand_alone_at": { 66 | "level": "ignore" 67 | }, 68 | "arrow_spacing": { 69 | "level": "ignore" 70 | }, 71 | "coffeescript_error": { 72 | "level": "error" 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/doc/contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | I hope birch-outline can be useful for many different outliner projects. Please check out the code and help me make it even better. 4 | 5 | ## Building 6 | 7 | The build process is: 8 | 9 | 1. Clean the project and lint the sources 10 | 2. Run all tests `test` 11 | 3. Process and copy all scripts in `src` to `lib` 12 | 4. Bundle scripts in `lib` into `birchoutline.js` in `min` 13 | 14 | To do a full build: 15 | 16 | ```shell 17 | npm prepublish 18 | ``` 19 | 20 | To do a _watch_ build that automatically rebuilds when you modify a source: 21 | 22 | ```shell 23 | npm start 24 | ``` 25 | 26 | ## Debugging 27 | 28 | You can run test in [Atom](http://atom.io) and use Chrome's debugger: 29 | 30 | 1. Open `birch-outline` in Atom 31 | 2. Choose the View > Developer > Run Package Specs menu 32 | 3. Option-Command-I to bring up debugger 33 | 4. Command-R to rerun tests 34 | 35 | ## Project Ideas 36 | 37 | There are some ideas that I think would be neat: 38 | 39 | 1. Create a command line interface for processing TaskPaper files. For example make it easy to run an `ItemPath` queries on a file and return the results. 40 | 41 | 2. Create a webpage for displaying TaskPaper outlines. Matt Gemmell has a [great start](https://github.com/mattgemmell/TaskPaperRuby) but I think using `birch-outline` can make it easier to implement and with more features. For example the published outline could be filtered dynamically in the web page using `ItemPath` queries. 42 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "birch-outline", 3 | "version": "0.2.1", 4 | "description": "Cross-platform scripting for TaskPaper", 5 | "main": "./lib/index", 6 | "atomTestRunner": "./spec/atomTestRunner", 7 | "repository": { 8 | "type": "git", 9 | "url": "https://github.com/jessegrosjean/birch-outline" 10 | }, 11 | "bugs": { 12 | "url": "https://github.com/jessegrosjean/birch-outline/issues" 13 | }, 14 | "author": "Jesse Grosjean", 15 | "license": "MIT", 16 | "dependencies": { 17 | "ctph.js": "0.0.5", 18 | "event-kit": "^2.5.3", 19 | "htmlparser2": "^3.10.1", 20 | "moment": "^2.24.0", 21 | "natives": "^1.1.6", 22 | "string-hash": "^1.1.0", 23 | "underscore-plus": "^1.7.0" 24 | }, 25 | "devDependencies": { 26 | "birch-doc": "0.0.2", 27 | "chai": "^3.5.0", 28 | "coffee-script": "^1.7.0", 29 | "coffeescript": "^2.4.1", 30 | "gulp": "^3.9.1", 31 | "gulp-cached": "^1.1.0", 32 | "gulp-clean": "^0.3.2", 33 | "gulp-coffee": "^2.3.2", 34 | "gulp-coffeelint": "^0.6.0", 35 | "gulp-mocha": "^3.0.1", 36 | "gulp-shell": "^0.5.2", 37 | "gulp-util": "^3.0.7", 38 | "json-loader": "^0.5.4", 39 | "loophole": "^1.1.0", 40 | "mocha": "^3.1.2", 41 | "pegjs": "^0.10.0", 42 | "webpack-stream": "^3.2.0" 43 | }, 44 | "scripts": { 45 | "prepublish": "./node_modules/gulp/bin/gulp.js prepublish", 46 | "start": "./node_modules/gulp/bin/gulp.js", 47 | "test": "./node_modules/mocha/bin/mocha" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/spec: -------------------------------------------------------------------------------- 1 | ./test/ -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/attributed-string-bml-tags.coffee: -------------------------------------------------------------------------------- 1 | module.exports = 2 | # Inline text semantics 3 | 'a': true 4 | 'abbr': true 5 | 'b': true 6 | 'bdi': true 7 | 'bdo': true 8 | 'br': true 9 | 'cite': true 10 | 'code': true 11 | 'data': true 12 | 'dfn': true 13 | 'em': true 14 | 'i': true 15 | 'kbd': true 16 | 'mark': true 17 | 'q': true 18 | 'rp': true 19 | 'rt': true 20 | 'ruby': true 21 | 's': true 22 | 'samp': true 23 | 'small': true 24 | 'span': true 25 | 'strong': true 26 | 'sub': true 27 | 'sup': true 28 | 'time': true 29 | 'u': true 30 | 'var': true 31 | 'wbr': true 32 | 33 | # Image & multimedia 34 | 'audio': true 35 | 'img': true 36 | 'video': true 37 | 38 | # Edits 39 | 'del': true 40 | 'ins': true 41 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/birch.coffee: -------------------------------------------------------------------------------- 1 | module.exports = 2 | RootID: 'Birch' 3 | Version: [0, 2, 1] 4 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/date-time.coffee: -------------------------------------------------------------------------------- 1 | DateTimeParser = require './date-time-parser' 2 | moment = require 'moment' 3 | 4 | # Public: Date and time parsing and conversion. 5 | module.exports = 6 | class DateTime 7 | 8 | # Public: Parse the given string and return associated {Date}. 9 | # 10 | # - `string` The date/time {String}. 11 | # 12 | # Returns {Date} or null. 13 | @parse: (string) -> 14 | try 15 | return DateTimeParser.parse(string, moment: moment).toDate() 16 | catch e 17 | m = moment(string, moment.ISO_8601, true) 18 | if m.isValid() 19 | m.toDate() 20 | else 21 | null 22 | 23 | # Public: Format the given date/time {String} or {Date} as a minimal absolute date/time {String}. 24 | # 25 | # - `dateOrString` The date/time {String} or {Date} to format. 26 | # 27 | # Returns {String}. 28 | @format: (dateOrString, showMillisecondsIfNeeded=true, showSecondsIfNeeded=true) -> 29 | try 30 | m = DateTimeParser.parse(dateOrString, moment: moment) 31 | catch e 32 | m = moment(dateOrString, moment.ISO_8601, true) 33 | if not m.isValid() 34 | return 'invalid date' 35 | 36 | if m.milliseconds() and showMillisecondsIfNeeded 37 | m.format('YYYY-MM-DD HH:mm:ss:SSS') 38 | else if m.seconds() and showSecondsIfNeeded 39 | m.format('YYYY-MM-DD HH:mm:ss') 40 | else if m.hours() or m.minutes() 41 | m.format('YYYY-MM-DD HH:mm') 42 | else 43 | m.format('YYYY-MM-DD') 44 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/extensions.coffee: -------------------------------------------------------------------------------- 1 | module.exports = 2 | class Extensions 3 | 4 | @PRIORITY_NORMAL: 0 5 | @PRIORITY_FIRST: (-1) 6 | @PRIORITY_LAST: 1 7 | 8 | constructor: -> 9 | @extensionPointsToExtensions = new Map 10 | 11 | add: (extensionPoint, extension, priority=Extensions.PRIORITY_NORMAL) -> 12 | extensions = @extensionPointsToExtensions.get(extensionPoint) 13 | if not extensions 14 | extensions = [] 15 | @extensionPointsToExtensions.set(extensionPoint, extensions) 16 | extensions.needsSort = true 17 | extensions.push 18 | extension: extension 19 | priority: priority 20 | 21 | remove: (extensionPoint, extension) -> 22 | result = @extensionPointsToExtensions.get(extensionPoint)?.filter 23 | 24 | processExtensions: (extensionPoint, callback, returnFirst) -> 25 | extensions = @extensionPointsToExtensions.get(extensionPoint) 26 | if extensions 27 | if extensions.needsSort 28 | extensions.sort (a, b) -> 29 | a.priority - b.priority 30 | for each in extensions 31 | result = callback(each) 32 | if result isnt undefined and returnFirst 33 | return result 34 | 35 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/index.coffee: -------------------------------------------------------------------------------- 1 | module.exports = 2 | Birch: require './birch' 3 | Outline: require './outline' 4 | Item: require './item' 5 | Mutation: require './mutation' 6 | ItemSerializer: require './item-serializer' 7 | ItemPath: require './item-path' 8 | DateTime: require './date-time' 9 | AttributedString: require './attributed-string' 10 | Extensions: require './extensions' 11 | 12 | # Private exports 13 | ItemPathQuery: require './item-path-query' 14 | SpanBuffer: require './span-buffer' 15 | Span: require './span-buffer/span' 16 | shortid: require './shortid' 17 | util: require './util' 18 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/serializations/item-references.coffee: -------------------------------------------------------------------------------- 1 | _ = require 'underscore-plus' 2 | Item = require '../item' 3 | 4 | ### 5 | Serialization 6 | ### 7 | 8 | beginSerialization = (items, options, context) -> 9 | coverItems = Item.getCommonAncestors(items) 10 | expandedItemIDsSet = new Set() 11 | serializedItems = [] 12 | 13 | if expandedItemIDs = options?.expandedItemIDs 14 | for each in expandedItemIDs 15 | expandedItemIDsSet.add(each) 16 | 17 | outline = null 18 | for each in items 19 | outline ?= each.outline 20 | serializedItems.push 21 | id: each.id 22 | expanded: expandedItemIDsSet.has(each.id) 23 | context.json = JSON.stringify 24 | outlineID: outline.id 25 | items: serializedItems 26 | 27 | beginSerializeItem = (item, options, context) -> 28 | 29 | serializeItemBody = (item, bodyAttributedString, options, context) -> 30 | 31 | endSerializeItem = (item, options, context) -> 32 | 33 | endSerialization = (options, context) -> 34 | context.json 35 | 36 | ### 37 | Deserialization 38 | ### 39 | 40 | deserializeItems = (json, outline, options) -> 41 | Outline = require('../outline') 42 | json = JSON.parse(json) 43 | items = [] 44 | expandedItemIDs = [] 45 | items.loadOptions = 46 | expanded: expandedItemIDs 47 | sourceOutline = Outline.getOutlineForID(json.outlineID) 48 | 49 | if sourceOutline 50 | for each in json.items 51 | if item = sourceOutline.getItemForID(each.id) 52 | items.push(item) 53 | if each.expanded 54 | expandedItemIDs.push(each.id) 55 | 56 | Item.getCommonAncestors(items) 57 | 58 | module.exports = 59 | beginSerialization: beginSerialization 60 | beginSerializeItem: beginSerializeItem 61 | serializeItemBody: serializeItemBody 62 | endSerializeItem: endSerializeItem 63 | endSerialization: endSerialization 64 | deserializeItems: deserializeItems 65 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/serializations/paths.coffee: -------------------------------------------------------------------------------- 1 | deserializeItems = (pathList, outline, options) -> 2 | filenames = pathList.split('\n') 3 | if options.type == 'public.file-url' 4 | filenames = filenames.map (each) -> each.replace('file://', '') 5 | 6 | items = [] 7 | for each in filenames 8 | item = outline.createItem() 9 | item.bodyString = decodeURI(each).trim().replace(/[ ]/g, '\\ ') 10 | items.push item 11 | items 12 | 13 | module.exports = 14 | deserializeItems: deserializeItems 15 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/serializations/taskpaper/smart-links.coffee: -------------------------------------------------------------------------------- 1 | emailRegex = /\b[A-Z0-9\._%+\-]+@[A-Z0-9\.\-]+\.[A-Z]{2,8}\b/gi 2 | pathRegex = /(?:^|\s)(\~?\.?\/(?:\\\s|[^\0 ])+)/gi 3 | # Original source gruber I think. Modifications that I remember: 4 | # 1. Added "." to start character set for text after : so that can support path:./myfile 5 | # 1. Added "~" to start character set for text after : so that can support path:~/myfile 6 | webRegex = /\b(?:([a-z][\w\-]+:(?:\/{1,3}|[a-z0-9%.])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))/gi 7 | 8 | highlightLinks = (item) -> 9 | bodyString = item.bodyString 10 | 11 | # Email 12 | if bodyString.indexOf('@') isnt -1 13 | while match = emailRegex.exec(bodyString) 14 | linkIndex = match.index 15 | linkText = bodyString.substring(linkIndex, linkIndex + match[0].length) 16 | # Skip if scheme, will be caught by URL parse 17 | unless bodyString[linkIndex - 1] is ':' 18 | item.addBodyHighlightAttributesInRange(link: 'mailto:' + linkText, linkIndex, linkText.length) 19 | 20 | # Path 21 | if bodyString.indexOf('/') isnt -1 22 | while match = pathRegex.exec(bodyString) 23 | linkIndex = match.index 24 | linkText = match[1] 25 | linkIndex += match[0].length - match[1].length 26 | item.addBodyHighlightAttributesInRange(link: 'path:' + linkText.replace(/\\ /g, ' '), linkIndex, linkText.length) 27 | 28 | # URLS 29 | while match = webRegex.exec(bodyString) 30 | linkIndex = match.index 31 | linkText = bodyString.substring(linkIndex, linkIndex + match[0].length) 32 | linkTarget = linkText 33 | if linkText.indexOf('www') is 0 34 | linkTarget = 'http://' + linkText 35 | item.addBodyHighlightAttributesInRange(link: linkTarget, linkIndex, linkText.length) 36 | 37 | module.exports = 38 | highlightLinks: highlightLinks 39 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/serializations/taskpaper/types.coffee: -------------------------------------------------------------------------------- 1 | tagsHelper = require './tags' 2 | taskRegex = /^\-\s/ 3 | projectRegex = /:$/ 4 | 5 | parseType = (contentString) -> 6 | if contentString.match(taskRegex) 7 | 'task' 8 | else if contentString.match(projectRegex) 9 | 'project' 10 | else 11 | 'note' 12 | 13 | syncTypeAttributeToItemBody = (item, newType, oldType) -> 14 | # Remove old type syntax 15 | switch oldType 16 | when 'project' 17 | trailingTagsLength = tagsHelper.parseTags(item.bodyString).trailingMatch?[0].length ? 0 18 | item.replaceBodyRange(item.bodyString.length - (1 + trailingTagsLength), 1, '') 19 | when 'task' 20 | item.replaceBodyRange(0, 2, '') 21 | 22 | # Add new type syntax 23 | switch newType 24 | when 'project' 25 | trailingTagsLength = tagsHelper.parseTags(item.bodyString).trailingMatch?[0].length ? 0 26 | item.replaceBodyRange(item.bodyString.length - trailingTagsLength, 0, ':') 27 | when 'task' 28 | item.replaceBodyRange(0, 0, '- ') 29 | 30 | module.exports = 31 | taskRegex: taskRegex 32 | projectRegex: projectRegex 33 | parseType: parseType 34 | syncTypeAttributeToItemBody: syncTypeAttributeToItemBody 35 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/serializations/writeroom/index.coffee: -------------------------------------------------------------------------------- 1 | { repeat } = require '../../util' 2 | text = require '../text' 3 | 4 | serializeItemBody = (item, bodyAttributedString, options, context) -> 5 | bodyString = bodyAttributedString.string 6 | context.lines.push(repeat('\t', item.depth - options.baseDepth) + bodyString) 7 | 8 | deserializeItem = (itemString, outline) -> 9 | item = outline.createItem() 10 | indent = itemString.match(/^\t*/)[0].length + 1 11 | body = itemString.substring(indent - 1) 12 | item.indent = indent 13 | item.bodyString = body 14 | item 15 | 16 | deserializeItems = (itemsString, outline, options={}) -> 17 | text.deserializeItems(itemsString, outline, options, deserializeItem) 18 | 19 | module.exports = 20 | beginSerialization: text.beginSerialization 21 | beginSerializeItem: text.beginSerializeItem 22 | serializeItemBody: text.serializeItemBody 23 | endSerializeItem: text.endSerializeItem 24 | endSerialization: text.endSerialization 25 | emptyEncodeLastItem: text.emptyEncodeLastItem 26 | deserializeItems: text.deserializeItems 27 | itemPathTypes: {} 28 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/shortid/README.md: -------------------------------------------------------------------------------- 1 | The shortid folder content is all based on https://github.com/dylang/shortid 2 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/shortid/encode.js: -------------------------------------------------------------------------------- 1 | function encode(lookup, number) { 2 | var loopCounter = 0; 3 | var done; 4 | 5 | var str = ''; 6 | 7 | while (!done) { 8 | str = str + lookup( ( (number >> (4 * loopCounter)) & 0x0f ) | (Math.floor((Math.random() * 256)) & 0x30) ); 9 | done = number < (Math.pow(16, loopCounter + 1 ) ); 10 | loopCounter++; 11 | } 12 | return str; 13 | } 14 | 15 | module.exports = encode; -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/shortid/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./shortid.js'); -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/shortid/random.js: -------------------------------------------------------------------------------- 1 | 2 | // Found this seed-based random generator somewhere 3 | // Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu) 4 | 5 | /** 6 | * return a random number based on a seed 7 | * @param seed 8 | * @returns {number} 9 | */ 10 | 11 | var seed = 1; 12 | 13 | module.exports = function random() { 14 | seed = (seed * 9301 + 49297) % 233280; 15 | return seed/(233280.0); 16 | }; 17 | 18 | module.exports.seed = function (_seed_) { 19 | seed = _seed_; 20 | }; -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/span-buffer/marker.coffee: -------------------------------------------------------------------------------- 1 | # See: https://github.com/atom/marker-index 2 | # 3 | # Todo: Implements overlapping markers in similar way that run-buffer is 4 | # implemented. Use create tree spans for each change point. Allow the markers 5 | # to be associated with multiple spans if needed. In this way it's possible to 6 | # have overlapping ranges. 7 | class Marker 8 | 9 | constructor: (@string='') -> 10 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/src/util.coffee: -------------------------------------------------------------------------------- 1 | module.exports = 2 | 3 | assert: (condition, message='Failed Assert') -> 4 | unless condition 5 | throw new Error(message) 6 | 7 | repeat: (pattern, count) -> 8 | if count <= 0 9 | '' 10 | else 11 | result = '' 12 | while count > 1 13 | if count & 1 14 | result += pattern 15 | count >>= 1 16 | pattern += pattern 17 | result + pattern 18 | 19 | shallowArrayEqual: (a, b) -> 20 | if not a and not b 21 | return true 22 | if not a and b or a and not b 23 | return false 24 | 25 | if a.length isnt b.length 26 | return false 27 | 28 | for value, index in a 29 | if b[index] isnt value 30 | return false 31 | 32 | return true 33 | 34 | shallowObjectEqual: (a, b) -> 35 | if not a and not b 36 | return true 37 | if not a and b or a and not b 38 | return false 39 | 40 | numKeysA = 0 41 | numKeysB = 0 42 | 43 | for key in Object.keys(b) 44 | numKeysB++ 45 | if not a[key] isnt b[key] 46 | return false 47 | for key in a 48 | numKeysA++ 49 | return numKeysA is numKeysB 50 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/test/atomTestRunner.coffee: -------------------------------------------------------------------------------- 1 | fs = require 'fs' 2 | path = require 'path' 3 | Mocha = require 'mocha' 4 | 5 | {allowUnsafeEval, allowUnsafeNewFunction} = require 'loophole' 6 | 7 | module.exports = (args) -> 8 | 9 | # Fixes CSP eval restriction 10 | allowUnsafeEval -> 11 | 12 | mocha = new Mocha( 13 | ui: 'bdd' 14 | reporter: 'html' 15 | ) 16 | 17 | applicationDelegate = args.buildDefaultApplicationDelegate() 18 | 19 | # Create element for mocha reporter 20 | element = document.createElement 'div' 21 | element.id = 'mocha' 22 | document.body.appendChild element 23 | document.body.style.overflow = 'scroll' 24 | 25 | link = document.createElement('link') 26 | link.setAttribute('rel', 'stylesheet') 27 | link.setAttribute('href', path.join(__dirname, '..', 'node_modules/mocha/mocha.css')) 28 | document.head.appendChild(link) 29 | 30 | # Build atom global 31 | window.atom = args.buildAtomEnvironment({ 32 | applicationDelegate, window, document 33 | configDirPath: process.env.ATOM_HOME 34 | enablePersistence: false 35 | }) 36 | 37 | for each in args.testPaths 38 | Mocha.utils.lookupFiles(each, ['js', 'coffee'], true).forEach(mocha.addFile.bind(mocha)) 39 | 40 | # Run tests and return a promise 41 | new Promise((resolve, reject) -> 42 | mocha.run((failures) -> 43 | resolve(failures) 44 | ) 45 | ) 46 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/test/date-time-spec.coffee: -------------------------------------------------------------------------------- 1 | DateTime = require '../src/date-time' 2 | should = require('chai').should() 3 | 4 | describe 'DateTime', -> 5 | 6 | it 'should convert date time to absolute date time', -> 7 | DateTime.format('this feb').substr(4).should.match(/-02-01/) 8 | DateTime.format('this feb +5h').substr(4).should.match(/-02-01 05:00/) 9 | DateTime.format('this feb +5h +10m').substr(4).should.match(/-02-01 05:10/) 10 | DateTime.format('this feb +5h +10m 20ms').substr(4).should.match(/-02-01 05:10:00:020/) 11 | DateTime.format('2016-02-01').substr(4).should.equal('-02-01') 12 | DateTime.format('this may').substr(4).should.equal('-05-01') 13 | DateTime.format('2016-05-01').substr(4).should.equal('-05-01') 14 | DateTime.format('this may at 9am').substr(4).should.equal('-05-01 09:00') 15 | DateTime.format('this may 1 9pm').substr(4).should.equal('-05-01 21:00') 16 | DateTime.format('this may at 9pm -10m').substr(4).should.equal('-05-01 20:50') 17 | DateTime.format('2016-W51-4').should.equal('2016-12-22') 18 | DateTime.format(new Date(2016, 1, 1)).should.equal('2016-02-01') 19 | DateTime.format(new Date(2016, 5, 1)).should.equal('2016-06-01') 20 | 21 | it 'should round trip now', -> 22 | now = DateTime.parse('now') 23 | DateTime.parse(DateTime.format(now)).should.eql(now) 24 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/test/item-path-query-spec.coffee: -------------------------------------------------------------------------------- 1 | loadOutlineFixture = require './load-outline-fixture' 2 | ItemPathQuery = require '../src/item-path-query' 3 | Outline = require '../src/outline' 4 | should = require('chai').should() 5 | 6 | describe 'ItemPathQuery', -> 7 | [outline, root, one, two, three, four, five, six, query] = [] 8 | 9 | beforeEach -> 10 | {outline, root, one, two, three, four, five, six} = loadOutlineFixture() 11 | query = new ItemPathQuery(outline) 12 | 13 | afterEach -> 14 | outline.destroy() 15 | 16 | it 'should not start query when path is set', -> 17 | query.itemPath = '//three' 18 | query.started.should.equal(false) 19 | query.results.should.eql([]) 20 | 21 | it 'should not start query when path is set', -> 22 | query.itemPath = '//three' 23 | query.start() 24 | query.started.should.equal(true) 25 | query.results.should.eql([three]) 26 | 27 | it 'should allow custom query function', -> 28 | query.queryFunction = -> 29 | [one, six] 30 | query.start() 31 | query.results.should.eql([one, six]) 32 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/test/item-serializer-spec.coffee: -------------------------------------------------------------------------------- 1 | loadOutlineFixture = require './load-outline-fixture' 2 | ItemSerializer = require '../src/item-serializer' 3 | Outline = require '../src/outline' 4 | should = require('chai').should() 5 | 6 | describe 'ItemSerializer', -> 7 | [outline, root, one, two, three, four, five, six] = [] 8 | 9 | beforeEach -> 10 | {outline, root, one, two, three, four, five, six} = loadOutlineFixture() 11 | 12 | afterEach -> 13 | outline.destroy() 14 | 15 | it 'should normalize line breaks', -> 16 | ItemSerializer.replaceParagraphBreaks('\n', '').length.should.equal(0) 17 | ItemSerializer.replaceParagraphBreaks('\n\n', '').length.should.equal(0) 18 | ItemSerializer.replaceParagraphBreaks('\r', '').length.should.equal(0) 19 | ItemSerializer.replaceParagraphBreaks('\r\n', '').length.should.equal(0) 20 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/test/load-outline-fixture.coffee: -------------------------------------------------------------------------------- 1 | Outline = require '../src/outline' 2 | 3 | # one 4 | # two 5 | # three @t 6 | # four @t 7 | # five 8 | # six @t(23) 9 | 10 | module.exports = (type) -> 11 | 12 | outline = new Outline(type) 13 | 14 | one = outline.createItem('one', '1') 15 | 16 | two = outline.createItem('two', '2') 17 | one.appendChildren(two) 18 | 19 | three = outline.createItem('three', '3') 20 | three.setAttribute('data-t', '') 21 | two.appendChildren(three) 22 | 23 | four = outline.createItem('four', '4') 24 | four.setAttribute('data-t', '') 25 | four.addBodyAttributeInRange('b', {}, 2, 1) 26 | 27 | two.appendChildren(four) 28 | 29 | five = outline.createItem('five', '5') 30 | one.appendChildren(five) 31 | 32 | six = outline.createItem('six', '6') 33 | six.setAttribute('data-t', '23') 34 | five.appendChildren(six) 35 | 36 | outline.root.appendChildren(one) 37 | outline.changeCount = 0 38 | outline.undoManager.removeAllActions() 39 | Outline.addOutline(outline) 40 | 41 | {} = 42 | outline: outline 43 | root: outline.root 44 | one: outline.getItemForID('1') 45 | two: outline.getItemForID('2') 46 | three: outline.getItemForID('3') 47 | four: outline.getItemForID('4') 48 | five: outline.getItemForID('5') 49 | six: outline.getItemForID('6') 50 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/test/mocha.opts: -------------------------------------------------------------------------------- 1 | --recursive 2 | --reporter nyan 3 | --ui bdd 4 | --compilers coffee:coffee-script/register 5 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/test/serializations/item-references-spec.coffee: -------------------------------------------------------------------------------- 1 | ItemSerializer = require '../../src/item-serializer' 2 | loadOutlineFixture = require '../load-outline-fixture' 3 | Outline = require '../../src/outline' 4 | should = require('chai').should() 5 | 6 | fixtureAsItemReferencesJSON = '{"outlineID":"m1eLUlEF8b","items":[{"id":"1"}]}' 7 | 8 | describe 'Item References Serialization', -> 9 | [outline, root, one, two, three, four, five, six] = [] 10 | 11 | beforeEach -> 12 | {outline, root, one, two, three, four, five, six} = loadOutlineFixture() 13 | 14 | afterEach -> 15 | outline.destroy() 16 | 17 | it 'should serialize and deserialize items', -> 18 | serializedReferences = ItemSerializer.serializeItems([three, five], type: ItemSerializer.ItemReferencesType) 19 | items = ItemSerializer.deserializeItems(serializedReferences, outline, type: ItemSerializer.ItemReferencesType) 20 | delete items['loadOptions'] 21 | items.should.eql([three, five]) 22 | -------------------------------------------------------------------------------- /BirchOutline/birch-outline.js/webpack.config.coffee: -------------------------------------------------------------------------------- 1 | webpack = require 'webpack-stream' 2 | 3 | uglifyConfig = 4 | compress: 5 | warnings: false 6 | mangle:false 7 | 8 | module.exports = 9 | devtool: 'source-map' 10 | entry: 11 | 'birchoutline': './lib/index.js' 12 | output: 13 | path: './min' 14 | library: '[name]' 15 | filename: '[name].js' 16 | module: 17 | loaders: [ 18 | test: /\.json$/, 19 | loader: "json-loader" 20 | ] 21 | plugins: [ 22 | #new webpack.webpack.optimize.UglifyJsPlugin(uglifyConfig) 23 | # The below is all experiments in making the web distribution smaller. 24 | # Should lbe possible 25 | #new webpack.webpack.IgnorePlugin(/moment/) 26 | #new webpack.webpack.IgnorePlugin(/item-path.*/) 27 | #new webpack.webpack.IgnorePlugin(/date-time.*/) 28 | #new webpack.webpack.IgnorePlugin(/.*opml.*/) 29 | #new webpack.webpack.IgnorePlugin(/.*bml.*/) 30 | #new webpack.webpack.IgnorePlugin(/.*url.*/) 31 | #new webpack.webpack.ContextReplacementPlugin(/moment[\\\/]locale$/, /^\.\/(en)$/) 32 | ] 33 | -------------------------------------------------------------------------------- /Cartfile: -------------------------------------------------------------------------------- 1 | # carthage update --platform macOS 2 | github "sparkle-project/Sparkle" ~> 1.2 3 | github "PaddleHQ/Mac-Framework-V4" 4 | -------------------------------------------------------------------------------- /Cartfile.resolved: -------------------------------------------------------------------------------- 1 | github "PaddleHQ/Mac-Framework-V4" "v4.4.3" 2 | github "sparkle-project/Sparkle" "1.27.3" 3 | -------------------------------------------------------------------------------- /Carthage/Build/.AppReceiptValidator.version: -------------------------------------------------------------------------------- 1 | { 2 | "commitish" : "0.7.4", 3 | "Mac" : [ 4 | { 5 | "hash" : "027d714d58cf46bd452b37b80fe32a51a964bda8bf5982756b290c9b765c22f5", 6 | "name" : "AppReceiptValidator", 7 | "linking" : "dynamic", 8 | "swiftToolchainVersion" : "5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1)" 9 | } 10 | ] 11 | } -------------------------------------------------------------------------------- /Carthage/Build/.Mac-Framework-V4.version: -------------------------------------------------------------------------------- 1 | { 2 | "tvOS" : [ 3 | 4 | ], 5 | "commitish" : "v4.4.3", 6 | "Mac" : [ 7 | { 8 | "hash" : "c7056a606729edeba96635071ec6e1c7f4e1cfb69fec362edd821b7d9f8fdfde", 9 | "name" : "Paddle", 10 | "linking" : "dynamic" 11 | } 12 | ], 13 | "iOS" : [ 14 | 15 | ], 16 | "watchOS" : [ 17 | 18 | ] 19 | } -------------------------------------------------------------------------------- /Carthage/Build/.Sparkle.version: -------------------------------------------------------------------------------- 1 | { 2 | "Mac" : [ 3 | { 4 | "name" : "Sparkle", 5 | "hash" : "bab8718d80deea550578b1b7fa4b1243cb39cf52455ec99da9d3c600e08afc93", 6 | "linking" : "dynamic" 7 | } 8 | ], 9 | "watchOS" : [ 10 | 11 | ], 12 | "tvOS" : [ 13 | 14 | ], 15 | "commitish" : "1.27.1", 16 | "iOS" : [ 17 | 18 | ] 19 | } -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Paddle: -------------------------------------------------------------------------------- 1 | Versions/Current/Paddle -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Paddle { 2 | header "Paddle.h" 3 | header "PADProduct.h" 4 | header "PADError.h" 5 | header "PADAlert.h" 6 | header "PADCheckoutOptions.h" 7 | header "PADProductConfiguration.h" 8 | header "PADDisplayConfiguration.h" 9 | header "PADPriceOverride.h" 10 | export * 11 | } 12 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Paddle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Paddle -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADActivateWindow.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADActivateWindow.nib -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADCheckoutWindow.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADCheckoutWindow.nib -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductNoTrialWindow.nib/keyedobjects-101300.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductNoTrialWindow.nib/keyedobjects-101300.nib -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductNoTrialWindow.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductNoTrialWindow.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductWindow.nib/keyedobjects-101300.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductWindow.nib/keyedobjects-101300.nib -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductWindow.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Base.lproj/PADProductWindow.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 22G74 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Paddle 11 | CFBundleIdentifier 12 | com.paddle.Paddle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Paddle 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 4.4.3 21 | CFBundleSupportedPlatforms 22 | 23 | MacOSX 24 | 25 | CFBundleVersion 26 | 4.4.3 27 | DTCompiler 28 | com.apple.compilers.llvm.clang.1_0 29 | DTPlatformBuild 30 | 31 | DTPlatformName 32 | macosx 33 | DTPlatformVersion 34 | 13.3 35 | DTSDKBuild 36 | 22E245 37 | DTSDKName 38 | macosx13.3 39 | DTXcode 40 | 1430 41 | DTXcodeBuild 42 | 14E222b 43 | LSMinimumSystemVersion 44 | 10.13 45 | NSHumanReadableCopyright 46 | Copyright © 2017 Paddle. All rights reserved. 47 | PADMajorMinorVersion 48 | 4.0 49 | 50 | 51 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/PADWebPopWindowController.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/PADWebPopWindowController.nib -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/de.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Abbrechen"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Jetzt kaufen"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Lizenz aktivieren"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "E-Mail-Adresse"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "Lizenzcode"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Aktivieren"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "Lizenz wird aktiviert"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "Lizenz deaktivieren"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/de.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Abbrechen"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Lizenz eingeben"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Kauf wird abgeschlossen"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/en.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Cancel"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Buy Now"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Activate License"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "Email Address"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "License Code"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Activate"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "Activating License"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "Deactivate License"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/en.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Cancel"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Enter License"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Completing Purchase"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/en.lproj/PADProductNoTrialWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSTextFieldCell"; title = "Save 50% today!"; ObjectID = "25"; */ 3 | "25.title" = "Save 50% today!"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSTextFieldCell"; title = "NOW"; ObjectID = "27"; */ 6 | "27.title" = "NOW"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "28"; */ 9 | "28.title" = "$10.00"; /* Does not need to be translated */ 10 | 11 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "29"; */ 12 | "29.title" = "$10.00"; /* Does not need to be translated */ 13 | 14 | /* Class = "NSTextFieldCell"; title = "WAS"; ObjectID = "30"; */ 15 | "30.title" = "WAS"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "By John Smith"; ObjectID = "31"; */ 18 | "31.title" = "By John Smith"; /* Does not need to be translated */ 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "32"; */ 21 | "32.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "37"; */ 24 | "37.title" = "Enter License"; 25 | 26 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "38"; */ 27 | "38.title" = "Buy Now"; 28 | 29 | /* Class = "NSButtonCell"; title = "Continue Trial"; ObjectID = "39"; */ 30 | "39.title" = "Continue Trial"; 31 | 32 | /* Class = "NSTextFieldCell"; title = "Thanks for evaluating this version of Test Product."; ObjectID = "40"; */ 33 | "40.title" = "Thanks for evaluating this version of Test Product."; /* Does not need to be translated */ 34 | 35 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "41"; */ 36 | "41.title" = "Test Product"; /* Does not need to be translated */ 37 | 38 | /* Class = "NSTextFieldCell"; title = "Thank you for trying"; ObjectID = "42"; */ 39 | "42.title" = "Thank you for trying"; /* Does not need to be translated */ 40 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/es.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 2 | "17.title" = "Cancelar"; 3 | 4 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 5 | "18.title" = "Comprar ahora"; 6 | 7 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 8 | "19.title" = "Activar licencia"; 9 | 10 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 11 | "21.title" = "Dirección de correo electrónico"; 12 | 13 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 14 | "22.title" = "Código de la licencia"; 15 | 16 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 17 | "25.title" = "Activar"; 18 | 19 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 20 | "26.title" = "Test Product"; /* Does not need to be translated */ 21 | 22 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 23 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 24 | 25 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 26 | "lwY-yD-CE9.title" = "Activando licencia"; 27 | 28 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 29 | "pEH-Ih-5sP.title" = "Desactivar licencia"; 30 | 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/es.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Cancelar"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Introducir licencia"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Completando compra"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/fr.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Annuler"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Acheter maintenant"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Activer la licence"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "Adresse e-mail"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "Code de licence"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Activer"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "Activer la licence"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "Désactiver la licence"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/fr.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Annuler"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Saisir la licence"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Terminer l'achat"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/it.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Annulla"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Acquista Ora"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Attiva Licenza"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "Indirizzo Email"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "Codice Licenza"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Attiva"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "Stiamo attivando la licenza"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "Disattiva la licenza"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/it.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Annulla"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Inserisci Licenza"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Stiamo completando il tuo acquisto"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/it.lproj/PADProductNoTrialWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSTextFieldCell"; title = "Save 50% today!"; ObjectID = "25"; */ 3 | "25.title" = "Save 50% today!"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSTextFieldCell"; title = "NOW"; ObjectID = "27"; */ 6 | "27.title" = "ORA"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "28"; */ 9 | "28.title" = "$10.00"; /* Does not need to be translated */ 10 | 11 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "29"; */ 12 | "29.title" = "$10.00"; /* Does not need to be translated */ 13 | 14 | /* Class = "NSTextFieldCell"; title = "WAS"; ObjectID = "30"; */ 15 | "30.title" = "ERA"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "By John Smith"; ObjectID = "31"; */ 18 | "31.title" = "By John Smith"; /* Does not need to be translated */ 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "32"; */ 21 | "32.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "37"; */ 24 | "37.title" = "Inserisci Licenza"; 25 | 26 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "38"; */ 27 | "38.title" = "Acquista Ora"; 28 | 29 | /* Class = "NSButtonCell"; title = "Continue Trial"; ObjectID = "39"; */ 30 | "39.title" = "Continua Prova"; 31 | 32 | /* Class = "NSTextFieldCell"; title = "Thanks for evaluating this version of Test Product."; ObjectID = "40"; */ 33 | "40.title" = "Thanks for evaluating this version of Test Product."; /* Does not need to be translated */ 34 | 35 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "41"; */ 36 | "41.title" = "Test Product"; /* Does not need to be translated */ 37 | 38 | /* Class = "NSTextFieldCell"; title = "Thank you for trying"; ObjectID = "42"; */ 39 | "42.title" = "Thank you for trying"; /* Does not need to be translated */ 40 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/ja.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "キャンセルする"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "今すぐ購入する"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "ライセンスをアクティベートする"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "メールアドレス"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "ライセンスコード"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "アクティベートする"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "ライセンスを有効化"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "ライセンスを無効化"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/ja.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "キャンセルする"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "ライセンスを入力"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "購入を完了しています"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/ja.lproj/PADProductNoTrialWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSTextFieldCell"; title = "Save 50% today!"; ObjectID = "25"; */ 3 | "25.title" = "Save 50% today!"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSTextFieldCell"; title = "NOW"; ObjectID = "27"; */ 6 | "27.title" = "今すぐ"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "28"; */ 9 | "28.title" = "$10.00"; /* Does not need to be translated */ 10 | 11 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "29"; */ 12 | "29.title" = "$10.00"; /* Does not need to be translated */ 13 | 14 | /* Class = "NSTextFieldCell"; title = "WAS"; ObjectID = "30"; */ 15 | "30.title" = "は次でした:"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "By John Smith"; ObjectID = "31"; */ 18 | "31.title" = "By John Smith"; /* Does not need to be translated */ 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "32"; */ 21 | "32.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "37"; */ 24 | "37.title" = "ライセンスを入力"; 25 | 26 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "38"; */ 27 | "38.title" = "今すぐ購入する"; 28 | 29 | /* Class = "NSButtonCell"; title = "Continue Trial"; ObjectID = "39"; */ 30 | "39.title" = "お試しを続ける"; 31 | 32 | /* Class = "NSTextFieldCell"; title = "Thanks for evaluating this version of Test Product."; ObjectID = "40"; */ 33 | "40.title" = "Thanks for evaluating this version of Test Product."; /* Does not need to be translated */ 34 | 35 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "41"; */ 36 | "41.title" = "Test Product"; /* Does not need to be translated */ 37 | 38 | /* Class = "NSTextFieldCell"; title = "Thank you for trying"; ObjectID = "42"; */ 39 | "42.title" = "Thank you for trying"; /* Does not need to be translated */ 40 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/nl.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Annuleren"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Nu kopen"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Licentie activeren"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "E-mailadres"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "Licentiecode"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Activeren"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "Licentie activeren"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "Licentie deactiveren"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/nl.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Annuleren"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Voer licentie in"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Aankoop aan het afronden"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/pl.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Anuluj"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Kup teraz"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Aktywuj licencję"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "Adres e-mail"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "Kod licencji"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Aktywuj"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "Aktywowanie licencji"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "Dezaktywuj licencję"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/pl.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Anuluj"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Wprowadź licencję"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Finalizowanie zakupu"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/pt.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Cancelar"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Adquira já!"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Ativar licença"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "Endereço de e-mail"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "Código de licença"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Ativar"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "A Activar a Licença"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "A Desactivar a Licença"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/pt.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Cancelar"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Introduzir licença"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "A Concluir a Compra"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/ru.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "Отмена"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "Купить сейчас"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "Активировать лицензию"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "Адрес электронной почты"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "Лицензионный код"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "Активировать"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "Активация лицензии"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "Деактивация лицензии"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/ru.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "Отмена"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "Ввод лицензионной информации"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "Завершение покупки"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/zh-Hans.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "取消"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "现在购买"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "激活许可证"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "电子邮件地址"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "许可码"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "激活"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "激活许可证"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "停用许可证"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/zh-Hans.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "取消"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "输入许可证"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "完成购买"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/zh-Hans.lproj/PADProductNoTrialWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSTextFieldCell"; title = "Save 50% today!"; ObjectID = "25"; */ 3 | "25.title" = "Save 50% today!"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSTextFieldCell"; title = "NOW"; ObjectID = "27"; */ 6 | "27.title" = "现在"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "28"; */ 9 | "28.title" = "$10.00"; /* Does not need to be translated */ 10 | 11 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "29"; */ 12 | "29.title" = "$10.00"; /* Does not need to be translated */ 13 | 14 | /* Class = "NSTextFieldCell"; title = "WAS"; ObjectID = "30"; */ 15 | "30.title" = "过去是"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "By John Smith"; ObjectID = "31"; */ 18 | "31.title" = "By John Smith"; /* Does not need to be translated */ 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "32"; */ 21 | "32.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "37"; */ 24 | "37.title" = "输入许可证"; 25 | 26 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "38"; */ 27 | "38.title" = "现在购买"; 28 | 29 | /* Class = "NSButtonCell"; title = "Continue Trial"; ObjectID = "39"; */ 30 | "39.title" = "继续试验"; 31 | 32 | /* Class = "NSTextFieldCell"; title = "Thanks for evaluating this version of Test Product."; ObjectID = "40"; */ 33 | "40.title" = "Thanks for evaluating this version of Test Product."; /* Does not need to be translated */ 34 | 35 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "41"; */ 36 | "41.title" = "Test Product"; /* Does not need to be translated */ 37 | 38 | /* Class = "NSTextFieldCell"; title = "Thank you for trying"; ObjectID = "42"; */ 39 | "42.title" = "Thank you for trying"; /* Does not need to be translated */ 40 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/zh-TW.lproj/PADActivateWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "17"; */ 3 | "17.title" = "取消"; 4 | 5 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "18"; */ 6 | "18.title" = "立即購買"; 7 | 8 | /* Class = "NSButtonCell"; title = "Activate License"; ObjectID = "19"; */ 9 | "19.title" = "啟用授權"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Email Address"; ObjectID = "21"; */ 12 | "21.title" = "電子郵件地址"; 13 | 14 | /* Class = "NSTextFieldCell"; title = "License Code"; ObjectID = "22"; */ 15 | "22.title" = "授權碼"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Activate"; ObjectID = "25"; */ 18 | "25.title" = "啟用"; 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "26"; */ 21 | "26.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSTextFieldCell"; title = "Already purchased a license? Fill in the form below and activate Test Product instantly."; ObjectID = "27"; */ 24 | "27.title" = "Already purchased a license? Fill in the form below and activate Test Product instantly."; /* Does not need to be translated */ 25 | 26 | /* Class = "NSTextFieldCell"; title = "Activating License"; ObjectID = "lwY-yD-CE9"; */ 27 | "lwY-yD-CE9.title" = "啟用執照中"; 28 | 29 | /* Class = "NSButtonCell"; title = "Deactivate License"; ObjectID = "pEH-Ih-5sP"; */ 30 | "pEH-Ih-5sP.title" = "停用執照中"; 31 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/zh-TW.lproj/PADCheckoutWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSWindow"; title = "Window"; ObjectID = "1"; */ 3 | "1.title" = "Window"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "14"; */ 6 | "14.title" = "取消"; 7 | 8 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "15"; */ 9 | "15.title" = "輸入授權"; 10 | 11 | /* Class = "NSTextFieldCell"; title = "Completing Purchase"; ObjectID = "cSe-YQ-ICA"; */ 12 | "cSe-YQ-ICA.title" = "完成購買中"; 13 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/A/Resources/zh-TW.lproj/PADProductNoTrialWindow.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSTextFieldCell"; title = "Save 50% today!"; ObjectID = "25"; */ 3 | "25.title" = "Save 50% today!"; /* Does not need to be translated */ 4 | 5 | /* Class = "NSTextFieldCell"; title = "NOW"; ObjectID = "27"; */ 6 | "27.title" = "現在"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "28"; */ 9 | "28.title" = "$10.00"; /* Does not need to be translated */ 10 | 11 | /* Class = "NSTextFieldCell"; title = "$10.00"; ObjectID = "29"; */ 12 | "29.title" = "$10.00"; /* Does not need to be translated */ 13 | 14 | /* Class = "NSTextFieldCell"; title = "WAS"; ObjectID = "30"; */ 15 | "30.title" = "原為"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "By John Smith"; ObjectID = "31"; */ 18 | "31.title" = "By John Smith"; /* Does not need to be translated */ 19 | 20 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "32"; */ 21 | "32.title" = "Test Product"; /* Does not need to be translated */ 22 | 23 | /* Class = "NSButtonCell"; title = "Enter License"; ObjectID = "37"; */ 24 | "37.title" = "輸入授權"; 25 | 26 | /* Class = "NSButtonCell"; title = "Buy Now"; ObjectID = "38"; */ 27 | "38.title" = "立即購買"; 28 | 29 | /* Class = "NSButtonCell"; title = "Continue Trial"; ObjectID = "39"; */ 30 | "39.title" = "繼續試用"; 31 | 32 | /* Class = "NSTextFieldCell"; title = "Thanks for evaluating this version of Test Product."; ObjectID = "40"; */ 33 | "40.title" = "Thanks for evaluating this version of Test Product."; /* Does not need to be translated */ 34 | 35 | /* Class = "NSTextFieldCell"; title = "Test Product"; ObjectID = "41"; */ 36 | "41.title" = "Test Product"; /* Does not need to be translated */ 37 | 38 | /* Class = "NSTextFieldCell"; title = "Thank you for trying"; ObjectID = "42"; */ 39 | "42.title" = "Thank you for trying"; /* Does not need to be translated */ 40 | -------------------------------------------------------------------------------- /Carthage/Build/Mac/Paddle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | Copyright (c) 2023 Jesse Grosjean 4 | 5 | THIS IS COMMERCIAL SOFTWARE. I have shared the source code ONLY for TaskPaper license holders to modify for their own purposes. Do not remove licensing code. Do not redistribute binaries without permission from jesse@hogbaysoftware.com. Do submit pull requests if you would like your changes potentially included in the official TaskPaper release. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 8 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 9 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 10 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 11 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 12 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 13 | SOFTWARE. 14 | 15 | Thanks,
16 | Jesse Grosjean 17 | -------------------------------------------------------------------------------- /TaskPaper.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /TaskPaper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /TaskPaper.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "setapp-framework", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/MacPaw/Setapp-framework.git", 7 | "state" : { 8 | "revision" : "b0f5c4875a6c5256364fcfe97ce207517bdfb0a6", 9 | "version" : "3.4.0" 10 | } 11 | }, 12 | { 13 | "identity" : "sparkle", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/sparkle-project/Sparkle", 16 | "state" : { 17 | "revision" : "87e4fcbac39912f9cdb9a9acf205cad60e1ca3bc", 18 | "version" : "2.4.2" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Taskpaper-16x16.png", 5 | "idiom" : "mac", 6 | "scale" : "1x", 7 | "size" : "16x16" 8 | }, 9 | { 10 | "filename" : "Taskpaper-16x16@2x.png", 11 | "idiom" : "mac", 12 | "scale" : "2x", 13 | "size" : "16x16" 14 | }, 15 | { 16 | "filename" : "Icon-32.png", 17 | "idiom" : "mac", 18 | "scale" : "1x", 19 | "size" : "32x32" 20 | }, 21 | { 22 | "filename" : "Icon-64.png", 23 | "idiom" : "mac", 24 | "scale" : "2x", 25 | "size" : "32x32" 26 | }, 27 | { 28 | "filename" : "Icon-128.png", 29 | "idiom" : "mac", 30 | "scale" : "1x", 31 | "size" : "128x128" 32 | }, 33 | { 34 | "filename" : "Icon-257.png", 35 | "idiom" : "mac", 36 | "scale" : "2x", 37 | "size" : "128x128" 38 | }, 39 | { 40 | "filename" : "Icon-256.png", 41 | "idiom" : "mac", 42 | "scale" : "1x", 43 | "size" : "256x256" 44 | }, 45 | { 46 | "filename" : "Icon-513.png", 47 | "idiom" : "mac", 48 | "scale" : "2x", 49 | "size" : "256x256" 50 | }, 51 | { 52 | "filename" : "Icon-512.png", 53 | "idiom" : "mac", 54 | "scale" : "1x", 55 | "size" : "512x512" 56 | }, 57 | { 58 | "filename" : "Icon-1024.png", 59 | "idiom" : "mac", 60 | "scale" : "2x", 61 | "size" : "512x512" 62 | } 63 | ], 64 | "info" : { 65 | "author" : "xcode", 66 | "version" : 1 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-1024.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-128.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-256.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-257.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-257.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-32.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-512.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-513.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-513.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Icon-64.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Taskpaper-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Taskpaper-16x16.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/AppIcon.appiconset/Taskpaper-16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/AppIcon.appiconset/Taskpaper-16x16@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/RemindersIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Reminders.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Reminders@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/RemindersIcon.imageset/Reminders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/RemindersIcon.imageset/Reminders.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/RemindersIcon.imageset/Reminders@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/RemindersIcon.imageset/Reminders@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_128x128.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_16x16.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_256x256.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_32x32.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_512x512.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperDocument.iconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Taskpaper-16x16.png", 5 | "idiom" : "mac", 6 | "scale" : "1x", 7 | "size" : "16x16" 8 | }, 9 | { 10 | "filename" : "Taskpaper-16x16@2x.png", 11 | "idiom" : "mac", 12 | "scale" : "2x", 13 | "size" : "16x16" 14 | }, 15 | { 16 | "filename" : "Taskpaper-32x32.png", 17 | "idiom" : "mac", 18 | "scale" : "1x", 19 | "size" : "32x32" 20 | }, 21 | { 22 | "filename" : "Taskpaper-32x32@2x.png", 23 | "idiom" : "mac", 24 | "scale" : "2x", 25 | "size" : "32x32" 26 | }, 27 | { 28 | "filename" : "Taskpaper-128x128.png", 29 | "idiom" : "mac", 30 | "scale" : "1x", 31 | "size" : "128x128" 32 | }, 33 | { 34 | "filename" : "Taskpaper-128x128@2x.png", 35 | "idiom" : "mac", 36 | "scale" : "2x", 37 | "size" : "128x128" 38 | }, 39 | { 40 | "filename" : "Taskpaper-256x256.png", 41 | "idiom" : "mac", 42 | "scale" : "1x", 43 | "size" : "256x256" 44 | }, 45 | { 46 | "filename" : "Taskpaper-256x256@2x.png", 47 | "idiom" : "mac", 48 | "scale" : "2x", 49 | "size" : "256x256" 50 | }, 51 | { 52 | "filename" : "Taskpaper-512x512.png", 53 | "idiom" : "mac", 54 | "scale" : "1x", 55 | "size" : "512x512" 56 | }, 57 | { 58 | "filename" : "Taskpaper-512x512@2x.png", 59 | "idiom" : "mac", 60 | "scale" : "2x", 61 | "size" : "512x512" 62 | } 63 | ], 64 | "info" : { 65 | "author" : "xcode", 66 | "version" : 1 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-128x128.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-128x128@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-16x16.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-16x16@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-256x256.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-256x256@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-32x32.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-32x32@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-512x512.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/TaskPaperOLD.appiconset/Taskpaper-512x512@2x.png -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/ToolbarSearchIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "search.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } -------------------------------------------------------------------------------- /TaskPaper/Assets.xcassets/ToolbarSearchIcon.imageset/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Assets.xcassets/ToolbarSearchIcon.imageset/search.png -------------------------------------------------------------------------------- /TaskPaper/Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Bridging-Header.h 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 8/21/16. 6 | // 7 | // 8 | 9 | #import "Checkers.h" 10 | #import "JGMethodSwizzler.h" 11 | #import "NSTextStorageBase.h" 12 | #import "NSTextStorage-Performance.h" 13 | #import "NSWindowTabbedBase.h" 14 | #import "NSMutableAttributedString-Performance.h" 15 | #import "NSTextView-RangeForUserCompletionAdditions.h" 16 | #import "NSTextView-AccessibilityPerformanceHacks.h" 17 | #import "NSAppleEventDescriptor-AEM.h" 18 | #import "getFileDescriptorPath.h" 19 | 20 | #if SETAPP 21 | #import "Setapp.h" 22 | #endif 23 | -------------------------------------------------------------------------------- /TaskPaper/DMGTemplate-Direct.dmgCanvas/QuickLook/Preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/DMGTemplate-Direct.dmgCanvas/QuickLook/Preview.jpg -------------------------------------------------------------------------------- /TaskPaper/DMGTemplate-Setapp.dmgCanvas/QuickLook/Preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/DMGTemplate-Setapp.dmgCanvas/QuickLook/Preview.jpg -------------------------------------------------------------------------------- /TaskPaper/Default.less: -------------------------------------------------------------------------------- 1 | // 2 | // 3 | // 4 | // https://www.taskpaper.com/guide/using-taskpaper/using-stylesheets.html 5 | // https://www.taskpaper.com/guide/reference/stylesheets/ 6 | // 7 | -------------------------------------------------------------------------------- /TaskPaper/ExportOptions-Direct.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | teamID 6 | 64A5CLJP5W 7 | method 8 | developer-id 9 | iTunesConnectAccountUsername 10 | jesse@hogbaysoftware.com 11 | 12 | 13 | -------------------------------------------------------------------------------- /TaskPaper/OutlineEditorSplitViewController-TaskPaper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TaskPaperOutlineViewController.swift 3 | // TaskPaper 4 | // 5 | // Created by Jesse Grosjean on 7/12/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | extension OutlineEditorSplitViewController { 12 | @IBAction func newProject(_: Any?) { 13 | outlineEditor?.performCommand("outline-editor:new-project", options: nil) 14 | } 15 | 16 | @IBAction func newTask(_: Any?) { 17 | outlineEditor?.performCommand("outline-editor:new-task", options: nil) 18 | } 19 | 20 | @IBAction func newNote(_: Any?) { 21 | outlineEditor?.performCommand("outline-editor:new-note", options: nil) 22 | } 23 | 24 | @IBAction func archiveDone(_: Any?) { 25 | outlineEditor?.performCommand("outline-editor:archive-done", options: nil) 26 | } 27 | 28 | @IBAction func importReminders(_: Any?) { 29 | outlineEditor?.performCommand("outline-editor:import-reminders", options: nil) 30 | } 31 | 32 | @IBAction func importReminderCopies(_: Any?) { 33 | outlineEditor?.performCommand("outline-editor:import-reminder-copies", options: nil) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /TaskPaper/OutlineEditorWindowController-TaskPaper.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WindowController.swift 3 | // Birch 4 | // 5 | // Created by Jesse Grosjean on 5/26/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | extension OutlineEditorWindowController {} 12 | -------------------------------------------------------------------------------- /TaskPaper/Resources/es.lproj/Setapp.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/Resources/es.lproj/Setapp.strings -------------------------------------------------------------------------------- /TaskPaper/SetappAppIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jessegrosjean/TaskPaper/9d97e59ad902dbdd0d0fb7c99188698ccdbbf8b2/TaskPaper/SetappAppIcon.png -------------------------------------------------------------------------------- /TaskPaper/TaskPaper-Direct-Notes.md: -------------------------------------------------------------------------------- 1 | TaskPaper 3.9.4 2 | 3 | - Require macOS 11 4 | - Disable Insert Date/Calendar keyboard focus 5 | -------------------------------------------------------------------------------- /TaskPaper/TaskPaper-Direct.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.cs.allow-jit 6 | 7 | com.apple.security.cs.disable-library-validation 8 | 9 | com.apple.security.get-task-allow 10 | 11 | com.apple.security.personal-information.calendars 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /TaskPaper/TaskPaper.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | com.apple.security.personal-information.calendars 12 | 13 | com.apple.security.print 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /TaskPaper/TaskPaperDocument.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TaskPaperDocument.swift 3 | // TaskPaper 4 | // 5 | // Created by Jesse Grosjean on 6/10/16. 6 | // Copyright © 2005–2018 Jesse Grosjean. All rights reserved. 7 | // 8 | 9 | import BirchOutline 10 | import Cocoa 11 | 12 | class TaskPaperDocument: OutlineDocument { 13 | override func instantiateWindowController() -> OutlineEditorWindowController { 14 | let storyboard = NSStoryboard(name: "OutlineEditorWindow", bundle: nil) 15 | return storyboard.instantiateController(withIdentifier: "Outline Editor Window Controller") as! OutlineEditorWindowController 16 | } 17 | 18 | override var outlineRuntimeType: String { 19 | return "com.taskpaper.text" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /TaskPaper/TaskPaperInfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* 2 | TaskPaperInfoPlist.strings 3 | Birch 4 | 5 | Created by Jesse Grosjean on 1/18/17. 6 | 7 | */ 8 | MDItemKeywords = 9 | "to-do list, plain text, outliner, tasks, projects"; 10 | -------------------------------------------------------------------------------- /TaskPaper/Welcome.txt: -------------------------------------------------------------------------------- 1 | Welcome: 2 | - TaskPaper knows about projects, tasks, notes, and tags. 3 | - It auto-formats these items so that your lists are easier to read. 4 | - Delete this text when you are ready to start your own lists. 5 | To Create Items: 6 | - To create a task, type a dash followed by a space. 7 | - To create a project, type a line ending with a colon. 8 | - To create a tag, type '@' followed by the tag’s name. 9 | To Organize Items: 10 | - To indent items press the Tab key. 11 | - To un-indent items press Shift-Tab. 12 | - To mark a task done click leading dash. 13 | To Fold, Focus, and Filter Items: 14 | - To fold/unfold an item click the dot to the left of the item. 15 | - To focus on a single project select it in the sidebar. 16 | - To filter your list enter a search in the toolbar search field. 17 | -------------------------------------------------------------------------------- /TaskPaper/libSetapp/Resources/ja.lproj/Setapp.strings: -------------------------------------------------------------------------------- 1 | /* Release notes window title format */ 2 | "Welcome to %@ %@" = "%@%@へようこそ"; 3 | 4 | /* Email sharing dialog title format */ 5 | "Let’s stay in touch!" = "最新情報をどうぞ!"; 6 | 7 | /* Email sharing dialog description format */ 8 | "%@ invites you to receive its newsletters and offers." = "%@からのニュースレターと特別オファーを受け取る。"; 9 | 10 | /* Email sharing dialog additional info format */ 11 | "Setapp will share your %@ email with the developers of %@." = "Setappはあなたのメールアドレス\"%1$@\"を%2$@の開発者と共有します。"; 12 | 13 | /* Email sharing dialog allow button title */ 14 | "Sure, I’m In" = "了解する"; 15 | 16 | /* Email sharing dialog forbid button title */ 17 | "No, Thanks" = "いいえ、結構です"; 18 | 19 | /* Alert message text */ 20 | "This copy of %@ requires an active Setapp account installed on your Mac." = "%@のバージョンを使用するには、お使いのMacに現在有効なSetappアカウントがインストールされている必要があります。"; 21 | 22 | /* Alert informative text */ 23 | "Download and install Setapp to use %@ and discover even more awesome applications." = "%@を使用するには、Setappをダウンロードしてインストールしてください。Setappでは他にもすばらしいアプリケーションをご用意しています。"; 24 | 25 | /* Button caption */ 26 | "Learn More…" = "詳しい情報…"; 27 | 28 | /* Button caption */ 29 | "Quit" = "終了"; 30 | -------------------------------------------------------------------------------- /TaskPaper/libSetapp/Resources/ko.lproj/Setapp.strings: -------------------------------------------------------------------------------- 1 | /* Release notes window title format */ 2 | "Welcome to %@ %@" = "%@ %@에 오신 것을 환영합니다"; 3 | 4 | /* Email sharing dialog title format */ 5 | "Let’s stay in touch!" = "최신 소식을 받아보세요!"; 6 | 7 | /* Email sharing dialog description format */ 8 | "%@ invites you to receive its newsletters and offers." = "%@의 뉴스레터 및 할인 소식을 받을 수 있도록 초대합니다."; 9 | 10 | /* Email sharing dialog additional info format */ 11 | "Setapp will share your %@ email with the developers of %@." = "Setapp은 사용자의 %@ 이메일 주소를 %@ 앱 개발자와 공유합니다."; 12 | 13 | /* Email sharing dialog allow button title */ 14 | "Sure, I’m In" = "좋습니다"; 15 | 16 | /* Email sharing dialog forbid button title */ 17 | "No, Thanks" = "괜찮습니다"; 18 | 19 | /* Alert message text */ 20 | "This copy of %@ requires an active Setapp account installed on your Mac." = "이 복사본의 %@을(를) 사용하려면 Mac에 활성화된 Setapp 계정이 설치되어 있어야 합니다."; 21 | 22 | /* Alert informative text */ 23 | "Download and install Setapp to use %@ and discover even more awesome applications." = "%@ 앱을 사용하려면 Setapp을 다운로드하고 설치하세요. 다양하고 유용한 응용 프로그램도 둘어보세요."; 24 | 25 | /* Button caption */ 26 | "Learn More…" = "더 알아보기…"; 27 | 28 | /* Button caption */ 29 | "Quit" = "종료"; 30 | -------------------------------------------------------------------------------- /TaskPaper/libSetapp/Resources/nl.lproj/Setapp.strings: -------------------------------------------------------------------------------- 1 | /* Release notes window title format */ 2 | "Welcome to %@ %@" = "Welkom bij %@ %@"; 3 | 4 | /* Email sharing dialog title format */ 5 | "Let’s stay in touch!" = "Laten we in contact blijven!"; 6 | 7 | /* Email sharing dialog description format */ 8 | "%@ invites you to receive its newsletters and offers." = "%@ wil je graag nieuwsbrieven en aanbiedingen sturen."; 9 | 10 | /* Email sharing dialog additional info format */ 11 | "Setapp will share your %@ email with the developers of %@." = "Setapp deelt je e-mailadres %@ met de ontwikkelaars van %@."; 12 | 13 | /* Email sharing dialog allow button title */ 14 | "Sure, I’m In" = "Natuurlijk"; 15 | 16 | /* Email sharing dialog forbid button title */ 17 | "No, Thanks" = "Nee, bedankt"; 18 | 19 | /* Alert message text */ 20 | "This copy of %@ requires an active Setapp account installed on your Mac." = "Voor dit exemplaar van %@ heb je een actief Setapp-account op je Mac nodig."; 21 | 22 | /* Alert informative text */ 23 | "Download and install Setapp to use %@ and discover even more awesome applications." = "Download en installeer Setapp om %@ te gebruiken en ontdek nog meer geweldige apps."; 24 | 25 | /* Button caption */ 26 | "Learn More…" = "Meer info…"; 27 | 28 | /* Button caption */ 29 | "Quit" = "Sluit"; 30 | -------------------------------------------------------------------------------- /TaskPaper/libSetapp/Resources/pl.lproj/Setapp.strings: -------------------------------------------------------------------------------- 1 | /* Release notes window title format */ 2 | "Welcome to %@ %@" = "Witamy w %@ %@"; 3 | 4 | /* Email sharing dialog title format */ 5 | "Let’s stay in touch!" = "Zostańmy w kontakcie!"; 6 | 7 | /* Email sharing dialog description format */ 8 | "%@ invites you to receive its newsletters and offers." = "%@ zaprasza do subskrybowania newsletterów i ofert."; 9 | 10 | /* Email sharing dialog additional info format */ 11 | "Setapp will share your %@ email with the developers of %@." = "Setapp podzieli się Twoim e-mailem %@ z deweloperami %@."; 12 | 13 | /* Email sharing dialog allow button title */ 14 | "Sure, I’m In" = "Tak, chcę"; 15 | 16 | /* Email sharing dialog forbid button title */ 17 | "No, Thanks" = "Nie, dziękuję"; 18 | 19 | /* Alert message text */ 20 | "This copy of %@ requires an active Setapp account installed on your Mac." = "Ta kopia %@ wymaga aktywnego konta Setapp na Twoim Mac."; 21 | 22 | /* Alert informative text */ 23 | "Download and install Setapp to use %@ and discover even more awesome applications." = "Pobierz i zainstaluj Setapp żeby korzystać z %@ i odkrywać więcej niesamowitych programów."; 24 | 25 | /* Button caption */ 26 | "Learn More…" = "Więcej…"; 27 | 28 | /* Button caption */ 29 | "Quit" = "Zakończ"; 30 | -------------------------------------------------------------------------------- /TaskPaper/libSetapp/Resources/ru.lproj/Setapp.strings: -------------------------------------------------------------------------------- 1 | /* Email sharing dialog description format */ 2 | "%@ invites you to receive its newsletters and offers." = "%@ приглашает вас подписаться на новости и предложения."; 3 | 4 | /* Alert informative text */ 5 | "Download and install Setapp to use %@ and discover even more awesome applications." = "Загрузите и установите Setapp чтобы пользоваться «%@» и открыть для себя еще больше программ."; 6 | 7 | /* Button caption */ 8 | "Learn More…" = "Подробнее…"; 9 | 10 | /* Email sharing dialog title format */ 11 | "Let’s stay in touch!" = "Давайте будем на связи!"; 12 | 13 | /* Email sharing dialog forbid button title */ 14 | "No, Thanks" = "Нет, спасибо"; 15 | 16 | /* Button caption */ 17 | "Quit" = "Завершить"; 18 | 19 | /* Email sharing dialog additional info format */ 20 | "Setapp will share your %@ email with the developers of %@." = "Setapp поделится вашим адресом email %@ с разработчиками %@."; 21 | 22 | /* Email sharing dialog allow button title */ 23 | "Sure, I’m In" = "Да, хочу!"; 24 | 25 | /* Alert message text */ 26 | "This copy of %@ requires an active Setapp account installed on your Mac." = "Этой копии «%@» для работы необходима активная учетная запись Setapp."; 27 | 28 | /* Release notes window title format */ 29 | "Welcome to %@ %@" = "Приветствуем в %@ %@"; 30 | 31 | -------------------------------------------------------------------------------- /TaskPaper/libSetapp/Resources/uk.lproj/Setapp.strings: -------------------------------------------------------------------------------- 1 | /* Release notes window title format */ 2 | "Welcome to %@ %@" = "Вітаємо у %@ %@"; 3 | 4 | /* Email sharing dialog title format */ 5 | "Let’s stay in touch!" = "Залишаймося на зв'язку!"; 6 | 7 | /* Email sharing dialog description format */ 8 | "%@ invites you to receive its newsletters and offers." = "%@ запрошує вас до своєї розсилки новин."; 9 | 10 | /* Email sharing dialog additional info format */ 11 | "Setapp will share your %@ email with the developers of %@." = "Setapp поділиться вашою електронною адресою %@ з розробниками %@."; 12 | 13 | /* Email sharing dialog allow button title */ 14 | "Sure, I’m In" = "Я з вами"; 15 | 16 | /* Email sharing dialog forbid button title */ 17 | "No, Thanks" = "Ні, дякую"; 18 | 19 | /* Alert message text */ 20 | "This copy of %@ requires an active Setapp account installed on your Mac." = "Ця копія %@ потребує активної підписки Setapp на вашому Mac."; 21 | 22 | /* Alert informative text */ 23 | "Download and install Setapp to use %@ and discover even more awesome applications." = "Завантажте та встановіть Setapp, щоб користуватись %@ та іншими чудовими програмами."; 24 | 25 | /* Button caption */ 26 | "Learn More…" = "Дізнатись більше…"; 27 | 28 | /* Button caption */ 29 | "Quit" = "Завершити"; 30 | -------------------------------------------------------------------------------- /TaskPaper/libSetapp/Resources/zh-Hans.lproj/Setapp.strings: -------------------------------------------------------------------------------- 1 | /* Release notes window title format */ 2 | "Welcome to %@ %@" = "欢迎使用 %@ %@"; 3 | 4 | /* Email sharing dialog title format */ 5 | "Let’s stay in touch!" = "保持联系!"; 6 | 7 | /* Email sharing dialog description format */ 8 | "%@ invites you to receive its newsletters and offers." = "%@ 邀请您接收时事通讯和最新优惠信息。"; 9 | 10 | /* Email sharing dialog additional info format */ 11 | "Setapp will share your %@ email with the developers of %@." = "Setapp 将您的 %@ 电子邮件与 %@ 的开发者共享。"; 12 | 13 | /* Email sharing dialog allow button title */ 14 | "Sure, I’m In" = "当然,我在"; 15 | 16 | /* Email sharing dialog forbid button title */ 17 | "No, Thanks" = "不,谢谢"; 18 | 19 | /* Alert message text */ 20 | "This copy of %@ requires an active Setapp account installed on your Mac." = "此 %@ 副本需要在您的 Mac 上安装有效的 Setapp 帐户。"; 21 | 22 | /* Alert informative text */ 23 | "Download and install Setapp to use %@ and discover even more awesome applications." = "下载并安装 Setapp 以使用 %@ 以及探索更多实用的应用程序。"; 24 | 25 | /* Button caption */ 26 | "Learn More…" = "了解更多…"; 27 | 28 | /* Button caption */ 29 | "Quit" = "关闭"; 30 | -------------------------------------------------------------------------------- /TaskPaper/searches.taskpaper: -------------------------------------------------------------------------------- 1 | This is a configuration outline. Use it to store searches that you want to show in the sidebar for all TaskPaper documents. 2 | 3 | Searches: 4 | Today @search(@today union @due <[d] tomorrow) 5 | Not Done @search(not @done except @done//*) 6 | -------------------------------------------------------------------------------- /TaskPaper/setappPublicKey.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1P1qh/wxMOiUrgd/p8uy 3 | I+RGMmDiDTVw3uF7xlQkcy+PxyZy1gxhzHtuLoQOrAxssE852iQHb8aKaAuTY0FA 4 | bUz/j/PvlSyO2IwukvMOvIRd1HHuHDhfcMfnNEQ+AzcJInXOB89qdllP+40Czu6r 5 | Sqo7lAMFe+vJJ8X8TQAO1w7B/f0PwtjzNYDInfQnVHnDfef5boQ8VfDzg9Ig0NLW 6 | Ogq/TO7UHGtyTTbCAm8cAZGCaVfMvBqzmavzpOVSabq2PLR508iMHg/r1zxqcSF0 7 | zxucbtkUZ3LpWWOdDz38Mc0jthISY5VQemRTCH7jq1UpkacF3TIgvpk8hKIZaCdv 8 | 4FeD0m7OgZBCwVrHYCGk7WNYknvYTOSEcIVFKUvzkjgfxQRmGOiLE7GxUjJ+jBHA 9 | gd/N0cR+EXMAbBNlJLJ0+bLsVf29Z3usCg2Smdfl0npoJq8B/0/Sn6p7qZ7/CPoX 10 | 31giRlJGfkCrjcvpXifkBdig/y8+ESjTt9BGYjeQ76mpfmQu5EtfspjcrfKzCU6x 11 | HdiD40khwOecbaoTdWlk0mGFhA1jmm35r5LWn9sKof5LUNggxO9cC3a2lDx9U0NR 12 | q4baAPpy6kQFfeZidylAYiZW5MYJ4F0xrEUt+AeCJeqO9wm0Hr3EXGeMekNc81pd 13 | yEdxcVJdADTaEuR5SSWaGO8CAwEAAQ== 14 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /TaskPaper/tags.taskpaper: -------------------------------------------------------------------------------- 1 | This is a configuration outline. Use it to store tags that you want to show (or always exclude) in the sidebar for all TaskPaper documents. 2 | 3 | Include Tags: @due @start @today @done 4 | Exclude Tags: @search 5 | -------------------------------------------------------------------------------- /TaskPaperTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /TaskPaperTests/TaskPaperTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TaskPaperTests.swift 3 | // TaskPaperTests 4 | // 5 | // Created by Jesse Grosjean on 8/21/16. 6 | // 7 | // 8 | 9 | @testable import TaskPaper 10 | import XCTest 11 | 12 | class TaskPaperTests: XCTestCase { 13 | override func setUp() { 14 | super.setUp() 15 | // Put setup code here. This method is called before the invocation of each test method in the class. 16 | } 17 | 18 | override func tearDown() { 19 | // Put teardown code here. This method is called after the invocation of each test method in the class. 20 | super.tearDown() 21 | } 22 | 23 | func testExample() { 24 | // This is an example of a functional test case. 25 | // Use XCTAssert and related functions to verify your tests produce the correct results. 26 | } 27 | 28 | func testPerformanceExample() { 29 | // This is an example of a performance test case. 30 | measure { 31 | // Put the code you want to measure the time of here. 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /javascript.sh: -------------------------------------------------------------------------------- 1 | CWD=`eval pwd` 2 | 3 | # Build BirchOutline if needed 4 | cd ./BirchOutline/birch-outline.js/ 5 | if [[ ! -e "./min/birchoutline.js" || `find src test -mnewer ./min/birchoutline.js` != "" ]]; then 6 | ./node_modules/gulp/bin/gulp.js prepublish 7 | cd "$CWD" 8 | cd ./BirchEditor/birch-editor.js/ 9 | ./node_modules/gulp/bin/gulp.js prepublish 10 | fi 11 | cd "$CWD" 12 | 13 | # Build BirchEditor if needed 14 | cd ./BirchEditor/birch-editor.js/ 15 | if [[ ! -e "./min/bircheditor.js" || `find src test -mnewer ./min/bircheditor.js` != "" ]]; then 16 | ./node_modules/gulp/bin/gulp.js prepublish 17 | fi 18 | cd "$CWD" 19 | --------------------------------------------------------------------------------