├── .gitignore
├── Dev
├── Typedown.Core
│ ├── Config.cs
│ ├── Controls
│ │ ├── CaptionControls
│ │ │ ├── Caption.xaml
│ │ │ └── Caption.xaml.cs
│ │ ├── CommonControls
│ │ │ ├── AppContentDialog.cs
│ │ │ ├── EnumNameBlock.cs
│ │ │ ├── GlobalFrame.cs
│ │ │ ├── GridSplitter.cs
│ │ │ ├── MenuItemCollection.cs
│ │ │ ├── PathPickerButton.cs
│ │ │ ├── ProgressButton.xaml
│ │ │ ├── ProgressButton.xaml.cs
│ │ │ ├── ShortcutPicker.xaml
│ │ │ ├── ShortcutPicker.xaml.cs
│ │ │ ├── ShortcutPickerButton.xaml
│ │ │ ├── ShortcutPickerButton.xaml.cs
│ │ │ ├── ToolTip.cs
│ │ │ ├── UnitNumberBox.xaml
│ │ │ └── UnitNumberBox.xaml.cs
│ │ ├── DialogControls
│ │ │ ├── AddExportConfigDialog.xaml
│ │ │ ├── AddExportConfigDialog.xaml.cs
│ │ │ ├── AddUploadConfigDialog.xaml
│ │ │ ├── AddUploadConfigDialog.xaml.cs
│ │ │ ├── FeedbackDialog.xaml
│ │ │ ├── FeedbackDialog.xaml.cs
│ │ │ ├── InsertTableDialog.xaml
│ │ │ ├── InsertTableDialog.xaml.cs
│ │ │ ├── WebView2InstallControl.xaml
│ │ │ └── WebView2InstallControl.xaml.cs
│ │ ├── EditorControls
│ │ │ ├── ContextMenuItems
│ │ │ │ ├── CodeFencesItem.xaml
│ │ │ │ ├── CodeFencesItem.xaml.cs
│ │ │ │ ├── FormatItem.xaml
│ │ │ │ ├── FormatItem.xaml.cs
│ │ │ │ ├── ImageItem.xaml
│ │ │ │ └── ImageItem.xaml.cs
│ │ │ ├── EditorContainer.xaml
│ │ │ ├── EditorContainer.xaml.cs
│ │ │ ├── MainContent.xaml
│ │ │ ├── MainContent.xaml.cs
│ │ │ ├── MenuBar.xaml
│ │ │ ├── MenuBar.xaml.cs
│ │ │ ├── MenuBarItems
│ │ │ │ ├── EditItem.xaml
│ │ │ │ ├── EditItem.xaml.cs
│ │ │ │ ├── FileItem.xaml
│ │ │ │ ├── FileItem.xaml.cs
│ │ │ │ ├── FormatItem.xaml
│ │ │ │ ├── FormatItem.xaml.cs
│ │ │ │ ├── MenuBarItemBase.cs
│ │ │ │ ├── ParagraphItem.xaml
│ │ │ │ ├── ParagraphItem.xaml.cs
│ │ │ │ ├── ViewItem.xaml
│ │ │ │ └── ViewItem.xaml.cs
│ │ │ ├── StatusBar.xaml
│ │ │ └── StatusBar.xaml.cs
│ │ ├── FloatControls
│ │ │ ├── FindReplace.xaml
│ │ │ ├── FindReplace.xaml.cs
│ │ │ ├── FrontMenu.xaml
│ │ │ ├── FrontMenu.xaml.cs
│ │ │ ├── ImageSelector.xaml
│ │ │ ├── ImageSelector.xaml.cs
│ │ │ ├── ImageToolbar.xaml
│ │ │ ├── ImageToolbar.xaml.cs
│ │ │ ├── TableTools.xaml
│ │ │ ├── TableTools.xaml.cs
│ │ │ ├── ToolTip.xaml
│ │ │ └── ToolTip.xaml.cs
│ │ ├── RootControl.xaml
│ │ ├── RootControl.xaml.cs
│ │ ├── SettingControls
│ │ │ ├── AboutApp.xaml
│ │ │ ├── AboutApp.xaml.cs
│ │ │ ├── ButtonSettingItem.xaml
│ │ │ ├── ButtonSettingItem.xaml.cs
│ │ │ ├── ExpanderSettingItem.xaml
│ │ │ ├── ExpanderSettingItem.xaml.cs
│ │ │ ├── NormalSettingItem.xaml
│ │ │ ├── NormalSettingItem.xaml.cs
│ │ │ └── SettingItems
│ │ │ │ ├── EditorSetting.xaml
│ │ │ │ ├── EditorSetting.xaml.cs
│ │ │ │ ├── ExportConfigItems
│ │ │ │ ├── CommonConfig.xaml
│ │ │ │ ├── CommonConfig.xaml.cs
│ │ │ │ ├── HTMLConfig.xaml
│ │ │ │ ├── HTMLConfig.xaml.cs
│ │ │ │ ├── ImageConfig.xaml
│ │ │ │ ├── ImageConfig.xaml.cs
│ │ │ │ ├── PDFConfig.xaml
│ │ │ │ └── PDFConfig.xaml.cs
│ │ │ │ ├── ExportSetting.xaml
│ │ │ │ ├── ExportSetting.xaml.cs
│ │ │ │ ├── GeneralSetting.xaml
│ │ │ │ ├── GeneralSetting.xaml.cs
│ │ │ │ ├── ImageSetting.xaml
│ │ │ │ ├── ImageSetting.xaml.cs
│ │ │ │ ├── ImageUploadSetting.xaml
│ │ │ │ ├── ImageUploadSetting.xaml.cs
│ │ │ │ ├── ShortcutSetting.xaml
│ │ │ │ ├── ShortcutSetting.xaml.cs
│ │ │ │ ├── UploadConfigItems
│ │ │ │ ├── CommonConfig.xaml
│ │ │ │ ├── CommonConfig.xaml.cs
│ │ │ │ ├── FTPConfig.xaml
│ │ │ │ ├── FTPConfig.xaml.cs
│ │ │ │ ├── GitConfig.xaml
│ │ │ │ ├── GitConfig.xaml.cs
│ │ │ │ ├── OSSConfig.xaml
│ │ │ │ ├── OSSConfig.xaml.cs
│ │ │ │ ├── PowerShellConfig.xaml
│ │ │ │ ├── PowerShellConfig.xaml.cs
│ │ │ │ ├── SCPConfig.xaml
│ │ │ │ └── SCPConfig.xaml.cs
│ │ │ │ ├── ViewSetting.xaml
│ │ │ │ └── ViewSetting.xaml.cs
│ │ └── SidePaneControls
│ │ │ ├── LeftPane.xaml
│ │ │ ├── LeftPane.xaml.cs
│ │ │ ├── Pages
│ │ │ ├── FolderPage.xaml
│ │ │ ├── FolderPage.xaml.cs
│ │ │ ├── Route.cs
│ │ │ ├── TocPage.xaml
│ │ │ └── TocPage.xaml.cs
│ │ │ ├── SearchPane.xaml
│ │ │ └── SearchPane.xaml.cs
│ ├── Converters
│ │ ├── BoolReverseConverter.cs
│ │ ├── BoolToObjectConverter.cs
│ │ ├── BoolToVisibilityConverter.cs
│ │ ├── ElementThemeConverter.cs
│ │ ├── EmptyToVisibilityConverter.cs
│ │ ├── GridLengthToDoubleConverter.cs
│ │ └── ShortcutKeyToStringConverter.cs
│ ├── Enums
│ │ ├── AppTheme.cs
│ │ ├── ExportType.cs
│ │ ├── ImageUploadMethod.cs
│ │ ├── InsertImageAction.cs
│ │ ├── PrintOrientation.cs
│ │ └── StartupAction.cs
│ ├── FodyWeavers.xml
│ ├── FodyWeavers.xsd
│ ├── Images
│ │ └── logo.ico
│ ├── Interfaces
│ │ ├── IClipboard.cs
│ │ ├── IFileConverter.cs
│ │ ├── IFileExport.cs
│ │ ├── IFileOperation.cs
│ │ ├── IKeyboardAccelerator.cs
│ │ ├── IMarkdownEditor.cs
│ │ ├── IPowerShellService.cs
│ │ ├── IWindowPrivate.cs
│ │ └── IWindowService.cs
│ ├── Migrations
│ │ ├── 20230226122314_InitialCreate.cs
│ │ ├── 20230226122314_InitialCreate.designer.cs
│ │ └── DatabaseModelSnapshot.cs
│ ├── Models
│ │ ├── EventArgs
│ │ │ ├── EditorEventArgs.cs
│ │ │ └── KeyEventArgs.cs
│ │ ├── PersistentModels
│ │ │ ├── ExportConfig.cs
│ │ │ ├── FileAccessHistory.cs
│ │ │ ├── FolderAccessHistory.cs
│ │ │ └── ImageUploadConfig.cs
│ │ └── RuntimeModels
│ │ │ ├── ContentHistory.cs
│ │ │ ├── ContentState.cs
│ │ │ ├── CursorState.cs
│ │ │ ├── DimNumber.cs
│ │ │ ├── ExplorerItem.cs
│ │ │ ├── ExportConfigModels
│ │ │ ├── ConfigModel.cs
│ │ │ ├── HTMLConfigModel.cs
│ │ │ ├── ImageConfigModel.cs
│ │ │ └── PDFConfigModel.cs
│ │ │ ├── ExportPdfSettings.cs
│ │ │ ├── FormatState.cs
│ │ │ ├── HtmlImgTag.cs
│ │ │ ├── MarkdownBlock.cs
│ │ │ ├── MarkdownCursor.cs
│ │ │ ├── MenuItemState.cs
│ │ │ ├── MenuState.cs
│ │ │ ├── NumberUnit.cs
│ │ │ ├── ParagraphState.cs
│ │ │ ├── ScrollState.cs
│ │ │ ├── ShortcutKey.cs
│ │ │ ├── TocItem.cs
│ │ │ ├── UploadConfigModels
│ │ │ ├── ConfigModel.cs
│ │ │ ├── FTPConfigModel.cs
│ │ │ ├── GitConfigModel.cs
│ │ │ ├── OSSConfigModel.cs
│ │ │ ├── PowerShellModel.cs
│ │ │ └── SCPConfigModel.cs
│ │ │ └── WordCount.cs
│ ├── Pages
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── Route.cs
│ │ ├── SettingPages
│ │ │ ├── AboutPage.xaml
│ │ │ ├── AboutPage.xaml.cs
│ │ │ ├── EditorPage.xaml
│ │ │ ├── EditorPage.xaml.cs
│ │ │ ├── ExportConfigPage.xaml
│ │ │ ├── ExportConfigPage.xaml.cs
│ │ │ ├── ExportPage.xaml
│ │ │ ├── ExportPage.xaml.cs
│ │ │ ├── GeneralPage.xaml
│ │ │ ├── GeneralPage.xaml.cs
│ │ │ ├── ImagePage.xaml
│ │ │ ├── ImagePage.xaml.cs
│ │ │ ├── ImageUploadPage.xaml
│ │ │ ├── ImageUploadPage.xaml.cs
│ │ │ ├── ShortcutPage.xaml
│ │ │ ├── ShortcutPage.xaml.cs
│ │ │ ├── UploadConfigPage.xaml
│ │ │ ├── UploadConfigPage.xaml.cs
│ │ │ ├── ViewPage.xaml
│ │ │ └── ViewPage.xaml.cs
│ │ ├── SettingsPage.xaml
│ │ └── SettingsPage.xaml.cs
│ ├── Properties
│ │ ├── AssemblyInfo.cs
│ │ └── Typedown.Core.rd.xml
│ ├── Resources.cs
│ ├── Resources
│ │ ├── Converters.xaml
│ │ ├── Strings
│ │ │ ├── af
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── am
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ar
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── as
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── bg
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── bn
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── bs
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ca
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── cs
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── cy
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── da
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── de
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── el
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── en
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── es
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── et
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── eu
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── fa
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── fi
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── fil
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── fr
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ga
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── gl
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── gu
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── he
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── hi
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── hr
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── hu
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── hy
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── id
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── is
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── it
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ja
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ka
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── kk
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── km
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── kn
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ko
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── lo
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── lt
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── lv
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── mi
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── mk
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ml
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── mr
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ms
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── mt
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── nb
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ne
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── nl
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── or
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── pa
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── pl
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── prs
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── pt
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ro
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ru
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── sk
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── sl
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── sq
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── sr-Latn
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── sv
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── sw
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ta
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── te
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── th
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ti
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── tr
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── uk
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── ur
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── uz
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── vi
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── zh-Hans
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ ├── zh-Hant
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ │ └── zu
│ │ │ │ ├── CommonResources.resw
│ │ │ │ ├── DialogResources.resw
│ │ │ │ ├── Resources.resw
│ │ │ │ └── SettingsResources.resw
│ │ └── Styles
│ │ │ ├── Button.xaml
│ │ │ ├── ComboBox.xaml
│ │ │ ├── ContentDialog.xaml
│ │ │ └── ToggleSwitch.xaml
│ ├── Services
│ │ ├── AccessHistory.cs
│ │ ├── AppDbContext.cs
│ │ ├── AutoBackup.cs
│ │ ├── EventCenter.cs
│ │ ├── ImageAction.cs
│ │ ├── ImageUpload.cs
│ │ ├── RemoteInvoke.cs
│ │ └── Transport.cs
│ ├── Typedown.Core.csproj
│ ├── Utilities
│ │ ├── CollectionExtensions.cs
│ │ ├── ComboBoxPatch.cs
│ │ ├── Command.cs
│ │ ├── CommandLine.cs
│ │ ├── Common.cs
│ │ ├── ControlExtensions.cs
│ │ ├── CoreDispatcherExtensions.cs
│ │ ├── ExportMarkdown.cs
│ │ ├── FilePickersExtensions.cs
│ │ ├── FileTypeHelper.cs
│ │ ├── InjectionExtensions.cs
│ │ ├── Locale.cs
│ │ ├── Log.cs
│ │ ├── NumberUnit.cs
│ │ ├── PInvoke
│ │ │ ├── PInvoke.DwmApi.cs
│ │ │ ├── PInvoke.Kernel32.cs
│ │ │ ├── PInvoke.Shell32.cs
│ │ │ └── PInvoke.User32.cs
│ │ ├── ReactiveExtensions.cs
│ │ └── UriHelper.cs
│ └── ViewModels
│ │ ├── AppViewModel.cs
│ │ ├── EditorViewModel.cs
│ │ ├── FileViewModel.cs
│ │ ├── FloatViewModel.cs
│ │ ├── FormatViewModel.cs
│ │ ├── ParagraphViewModel.cs
│ │ ├── SettingsViewModel.Shortcut.cs
│ │ ├── SettingsViewModel.cs
│ │ └── UIViewModel.cs
├── Typedown.Editor
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── .vscode
│ │ └── launch.json
│ ├── README.md
│ ├── Typedown.Editor.esproj
│ ├── config-overrides.js
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ └── theme
│ │ │ ├── codemirror
│ │ │ ├── dark.theme.css
│ │ │ └── light.theme.css
│ │ │ ├── editor
│ │ │ ├── dark.theme.css
│ │ │ └── light.theme.css
│ │ │ └── prismjs
│ │ │ ├── dark.theme.css
│ │ │ └── light.theme.css
│ ├── src
│ │ ├── App.scss
│ │ ├── App.tsx
│ │ ├── assets
│ │ │ ├── icons
│ │ │ │ ├── add_close.svg
│ │ │ │ ├── align_center.svg
│ │ │ │ ├── align_left.svg
│ │ │ │ ├── align_right.svg
│ │ │ │ ├── bullet_list.svg
│ │ │ │ ├── chart.svg
│ │ │ │ ├── code.svg
│ │ │ │ ├── copy.svg
│ │ │ │ ├── delete.svg
│ │ │ │ ├── enter.svg
│ │ │ │ ├── flowchart.svg
│ │ │ │ ├── folder.svg
│ │ │ │ ├── format_clear.svg
│ │ │ │ ├── format_code.svg
│ │ │ │ ├── format_emphasis.svg
│ │ │ │ ├── format_image.svg
│ │ │ │ ├── format_link.svg
│ │ │ │ ├── format_math.svg
│ │ │ │ ├── format_strike.svg
│ │ │ │ ├── format_strong.svg
│ │ │ │ ├── format_underline.svg
│ │ │ │ ├── front_matter.svg
│ │ │ │ ├── header_1.svg
│ │ │ │ ├── header_2.svg
│ │ │ │ ├── header_3.svg
│ │ │ │ ├── header_4.svg
│ │ │ │ ├── header_5.svg
│ │ │ │ ├── header_6.svg
│ │ │ │ ├── horizontal_line.svg
│ │ │ │ ├── html.svg
│ │ │ │ ├── image.svg
│ │ │ │ ├── image_dark.png
│ │ │ │ ├── image_dark_fail.png
│ │ │ │ ├── image_light.png
│ │ │ │ ├── image_light_fail.png
│ │ │ │ ├── imagefail.svg
│ │ │ │ ├── math.svg
│ │ │ │ ├── mermaid.svg
│ │ │ │ ├── new_table.svg
│ │ │ │ ├── order_list.svg
│ │ │ │ ├── paragraph.svg
│ │ │ │ ├── quote.svg
│ │ │ │ ├── quote_block.svg
│ │ │ │ ├── sequence.svg
│ │ │ │ ├── table.svg
│ │ │ │ ├── table_add.svg
│ │ │ │ ├── title.svg
│ │ │ │ ├── todolist.svg
│ │ │ │ ├── turn.svg
│ │ │ │ └── upload.svg
│ │ │ ├── libs
│ │ │ │ ├── sequence-diagram-snap.js
│ │ │ │ └── snap.svg-min.js
│ │ │ ├── pngicon
│ │ │ │ ├── algin_center
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── algin_left
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── algin_right
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── bullet_list
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── chart
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── code
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── copy
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── delete
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── flowchart
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── footnote
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_clear
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_emphasis
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_image
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_link
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_math
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_strike
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_strong
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── format_underline
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── front_matter
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── heading_1
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── heading_2
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── heading_3
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── heading_4
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── heading_5
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── heading_6
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── highlight
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── horizontal_line
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── html
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── image
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── imageEdit
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── image_delete
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── image_fail
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── inline_image
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── link_jump
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── math
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── mermaid
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── new_table
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── order_list
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── paragraph
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── plantuml
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── quote
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── quote_block
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── sequence
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── table
│ │ │ │ │ ├── table.png
│ │ │ │ │ ├── table@2x.png
│ │ │ │ │ └── table@3x.png
│ │ │ │ ├── table_delete
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── todolist
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── turninto
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── unlink
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ └── warning
│ │ │ │ │ └── 2.png
│ │ │ └── styles
│ │ │ │ ├── danielbd.woff
│ │ │ │ ├── danielbd.woff2
│ │ │ │ ├── exportStyle.css
│ │ │ │ ├── headerFooterStyle.css
│ │ │ │ ├── index.css
│ │ │ │ └── sequence-diagram.css
│ │ ├── components
│ │ │ ├── CodeMirror
│ │ │ │ └── index.tsx
│ │ │ ├── Editor
│ │ │ │ ├── index.scss
│ │ │ │ ├── index.tsx
│ │ │ │ └── type.d.ts
│ │ │ ├── ErrorBoundary
│ │ │ │ └── index.jsx
│ │ │ └── Muya
│ │ │ │ ├── index.tsx
│ │ │ │ ├── lib
│ │ │ │ ├── config
│ │ │ │ │ └── index.js
│ │ │ │ ├── contentState
│ │ │ │ │ ├── arrowCtrl.js
│ │ │ │ │ ├── backspaceCtrl.js
│ │ │ │ │ ├── clickCtrl.js
│ │ │ │ │ ├── codeBlockCtrl.js
│ │ │ │ │ ├── containerCtrl.js
│ │ │ │ │ ├── copyCutCtrl.js
│ │ │ │ │ ├── core.js
│ │ │ │ │ ├── deleteCtrl.js
│ │ │ │ │ ├── dragDropCtrl.js
│ │ │ │ │ ├── emojiCtrl.js
│ │ │ │ │ ├── enterCtrl.js
│ │ │ │ │ ├── footnoteCtrl.js
│ │ │ │ │ ├── formatCtrl.js
│ │ │ │ │ ├── htmlBlock.js
│ │ │ │ │ ├── imageCtrl.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── inputCtrl.js
│ │ │ │ │ ├── linkCtrl.js
│ │ │ │ │ ├── paragraphCtrl.js
│ │ │ │ │ ├── pasteCtrl.js
│ │ │ │ │ ├── searchCtrl.js
│ │ │ │ │ ├── tabCtrl.js
│ │ │ │ │ ├── tableBlockCtrl.js
│ │ │ │ │ ├── tableDragBarCtrl.js
│ │ │ │ │ ├── tableSelectCellsCtrl.js
│ │ │ │ │ ├── tocCtrl.js
│ │ │ │ │ └── updateCtrl.js
│ │ │ │ ├── eventHandler
│ │ │ │ │ ├── clickEvent.js
│ │ │ │ │ ├── clipboard.js
│ │ │ │ │ ├── dragDrop.js
│ │ │ │ │ ├── event.js
│ │ │ │ │ ├── keyboard.js
│ │ │ │ │ ├── mouseEvent.js
│ │ │ │ │ └── resize.js
│ │ │ │ ├── index.js
│ │ │ │ ├── parser
│ │ │ │ │ ├── escapeCharacter.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── marked
│ │ │ │ │ │ ├── LICENSE
│ │ │ │ │ │ ├── README.md
│ │ │ │ │ │ ├── blockRules.js
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── inlineLexer.js
│ │ │ │ │ │ ├── inlineRules.js
│ │ │ │ │ │ ├── lexer.js
│ │ │ │ │ │ ├── options.js
│ │ │ │ │ │ ├── parser.js
│ │ │ │ │ │ ├── renderer.js
│ │ │ │ │ │ ├── slugger.js
│ │ │ │ │ │ ├── textRenderer.js
│ │ │ │ │ │ ├── urlify.js
│ │ │ │ │ │ └── utils.js
│ │ │ │ │ ├── render
│ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ ├── plantuml.js
│ │ │ │ │ │ ├── renderBlock
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ ├── renderBlock.js
│ │ │ │ │ │ │ ├── renderContainerBlock.js
│ │ │ │ │ │ │ ├── renderContainerEditIcon.js
│ │ │ │ │ │ │ ├── renderCopyButton.js
│ │ │ │ │ │ │ ├── renderFootnoteJump.js
│ │ │ │ │ │ │ ├── renderIcon.js
│ │ │ │ │ │ │ ├── renderLeafBlock.js
│ │ │ │ │ │ │ ├── renderLineNumber.js
│ │ │ │ │ │ │ ├── renderTableDargBar.js
│ │ │ │ │ │ │ └── renderToolBar.js
│ │ │ │ │ │ ├── renderInlines
│ │ │ │ │ │ │ ├── autoLink.js
│ │ │ │ │ │ │ ├── autoLinkExtension.js
│ │ │ │ │ │ │ ├── backlash.js
│ │ │ │ │ │ │ ├── backlashInToken.js
│ │ │ │ │ │ │ ├── codeFense.js
│ │ │ │ │ │ │ ├── del.js
│ │ │ │ │ │ │ ├── delEmStringFactory.js
│ │ │ │ │ │ │ ├── em.js
│ │ │ │ │ │ │ ├── emoji.js
│ │ │ │ │ │ │ ├── footnoteIdentifier.js
│ │ │ │ │ │ │ ├── hardLineBreak.js
│ │ │ │ │ │ │ ├── header.js
│ │ │ │ │ │ │ ├── highlight.js
│ │ │ │ │ │ │ ├── hr.js
│ │ │ │ │ │ │ ├── htmlEscape.js
│ │ │ │ │ │ │ ├── htmlRuby.js
│ │ │ │ │ │ │ ├── htmlTag.js
│ │ │ │ │ │ │ ├── image.js
│ │ │ │ │ │ │ ├── index.js
│ │ │ │ │ │ │ ├── inlineCode.js
│ │ │ │ │ │ │ ├── inlineMath.js
│ │ │ │ │ │ │ ├── link.js
│ │ │ │ │ │ │ ├── loadImageAsync.js
│ │ │ │ │ │ │ ├── multipleMath.js
│ │ │ │ │ │ │ ├── referenceDefinition.js
│ │ │ │ │ │ │ ├── referenceImage.js
│ │ │ │ │ │ │ ├── referenceLink.js
│ │ │ │ │ │ │ ├── softLineBreak.js
│ │ │ │ │ │ │ ├── strong.js
│ │ │ │ │ │ │ ├── superSubScript.js
│ │ │ │ │ │ │ ├── tailHeader.js
│ │ │ │ │ │ │ └── text.js
│ │ │ │ │ │ ├── sequence.js
│ │ │ │ │ │ └── snabbdom.js
│ │ │ │ │ ├── rules.js
│ │ │ │ │ └── utils.js
│ │ │ │ ├── prism
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── loadLanguage.js
│ │ │ │ ├── renderers
│ │ │ │ │ └── index.js
│ │ │ │ ├── selection
│ │ │ │ │ ├── cursor.js
│ │ │ │ │ ├── dom.js
│ │ │ │ │ └── index.js
│ │ │ │ ├── ui
│ │ │ │ │ ├── baseFloat
│ │ │ │ │ │ ├── index.css
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── baseScrollFloat
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── codePicker
│ │ │ │ │ │ ├── index.css
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── emojiPicker
│ │ │ │ │ │ ├── index.css
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── emojis
│ │ │ │ │ │ ├── emojisJson.json
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── fileIcons
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── footnoteTool
│ │ │ │ │ │ ├── index.css
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── formatPicker.js
│ │ │ │ │ ├── frontMenu.js
│ │ │ │ │ ├── imageSelector.js
│ │ │ │ │ ├── imageToolbar.js
│ │ │ │ │ ├── linkTools.js
│ │ │ │ │ ├── quickInsert
│ │ │ │ │ │ ├── config.js
│ │ │ │ │ │ ├── index.css
│ │ │ │ │ │ └── index.js
│ │ │ │ │ ├── tablePicker.js
│ │ │ │ │ ├── tableTools.js
│ │ │ │ │ └── tooltip.js
│ │ │ │ └── utils
│ │ │ │ │ ├── cumputeCheckBoxStatus.js
│ │ │ │ │ ├── domManipulate.js
│ │ │ │ │ ├── dompurify.js
│ │ │ │ │ ├── exportMarkdown.js
│ │ │ │ │ ├── getImageInfo.js
│ │ │ │ │ ├── getLinkInfo.js
│ │ │ │ │ ├── getParentCheckBox.js
│ │ │ │ │ ├── importMarkdown.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── resizeCodeLineNumber.js
│ │ │ │ │ ├── turndownService.js
│ │ │ │ │ └── url.js
│ │ │ │ └── themes
│ │ │ │ ├── default.css
│ │ │ │ └── fonts
│ │ │ │ ├── DejaVuSansMono-Bold.ttf
│ │ │ │ ├── DejaVuSansMono-BoldOblique.ttf
│ │ │ │ ├── DejaVuSansMono-Oblique.ttf
│ │ │ │ ├── DejaVuSansMono.ttf
│ │ │ │ ├── DejaVuSansMono_LICENSE
│ │ │ │ ├── open-sans-LICENSE.txt
│ │ │ │ ├── open-sans-v27-latin-ext_latin-300.woff
│ │ │ │ ├── open-sans-v27-latin-ext_latin-300italic.woff
│ │ │ │ ├── open-sans-v27-latin-ext_latin-600.woff
│ │ │ │ ├── open-sans-v27-latin-ext_latin-600italic.woff
│ │ │ │ ├── open-sans-v27-latin-ext_latin-700.woff
│ │ │ │ ├── open-sans-v27-latin-ext_latin-700italic.woff
│ │ │ │ ├── open-sans-v27-latin-ext_latin-italic.woff
│ │ │ │ └── open-sans-v27-latin-ext_latin-regular.woff
│ │ ├── index.tsx
│ │ ├── react-app-env.d.ts
│ │ ├── services
│ │ │ ├── common.ts
│ │ │ ├── cursor.js
│ │ │ ├── exportHtml.js
│ │ │ ├── importHtml.js
│ │ │ ├── localization.ts
│ │ │ ├── menuState.js
│ │ │ ├── remote
│ │ │ │ ├── common.ts
│ │ │ │ └── index.ts
│ │ │ ├── scrollbar.ts
│ │ │ ├── theme.ts
│ │ │ └── transport.ts
│ │ ├── setupTests.ts
│ │ └── types
│ │ │ └── global.d.ts
│ ├── tsconfig.json
│ └── yarn.lock
└── Typedown
│ ├── App.cs
│ ├── Assets
│ └── logo.ico
│ ├── Controls
│ └── MarkdownEditor.cs
│ ├── EnvCheck.cs
│ ├── FodyWeavers.xml
│ ├── FodyWeavers.xsd
│ ├── Injection.cs
│ ├── MicrosoftEdgeWebview2Setup.exe
│ ├── Program.cs
│ ├── Resources
│ └── .gitignore
│ ├── Services
│ ├── Clipboard.cs
│ ├── FileConverter.cs
│ ├── FileExport.cs
│ ├── FileOperation.cs
│ ├── KeyboardAccelerator.cs
│ ├── PowerShellService.cs
│ └── WindowService.cs
│ ├── Typedown.csproj
│ ├── Utilities
│ ├── ClipboardImage.cs
│ ├── Common.cs
│ ├── CoreWindowHelper.cs
│ ├── PrintHelper.cs
│ └── WebViewController.cs
│ ├── Windows
│ ├── MainWindow.cs
│ └── WebViewInstallWindow.cs
│ └── app.manifest
├── LICENSE
├── NuGet.Config
├── README.md
├── Tests
├── Typedown.Test
│ ├── STATestMethodAttribute.cs
│ ├── ServiceTests
│ │ └── ClipboardTest.cs
│ └── Typedown.Test.csproj
├── Typedown.UITest
│ ├── TestBase.cs
│ ├── Typedown.UITest.csproj
│ └── UnitTest1.cs
└── Typedown.Universal.Test
│ ├── Typedown.Core.Test.csproj
│ └── UtilityTests
│ └── UriHelperTest.cs
├── Tools
├── DatabaseMigration
│ ├── Database.cs
│ ├── DatabaseMigration.csproj
│ ├── Migrations
│ │ ├── 20230226122314_InitialCreate.Designer.cs
│ │ ├── 20230226122314_InitialCreate.cs
│ │ └── DatabaseModelSnapshot.cs
│ └── Program.cs
├── TranslationTool
│ ├── BingDictionary
│ │ ├── CommonResources.json
│ │ ├── DialogResources.json
│ │ ├── Resources.json
│ │ └── SettingsResources.json
│ ├── BingTranslate.cs
│ ├── Dictionary
│ │ ├── CommonResources.json
│ │ ├── DialogResources.json
│ │ ├── Resources.json
│ │ └── SettingsResources.json
│ ├── Program.cs
│ ├── Template.resw
│ ├── TextDictionary.cs
│ ├── TextDictionaryItem.cs
│ ├── TextResource.cs
│ ├── TextResourceItem.cs
│ └── TranslationTool.csproj
├── Typedown.Package
│ ├── Assets
│ │ ├── LargeTile.scale-100.png
│ │ ├── LargeTile.scale-125.png
│ │ ├── LargeTile.scale-150.png
│ │ ├── LargeTile.scale-200.png
│ │ ├── LargeTile.scale-400.png
│ │ ├── Markdown.png
│ │ ├── SmallTile.scale-100.png
│ │ ├── SmallTile.scale-125.png
│ │ ├── SmallTile.scale-150.png
│ │ ├── SmallTile.scale-200.png
│ │ ├── SmallTile.scale-400.png
│ │ ├── SplashScreen.scale-100.png
│ │ ├── SplashScreen.scale-125.png
│ │ ├── SplashScreen.scale-150.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── SplashScreen.scale-400.png
│ │ ├── Square150x150Logo.scale-100.png
│ │ ├── Square150x150Logo.scale-125.png
│ │ ├── Square150x150Logo.scale-150.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square150x150Logo.scale-400.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ │ ├── Square44x44Logo.scale-100.png
│ │ ├── Square44x44Logo.scale-125.png
│ │ ├── Square44x44Logo.scale-150.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-400.png
│ │ ├── Square44x44Logo.targetsize-16.png
│ │ ├── Square44x44Logo.targetsize-24.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── Square44x44Logo.targetsize-256.png
│ │ ├── Square44x44Logo.targetsize-32.png
│ │ ├── Square44x44Logo.targetsize-48.png
│ │ ├── StoreLogo.scale-100.png
│ │ ├── StoreLogo.scale-125.png
│ │ ├── StoreLogo.scale-150.png
│ │ ├── StoreLogo.scale-200.png
│ │ ├── StoreLogo.scale-400.png
│ │ ├── Wide310x150Logo.scale-100.png
│ │ ├── Wide310x150Logo.scale-125.png
│ │ ├── Wide310x150Logo.scale-150.png
│ │ ├── Wide310x150Logo.scale-200.png
│ │ └── Wide310x150Logo.scale-400.png
│ ├── Package.appxmanifest
│ ├── Typedown.Package.wapproj
│ └── priconfig.packaging.xml
└── XamlDesignApp
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Assets
│ ├── LockScreenLogo.scale-200.png
│ ├── SplashScreen.scale-200.png
│ ├── Square150x150Logo.scale-200.png
│ ├── Square44x44Logo.scale-200.png
│ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ ├── StoreLogo.png
│ └── Wide310x150Logo.scale-200.png
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── Package.appxmanifest
│ ├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
│ └── XamlDesignApp.csproj
├── Typedown.sln
├── logo.png
└── nupkgs
└── Typedown.XamlUI.1.0.1.nupkg
/Dev/Typedown.Core/Controls/CommonControls/ProgressButton.xaml:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/DialogControls/InsertTableDialog.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/DialogControls/WebView2InstallControl.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Controls;
4 |
5 | namespace Typedown.Core.Controls
6 | {
7 | public sealed partial class WebView2InstallControl : UserControl
8 | {
9 | public EventHandler CloseButtonClick;
10 |
11 | public EventHandler InstallButtonClick;
12 |
13 | public WebView2InstallControl()
14 | {
15 | this.InitializeComponent();
16 | }
17 |
18 | private void OnCloseButtonClick(object sender, RoutedEventArgs e)
19 | {
20 | CloseButtonClick?.Invoke(this, EventArgs.Empty);
21 | }
22 |
23 | private void OnInstallButtonClick(object sender, RoutedEventArgs e)
24 | {
25 | InstallButtonClick?.Invoke(this, EventArgs.Empty);
26 | }
27 |
28 | private void OnUnloaded(object sender, RoutedEventArgs e)
29 | {
30 |
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/EditorControls/ContextMenuItems/CodeFencesItem.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/EditorControls/ContextMenuItems/CodeFencesItem.xaml.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Controls.EditorControls.ContextMenuItems
2 | {
3 | public sealed partial class CodeFencesItem : MenuItemCollection
4 | {
5 | public CodeFencesItem()
6 | {
7 | this.InitializeComponent();
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/EditorControls/ContextMenuItems/FormatItem.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml.Controls;
3 | using Windows.UI.Xaml.Input;
4 |
5 | namespace Typedown.Core.Controls.EditorControls.ContextMenuItems
6 | {
7 | public sealed partial class FormatItem : MenuFlyoutItem
8 | {
9 | public event EventHandler ItemClick;
10 |
11 | public FormatItem()
12 | {
13 | InitializeComponent();
14 | AddHandler(PointerReleasedEvent, new PointerEventHandler(OnMenuFlyoutItemPointerReleased), true);
15 | }
16 |
17 | private void OnMenuFlyoutItemPointerReleased(object sender, PointerRoutedEventArgs e)
18 | {
19 | ItemClick?.Invoke(this, EventArgs.Empty);
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/EditorControls/MenuBarItems/ViewItem.xaml.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Controls.EditorControls.MenuBarItems
2 | {
3 | public sealed partial class ViewItem : MenuBarItemBase
4 | {
5 | public ViewItem()
6 | {
7 | InitializeComponent();
8 | }
9 |
10 | protected override void OnRegisterShortcut()
11 | {
12 | RegisterWindowShortcut(Settings.ShortcutSidePane, SidePaneItem);
13 | RegisterWindowShortcut(Settings.ShortcutSourceCodeMode, SourceCodeModeItem);
14 | RegisterWindowShortcut(Settings.ShortcutFocusMode, FocusModeItem);
15 | RegisterWindowShortcut(Settings.ShortcutTypewriterMode, TypewriterModeItem);
16 | RegisterWindowShortcut(Settings.ShortcutStatusBar, StatusBarItem);
17 | }
18 |
19 | private void OnUnloaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
20 | {
21 | Bindings?.StopTracking();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/SettingControls/SettingItems/ViewSetting.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.ViewModels;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Controls;
4 |
5 | namespace Typedown.Core.Controls.SettingControls.SettingItems
6 | {
7 | public sealed partial class ViewSetting : UserControl
8 | {
9 | public AppViewModel ViewModel => DataContext as AppViewModel;
10 |
11 | public SettingsViewModel Settings => ViewModel?.SettingsViewModel;
12 |
13 | public ViewSetting()
14 | {
15 | InitializeComponent();
16 | }
17 |
18 | private void OnUnloaded(object sender, RoutedEventArgs e)
19 | {
20 | Bindings?.StopTracking();
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/SidePaneControls/Pages/Route.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Typedown.Core.Controls.SidePanelControls.Pages;
3 |
4 | namespace Typedown.Core.Controls.SidePaneControls.Pages
5 | {
6 | public static class Route
7 | {
8 | public static Type GetSidePanePageType(string name) => name switch
9 | {
10 | "Toc" => typeof(TocPage),
11 | "Folder" => typeof(FolderPage),
12 | _ => null
13 | };
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Controls/SidePaneControls/Pages/TocPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.ViewModels;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Controls;
4 |
5 | namespace Typedown.Core.Controls.SidePanelControls.Pages
6 | {
7 | public sealed partial class TocPage : Page
8 | {
9 | public AppViewModel ViewModel => DataContext as AppViewModel;
10 |
11 | public EditorViewModel Editor => ViewModel.EditorViewModel;
12 |
13 | public TocPage()
14 | {
15 | InitializeComponent();
16 | Unloaded += OnUnloaded;
17 | }
18 |
19 | private void OnUnloaded(object sender, RoutedEventArgs e)
20 | {
21 | Bindings?.StopTracking();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Converters/BoolReverseConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml.Data;
3 |
4 | namespace Typedown.Core.Converters
5 | {
6 | public class BoolReverseConverter : IValueConverter
7 | {
8 | public object Convert(object value, Type targetType, object parameter, string language)
9 | {
10 | return !(bool)value;
11 | }
12 |
13 | public object ConvertBack(object value, Type targetType, object parameter, string language)
14 | {
15 | return !(bool)value;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Converters/BoolToObjectConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml.Data;
3 | using Windows.UI.Xaml.Markup;
4 |
5 | namespace Typedown.Core.Converters
6 | {
7 | public class BoolToObjectConverter : IValueConverter
8 | {
9 | public object TrueValue { get; set; }
10 |
11 | public object FalseValue { get; set; }
12 |
13 | public object Convert(object value, Type targetType, object parameter, string language)
14 | {
15 | var res = (bool)value ? TrueValue : FalseValue;
16 | if (res is not string || targetType == typeof(string))
17 | return res;
18 | return XamlBindingHelper.ConvertValue(targetType, res);
19 | }
20 |
21 | public object ConvertBack(object value, Type targetType, object parameter, string language)
22 | {
23 | throw new NotImplementedException();
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Converters/BoolToVisibilityConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Data;
4 |
5 | namespace Typedown.Core.Converters
6 | {
7 | public class BoolToVisibilityConverter : IValueConverter
8 | {
9 | public bool IsReverse { get; set; }
10 |
11 | public object Convert(object value, Type targetType, object parameter, string language)
12 | {
13 | var res = (bool)value;
14 | if (IsReverse) res = !res;
15 | return res ? Visibility.Visible : Visibility.Collapsed;
16 | }
17 |
18 | public object ConvertBack(object value, Type targetType, object parameter, string language)
19 | {
20 | var res = (Visibility)value;
21 | return IsReverse ? res == Visibility.Collapsed : res == Visibility.Visible;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Converters/ElementThemeConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Typedown.Core.Enums;
3 | using Windows.UI.Xaml;
4 | using Windows.UI.Xaml.Data;
5 |
6 | namespace Typedown.Core.Converters
7 | {
8 | public class ElementThemeConverter : IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, string language)
11 | {
12 | if(value is AppTheme)
13 | {
14 | return value switch
15 | {
16 | AppTheme.Light => ElementTheme.Light,
17 | AppTheme.Dark => ElementTheme.Dark,
18 | _ => ElementTheme.Default,
19 | };
20 | }
21 | return ElementTheme.Default;
22 | }
23 |
24 | public object ConvertBack(object value, Type targetType, object parameter, string language)
25 | {
26 | throw new NotImplementedException();
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Converters/EmptyToVisibilityConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Data;
4 |
5 | namespace Typedown.Core.Converters
6 | {
7 | public class EmptyToVisibilityConverter : IValueConverter
8 | {
9 | public bool IsReverse { get; set; }
10 |
11 | public object Convert(object value, Type targetType, object parameter, string language)
12 | {
13 | var res = string.IsNullOrEmpty(value as string);
14 | if (IsReverse) res = !res;
15 | return res ? Visibility.Visible : Visibility.Collapsed;
16 | }
17 |
18 | public object ConvertBack(object value, Type targetType, object parameter, string language)
19 | {
20 | var res = (Visibility)value;
21 | return IsReverse ? res == Visibility.Collapsed : res == Visibility.Visible;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Converters/GridLengthToDoubleConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Data;
4 |
5 | namespace Typedown.Core.Converters
6 | {
7 | public class GridLengthToDoubleConverter : IValueConverter
8 | {
9 | public GridUnitType GridUnitType { get; set; } = GridUnitType.Pixel;
10 |
11 | public object Convert(object value, Type targetType, object parameter, string language)
12 | {
13 | return value is GridLength length ? length.Value : 0d;
14 | }
15 |
16 | public object ConvertBack(object value, Type targetType, object parameter, string language)
17 | {
18 | return new GridLength(value is double length ? length : 0, GridUnitType);
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Converters/ShortcutKeyToStringConverter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Typedown.Core.Models;
3 | using Typedown.Core.Utilities;
4 | using Windows.UI.Xaml.Data;
5 |
6 | namespace Typedown.Core.Converters
7 | {
8 | public class ShortcutKeyToStringConverter: IValueConverter
9 | {
10 | public object Convert(object value, Type targetType, object parameter, string language)
11 | {
12 | return value is ShortcutKey key ? Common.GetShortcutKeyText(key) : null;
13 | }
14 |
15 | public object ConvertBack(object value, Type targetType, object parameter, string language)
16 | {
17 | throw new NotImplementedException();
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Enums/AppTheme.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using Typedown.Core.Utilities;
5 |
6 | namespace Typedown.Core.Enums
7 | {
8 | public enum AppTheme
9 | {
10 | [Locale("UseSystemSetting")]
11 | Default = 0,
12 |
13 | [Locale("View.AppTheme.Light")]
14 | Light = 1,
15 |
16 | [Locale("View.AppTheme.Dark")]
17 | Dark = 2,
18 | }
19 |
20 | public static partial class Enumerable
21 | {
22 | public static IReadOnlyList AppThemes { get; } = Enum.GetValues(typeof(AppTheme)).Cast().ToList();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Enums/ExportType.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using Typedown.Core.Utilities;
5 |
6 | namespace Typedown.Core.Enums
7 | {
8 | public enum ExportType
9 | {
10 | [Locale("None")]
11 | None = 0,
12 |
13 | [Locale("Export.Types.PDF")]
14 | PDF = 1,
15 |
16 | [Locale("Export.Types.HTML")]
17 | HTML = 2,
18 |
19 | [Locale("Export.Types.Image")]
20 | Image = 3,
21 | }
22 |
23 | public static partial class Enumerable
24 | {
25 | public static IReadOnlyList ExportTypes { get; } = Enum.GetValues(typeof(ExportType)).Cast().ToList();
26 |
27 | public static IReadOnlyList AvailableExportTypes { get; } = new List() { ExportType.PDF, ExportType.HTML };
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Enums/InsertImageAction.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using Typedown.Core.Utilities;
5 |
6 | namespace Typedown.Core.Enums
7 | {
8 | public enum InsertImageAction
9 | {
10 | [Locale("NoAction")]
11 | None,
12 |
13 | [Locale("Image.InsertActions.CopyToPath")]
14 | CopyToPath,
15 |
16 | [Locale("Image.InsertActions.Upload")]
17 | Upload,
18 | }
19 |
20 | public static partial class Enumerable
21 | {
22 | public static IReadOnlyList InsertImageActions { get; } = Enum.GetValues(typeof(InsertImageAction)).Cast().ToList();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Enums/PrintOrientation.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using Typedown.Core.Utilities;
5 |
6 | namespace Typedown.Core.Enums
7 | {
8 | public enum PrintOrientation
9 | {
10 | [Locale("Export.PDFConfig.Orientations.Portrait")]
11 | Portrait = 0,
12 |
13 | [Locale("Export.PDFConfig.Orientations.Landscape")]
14 | Landscape = 1
15 | }
16 |
17 | public static partial class Enumerable
18 | {
19 | public static IReadOnlyList PrintOrientations { get; } = Enum.GetValues(typeof(PrintOrientation)).Cast().ToList();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/FodyWeavers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Images/logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Core/Images/logo.ico
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IClipboard.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Specialized;
2 |
3 | namespace Typedown.Core.Interfaces
4 | {
5 | public enum TextDataFormat
6 | {
7 | Text,
8 | UnicodeText,
9 | Rtf,
10 | Html,
11 | CommaSeparatedValue,
12 | Xaml
13 | }
14 |
15 | public interface IClipboard
16 | {
17 | bool ContainsText(TextDataFormat format);
18 |
19 | string GetText(TextDataFormat format);
20 |
21 | void SetText(string text, TextDataFormat format);
22 |
23 | void SetText(string text);
24 |
25 | StringCollection GetFileDropList();
26 |
27 | void SetFileDropList(StringCollection fileDropList);
28 |
29 | IClipboardImage GetImage();
30 | }
31 |
32 | public interface IClipboardImage
33 | {
34 | void SaveAsPng(string path);
35 |
36 | byte[] GetBytes();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IFileConverter.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using System.Threading.Tasks;
3 | using Typedown.Core.Models;
4 |
5 | namespace Typedown.Core.Interfaces
6 | {
7 | public interface IFileConverter
8 | {
9 | Task HtmlToPdf(string html, PdfPrintSettings settings = null);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IFileExport.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.ObjectModel;
2 | using System.Threading.Tasks;
3 | using Typedown.Core.Enums;
4 | using Typedown.Core.Models;
5 |
6 | namespace Typedown.Core.Interfaces
7 | {
8 | public interface IFileExport
9 | {
10 | ObservableCollection ExportConfigs { get; }
11 |
12 | Task AddExportConfig(string name = null, ExportType type = 0);
13 |
14 | Task RemoveExportConfig(int id);
15 |
16 | Task SaveExportConfig(ExportConfig config);
17 |
18 | Task GetExportConfig(int id);
19 |
20 | Task UpdateExportConfigs();
21 |
22 | Task Print(string basePath, string html, string documentName = null);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IFileOperation.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Specialized;
2 |
3 | namespace Typedown.Core.Interfaces
4 | {
5 | public interface IFileOperation
6 | {
7 | bool Delete(StringCollection files);
8 |
9 | bool Copy(StringCollection files, string to);
10 |
11 | bool Move(StringCollection files, string to);
12 |
13 | bool Rename(string from, string to);
14 |
15 | void CutToClipboard(StringCollection files);
16 |
17 | void CopyToClipboard(StringCollection files);
18 |
19 | bool IsPasteEnabled { get; }
20 |
21 | void PasteFromClipboard(string to);
22 |
23 | bool IsFilenameValid(string sourceFolder, string fileName);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IKeyboardAccelerator.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Typedown.Core.Models;
3 | using Windows.System;
4 |
5 | namespace Typedown.Core.Interfaces
6 | {
7 | public interface IKeyboardAccelerator
8 | {
9 | IDisposable Register(ShortcutKey key, EventHandler handler);
10 |
11 | IDisposable RegisterGlobal(EventHandler handler);
12 |
13 | IObservable GetObservable();
14 |
15 | string GetShortcutKeyText(ShortcutKey key);
16 |
17 | string GetVirtualKeyNameText(VirtualKey key);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IMarkdownEditor.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.ComponentModel;
3 | using Windows.Foundation;
4 | using Windows.UI.Xaml.Shapes;
5 |
6 | namespace Typedown.Core.Interfaces
7 | {
8 | public interface IMarkdownEditor : IDisposable, INotifyPropertyChanged
9 | {
10 | bool PostMessage(string name, object arg);
11 |
12 | Rectangle GetDummyRectangle(Rect rect);
13 |
14 | Rectangle MoveDummyRectangle(Point offset);
15 |
16 | bool IsEditorLoadFailed { get; }
17 |
18 | bool IsEditorLoaded { get; }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IPowerShellService.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace Typedown.Core.Interfaces
4 | {
5 | public interface IPowerShellService
6 | {
7 | IEnumerable Invoke(string script, string command, params string[] parameters);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IWindowPrivate.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.InteropServices;
3 |
4 | namespace Typedown.Core.Interfaces
5 | {
6 | [ComImport, Guid("06636C29-5A17-458D-8EA2-2422D997A922"), InterfaceType(ComInterfaceType.InterfaceIsIInspectable)]
7 | public interface IWindowPrivate
8 | {
9 | bool TransparentBackground { get; set; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Interfaces/IWindowService.cs:
--------------------------------------------------------------------------------
1 | using System.Reactive.Subjects;
2 | using Windows.Foundation;
3 | using Windows.UI.Xaml;
4 |
5 | namespace Typedown.Core.Interfaces
6 | {
7 | public interface IWindowService
8 | {
9 | Subject WindowStateChanged { get; }
10 |
11 | Subject WindowIsActivedChanged { get; }
12 |
13 | nint GetWindow(UIElement element);
14 |
15 | nint GetXamlSourceHandle(UIElement element);
16 |
17 | Point GetCursorPos(UIElement relativeTo);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/EventArgs/EditorEventArgs.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json.Linq;
2 |
3 | namespace Typedown.Core.Models
4 | {
5 | public class EditorEventArgs : global::System.EventArgs
6 | {
7 | public string Name { get; }
8 |
9 | public JToken Args { get; }
10 |
11 | public EditorEventArgs(string name, JToken args)
12 | {
13 | Name = name;
14 | Args = args;
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/EventArgs/KeyEventArgs.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Windows.System;
3 |
4 | namespace Typedown.Core.Models
5 | {
6 | public class KeyEventArgs : EventArgs
7 | {
8 | public bool Handled { get; set; }
9 |
10 | public VirtualKey Key { get; }
11 |
12 | public VirtualKeyModifiers Modifiers { get; }
13 |
14 | public KeyEventArgs(VirtualKey key, VirtualKeyModifiers modifiers)
15 | {
16 | Key = key;
17 | Modifiers = modifiers;
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/PersistentModels/FileAccessHistory.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.ComponentModel.DataAnnotations;
3 | using System.ComponentModel.DataAnnotations.Schema;
4 |
5 | namespace Typedown.Core.Models
6 | {
7 | [Table("FileAccessHistory")]
8 | public class FileAccessHistory
9 | {
10 | [Key]
11 | [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
12 | public int Id { get; set; }
13 |
14 | public DateTime AccessTime { get; set; }
15 |
16 | public string FilePath { get; set; }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/PersistentModels/FolderAccessHistory.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.ComponentModel.DataAnnotations;
3 | using System.ComponentModel.DataAnnotations.Schema;
4 |
5 | namespace Typedown.Core.Models
6 | {
7 | [Table("FolderAccessHistory")]
8 | public class FolderAccessHistory
9 | {
10 | [Key]
11 | [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
12 | public int Id { get; set; }
13 |
14 | public DateTime AccessTime { get; set; }
15 |
16 | public string FolderPath { get; set; }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/ContentState.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace Typedown.Core.Models
4 | {
5 | public class ContentState
6 | {
7 | public WordCount WordCount { get; set; }
8 |
9 | public List Toc { get; set; }
10 |
11 | public TocItem Cur { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/CursorState.cs:
--------------------------------------------------------------------------------
1 | using static Typedown.Core.Models.CursorState;
2 |
3 | namespace Typedown.Core.Models
4 | {
5 | public record CursorState(Pos Anchor, Pos Focus)
6 | {
7 | public record Pos(int Line, int Ch);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/DimNumber.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models
2 | {
3 | public record DimNumber
4 | {
5 | public NumberUnit Unit { get; set; }
6 |
7 | public double Value { get; set; }
8 |
9 | public DimNumber()
10 | {
11 |
12 | }
13 |
14 | public DimNumber(NumberUnit unit, double value = 0)
15 | {
16 | Unit = unit;
17 | Value = value;
18 | }
19 |
20 | public double GetValue(NumberUnit targetUnit)
21 | {
22 | return ((Value - Unit.Shift) / Unit.Scale) * targetUnit.Scale + targetUnit.Shift;
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/ExportConfigModels/ConfigModel.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json.Linq;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Threading.Tasks;
6 |
7 | namespace Typedown.Core.Models.ExportConfigModels
8 | {
9 | public partial class ConfigModel : INotifyPropertyChanged
10 | {
11 | public Dictionary Addition { get; } = new();
12 |
13 | public string ScriptAfter { get; } = string.Empty;
14 |
15 | public virtual Task Export(IServiceProvider serviceProvider, string html, string filePath) => null;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/ExportConfigModels/HTMLConfigModel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Threading.Tasks;
4 |
5 | namespace Typedown.Core.Models.ExportConfigModels
6 | {
7 | public class HTMLConfigModel : ConfigModel
8 | {
9 | public string ExtraHead { get; set; } = "";
10 |
11 | public string ExtraBody { get; set; } = "";
12 |
13 | public override async Task Export(IServiceProvider serviceProvider, string html, string filePath)
14 | {
15 | await File.WriteAllTextAsync(filePath, html);
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/ExportConfigModels/ImageConfigModel.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models.ExportConfigModels
2 | {
3 | public class ImageConfigModel : ConfigModel
4 | {
5 | public double DPI { get; set; }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/ExportPdfSettings.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Enums;
2 | using Windows.Foundation;
3 | using Windows.UI.Xaml;
4 |
5 | namespace Typedown.Core.Models
6 | {
7 | public class PdfPrintSettings
8 | {
9 | public PrintOrientation Orientation { get; set; }
10 |
11 | public double? ScaleFactor { get; set; }
12 |
13 | public Size? PageSize { get; set; }
14 |
15 | public Thickness? Margin { get; set; }
16 |
17 | public bool ShouldPrintHeaderAndFooter { get; set; }
18 |
19 | public string Header { get; set; } = string.Empty;
20 |
21 | public string Footer { get; set; } = string.Empty;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/HtmlImgTag.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models.RuntimeModels
2 | {
3 | public class HtmlImgTag
4 | {
5 | public string Src { get; set; }
6 |
7 | public string Title { get; set; }
8 |
9 | public string Alt { get; set; }
10 |
11 | public HtmlImgTag(string src, string alt = null, string title = null)
12 | {
13 | Src = src;
14 | Alt = alt;
15 | Title = title;
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/MarkdownCursor.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models
2 | {
3 | public record MarkdownCursor
4 | {
5 | public record Pos(string Key, int Offset);
6 |
7 | public Pos Anchor;
8 |
9 | public Pos Focus;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/MenuItemState.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models
2 | {
3 | public class MenuItemState
4 | {
5 | public bool IsEnable { get; set; }
6 |
7 | public bool IsChecked { get; set; }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/MenuState.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace Typedown.Core.Models
4 | {
5 | public class MenuState
6 | {
7 | public bool IsDisabled { get; set; }
8 | public bool IsMultiline { get; set; }
9 | public bool IsLooseListItem { get; set; }
10 | public bool IsTaskList { get; set; }
11 | public bool IsCodeFences { get; set; }
12 | public bool IsCodeContent { get; set; }
13 | public bool IsTable { get; set; }
14 | public bool IsFootnote { get; set; }
15 | public Dictionary Affiliation { get; set; }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/NumberUnit.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace Typedown.Core.Models
4 | {
5 | public struct NumberUnit
6 | {
7 | public string Name { get; }
8 |
9 | public double Scale { get; }
10 |
11 | public double Shift { get; }
12 |
13 | public NumberUnit(string name, double scale, double shift = 0)
14 | {
15 | Name = name;
16 | Scale = scale;
17 | Shift = shift;
18 | }
19 |
20 | public override bool Equals(object obj) => obj is NumberUnit other && Equals(other);
21 |
22 | public bool Equals(NumberUnit unit) => unit.Name == Name && unit.Scale == Scale && unit.Shift == Shift;
23 |
24 | public override int GetHashCode() => HashCode.Combine(Name, Scale, Shift);
25 |
26 | public static bool operator ==(NumberUnit lhs, NumberUnit rhs) => lhs.Equals(rhs);
27 |
28 | public static bool operator !=(NumberUnit lhs, NumberUnit rhs) => !(lhs == rhs);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/ScrollState.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models
2 | {
3 | public class ScrollState
4 | {
5 | public double ViewportWidth { get; set; }
6 | public double ViewportHeight { get; set; }
7 | public double MaximumX { get; set; }
8 | public double MaximumY { get; set; }
9 | public double ScrollX { get; set; }
10 | public double ScrollY { get; set; }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/ShortcutKey.cs:
--------------------------------------------------------------------------------
1 | using Windows.System;
2 |
3 | namespace Typedown.Core.Models
4 | {
5 | public record ShortcutKey(VirtualKeyModifiers Modifiers, VirtualKey Key)
6 | {
7 | public override string ToString()
8 | {
9 | return base.ToString();
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/ConfigModel.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json.Linq;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Threading.Tasks;
6 |
7 | namespace Typedown.Core.Models.UploadConfigModels
8 | {
9 | public partial class ConfigModel : INotifyPropertyChanged
10 | {
11 | public Dictionary Addition { get; } = new();
12 |
13 | public string UploadPath { get; set; } = string.Empty;
14 |
15 | public string ExternalURL { get; set; } = string.Empty;
16 |
17 | public virtual Task Upload(IServiceProvider serviceProvider, string filePath) => Task.FromResult(filePath);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/FTPConfigModel.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models.UploadConfigModels
2 | {
3 | public class FTPConfigModel : ConfigModel
4 | {
5 | public string Host { get; set; } = string.Empty;
6 |
7 | public int Port { get; set; } = 21;
8 |
9 | public string Username { get; set; } = string.Empty;
10 |
11 | public string Password { get; set; } = string.Empty;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/GitConfigModel.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models.UploadConfigModels
2 | {
3 | public class GitConfigModel : ConfigModel
4 | {
5 | public string URL { get; set; } = string.Empty;
6 |
7 | public string IdentityFile { get; set; } = string.Empty;
8 |
9 | public string Passphrase { get; set; } = string.Empty;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/OSSConfigModel.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models.UploadConfigModels
2 | {
3 | public class OSSConfigModel : ConfigModel
4 | {
5 | public string AccessKey { get; set; } = string.Empty;
6 |
7 | public string SecretKey { get; set; } = string.Empty;
8 |
9 | public string BucketName { get; set; } = string.Empty;
10 |
11 | public string ServiceURL { get; set; } = string.Empty;
12 |
13 | public string RegionEndpoint { get; set; } = string.Empty;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/PowerShellModel.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Extensions.DependencyInjection;
2 | using System;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using Typedown.Core.Interfaces;
6 |
7 | namespace Typedown.Core.Models.UploadConfigModels
8 | {
9 | public class PowerShellModel : ConfigModel
10 | {
11 | public static string DefaultScript = "# Upload file and return URL\nfunction Upload-Image($FilePath)\n{ \n return $FilePath\n}";
12 |
13 | public string Script { get; set; } = DefaultScript;
14 |
15 | public override async Task Upload(IServiceProvider serviceProvider, string filePath)
16 | {
17 | return await Task.Run(() =>
18 | {
19 | var powerShell = serviceProvider.GetService();
20 | var result = powerShell.Invoke(Script, "Upload-Image", filePath);
21 | return result.First();
22 | });
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/UploadConfigModels/SCPConfigModel.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models.UploadConfigModels
2 | {
3 | public class SCPConfigModel : ConfigModel
4 | {
5 | public string Host { get; set; } = string.Empty;
6 |
7 | public int Port { get; set; } = 22;
8 |
9 | public string Username { get; set; } = string.Empty;
10 |
11 | public bool PubKeyAuthentication { get; set; }
12 |
13 | public string Password { get; set; } = string.Empty;
14 |
15 | public string IdentityFile { get; set; } = string.Empty;
16 |
17 | public string Passphrase { get; set; } = string.Empty;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Models/RuntimeModels/WordCount.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Models
2 | {
3 | public class WordCount
4 | {
5 | public int Word { get; set; }
6 |
7 | public int Character { get; set; }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Typedown.Core.ViewModels;
3 | using Windows.UI.Xaml.Controls;
4 |
5 | namespace Typedown.Core.Pages
6 | {
7 | public sealed partial class MainPage : Page
8 | {
9 | public AppViewModel AppViewModel => this.GetService();
10 |
11 | public MainPage()
12 | {
13 | InitializeComponent();
14 | }
15 |
16 | private void OnUnloaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
17 | {
18 | Bindings?.StopTracking();
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/Route.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Typedown.Core.Pages.SettingPages;
3 |
4 | namespace Typedown.Core.Pages
5 | {
6 | public static class Route
7 | {
8 | public static Type GetRootPageType(string name) => name switch
9 | {
10 | "Main" => typeof(MainPage),
11 | "Settings" => typeof(SettingsPage),
12 | _ => null
13 | };
14 |
15 | public static Type GetSettingsPageType(string name) => name switch
16 | {
17 | "About" => typeof(AboutPage),
18 | "Editor" => typeof(EditorPage),
19 | "ExportConfig" => typeof(ExportConfigPage),
20 | "Export" => typeof(ExportPage),
21 | "General" => typeof(GeneralPage),
22 | "Image" => typeof(ImagePage),
23 | "ImageUpload" => typeof(ImageUploadPage),
24 | "Shortcut" => typeof(ShortcutPage),
25 | "UploadConfig" => typeof(UploadConfigPage),
26 | "View" => typeof(ViewPage),
27 | _ => null
28 | };
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/AboutPage.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/AboutPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("About.Title")]
7 | public sealed partial class AboutPage : Page
8 | {
9 | public AboutPage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/EditorPage.xaml:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/EditorPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("Editor.Title")]
7 | public sealed partial class EditorPage : Page
8 | {
9 | public EditorPage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ExportConfigPage.xaml:
--------------------------------------------------------------------------------
1 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ExportPage.xaml:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ExportPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("Export.Title")]
7 | public sealed partial class ExportPage : Page
8 | {
9 | public ExportPage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/GeneralPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/GeneralPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("General.Title")]
7 | public sealed partial class GeneralPage : Page
8 | {
9 | public GeneralPage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ImagePage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ImagePage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("Image.Title")]
7 | public sealed partial class ImagePage : Page
8 | {
9 | public ImagePage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ImageUploadPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ImageUploadPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("ImageUpload.Title")]
7 | public sealed partial class ImageUploadPage : Page
8 | {
9 | public ImageUploadPage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ShortcutPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ShortcutPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("Shortcut.Title")]
7 | public sealed partial class ShortcutPage : Page
8 | {
9 | public ShortcutPage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/UploadConfigPage.xaml:
--------------------------------------------------------------------------------
1 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ViewPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Pages/SettingPages/ViewPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Typedown.Core.Utilities;
2 | using Windows.UI.Xaml.Controls;
3 |
4 | namespace Typedown.Core.Pages.SettingPages
5 | {
6 | [Locale("View.Title")]
7 | public sealed partial class ViewPage : Page
8 | {
9 | public ViewPage()
10 | {
11 | this.InitializeComponent();
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("Typedown.Core")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("Typedown.Core")]
13 | [assembly: AssemblyCopyright("Copyright © 2022")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 程序集的版本信息由下列四个值组成:
18 | //
19 | // 主版本
20 | // 次版本
21 | // 生成号
22 | // 修订号
23 | //
24 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
25 | //通过使用 "*",如下所示:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.2.18.0")]
28 | [assembly: AssemblyFileVersion("1.2.18.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Properties/Typedown.Core.rd.xml:
--------------------------------------------------------------------------------
1 |
2 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Resources.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using Windows.UI.Xaml;
7 |
8 | namespace Typedown.Core
9 | {
10 | public class Resources : ResourceDictionary
11 | {
12 | public Resources()
13 | {
14 | MergedDictionaries.Add(new Microsoft.UI.Xaml.Controls.XamlControlsResources());
15 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/Button.xaml") });
16 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/ComboBox.xaml") });
17 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/ContentDialog.xaml") });
18 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Styles/ToggleSwitch.xaml") });
19 | MergedDictionaries.Add(new() { Source = new("ms-appx:///Typedown.Core/Resources/Converters.xaml") });
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Resources/Converters.xaml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Utilities/CommandLine.cs:
--------------------------------------------------------------------------------
1 | using System.Linq;
2 |
3 | namespace Typedown.Core.Utilities
4 | {
5 | public static class CommandLine
6 | {
7 | public static string GetOpenFilePath(string[] commandLineArgs)
8 | {
9 | return commandLineArgs?.Where(FileTypeHelper.IsMarkdownFile).FirstOrDefault();
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Utilities/ControlExtensions.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using Windows.UI.Xaml;
3 | using Windows.UI.Xaml.Controls;
4 |
5 | namespace Typedown.Core.Utilities
6 | {
7 | public static class ControlExtensions
8 | {
9 | public static DependencyObject GetTemplateChild(this Control control, string childName)
10 | {
11 | var method = typeof(Control).GetMethod("GetTemplateChild", BindingFlags.NonPublic | BindingFlags.Instance);
12 | return method.Invoke(control, new object[] { childName }) as DependencyObject;
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Utilities/Log.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading.Tasks;
3 | using Typedown.Core.Controls;
4 |
5 | namespace Typedown.Core.Utilities
6 | {
7 | public static class Log
8 | {
9 | public static Task Report(string type, string content)
10 | {
11 | return Task.Run(() => Common.Post("https://typedown.ownbox.cn/report", new
12 | {
13 | version = AboutApp.GetAppVersion(),
14 | system = Environment.OSVersion.VersionString,
15 | type,
16 | content,
17 | }));
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Utilities/NumberUnit.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using Typedown.Core.Models;
3 |
4 | namespace Typedown.Core.Utilities
5 | {
6 | public static class Units
7 | {
8 | public static NumberUnit Centimeter { get; } = new("cm", 1);
9 |
10 | public static NumberUnit Inch { get; } = new("in", 0.3937007874);
11 |
12 | public static IReadOnlyList LengthUnits { get; } = new List() { Centimeter, Inch };
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Dev/Typedown.Core/Utilities/PInvoke/PInvoke.Kernel32.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Runtime.InteropServices;
3 |
4 | namespace Typedown.Core.Utilities
5 | {
6 | public static partial class PInvoke
7 | {
8 | [DllImport("kernel32.dll", ExactSpelling = true)]
9 | public static extern uint GetCurrentThreadId();
10 |
11 | [DllImport("kernel32.dll", ExactSpelling = true)]
12 | [return: MarshalAs(UnmanagedType.Bool)]
13 | public static extern bool QueryPerformanceFrequency(out long frequency);
14 |
15 | [DllImport("kernel32.dll", EntryPoint = "LoadLibraryW", CharSet = CharSet.Unicode, ExactSpelling = true)]
16 | public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPWStr)] string lpFileName);
17 |
18 | [DllImport("kernel32.dll", EntryPoint = "GetModuleHandleW", CharSet = CharSet.Unicode, ExactSpelling = true)]
19 | public static extern nint GetModuleHandle([MarshalAs(UnmanagedType.LPWStr)] string lpModuleName);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "es2021": true
5 | },
6 | "extends": [
7 | "eslint:recommended",
8 | "plugin:react/recommended",
9 | "plugin:react-hooks/recommended",
10 | "plugin:@typescript-eslint/recommended"
11 | ],
12 | "parser": "@typescript-eslint/parser",
13 | "parserOptions": {
14 | "ecmaFeatures": {
15 | "jsx": true
16 | },
17 | "ecmaVersion": "latest",
18 | "sourceType": "module"
19 | },
20 | "plugins": [
21 | "react",
22 | "@typescript-eslint"
23 | ],
24 | "rules": {
25 | "react/prop-types": "off",
26 | "@typescript-eslint/no-var-requires": "off",
27 | "@typescript-eslint/no-empty-function": "off",
28 | "no-redeclare": "off",
29 | "@typescript-eslint/no-this-alias": "off",
30 | "no-prototype-builtins": "off",
31 | "@typescript-eslint/no-explicit-any": "off",
32 | "no-unreachable": "off"
33 | }
34 | }
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Typedown.Editor",
6 | "type": "chrome",
7 | "request": "attach",
8 | "port": 9222,
9 | "webRoot": "${workspaceFolder}"
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Typedown
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/App.scss:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | min-width: 400px;
4 | }
5 |
6 | :root::-webkit-scrollbar {
7 | width: 0;
8 | display: none;
9 | }
10 |
11 | .CodeMirror-sizer {
12 | margin-bottom: 64px !important;
13 | }
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Editor from 'components/Editor';
3 | import ErrorBoundary from 'components/ErrorBoundary';
4 | import 'services/theme'
5 | import 'services/scrollbar'
6 | import 'services/localization'
7 | import './App.scss';
8 |
9 | document.oncontextmenu = () => false;
10 |
11 | function App() {
12 | return (
13 |
14 |
15 |
16 | );
17 | }
18 |
19 | export default App;
20 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/add_close.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/align_center.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/align_left.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/align_right.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/bullet_list.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/copy.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/delete.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/enter.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/folder.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/format_clear.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/format_emphasis.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/format_link.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/format_underline.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/header_1.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/header_4.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/horizontal_line.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/html.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/image.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/image_dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_dark.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/image_dark_fail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_dark_fail.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/image_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_light.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/image_light_fail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/icons/image_light_fail.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/mermaid.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/new_table.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/paragraph.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/quote.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/sequence.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/table.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/table_add.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/icons/todolist.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_center/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_center/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_center/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_center/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_center/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_center/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_left/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_left/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_left/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_left/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_left/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_left/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_right/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_right/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_right/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_right/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/algin_right/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/algin_right/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/bullet_list/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/chart/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/chart/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/chart/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/chart/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/chart/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/chart/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/code/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/code/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/code/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/code/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/code/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/code/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/copy/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/copy/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/copy/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/copy/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/copy/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/copy/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/delete/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/delete/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/delete/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/delete/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/delete/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/delete/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/flowchart/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/flowchart/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/flowchart/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/flowchart/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/flowchart/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/flowchart/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/footnote/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/footnote/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/footnote/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/footnote/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/footnote/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/footnote/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_clear/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_clear/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_clear/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_clear/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_clear/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_clear/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_emphasis/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_image/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_image/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_image/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_image/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_image/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_image/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_link/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_link/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_link/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_link/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_link/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_link/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_math/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_math/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_math/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_math/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_math/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_math/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_strike/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strike/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_strike/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strike/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_strike/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strike/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_strong/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strong/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_strong/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strong/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_strong/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_strong/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_underline/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_underline/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_underline/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_underline/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/format_underline/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/format_underline/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/front_matter/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/front_matter/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/front_matter/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/front_matter/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/front_matter/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/front_matter/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_1/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_1/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_1/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_1/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_1/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_1/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_2/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_2/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_2/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_2/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_2/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_2/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_3/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_3/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_3/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_3/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_3/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_3/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_4/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_4/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_4/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_4/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_4/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_4/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_5/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_5/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_5/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_5/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_5/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_5/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_6/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_6/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_6/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_6/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/heading_6/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/heading_6/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/highlight/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/highlight/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/highlight/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/highlight/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/highlight/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/highlight/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/horizontal_line/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/html/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/html/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/html/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/html/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/html/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/html/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/imageEdit/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image_delete/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_delete/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image_delete/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_delete/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image_delete/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_delete/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image_fail/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_fail/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image_fail/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_fail/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/image_fail/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/image_fail/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/inline_image/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/inline_image/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/inline_image/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/inline_image/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/inline_image/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/inline_image/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/link_jump/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/link_jump/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/link_jump/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/link_jump/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/link_jump/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/link_jump/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/math/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/math/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/math/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/math/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/math/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/math/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/mermaid/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/mermaid/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/mermaid/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/mermaid/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/mermaid/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/mermaid/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/new_table/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/new_table/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/new_table/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/new_table/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/new_table/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/new_table/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/order_list/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/order_list/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/order_list/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/order_list/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/order_list/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/order_list/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/paragraph/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/paragraph/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/paragraph/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/paragraph/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/paragraph/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/paragraph/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/plantuml/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/plantuml/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/plantuml/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/plantuml/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/plantuml/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/plantuml/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/quote/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/quote/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/quote/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/quote_block/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote_block/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/quote_block/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote_block/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/quote_block/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/quote_block/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/sequence/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/sequence/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/sequence/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/sequence/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/sequence/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/sequence/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/table/table.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table/table.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/table/table@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table/table@2x.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/table/table@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table/table@3x.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/table_delete/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table_delete/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/table_delete/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table_delete/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/table_delete/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/table_delete/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/todolist/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/todolist/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/todolist/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/todolist/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/todolist/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/todolist/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/turninto/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/turninto/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/turninto/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/turninto/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/turninto/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/turninto/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/unlink/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/unlink/1.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/unlink/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/unlink/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/unlink/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/unlink/3.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/pngicon/warning/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/pngicon/warning/2.png
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/styles/danielbd.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/styles/danielbd.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/styles/danielbd.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/assets/styles/danielbd.woff2
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/assets/styles/sequence-diagram.css:
--------------------------------------------------------------------------------
1 | /** js sequence diagrams
2 | * https://bramp.github.io/js-sequence-diagrams/
3 | * (c) 2012-2017 Andrew Brampton (bramp.net)
4 | * Simplified BSD license.
5 | */
6 | @font-face {
7 | font-family: 'danielbd';
8 | src: url('danielbd.woff2') format('woff2'),
9 | url('danielbd.woff') format('woff');
10 | font-weight: normal;
11 | font-style: normal;
12 | }
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Editor/index.scss:
--------------------------------------------------------------------------------
1 | .react-codemirror2 {
2 | height: 100%;
3 | }
4 |
5 | .CodeMirror {
6 | height: auto !important;
7 | }
8 |
9 | .CodeMirror-scroll {
10 | min-height: calc(100vh - 48px);
11 | cursor: text;
12 | }
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Editor/type.d.ts:
--------------------------------------------------------------------------------
1 |
2 | interface IExportArgs {
3 | type: string,
4 | context: unknown,
5 | basePath: string,
6 | title: string,
7 | options: object | undefined
8 | }
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/ErrorBoundary/index.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { remote } from "services/remote";
3 |
4 | class ErrorBoundary extends React.Component {
5 |
6 | constructor(props) {
7 | super(props);
8 | this.state = { hasError: false };
9 | }
10 |
11 | static getDerivedStateFromError() {
12 | return { hasError: true };
13 | }
14 |
15 | componentDidCatch(error, errorInfo) {
16 | remote.unhandledException(error + '\n\n' + JSON.stringify(errorInfo));
17 | }
18 |
19 | render() {
20 | if (this.state.hasError) {
21 | return <>>;
22 | }
23 | return this.props.children;
24 | }
25 | }
26 |
27 | export default ErrorBoundary
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/eventHandler/clipboard.js:
--------------------------------------------------------------------------------
1 | class Clipboard {
2 | constructor(muya) {
3 | this.muya = muya
4 | this.listen()
5 | }
6 |
7 | listen() {
8 | this.contentState = this.muya.contentState
9 | }
10 |
11 | copy({ type, copyInfo }) {
12 | this.contentState.copyHandler(type, copyInfo)
13 | }
14 |
15 | cut({ type, copyInfo }) {
16 | this.contentState.copyHandler(type, copyInfo)
17 | this.contentState.cutHandler()
18 | }
19 |
20 | paste({ type, text, html }) {
21 | this.contentState.pasteHandler(type, text ?? '', html ?? '')
22 | }
23 |
24 | }
25 |
26 | export default Clipboard
27 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/eventHandler/resize.js:
--------------------------------------------------------------------------------
1 | // import resizeCodeBlockLineNumber from '../utils/resizeCodeLineNumber'
2 | // import { throttle } from '../utils'
3 |
4 | class Resize {
5 | constructor (muya) {
6 | this.muya = muya
7 | this.listen()
8 | }
9 |
10 | listen () {
11 | // FIXME: Disabled due to #1648.
12 | // const { codeBlockLineNumbers } = this.muya.options
13 | // if (!codeBlockLineNumbers) {
14 | // return
15 | // }
16 | //
17 | // window.addEventListener('resize', throttle(() => {
18 | // const codeBlocks = document.querySelectorAll('pre.line-numbers')
19 | // if (codeBlocks.length) {
20 | // for (const ele of codeBlocks) {
21 | // resizeCodeBlockLineNumber(ele)
22 | // }
23 | // }
24 | // }, 300))
25 | }
26 | }
27 |
28 | export default Resize
29 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/marked/README.md:
--------------------------------------------------------------------------------
1 | # Marked
2 |
3 | This folder contains a patched [Marked.js](https://github.com/markedjs/marked/) version based on `v0.8.2` and bug fixes from `v1.2.5`, no breaking changes from `v1.0.0` are included.
4 |
5 | ## Changes
6 |
7 | ### Features
8 |
9 | - Markdown Extra: frontmatter and inline and block math
10 | - GFM like: emojis
11 |
12 | ### (Inline) Lexer
13 |
14 | - `disableInline` mode
15 | - Custom list and list item implementation based on an older marked.js version
16 | - Slightly modified definition due `disableInline`
17 | - More token information like list item bullet type
18 |
19 | ### Renderer
20 |
21 | - Emoji renderer
22 | - Frontmatter renderer
23 | - Inline and block (`multiplemath`) math renderer
24 |
25 | ## License
26 |
27 | [MIT](LICENSE)
28 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/index.js:
--------------------------------------------------------------------------------
1 | import renderBlock from './renderBlock'
2 | import renderLeafBlock from './renderLeafBlock'
3 | import renderContainerBlock from './renderContainerBlock'
4 | import renderIcon from './renderIcon'
5 |
6 | export default {
7 | renderBlock,
8 | renderLeafBlock,
9 | renderContainerBlock,
10 | renderIcon
11 | }
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderBlock.js:
--------------------------------------------------------------------------------
1 | /**
2 | * [renderBlock render one block, no matter it is a container block or text block]
3 | */
4 | export default function renderBlock (parent, block, activeBlocks, matches, useCache = false) {
5 | const method = Array.isArray(block.children) && block.children.length > 0
6 | ? 'renderContainerBlock'
7 | : 'renderLeafBlock'
8 |
9 | return this[method](parent, block, activeBlocks, matches, useCache)
10 | }
11 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderContainerEditIcon.js:
--------------------------------------------------------------------------------
1 | import { h } from '../snabbdom'
2 | import { CLASS_OR_ID } from '../../../config'
3 |
4 | export const renderEditIcon = () => {
5 | const selector = `a.${CLASS_OR_ID.AG_CONTAINER_ICON}`
6 |
7 | const iconVnode = h(`span.icon`, {
8 | style: {
9 | 'font-family': '"Segoe Fluent Icons", "Segoe MDL2 Assets"',
10 | 'margin-top':'2px',
11 | 'font-size': '8px',
12 | }
13 | }, String.fromCharCode(parseInt('E70F', 16)))
14 |
15 | return h(selector, {
16 | attrs: {
17 | contenteditable: 'false'
18 | }
19 | }, iconVnode)
20 | }
21 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderCopyButton.js:
--------------------------------------------------------------------------------
1 | import { h } from '../snabbdom'
2 |
3 | const renderCopyButton = () => {
4 | const selector = 'a.ag-code-copy'
5 |
6 | const iconVnode = h(`span.icon`, {
7 | style: {
8 | 'font-family': '"Segoe Fluent Icons", "Segoe MDL2 Assets"',
9 | 'font-size': '16px'
10 | }
11 | }, String.fromCharCode(parseInt('E8C8', 16)))
12 |
13 | return h(selector, {
14 | attrs: {
15 | 'data-tooltip': 'CopyContent',
16 | contenteditable: 'false'
17 | }
18 | }, iconVnode)
19 | }
20 |
21 | export default renderCopyButton
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderFootnoteJump.js:
--------------------------------------------------------------------------------
1 | import { h } from '../snabbdom'
2 |
3 | export const footnoteJumpIcon = () => {
4 | return h('span.ag-footnote-backlink', {
5 | style: {
6 | 'font-family': '"Segoe Fluent Icons", "Segoe MDL2 Assets"',
7 | 'font-size': '12px',
8 | }
9 | }, String.fromCharCode(parseInt('EB97', 16)))
10 | }
11 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderLineNumber.js:
--------------------------------------------------------------------------------
1 | import { h } from '../snabbdom'
2 |
3 | const NEW_LINE_EXP = /\n(?!$)/g
4 |
5 | const renderLineNumberRows = codeContent => {
6 | const { text } = codeContent
7 | const match = text.match(NEW_LINE_EXP)
8 | let linesNum = match ? match.length + 1 : 1
9 | if (text.endsWith('\n')) {
10 | linesNum++
11 | }
12 | const data = {
13 | attrs: {
14 | 'aria-hidden': true
15 | }
16 | }
17 | const children = [...new Array(linesNum)].map(() => h('span'))
18 |
19 | return h('span.line-numbers-rows', data, children)
20 | }
21 |
22 | export default renderLineNumberRows
23 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderBlock/renderTableDargBar.js:
--------------------------------------------------------------------------------
1 | import { h } from '../snabbdom'
2 |
3 | export const renderLeftBar = () => {
4 | return h('span.ag-drag-handler.left', {
5 | attrs: { contenteditable: 'false' }
6 | })
7 | }
8 |
9 | export const renderBottomBar = () => {
10 | return h('span.ag-drag-handler.bottom', {
11 | attrs: { contenteditable: 'false' }
12 | })
13 | }
14 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/autoLinkExtension.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 | import { sanitizeHyperlink } from '../../../utils/url'
3 |
4 | // render auto_link to vdom
5 | export default function autoLinkExtension (h, cursor, block, token, outerClass) {
6 | const { linkType, www, url, email } = token
7 | const { start, end } = token.range
8 |
9 | const content = this.highlight(h, block, start, end, token)
10 | const hyperlink = linkType === 'www' ? encodeURI(`http://${www}`) : (linkType === 'url' ? encodeURI(url) : `mailto:${email}`)
11 |
12 | return [
13 | h(`a.${CLASS_OR_ID.AG_INLINE_RULE}.${CLASS_OR_ID.AG_AUTO_LINK_EXTENSION}`, {
14 | attrs: {
15 | spellcheck: 'false'
16 | },
17 | props: {
18 | href: sanitizeHyperlink(hyperlink),
19 | target: '_blank'
20 | }
21 | }, content)
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/backlash.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function backlash (h, cursor, block, token, outerClass) {
4 | const className = this.getClassName(outerClass, block, token, cursor)
5 | const { start, end } = token.range
6 | const content = this.highlight(h, block, start, end, token)
7 |
8 | return [
9 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, content)
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/backlashInToken.js:
--------------------------------------------------------------------------------
1 | import { union, isEven } from '../../../utils'
2 | import { CLASS_OR_ID } from '../../../config'
3 | // TODO HIGHLIGHT
4 | export default function backlashInToken (h, backlashes, outerClass, start, token) {
5 | const { highlights = [] } = token
6 | const chunks = backlashes.split('')
7 | const len = chunks.length
8 | const result = []
9 | let i
10 |
11 | for (i = 0; i < len; i++) {
12 | const chunk = chunks[i]
13 | const light = highlights.filter(light => union({ start: start + i, end: start + i + 1 }, light))
14 | let selector = 'span'
15 | if (light.length) {
16 | const className = this.getHighlightClassName(light[0].active)
17 | selector += `.${className}`
18 | }
19 | if (isEven(i)) {
20 | result.push(
21 | h(`${selector}.${outerClass}`, chunk)
22 | )
23 | } else {
24 | result.push(
25 | h(`${selector}.${CLASS_OR_ID.AG_BACKLASH}`, chunk)
26 | )
27 | }
28 | }
29 |
30 | return result
31 | }
32 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/codeFense.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function codeFense (h, cursor, block, token, outerClass) {
4 | const { start, end } = token.range
5 | const { marker } = token
6 |
7 | const markerContent = this.highlight(h, block, start, start + marker.length, token)
8 | const content = this.highlight(h, block, start + marker.length, end, token)
9 |
10 | return [
11 | h(`span.${CLASS_OR_ID.AG_GRAY}`, markerContent),
12 | h(`span.${CLASS_OR_ID.AG_LANGUAGE}`, {
13 | attrs: {
14 | spellcheck: 'false'
15 | }
16 | }, content)
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/del.js:
--------------------------------------------------------------------------------
1 | export default function del (h, cursor, block, token, outerClass) {
2 | return this.delEmStrongFac('del', h, cursor, block, token, outerClass)
3 | }
4 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/em.js:
--------------------------------------------------------------------------------
1 | export default function em (h, cursor, block, token, outerClass) {
2 | return this.delEmStrongFac('em', h, cursor, block, token, outerClass)
3 | }
4 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/footnoteIdentifier.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function footnoteIdentifier (h, cursor, block, token, outerClass) {
4 | const className = this.getClassName(outerClass, block, token, cursor)
5 | const { marker } = token
6 | const { start, end } = token.range
7 |
8 | const startMarker = this.highlight(h, block, start, start + marker.length, token)
9 | const endMarker = this.highlight(h, block, end - 1, end, token)
10 | const content = this.highlight(h, block, start + marker.length, end - 1, token)
11 |
12 | return [
13 | h(`sup#noteref-${token.content}.${CLASS_OR_ID.AG_INLINE_FOOTNOTE_IDENTIFIER}.${CLASS_OR_ID.AG_INLINE_RULE}`, [
14 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, startMarker),
15 | h('a', {
16 | attrs: {
17 | spellcheck: 'false'
18 | }
19 | }, content),
20 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, endMarker)
21 | ])
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/hardLineBreak.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function softLineBreak (h, cursor, block, token, outerClass) {
4 | const { spaces, lineBreak, isAtEnd } = token
5 | const className = CLASS_OR_ID.AG_HARD_LINE_BREAK
6 | const spaceClass = CLASS_OR_ID.AG_HARD_LINE_BREAK_SPACE
7 | if (isAtEnd) {
8 | return [
9 | h(`span.${className}`, h(`span.${spaceClass}`, spaces)),
10 | h(`span.${CLASS_OR_ID.AG_LINE_END}`, lineBreak)
11 | ]
12 | } else {
13 | return [
14 | h(`span.${className}`, [h(`span.${spaceClass}`, spaces), lineBreak])
15 | ]
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/header.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function header (h, cursor, block, token, outerClass) {
4 | const { content } = token
5 | const { start, end } = token.range
6 | const className = this.getClassName(outerClass, block, {
7 | range: {
8 | start,
9 | end: end - content.length
10 | }
11 | }, cursor)
12 | const markerVnode = this.highlight(h, block, start, end - content.length, token)
13 | const contentVnode = this.highlight(h, block, end - content.length, end, token)
14 | const spaceSelector = className === CLASS_OR_ID.AG_HIDE
15 | ? `span.${CLASS_OR_ID.AG_HEADER_TIGHT_SPACE}.${CLASS_OR_ID.AG_REMOVE}`
16 | : `span.${CLASS_OR_ID.AG_GRAY}.${CLASS_OR_ID.AG_REMOVE}`
17 |
18 | return [
19 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, markerVnode),
20 | h(spaceSelector, contentVnode)
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/hr.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function hr (h, cursor, block, token, outerClass) {
4 | const { start, end } = token.range
5 | const content = this.highlight(h, block, start, end, token)
6 | return [
7 | h(`span.${CLASS_OR_ID.AG_GRAY}.${CLASS_OR_ID.AG_REMOVE}`, content)
8 | ]
9 | }
10 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/htmlEscape.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 | import escapeCharactersMap from '../../escapeCharacter'
3 |
4 | export default function htmlEscape (h, cursor, block, token, outerClass) {
5 | const className = this.getClassName(outerClass, block, token, cursor)
6 | const { escapeCharacter } = token
7 | const { start, end } = token.range
8 |
9 | const content = this.highlight(h, block, start, end, token)
10 |
11 | return [
12 | h(`span.${className}.${CLASS_OR_ID.AG_HTML_ESCAPE}`, {
13 | dataset: {
14 | character: escapeCharactersMap[escapeCharacter]
15 | }
16 | }, content)
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/inlineCode.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function inlineCode (h, cursor, block, token, outerClass) {
4 | const className = this.getClassName(outerClass, block, token, cursor)
5 | const { marker } = token
6 | const { start, end } = token.range
7 |
8 | const startMarker = this.highlight(h, block, start, start + marker.length, token)
9 | const endMarker = this.highlight(h, block, end - marker.length, end, token)
10 | const content = this.highlight(h, block, start + marker.length, end - marker.length, token)
11 |
12 | return [
13 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, startMarker),
14 | h(`code.${CLASS_OR_ID.AG_INLINE_RULE}`, {
15 | attrs: {
16 | spellcheck: 'false'
17 | }
18 | }, content),
19 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, endMarker)
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/multipleMath.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function multipleMath (h, cursor, block, token, outerClass) {
4 | const { start, end } = token.range
5 | const content = this.highlight(h, block, start, end, token)
6 | return [
7 | h(`span.${CLASS_OR_ID.AG_GRAY}.${CLASS_OR_ID.AG_REMOVE}`, content)
8 | ]
9 | }
10 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/softLineBreak.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function hardLineBreak (h, cursor, block, token, outerClass) {
4 | const { lineBreak, isAtEnd } = token
5 | let selector = `span.${CLASS_OR_ID.AG_SOFT_LINE_BREAK}`
6 | if (isAtEnd) {
7 | selector += `.${CLASS_OR_ID.AG_LINE_END}`
8 | }
9 |
10 | return [
11 | h(selector, lineBreak)
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/strong.js:
--------------------------------------------------------------------------------
1 | export default function strong (h, cursor, block, token, outerClass) {
2 | return this.delEmStrongFac('strong', h, cursor, block, token, outerClass)
3 | }
4 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/superSubScript.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../../../config'
2 |
3 | export default function superSubScript (h, cursor, block, token, outerClass) {
4 | const className = this.getClassName(outerClass, block, token, cursor)
5 | const { marker } = token
6 | const { start, end } = token.range
7 |
8 | const startMarker = this.highlight(h, block, start, start + marker.length, token)
9 | const endMarker = this.highlight(h, block, end - marker.length, end, token)
10 | const content = this.highlight(h, block, start + marker.length, end - marker.length, token)
11 | const tagName = marker === '^' ? 'sup' : 'sub'
12 |
13 | return [
14 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, startMarker),
15 | h(`${tagName}.${CLASS_OR_ID.AG_INLINE_RULE}`, {
16 | attrs: {
17 | spellcheck: 'false'
18 | }
19 | }, content),
20 | h(`span.${className}.${CLASS_OR_ID.AG_REMOVE}`, endMarker)
21 | ]
22 | }
23 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/tailHeader.js:
--------------------------------------------------------------------------------
1 | export default function tailHeader (h, cursor, block, token, outerClass) {
2 | const className = this.getClassName(outerClass, block, token, cursor)
3 | const { start, end } = token.range
4 | const content = this.highlight(h, block, start, end, token)
5 | if (/^h\d$/.test(block.type)) {
6 | return [
7 | h(`span.${className}`, content)
8 | ]
9 | } else {
10 | return content
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/renderInlines/text.js:
--------------------------------------------------------------------------------
1 | // render token of text type to vdom.
2 | export default function text (h, cursor, block, token) {
3 | const { start, end } = token.range
4 | return [
5 | h('span.ag-plain-text', this.highlight(h, block, start, end, token))
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/sequence.js:
--------------------------------------------------------------------------------
1 |
2 | import Diagram from '../../../../../assets/libs/sequence-diagram-snap'
3 | import '../../../../../assets/styles/sequence-diagram.css'
4 |
5 | export default Diagram
6 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/parser/render/snabbdom.js:
--------------------------------------------------------------------------------
1 | import {
2 | init,
3 | classModule,
4 | attributesModule,
5 | datasetModule,
6 | propsModule,
7 | styleModule,
8 | eventListenersModule,
9 | h as sh,
10 | toVNode as sToVNode
11 | } from 'snabbdom'
12 |
13 | export const patch = init([
14 | classModule,
15 | attributesModule,
16 | styleModule,
17 | propsModule,
18 | datasetModule,
19 | eventListenersModule
20 | ])
21 |
22 | export const h = sh
23 | export const toVNode = sToVNode
24 |
25 | export const toHTML = require('snabbdom-to-html') // helper function for convert vnode to HTML string
26 | export const htmlToVNode = html => { // helper function for convert html to vnode
27 | const wrapper = document.createElement('div')
28 | wrapper.innerHTML = html
29 |
30 | return toVNode(wrapper).children
31 | }
32 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/ui/fileIcons/index.js:
--------------------------------------------------------------------------------
1 | // Because the sidebar also use the file icons, So I put this file out of floatBox directory.
2 | import '@marktext/file-icons/build/index.css'
3 | import fileIcons from '@marktext/file-icons'
4 |
5 | fileIcons.getClassByName = function (name) {
6 | const icon = fileIcons.matchName(name)
7 |
8 | return icon ? icon.getClass(0, false) : null
9 | }
10 |
11 | fileIcons.getClassByLanguage = function (lang) {
12 | const icon = fileIcons.matchLanguage(lang)
13 |
14 | return icon ? icon.getClass(0, false) : null
15 | }
16 |
17 | export default fileIcons
18 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/ui/footnoteTool/index.css:
--------------------------------------------------------------------------------
1 | .ag-footnote-tool-container {
2 | width: 300px;
3 | border-radius: 5px;
4 | }
5 |
6 | .ag-footnote-tool-container .ag-footnote-tool>div {
7 | display: flex;
8 | height: 35px;
9 | align-items: center;
10 | color: var(--editorColor);
11 | font-size: 12px;
12 | padding: 0 10px;
13 | }
14 |
15 | .ag-footnote-tool .text {
16 | text-overflow: ellipsis;
17 | overflow: hidden;
18 | white-space: nowrap;
19 | flex: 1;
20 | }
21 |
22 | .ag-footnote-tool .btn {
23 | width: 40px;
24 | display: inline-block;
25 | cursor: pointer;
26 | }
27 |
28 | .ag-footnote-tool .icon-wrapper {
29 | width: 16px;
30 | height: 24px;
31 | margin-right: 6px;
32 | position: relative;
33 | }
34 |
35 | .ag-footnote-tool .icon-wrapper span.icon {
36 | display: inline-block;
37 | position: absolute;
38 | top: 0;
39 | height: 100%;
40 | width: 100%;
41 | overflow: hidden;
42 | color: var(--iconColor);
43 | transition: all .25s ease-in-out;
44 | }
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/ui/formatPicker.js:
--------------------------------------------------------------------------------
1 | import transport from 'services/transport'
2 |
3 | class FormatPicker {
4 | static pluginName = 'formatPicker'
5 | constructor(muya) {
6 | muya.eventCenter.subscribe('muya-format-picker', ({ reference, ...arg }) => {
7 | if (reference) {
8 | const boundingClientRect = reference.getBoundingClientRect()
9 | transport.postMessage('OpenFormatPicker', { ...arg, boundingClientRect })
10 | }
11 | })
12 | }
13 | }
14 |
15 | export default FormatPicker
16 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/ui/frontMenu.js:
--------------------------------------------------------------------------------
1 | import transport from 'services/transport'
2 |
3 | class FrontMenu {
4 | static pluginName = 'frontMenu'
5 |
6 | constructor(muya) {
7 | muya.eventCenter.subscribe('muya-front-menu', ({ reference, ...arg }) => {
8 | if (reference) {
9 | const boundingClientRect = reference.getBoundingClientRect()
10 | transport.postMessage('OpenFrontMenu', { ...arg, boundingClientRect })
11 | }
12 | })
13 |
14 | this.onFrontMenuClosed = () => {
15 | const { contentState } = muya
16 | contentState.selectedBlock = null
17 | contentState.partialRender()
18 | };
19 |
20 | transport.addListener('FrontMenuClosed', this.onFrontMenuClosed);
21 | }
22 |
23 | destroy() {
24 | transport.removeListener('FrontMenuClosed', this.onFrontMenuClosed);
25 | }
26 |
27 | }
28 |
29 | export default FrontMenu
30 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/ui/linkTools.js:
--------------------------------------------------------------------------------
1 | class LinkTools {
2 | static pluginName = 'linkTools'
3 |
4 | constructor(muya) {
5 | const { eventCenter } = muya
6 | eventCenter.subscribe('muya-link-tools', ({ reference }) => {
7 | if (reference && !reference.getAttribute('data-tooltip')) {
8 | reference.setAttribute('data-tooltip', "CtrlAndClickOpenLink")
9 | muya.tooltip.mouseOver({
10 | target: {
11 | closest: () => reference
12 | }
13 | })
14 | }
15 | })
16 | }
17 |
18 | }
19 |
20 | export default LinkTools
21 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/ui/tablePicker.js:
--------------------------------------------------------------------------------
1 | import remote from 'services/remote/common'
2 |
3 | class TablePicker {
4 | static pluginName = 'tablePicker'
5 | constructor(muya) {
6 | muya.eventCenter.subscribe('muya-table-picker', async (data, reference, cb) => {
7 | const { rows, columns } = await remote.resizeTable({ rows: data.row + 1, columns: data.column + 1 });
8 | cb(Math.max(rows - 1, 0), Math.max(columns - 1, 0))
9 | })
10 | }
11 | }
12 |
13 | export default TablePicker
14 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/ui/tableTools.js:
--------------------------------------------------------------------------------
1 | import transport from 'services/transport'
2 |
3 | class TableBarTools {
4 | static pluginName = 'tableBarTools'
5 |
6 | constructor(muya) {
7 | muya.eventCenter.subscribe('muya-table-bar', ({ reference, tableInfo }) => {
8 | if (reference) {
9 | const boundingClientRect = reference.getBoundingClientRect()
10 | transport.postMessage('OpenTableTools', { tableInfo, boundingClientRect })
11 | }
12 | })
13 |
14 | this.onEditTable = item => {
15 | muya.contentState.editTable(item)
16 | }
17 |
18 | transport.addListener('EditTable', this.onEditTable);
19 | }
20 |
21 | destroy() {
22 | transport.removeListener('EditTable', this.onEditTable);
23 | }
24 |
25 | }
26 |
27 | export default TableBarTools
28 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/utils/cumputeCheckBoxStatus.js:
--------------------------------------------------------------------------------
1 | export const cumputeCheckboxStatus = function (parentCheckbox) {
2 | const children = parentCheckbox.parentElement.lastElementChild.children
3 | const len = children.length
4 | for (let i = 0; i < len; i++) {
5 | const checkbox = children[i].firstElementChild
6 | if (checkbox.checked === false) {
7 | return false
8 | }
9 | }
10 | return true
11 | }
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/utils/domManipulate.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * [description `add` or `remove` className of element
4 | */
5 | export const operateClassName = (element, ctrl, className) => {
6 | element.classList[ctrl](className)
7 | }
8 |
9 | export const insertBefore = (newNode, originNode) => {
10 | const parentNode = originNode.parentNode
11 | parentNode.insertBefore(newNode, originNode)
12 | }
13 |
14 | // DOM operations
15 | export const insertAfter = (newNode, originNode) => {
16 | const parentNode = originNode.parentNode
17 |
18 | if (originNode.nextSibling) {
19 | parentNode.insertBefore(newNode, originNode.nextSibling)
20 | } else {
21 | parentNode.appendChild(newNode)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/utils/dompurify.js:
--------------------------------------------------------------------------------
1 | import { sanitize, isValidAttribute } from 'dompurify'
2 |
3 | export { isValidAttribute }
4 |
5 | export default sanitize
6 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/utils/getLinkInfo.js:
--------------------------------------------------------------------------------
1 | import { findNearestParagraph } from '../selection/dom'
2 | import { tokenizer } from '../parser'
3 |
4 | export const getLinkInfo = a => {
5 | const paragraph = findNearestParagraph(a)
6 | const raw = a.getAttribute('data-raw')
7 | const start = a.getAttribute('data-start')
8 | const end = a.getAttribute('data-end')
9 | const tokens = tokenizer(raw)
10 | const token = tokens[0]
11 | const href = a.getAttribute('href')
12 | token.range = {
13 | start,
14 | end
15 | }
16 | return {
17 | key: paragraph.id,
18 | token,
19 | href
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/utils/getParentCheckBox.js:
--------------------------------------------------------------------------------
1 | import { CLASS_OR_ID } from '../config'
2 |
3 | export const getParentCheckBox = function (checkbox) {
4 | const parent = checkbox.parentElement.parentElement.parentElement
5 | if (parent.id !== CLASS_OR_ID.AG_EDITOR_ID) {
6 | return parent.firstElementChild
7 | } else {
8 | return null
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/lib/utils/url.js:
--------------------------------------------------------------------------------
1 | import { isValidAttribute } from '../utils/dompurify'
2 |
3 | export const sanitizeHyperlink = rawLink => {
4 | if (rawLink && typeof rawLink === 'string' && isValidAttribute('a', 'href', rawLink)) {
5 | return rawLink
6 | }
7 | return ''
8 | }
9 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Bold.ttf
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-BoldOblique.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-BoldOblique.ttf
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Oblique.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono-Oblique.ttf
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/DejaVuSansMono.ttf
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-300italic.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-600italic.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-700italic.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-italic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-italic.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown.Editor/src/components/Muya/themes/fonts/open-sans-v27-latin-ext_latin-regular.woff
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import App from './App';
4 |
5 | ReactDOM.render(
6 |
7 |
8 | ,
9 | document.getElementById('root')
10 | );
11 |
12 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/services/localization.ts:
--------------------------------------------------------------------------------
1 | import { remote } from 'services/remote';
2 |
3 | const names = [
4 | 'InputFootnoteDefine',
5 | 'InputYAMLFrontMatter',
6 | 'InputMathFormula',
7 | 'InputLanguageIdentifier',
8 | 'ClickToAddAnImage',
9 | 'LoadImageFail',
10 | 'Footnote'
11 | ]
12 |
13 | remote.getStringResources({ names }).then(dic => {
14 | for (const key in dic) {
15 | document.documentElement.style.setProperty(`--${key}`, `'${dic[key]}'`)
16 | }
17 | });
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/services/remote/index.ts:
--------------------------------------------------------------------------------
1 | import common from './common'
2 |
3 | const remote = { ...common }
4 |
5 | export { remote }
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/services/scrollbar.ts:
--------------------------------------------------------------------------------
1 | import transport from "./transport"
2 |
3 | const postScrollState = () => {
4 | transport.postMessage('OnScroll', {
5 | viewportWidth: window.innerWidth,
6 | viewportHeight: window.innerHeight,
7 | maximumX: document.body.scrollWidth - window.innerWidth,
8 | maximumY: document.body.scrollHeight - window.innerHeight,
9 | scrollX: window.scrollX,
10 | scrollY: window.scrollY
11 | })
12 | }
13 |
14 | const resizeObserver = new ResizeObserver(postScrollState)
15 | resizeObserver.observe(document.body)
16 | addEventListener('scroll', postScrollState)
17 | addEventListener('resize', postScrollState)
18 |
19 | transport.addListener<{ scrollX: number, scrollY: number }>('OnScroll', ({ scrollX, scrollY }) => {
20 | const equals = (a: number, b: number) => Math.abs(a - b) < 1
21 | if (!equals(scrollX, window.scrollX) || !equals(scrollY, window.scrollY))
22 | window.scrollTo(scrollX, scrollY)
23 | })
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/setupTests.ts:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/src/types/global.d.ts:
--------------------------------------------------------------------------------
1 |
2 | export declare global {
3 | interface Window {
4 | chrome: {
5 | webview: {
6 | addEventListener: (eventName: string, handler: (arg: Event & { data: T }) => void) => void
7 | postMessage: (arg: T) => void
8 | }
9 | }
10 | basePath: string
11 | actualTheme: string
12 | }
13 | }
--------------------------------------------------------------------------------
/Dev/Typedown.Editor/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es6",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "skipLibCheck": true,
11 | "esModuleInterop": true,
12 | "allowSyntheticDefaultImports": true,
13 | "strict": true,
14 | "forceConsistentCasingInFileNames": true,
15 | "noFallthroughCasesInSwitch": true,
16 | "module": "esnext",
17 | "moduleResolution": "node",
18 | "resolveJsonModule": true,
19 | "isolatedModules": true,
20 | "noEmit": true,
21 | "jsx": "react-jsx",
22 | "baseUrl": "src"
23 | },
24 | "include": [
25 | "src"
26 | ]
27 | }
--------------------------------------------------------------------------------
/Dev/Typedown/Assets/logo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown/Assets/logo.ico
--------------------------------------------------------------------------------
/Dev/Typedown/EnvCheck.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.Web.WebView2.Core;
2 | using System;
3 | using System.Threading.Tasks;
4 | using Typedown.Windows;
5 |
6 | namespace Typedown
7 | {
8 | public static class EnvCheck
9 | {
10 | public static bool IsWebView2Installed()
11 | {
12 | try
13 | {
14 | _ = CoreWebView2Environment.GetAvailableBrowserVersionString();
15 | return true;
16 | }
17 | catch (Exception)
18 | {
19 | return false;
20 | }
21 | }
22 |
23 | public static async Task EnsureWebView2Installed()
24 | {
25 | if (IsWebView2Installed())
26 | {
27 | return true;
28 | }
29 | return await WebViewInstallWindow.TryInstallWebView2();
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Dev/Typedown/FodyWeavers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/Dev/Typedown/MicrosoftEdgeWebview2Setup.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Dev/Typedown/MicrosoftEdgeWebview2Setup.exe
--------------------------------------------------------------------------------
/Dev/Typedown/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading.Tasks;
3 | using Typedown.Core.Controls;
4 | using Typedown.Core.Utilities;
5 |
6 | namespace System.Runtime.CompilerServices
7 | {
8 | public static class IsExternalInit { }
9 | }
10 |
11 | namespace Typedown
12 | {
13 | public class Program
14 | {
15 | [STAThread]
16 | public static void Main()
17 | {
18 | AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
19 | App.Launch();
20 | }
21 |
22 | private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
23 | {
24 | if (e.IsTerminating)
25 | {
26 | Log.Report("UnhandledException", e.ExceptionObject.ToString()).Wait();
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Dev/Typedown/Resources/.gitignore:
--------------------------------------------------------------------------------
1 | /Statics
2 |
--------------------------------------------------------------------------------
/Dev/Typedown/Services/PowerShellService.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using Typedown.Core.Interfaces;
4 |
5 | namespace Typedown.Services
6 | {
7 | public class PowerShellService : IPowerShellService
8 | {
9 | public IEnumerable Invoke(string script, string command, params string[] parameters)
10 | {
11 | //using var powerShell = PowerShell.Create();
12 | //powerShell.AddScript(script);
13 | //powerShell.Invoke();
14 | //powerShell.Commands.Clear();
15 | //powerShell.AddCommand(command).AddParameters(parameters);
16 | //var result = powerShell.Invoke();
17 | //return result.Select(x => x.ToString());
18 | throw new NotImplementedException("NotImplemented");
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Dev/Typedown/Utilities/ClipboardImage.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Drawing.Imaging;
4 | using System.IO;
5 | using System.Text;
6 | using Typedown.Core.Interfaces;
7 |
8 | namespace Typedown.Utilities
9 | {
10 | public class ClipboardImage : IClipboardImage
11 | {
12 | private readonly System.Drawing.Image image;
13 |
14 | public ClipboardImage(System.Drawing.Image image)
15 | {
16 | this.image = image;
17 | }
18 |
19 | public byte[] GetBytes()
20 | {
21 | using var stream = new MemoryStream();
22 | image.Save(stream, ImageFormat.Png);
23 | return stream.ToArray();
24 | }
25 |
26 | public void SaveAsPng(string path)
27 | {
28 | image.Save(path);
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Dev/Typedown/Utilities/PrintHelper.cs:
--------------------------------------------------------------------------------
1 | using PdfiumViewer;
2 | using System.IO;
3 | using System.Threading.Tasks;
4 | using System.Windows.Forms;
5 |
6 | namespace Typedown.Utilities
7 | {
8 | public static class PrintHelper
9 | {
10 | public static async Task PrintPDF(nint hWnd, Stream stream, string documentName = null)
11 | {
12 | await Task.Run(() =>
13 | {
14 | using var pdfDoc = PdfDocument.Load(stream);
15 | using var printDoc = pdfDoc.CreatePrintDocument();
16 | printDoc.DocumentName = documentName;
17 | using var dialog = new PrintDialog() { Document = printDoc, UseEXDialog = true };
18 | var result = dialog.ShowDialog(new Win32Window(hWnd));
19 | if (result == DialogResult.OK)
20 | printDoc.Print();
21 | });
22 | }
23 |
24 | private record Win32Window(nint Handle) : IWin32Window;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/NuGet.Config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Tests/Typedown.Test/STATestMethodAttribute.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.VisualStudio.TestTools.UnitTesting;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 | using System.Threading;
6 |
7 | namespace Typedown.Test
8 | {
9 | public class STATestMethodAttribute : TestMethodAttribute
10 | {
11 | public override TestResult[] Execute(ITestMethod testMethod)
12 | {
13 | if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA)
14 | return Invoke(testMethod);
15 |
16 | TestResult[] result = null;
17 | var thread = new Thread(() => result = Invoke(testMethod));
18 | thread.SetApartmentState(ApartmentState.STA);
19 | thread.Start();
20 | thread.Join();
21 | return result;
22 | }
23 |
24 | private TestResult[] Invoke(ITestMethod testMethod)
25 | {
26 | return new[] { testMethod.Invoke(null) };
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Tests/Typedown.Test/ServiceTests/ClipboardTest.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.VisualStudio.TestTools.UnitTesting;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 | using Typedown.Services;
6 |
7 | namespace Typedown.Test.ServiceTests
8 | {
9 | [TestClass]
10 | public class ClipboardTest
11 | {
12 | public Clipboard GetDefaultClipboardService()
13 | {
14 | return new Clipboard();
15 | }
16 |
17 |
18 | [STATestMethod]
19 | public void SetTextAndGetText_WithRandomText_CanSetAndGet()
20 | {
21 | var clipboard = GetDefaultClipboardService();
22 | var text = new Random().Next().ToString();
23 | clipboard.SetText(text);
24 | Assert.AreEqual(text, clipboard.GetText(Core.Interfaces.TextDataFormat.UnicodeText));
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Tests/Typedown.UITest/Typedown.UITest.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp3.1
5 | latest
6 | false
7 | x64;x86
8 | Debug;Release;Debug_Local
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | all
18 | runtime; build; native; contentfiles; analyzers; buildtransitive
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Tests/Typedown.UITest/UnitTest1.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.VisualStudio.TestTools.UnitTesting;
2 |
3 | namespace Typedown.UITest
4 | {
5 | [TestClass]
6 | public class UnitTest1: TestBase
7 | {
8 | [ClassInitialize]
9 | public static void Initialize(TestContext context)
10 | {
11 | InitializeEnvironment(context);
12 | }
13 |
14 | [ClassCleanup]
15 | public static void Cleanup()
16 | {
17 | CleanupEnvironment();
18 | }
19 |
20 | [TestMethod]
21 | public void TestMethod1()
22 | {
23 | var menuBarFileItem = Session.FindElementByAccessibilityId("MenuBarFileItem");
24 | menuBarFileItem.Click();
25 | // Assert.IsNotNull(WindowRootLayout);
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Tools/DatabaseMigration/Database.cs:
--------------------------------------------------------------------------------
1 | namespace Typedown.Core.Services
2 | {
3 | public class Database : AppDbContext
4 | {
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Tools/DatabaseMigration/Program.cs:
--------------------------------------------------------------------------------
1 | namespace DatabaseMigration
2 | {
3 | public class Program
4 | {
5 | public static void Main(string[] args)
6 | {
7 | // Add-Migration -s Tools\DatabaseMigration -p Tools\DatabaseMigration
8 | }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/Tools/TranslationTool/TextDictionaryItem.cs:
--------------------------------------------------------------------------------
1 | namespace TranslationTool
2 | {
3 | public class TextDictionaryItem
4 | {
5 | public string Table { get; set; }
6 |
7 | public string Name { get; set; }
8 |
9 | public string Comment { get; set; }
10 |
11 | public Dictionary Values { get; set; } = new();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Tools/TranslationTool/TextResourceItem.cs:
--------------------------------------------------------------------------------
1 | namespace TranslationTool
2 | {
3 | public class TextResourceItem
4 | {
5 | public string Table { get; set; }
6 |
7 | public string Name { get; set; }
8 |
9 | public string Value { get; set; }
10 |
11 | public string Comment { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Tools/TranslationTool/TranslationTool.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | net6.0
6 | enable
7 | Debug;Release;Debug_Local
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | PreserveNewest
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Markdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Markdown.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/Typedown.Package/Assets/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/Tools/Typedown.Package/priconfig.packaging.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Assets/StoreLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/StoreLogo.png
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/Tools/XamlDesignApp/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 |
16 | // https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x804 上介绍了“空白页”项模板
17 |
18 | namespace XamlDesignApp
19 | {
20 | ///
21 | /// 可用于自身或导航至 Frame 内部的空白页。
22 | ///
23 | public sealed partial class MainPage : Page
24 | {
25 | public MainPage()
26 | {
27 | this.InitializeComponent();
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("XamlDesignApp")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("XamlDesignApp")]
13 | [assembly: AssemblyCopyright("Copyright © 2023")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 程序集的版本信息由下列四个值组成:
18 | //
19 | // 主版本
20 | // 次版本
21 | // 生成号
22 | // 修订号
23 | //
24 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
25 | //通过使用 "*",如下所示:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/Tools/XamlDesignApp/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/logo.png
--------------------------------------------------------------------------------
/nupkgs/Typedown.XamlUI.1.0.1.nupkg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/byxiaozhi/Typedown/a1baeae39041b63a4950e5504e80fda650761d71/nupkgs/Typedown.XamlUI.1.0.1.nupkg
--------------------------------------------------------------------------------