├── .autocorrectrc ├── .clang-format ├── .github ├── ISSUE_TEMPLATE │ ├── cn_bug_report_zh.yml │ ├── cn_feature_request.yml │ ├── config.yml │ ├── dev.md │ ├── en_bug_report.yml │ └── en_feature_request.yml └── workflows │ ├── codeql.yml │ ├── greetings.yml │ └── star_fork_notification.yml ├── .gitignore ├── .swift-version ├── .swiftformat ├── .swiftlint.yml ├── Easydict-debug.xcconfig ├── Easydict.xcconfig ├── Easydict.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ └── Easydict.xcscheme ├── Easydict.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ ├── IDEWorkspaceChecks.plist │ └── swiftpm │ └── Package.resolved ├── Easydict ├── App │ ├── AppDelegate+EZURLScheme.h │ ├── AppDelegate+EZURLScheme.m │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ ├── Colors │ │ │ ├── Contents.json │ │ │ ├── add_minus_bg_color.colorset │ │ │ │ └── Contents.json │ │ │ └── list_border_color.colorset │ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── arrow-down.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-down-slme@2x.png │ │ ├── arrow-left.imageset │ │ │ ├── Contents.json │ │ │ └── arrow-left.png │ │ ├── arrow_down_filling.imageset │ │ │ ├── Contents.json │ │ │ ├── arrow_down@2x.png │ │ │ ├── arrow_down@3x.png │ │ │ ├── 展开列表_暗黑@2x.png │ │ │ └── 展开列表_暗黑@3x.png │ │ ├── audio.imageset │ │ │ ├── Contents.json │ │ │ ├── audio@2x.png │ │ │ ├── audio@3x.png │ │ │ ├── 喇叭_暗黑@2x.png │ │ │ └── 喇叭_暗黑@3x.png │ │ ├── blue-white-icon.imageset │ │ │ ├── Contents.json │ │ │ ├── blue-white-plain@1x.png │ │ │ └── blue-white-plain@2x.png │ │ ├── blue-white-icon_old.imageset │ │ │ ├── Contents.json │ │ │ └── blue-white.png │ │ ├── clear_circle.imageset │ │ │ ├── AppIcon-40.0x40.0@2x.png │ │ │ ├── AppIcon-40.0x40.0@3x.png │ │ │ └── Contents.json │ │ ├── copy.imageset │ │ │ ├── Contents.json │ │ │ ├── copy_Normal.png │ │ │ ├── copy_Normal@2x.png │ │ │ ├── copy_dark.png │ │ │ └── copy_dark@2x.png │ │ ├── copy_0.imageset │ │ │ ├── Contents.json │ │ │ ├── copy@2x.png │ │ │ ├── copy@3x.png │ │ │ ├── 复制_暗黑@2x.png │ │ │ └── 复制_暗黑@3x.png │ │ ├── copy_1.imageset │ │ │ ├── Contents.json │ │ │ ├── noun-copy-5118522.png │ │ │ └── noun-duplicate-5406073.png │ │ ├── disabled.imageset │ │ │ ├── Contents.json │ │ │ └── disabled@2x.png │ │ ├── error.imageset │ │ │ ├── Contents.json │ │ │ └── error_outline (2).png │ │ ├── fold_down.imageset │ │ │ ├── Contents.json │ │ │ ├── fold_down@2x.png │ │ │ └── fold_down@3x.png │ │ ├── fold_up.imageset │ │ │ ├── Contents.json │ │ │ ├── fold_up@2x.png │ │ │ └── fold_up@3x.png │ │ ├── logo.imageset │ │ │ ├── Contents.json │ │ │ ├── icon_ns_512x512@2x.png │ │ │ └── icon_ns_512x512@3x.png │ │ ├── logo_old.imageset │ │ │ ├── Contents.json │ │ │ ├── Icon_512x512@2x.png │ │ │ └── Icon_512x512@3x.png │ │ ├── magnifier.imageset │ │ │ ├── Contents.json │ │ │ └── magnifier.png │ │ ├── magnifier3.imageset │ │ │ ├── Contents.json │ │ │ └── magnifier3.png │ │ ├── menu-icon │ │ │ ├── Contents.json │ │ │ ├── rounded_menu_bar_icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── rounded.png │ │ │ └── square_menu_bar_icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── square.png │ │ ├── result_view │ │ │ ├── Contents.json │ │ │ └── link.imageset │ │ │ │ ├── AppIcon-40.0x40.0@2x.png │ │ │ │ ├── AppIcon-40.0x40.0@3x.png │ │ │ │ └── Contents.json │ │ ├── service-icon │ │ │ ├── Alibaba.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── ali translate.png │ │ │ ├── Apple.imageset │ │ │ │ ├── Apple Translate.png │ │ │ │ └── Contents.json │ │ │ ├── AppleDictionary.imageset │ │ │ │ ├── 510a9fda2f51de7416af54a20772b6cd_MzvUX28YSg.png │ │ │ │ └── Contents.json │ │ │ ├── Baidu.imageset │ │ │ │ ├── Baidu_Translate.png │ │ │ │ └── Contents.json │ │ │ ├── Bing.imageset │ │ │ │ ├── Bing Translate.png │ │ │ │ └── Contents.json │ │ │ ├── BuiltInAI.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── OpenAI Translator.png │ │ │ ├── Caiyun.imageset │ │ │ │ ├── Caiyun Translate.png │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── CustomOpenAI.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── customOpenAI.png │ │ │ │ └── customOpenAI@2x.png │ │ │ ├── DeepL.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── DeepL Translate.png │ │ │ ├── DeepSeek.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── deepseek-logo-icon.png │ │ │ ├── Gemini.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Gemini.png │ │ │ ├── GitHub.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── github-mark-white.png │ │ │ │ └── github-mark.png │ │ │ ├── Google.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── service_google_translate_Normal@2x.png │ │ │ ├── Groq.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Groq.png │ │ │ │ └── Groq@2x.png │ │ │ ├── Iciba.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Iciba Dictionary.png │ │ │ ├── Linguee.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Linguee Dictionary.png │ │ │ ├── Microsoft.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Microsoft Translate.png │ │ │ ├── NiuTrans.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── 小牛翻译.png │ │ │ ├── Ollama.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Ollama.png │ │ │ │ └── Ollama@x2.png │ │ │ ├── OpenAI.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── OpenAI.png │ │ │ ├── Polishing.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Polishing.png │ │ │ │ └── Polishing@2x.png │ │ │ ├── Summary.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Summary.png │ │ │ │ └── Summary@2x.png │ │ │ ├── Tencent.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Tencent Translate.png │ │ │ ├── Volcano.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Volcano Translate.png │ │ │ ├── Youdao.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Youdao Translate.png │ │ │ └── play.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── play.png │ │ ├── setting │ │ │ ├── Contents.json │ │ │ ├── Toggle_Off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Toggle_Off.png │ │ │ ├── Toggle_On.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Toggle_On.png │ │ │ ├── add.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── add.png │ │ │ ├── disable_blue.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── disable_blue.png │ │ │ ├── minus.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── minus.png │ │ │ ├── switch_off.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── switch_off.png │ │ │ ├── switch_on.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── switch_on.png │ │ │ ├── toggle_off_blue.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Toggle_Off (1).png │ │ │ │ └── toggle_off_blue.png │ │ │ ├── toggle_off_blue_dark.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── toggle_off_blue.png │ │ │ ├── toggle_off_blue_light.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Toggle_Off (1).png │ │ │ ├── toggle_on_blue.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── toggle_on_blue.png │ │ │ ├── toolbar_about.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── about.png │ │ │ ├── toolbar_general.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── toolbar_general.png │ │ │ │ ├── toolbar_general@2x.png │ │ │ │ └── toolbar_general@3x.png │ │ │ ├── toolbar_privacy.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── Privacy 1.png │ │ │ ├── toolbar_service.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── toolbar_service.png │ │ │ ├── toolbar_setting_general.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── toolbar_setting.png │ │ │ └── toolbar_shortcut.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── shortcut.png │ │ ├── tip_Normal.imageset │ │ │ ├── Contents.json │ │ │ ├── tip_Normal.png │ │ │ └── tip_Normal@2x.png │ │ ├── titlebar │ │ │ ├── Browser.imageset │ │ │ │ ├── Browser@2x.png │ │ │ │ ├── Browser@3x.png │ │ │ │ └── Contents.json │ │ │ ├── Chrome.imageset │ │ │ │ ├── Chrome_64@2x.png │ │ │ │ ├── Chrome_64@3x.png │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Eudic.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── Eudic_64@2x.png │ │ │ │ └── Eudic_64@3x.png │ │ │ ├── Safari.imageset │ │ │ │ ├── AppIcon-40.0x40.0@2x.png │ │ │ │ ├── AppIcon-40.0x40.0@3x.png │ │ │ │ └── Contents.json │ │ │ ├── google_icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── google_icon.png │ │ │ ├── new_pin_normal.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tw_navigation_pin_normal_Normal.png │ │ │ │ └── tw_navigation_pin_normal_Normal@2x.png │ │ │ └── new_pin_selected.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── tw_navigation_pin_selected_Normal.png │ │ │ │ └── tw_navigation_pin_selected_Normal@2x.png │ │ ├── transform.imageset │ │ │ ├── Contents.json │ │ │ ├── transform@2x.png │ │ │ ├── transform@3x.png │ │ │ ├── 交换_暗黑@2x.png │ │ │ └── 交换_暗黑@3x.png │ │ ├── white-black-icon.appiconset │ │ │ ├── Contents.json │ │ │ ├── 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 │ │ └── white-black-icon_old.appiconset │ │ │ ├── Contents.json │ │ │ ├── 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 │ ├── EZConst.h │ ├── Easydict-Bridging-Header.h │ ├── Easydict-debug.entitlements │ ├── Easydict.entitlements │ ├── EasydictApp.swift │ ├── GoogleService-Info.plist │ ├── Icons │ │ ├── black-white-icon │ │ │ ├── black-white-icon@2x.png │ │ │ └── black-white-icon@3x.png │ │ ├── blue-white-icon │ │ │ ├── blue-white-icon@2x.png │ │ │ └── blue-white-icon@3x.png │ │ ├── cyan-white-icon │ │ │ ├── cyan-white-icon@2x.png │ │ │ └── cyan-white-icon@3x.png │ │ ├── white-black-icon │ │ │ ├── white-black-icon@2x.png │ │ │ └── white-black-icon@3x.png │ │ └── white-blue-icon │ │ │ ├── white-blue-icon@2x.png │ │ │ └── white-blue-icon@3x.png │ ├── Info-debug.plist │ ├── Info.plist │ ├── InfoPlist.xcstrings │ ├── Localizable.xcstrings │ ├── PrefixHeader.pch │ ├── easydict │ ├── entry.h │ └── entry.m ├── Swift │ ├── Feature │ │ ├── Appearance │ │ │ └── Appearance.swift │ │ ├── Configuration │ │ │ ├── Configuration+Extension.swift │ │ │ ├── Configuration+UserData.swift │ │ │ ├── Configuration.swift │ │ │ ├── Defaults.Keys+Extension.swift │ │ │ ├── ServiceConfigurationKey.swift │ │ │ └── WindowConfigurationKey.swift │ │ ├── DefaultAPIKeys │ │ │ ├── APIKey.swift │ │ │ └── EncryptedSecretKeys.plist │ │ ├── HTTPServer │ │ │ ├── QueryService+Extension │ │ │ │ ├── AppleDictionary+Translate.swift │ │ │ │ ├── QueryService+Request.swift │ │ │ │ └── StreamService+Request.swift │ │ │ └── Vapor │ │ │ │ ├── DictionaryEntry.swift │ │ │ │ ├── TranslationRequest.swift │ │ │ │ ├── VaporServer.swift │ │ │ │ ├── configure.swift │ │ │ │ └── routes.swift │ │ ├── Localization │ │ │ ├── I18nHelper.swift │ │ │ ├── LanguageState.swift │ │ │ ├── LocalizedBundle.swift │ │ │ └── NSBundle+Localization.m │ │ └── Shortcut │ │ │ ├── Shortcut+Bind.swift │ │ │ ├── Shortcut+Default.swift │ │ │ ├── Shortcut+Menu.swift │ │ │ ├── Shortcut+Validator.swift │ │ │ └── Shortcut.swift │ ├── Model │ │ ├── Error │ │ │ └── QueryError.swift │ │ ├── ForceGetSelectedTextType.swift │ │ ├── ServiceUsageStatus.swift │ │ ├── TTSServiceType.swift │ │ └── UpdateNotificationInfo.swift │ ├── Service │ │ ├── AITool │ │ │ ├── AIToolService.swift │ │ │ ├── PolishingService.swift │ │ │ └── SummaryService.swift │ │ ├── Ali │ │ │ ├── AliResponse.swift │ │ │ ├── AliService.swift │ │ │ └── AliTranslateType.swift │ │ ├── Apple │ │ │ ├── AppleService.swift │ │ │ └── TranslationService │ │ │ │ ├── TranslationManager.swift │ │ │ │ ├── TranslationService.swift │ │ │ │ └── TranslationView.swift │ │ ├── BuiltInAI │ │ │ └── BuiltInAIService.swift │ │ ├── Caiyun │ │ │ ├── CaiyunResponse.swift │ │ │ ├── CaiyunService.swift │ │ │ └── CaiyunTranslateType.swift │ │ ├── CustomOpenAI │ │ │ └── CustomOpenAIService.swift │ │ ├── DeepSeek │ │ │ └── DeepSeekService.swift │ │ ├── Gemini │ │ │ └── GeminiService.swift │ │ ├── GitHub Models │ │ │ └── GitHubService.swift │ │ ├── Groq │ │ │ └── GroqService.swift │ │ ├── Ollama │ │ │ ├── OllamaModel.swift │ │ │ └── OllamaService.swift │ │ ├── OpenAI │ │ │ ├── BaseOpenAIService.swift │ │ │ ├── ChatMessage.swift │ │ │ ├── OpenAIService.swift │ │ │ ├── StreamService+AsyncStream.swift │ │ │ ├── StreamService+Configuration.swift │ │ │ ├── StreamService+Prompt.swift │ │ │ ├── StreamService+UpdateResult.swift │ │ │ └── StreamService.swift │ │ ├── Tencent │ │ │ ├── TencentResponse.swift │ │ │ ├── TencentService.swift │ │ │ ├── TencentSigning.swift │ │ │ └── TencentTranslateType.swift │ │ ├── Volcano │ │ │ ├── VolcanoResponse.swift │ │ │ ├── VolcanoService.swift │ │ │ ├── VolcanoSigning.swift │ │ │ └── VolcanoTranslateType.swift │ │ └── Youdao │ │ │ ├── EZQueryResult+Dict.swift │ │ │ ├── EZQueryResult+DictV4.swift │ │ │ ├── Model │ │ │ ├── DictJSONExample │ │ │ │ ├── v2 │ │ │ │ │ ├── good.json │ │ │ │ │ ├── look up.json │ │ │ │ │ ├── 人的一生.json │ │ │ │ │ └── 美.json │ │ │ │ └── v4 │ │ │ │ │ ├── good_v4.json │ │ │ │ │ ├── look up_v4.json │ │ │ │ │ ├── 人的一生_v4.json │ │ │ │ │ └── 美_v4.json │ │ │ ├── YoudaoDictResponse.swift │ │ │ ├── YoudaoDictResponseV4.swift │ │ │ ├── YoudaoKey.swift │ │ │ ├── YoudaoOCRResponse.swift │ │ │ └── YoudaoTranslateResponese.swift │ │ │ ├── YoudaoService+Dict.swift │ │ │ ├── YoudaoService+OCR.swift │ │ │ ├── YoudaoService+Translate.swift │ │ │ └── YoudaoService.swift │ ├── Utility │ │ ├── AppleScript │ │ │ ├── AppleScriptTask+Browser.swift │ │ │ ├── AppleScriptTask+System.swift │ │ │ └── AppleScriptTask.swift │ │ ├── Constants │ │ │ └── Constants.swift │ │ ├── CookieManager.swift │ │ ├── Detection │ │ │ └── ChineseDetection │ │ │ │ ├── ChineseDetection+Lyrics.swift │ │ │ │ ├── ChineseDetection+Poetry.swift │ │ │ │ ├── ChineseDetection+Prose.swift │ │ │ │ ├── ChineseDetection.swift │ │ │ │ ├── MetadataExtractor.swift │ │ │ │ ├── Models │ │ │ │ ├── ChineseAnalysis.swift │ │ │ │ └── ChinseseMarker.swift │ │ │ │ ├── String+ClassicalChinese.swift │ │ │ │ └── String+Utils.swift │ │ ├── Extensions │ │ │ ├── AppKit │ │ │ │ └── NSMenu+PopUpBelowView.swift │ │ │ ├── Array │ │ │ │ └── Array+Convenience.swift │ │ │ ├── Binding │ │ │ │ └── Binding+DidSet.swift │ │ │ ├── Bundle │ │ │ │ └── Bundle+AppInfo.swift │ │ │ ├── Data │ │ │ │ └── Data+Extension.swift │ │ │ ├── Defaults │ │ │ │ └── KeyCombo+Defaults.Serializable.swift │ │ │ ├── Dictionary │ │ │ │ └── Dictionary+Extension.swift │ │ │ ├── Double │ │ │ │ └── Double+String.swift │ │ │ ├── Encodable │ │ │ │ └── Encodable+JSON.swift │ │ │ ├── Notification │ │ │ │ └── Notification+Name.swift │ │ │ ├── Others │ │ │ │ ├── Language+Extension.swift │ │ │ │ ├── LanguageDetectOptimizeExtensions.swift │ │ │ │ ├── PronunciationExtensions.swift │ │ │ │ ├── ShowWindowPositionExtensions.swift │ │ │ │ └── WindowTypeExtensions.swift │ │ │ ├── String │ │ │ │ ├── String+EncryptAES.swift │ │ │ │ ├── String+Extension.swift │ │ │ │ └── String+Regex.swift │ │ │ ├── URL │ │ │ │ └── URL+Extension.swift │ │ │ └── View │ │ │ │ └── View+Builder.swift │ │ ├── GetSelectedText │ │ │ └── SharedUtilities.swift │ │ ├── GlobalContext.swift │ │ ├── RepoInfoHelper.swift │ │ ├── Screenshot │ │ │ ├── Screencapture │ │ │ │ └── Screencapture.swift │ │ │ └── Screenshot │ │ │ │ ├── NSScreen+Extention.swift │ │ │ │ ├── Screenshot+EventMonitor.swift │ │ │ │ ├── Screenshot+UserDefaults.swift │ │ │ │ ├── Screenshot.swift │ │ │ │ ├── ScreenshotOverlayView.swift │ │ │ │ └── ScreenshotState.swift │ │ └── Throttler.swift │ └── View │ │ ├── AcknowListView │ │ └── AcknowListView.swift │ │ ├── AdvancedTabItemView.swift │ │ ├── MenuItemView.swift │ │ ├── MenuView │ │ ├── MainMenuCommand.swift │ │ ├── MainMenuShortcutCommand.swift │ │ └── MainMenuShortcutCommandItem.swift │ │ ├── SettingView │ │ ├── SettingView.swift │ │ └── Tabs │ │ │ ├── ServiceConfigurationView │ │ │ ├── ConfigurationView │ │ │ │ ├── AliService+ConfigurableService.swift │ │ │ │ ├── BaiduTranslate+ConfigurableService.swift │ │ │ │ ├── BingService+ConfigurableService.swift │ │ │ │ ├── CaiyunService+ConfigurableService.swift │ │ │ │ ├── DeepLTranslate+ConfigurableService.swift │ │ │ │ ├── NiuTransTranslate+ConfigurableService.swift │ │ │ │ ├── StreamConfigurationView.swift │ │ │ │ ├── TencentService+ConfigurableService.swift │ │ │ │ └── VolcanoService+ConfigurableService.swift │ │ │ ├── SecureTextField.swift │ │ │ ├── ServiceAPIType.swift │ │ │ ├── ServiceCells.swift │ │ │ ├── ServiceConfigurationSecretSectionView.swift │ │ │ ├── ServiceSecretConfigreValidatable.swift │ │ │ ├── SliderCell.swift │ │ │ └── TextEditorCell.swift │ │ │ ├── TabView │ │ │ ├── AboutTab.swift │ │ │ ├── AdvancedTab.swift │ │ │ ├── DisabledAppTab.swift │ │ │ ├── GeneralTab.swift │ │ │ ├── PrivacyTab.swift │ │ │ ├── ServiceTab.swift │ │ │ └── ShortcutTab.swift │ │ │ └── View │ │ │ ├── Shortcut │ │ │ ├── AppShortcutSetting.swift │ │ │ ├── GlobalShortcutSetting.swift │ │ │ ├── KeyHolderAlterView.swift │ │ │ ├── KeyHolderRowView.swift │ │ │ └── KeyHolderWrapper.swift │ │ │ └── WindowConfigurationView.swift │ │ ├── TapHandlerView.swift │ │ ├── Window │ │ └── HostWindowManager.swift │ │ └── WindowAccessor.swift └── objc │ ├── DarkMode │ ├── DarkModeManager.h │ ├── DarkModeManager.m │ ├── NSObject+DarkMode.h │ ├── NSObject+DarkMode.m │ ├── NSView+HiddenDebug.h │ ├── NSView+HiddenDebug.m │ └── Singleton.h │ ├── EventMonitor │ ├── EZEventMonitor.h │ └── EZEventMonitor.m │ ├── Legacy │ ├── EZAppModel.h │ └── EZAppModel.m │ ├── Libraries │ ├── ArgumentParser │ │ ├── ArgumentParser-Prefix.pch │ │ ├── NSArray+XPMArgumentsNormalizer.h │ │ ├── NSArray+XPMArgumentsNormalizer.m │ │ ├── NSDictionary+RubyDescription.h │ │ ├── NSDictionary+RubyDescription.m │ │ ├── NSProcessInfo+XPMArgumentParser.h │ │ ├── NSProcessInfo+XPMArgumentParser.m │ │ ├── NSScanner+EscapedScanning.h │ │ ├── NSScanner+EscapedScanning.m │ │ ├── NSString+Indenter.h │ │ ├── NSString+Indenter.m │ │ ├── XPMArgsKonstants.h │ │ ├── XPMArgsKonstants.m │ │ ├── XPMArgumentPackage.h │ │ ├── XPMArgumentPackage.m │ │ ├── XPMArgumentPackage_Private.h │ │ ├── XPMArgumentParser.h │ │ ├── XPMArgumentParser.m │ │ ├── XPMArgumentSignature.h │ │ ├── XPMArgumentSignature.m │ │ ├── XPMArgumentSignature_Private.h │ │ ├── XPMArguments.h │ │ ├── XPMArguments_Coalescer_Internal.h │ │ ├── XPMArguments_Coalescer_Internal.m │ │ ├── XPMCountedArgument.h │ │ ├── XPMCountedArgument.m │ │ ├── XPMMutableAttributedArray.h │ │ ├── XPMMutableAttributedArray.m │ │ ├── XPMValuedArgument.h │ │ └── XPMValuedArgument.m │ ├── CoolToast │ │ ├── CTCommon.h │ │ ├── CTCommon.m │ │ ├── CTScreen.h │ │ ├── CTScreen.m │ │ ├── CTView.h │ │ ├── CTView.m │ │ ├── CoolToast.h │ │ ├── EZToast.h │ │ ├── EZToast.m │ │ ├── Info.plist │ │ ├── ToastWindowController.h │ │ ├── ToastWindowController.m │ │ └── ToastWindowController.xib │ ├── DictionaryKit │ │ ├── DictionaryKit.h │ │ ├── TTTDictionary.h │ │ └── TTTDictionary.m │ ├── FWEncryptorAES │ │ ├── FWEncryptorAES.h │ │ ├── FWEncryptorAES.m │ │ ├── NSData+Base64.h │ │ ├── NSData+Base64.m │ │ ├── NSData+CommonCrypto.h │ │ └── NSData+CommonCrypto.m │ └── Snip │ │ ├── Snip.h │ │ ├── Snip.m │ │ ├── SnipFocusView.h │ │ ├── SnipFocusView.m │ │ ├── SnipViewController.h │ │ ├── SnipViewController.m │ │ ├── SnipWindow.h │ │ ├── SnipWindow.m │ │ ├── SnipWindowController.h │ │ └── SnipWindowController.m │ ├── MMKit │ ├── Category │ │ ├── NSArray+MM.h │ │ ├── NSArray+MM.m │ │ ├── NSAttributedString+MM.h │ │ ├── NSAttributedString+MM.m │ │ ├── NSButton+MM.h │ │ ├── NSButton+MM.m │ │ ├── NSColor+MM.h │ │ ├── NSColor+MM.m │ │ ├── NSDictionary+MM.h │ │ ├── NSDictionary+MM.m │ │ ├── NSImage+MM.h │ │ ├── NSImage+MM.m │ │ ├── NSMutableAttributedString+MM.h │ │ ├── NSMutableAttributedString+MM.m │ │ ├── NSPasteboard+MM.h │ │ ├── NSPasteboard+MM.m │ │ ├── NSString+MM.h │ │ ├── NSString+MM.m │ │ ├── NSUserDefaults+MM.h │ │ ├── NSUserDefaults+MM.m │ │ ├── NSView+MM.h │ │ ├── NSView+MM.m │ │ ├── NSWindow+MM.h │ │ └── NSWindow+MM.m │ ├── Crash │ │ ├── MMCrash.h │ │ ├── MMCrash.m │ │ ├── MMCrashFileTool.h │ │ ├── MMCrashFileTool.m │ │ ├── MMCrashSignalExceptionHandler.h │ │ ├── MMCrashSignalExceptionHandler.m │ │ ├── MMCrashUncaughtExceptionHandler.h │ │ └── MMCrashUncaughtExceptionHandler.m │ ├── Kit │ │ ├── MMEventMonitor.h │ │ ├── MMEventMonitor.m │ │ ├── MMMacro.h │ │ ├── MMMake.h │ │ ├── MMMake.m │ │ ├── MMOrderedDictionary.h │ │ ├── MMOrderedDictionary.m │ │ ├── MMTool.h │ │ └── MMTool.m │ └── Log │ │ ├── MMConsoleLogFormatter.h │ │ ├── MMConsoleLogFormatter.m │ │ ├── MMFileLogFormatter.h │ │ ├── MMFileLogFormatter.m │ │ ├── MMLog.h │ │ ├── MMLog.m │ │ └── MMLog.swift │ ├── Service │ ├── Apple │ │ ├── AppleDictionary │ │ │ ├── EZAppleDictionary.h │ │ │ ├── EZAppleDictionary.m │ │ │ └── apple-dictionary.html │ │ ├── EZAppleService.h │ │ └── EZAppleService.m │ ├── AudioPlayer │ │ ├── EZAudioPlayer.h │ │ └── EZAudioPlayer.m │ ├── Baidu │ │ ├── BaiduApiResponse.swift │ │ ├── BaiduApiTranslate.swift │ │ ├── EZBaiduTranslate.h │ │ ├── EZBaiduTranslate.m │ │ ├── EZBaiduTranslateResponse.h │ │ ├── EZBaiduTranslateResponse.m │ │ ├── baidu-translate-sign.js │ │ └── bd.js │ ├── Bing │ │ ├── BingLanguageVoice.swift │ │ ├── EZBingConfig.h │ │ ├── EZBingConfig.m │ │ ├── EZBingLookupModel.h │ │ ├── EZBingLookupModel.m │ │ ├── EZBingRequest.h │ │ ├── EZBingRequest.m │ │ ├── EZBingService.h │ │ ├── EZBingService.m │ │ ├── EZBingTranslateModel.h │ │ └── EZBingTranslateModel.m │ ├── DeepL │ │ ├── EZDeepLTranslate.h │ │ ├── EZDeepLTranslate.m │ │ ├── EZDeepLTranslateResponse.h │ │ ├── EZDeepLTranslateResponse.m │ │ ├── EZQueryResult+EZDeepLTranslateResponse.h │ │ └── EZQueryResult+EZDeepLTranslateResponse.m │ ├── Google │ │ ├── EZGoogleTranslate.h │ │ ├── EZGoogleTranslate.m │ │ └── google-translate-sign.js │ ├── Language │ │ ├── EZLanguageManager.h │ │ ├── EZLanguageManager.m │ │ ├── EZLanguageModel.h │ │ └── EZLanguageModel.m │ ├── Model │ │ ├── EZConstKey.h │ │ ├── EZConstKey.m │ │ ├── EZDetectManager.h │ │ ├── EZDetectManager.m │ │ ├── EZEnumTypes.h │ │ ├── EZEnumTypes.m │ │ ├── EZOCRResult.h │ │ ├── EZOCRResult.m │ │ ├── EZQueryResult.h │ │ ├── EZQueryResult.m │ │ ├── EZQueryService.h │ │ ├── EZQueryService.m │ │ ├── EZServiceTypes.h │ │ └── EZServiceTypes.m │ ├── Niutrans │ │ ├── EZNiuTransTranslate.h │ │ ├── EZNiuTransTranslate.m │ │ ├── EZNiuTransTranslateResponse.h │ │ └── EZNiuTransTranslateResponse.m │ └── WebViewTranslator │ │ ├── EZURLSchemeHandler.h │ │ ├── EZURLSchemeHandler.m │ │ ├── EZWebViewTranslator.h │ │ └── EZWebViewTranslator.m │ ├── StatusItem │ ├── EZRightClickDetector.h │ └── EZRightClickDetector.m │ ├── Utility │ ├── EZAudioUtils │ │ ├── EZAudioUtils.h │ │ └── EZAudioUtils.m │ ├── EZCategory │ │ ├── NSArray+EZChineseText.h │ │ ├── NSArray+EZChineseText.m │ │ ├── NSColor+MyColors │ │ │ ├── NSColor+MyColors.h │ │ │ └── NSColor+MyColors.m │ │ ├── NSData+MD5 │ │ │ ├── NSData+EZMD5.h │ │ │ └── NSData+EZMD5.m │ │ ├── NSImage │ │ │ ├── NSImage+EZResize.h │ │ │ ├── NSImage+EZResize.m │ │ │ ├── NSImage+EZSymbolmage.h │ │ │ └── NSImage+EZSymbolmage.m │ │ ├── NSObject+DarkMode │ │ │ ├── NSObject+EZDarkMode.h │ │ │ └── NSObject+EZDarkMode.m │ │ ├── NSObject+EZWindowType.h │ │ ├── NSObject+EZWindowType.m │ │ ├── NSString │ │ │ ├── NSString+EZChineseText.h │ │ │ ├── NSString+EZChineseText.m │ │ │ ├── NSString+EZConvenience.h │ │ │ ├── NSString+EZConvenience.m │ │ │ ├── NSString+EZHandleInputText.h │ │ │ ├── NSString+EZHandleInputText.m │ │ │ ├── NSString+EZRegex.h │ │ │ ├── NSString+EZRegex.m │ │ │ ├── NSString+EZSplit.h │ │ │ ├── NSString+EZSplit.m │ │ │ ├── NSString+EZUtils.h │ │ │ └── NSString+EZUtils.m │ │ ├── NSTextView+Height │ │ │ ├── NSTextView+Height.h │ │ │ └── NSTextView+Height.m │ │ ├── NSView+AnimatedHidden │ │ │ ├── NSView+EZAnimatedHidden.h │ │ │ └── NSView+EZAnimatedHidden.m │ │ ├── NSView+EZGetViewController.h │ │ ├── NSView+EZGetViewController.m │ │ ├── NSViewController+EZWindow.h │ │ └── NSViewController+EZWindow.m │ ├── EZCoordinateUtils │ │ ├── EZCoordinateUtils.h │ │ └── EZCoordinateUtils.m │ ├── EZDeviceSystemInfo │ │ ├── EZDeviceSystemInfo.h │ │ └── EZDeviceSystemInfo.m │ ├── EZLinkParser │ │ ├── EZSchemeParser.h │ │ └── EZSchemeParser.m │ ├── EZLog │ │ ├── EZLog.h │ │ └── EZLog.m │ ├── PrintBeautifulLog │ │ ├── PrintBeautifulLog.h │ │ └── PrintBeautifulLog.m │ └── SystemUtility │ │ ├── EZSystemUtility.h │ │ └── EZSystemUtility.m │ └── ViewController │ ├── Cell │ ├── EZSelectLanguageCell.h │ ├── EZSelectLanguageCell.m │ ├── EZTableRowView.h │ ├── EZTableRowView.m │ ├── EZTableTipsCell.h │ └── EZTableTipsCell.m │ ├── Model │ ├── EZQueryModel.h │ ├── EZQueryModel.m │ ├── EZServiceInfo.h │ └── EZServiceInfo.m │ ├── Storage │ ├── EZLocalStorage.h │ ├── EZLocalStorage.m │ └── QueryServiceRecord.swift │ ├── View │ ├── CommonView │ │ ├── EZCommonView.h │ │ └── EZCommonView.m │ ├── CustomButton │ │ ├── BlueTextButton │ │ │ ├── EZBlueTextButton.h │ │ │ └── EZBlueTextButton.m │ │ ├── EZAudioButton │ │ │ ├── EZAudioButton.h │ │ │ └── EZAudioButton.m │ │ ├── EZButton │ │ │ ├── EZButton.h │ │ │ └── EZButton.m │ │ ├── EZCopyButton │ │ │ ├── EZCopyButton.h │ │ │ └── EZCopyButton.m │ │ ├── EZHoverButton │ │ │ ├── EZHoverButton.h │ │ │ └── EZHoverButton.m │ │ ├── EZLinkButton │ │ │ ├── EZOpenLinkButton.h │ │ │ └── EZOpenLinkButton.m │ │ ├── EZReplaceTextButton │ │ │ ├── EZReplaceTextButton.h │ │ │ └── EZReplaceTextButton.m │ │ ├── EZSymbolImageButton │ │ │ ├── EZSymbolImageButton.h │ │ │ └── EZSymbolImageButton.m │ │ └── LanguageButton │ │ │ ├── EZDetectLanguageButton.h │ │ │ ├── EZDetectLanguageButton.m │ │ │ ├── EZSelectLanguageButton.h │ │ │ └── EZSelectLanguageButton.m │ ├── EZLabel │ │ ├── EZLabel.h │ │ ├── EZLabel.m │ │ ├── EZMyLabel.h │ │ └── EZMyLabel.m │ ├── EZQueryMenuTextView │ │ ├── EZQueryMenuTextView.h │ │ └── EZQueryMenuTextView.m │ ├── EZSegmentedControl │ │ ├── HWSegmentedControl.h │ │ └── HWSegmentedControl.m │ ├── EZWrapView │ │ ├── EZWrapView.h │ │ └── EZWrapView.m │ ├── LoadingAnimationView │ │ ├── EZLoadingAnimationView.h │ │ └── EZLoadingAnimationView.m │ ├── PopUpButton │ │ ├── EZPopUpButton.h │ │ └── EZPopUpButton.m │ ├── QueryView │ │ ├── EZQueryView.h │ │ └── EZQueryView.m │ ├── ResultView │ │ ├── EZResultView.h │ │ └── EZResultView.m │ ├── TextView │ │ ├── EZTextView.h │ │ └── EZTextView.m │ ├── Titlebar │ │ ├── EZTitleBarMoveView.h │ │ ├── EZTitleBarMoveView.m │ │ ├── EZTitlebar.h │ │ └── EZTitlebar.m │ └── WordResultView │ │ ├── EZWebViewManager.h │ │ ├── EZWebViewManager.m │ │ ├── EZWordResultView.h │ │ └── EZWordResultView.m │ └── Window │ ├── BaseQueryWindow │ ├── EZBaseQueryViewController.h │ ├── EZBaseQueryViewController.m │ ├── EZBaseQueryWindow.h │ └── EZBaseQueryWindow.m │ ├── FixedQueryWindow │ ├── EZFixedQueryWindow.h │ └── EZFixedQueryWindow.m │ ├── MainQueryWindow │ ├── EZMainQueryWindow.h │ └── EZMainQueryWindow.m │ ├── MiniQueryWindow │ ├── EZMiniQueryWindow.h │ └── EZMiniQueryWindow.m │ ├── PopButtonWindow │ ├── EZPopButtonViewController.h │ ├── EZPopButtonViewController.m │ ├── EZPopButtonWindow.h │ └── EZPopButtonWindow.m │ └── WindowManager │ ├── EZLayoutManager.h │ ├── EZLayoutManager.m │ ├── EZWindowManager.h │ └── EZWindowManager.m ├── EasydictSwiftTests └── Test.swift ├── EasydictTests └── EasydictTests.m ├── Gemfile ├── Gemfile.lock ├── Icon ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── AFNetworking │ ├── AFNetworking │ │ ├── AFCompatibilityMacros.h │ │ ├── AFHTTPSessionManager.h │ │ ├── AFHTTPSessionManager.m │ │ ├── AFNetworkReachabilityManager.h │ │ ├── AFNetworkReachabilityManager.m │ │ ├── AFNetworking.h │ │ ├── AFSecurityPolicy.h │ │ ├── AFSecurityPolicy.m │ │ ├── AFURLRequestSerialization.h │ │ ├── AFURLRequestSerialization.m │ │ ├── AFURLResponseSerialization.h │ │ ├── AFURLResponseSerialization.m │ │ ├── AFURLSessionManager.h │ │ └── AFURLSessionManager.m │ ├── LICENSE │ └── README.md ├── JLRoutes │ ├── JLRoutes │ │ ├── Classes │ │ │ ├── JLRParsingUtilities.h │ │ │ ├── JLRParsingUtilities.m │ │ │ ├── JLRRouteDefinition.h │ │ │ ├── JLRRouteDefinition.m │ │ │ ├── JLRRouteHandler.h │ │ │ ├── JLRRouteHandler.m │ │ │ ├── JLRRouteRequest.h │ │ │ ├── JLRRouteRequest.m │ │ │ ├── JLRRouteResponse.h │ │ │ └── JLRRouteResponse.m │ │ ├── JLRoutes.h │ │ └── JLRoutes.m │ ├── LICENSE │ └── README.md ├── KVOController │ ├── FBKVOController │ │ ├── FBKVOController.h │ │ ├── FBKVOController.m │ │ ├── KVOController.h │ │ ├── NSObject+FBKVOController.h │ │ └── NSObject+FBKVOController.m │ ├── LICENSE │ └── README.md ├── Manifest.lock ├── Masonry │ ├── LICENSE │ ├── Masonry │ │ ├── MASCompositeConstraint.h │ │ ├── MASCompositeConstraint.m │ │ ├── MASConstraint+Private.h │ │ ├── MASConstraint.h │ │ ├── MASConstraint.m │ │ ├── MASConstraintMaker.h │ │ ├── MASConstraintMaker.m │ │ ├── MASLayoutConstraint.h │ │ ├── MASLayoutConstraint.m │ │ ├── MASUtilities.h │ │ ├── MASViewAttribute.h │ │ ├── MASViewAttribute.m │ │ ├── MASViewConstraint.h │ │ ├── MASViewConstraint.m │ │ ├── Masonry.h │ │ ├── NSArray+MASAdditions.h │ │ ├── NSArray+MASAdditions.m │ │ ├── NSArray+MASShorthandAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.h │ │ ├── NSLayoutConstraint+MASDebugAdditions.m │ │ ├── View+MASAdditions.h │ │ ├── View+MASAdditions.m │ │ ├── View+MASShorthandAdditions.h │ │ ├── ViewController+MASAdditions.h │ │ └── ViewController+MASAdditions.m │ └── README.md ├── Pods.xcodeproj │ └── project.pbxproj ├── ReactiveObjC │ ├── LICENSE.md │ ├── README.md │ └── ReactiveObjC │ │ ├── NSArray+RACSequenceAdditions.h │ │ ├── NSArray+RACSequenceAdditions.m │ │ ├── NSControl+RACCommandSupport.h │ │ ├── NSControl+RACCommandSupport.m │ │ ├── NSControl+RACTextSignalSupport.h │ │ ├── NSControl+RACTextSignalSupport.m │ │ ├── NSData+RACSupport.h │ │ ├── NSData+RACSupport.m │ │ ├── NSDictionary+RACSequenceAdditions.h │ │ ├── NSDictionary+RACSequenceAdditions.m │ │ ├── NSEnumerator+RACSequenceAdditions.h │ │ ├── NSEnumerator+RACSequenceAdditions.m │ │ ├── NSFileHandle+RACSupport.h │ │ ├── NSFileHandle+RACSupport.m │ │ ├── NSIndexSet+RACSequenceAdditions.h │ │ ├── NSIndexSet+RACSequenceAdditions.m │ │ ├── NSInvocation+RACTypeParsing.h │ │ ├── NSInvocation+RACTypeParsing.m │ │ ├── NSNotificationCenter+RACSupport.h │ │ ├── NSNotificationCenter+RACSupport.m │ │ ├── NSObject+RACAppKitBindings.h │ │ ├── NSObject+RACAppKitBindings.m │ │ ├── NSObject+RACDeallocating.h │ │ ├── NSObject+RACDeallocating.m │ │ ├── NSObject+RACDescription.h │ │ ├── NSObject+RACDescription.m │ │ ├── NSObject+RACKVOWrapper.h │ │ ├── NSObject+RACKVOWrapper.m │ │ ├── NSObject+RACLifting.h │ │ ├── NSObject+RACLifting.m │ │ ├── NSObject+RACPropertySubscribing.h │ │ ├── NSObject+RACPropertySubscribing.m │ │ ├── NSObject+RACSelectorSignal.h │ │ ├── NSObject+RACSelectorSignal.m │ │ ├── NSOrderedSet+RACSequenceAdditions.h │ │ ├── NSOrderedSet+RACSequenceAdditions.m │ │ ├── NSSet+RACSequenceAdditions.h │ │ ├── NSSet+RACSequenceAdditions.m │ │ ├── NSString+RACKeyPathUtilities.h │ │ ├── NSString+RACKeyPathUtilities.m │ │ ├── NSString+RACSequenceAdditions.h │ │ ├── NSString+RACSequenceAdditions.m │ │ ├── NSString+RACSupport.h │ │ ├── NSString+RACSupport.m │ │ ├── NSText+RACSignalSupport.h │ │ ├── NSText+RACSignalSupport.m │ │ ├── NSURLConnection+RACSupport.h │ │ ├── NSURLConnection+RACSupport.m │ │ ├── NSUserDefaults+RACSupport.h │ │ ├── NSUserDefaults+RACSupport.m │ │ ├── RACAnnotations.h │ │ ├── RACArraySequence.h │ │ ├── RACArraySequence.m │ │ ├── RACBehaviorSubject.h │ │ ├── RACBehaviorSubject.m │ │ ├── RACBlockTrampoline.h │ │ ├── RACBlockTrampoline.m │ │ ├── RACChannel.h │ │ ├── RACChannel.m │ │ ├── RACCommand.h │ │ ├── RACCommand.m │ │ ├── RACCompoundDisposable.h │ │ ├── RACCompoundDisposable.m │ │ ├── RACCompoundDisposableProvider.d │ │ ├── RACDelegateProxy.h │ │ ├── RACDelegateProxy.m │ │ ├── RACDisposable.h │ │ ├── RACDisposable.m │ │ ├── RACDynamicSequence.h │ │ ├── RACDynamicSequence.m │ │ ├── RACDynamicSignal.h │ │ ├── RACDynamicSignal.m │ │ ├── RACEagerSequence.h │ │ ├── RACEagerSequence.m │ │ ├── RACEmptySequence.h │ │ ├── RACEmptySequence.m │ │ ├── RACEmptySignal.h │ │ ├── RACEmptySignal.m │ │ ├── RACErrorSignal.h │ │ ├── RACErrorSignal.m │ │ ├── RACEvent.h │ │ ├── RACEvent.m │ │ ├── RACGroupedSignal.h │ │ ├── RACGroupedSignal.m │ │ ├── RACImmediateScheduler.h │ │ ├── RACImmediateScheduler.m │ │ ├── RACIndexSetSequence.h │ │ ├── RACIndexSetSequence.m │ │ ├── RACKVOChannel.h │ │ ├── RACKVOChannel.m │ │ ├── RACKVOProxy.h │ │ ├── RACKVOProxy.m │ │ ├── RACKVOTrampoline.h │ │ ├── RACKVOTrampoline.m │ │ ├── RACMulticastConnection+Private.h │ │ ├── RACMulticastConnection.h │ │ ├── RACMulticastConnection.m │ │ ├── RACPassthroughSubscriber.h │ │ ├── RACPassthroughSubscriber.m │ │ ├── RACQueueScheduler+Subclass.h │ │ ├── RACQueueScheduler.h │ │ ├── RACQueueScheduler.m │ │ ├── RACReplaySubject.h │ │ ├── RACReplaySubject.m │ │ ├── RACReturnSignal.h │ │ ├── RACReturnSignal.m │ │ ├── RACScheduler+Private.h │ │ ├── RACScheduler+Subclass.h │ │ ├── RACScheduler.h │ │ ├── RACScheduler.m │ │ ├── RACScopedDisposable.h │ │ ├── RACScopedDisposable.m │ │ ├── RACSequence.h │ │ ├── RACSequence.m │ │ ├── RACSerialDisposable.h │ │ ├── RACSerialDisposable.m │ │ ├── RACSignal+Operations.h │ │ ├── RACSignal+Operations.m │ │ ├── RACSignal.h │ │ ├── RACSignal.m │ │ ├── RACSignalProvider.d │ │ ├── RACSignalSequence.h │ │ ├── RACSignalSequence.m │ │ ├── RACStream+Private.h │ │ ├── RACStream.h │ │ ├── RACStream.m │ │ ├── RACStringSequence.h │ │ ├── RACStringSequence.m │ │ ├── RACSubject.h │ │ ├── RACSubject.m │ │ ├── RACSubscriber+Private.h │ │ ├── RACSubscriber.h │ │ ├── RACSubscriber.m │ │ ├── RACSubscriptingAssignmentTrampoline.h │ │ ├── RACSubscriptingAssignmentTrampoline.m │ │ ├── RACSubscriptionScheduler.h │ │ ├── RACSubscriptionScheduler.m │ │ ├── RACTargetQueueScheduler.h │ │ ├── RACTargetQueueScheduler.m │ │ ├── RACTestScheduler.h │ │ ├── RACTestScheduler.m │ │ ├── RACTuple.h │ │ ├── RACTuple.m │ │ ├── RACTupleSequence.h │ │ ├── RACTupleSequence.m │ │ ├── RACUnarySequence.h │ │ ├── RACUnarySequence.m │ │ ├── RACUnit.h │ │ ├── RACUnit.m │ │ ├── RACValueTransformer.h │ │ ├── RACValueTransformer.m │ │ ├── ReactiveObjC.h │ │ └── extobjc │ │ ├── RACEXTKeyPathCoding.h │ │ ├── RACEXTRuntimeExtensions.h │ │ ├── RACEXTRuntimeExtensions.m │ │ ├── RACEXTScope.h │ │ └── RACmetamacros.h ├── SwiftFormat │ ├── CommandLineTool │ │ └── swiftformat │ ├── LICENSE.md │ └── README.md ├── SwiftLint │ ├── LICENSE │ └── swiftlint └── Target Support Files │ ├── AFNetworking │ ├── AFNetworking-Info.plist │ ├── AFNetworking-dummy.m │ ├── AFNetworking-prefix.pch │ ├── AFNetworking-umbrella.h │ ├── AFNetworking.debug.xcconfig │ ├── AFNetworking.modulemap │ ├── AFNetworking.release.xcconfig │ └── AFNetworking.xcconfig │ ├── JLRoutes │ ├── JLRoutes-Info.plist │ ├── JLRoutes-dummy.m │ ├── JLRoutes-prefix.pch │ ├── JLRoutes-umbrella.h │ ├── JLRoutes.debug.xcconfig │ ├── JLRoutes.modulemap │ └── JLRoutes.release.xcconfig │ ├── KVOController │ ├── KVOController-Info.plist │ ├── KVOController-dummy.m │ ├── KVOController-prefix.pch │ ├── KVOController-umbrella.h │ ├── KVOController.debug.xcconfig │ ├── KVOController.modulemap │ └── KVOController.release.xcconfig │ ├── Masonry │ ├── Masonry-Info.plist │ ├── Masonry-dummy.m │ ├── Masonry-prefix.pch │ ├── Masonry-umbrella.h │ ├── Masonry.debug.xcconfig │ ├── Masonry.modulemap │ ├── Masonry.release.xcconfig │ └── Masonry.xcconfig │ ├── Pods-Easydict │ ├── Pods-Easydict-Info.plist │ ├── Pods-Easydict-acknowledgements.markdown │ ├── Pods-Easydict-acknowledgements.plist │ ├── Pods-Easydict-dummy.m │ ├── Pods-Easydict-frameworks-Debug-input-files.xcfilelist │ ├── Pods-Easydict-frameworks-Debug-output-files.xcfilelist │ ├── Pods-Easydict-frameworks-Release-input-files.xcfilelist │ ├── Pods-Easydict-frameworks-Release-output-files.xcfilelist │ ├── Pods-Easydict-frameworks.sh │ ├── Pods-Easydict-umbrella.h │ ├── Pods-Easydict.debug.xcconfig │ ├── Pods-Easydict.modulemap │ └── Pods-Easydict.release.xcconfig │ ├── Pods-EasydictTests │ ├── Pods-EasydictTests-Info.plist │ ├── Pods-EasydictTests-acknowledgements.markdown │ ├── Pods-EasydictTests-acknowledgements.plist │ ├── Pods-EasydictTests-dummy.m │ ├── Pods-EasydictTests-frameworks-Debug-input-files.xcfilelist │ ├── Pods-EasydictTests-frameworks-Debug-output-files.xcfilelist │ ├── Pods-EasydictTests-frameworks-Release-input-files.xcfilelist │ ├── Pods-EasydictTests-frameworks-Release-output-files.xcfilelist │ ├── Pods-EasydictTests-frameworks.sh │ ├── Pods-EasydictTests-umbrella.h │ ├── Pods-EasydictTests.debug.xcconfig │ ├── Pods-EasydictTests.modulemap │ └── Pods-EasydictTests.release.xcconfig │ ├── ReactiveObjC │ ├── ReactiveObjC-Info.plist │ ├── ReactiveObjC-dummy.m │ ├── ReactiveObjC-prefix.pch │ ├── ReactiveObjC-umbrella.h │ ├── ReactiveObjC.debug.xcconfig │ ├── ReactiveObjC.modulemap │ ├── ReactiveObjC.release.xcconfig │ └── ReactiveObjC.xcconfig │ ├── SwiftFormat │ ├── SwiftFormat.debug.xcconfig │ └── SwiftFormat.release.xcconfig │ └── SwiftLint │ ├── SwiftLint.debug.xcconfig │ └── SwiftLint.release.xcconfig ├── README.md ├── README_EN.md ├── appcast.xml └── docs ├── How-to-translate-Easydict-en.md ├── How-to-translate-Easydict-zh.md ├── How-to-use-macOS-system-dictionary-in-Easydict-en.md ├── How-to-use-macOS-system-dictionary-in-Easydict-zh.md ├── How-to-use-macOS-system-translation-in-Easydict-en.md ├── How-to-use-macOS-system-translation-in-Easydict-zh.md ├── select_text_flow.d2 └── select_text_flow.md /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/dev.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: dev issue 3 | about: Use this template for tracking dev issue 4 | title: "dev: " 5 | labels: dev 6 | --- 7 | 8 | 11 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 5.9 -------------------------------------------------------------------------------- /Easydict-debug.xcconfig: -------------------------------------------------------------------------------- 1 | DEVELOPMENT_TEAM = 2 | CODE_SIGN_IDENTITY = - 3 | CODE_SIGN_STYLE = Manual 4 | -------------------------------------------------------------------------------- /Easydict.xcconfig: -------------------------------------------------------------------------------- 1 | DEVELOPMENT_TEAM = 45Z6V4YD5U 2 | CODE_SIGN_IDENTITY = Apple Development 3 | CODE_SIGN_STYLE = Automatic 4 | -------------------------------------------------------------------------------- /Easydict.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Easydict.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Easydict.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Easydict/App/AppDelegate+EZURLScheme.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate+EZURLScheme.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/5/29. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface AppDelegate (EZURLScheme) 14 | 15 | - (void)registerRouters; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/App/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/10/30. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/Colors/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow-down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "arrow-down-slme@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow-down.imageset/arrow-down-slme@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/arrow-down.imageset/arrow-down-slme@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow-left.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "arrow-left.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow-left.imageset/arrow-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/arrow-left.imageset/arrow-left.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow_down_filling.imageset/arrow_down@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/arrow_down_filling.imageset/arrow_down@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow_down_filling.imageset/arrow_down@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/arrow_down_filling.imageset/arrow_down@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow_down_filling.imageset/展开列表_暗黑@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/arrow_down_filling.imageset/展开列表_暗黑@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/arrow_down_filling.imageset/展开列表_暗黑@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/arrow_down_filling.imageset/展开列表_暗黑@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/audio.imageset/audio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/audio.imageset/audio@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/audio.imageset/audio@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/audio.imageset/audio@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/audio.imageset/喇叭_暗黑@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/audio.imageset/喇叭_暗黑@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/audio.imageset/喇叭_暗黑@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/audio.imageset/喇叭_暗黑@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/blue-white-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "blue-white-plain@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "blue-white-plain@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/blue-white-icon.imageset/blue-white-plain@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/blue-white-icon.imageset/blue-white-plain@1x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/blue-white-icon.imageset/blue-white-plain@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/blue-white-icon.imageset/blue-white-plain@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/blue-white-icon_old.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "blue-white.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/blue-white-icon_old.imageset/blue-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/blue-white-icon_old.imageset/blue-white.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/clear_circle.imageset/AppIcon-40.0x40.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/clear_circle.imageset/AppIcon-40.0x40.0@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/clear_circle.imageset/AppIcon-40.0x40.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/clear_circle.imageset/AppIcon-40.0x40.0@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/clear_circle.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "AppIcon-40.0x40.0@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "AppIcon-40.0x40.0@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy.imageset/copy_Normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy.imageset/copy_Normal.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy.imageset/copy_Normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy.imageset/copy_Normal@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy.imageset/copy_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy.imageset/copy_dark.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy.imageset/copy_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy.imageset/copy_dark@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy_0.imageset/copy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy_0.imageset/copy@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy_0.imageset/copy@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy_0.imageset/copy@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy_0.imageset/复制_暗黑@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy_0.imageset/复制_暗黑@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy_0.imageset/复制_暗黑@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy_0.imageset/复制_暗黑@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "noun-copy-5118522.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "noun-duplicate-5406073.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy_1.imageset/noun-copy-5118522.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy_1.imageset/noun-copy-5118522.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/copy_1.imageset/noun-duplicate-5406073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/copy_1.imageset/noun-duplicate-5406073.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/disabled.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "disabled@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/disabled.imageset/disabled@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/disabled.imageset/disabled@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/error.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "error_outline (2).png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/error.imageset/error_outline (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/error.imageset/error_outline (2).png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/fold_down.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fold_down@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "fold_down@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/fold_down.imageset/fold_down@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/fold_down.imageset/fold_down@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/fold_down.imageset/fold_down@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/fold_down.imageset/fold_down@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/fold_up.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "fold_up@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "fold_up@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/fold_up.imageset/fold_up@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/fold_up.imageset/fold_up@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/fold_up.imageset/fold_up@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/fold_up.imageset/fold_up@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "icon_ns_512x512@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "icon_ns_512x512@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/logo.imageset/icon_ns_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/logo.imageset/icon_ns_512x512@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/logo.imageset/icon_ns_512x512@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/logo.imageset/icon_ns_512x512@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/logo_old.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Icon_512x512@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "Icon_512x512@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/logo_old.imageset/Icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/logo_old.imageset/Icon_512x512@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/logo_old.imageset/Icon_512x512@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/logo_old.imageset/Icon_512x512@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/magnifier.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "magnifier.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/magnifier.imageset/magnifier.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/magnifier.imageset/magnifier.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/magnifier3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "magnifier3.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/magnifier3.imageset/magnifier3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/magnifier3.imageset/magnifier3.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/menu-icon/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/menu-icon/rounded_menu_bar_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "rounded.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "localizable" : true 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/menu-icon/rounded_menu_bar_icon.imageset/rounded.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/menu-icon/rounded_menu_bar_icon.imageset/rounded.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/menu-icon/square_menu_bar_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "square.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/menu-icon/square_menu_bar_icon.imageset/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/menu-icon/square_menu_bar_icon.imageset/square.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/result_view/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/result_view/link.imageset/AppIcon-40.0x40.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/result_view/link.imageset/AppIcon-40.0x40.0@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/result_view/link.imageset/AppIcon-40.0x40.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/result_view/link.imageset/AppIcon-40.0x40.0@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/result_view/link.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "AppIcon-40.0x40.0@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "AppIcon-40.0x40.0@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Alibaba.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "ali translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Alibaba.imageset/ali translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Alibaba.imageset/ali translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Apple.imageset/Apple Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Apple.imageset/Apple Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Apple.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Apple Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/AppleDictionary.imageset/510a9fda2f51de7416af54a20772b6cd_MzvUX28YSg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/AppleDictionary.imageset/510a9fda2f51de7416af54a20772b6cd_MzvUX28YSg.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/AppleDictionary.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "510a9fda2f51de7416af54a20772b6cd_MzvUX28YSg.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | }, 21 | "properties" : { 22 | "localizable" : true 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Baidu.imageset/Baidu_Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Baidu.imageset/Baidu_Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Baidu.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Baidu_Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Bing.imageset/Bing Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Bing.imageset/Bing Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Bing.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Bing Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/BuiltInAI.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "OpenAI Translator.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/BuiltInAI.imageset/OpenAI Translator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/BuiltInAI.imageset/OpenAI Translator.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Caiyun.imageset/Caiyun Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Caiyun.imageset/Caiyun Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Caiyun.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Caiyun Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/CustomOpenAI.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "customOpenAI.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "customOpenAI@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/CustomOpenAI.imageset/customOpenAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/CustomOpenAI.imageset/customOpenAI.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/CustomOpenAI.imageset/customOpenAI@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/CustomOpenAI.imageset/customOpenAI@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/DeepL.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "DeepL Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/DeepL.imageset/DeepL Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/DeepL.imageset/DeepL Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/DeepSeek.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "deepseek-logo-icon.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/DeepSeek.imageset/deepseek-logo-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/DeepSeek.imageset/deepseek-logo-icon.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Gemini.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Gemini.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Gemini.imageset/Gemini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Gemini.imageset/Gemini.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/GitHub.imageset/github-mark-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/GitHub.imageset/github-mark-white.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/GitHub.imageset/github-mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/GitHub.imageset/github-mark.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Google.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "service_google_translate_Normal@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Google.imageset/service_google_translate_Normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Google.imageset/service_google_translate_Normal@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Groq.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Groq.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Groq@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Groq.imageset/Groq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Groq.imageset/Groq.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Groq.imageset/Groq@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Groq.imageset/Groq@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Iciba.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Iciba Dictionary.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Iciba.imageset/Iciba Dictionary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Iciba.imageset/Iciba Dictionary.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Linguee.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Linguee Dictionary.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Linguee.imageset/Linguee Dictionary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Linguee.imageset/Linguee Dictionary.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Microsoft.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Microsoft Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Microsoft.imageset/Microsoft Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Microsoft.imageset/Microsoft Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/NiuTrans.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "小牛翻译.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/NiuTrans.imageset/小牛翻译.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/NiuTrans.imageset/小牛翻译.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Ollama.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Ollama.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Ollama@x2.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Ollama.imageset/Ollama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Ollama.imageset/Ollama.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Ollama.imageset/Ollama@x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Ollama.imageset/Ollama@x2.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/OpenAI.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "OpenAI.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/OpenAI.imageset/OpenAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/OpenAI.imageset/OpenAI.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Polishing.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Polishing.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Polishing@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Polishing.imageset/Polishing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Polishing.imageset/Polishing.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Polishing.imageset/Polishing@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Polishing.imageset/Polishing@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Summary.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "Summary.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "Summary@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Summary.imageset/Summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Summary.imageset/Summary.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Summary.imageset/Summary@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Summary.imageset/Summary@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Tencent.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Tencent Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Tencent.imageset/Tencent Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Tencent.imageset/Tencent Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Volcano.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Volcano Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Volcano.imageset/Volcano Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Volcano.imageset/Volcano Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Youdao.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Youdao Translate.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/Youdao.imageset/Youdao Translate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/Youdao.imageset/Youdao Translate.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "play.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/service-icon/play.imageset/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/service-icon/play.imageset/play.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/Toggle_Off.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Toggle_Off.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/Toggle_Off.imageset/Toggle_Off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/Toggle_Off.imageset/Toggle_Off.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/Toggle_On.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Toggle_On.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/Toggle_On.imageset/Toggle_On.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/Toggle_On.imageset/Toggle_On.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/add.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "add.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/add.imageset/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/add.imageset/add.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/disable_blue.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "disable_blue.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/disable_blue.imageset/disable_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/disable_blue.imageset/disable_blue.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/minus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "minus.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/minus.imageset/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/minus.imageset/minus.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/switch_off.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "switch_off.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/switch_off.imageset/switch_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/switch_off.imageset/switch_off.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/switch_on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "switch_on.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/switch_on.imageset/switch_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/switch_on.imageset/switch_on.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_off_blue.imageset/Toggle_Off (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toggle_off_blue.imageset/Toggle_Off (1).png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_off_blue.imageset/toggle_off_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toggle_off_blue.imageset/toggle_off_blue.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_off_blue_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "toggle_off_blue.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_off_blue_dark.imageset/toggle_off_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toggle_off_blue_dark.imageset/toggle_off_blue.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_off_blue_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Toggle_Off (1).png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_off_blue_light.imageset/Toggle_Off (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toggle_off_blue_light.imageset/Toggle_Off (1).png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_on_blue.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "toggle_on_blue.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toggle_on_blue.imageset/toggle_on_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toggle_on_blue.imageset/toggle_on_blue.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_about.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "about.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_about.imageset/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_about.imageset/about.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_general.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "toolbar_general.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "toolbar_general@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "toolbar_general@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_general.imageset/toolbar_general.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_general.imageset/toolbar_general.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_general.imageset/toolbar_general@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_general.imageset/toolbar_general@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_general.imageset/toolbar_general@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_general.imageset/toolbar_general@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_privacy.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Privacy 1.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_privacy.imageset/Privacy 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_privacy.imageset/Privacy 1.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_service.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "toolbar_service.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_service.imageset/toolbar_service.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_service.imageset/toolbar_service.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_setting_general.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "toolbar_setting.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_setting_general.imageset/toolbar_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_setting_general.imageset/toolbar_setting.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_shortcut.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "shortcut.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/setting/toolbar_shortcut.imageset/shortcut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/setting/toolbar_shortcut.imageset/shortcut.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/tip_Normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "tip_Normal.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "tip_Normal@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/tip_Normal.imageset/tip_Normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/tip_Normal.imageset/tip_Normal.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/tip_Normal.imageset/tip_Normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/tip_Normal.imageset/tip_Normal@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Browser.imageset/Browser@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Browser.imageset/Browser@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Browser.imageset/Browser@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Browser.imageset/Browser@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Browser.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Browser@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "Browser@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Chrome.imageset/Chrome_64@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Chrome.imageset/Chrome_64@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Chrome.imageset/Chrome_64@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Chrome.imageset/Chrome_64@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Chrome.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Chrome_64@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "Chrome_64@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Eudic.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "Eudic_64@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "Eudic_64@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Eudic.imageset/Eudic_64@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Eudic.imageset/Eudic_64@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Eudic.imageset/Eudic_64@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Eudic.imageset/Eudic_64@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Safari.imageset/AppIcon-40.0x40.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Safari.imageset/AppIcon-40.0x40.0@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Safari.imageset/AppIcon-40.0x40.0@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/Safari.imageset/AppIcon-40.0x40.0@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/Safari.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "AppIcon-40.0x40.0@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "filename" : "AppIcon-40.0x40.0@3x.png", 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/google_icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "google_icon.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/google_icon.imageset/google_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/google_icon.imageset/google_icon.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/new_pin_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "tw_navigation_pin_normal_Normal.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "tw_navigation_pin_normal_Normal@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/new_pin_normal.imageset/tw_navigation_pin_normal_Normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/new_pin_normal.imageset/tw_navigation_pin_normal_Normal.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/new_pin_normal.imageset/tw_navigation_pin_normal_Normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/new_pin_normal.imageset/tw_navigation_pin_normal_Normal@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/new_pin_selected.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "tw_navigation_pin_selected_Normal.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "tw_navigation_pin_selected_Normal@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/new_pin_selected.imageset/tw_navigation_pin_selected_Normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/new_pin_selected.imageset/tw_navigation_pin_selected_Normal.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/titlebar/new_pin_selected.imageset/tw_navigation_pin_selected_Normal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/titlebar/new_pin_selected.imageset/tw_navigation_pin_selected_Normal@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/transform.imageset/transform@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/transform.imageset/transform@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/transform.imageset/transform@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/transform.imageset/transform@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/transform.imageset/交换_暗黑@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/transform.imageset/交换_暗黑@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/transform.imageset/交换_暗黑@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/transform.imageset/交换_暗黑@3x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_128x128.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_16x16.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_256x256.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_32x32.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_512x512.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon.appiconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_128x128.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_16x16.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_256x256.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_32x32.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_512x512.png -------------------------------------------------------------------------------- /Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Assets.xcassets/white-black-icon_old.appiconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /Easydict/App/Easydict-debug.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.automation.apple-events 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.cs.disable-library-validation 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Easydict/App/Easydict.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.automation.apple-events 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Easydict/App/Icons/black-white-icon/black-white-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/black-white-icon/black-white-icon@2x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/black-white-icon/black-white-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/black-white-icon/black-white-icon@3x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/blue-white-icon/blue-white-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/blue-white-icon/blue-white-icon@2x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/blue-white-icon/blue-white-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/blue-white-icon/blue-white-icon@3x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/cyan-white-icon/cyan-white-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/cyan-white-icon/cyan-white-icon@2x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/cyan-white-icon/cyan-white-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/cyan-white-icon/cyan-white-icon@3x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/white-black-icon/white-black-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/white-black-icon/white-black-icon@2x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/white-black-icon/white-black-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/white-black-icon/white-black-icon@3x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/white-blue-icon/white-blue-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/white-blue-icon/white-blue-icon@2x.png -------------------------------------------------------------------------------- /Easydict/App/Icons/white-blue-icon/white-blue-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Easydict/App/Icons/white-blue-icon/white-blue-icon@3x.png -------------------------------------------------------------------------------- /Easydict/App/easydict: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 在这里添加你的应用程序执行命令 4 | # 例如: 5 | # /path/to/your/application/Easydict "$@" 6 | 7 | 8 | # /Users/tisfeng/Library/Developer/Xcode/DerivedData/Easydict-entaqaylceybfqboqggmsizyhose/Build/Products/Debug/Easydict-debug.app/Contents/MacOS/Easydict-debug "$@" 9 | 10 | /System/Volumes/Data/Applications/Easydict.app/Contents/MacOS/Easydict "$@" 11 | -------------------------------------------------------------------------------- /Easydict/App/entry.h: -------------------------------------------------------------------------------- 1 | // 2 | // entry.h 3 | // Easydict 4 | // 5 | // Created by Kyle on 2023/12/28. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | void parseArmguments(void); 10 | -------------------------------------------------------------------------------- /Easydict/Swift/Feature/HTTPServer/Vapor/configure.swift: -------------------------------------------------------------------------------- 1 | // 2 | // vapor.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2024/7/15. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import Vapor 10 | 11 | // configures your application 12 | public func configure(_ app: Application) async throws { 13 | // uncomment to serve files from /Public folder 14 | // app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory)) 15 | // register routes 16 | try routes(app) 17 | } 18 | -------------------------------------------------------------------------------- /Easydict/Swift/Feature/Localization/LocalizedBundle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocalizedBundle.swift 3 | // Easydict 4 | // 5 | // Created by choykarl on 2024/3/23. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | @objc(EZLocalizedBundle) 12 | class LocalizedBundle: Bundle, @unchecked Sendable { 13 | override func localizedString(forKey key: String, value: String?, table tableName: String?) -> String { 14 | I18nHelper.shared.localizedBundle.localizedString(forKey: key, value: value, table: tableName) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Easydict/Swift/Feature/Localization/NSBundle+Localization.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+Localization.m 3 | // Easydict 4 | // 5 | // Created by choykarl on 2024/3/23. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "Easydict-Swift.h" 11 | 12 | @implementation NSBundle (Localization) 13 | 14 | + (void)load { 15 | static dispatch_once_t onceToken; 16 | dispatch_once(&onceToken, ^{ 17 | object_setClass([NSBundle mainBundle], [EZLocalizedBundle class]); 18 | }); 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Easydict/Swift/Service/Caiyun/CaiyunResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CaiyunResponse.swift 3 | // Easydict 4 | // 5 | // Created by Kyle on 2023/11/24. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct CaiyunResponse: Codable { 12 | var confidence: Double 13 | var rc: Int 14 | var target: [String] 15 | } 16 | -------------------------------------------------------------------------------- /Easydict/Swift/Service/Youdao/Model/YoudaoOCRResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // YoudaoOCRResponse.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2025/1/3. 6 | // Copyright © 2025 izual. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // MARK: - YoudaoOCRResponse 12 | 13 | struct YoudaoOCRResponse: Codable { 14 | let lanFrom: String 15 | let lanTo: String 16 | let errorCode: String 17 | let lines: [YoudaoOCRLine] 18 | } 19 | 20 | // MARK: - YoudaoOCRLine 21 | 22 | struct YoudaoOCRLine: Codable { 23 | let context: String // original text 24 | let tranContent: String // translated text 25 | } 26 | -------------------------------------------------------------------------------- /Easydict/Swift/Utility/Constants/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Constants.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2024/9/13. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // MARK: - Constants 12 | 13 | @objcMembers 14 | class Constants: NSObject { 15 | // Easydict translate shortcut name. 16 | static let easydictTranslateShortcutName = "Easydict-Translate-V1.2.0" 17 | } 18 | 19 | extension String { 20 | // Acknowledgements window id. 21 | static let acknowledgementsWindowId = "setting.about.acknowledgements" 22 | 23 | // About window id. 24 | static let aboutWindowId = "setting.about" 25 | } 26 | -------------------------------------------------------------------------------- /Easydict/Swift/Utility/Extensions/AppKit/NSMenu+PopUpBelowView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSMenu+PopUp.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2024/3/22. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import AppKit 10 | import Foundation 11 | 12 | @objc 13 | extension NSMenu { 14 | func popUp(belowView view: NSView) { 15 | let point = CGPoint(x: 0, y: view.frame.height + 8) 16 | popUp(positioning: nil, at: point, in: view) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Easydict/Swift/Utility/Extensions/Bundle/Bundle+AppInfo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Bundle+AppInfo.swift 3 | // Easydict 4 | // 5 | // Created by phlpsong on 2024/1/18. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Bundle { 12 | var applicationName: String { 13 | if let displayName: String = object(forInfoDictionaryKey: "CFBundleDisplayName") as? String { 14 | return displayName 15 | } else if let name: String = object(forInfoDictionaryKey: "CFBundleName") as? String { 16 | return name 17 | } 18 | if let executableURL { 19 | return executableURL.deletingLastPathComponent().lastPathComponent 20 | } 21 | return "" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Easydict/Swift/Utility/Extensions/Data/Data+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data+Extension.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2024/9/6. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Data { 11 | var stringValue: String? { 12 | String(data: self, encoding: .utf8) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Easydict/Swift/Utility/Extensions/Dictionary/Dictionary+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Dictionary+Extension.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2024/8/19. 6 | // 7 | 8 | import Alamofire 9 | import Foundation 10 | 11 | extension [String: Any] { 12 | /// Convert dictioanry to queryString 13 | var queryString: String { 14 | var components: [(String, String)] = [] 15 | 16 | for key in keys.sorted(by: <) { 17 | let value = self[key]! 18 | components += URLEncoding().queryComponents(fromKey: key, value: value) 19 | } 20 | return components.map { "\($0)=\($1)" }.joined(separator: "&") 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/Swift/Utility/Extensions/Double/Double+String.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Double+String.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2025/4/18. 6 | // Copyright © 2025 izual. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension Double { 12 | /// Convert double to string with one decimal place. 13 | /// - Example: 14 | /// - 1 -> "1.0" 15 | /// - 1.234 -> "1.2" 16 | var oneDecimalString: String { 17 | String(format: "%.1f", self) 18 | } 19 | 20 | var twoDecimalString: String { 21 | String(format: "%.2f", self) 22 | } 23 | 24 | var intString: String { 25 | String(format: "%.0f", self) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Easydict/Swift/Utility/Extensions/URL/URL+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URL+IsValid.swift 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2024/3/24. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | extension URL { 12 | var isValid: Bool { 13 | scheme != nil && host != nil 14 | } 15 | 16 | /// Get true base URL, such as `http://localhost:11434/v1/chat/completions` return `http://localhost:11434` 17 | /// 18 | /// From `https://stackoverflow.com/a/15897956/8378840` 19 | var rootURL: URL? { 20 | URL(string: "/", relativeTo: self)?.absoluteURL 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/Swift/View/SettingView/Tabs/ServiceConfigurationView/ConfigurationView/BingService+ConfigurableService.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BingService+ConfigurableService.swift 3 | // Easydict 4 | // 5 | // Created by phlpsong on 2024/1/31. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | extension EZBingService { 12 | open override func configurationListItems() -> Any? { 13 | ServiceConfigurationSecretSectionView(service: self, observeKeys: [.bingCookieKey]) { 14 | SecureInputCell( 15 | textFieldTitleKey: "service.configuration.bing.cookie.title", 16 | key: .bingCookieKey 17 | ) 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Easydict/Swift/View/SettingView/Tabs/ServiceConfigurationView/ServiceAPIType.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ServiceAPIType.swift 3 | // Easydict 4 | // 5 | // Created by karl on 2024/7/25. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import Defaults 10 | import Foundation 11 | import SwiftUI 12 | 13 | enum ServiceAPIType: String, CaseIterable, Defaults.Serializable, EnumLocalizedStringConvertible { 14 | case web = "Web API" 15 | case secretKey = "Secret Key API" 16 | 17 | // MARK: Internal 18 | 19 | var title: LocalizedStringKey { 20 | LocalizedStringKey(rawValue) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Easydict/Swift/View/SettingView/Tabs/TabView/ShortcutTab.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShortcutTab.swift 3 | // Easydict 4 | // 5 | // Created by Sharker on 2024/1/21. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | struct ShortcutTab: View { 11 | var body: some View { 12 | Form { 13 | // Global shortcut 14 | GlobalShortcutSettingView() 15 | // In app shortcut 16 | AppShortcutSettingView() 17 | } 18 | .formStyle(.grouped) 19 | } 20 | } 21 | 22 | #Preview { 23 | ShortcutTab() 24 | } 25 | -------------------------------------------------------------------------------- /Easydict/Swift/View/WindowAccessor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WindowAccessor.swift 3 | // Easydict 4 | // 5 | // Created by phlpsong on 2024/1/9. 6 | // Copyright © 2024 izual. All rights reserved. 7 | // 8 | 9 | import SwiftUI 10 | 11 | struct WindowAccessor: NSViewRepresentable { 12 | @Binding var window: NSWindow? 13 | 14 | func makeNSView(context _: Context) -> NSView { 15 | let view = NSView() 16 | DispatchQueue.main.async { 17 | window = view.window 18 | } 19 | return view 20 | } 21 | 22 | func updateNSView(_: NSView, context _: Context) {} 23 | } 24 | -------------------------------------------------------------------------------- /Easydict/objc/DarkMode/DarkModeManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // DarkModeManager.h 3 | // Bob 4 | // 5 | // Created by chen on 2019/12/24. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface DarkModeManager : NSObject 14 | 15 | @property (nonatomic, assign, readonly) BOOL systemDarkMode; 16 | 17 | + (instancetype)manager NS_SWIFT_NAME(sharedManager()); 18 | - (void)excuteLight:(void (^)(void))light dark:(void (^)(void))dark; 19 | 20 | - (void)updateDarkMode:(NSInteger)apperance; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Easydict/objc/DarkMode/NSObject+DarkMode.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+DarkMode.h 3 | // Bob 4 | // 5 | // Created by chen on 2019/12/25. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | 15 | @interface NSObject (DarkMode) 16 | 17 | - (void)excuteLight:(void (^)(id x))light dark:(void (^)(id x))dark; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Easydict/objc/DarkMode/NSView+HiddenDebug.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+HiddenDebug.h 3 | // Bob 4 | // 5 | // Created by chen on 2019/12/26. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | 15 | @interface NSView (HiddenDebug) 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/DarkMode/NSView+HiddenDebug.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+HiddenDebug.m 3 | // Bob 4 | // 5 | // Created by chen on 2019/12/26. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import "NSView+HiddenDebug.h" 10 | #import 11 | 12 | 13 | @implementation NSView (HiddenDebug) 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Easydict/objc/Legacy/EZAppModel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZAppModel.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/6/21. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZEnumTypes.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZAppModel : NSObject 15 | 16 | @property (nonatomic, copy) NSString *appBundleID; 17 | @property (nonatomic, assign) EZTriggerType triggerType; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Easydict/objc/Legacy/EZAppModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EZAppModel.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/6/21. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZAppModel.h" 10 | 11 | @implementation EZAppModel 12 | 13 | - (BOOL)isEqual:(id)object { 14 | if (![object isKindOfClass:[EZAppModel class]]) { 15 | return NO; 16 | } 17 | 18 | EZAppModel *model = (EZAppModel *)object; 19 | return [self.appBundleID isEqualToString:model.appBundleID]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/ArgumentParser-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'ArgumentParser' target in the 'ArgumentParser' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/NSArray+XPMArgumentsNormalizer.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+XPMArgumentsNormalizer.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/15/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "XPMMutableAttributedArray.h" 12 | 13 | @interface NSArray (XPMArgumentsNormalizer) 14 | 15 | - (XPMMutableAttributedArray *)xpmargs_normalize; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/NSDictionary+RubyDescription.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+RubyDescription.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/15/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSDictionary (RubyDescription) 12 | - (NSString *)xpmargs_rubyHashDescription; 13 | @end 14 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/NSProcessInfo+XPMArgumentParser.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSProcessInfo+XPMArgumentParser.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/15/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class XPMArgumentPackage; 12 | 13 | @interface NSProcessInfo (XPMArgumentParser) 14 | 15 | - (XPMArgumentPackage *)xpmargs_parseArgumentsWithSignatures:(id)signatures; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/NSProcessInfo+XPMArgumentParser.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSProcessInfo+XPMArgumentParser.m 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/15/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import "NSProcessInfo+XPMArgumentParser.h" 10 | 11 | #import "XPMArgumentParser.h" 12 | 13 | @implementation NSProcessInfo (XPMArgumentParser) 14 | 15 | - (XPMArgumentPackage *)xpmargs_parseArgumentsWithSignatures:(id)signatures 16 | { 17 | XPMArgumentParser * p = [[XPMArgumentParser alloc] initWithArguments:[self arguments] signatures:signatures]; 18 | return [p parse]; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/NSScanner+EscapedScanning.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSScanner+EscapedScanning.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/17/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSScanner (EscapedScanning) 12 | 13 | - (void)xpmargs_scanUpToCharacterFromSet:(NSCharacterSet *)upTo unlessPrecededByCharacterFromSet:(NSCharacterSet *)escapedBy intoString:(__autoreleasing NSString **)into; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/NSString+Indenter.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Indenter.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/11/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Indenter) 12 | 13 | - (NSMutableString *)xpmargs_mutableStringByIndentingToWidth:(NSUInteger)indent lineLength:(NSUInteger)width; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/XPMArgsKonstants.h: -------------------------------------------------------------------------------- 1 | // 2 | // XPMArgsKonstants.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/15/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | extern NSString * xpmargs_typeKey; 12 | extern NSString * xpmargs_switch; 13 | extern NSString * xpmargs_unknown; 14 | extern NSString * xpmargs_barrier; 15 | extern NSString * xpmargs_value; 16 | extern NSString * xpmargs_isValueCaptured; 17 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/XPMArgsKonstants.m: -------------------------------------------------------------------------------- 1 | // 2 | // XPMArgsKonstants.m 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/15/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import "XPMArgsKonstants.h" 10 | 11 | NSString * xpmargs_typeKey = @"type"; 12 | NSString * xpmargs_switch = @"switch"; 13 | NSString * xpmargs_unknown = @"unknown"; 14 | NSString * xpmargs_barrier = @"barrier"; 15 | NSString * xpmargs_value = @"value"; 16 | NSString * xpmargs_isValueCaptured = @"isValueCaptured?"; 17 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/XPMArgumentParser.h: -------------------------------------------------------------------------------- 1 | // 2 | // XPMArgumentParser.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 2/23/12. 6 | // Copyright (c) 2012, 2016 Christopher Miller. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class XPMArgumentPackage; 12 | 13 | @interface XPMArgumentParser : NSObject 14 | 15 | - (id)initWithArguments:(NSArray *)arguments signatures:(id)signatures; 16 | - (XPMArgumentPackage *)parse; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/XPMArguments.h: -------------------------------------------------------------------------------- 1 | // 2 | // XPMArguments.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 4/2/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #ifndef _XPMArguments_h 10 | #define _XPMArguments_h 11 | 12 | #import "XPMArgumentSignature.h" 13 | #import "XPMCountedArgument.h" 14 | #import "XPMValuedArgument.h" 15 | 16 | #import "XPMArgumentParser.h" 17 | #import "XPMArgumentPackage.h" 18 | 19 | #import "NSProcessInfo+XPMArgumentParser.h" 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/ArgumentParser/XPMCountedArgument.h: -------------------------------------------------------------------------------- 1 | // 2 | // XPMCountedArgument.h 3 | // ArgumentParser 4 | // 5 | // Created by Christopher R. Miller on 5/11/12. 6 | // Copyright (c) 2012, 2016 Christopher R. Miller. All rights reserved. 7 | // 8 | 9 | #import "XPMArgumentSignature.h" 10 | 11 | /** Counted or boolean argument signature. */ 12 | @interface XPMCountedArgument : XPMArgumentSignature 13 | 14 | + (id)countedArgumentWithSwitches:(id)switches aliases:(id)aliases; 15 | - (id)initWithSwitches:(id)switches aliases:(id)aliases; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/CoolToast/CTScreen.h: -------------------------------------------------------------------------------- 1 | // 2 | // CTScreen.h 3 | // CoolToast 4 | // 5 | // Created by Socoolby on 2019/7/1. 6 | // Copyright © 2019 Socoolby. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface CTScreen : NSObject 15 | 16 | //+ (NSScreen *)screenWithPoint:(CGPoint)point; 17 | + (CGPoint)mouseLocationInScreen; 18 | + (NSScreen *)getMainScreen; 19 | + (NSScreen *)getCurrentScreen; 20 | + (NSRect)frameForScreen:(NSScreen *)screen; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/CoolToast/CTView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CTView.h 3 | // CoolToast 4 | // 5 | // Created by Socoolby on 2019/7/5. 6 | // Copyright © 2019 Socoolby. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface CTView : NSView 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/CoolToast/CTView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CTView.m 3 | // CoolToast 4 | // 5 | // Created by Socoolby on 2019/7/5. 6 | // Copyright © 2019 Socoolby. All rights reserved. 7 | // 8 | 9 | #import "CTView.h" 10 | 11 | @implementation CTView 12 | 13 | - (void)drawRect:(NSRect)dirtyRect { 14 | [super drawRect:dirtyRect]; 15 | } 16 | 17 | // Overrite for tap event. 18 | - (BOOL)acceptsFirstMouse:(nullable NSEvent *)event { 19 | return YES; 20 | } 21 | @end 22 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/CoolToast/CoolToast.h: -------------------------------------------------------------------------------- 1 | // 2 | // CoolToast.h 3 | // CoolToast 4 | // 5 | // Created by Socoolby on 2019/6/28. 6 | // Copyright © 2019 Socoolby. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CTCommon.h" 11 | #import "ToastWindowController.h" 12 | 13 | //! Project version number for CoolToast. 14 | FOUNDATION_EXPORT double CoolToastVersionNumber; 15 | 16 | //! Project version string for CoolToast. 17 | FOUNDATION_EXPORT const unsigned char CoolToastVersionString[]; 18 | 19 | // In this header, you should import all the public headers of your framework using statements like #import 20 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/CoolToast/EZToast.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZToast.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/5/8. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CoolToast.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZToast : ToastWindowController 15 | 16 | + (EZToast *)toast; 17 | 18 | /// Show toast, message with App icon. 19 | + (void)showToast:(NSString *)message; 20 | 21 | /// Show only text. 22 | + (void)showText:(NSString *)message; 23 | 24 | + (void)showText:(NSString *)message toastPostion:(CTPosition)toastPostion; 25 | 26 | + (void)showSuccessToast; 27 | 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/Snip/Snip.h: -------------------------------------------------------------------------------- 1 | // 2 | // Snip.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/11/27. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SnipWindowController.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | 15 | @interface Snip : NSObject 16 | 17 | @property (nonatomic, assign) BOOL isSnapshotting; 18 | 19 | + (instancetype)shared; 20 | 21 | - (void)startWithCompletion:(void (^)(NSImage *_Nullable image))completion; 22 | 23 | - (void)stop; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/Snip/SnipFocusView.h: -------------------------------------------------------------------------------- 1 | // 2 | // SnipFocusView.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/11/29. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | @interface SnipFocusView : NSView 15 | 16 | DefineMethodMMMake_h(SnipFocusView, view); 17 | 18 | @property (nonatomic, strong) NSImageView *imageView; 19 | @property (nonatomic, strong) NSTextField *locationTextField; 20 | @property (nonatomic, strong) NSTextField *sizeTextFiled; 21 | 22 | - (CGSize)expectSize; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /Easydict/objc/Libraries/Snip/SnipWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // SnipWindow.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/11/27. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface SnipWindow : NSPanel 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Category/NSButton+MM.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSButton+MM.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/11/15. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | @interface NSButton (MM) 15 | 16 | @property (nonatomic, assign) BOOL mm_isOn; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Category/NSButton+MM.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSButton+MM.m 3 | // Bob 4 | // 5 | // Created by ripper on 2019/11/15. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import "NSButton+MM.h" 10 | 11 | 12 | @implementation NSButton (MM) 13 | 14 | - (BOOL)mm_isOn { 15 | return self.state == NSControlStateValueOn; 16 | } 17 | 18 | - (void)setMm_isOn:(BOOL)mm_isOn { 19 | if (mm_isOn) { 20 | self.state = NSControlStateValueOn; 21 | } else { 22 | self.state = NSControlStateValueOff; 23 | } 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Category/NSDictionary+MM.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSDictionary+MM.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/12/13. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | @interface NSDictionary (MM) 15 | 16 | - (NSDictionary *_Nullable)mm_reverseKeysAndObjectsDictionary; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Category/NSImage+MM.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSImage+MM.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/11/29. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | @interface NSImage (MM) 15 | 16 | + (NSImage *)mm_imageWithSize:(CGSize)size graphicsContext:(void (^NS_NOESCAPE)(CGContextRef ctx))block; 17 | 18 | - (NSData *)mm_PNGData; 19 | 20 | - (NSData *)mm_JPEGData; 21 | 22 | - (BOOL)mm_writeToFileAsPNG:(NSString *)path; 23 | 24 | - (BOOL)mm_writeToFileAsJPEG:(NSString *)path; 25 | 26 | 27 | - (NSImage *)imageWithTintColor:(NSColor *)tintColor; 28 | 29 | @end 30 | 31 | NS_ASSUME_NONNULL_END 32 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Category/NSPasteboard+MM.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSPasteboard+MM.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/12/11. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | 14 | @interface NSPasteboard (MM) 15 | 16 | + (BOOL)mm_generalPasteboardSetString:(NSString *)string; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Category/NSPasteboard+MM.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSPasteboard+MM.m 3 | // Bob 4 | // 5 | // Created by ripper on 2019/12/11. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import "NSPasteboard+MM.h" 10 | 11 | @implementation NSPasteboard (MM) 12 | 13 | + (BOOL)mm_generalPasteboardSetString:(NSString *)string { 14 | if (!string.length) { 15 | return NO; 16 | } 17 | 18 | NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; 19 | [pasteboard clearContents]; 20 | return [pasteboard setString:string forType:NSPasteboardTypeString]; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Crash/MMCrash.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMCrash.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/12/10. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | ///------------------------------------------------ 10 | /// Code From https://github.com/didi/DoraemonKit 11 | ///------------------------------------------------ 12 | 13 | #import 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | 18 | @interface MMCrash : NSObject 19 | 20 | + (void)registerHandler; 21 | 22 | + (NSString *)crashDirectory; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Crash/MMCrash.m: -------------------------------------------------------------------------------- 1 | // 2 | // MMCrash.m 3 | // Bob 4 | // 5 | // Created by ripper on 2019/12/10. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import "MMCrash.h" 10 | #import "MMCrashUncaughtExceptionHandler.h" 11 | #import "MMCrashSignalExceptionHandler.h" 12 | #import "MMCrashFileTool.h" 13 | 14 | 15 | @implementation MMCrash 16 | 17 | + (void)registerHandler { 18 | [MMCrashUncaughtExceptionHandler registerHandler]; 19 | [MMCrashSignalExceptionHandler registerHandler]; 20 | } 21 | 22 | + (NSString *)crashDirectory { 23 | return [MMCrashFileTool crashDirectory]; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Crash/MMCrashFileTool.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMCrashFileTool.h 3 | // MMKit 4 | // 5 | // Created by wenquan on 2018/11/22. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | 13 | @interface MMCrashFileTool : NSObject 14 | 15 | /** 16 | 保存崩溃日志到沙盒中的Library/Caches/Crash目录下 17 | 18 | @param log 崩溃日志的内容 19 | @param fileName 保存的文件名 20 | */ 21 | + (void)saveCrashLog:(NSString *)log fileName:(NSString *)fileName; 22 | 23 | /** 24 | 获取崩溃日志的目录 25 | 26 | @return 崩溃日志的目录 27 | */ 28 | + (NSString *)crashDirectory; 29 | 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Crash/MMCrashSignalExceptionHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMCrashSignalExceptionHandler.h 3 | // MMKit 4 | // 5 | // Created by wenquan on 2018/11/22. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | 13 | @interface MMCrashSignalExceptionHandler : NSObject 14 | 15 | + (void)registerHandler; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Crash/MMCrashUncaughtExceptionHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMCrashUncaughtExceptionHandler.h 3 | // MMKit 4 | // 5 | // Created by wenquan on 2018/11/22. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | 13 | @interface MMCrashUncaughtExceptionHandler : NSObject 14 | 15 | + (void)registerHandler; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Kit/MMMacro.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMMacro.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/11/12. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #define mm_weakify(...) @weakify(__VA_ARGS__) 10 | #define mm_strongify(...) @strongify(__VA_ARGS__) 11 | 12 | #define mm_ignoreUnusedVariableWarning(var) (void)(var); 13 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Kit/MMTool.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMTool.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/12/19. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | // NSPointInRect 不包含边框,MMPointInRect 包含边框 14 | BOOL MMPointInRect(NSPoint aPoint, NSRect aRect); 15 | 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Kit/MMTool.m: -------------------------------------------------------------------------------- 1 | // 2 | // MMTool.m 3 | // Bob 4 | // 5 | // Created by ripper on 2019/12/19. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import "MMTool.h" 10 | 11 | BOOL MMPointInRect(NSPoint aPoint, NSRect aRect) { 12 | if (aPoint.x >= aRect.origin.x && 13 | aPoint.y >= aRect.origin.y && 14 | aPoint.x <= aRect.origin.x + aRect.size.width && 15 | aPoint.y <= aRect.origin.y + aRect.size.height) { 16 | return YES; 17 | } 18 | return NO; 19 | } 20 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Log/MMConsoleLogFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMConsoleLogFormatter.h 3 | // ExampleDevelop 4 | // 5 | // Created by ripper on 2019/6/19. 6 | // Copyright © 2019 picooc. All rights reserved. 7 | // 8 | 9 | #import 10 | @import CocoaLumberjack; 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MMConsoleLogFormatter : NSObject 15 | 16 | - (NSString *)logMessageEmoji:(DDLogMessage *)logMessage; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/MMKit/Log/MMFileLogFormatter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MMFileLogFormatter.h 3 | // Bob 4 | // 5 | // Created by ripper on 2019/6/14. 6 | // Copyright © 2019 ripperhe. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "MMConsoleLogFormatter.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MMFileLogFormatter : MMConsoleLogFormatter 15 | 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Apple/EZAppleService.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZAppleService.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/29. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZQueryService.h" 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZAppleService : EZQueryService 15 | 16 | + (instancetype)shared; 17 | 18 | - (EZLanguage)languageEnumFromAppleLanguage:(NLLanguage)appleLanguage; 19 | - (NLLanguage)appleLanguageFromLanguageEnum:(EZLanguage)lang; 20 | 21 | - (NSSpeechSynthesizer *)playTextAudio:(NSString *)text textLanguage:(EZLanguage)fromLanguage; 22 | 23 | - (EZLanguage)detectText:(NSString *)text; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Baidu/EZBaiduTranslate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZBaiduService.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/30. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZQueryService.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZBaiduTranslate : EZQueryService 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Bing/EZBingLookupModel.m: -------------------------------------------------------------------------------- 1 | // 2 | // EZBingLookupModel.m 3 | // Easydict 4 | // 5 | // Created by choykarl on 2023/8/10. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZBingLookupModel.h" 10 | 11 | @implementation EZBingLookupBackTranslationsModel 12 | 13 | @end 14 | 15 | @implementation EZBingLookupTranslationsModel 16 | + (NSDictionary *)mj_objectClassInArray { 17 | return @{ 18 | @"backTranslations": [EZBingLookupBackTranslationsModel class] 19 | }; 20 | } 21 | 22 | @end 23 | 24 | @implementation EZBingLookupModel 25 | + (NSDictionary *)mj_objectClassInArray { 26 | return @{ 27 | @"translations": [EZBingLookupTranslationsModel class] 28 | }; 29 | } 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Bing/EZBingService.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZBingService.h 3 | // Easydict 4 | // 5 | // Created by choykarl on 2023/8/8. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZQueryService.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZBingService : EZQueryService 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/Service/DeepL/EZDeepLTranslate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZDeepLTranslate.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/7. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZQueryService.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZDeepLTranslate : EZQueryService 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/Service/DeepL/EZQueryResult+EZDeepLTranslateResponse.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZQueryResult+EZDeepLTranslateResponse.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/2/23. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZQueryResult.h" 10 | #import "EZDeepLTranslateResponse.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZQueryResult (EZDeepLTranslateResponse) 15 | 16 | - (instancetype)setupWithDeepLTranslateResponse:(EZDeepLTranslateResponse *)deepLTranslateResponse; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Google/EZGoogleTranslate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZGoogleTranslate.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/1. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZQueryService.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZGoogleTranslate : EZQueryService 14 | 15 | @property (nonatomic, assign) BOOL isCN; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Model/EZOCRResult.m: -------------------------------------------------------------------------------- 1 | // 2 | // EZOCRResult.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/30. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZOCRResult.h" 10 | 11 | @implementation EZOCRText 12 | 13 | @end 14 | 15 | 16 | @implementation EZOCRResult 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Niutrans/EZNiuTransTranslate.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZNiuTransTranslate.h 3 | // Easydict 4 | // 5 | // Created by BigGuang97 on 2023/11/23. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZQueryService.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZNiuTransTranslate : EZQueryService 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/Service/Niutrans/EZNiuTransTranslateResponse.m: -------------------------------------------------------------------------------- 1 | // 2 | // EZNiuTransTranslateResponse.m 3 | // Easydict 4 | // 5 | // Created by BigGuang97 on 2023/11/23. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZNiuTransTranslateResponse.h" 10 | 11 | @implementation EZNiuTransTranslateResponse 12 | 13 | + (NSDictionary *)mj_replacedKeyFromPropertyName { 14 | return @{ 15 | @"srcText" : @"src_text", 16 | @"tgtText" : @"tgt_text", 17 | @"errorMsg" : @"error_msg", 18 | @"errorCode" : @"error_code", 19 | }; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Easydict/objc/Service/WebViewTranslator/EZURLSchemeHandler.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZURLSchemeHandler.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/8. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZURLSchemeHandler : NSObject 15 | 16 | - (void)monitorBaseURLString:(NSString *)url completionHandler:(nullable void (^)(NSURLResponse *_Nonnull response, id _Nullable responseObject, NSError *_Nullable error))completionHandler; 17 | 18 | - (void)removeMonitorBaseURLString:(NSString *)url; 19 | - (BOOL)containsMonitorBaseURLString:(NSString *)url; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Easydict/objc/StatusItem/EZRightClickDetector.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZRightClickDetector.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/18. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | // Ref: https://stackoverflow.com/questions/32188581/call-action-when-nsstatusbarbutton-is-right-clicked 14 | @interface EZRightClickDetector : NSView 15 | 16 | @property (copy) void (^onRightMouseClicked)(NSEvent *); 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/StatusItem/EZRightClickDetector.m: -------------------------------------------------------------------------------- 1 | // 2 | // EZRightClickDetector.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/18. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZRightClickDetector.h" 10 | 11 | @implementation EZRightClickDetector 12 | 13 | - (void)rightMouseUp:(NSEvent *)theEvent { 14 | if (self.onRightMouseClicked) { 15 | self.onRightMouseClicked(theEvent); 16 | } 17 | } 18 | 19 | - (void)drawRect:(NSRect)dirtyRect { 20 | [super drawRect:dirtyRect]; 21 | 22 | // Drawing code here. 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZAudioUtils/EZAudioUtils.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZAudioUtils.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/3/30. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZAudioUtils : NSObject 14 | 15 | /// Get system volume, [0, 100] 16 | + (float)getSystemVolume; 17 | 18 | /// Set system volume, [0, 100] 19 | + (void)setSystemVolume:(float)volume; 20 | 21 | + (void)getPlayingSongInfo; 22 | 23 | + (void)isPlayingAudio:(void(^)(BOOL isPlaying))completion; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSArray+EZChineseText.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+EZChineseText.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/5/4. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSArray (EZChineseText) 14 | 15 | /// Convert translated results to Traditional Chinese manually. 开门 --> 開門 16 | - (NSArray *)toTraditionalChineseTexts; 17 | 18 | /// Convert translated results to Simplified Chinese manually. 開門 --> 开门 19 | - (NSArray *)toSimplifiedChineseTexts; 20 | 21 | - (NSArray *)removeExtraLineBreaks; 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSData+MD5/NSData+EZMD5.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSData+EZMD5.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/5/2. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSData (EZMD5) 14 | 15 | - (NSData *)md5; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSImage/NSImage+EZResize.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSImage+EZResize.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/24. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSImage (EZResize) 14 | 15 | - (NSImage *)resizeToSize:(CGSize)size; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSImage/NSImage+EZResize.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSImage+EZResize.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/24. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "NSImage+EZResize.h" 10 | 11 | @implementation NSImage (EZResize) 12 | 13 | - (NSImage *)resizeToSize:(NSSize)size { 14 | NSImage *image = [[NSImage alloc] initWithSize:size]; 15 | [image lockFocus]; 16 | [self drawInRect:NSMakeRect(0, 0, size.width, size.height) 17 | fromRect:NSZeroRect 18 | operation:NSCompositingOperationSourceOver 19 | fraction:1.0]; 20 | [image unlockFocus]; 21 | return image; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSImage/NSImage+EZSymbolmage.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSImage+EZSymbolmage.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/23. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSImage (EZSymbolmage) 14 | 15 | + (NSImage *)ez_imageWithSymbolName:(NSString *)name; 16 | 17 | + (NSImage *)ez_imageWithSymbolName:(NSString *)name size:(CGSize)size scale:(NSImageSymbolScale)scale; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSObject+DarkMode/NSObject+EZDarkMode.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+EZDarkMode.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/7. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSObject (EZDarkMode) 14 | 15 | @property (nonatomic, readonly) BOOL isDarkMode; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSObject+DarkMode/NSObject+EZDarkMode.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+EZDarkMode.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/7. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "NSObject+EZDarkMode.h" 10 | 11 | @implementation NSObject (EZDarkMode) 12 | 13 | - (BOOL)isDarkMode { 14 | NSAppearance *apperance = NSApp.effectiveAppearance; 15 | if (@available(macOS 10.14, *)) { 16 | return [apperance bestMatchFromAppearancesWithNames:@[NSAppearanceNameDarkAqua, NSAppearanceNameAqua]] == NSAppearanceNameDarkAqua; 17 | } 18 | return NO; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSObject+EZWindowType.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+EZWindowType.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/24. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZLayoutManager.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface NSObject (EZWindowType) 15 | 16 | @property (nonatomic, assign) EZWindowType associatedWindowType; 17 | 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSObject+EZWindowType.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+EZWindowType.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/24. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "NSObject+EZWindowType.h" 10 | 11 | static NSString *_EZWindowTypeKey = @"EZWindowTypeKey"; 12 | 13 | @implementation NSObject (EZWindowType) 14 | 15 | - (void)setAssociatedWindowType:(EZWindowType)windowType { 16 | objc_setAssociatedObject(self, (__bridge const void *)(_EZWindowTypeKey), @(windowType), OBJC_ASSOCIATION_RETAIN_NONATOMIC); 17 | } 18 | 19 | - (EZWindowType)associatedWindowType { 20 | return [objc_getAssociatedObject(self, (__bridge const void *)(_EZWindowTypeKey)) integerValue]; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSString/NSString+EZRegex.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+EZRegex.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/9/5. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSString (EZRegex) 14 | 15 | /// Get string value from HTML string with pattern. 16 | - (nullable NSString *)getStringValueWithPattern:(NSString *)pattern; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSTextView+Height/NSTextView+Height.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSTextView+AutoHeight.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/7. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSTextView (Height) 14 | 15 | - (CGSize)ez_getTextViewSize; 16 | 17 | /// One line height 18 | - (CGFloat)ez_getTextViewHeight; 19 | 20 | - (CGFloat)ez_getTextViewHeightDesignatedWidth:(CGFloat)width; 21 | 22 | 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSView+AnimatedHidden/NSView+EZAnimatedHidden.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+EZHiddenWithAnimation.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/10. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSView (EZAnimatedHidden) 14 | 15 | - (void)setAnimatedHidden:(BOOL)hidden; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSView+EZGetViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+EZGetViewController.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/21. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSView (EZGetViewController) 14 | 15 | - (NSViewController *)ez_getViewController; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSView+EZGetViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSView+EZGetViewController.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/21. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "NSView+EZGetViewController.h" 10 | 11 | @implementation NSView (EZGetViewController) 12 | 13 | - (NSViewController *)ez_getViewController { 14 | NSResponder *responder = self; 15 | while (responder) { 16 | if ([responder isKindOfClass:[NSViewController class]]) { 17 | return (NSViewController *)responder; 18 | } 19 | responder = responder.nextResponder; 20 | } 21 | return nil; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSViewController+EZWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSViewController+EZWindow.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/19. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSViewController (EZWindow) 14 | 15 | - (nullable NSWindow *)window; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZCategory/NSViewController+EZWindow.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSViewController+EZWindow.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/19. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "NSViewController+EZWindow.h" 10 | 11 | @implementation NSViewController (EZWindow) 12 | 13 | - (nullable NSWindow *)window { 14 | NSResponder *responder = self; 15 | while ((responder = [responder nextResponder])) { 16 | if ([responder isKindOfClass:[NSWindow class]]) { 17 | return (NSWindow *)responder; 18 | } 19 | } 20 | return nil; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/EZDeviceSystemInfo/EZDeviceSystemInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZDeviceSystemInfo.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/7/12. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZDeviceSystemInfo : NSObject 14 | 15 | + (NSDictionary *)getDeviceSystemInfo; 16 | 17 | /// Get system version, eg 14.0.0 18 | + (NSString *)getSystemVersion; 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/PrintBeautifulLog/PrintBeautifulLog.h: -------------------------------------------------------------------------------- 1 | // 2 | // PrintBeautifulLog.h 3 | // PrintBeautifulLog 4 | // 5 | // Created by 石学谦 on 2018/9/14. 6 | // Copyright © 2018年 shixueqian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | -------------------------------------------------------------------------------- /Easydict/objc/Utility/SystemUtility/EZSystemUtility.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZSystemUtility.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/10/15. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZSystemUtility : NSObject 14 | 15 | #pragma mark - Simulate Key Event 16 | 17 | + (void)postCopyEvent; 18 | + (void)postPasteEvent; 19 | 20 | + (void)postKeyboardEvent:(CGEventFlags)flags virtualKey:(CGKeyCode)virtualKey keyDown:(bool)keyDown; 21 | 22 | #pragma mark - 23 | 24 | + (BOOL)isSelectedTextEditable; 25 | 26 | + (NSString *)getLastPasteboardText; 27 | 28 | @end 29 | 30 | 31 | NS_ASSUME_NONNULL_END 32 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Cell/EZSelectLanguageCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZSelectLanguageCell.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/22. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZLanguageManager.h" 11 | #import "EZQueryModel.h" 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface EZSelectLanguageCell : NSTableRowView 16 | 17 | @property (nonatomic, strong) EZQueryModel *queryModel; 18 | 19 | @property (nonatomic, copy) void (^enterActionBlock)(EZLanguage from, EZLanguage to); 20 | 21 | - (void)toggleTranslationLanguages; 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Cell/EZTableRowView.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZResultRowView.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/29. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZTableRowView : NSTableRowView 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Cell/EZTableRowView.m: -------------------------------------------------------------------------------- 1 | // 2 | // EZResultRowView.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/29. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZTableRowView.h" 10 | 11 | @implementation EZTableRowView 12 | 13 | - (void)drawRect:(NSRect)dirtyRect { 14 | [super drawRect:dirtyRect]; 15 | 16 | // Drawing code here. 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Model/EZServiceInfo.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZServiceInfo.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/22. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZServiceTypes.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZServiceInfo : NSObject 15 | 16 | @property (nonatomic, strong) NSString *uuid; 17 | @property (nonatomic, assign) EZServiceType type; 18 | @property (nonatomic, assign) BOOL enabled; 19 | @property (nonatomic, assign) BOOL enabledQuery; 20 | @property (nonatomic, assign) EZWindowType windowType; 21 | 22 | + (instancetype)serviceInfoWithService:(EZQueryService *)service; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Model/EZServiceInfo.m: -------------------------------------------------------------------------------- 1 | // 2 | // EZServiceInfo.m 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/22. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZServiceInfo.h" 10 | 11 | @implementation EZServiceInfo 12 | 13 | + (instancetype)serviceInfoWithService:(EZQueryService *)service { 14 | EZServiceInfo *serviceInfo = [[EZServiceInfo alloc] init]; 15 | serviceInfo.type = service.serviceType; 16 | serviceInfo.enabled = service.enabled; 17 | serviceInfo.enabledQuery = service.enabledQuery; 18 | serviceInfo.windowType = service.windowType; 19 | serviceInfo.uuid = service.uuid; 20 | return serviceInfo; 21 | } 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CommonView/EZCommonView.h: -------------------------------------------------------------------------------- 1 | // 2 | // EDAudioView.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/8. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZCommonView : NSView 14 | 15 | @property (nonatomic, copy, readonly) NSString *copiedText; 16 | 17 | @property (nonatomic, strong) NSButton *audioButton; 18 | @property (nonatomic, strong) NSButton *textCopyButton; 19 | 20 | @property (nonatomic, copy) void (^playAudioBlock)(NSString *text); 21 | @property (nonatomic, copy) void (^copyTextBlock)(NSString *text); 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CustomButton/BlueTextButton/EZBlueTextButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZBlueTextButton.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/13. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZHoverButton.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZBlueTextButton : EZHoverButton 14 | 15 | @property (nonatomic, assign) CGFloat expandValue; // default is 5. 16 | 17 | @property (nonatomic, copy, nullable) NSString *openURL; 18 | @property (nonatomic, assign) BOOL closeWindowAfterOpeningURL; 19 | 20 | @property (nonatomic, assign) CGFloat fontSize; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CustomButton/EZAudioButton/EZAudioButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZAudioButton.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/23. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZHoverButton.h" 10 | #import "EZAudioPlayer.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZAudioButton : EZHoverButton 15 | 16 | @property (nonatomic, strong) EZAudioPlayer *audioPlayer; 17 | 18 | @property (nonatomic, copy) void (^playAudioBlock)(void); 19 | 20 | @property (nonatomic, copy) void (^playStatus)(BOOL isPlaying, EZAudioButton *audioButton); 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CustomButton/EZCopyButton/EZCopyButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZCopyButton.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/24. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZHoverButton.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZCopyButton : EZHoverButton 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CustomButton/EZHoverButton/EZHoverButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // HoverButton.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/5. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZButton.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | /// An button that show round corner and highlight background color when hover button automatically. 15 | @interface EZHoverButton : EZButton 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CustomButton/EZReplaceTextButton/EZReplaceTextButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZReplaceTextButton.h 3 | // 4 | // 5 | // Created by tisfeng on 2023/10/13. 6 | // 7 | 8 | #import "EZHoverButton.h" 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @interface EZReplaceTextButton : EZHoverButton 13 | 14 | - (void)replaceSelectedText:(NSString *)replacementString; 15 | 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CustomButton/EZSymbolImageButton/EZSymbolImageButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZSymbolImageButton.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/4/24. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import "EZHoverButton.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZSymbolImageButton : EZHoverButton 14 | 15 | + (instancetype)buttonWithSybolImageName:(NSString *)sybolImageName; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/CustomButton/LanguageButton/EZDetectLanguageButton.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZDetectLanguageButton.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/1. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import "EZButton.h" 10 | #import "EZLanguageManager.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZDetectLanguageButton : EZButton 15 | 16 | @property (nonatomic, copy) EZLanguage detectedLanguage; 17 | @property (nonatomic, assign) BOOL showAutoLanguage; 18 | 19 | @property (nonatomic, copy) void (^menuItemSeletedBlock)(EZLanguage selectedLanguage); 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/EZLabel/EZMyLabel.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZMyLabel.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/12/13. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZMyLabel : NSTextField 14 | 15 | @property (nonatomic, assign) CGFloat characterSpacing; 16 | @property (nonatomic, assign) CGFloat lineSpacing; 17 | @property (nonatomic, assign) CGFloat paragraphSpacing; 18 | 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/EZQueryMenuTextView/EZQueryMenuTextView.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZQueryMenuTextView.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/10/17. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZQueryMenuTextView : NSTextView 14 | 15 | - (void)queryInApp:(id)sender; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/EZWrapView/EZWrapView.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZWrapView.h 3 | // Easydict 4 | // 5 | // Created by choykarl on 2023/11/28. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZWrapView : NSView 14 | @property (nonatomic, assign) CGFloat spacing; 15 | @property (nonatomic, assign) CGFloat runSpacing; 16 | @end 17 | 18 | NS_ASSUME_NONNULL_END 19 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/LoadingAnimationView/EZLoadingAnimationView.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZLoadingAnimationView.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2023/1/8. 6 | // Copyright © 2023 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZLoadingAnimationView : NSView 14 | 15 | - (void)startLoading:(BOOL)isLoading; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/View/Titlebar/EZTitleBarMoveView.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZTitleBarMoveView.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/21. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface EZTitleBarMoveView : NSView 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Window/FixedQueryWindow/EZFixedQueryWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // MainWindow.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/3. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZBaseQueryWindow.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | /// Fixed window alway show at the designated position, and it will keep previous query result. It can be resized window size. 15 | @interface EZFixedQueryWindow : EZBaseQueryWindow 16 | 17 | + (instancetype)shared; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Window/MainQueryWindow/EZMainQueryWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZMainQueryWindow.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/19. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZBaseQueryWindow.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZMainQueryWindow : EZBaseQueryWindow 15 | 16 | @property (class, assign, readonly) BOOL isAlive; 17 | 18 | + (instancetype)shared; 19 | + (void)destroySharedInstance; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Window/MiniQueryWindow/EZMiniQueryWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZMiniQueryWindow.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/19. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZBaseQueryWindow.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | 15 | /// Mini window alway show at the mouse location, it won't keep previous query result and can't be resized window size. 16 | @interface EZMiniQueryWindow : EZBaseQueryWindow 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Window/PopButtonWindow/EZPopButtonViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZSelectTextPopViewController.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/17. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZButton.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZPopButtonViewController : NSViewController 15 | 16 | @property (nonatomic, strong) EZButton *popButton; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /Easydict/objc/ViewController/Window/PopButtonWindow/EZPopButtonWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // EZSelectTextPopWindow.h 3 | // Easydict 4 | // 5 | // Created by tisfeng on 2022/11/17. 6 | // Copyright © 2022 izual. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "EZButton.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface EZPopButtonWindow : NSWindow 15 | 16 | @property (nonatomic, strong) EZButton *popButton; 17 | 18 | + (instancetype)shared; 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'cocoapods', '1.14.2' 3 | -------------------------------------------------------------------------------- /Icon : -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Icon -------------------------------------------------------------------------------- /Pods/KVOController/FBKVOController/KVOController.h: -------------------------------------------------------------------------------- 1 | /** 2 | Copyright (c) 2014-present, Facebook, Inc. 3 | All rights reserved. 4 | 5 | This source code is licensed under the BSD-style license found in the 6 | LICENSE file in the root directory of this source tree. An additional grant 7 | of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | #import 12 | -------------------------------------------------------------------------------- /Pods/Masonry/Masonry/MASCompositeConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASCompositeConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 21/07/13. 6 | // Copyright (c) 2013 cloudling. All rights reserved. 7 | // 8 | 9 | #import "MASConstraint.h" 10 | #import "MASUtilities.h" 11 | 12 | /** 13 | * A group of MASConstraint objects 14 | */ 15 | @interface MASCompositeConstraint : MASConstraint 16 | 17 | /** 18 | * Creates a composite with a predefined array of children 19 | * 20 | * @param children child MASConstraints 21 | * 22 | * @return a composite constraint 23 | */ 24 | - (id)initWithChildren:(NSArray *)children; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /Pods/Masonry/Masonry/MASLayoutConstraint.h: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * When you are debugging or printing the constraints attached to a view this subclass 13 | * makes it easier to identify which constraints have been created via Masonry 14 | */ 15 | @interface MASLayoutConstraint : NSLayoutConstraint 16 | 17 | /** 18 | * a key to associate with this constraint 19 | */ 20 | @property (nonatomic, strong) id mas_key; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/Masonry/Masonry/MASLayoutConstraint.m: -------------------------------------------------------------------------------- 1 | // 2 | // MASLayoutConstraint.m 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASLayoutConstraint.h" 10 | 11 | @implementation MASLayoutConstraint 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Pods/Masonry/Masonry/NSLayoutConstraint+MASDebugAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSLayoutConstraint+MASDebugAdditions.h 3 | // Masonry 4 | // 5 | // Created by Jonas Budelmann on 3/08/13. 6 | // Copyright (c) 2013 Jonas Budelmann. All rights reserved. 7 | // 8 | 9 | #import "MASUtilities.h" 10 | 11 | /** 12 | * makes debug and log output of NSLayoutConstraints more readable 13 | */ 14 | @interface NSLayoutConstraint (MASDebugAdditions) 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSArray+RACSequenceAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+RACSequenceAdditions.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class RACSequence<__covariant ValueType>; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface NSArray<__covariant ObjectType> (RACSequenceAdditions) 16 | 17 | /// Creates and returns a sequence corresponding to the receiver. 18 | /// 19 | /// Mutating the receiver will not affect the sequence after it's been created. 20 | @property (nonatomic, copy, readonly) RACSequence *rac_sequence; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSArray+RACSequenceAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSArray+RACSequenceAdditions.m 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import "NSArray+RACSequenceAdditions.h" 10 | #import "RACArraySequence.h" 11 | 12 | @implementation NSArray (RACSequenceAdditions) 13 | 14 | - (RACSequence *)rac_sequence { 15 | return [RACArraySequence sequenceWithArray:self offset:0]; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSEnumerator+RACSequenceAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSEnumerator+RACSequenceAdditions.h 3 | // ReactiveObjC 4 | // 5 | // Created by Uri Baghin on 07/01/2013. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class RACSequence<__covariant ValueType>; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface NSEnumerator (RACSequenceAdditions) 16 | 17 | /// Creates and returns a sequence corresponding to the receiver. 18 | /// 19 | /// The receiver is exhausted lazily as the sequence is enumerated. 20 | @property (nonatomic, copy, readonly) RACSequence *rac_sequence; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSEnumerator+RACSequenceAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSEnumerator+RACSequenceAdditions.m 3 | // ReactiveObjC 4 | // 5 | // Created by Uri Baghin on 07/01/2013. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "NSEnumerator+RACSequenceAdditions.h" 10 | #import "RACSequence.h" 11 | 12 | @implementation NSEnumerator (RACSequenceAdditions) 13 | 14 | - (RACSequence *)rac_sequence { 15 | return [RACSequence sequenceWithHeadBlock:^{ 16 | return [self nextObject]; 17 | } tailBlock:^{ 18 | return self.rac_sequence; 19 | }]; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSFileHandle+RACSupport.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSFileHandle+RACSupport.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 5/10/12. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class RACSignal<__covariant ValueType>; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface NSFileHandle (RACSupport) 16 | 17 | // Read any available data in the background and send it. Completes when data 18 | // length is <= 0. 19 | - (RACSignal *)rac_readInBackground; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSIndexSet+RACSequenceAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSIndexSet+RACSequenceAdditions.m 3 | // ReactiveObjC 4 | // 5 | // Created by Sergey Gavrilyuk on 12/17/13. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "NSIndexSet+RACSequenceAdditions.h" 10 | #import "RACIndexSetSequence.h" 11 | 12 | @implementation NSIndexSet (RACSequenceAdditions) 13 | 14 | - (RACSequence *)rac_sequence { 15 | return [RACIndexSetSequence sequenceWithIndexSet:self]; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSNotificationCenter+RACSupport.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSNotificationCenter+RACSupport.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 5/10/12. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class RACSignal<__covariant ValueType>; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface NSNotificationCenter (RACSupport) 16 | 17 | // Sends the NSNotification every time the notification is posted. 18 | - (RACSignal *)rac_addObserverForName:(nullable NSString *)notificationName object:(nullable id)object; 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSObject+RACDescription.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+RACDescription.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-05-13. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | // A simplified description of the object, which does not invoke -description 12 | // (and thus should be much faster in many cases). 13 | // 14 | // This is for debugging purposes only, and will return a constant string 15 | // unless the RAC_DEBUG_SIGNAL_NAMES environment variable is set. 16 | NSString *RACDescription(id object); 17 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSOrderedSet+RACSequenceAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSOrderedSet+RACSequenceAdditions.m 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import "NSOrderedSet+RACSequenceAdditions.h" 10 | #import "NSArray+RACSequenceAdditions.h" 11 | 12 | @implementation NSOrderedSet (RACSequenceAdditions) 13 | 14 | - (RACSequence *)rac_sequence { 15 | // TODO: First class support for ordered set sequences. 16 | return self.array.rac_sequence; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSSet+RACSequenceAdditions.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSSet+RACSequenceAdditions.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class RACSequence<__covariant ValueType>; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface NSSet<__covariant ObjectType> (RACSequenceAdditions) 16 | 17 | /// Creates and returns a sequence corresponding to the receiver. 18 | /// 19 | /// Mutating the receiver will not affect the sequence after it's been created. 20 | @property (nonatomic, copy, readonly) RACSequence *rac_sequence; 21 | 22 | @end 23 | 24 | NS_ASSUME_NONNULL_END 25 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSSet+RACSequenceAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSSet+RACSequenceAdditions.m 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import "NSSet+RACSequenceAdditions.h" 10 | #import "NSArray+RACSequenceAdditions.h" 11 | 12 | @implementation NSSet (RACSequenceAdditions) 13 | 14 | - (RACSequence *)rac_sequence { 15 | // TODO: First class support for set sequences. 16 | return self.allObjects.rac_sequence; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSString+RACSequenceAdditions.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+RACSequenceAdditions.m 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import "NSString+RACSequenceAdditions.h" 10 | #import "RACStringSequence.h" 11 | 12 | @implementation NSString (RACSequenceAdditions) 13 | 14 | - (RACSequence *)rac_sequence { 15 | return [RACStringSequence sequenceWithString:self offset:0]; 16 | } 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/NSText+RACSignalSupport.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSText+RACSignalSupport.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-03-08. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class RACSignal<__covariant ValueType>; 12 | 13 | NS_ASSUME_NONNULL_BEGIN 14 | 15 | @interface NSText (RACSignalSupport) 16 | 17 | /// Returns a signal which sends the current `string` of the receiver, then the 18 | /// new value any time it changes. 19 | - (RACSignal *)rac_textSignal; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACAnnotations.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACAnnotations.h 3 | // ReactiveObjC 4 | // 5 | // Created by Eric Horacek on 3/31/17. 6 | // Copyright © 2017 GitHub. All rights reserved. 7 | // 8 | 9 | #ifndef RAC_WARN_UNUSED_RESULT 10 | #define RAC_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) 11 | #endif 12 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACArraySequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACArraySequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import "RACSequence.h" 10 | 11 | // Private class that adapts an array to the RACSequence interface. 12 | @interface RACArraySequence : RACSequence 13 | 14 | // Returns a sequence for enumerating over the given array, starting from the 15 | // given offset. The array will be copied to prevent mutation. 16 | + (RACSequence *)sequenceWithArray:(NSArray *)array offset:(NSUInteger)offset; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACBehaviorSubject.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACBehaviorSubject.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 3/16/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSubject.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// A behavior subject sends the last value it received when it is subscribed to. 14 | @interface RACBehaviorSubject : RACSubject 15 | 16 | /// Creates a new behavior subject with a default value. If it hasn't received 17 | /// any values when it gets subscribed to, it sends the default value. 18 | + (instancetype)behaviorSubjectWithDefaultValue:(nullable ValueType)value; 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACCompoundDisposableProvider.d: -------------------------------------------------------------------------------- 1 | provider RACCompoundDisposable { 2 | probe added(char *compoundDisposable, char *disposable, long newTotal); 3 | probe removed(char *compoundDisposable, char *disposable, long newTotal); 4 | }; 5 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACDynamicSignal.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACDynamicSignal.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-10-10. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSignal.h" 10 | 11 | // A private `RACSignal` subclasses that implements its subscription behavior 12 | // using a block. 13 | @interface RACDynamicSignal : RACSignal 14 | 15 | + (RACSignal *)createSignal:(RACDisposable * (^)(id subscriber))didSubscribe; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACEagerSequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACEagerSequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Uri Baghin on 02/01/2013. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACArraySequence.h" 10 | 11 | // Private class that implements an eager sequence. 12 | @interface RACEagerSequence : RACArraySequence 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACEmptySequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACEmptySequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import "RACSequence.h" 10 | 11 | // Private class representing an empty sequence. 12 | @interface RACEmptySequence : RACSequence 13 | 14 | + (RACEmptySequence *)empty; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACEmptySignal.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACEmptySignal.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-10-10. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSignal.h" 10 | 11 | // A private `RACSignal` subclasses that synchronously sends completed to any 12 | // subscribers. 13 | @interface RACEmptySignal<__covariant ValueType> : RACSignal 14 | 15 | + (RACSignal *)empty; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACErrorSignal.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACErrorSignal.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-10-10. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSignal.h" 10 | 11 | // A private `RACSignal` subclass that synchronously sends an error to any 12 | // subscriber. 13 | @interface RACErrorSignal : RACSignal 14 | 15 | + (RACSignal *)error:(NSError *)error; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACGroupedSignal.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACGroupedSignal.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 5/2/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSubject.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// A grouped signal is used by -[RACSignal groupBy:transform:]. 14 | @interface RACGroupedSignal : RACSubject 15 | 16 | /// The key shared by the group. 17 | @property (nonatomic, readonly, copy) id key; 18 | 19 | + (instancetype)signalWithKey:(id)key; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACGroupedSignal.m: -------------------------------------------------------------------------------- 1 | // 2 | // RACGroupedSignal.m 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 5/2/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACGroupedSignal.h" 10 | 11 | @interface RACGroupedSignal () 12 | @property (nonatomic, copy) id key; 13 | @end 14 | 15 | @implementation RACGroupedSignal 16 | 17 | #pragma mark API 18 | 19 | + (instancetype)signalWithKey:(id)key { 20 | RACGroupedSignal *subject = [self subject]; 21 | subject.key = key; 22 | return subject; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACImmediateScheduler.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACImmediateScheduler.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 11/30/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACScheduler.h" 10 | 11 | // A private scheduler which immediately executes its scheduled blocks. 12 | @interface RACImmediateScheduler : RACScheduler 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACIndexSetSequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACIndexSetSequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Sergey Gavrilyuk on 12/18/13. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSequence.h" 10 | 11 | // Private class that adapts an array to the RACSequence interface. 12 | @interface RACIndexSetSequence : RACSequence 13 | 14 | + (RACSequence *)sequenceWithIndexSet:(NSIndexSet *)indexSet; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACMulticastConnection+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACMulticastConnection+Private.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 4/11/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACMulticastConnection.h" 10 | 11 | @class RACSubject; 12 | 13 | @interface RACMulticastConnection<__covariant ValueType> () 14 | 15 | - (instancetype)initWithSourceSignal:(RACSignal *)source subject:(RACSubject *)subject; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACQueueScheduler.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACQueueScheduler.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 11/30/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACScheduler.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// An abstract scheduler which asynchronously enqueues all its work to a Grand 14 | /// Central Dispatch queue. 15 | /// 16 | /// Because RACQueueScheduler is abstract, it should not be instantiated 17 | /// directly. Create a subclass using the `RACQueueScheduler+Subclass.h` 18 | /// interface and use that instead. 19 | @interface RACQueueScheduler : RACScheduler 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACReturnSignal.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACReturnSignal.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-10-10. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSignal.h" 10 | 11 | // A private `RACSignal` subclasses that synchronously sends a value to any 12 | // subscribers, then completes. 13 | @interface RACReturnSignal<__covariant ValueType> : RACSignal 14 | 15 | + (RACSignal *)return:(ValueType)value; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACScopedDisposable.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACScopedDisposable.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 3/28/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACDisposable.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// A disposable that calls its own -dispose when it is dealloc'd. 14 | @interface RACScopedDisposable : RACDisposable 15 | 16 | /// Creates a new scoped disposable that will also dispose of the given 17 | /// disposable when it is dealloc'd. 18 | + (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable; 19 | 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACScopedDisposable.m: -------------------------------------------------------------------------------- 1 | // 2 | // RACScopedDisposable.m 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 3/28/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACScopedDisposable.h" 10 | 11 | @implementation RACScopedDisposable 12 | 13 | #pragma mark Lifecycle 14 | 15 | + (instancetype)scopedDisposableWithDisposable:(RACDisposable *)disposable { 16 | return [self disposableWithBlock:^{ 17 | [disposable dispose]; 18 | }]; 19 | } 20 | 21 | - (void)dealloc { 22 | [self dispose]; 23 | } 24 | 25 | #pragma mark RACDisposable 26 | 27 | - (RACScopedDisposable *)asScopedDisposable { 28 | // totally already are 29 | return self; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACSignalProvider.d: -------------------------------------------------------------------------------- 1 | provider RACSignal { 2 | probe next(char *signal, char *subscriber, char *valueDescription); 3 | probe completed(char *signal, char *subscriber); 4 | probe error(char *signal, char *subscriber, char *errorDescription); 5 | }; 6 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACSignalSequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACSignalSequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-11-09. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSequence.h" 10 | 11 | @class RACSignal<__covariant ValueType>; 12 | 13 | // Private class that adapts a RACSignal to the RACSequence interface. 14 | @interface RACSignalSequence : RACSequence 15 | 16 | // Returns a sequence for enumerating over the given signal. 17 | + (RACSequence *)sequenceWithSignal:(RACSignal *)signal; 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACStringSequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACStringSequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2012-10-29. 6 | // Copyright (c) 2012 GitHub. All rights reserved. 7 | // 8 | 9 | #import "RACSequence.h" 10 | 11 | // Private class that adapts a string to the RACSequence interface. 12 | @interface RACStringSequence : RACSequence 13 | 14 | // Returns a sequence for enumerating over the given string, starting from the 15 | // given character offset. The string will be copied to prevent mutation. 16 | + (RACSequence *)sequenceWithString:(NSString *)string offset:(NSUInteger)offset; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACSubscriber+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACSubscriber+Private.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-06-13. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSubscriber.h" 10 | 11 | // A simple block-based subscriber. 12 | @interface RACSubscriber : NSObject 13 | 14 | // Creates a new subscriber with the given blocks. 15 | + (instancetype)subscriberWithNext:(void (^)(id x))next error:(void (^)(NSError *error))error completed:(void (^)(void))completed; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACSubscriptionScheduler.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACSubscriptionScheduler.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 11/30/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACScheduler.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | // A private scheduler used only for subscriptions. See the private 14 | // +[RACScheduler subscriptionScheduler] method for more information. 15 | @interface RACSubscriptionScheduler : RACScheduler 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACTupleSequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACTupleSequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-05-01. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSequence.h" 10 | 11 | // Private class that adapts a RACTuple to the RACSequence interface. 12 | @interface RACTupleSequence : RACSequence 13 | 14 | // Returns a sequence for enumerating over the given backing array (from a 15 | // RACTuple), starting from the given offset. 16 | + (RACSequence *)sequenceWithTupleBackingArray:(NSArray *)backingArray offset:(NSUInteger)offset; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACUnarySequence.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACUnarySequence.h 3 | // ReactiveObjC 4 | // 5 | // Created by Justin Spahr-Summers on 2013-05-01. 6 | // Copyright (c) 2013 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACSequence.h" 10 | 11 | // Private class representing a sequence of exactly one value. 12 | @interface RACUnarySequence : RACSequence 13 | 14 | + (RACUnarySequence *)return:(id)value; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACUnit.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACUnit.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 3/27/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /// A unit represents an empty value. 14 | /// 15 | /// It should never be necessary to create a unit yourself. Just use +defaultUnit. 16 | @interface RACUnit : NSObject 17 | 18 | /// A singleton instance. 19 | + (RACUnit *)defaultUnit; 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACUnit.m: -------------------------------------------------------------------------------- 1 | // 2 | // RACUnit.m 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 3/27/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import "RACUnit.h" 10 | 11 | @implementation RACUnit 12 | 13 | #pragma mark API 14 | 15 | + (RACUnit *)defaultUnit { 16 | static dispatch_once_t onceToken; 17 | static RACUnit *defaultUnit = nil; 18 | dispatch_once(&onceToken, ^{ 19 | defaultUnit = [[self alloc] init]; 20 | }); 21 | 22 | return defaultUnit; 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Pods/ReactiveObjC/ReactiveObjC/RACValueTransformer.h: -------------------------------------------------------------------------------- 1 | // 2 | // RACValueTransformer.h 3 | // ReactiveObjC 4 | // 5 | // Created by Josh Abernathy on 3/6/12. 6 | // Copyright (c) 2012 GitHub, Inc. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | // A private block based transformer. 12 | @interface RACValueTransformer : NSValueTransformer 13 | 14 | + (instancetype)transformerWithBlock:(id (^)(id value))block; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Pods/SwiftFormat/CommandLineTool/swiftformat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Pods/SwiftFormat/CommandLineTool/swiftformat -------------------------------------------------------------------------------- /Pods/SwiftLint/swiftlint: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tisfeng/Easydict/415f826fdbbdd373e8a5ebb73c7710d81c619b76/Pods/SwiftLint/swiftlint -------------------------------------------------------------------------------- /Pods/Target Support Files/AFNetworking/AFNetworking-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_AFNetworking : NSObject 3 | @end 4 | @implementation PodsDummy_AFNetworking 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/AFNetworking/AFNetworking-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #ifndef TARGET_OS_IOS 14 | #define TARGET_OS_IOS TARGET_OS_IPHONE 15 | #endif 16 | 17 | #ifndef TARGET_OS_WATCH 18 | #define TARGET_OS_WATCH 0 19 | #endif 20 | 21 | #ifndef TARGET_OS_TV 22 | #define TARGET_OS_TV 0 23 | #endif 24 | -------------------------------------------------------------------------------- /Pods/Target Support Files/AFNetworking/AFNetworking-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "AFNetworking.h" 14 | #import "AFHTTPSessionManager.h" 15 | #import "AFURLSessionManager.h" 16 | #import "AFCompatibilityMacros.h" 17 | #import "AFNetworkReachabilityManager.h" 18 | #import "AFSecurityPolicy.h" 19 | #import "AFURLRequestSerialization.h" 20 | #import "AFURLResponseSerialization.h" 21 | 22 | FOUNDATION_EXPORT double AFNetworkingVersionNumber; 23 | FOUNDATION_EXPORT const unsigned char AFNetworkingVersionString[]; 24 | 25 | -------------------------------------------------------------------------------- /Pods/Target Support Files/AFNetworking/AFNetworking.modulemap: -------------------------------------------------------------------------------- 1 | framework module AFNetworking { 2 | umbrella header "AFNetworking-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/AFNetworking/AFNetworking.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AFNetworking 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "CoreServices" -framework "Security" -framework "SystemConfiguration" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/AFNetworking 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/JLRoutes/JLRoutes-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_JLRoutes : NSObject 3 | @end 4 | @implementation PodsDummy_JLRoutes 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/JLRoutes/JLRoutes-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/JLRoutes/JLRoutes-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "JLRoutes.h" 14 | #import "JLRParsingUtilities.h" 15 | #import "JLRRouteDefinition.h" 16 | #import "JLRRouteHandler.h" 17 | #import "JLRRouteRequest.h" 18 | #import "JLRRouteResponse.h" 19 | 20 | FOUNDATION_EXPORT double JLRoutesVersionNumber; 21 | FOUNDATION_EXPORT const unsigned char JLRoutesVersionString[]; 22 | 23 | -------------------------------------------------------------------------------- /Pods/Target Support Files/JLRoutes/JLRoutes.modulemap: -------------------------------------------------------------------------------- 1 | framework module JLRoutes { 2 | umbrella header "JLRoutes-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/KVOController/KVOController-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_KVOController : NSObject 3 | @end 4 | @implementation PodsDummy_KVOController 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/KVOController/KVOController-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/KVOController/KVOController-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "FBKVOController.h" 14 | #import "KVOController.h" 15 | #import "NSObject+FBKVOController.h" 16 | 17 | FOUNDATION_EXPORT double KVOControllerVersionNumber; 18 | FOUNDATION_EXPORT const unsigned char KVOControllerVersionString[]; 19 | 20 | -------------------------------------------------------------------------------- /Pods/Target Support Files/KVOController/KVOController.modulemap: -------------------------------------------------------------------------------- 1 | framework module KVOController { 2 | umbrella header "KVOController-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Masonry/Masonry-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Masonry : NSObject 3 | @end 4 | @implementation PodsDummy_Masonry 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Masonry/Masonry-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Masonry/Masonry.modulemap: -------------------------------------------------------------------------------- 1 | framework module Masonry { 2 | umbrella header "Masonry-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Masonry/Masonry.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Masonry 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "AppKit" -framework "Foundation" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/Masonry 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Easydict/Pods-Easydict-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Easydict : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Easydict 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Easydict/Pods-Easydict-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-Easydict/Pods-Easydict-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework 3 | ${BUILT_PRODUCTS_DIR}/JLRoutes/JLRoutes.framework 4 | ${BUILT_PRODUCTS_DIR}/KVOController/KVOController.framework 5 | ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework 6 | ${BUILT_PRODUCTS_DIR}/ReactiveObjC/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Easydict/Pods-Easydict-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JLRoutes.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KVOController.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Easydict/Pods-Easydict-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-Easydict/Pods-Easydict-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework 3 | ${BUILT_PRODUCTS_DIR}/JLRoutes/JLRoutes.framework 4 | ${BUILT_PRODUCTS_DIR}/KVOController/KVOController.framework 5 | ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework 6 | ${BUILT_PRODUCTS_DIR}/ReactiveObjC/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Easydict/Pods-Easydict-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JLRoutes.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KVOController.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Easydict/Pods-Easydict-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_EasydictVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_EasydictVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Easydict/Pods-Easydict.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Easydict { 2 | umbrella header "Pods-Easydict-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_EasydictTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_EasydictTests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-frameworks-Debug-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework 3 | ${BUILT_PRODUCTS_DIR}/JLRoutes/JLRoutes.framework 4 | ${BUILT_PRODUCTS_DIR}/KVOController/KVOController.framework 5 | ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework 6 | ${BUILT_PRODUCTS_DIR}/ReactiveObjC/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-frameworks-Debug-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JLRoutes.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KVOController.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-frameworks-Release-input-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${PODS_ROOT}/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-frameworks.sh 2 | ${BUILT_PRODUCTS_DIR}/AFNetworking/AFNetworking.framework 3 | ${BUILT_PRODUCTS_DIR}/JLRoutes/JLRoutes.framework 4 | ${BUILT_PRODUCTS_DIR}/KVOController/KVOController.framework 5 | ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework 6 | ${BUILT_PRODUCTS_DIR}/ReactiveObjC/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-frameworks-Release-output-files.xcfilelist: -------------------------------------------------------------------------------- 1 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AFNetworking.framework 2 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JLRoutes.framework 3 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KVOController.framework 4 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework 5 | ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactiveObjC.framework -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-EasydictTests/Pods-EasydictTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_EasydictTestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_EasydictTestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-EasydictTests/Pods-EasydictTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_EasydictTests { 2 | umbrella header "Pods-EasydictTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReactiveObjC/ReactiveObjC-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ReactiveObjC : NSObject 3 | @end 4 | @implementation PodsDummy_ReactiveObjC 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReactiveObjC/ReactiveObjC-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReactiveObjC/ReactiveObjC.modulemap: -------------------------------------------------------------------------------- 1 | framework module ReactiveObjC { 2 | umbrella header "ReactiveObjC-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReactiveObjC/ReactiveObjC.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReactiveObjC 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_LDFLAGS = $(inherited) -framework "Foundation" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/ReactiveObjC 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | --------------------------------------------------------------------------------