Showing preview only (4,502K chars total). Download the full file or copy to clipboard to get everything.
Repository: 0x7c13/Notepads
Branch: master
Commit: 8350f1ca8647
Files: 365
Total size: 4.2 MB
Directory structure:
gitextract_92diuyzb/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── RELEASE_TEMPLATE/
│ │ ├── changelog_config.json
│ │ └── changelog_template.hbs
│ ├── dependabot.yml
│ ├── issue_label_bot.yaml
│ └── workflows/
│ ├── csa-bulk-dismissal.yml
│ └── main.yml
├── .gitignore
├── .whitesource
├── CI-CD_DOCUMENTATION.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── PRIVACY.md
├── README.md
├── azure-pipelines.yml
└── src/
├── .editorconfig
├── Notepads/
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Brushes/
│ │ └── HostBackdropAcrylicBrush.cs
│ ├── Commands/
│ │ ├── CommandHandlerResult.cs
│ │ ├── ICommandHandler.cs
│ │ ├── IKeyboardCommand.cs
│ │ ├── IMouseCommand.cs
│ │ ├── KeyboardCommand.cs
│ │ ├── KeyboardCommandHandler.cs
│ │ ├── MouseCommand.cs
│ │ └── MouseCommandHandler.cs
│ ├── Controls/
│ │ ├── Dialog/
│ │ │ ├── AppCloseSaveReminderDialog.cs
│ │ │ ├── FileOpenErrorDialog.cs
│ │ │ ├── FileRenameDialog.cs
│ │ │ ├── FileSaveErrorDialog.cs
│ │ │ ├── NotepadsDialog.cs
│ │ │ ├── RevertAllChangesConfirmationDialog.cs
│ │ │ ├── SessionCorruptionErrorDialog.cs
│ │ │ └── SetCloseSaveReminderDialog.cs
│ │ ├── DiffViewer/
│ │ │ ├── BrushFactory.cs
│ │ │ ├── ISideBySideDiffViewer.cs
│ │ │ ├── RichTextBlockDiffContext.cs
│ │ │ ├── RichTextBlockDiffRenderer.cs
│ │ │ ├── ScrollViewerSynchronizer.cs
│ │ │ ├── SideBySideDiffViewer.xaml
│ │ │ └── SideBySideDiffViewer.xaml.cs
│ │ ├── FilePicker/
│ │ │ └── FilePickerFactory.cs
│ │ ├── FindAndReplace/
│ │ │ ├── FindAndReplaceControl.xaml
│ │ │ ├── FindAndReplaceControl.xaml.cs
│ │ │ ├── FindAndReplaceEventArgs.cs
│ │ │ ├── FindAndReplacePlaceHolder.xaml
│ │ │ ├── FindAndReplaceTextBox.cs
│ │ │ └── SearchContext.cs
│ │ ├── GoTo/
│ │ │ ├── GoToControl.xaml
│ │ │ ├── GoToControl.xaml.cs
│ │ │ └── GoToEventArgs.cs
│ │ ├── Markdown/
│ │ │ ├── MarkdownExtensionView.xaml
│ │ │ └── MarkdownExtensionView.xaml.cs
│ │ ├── Print/
│ │ │ ├── ContinuationPageFormat.xaml
│ │ │ ├── ContinuationPageFormat.xaml.cs
│ │ │ ├── PrintArgs.cs
│ │ │ ├── PrintPageFormat.xaml
│ │ │ └── PrintPageFormat.xaml.cs
│ │ └── TextEditor/
│ │ ├── ITextEditor.cs
│ │ ├── TextEditor.xaml
│ │ ├── TextEditor.xaml.cs
│ │ ├── TextEditorContextFlyout.cs
│ │ ├── TextEditorCore.DateTime.cs
│ │ ├── TextEditorCore.DuplicateText.cs
│ │ ├── TextEditorCore.ExternalEventListener.cs
│ │ ├── TextEditorCore.FindAndReplace.cs
│ │ ├── TextEditorCore.FontSize.cs
│ │ ├── TextEditorCore.Indentation.cs
│ │ ├── TextEditorCore.JoinText.cs
│ │ ├── TextEditorCore.LineHighlighter.cs
│ │ ├── TextEditorCore.LineNumbers.cs
│ │ ├── TextEditorCore.MoveText.cs
│ │ ├── TextEditorCore.WebSearch.cs
│ │ ├── TextEditorCore.cs
│ │ ├── TextEditorCore.xaml
│ │ └── TextEditorStateMetaData.cs
│ ├── Core/
│ │ ├── INotepadsCore.cs
│ │ ├── ISessionManager.cs
│ │ ├── NotepadsCore.cs
│ │ ├── SessionDataModels/
│ │ │ ├── NotepadsSessionData.cs
│ │ │ └── TextEditorSessionData.cs
│ │ ├── SessionManager.cs
│ │ └── TabContextFlyout.cs
│ ├── Extensions/
│ │ ├── DispatcherExtensions.cs
│ │ ├── IContentPreviewExtension.cs
│ │ ├── INotepadsExtensionProvider.cs
│ │ ├── NotepadsExtensionProvider.cs
│ │ ├── ScrollViewerExtensions.cs
│ │ └── StringExtensions.cs
│ ├── Models/
│ │ └── TextFile.cs
│ ├── Notepads.csproj
│ ├── Package.StoreAssociation.xml
│ ├── Package.appxmanifest
│ ├── Package.targets
│ ├── Program.cs
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
│ ├── Resource/
│ │ ├── CustomAppBarButtonStyle.xaml
│ │ ├── CustomCheckBoxStyle.xaml
│ │ ├── CustomNavigationViewItemStyle.xaml
│ │ ├── CustomRadioButtonStyle.xaml
│ │ ├── CustomSliderStyle.xaml
│ │ ├── CustomSplitViewStyle.xaml
│ │ ├── CustomToggleSwitchStyle.xaml
│ │ ├── DismissButtonStyle.xaml
│ │ ├── InAppNotificationNoDismissButton.xaml
│ │ ├── MiddleClickScrolling-CursorType.res
│ │ ├── Text Document.txt
│ │ └── TransparentTextBoxStyle.xaml
│ ├── Services/
│ │ ├── ActivationService.cs
│ │ ├── AnalyticsService.cs
│ │ ├── AppSettingsService.cs
│ │ ├── FileExtensionProvider.cs
│ │ ├── JumpListService.cs
│ │ ├── LoggingService.cs
│ │ ├── MRUService.cs
│ │ ├── NotepadsProtocolService.cs
│ │ ├── NotificationCenter.cs
│ │ └── ThemeSettingsService.cs
│ ├── Settings/
│ │ ├── ApplicationSettings.cs
│ │ └── SettingsKey.cs
│ ├── Strings/
│ │ ├── ar-YE/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── bg-BG/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── cs-CZ/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── de-CH/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── de-DE/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── en-US/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── es-ES/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── fi-FI/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── fr-FR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── hi-IN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── hr-HR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── hu-HU/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── it-IT/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ja-JP/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ka-GE/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ko-KR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── nl-NL/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── or-IN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── pl-PL/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── pt-BR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── pt-PT/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ru-RU/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── sr-Latn/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── sr-cyrl/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── tr-TR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── uk-UA/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── vi-VN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── zh-CN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ └── zh-TW/
│ │ ├── Manifest.resw
│ │ ├── Resources.resw
│ │ └── Settings.resw
│ ├── Utilities/
│ │ ├── BrushUtility.cs
│ │ ├── DialogManager.cs
│ │ ├── Downloader.cs
│ │ ├── EncodingUtility.cs
│ │ ├── FileSystemUtility.cs
│ │ ├── FileTypeUtility.cs
│ │ ├── FontUtility.cs
│ │ ├── FutureAccessListUtility.cs
│ │ ├── LanguageUtility.cs
│ │ ├── LineEndingUtility.cs
│ │ ├── SearchEngineUtility.cs
│ │ ├── SessionUtility.cs
│ │ └── ThreadUtility.cs
│ └── Views/
│ ├── MainPage/
│ │ ├── NotepadsMainPage.IO.cs
│ │ ├── NotepadsMainPage.MainMenu.cs
│ │ ├── NotepadsMainPage.Notification.cs
│ │ ├── NotepadsMainPage.StatusBar.cs
│ │ ├── NotepadsMainPage.Theme.cs
│ │ ├── NotepadsMainPage.ViewModes.cs
│ │ ├── NotepadsMainPage.xaml
│ │ └── NotepadsMainPage.xaml.cs
│ └── Settings/
│ ├── AboutPage.xaml
│ ├── AboutPage.xaml.cs
│ ├── AdvancedSettingsPage.xaml
│ ├── AdvancedSettingsPage.xaml.cs
│ ├── PersonalizationSettingsPage.xaml
│ ├── PersonalizationSettingsPage.xaml.cs
│ ├── SettingsPage.xaml
│ ├── SettingsPage.xaml.cs
│ ├── SettingsPanel.xaml
│ ├── SettingsPanel.xaml.cs
│ ├── TextAndEditorSettingsPage.xaml
│ └── TextAndEditorSettingsPage.xaml.cs
├── Notepads.Controls/
│ ├── DropShadowPanel/
│ │ ├── DropShadowPanel.Properties.cs
│ │ ├── DropShadowPanel.cs
│ │ └── DropShadowPanel.xaml
│ ├── GridSplitter/
│ │ ├── GridSplitter.Data.cs
│ │ ├── GridSplitter.Events.cs
│ │ ├── GridSplitter.Helper.cs
│ │ ├── GridSplitter.Options.cs
│ │ ├── GridSplitter.cs
│ │ ├── GridSplitter.xaml
│ │ └── GripperHoverWrapper.cs
│ ├── Helpers/
│ │ ├── DispatcherQueueHelper.cs
│ │ └── ThemeListener.cs
│ ├── InAppNotification/
│ │ ├── InAppNotification.AttachedProperties.cs
│ │ ├── InAppNotification.Constants.cs
│ │ ├── InAppNotification.Events.cs
│ │ ├── InAppNotification.Properties.cs
│ │ ├── InAppNotification.cs
│ │ ├── InAppNotification.xaml
│ │ ├── InAppNotificationClosedEventArgs.cs
│ │ ├── InAppNotificationClosingEventArgs.cs
│ │ ├── InAppNotificationDismissKind.cs
│ │ ├── InAppNotificationOpeningEventArgs.cs
│ │ ├── NotificationOptions.cs
│ │ ├── StackMode.cs
│ │ └── Styles/
│ │ └── MSEdgeNotificationStyle.xaml
│ ├── MarkdownTextBlock/
│ │ ├── CodeBlockResolvingEventArgs.cs
│ │ ├── ImageResolvingEventArgs.cs
│ │ ├── LinkClickedEventArgs.cs
│ │ ├── Markdown/
│ │ │ ├── Blocks/
│ │ │ │ ├── CodeBlock.cs
│ │ │ │ ├── HeaderBlock.cs
│ │ │ │ ├── HorizontalRuleBlock.cs
│ │ │ │ ├── LinkReferenceBlock.cs
│ │ │ │ ├── List/
│ │ │ │ │ ├── ListItemBlock.cs
│ │ │ │ │ ├── ListItemBuilder.cs
│ │ │ │ │ ├── ListItemPreamble.cs
│ │ │ │ │ └── NestedListInfo.cs
│ │ │ │ ├── ListBlock.cs
│ │ │ │ ├── ParagraphBlock.cs
│ │ │ │ ├── QuoteBlock.cs
│ │ │ │ ├── TableBlock.cs
│ │ │ │ └── YamlHeaderBlock.cs
│ │ │ ├── Core/
│ │ │ │ ├── IParser.cs
│ │ │ │ ├── ParseHelpers.cs
│ │ │ │ ├── SchemaBase.cs
│ │ │ │ └── StringValueAttribute.cs
│ │ │ ├── Enums/
│ │ │ │ ├── ColumnAlignment.cs
│ │ │ │ ├── HyperlinkType.cs
│ │ │ │ ├── InlineParseMethod.cs
│ │ │ │ ├── ListStyle.cs
│ │ │ │ ├── MarkdownBlockType.cs
│ │ │ │ └── MarkdownInlineType.cs
│ │ │ ├── Helpers/
│ │ │ │ ├── Common.cs
│ │ │ │ ├── DebuggingReporter.cs
│ │ │ │ ├── InlineParseResult.cs
│ │ │ │ ├── InlineTripCharHelper.cs
│ │ │ │ └── LineInfo.cs
│ │ │ ├── Inlines/
│ │ │ │ ├── BoldItalicTextInline.cs
│ │ │ │ ├── BoldTextInline.cs
│ │ │ │ ├── CodeInline.cs
│ │ │ │ ├── CommentInline.cs
│ │ │ │ ├── EmojiInline.EmojiCodes.cs
│ │ │ │ ├── EmojiInline.cs
│ │ │ │ ├── HyperlinkInline.cs
│ │ │ │ ├── IInlineContainer.cs
│ │ │ │ ├── IInlineLeaf.cs
│ │ │ │ ├── ILinkElement.cs
│ │ │ │ ├── ImageInline.cs
│ │ │ │ ├── ItalicTextInline.cs
│ │ │ │ ├── LinkAnchorInline.cs
│ │ │ │ ├── MarkdownLinkInline.cs
│ │ │ │ ├── StrikethroughTextInline.cs
│ │ │ │ ├── SubscriptTextInline.cs
│ │ │ │ ├── SuperscriptTextInline.cs
│ │ │ │ └── TextRunInline.cs
│ │ │ ├── MarkdownBlock.cs
│ │ │ ├── MarkdownDocument.cs
│ │ │ ├── MarkdownElement.cs
│ │ │ ├── MarkdownInline.cs
│ │ │ └── Render/
│ │ │ ├── ICodeBlockResolver.cs
│ │ │ ├── IImageResolver.cs
│ │ │ ├── ILinkRegister.cs
│ │ │ ├── IRenderContext.cs
│ │ │ ├── InlineRenderContext.cs
│ │ │ ├── MarkdownRenderer.Blocks.cs
│ │ │ ├── MarkdownRenderer.Dimensions.cs
│ │ │ ├── MarkdownRenderer.Inlines.cs
│ │ │ ├── MarkdownRenderer.Properties.cs
│ │ │ ├── MarkdownRenderer.cs
│ │ │ ├── MarkdownRendererBase.Blocks.cs
│ │ │ ├── MarkdownRendererBase.Inlines.cs
│ │ │ ├── MarkdownRendererBase.cs
│ │ │ ├── MarkdownTable.cs
│ │ │ ├── RenderContext.cs
│ │ │ ├── RenderContextIncorrectException.cs
│ │ │ └── UIElementCollectionRenderContext.cs
│ │ ├── MarkdownRenderedEventArgs.cs
│ │ ├── MarkdownTextBlock.Dimensions.cs
│ │ ├── MarkdownTextBlock.Events.cs
│ │ ├── MarkdownTextBlock.Methods.cs
│ │ ├── MarkdownTextBlock.Properties.cs
│ │ ├── MarkdownTextBlock.cs
│ │ └── MarkdownTextBlock.xaml
│ ├── Notepads.Controls.csproj
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ └── Notepads.Controls.rd.xml
│ ├── SetsView/
│ │ ├── SetClosingEventArgs.cs
│ │ ├── SetDraggedOutsideEventArgs.cs
│ │ ├── SetSelectedEventArgs.cs
│ │ ├── SetsView.HeaderLayout.cs
│ │ ├── SetsView.ItemSources.cs
│ │ ├── SetsView.Properties.cs
│ │ ├── SetsView.cs
│ │ ├── SetsView.xaml
│ │ ├── SetsViewItem.Properties.cs
│ │ ├── SetsViewItem.cs
│ │ └── SetsWidthMode.cs
│ └── Themes/
│ └── Generic.xaml
└── Notepads.sln
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Declare files that will always have CRLF line endings on checkout.
*.cs text eol=crlf
*.xaml text eol=crlf
*.resw text eol=crlf
*.csproj text eol=crlf
*.sln text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: 0x7c13
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: jackieliu
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: paypal.me/jackil
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: "[Bug]"
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Windows 10 1809 17763.593]
- Version [e.g. v0.9.3.0]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: "[Feature request]"
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Add a brief overview here of the feature/bug & fix. -->
## PR Type
What kind of change does this PR introduce?
<!-- Please uncomment one or more that apply to this PR and apply required prefix to the title. -->
<!-- - Bugfix -->
<!-- Prefix title with "fix: " -->
<!-- - Feature -->
<!-- Prefix title with "feat: " -->
<!-- - Translation -->
<!-- Prefix title with "lang: " -->
<!-- - Documentation content changes -->
<!-- Prefix title with "doc: " -->
<!-- - CI/CD pipeline changes -->
<!-- Prefix title with "ci: " -->
<!-- - Other... Please describe: -->
<!-- Prefix title with "other: " or custom label with conventional commit format: https://www.conventionalcommits.org/en/v1.0.0/ -->
## Other information
================================================
FILE: .github/RELEASE_TEMPLATE/changelog_config.json
================================================
{
"conventionalCommitsParserOptions": {
"revertPattern": "/^(?:Revert|revert:)\\s\"?([\\s\\S]+?)\"?\\s*This reverts commit (\\w*)\\./i",
"issuePrefixes": [ "#", "OLDARCH-" ]
},
"handleBarsOptions": {
"setupFile": null,
"template": ".github/RELEASE_TEMPLATE/changelog_template.hbs",
"compileOptions": { "noEscape": true }
},
"breakingChangesPattern": "/^breaking\\s+change$/gim",
"hostname": "https://github.com"
}
================================================
FILE: .github/RELEASE_TEMPLATE/changelog_template.hbs
================================================
{{#with release}}
## [{{name}}]({{href}})
{{/with}}
{{#commit-list commits heading='### 💥 Breaking Changes' breaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### ✨ Features' type='feat' excludeBreaking=true}}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### 🐛 Fixes' type='fix' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### 🔥 Refactorings' type='refactor' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### 🐎 Performance Improvements' type='perf' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### 🛠 Maintenance' types='chore,ci' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### ✅ Tests' type='test' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### 📚 Documentation' type='doc,docs' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### 💄 Style' type='style' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
{{#commit-list commits heading='### 📢 Translations' type='lang,trans' excludeBreaking=true }}
- {{#if scope}} **{{scope}}:** {{/if}}{{subject}} ([`{{shorthash}}`]({{html_url}}))
{{/commit-list}}
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "github-actions"
# default location of `.github/workflows`
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: 'action-deps: '
- package-ecosystem: "nuget"
# location of package manifests
directory: "/src/Notepads"
schedule:
interval: "daily"
commit-message:
prefix: 'nuget-deps: '
# Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)
================================================
FILE: .github/issue_label_bot.yaml
================================================
label-alias:
bug: 'bug'
feature_request: 'enhancement'
question: 'question'
================================================
FILE: .github/workflows/csa-bulk-dismissal.yml
================================================
name: Code scanning alerts bulk dismissal
on:
workflow_run:
workflows: [ "Notepads CI/CD Pipeline" ]
types:
- completed
workflow_dispatch:
inputs:
type:
description: Type of filter to use ("path" for using path and "desc" for using description)
required: true
default: 'path'
reason:
description: Reason for dismissal ("fp" for "false positive", "wf" for "won't fix" and "ut" for "used in tests")
required: true
default: 'wf'
jobs:
setup:
runs-on: windows-latest
outputs:
matrix: ${{ steps.set_filter_matrix.outputs.matrix }}
steps:
- name: Setup filter matrix
id: set_filter_matrix
shell: pwsh
run: |
$FILTER_TYPE = $env:FILTER_TYPE
if ( !( $env:FILTER_TYPE -ieq 'path' ) -And !( $env:FILTER_TYPE -ieq 'desc' ) ) {
$FILTER_TYPE = 'path'
}
switch ( $env:REASON ) {
fp {
$REASON = "false positive"
}
wf {
$REASON = "won't fix"
}
ut {
$REASON = "used in tests"
}
default {
$REASON = "won't fix"
}
}
if ( $FILTER_TYPE -ieq 'path' ) {
$MATRIX = @{
include = @(
@{
filter = "*/obj/*"
}
)
}
} elseif ( $FILTER_TYPE -ieq 'desc' ) {
$MATRIX = @{
include = @(
@{
filter = "Calls to unmanaged code"
},
@{
filter = "Unmanaged code"
}
)
}
} else {
throw "Invalid filter type argument"
}
$MATRIX.include | Foreach-Object {
$_.Add('type',"$FILTER_TYPE")
$_.Add('reason',"$REASON")
}
echo "::set-output name=matrix::$($MATRIX | ConvertTo-Json -depth 32 -Compress)"
env:
FILTER_TYPE: ${{ github.event.inputs.type }}
REASON: ${{ github.event.inputs.reason }}
dismiss-alerts:
name: Dismiss alerts
needs: setup
runs-on: windows-latest
strategy:
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
env:
# Settings
OWNER: ${{ github.repository_owner }} # verbatim from URL
PROJECT_NAME: ${{ github.event.repository.name }} # verbatim from URL
ACCESS_TOKEN: ${{ secrets.CSA_ACCESS_TOKEN }} # requires security_events read/write permissions
DISMISS_REASON: ${{ matrix.reason }} # "false positive", "won't fix" or "used in tests".
ALERTS_PER_PAGE: 100 # maximum is 100
FILTER: ${{ matrix.filter }}
FILTER_TYPE: ${{ matrix.type }}
steps:
- name: Run automation
id: run_automation
shell: pwsh
run: |
$HEADERS = @{
Authorization = 'Basic {0}' -f [System.Convert]::ToBase64String([char[]]"$($env:OWNER):$($env:ACCESS_TOKEN)")
Accept = 'application/vnd.github.v3+json'
}
$page = 1
$FETCH_URL = "https://api.github.com/repos/$env:OWNER/$env:PROJECT_NAME/code-scanning/alerts?state=open&page={0}&per_page=$env:ALERTS_PER_PAGE"
$LIST_OF_ALERTS = Invoke-RestMethod -Method Get -Headers $HEADERS -Uri $($FETCH_URL -f $page)
while ( $LIST_OF_ALERTS -ne $null ) {
if ( $env:FILTER_TYPE -ieq 'path' ) {
$MATCHES += $($LIST_OF_ALERTS | Where-Object { $_.most_recent_instance.location.path -like "$env:FILTER" })
} else {
$MATCHES += $($LIST_OF_ALERTS | Where-Object { $_.rule.description -like "$env:FILTER" })
}
$page += 1
$LIST_OF_ALERTS = Invoke-RestMethod -Method Get -Headers $HEADERS -Uri $($FETCH_URL -f $page)
}
$ALERT_URL = "https://api.github.com/repos/$env:OWNER/$env:PROJECT_NAME/code-scanning/alerts/{0}"
$BODY = @{
state = 'dismissed'
dismissed_reason = "$env:DISMISS_REASON"
} | ConvertTo-Json
foreach ($index in $MATCHES.number) {
Invoke-RestMethod -Method Patch -Headers $HEADERS -Uri $($ALERT_URL -f $index) -Body $BODY
}
# Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)
================================================
FILE: .github/workflows/main.yml
================================================
name: Notepads CI/CD Pipeline
on:
push:
#paths-ignore:
#- '**.md'
#- 'ScreenShots/**'
#- '.whitesource'
#- 'azure-pipelines.yml'
#- '.github/**'
#- '!.github/workflows/main.yml'
branches-ignore:
# PRs made by bots trigger both 'push' and 'pull_request' event, ignore 'push' event in that case
- 'dependabot**'
- 'imgbot**'
tags-ignore:
- '**'
pull_request:
paths-ignore:
- '**.md'
- 'ScreenShots/**'
- '.whitesource'
- 'azure-pipelines.yml'
- '.github/**'
- '!.github/workflows/main.yml'
workflow_dispatch:
inputs:
param:
description: Optional parameter for additional actions
# Type '(major|maj) (realease|rel)' or '(minor|min) (realease|rel)' or release for major,miner,patch release respectively
# Or explicitly provide version number to create release with that version
required: false
schedule:
- cron: '0 8 * * *'
jobs:
setup:
runs-on: windows-latest
outputs:
matrix: ${{ steps.set_matrix.outputs.matrix }}
steps:
- name: Setup strategy matrix
id: set_matrix
shell: pwsh
run: |
$MATRIX = @{
include = @( [ordered]@{
configuration= "Debug"
appxBundlePlatforms = "x86|x64"
oldVersion = ""
newVersion = ""
debug = $true
runCodeqlAnalysis = $false
runSonarCloudScan = $false
}, [ordered]@{
configuration= "Release"
appxBundlePlatforms= "x86|x64|ARM64"
oldVersion = ""
newVersion = ""
debug = $true
runCodeqlAnalysis= $false
runSonarCloudScan= $false
}, [ordered]@{
configuration= "Production"
appxBundlePlatforms= "x86|x64|ARM64"
oldVersion = ""
newVersion = ""
debug = $true
runCodeqlAnalysis= $false
runSonarCloudScan= $false
}
)
}
if ( ( $env:GITHUB_EVENT -eq 'pull_request' ) `
-or ( $env:GITHUB_EVENT -eq 'schedule' ) `
-or ( $env:FORK -eq 'true' ) ) {
$MATRIX.include | Foreach-Object { $_.runSonarCloudScan = $false }
}
if ( ( $env:GITHUB_EVENT -ne 'push' ) `
-and ( $env:GITHUB_EVENT -ne 'pull_request' ) ) {
$MATRIX.include = @($MATRIX.include | Where-Object { $_.configuration -eq "$env:RELEASE_CONFIGURATION" })
if ( ( $env:GITHUB_EVENT -eq 'workflow_dispatch' ) `
-and ( $env:GITHUB_REF -eq 'refs/heads/master' ) ) {
$FETCH_URL = "https://api.github.com/repos/$env:GIT_REPOSITORY/tags?per_page=1"
$OLD_VER = [System.Version]::Parse($(Invoke-RestMethod -Method Get -Uri $FETCH_URL).name -replace 'v')
[System.Int32[]]$VER_INPUT = $($env:PARAM -replace '[a-zA-Z]| ').Split('.')
if ( ( $VER_INPUT.Count -gt 1 ) -or ( $VER_INPUT[0] -gt 0 ) ) {
$NEW_VER = [System.Version]::new($VER_INPUT[0],`
(if ( $VER_INPUT.Count -ge 1 ) { $VER_INPUT[1] } else { 0 }),`
(if ( $VER_INPUT.Count -ge 2 ) { $VER_INPUT[2] } else { 0 }),`
(if ( $VER_INPUT.Count -ge 3 ) { $VER_INPUT[3] } else { 0 }))
} elseif ( $env:PARAM -match 'rel' ) {
if ( $env:PARAM -match 'maj' ) {
$NEW_VER = [System.Version]::new($OLD_VER.Major + 1, 0, 0, 0)
} elseif ( $env:PARAM -match 'min' ) {
$NEW_VER = [System.Version]::new($OLD_VER.Major, $OLD_VER.Minor + 1, 0, 0)
} else {
$NEW_VER = [System.Version]::new($OLD_VER.Major, $OLD_VER.Minor, $OLD_VER.Build + 1, 0)
}
}
if ( ![System.String]::IsNullOrEmpty($OLD_VER) `
-and ![System.String]::IsNullOrEmpty($NEW_VER) `
-and ( $NEW_VER -gt $OLD_VER ) ) {
$MATRIX.include | Foreach-Object { $_.oldVersion = $OLD_VER.ToString() }
$MATRIX.include | Foreach-Object { $_.newVersion = $NEW_VER.ToString() }
}
$MATRIX.include | Foreach-Object { $_.runCodeqlAnalysis = $false }
$MATRIX.include | Foreach-Object {
if ( $_.configuration -eq "$env:RELEASE_CONFIGURATION" ) { $_.release = $true }
}
} else {
$MATRIX.include | Foreach-Object { $_.appxBundlePlatforms = 'x64' }
if ( $env:GITHUB_EVENT -ne 'schedule' ) {
$MATRIX.include | Foreach-Object { $_.runCodeqlAnalysis = $false }
}
}
}
echo "::set-output name=matrix::$($MATRIX | ConvertTo-Json -depth 32 -Compress)"
env:
FORK: ${{ github.event.repository.fork }}
PARAM: ${{ github.event.inputs.param }}
GITHUB_REF: ${{ github.ref }}
GITHUB_EVENT: ${{ github.event_name }}
RELEASE_CONFIGURATION: Production
ci:
needs: setup
runs-on: windows-latest
strategy:
matrix: ${{ fromJson(needs.setup.outputs.matrix) }}
outputs:
old_version: ${{ matrix.oldVersion }}
new_version: ${{ matrix.newVersion }}
env:
SOLUTION_NAME: src\Notepads.sln
CONFIGURATION: ${{ matrix.configuration }}
DEFAULT_DIR: ${{ github.workspace }}
steps:
- if: matrix.runSonarCloudScan
name: Set up JDK 11
id: Setup_JDK
uses: actions/setup-java@v5
with:
java-version: 1.11
- name: Setup MSBuild
id: setup_msbuild
uses: microsoft/setup-msbuild@v2
- name: Setup NuGet
id: setup-nuget
uses: NuGet/setup-nuget@v2.0.1
- name: Checkout repository
id: checkout_repo
uses: actions/checkout@v5
with:
fetch-depth: 50
token: ${{ secrets.GITHUB_TOKEN }}
# Due to the insufficient memory allocated by default, CodeQL sometimes requires more to be manually allocated
- if: matrix.runCodeqlAnalysis
name: Configure Pagefile
id: config_pagefile
uses: al-cheb/configure-pagefile-action@v1.4
with:
minimum-size: 8GB
maximum-size: 10GB
- if: matrix.newVersion != ''
name: Bump GitHub tag and Update manifest
id: tag_manifest_generator
shell: pwsh
run: |
git config --global user.name $env:GIT_USER_NAME
git config --global user.email $env:GIT_USER_EMAIL
git tag -a -m "$env:NEW_VERSION_TAG" $env:NEW_VERSION_TAG
git push --follow-tags
$xml = [xml](Get-Content $env:APPXMANIFEST_PATH)
$xml.Package.Identity.Version = $env:NEW_VERSION
$xml.save($env:APPXMANIFEST_PATH)
env:
GIT_USER_NAME: ${{ secrets.GIT_USER_NAME }}
GIT_USER_EMAIL: ${{ secrets.GIT_USER_EMAIL }}
APPXMANIFEST_PATH: src\Notepads\Package.appxmanifest
NEW_VERSION: ${{ matrix.newVersion }}
NEW_VERSION_TAG: v${{ matrix.newVersion }}
- if: matrix.runSonarCloudScan
name: Cache SonarCloud packages
id: cache_sonar_packages
uses: actions/cache@v4.3.0
with:
path: ~\sonar\cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- if: matrix.runSonarCloudScan
name: Cache SonarCloud scanner
id: cache_sonar_scanner
uses: actions/cache@v4.3.0
with:
path: .\.sonar\scanner
key: ${{ runner.os }}-sonar-scanner
restore-keys: ${{ runner.os }}-sonar-scanner
- if: matrix.runSonarCloudScan && steps.cache_sonar_scanner.outputs.cache-hit != 'true'
name: Install SonarCloud scanner
id: install_sonar_scanner
shell: pwsh
run: |
New-Item -Path .\.sonar\scanner -ItemType Directory
dotnet tool update dotnet-sonarscanner --tool-path .\.sonar\scanner
- if: matrix.runSonarCloudScan
name: Initialize SonarCloud scanner
id: init_sonar_scanner
shell: pwsh
run: |
$LOWERCASE_REPOSITORY_NAME = "${{ github.event.repository.name }}".ToLower()
.\.sonar\scanner\dotnet-sonarscanner begin `
/k:"${{ github.repository_owner }}_${{ github.event.repository.name }}" `
/o:"$LOWERCASE_REPOSITORY_NAME" `
/d:sonar.login="$env:SONAR_TOKEN" `
/d:sonar.host.url="https://sonarcloud.io"
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- if: matrix.newVersion != ''
name: Create and validate PFX certificate for AppxBundle
id: create_validate_pfx_cert
shell: pwsh
run: |
$TARGET_FILE = "$env:DEFAULT_DIR\cert.pfx"
$FROM_BASE64_STR = [System.Convert]::FromBase64String($env:BASE64_STR)
[System.IO.File]::WriteAllBytes($TARGET_FILE, $FROM_BASE64_STR)
$FILE_STREAM = [System.IO.File]::OpenRead($TARGET_FILE)
$FILE_STREAM.Position = 0
$SHA256 = [System.Security.Cryptography.SHA256]::Create()
$HASH_BUILDER = [System.Text.StringBuilder]::new()
$SHA256.ComputeHash($FILE_STREAM) | ForEach-Object { $HASH_BUILDER.Append($_.ToString("x2")) }
if ( $HASH_BUILDER.ToString() -cne $env:SHA256_HASH ) {
throw [System.Exception]::new("Created certificate hash $($HASH_BUILDER.ToString()) $(
)doesn't match provided hash $($env:SHA256_HASH)")
}
env:
BASE64_STR: ${{ secrets.PACKAGE_CERTIFICATE_BASE64 }}
SHA256_HASH: ${{ secrets.PACKAGE_CERTIFICATE_SHA256 }}
- name: Restore the application
id: restore_application
shell: pwsh
run: |
msbuild $env:SOLUTION_NAME /t:Restore
nuget restore $env:SOLUTION_NAME
- if: matrix.runCodeqlAnalysis
name: Initialize CodeQL
id: init_codeql
uses: github/codeql-action/init@v3
with:
queries: security-and-quality
languages: csharp
- name: Build and generate bundles
id: build_app
shell: pwsh
run: |
msbuild $env:SOLUTION_NAME `
/p:Platform=$env:PLATFORM `
/p:Configuration=$env:CONFIGURATION `
/p:UapAppxPackageBuildMode=$env:UAP_APPX_PACKAGE_BUILD_MODE `
/p:AppxBundle=$env:APPX_BUNDLE `
/p:AppxPackageSigningEnabled=$env:APPX_PACKAGE_SIGNING_ENABLED `
/p:AppxBundlePlatforms=$env:APPX_BUNDLE_PLATFORMS `
/p:AppxPackageDir=$env:ARTIFACTS_DIR `
/p:PackageCertificateKeyFile=$env:PACKAGE_CERTIFICATE_KEYFILE `
/p:PackageCertificatePassword=$env:PACKAGE_CERTIFICATE_PASSWORD
env:
PLATFORM: x64
UAP_APPX_PACKAGE_BUILD_MODE: StoreUpload
APPX_BUNDLE: Always
APPX_PACKAGE_SIGNING_ENABLED: ${{ matrix.newVersion != '' }}
APPX_BUNDLE_PLATFORMS: ${{ matrix.appxBundlePlatforms }}
ARTIFACTS_DIR: ${{ github.workspace }}\Artifacts
PACKAGE_CERTIFICATE_KEYFILE: ${{ github.workspace }}\cert.pfx
PACKAGE_CERTIFICATE_PASSWORD: ${{ secrets.PACKAGE_CERTIFICATE_PWD }}
APP_CENTER_SECRET: ${{ secrets.APP_CENTER_SECRET }}
- if: matrix.debug && !contains( matrix.appxBundlePlatforms, 'arm64' )
name: Test ARM build in debug configuration
id: build_app_arm_debug
shell: pwsh
run: |
msbuild $env:SOLUTION_NAME `
/p:Platform=$env:PLATFORM `
/p:Configuration=$env:CONFIGURATION `
/p:UapAppxPackageBuildMode=$env:UAP_APPX_PACKAGE_BUILD_MODE `
/p:AppxBundle=$env:APPX_BUNDLE `
/p:AppxBundlePlatforms=$env:APPX_BUNDLE_PLATFORMS
env:
PLATFORM: ARM64
UAP_APPX_PACKAGE_BUILD_MODE: StoreUpload
APPX_BUNDLE: Always
APPX_BUNDLE_PLATFORMS: ARM64
- if: matrix.runCodeqlAnalysis
name: Perform CodeQL Analysis
id: analyze_codeql
uses: github/codeql-action/analyze@v3
continue-on-error: true
- if: matrix.runSonarCloudScan
name: Send SonarCloud results
id: send_sonar_results
shell: pwsh
run: |
.\.sonar\scanner\dotnet-sonarscanner end `
/d:sonar.login="$env:SONAR_TOKEN"
env:
GITHUB_TOKEN: ${{ secrets.SONAR_GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
- if: matrix.newVersion != ''
name: Upload build artifacts
id: upload_artifacts
uses: actions/upload-artifact@v4
with:
name: Build artifacts
path: Artifacts/
cd:
# This job will execute when the workflow is triggered on a 'workflow_dispatch' event,
# the target branch is 'master' and required parameter provided for release.
if: needs.ci.outputs.new_version != ''
needs: [ setup, ci ]
runs-on: windows-latest
env:
OLD_VERSION: ${{ needs.ci.outputs.old_version }}
NEW_VERSION: ${{ needs.ci.outputs.new_version }}
steps:
- name: Checkout repository
id: checkout_repo
uses: actions/checkout@v5
- name: Download and extract MSIX package
id: dl_package_artifact
uses: actions/download-artifact@v6
with:
name: Build artifacts
path: Artifacts/
- name: Create deployment payload
id: create_notepads_zip
shell: pwsh
run: |
Get-ChildItem -Filter *Production* -Recurse | Rename-Item -NewName { $_.name -replace "_Production|_Test",'' }
Compress-Archive -Path "Notepads_$($env:NEW_VERSION)\*" `
-DestinationPath "Notepads_$($env:NEW_VERSION)\Notepads_$($env:NEW_VERSION)_x86_x64_ARM64.zip"
working-directory: ./Artifacts
- name: Generate changelog
id: generate_changlog
uses: mrchief/universal-changelog-action@v1.3.2
with:
previousReleaseTagNameOrSha: v${{ env.OLD_VERSION }}
nextReleaseTagName: v${{ env.NEW_VERSION }}
nextReleaseName: v${{ env.NEW_VERSION }}
configFilePath: .github/RELEASE_TEMPLATE/changelog_config.json
- name: Create and publish release
id: create_release
uses: ncipollo/release-action@v1.20.0
with:
allowUpdates: true
replacesArtifacts: true
tag: v${{ env.NEW_VERSION }}
name: Notepads v${{ env.NEW_VERSION }}
body: ${{ steps.generate_changlog.outputs.changelog }}
token: ${{ secrets.GITHUB_TOKEN }}
artifacts:
Artifacts/Notepads_${{ env.NEW_VERSION }}/Notepads_${{ env.NEW_VERSION }}_x86_x64_ARM64.msixbundle
Artifacts/Notepads_${{ env.NEW_VERSION }}/Notepads_${{ env.NEW_VERSION }}_x86_x64_ARM64.zip
# - name: Publish to Windows Store
# id: publish_to_store
# uses: isaacrlevin/windows-store-action@1.0
# with:
# tenant-id: ${{ secrets.AZURE_AD_TENANT_ID }}
# client-id: ${{ secrets.AZURE_AD_APPLICATION_CLIENT_ID }}
# client-secret: ${{ secrets.AZURE_AD_APPLICATION_SECRET }}
# app-id: ${{ secrets.STORE_APP_ID }}
# package-path: "${{ github.workspace }}/Artifacts/"
# Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
_pkginfo.txt
*.appx
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# JetBrains Rider
.idea/
*.sln.iml
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
================================================
FILE: .whitesource
================================================
{
"checkRunSettings": {
"vulnerableCheckRunConclusionLevel": "failure"
},
"issueSettings": {
"minSeverityLevel": "LOW"
}
}
================================================
FILE: CI-CD_DOCUMENTATION.md
================================================
# Notepads CI/CD documentation
- after merging the PR, the first run of the "Notepads CI/CD Pipeline" workflow will not complete successfully, because it requires specific setup explained in this documentation. The two other workflows "CodeQL Analysis" and "Build", should complete successfully.
## 1. Set up SonarCloud
### SonarCloud is a cloud-based code quality and security service
#### Create SonarCloud project
- Go to https://sonarcloud.io/
- Click the "Log in" button and create a new account or connect with GitHub account (recommended)
- At the top right corner click the "+" sign
- From the dropdown select "Create new Organization"
- Click the "Choose an organization on GitHub" button
- Select an account for the organization setup
- On Repository Access select "Only select repositories" and select the project and click the "Save" button
- On the "Create organization page" don't change the Key and click "Continue"
- Select the Free plan then click the "Create Organization" button to finalize the creation of the Organization
#### Configure SonarCloud project
- At the top right corner click the "+" sign and select "Analyze new project"
- Select the project and click the "Set Up" button in the box on the right
- Under "Choose your analysis method" click "With GitHub Actions" and **keep the following page open**
- [Create a new PAT with **repo_deployment** and **read:packages** permissions](#7-how-to-create-a-pat) and copy the value of the generated token
- In the project's GitHub repository, go to the **Settings** tab -> Secrets
- Click on **New Repository secret** and create a new secret with the name **SONAR_GITHUB_TOKEN** and the token you just copied as the value
- Create another secret with the two values from the SonarCloud page you kept open, which you can close after completing this step

- [Run the "Notepads CI/CD Pipeline" workflow manually](#2-run-workflow-manually)
#### Set Quality Gate
- After the "Notepads CI/CD Pipeline" workflow has executed successfully, go to https://sonarcloud.io/projects and click on the project
- In the alert bar above the results, click the "Set new code definition" button and select "Previous version" (notice the "New Code definition has been updated" alert at the top)
- The Quality Gate will become active as soon as the next SonarCloud scan completes successfully
<br>
<a name="workflow_dispatch"></a>
## 2. Run workflow manually
Once you've set up all the steps above correctly, you should be able to successfully complete a manual execution of the "Notepads CI/CD Pipeline" workflow.
1. Go to the project's GitHub repository and click on the **Actions** tab
2. From the "Workflows" list on the left, click on "Notepads CI/CD Pipeline"
3. On the right, next to the "This workflow has a workflow_dispatch event trigger" label, click on the "Run workflow" dropdown, make sure the default branch is selected (if not manually changed, should be main or master) in the "Use workflow from" dropdown and click the "Run workflow" button
4. You can optionally fill the argument textbox with "release" to trigger [GitHub Release](#github_release) and [Store Upload](#store_upload)

5. Once the workflow run has completed successfully, move on to the next step of the documentation
NOTE: **screenshots are only exemplary**
<br>
## 3. Set up Dependabot
Dependabot is a GitHub native security tool that goes through the dependencies in the project and creates alerts, and PRs with updates when a new and/or non-vulnerable version is found.
- for PRs with version updates, this pipeline comes pre-configured for all current dependency sources in the project, so at "Insights" tab -> "Dependency graph" -> "Dependabot", you should be able to see all tracked sources of dependencies, when they have been checked last and view a full log of the last check


### Set up security alerts and updates
##### - GitHub, through Dependabot, also natively offers a security check for vulnerable dependencies
1. Go to "Settings" tab of the repo
2. Go to "Security & analysis" section
3. Click "Enable" for both "Dependabot alerts" and "Dependabot security updates"
- By enabling "Dependabot alerts", you would be notified for any vulnerable dependencies in the project. At "Security" tab -> "Dependabot alerts", you can manage all alerts. By clicking on an alert, you would be able to see a detailed explanation of the vulnerability and a viable solution.


- By enabling "Dependabot security updates", you authorize Dependabot to create PRs specifically for **security updates**

### Set up Dependency graph
##### - The "Dependency graph" option should be enabled by default for all public repos, but in case it isn't:
1. Go to "Settings" tab of the repo
2. Go to "Security&Analysis" section
3. Click "Enable" for the "Dependency graph" option
- this option enables the "Insights" tab -> "Dependency graph" section -> "Dependencies" tab, in which all the dependencies for the project are listed, under the different manifests they are included in

NOTE: **screenshots are only exemplary**
<br>
## 4. CodeQL
CodeQL is GitHub's own industry-leading semantic code analysis engine. CodeQL requires no setup, because it comes fully pre-configured by us.
To activate it and see its results, only a push commit or a merge of a PR to the default branch of the repository, is required.
We've also configured CodeQL to run on schedule, so every day at 8:00AM UTC, it automatically scans the code.
- you can see the results here at **Security** tab -> **Code scanning alerts** -> **CodeQL**:

- on the page of each result, you can see an explanation of what the problem is and also one or more solutions:

### Code scanning alerts bulk dismissal tool
##### - currently, GitHub allows for only 25 code scanning alerts to be dismissed at a time. Sometimes, you might have hundreds you would like to dismiss, so you will have to click many times and wait for a long time to dismiss them. Via the "csa-bulk-dismissal.yml", you can automatically dismiss unnecessary alerts or manually do that with one click.
NOTE: This tool executes automatically when **Notepads CI/CD Pipeline** action completes.
#### 1. Setup
1. In the repository, go to the **Settings** tab -> **Secrets**

2. Add the following secrets with the name and the corresponding value, by at the upper right of the section, clicking on the **New repository secret** button:


- CSA_ACCESS_TOKEN - [create a PAT with "security_events" permission only](#7-how-to-create-a-pat).
#### 2. Execution
1. This tool is automatically triggered when **Notepads CI/CD Pipeline** task completes, if you want to manually execute this follow next steps
2. In your repo, click on the Actions tab and on the left, in the Workflows list, click on the "Code scanning alerts bulk dismissal"

3. On the right, click on the "Run workflow" dropdown. Under "Use workflow from" choose your default branch (usually main/master), in the **Type of filter to use** field type "path"/"desc" depending upon whether dismiss alerts based on predefined paths or description respectively (default is "path"), in the **Reason for dismissal** type "fp"/"wf"/"ut" for "false positive"/"won't fix"/"used in tests" respectively (default is "wf") and click on the **Run workflow** button
<a name="csa_execute"></a>

NOTE: if any unsupported values are entered default values will be used
4. If everything was set up currently in the "Setup" phase, the "Code scanning alerts bulk dismissal" workflow is going to be executed successfully, which after some time, would result in **all** previously open code scanning alerts, with a certain description be dismissed



NOTE: "closed" refers to "dismissed" alerts
#### 3. Customization
The "setup" job in the pipeline, allows for more precise filtering of alerts to bulk dismiss. It uses the filter type to choose (filter based on path or description) from the alert to determine if it has to be dismissed or not. We've added the following paths and alert descriptions by default:
##### Paths:
- "\*/obj/\*" (if path contains `obj` folder at any position)
##### Descriptions:
- "Calls to unmanaged code"
- "Unmanaged code"
##### To add more paths, follow these steps:
1. In your source code, open ".github/workflows/csa-bulk-dismissal.yml"
2. From line 50 to 56, notice "$MATRIX = **". This is the [powershell hashtable](https://docs.microsoft.com/powershell/scripting/learn/deep-dives/everything-about-hashtable?view=powershell-7.1) of filters that the CSABD (Code scanning alerts bulk dismissal) tool uses to filter through the alerts:

3. To add more paths under **include** element use comma separation and followed from next line add `@{ filter = "New path" }`. Replace "New path" with the path (with or without [wild cards](https://docs.microsoft.com/powershell/module/microsoft.powershell.core/about/about_wildcards?view=powershell-7.1)) you want:

##### To add more descriptions, follow these steps:
1. In your source code, open ".github/workflows/csa-bulk-dismissal.yml"
2. From line 58 to 67, notice "$MATRIX = **". This is the [powershell hashtable](https://docs.microsoft.com/powershell/scripting/learn/deep-dives/everything-about-hashtable?view=powershell-7.1) of filters that the CSABD (Code scanning alerts bulk dismissal) tool uses to filter through the alerts:

3. To add more descriptions under **include** element use comma separation and followed from next line add `@{ filter = "New description" }`. Replace "New description" with the description you want:

##### To change default filter type and dismissal reason, follow these steps:
1. In your source code, open ".github/workflows/csa-bulk-dismissal.yml"
2. To change default filter type change **$FILTER_TYPE** variable in line 31 to something else (default is "path", supported are: "desc" and "path"):

3. To change dismissal reason change **$REASON** variable in line 45 to something else (default is "won't fix", supported are: "false positive", "won't fix" and "used in tests"):

NOTE: changing default filter type and dismissal reason won't change dafault value typed when [manually executing](#csa_execute) tool, change values in line 13 and 17 respectively to reflect the change

<br>
<a name="github_release"></a>
## 5. Automated GitHub release
When triggered bumps up the GitHub tag in the repo and executes the CD job and produces release with changelogs
Note: **not every commit to your master branch are included in changelog**
#### Setup
Add the following secrets by going to the repo **Settings** tab -> **Secrets**:
1. **PACKAGE_CERTIFICATE_BASE64**
- used to dynamically create the PFX file required for the signing of the **msixbundle**
- use the following PowerShell code locally to turn your PFX file into Base64:
```
# read from PFX as binary
$PFX_FILE = [IO.File]::ReadAllBytes('absolute_path_to_PFX')
# convert to Base64 and write in txt
[System.Convert]::ToBase64String($PFX_FILE) | Out-File 'absolute_path\cert.txt'
```
- copy the contents of the **cert.txt** and paste as the value of the secret
2. **PACKAGE_CERTIFICATE_PWD**
- used in the build of the project to authenticate the PFX
- copy and paste the password of your PFX as the value of this secret
NOTE:
- none of those values are visible in the logs of the pipeline, nor are available to anyone outside of the original repository e.g. forks, anonymous clones etc.
- the dynamically created PFX file lives only for the duration of the pipeline execution
#### Execution
[Once you've set up all the steps for manual execution of the "Notepads CI/CD Pipeline" workflow correctly](#workflow_dispatch), you should be able to successfully trigger release with the same workflow.
1. Go to the project's GitHub repository and click on the **Actions** tab
2. From the "Workflows" list on the left, click on "Notepads CI/CD Pipeline"
3. On the right, next to the "This workflow has a workflow_dispatch event trigger" label, click on the "Run workflow" dropdown, make sure the default branch is selected (if not manually changed, should be main or master) in the "Use workflow from" dropdown, type "release" in the argument textbox (By default "test" is typed) and click the "Run workflow" button

4. The workflow will produce release assets and calculate version, generate changelogs from valid commits since previous tag.
NOTE: **screenshots are only exemplary**
<br>
#### - follow these instructions for any commit (push or PR merge) to your master branch, you would like to see in changelog and count towards version change.
You would need one of three keywords at the start of your commit title. Each of the three keywords corresponds to a number in your release version i.e. v1.2.3. The release versioning uses the ["Conventional Commits" specification](https://www.conventionalcommits.org/en/v1.0.0/):
- "fix: ..." - this keyword corresponds to the last number v1.2.**3**, also known as PATCH;
- "feat: ..." - this keyword corresponds to the middle number v1.**2**.3, also known as MINOR;
- "perf: ..." - this keyword corresponds to the first number v**1**.2.3, also known as MAJOR. In addition, to trigger a MAJOR release, you would need to write "BREAKING CHANGE: ..." in the description of the commit, with an empty line above it to indicate it is in the <footer> portion of the description;
Note: when making a MAJOR release by committing through a terminal, use the multiple line syntax to add the commit title on one line and then adding an empty line, and then adding the "BREAKING CHANGE: " label
<br><br>
#### Examples
Example(fix/PATCH): <br>
`git commit -a -m "fix: this is a PATCH release triggering commit"`
<br>
`git push origin master`
<br>
<br>
On triggering `Release`:
<br>
Result: v1.2.3 -> **v1.2.4**
<br>
<br>
<br>
Example(feat/MINOR): <br>
`git commit -a -m "feat: this is a MINOR release triggering commit"`
<br>
`git push origin master`
<br>
<br>
On triggering `Release`:
<br>
Result: v1.2.3 -> **v1.3.0**
<br>
<br>
<br>
Example(perf/MAJOR): <br>
`` git commit -a -m "perf: this is a MAJOR release triggering commit ` ``
<br>
>> <br>
>> `BREAKING CHANGE: this is the breaking change"`
<br>
`git push origin master`
<br>
<br>
On triggering `Release`:
<br>
Result: v1.2.3 -> **v2.0.0**
<br>
<br>
Note: in the MAJOR release example, the PowerShell multiline syntax ` (backtick) is used. After writing a backtick, a press of the Enter key should open a new line.
<br>
<a name="store_upload"></a>
## 6. Setup automated publishing to the Windows Store
#### - for the automation to work, at least one submission needs to be already created manually
- [Create an Azure AD tenant](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant) or use an existing one
- Associate your [Microsoft Partner Center with the Azure AD tenant](https://docs.microsoft.com/en-us/windows/uwp/publish/associate-azure-ad-with-partner-center)
- [Create a new app registration](https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml) or use an existing one from the list in your **portal.azure.com** -> **Azure Active Directory** -> **App registrations** section
- Add the [Azure AD application to the Microsoft Partner Center](https://docs.microsoft.com/en-us/partner-center/service-principal) and give it "Manager" permissions
- In the project's GitHub repo, create the following secrets:
1. **AZURE_AD_TENANT_ID** and **AZURE_AD_APPLICATION_CLIENT_ID**
- copy and paste the values shown in the screenshot below to the appropriate secret:

Note: screenshot is taken from **portal.azure.com** -> **Azure AD** -> **App registrations** -> **app-name** page
2. **AZURE_AD_APPLICATION_SECRET**
- copy and paste the value you get on the page following from **Account settings** -> **User management** -> **Azure AD applications** -> click on the added application:

3. **STORE_APP_ID**
- copy and paste the highlighted code as the value of this secret:

- If everything was setup correctly, on your next push commit to the `master` branch with a new `Identity.Version` in the `Package.appxmanifest`, a new submission in the Microsoft Partner Center with the new `*.msixupload` package should appear and be automatically submitted if all verifications pass
<br>
## 7. How to create a PAT
- In a new tab open GitHub, at the top right corner, click on your profile picture and click on **Settings** from the dropdown.

- Go to Developer Settings -> Personal access tokens.


- Click the **Generate new token** button and enter password if prompted.

- Name the token, from the permissions list choose the ones needed and at the bottom click on the **Generate token** button.

- Copy the token value and paste it wherever its needed

NOTE: once you close or refresh the page, you won't be able to copy the value of the PAT again!
#
Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at NotepadsApp@outlook.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
================================================
FILE: CONTRIBUTING.md
================================================
# How to Contribute:
You can contribute to Notepads project by:
- Report issues and bugs [here](https://github.com/0x7c13/Notepads/issues)
- Submit feature requests [here](https://github.com/0x7c13/Notepads/issues)
- Create a pull request to help me (Let me know before you do so):
* Fix an existing bug, prefix title with `fix: `.
* Implement new features, prefix title with `feat: `.
* Fix grammar errors or improve my documentations, prefix title with `doc: `.
* Improve CI/CD pipeline, prefix title with `ci: `.
* Cleanup code and code refactoring or anything else you want to change in the project not listed above, prefix title with `other: ` or assign a custom prefix with the same format (`label: `).
- Internationalization and localization:
* My only inputs for the work here is to recommend you guys to use existing phrases that you found in win32 notepad.exe or vs code or notepad++ as much as possible. It makes your translations more consistent and easier to understand by end users.
* Since Notepads is still in early beta. I might change texts and add texts now and then for the upcoming months. Whenever that happens, I will notify you in [Notepads Discord Server](https://discord.gg/VqetCub) (Please join it if possible) and in [GitHub Discussions](https://github.com/0x7c13/Notepads/discussions/818) (Subscribe to notifications). If someday you lose the passion, feel free to let me know so I can assign your language to others.
* OK, here are the steps you need to follow if you want to contribute:
1. Make sure you can build and run Notepads project on your machine so that you can test it after your work.
2. Click [here](https://github.com/0x7c13/Notepads/discussions/818) and provide your information.
3. Do your work and test it on your machine and check your work to make sure it is not breaking any existing layout.
4. Finish your work and create a PR, prefix PR title with `lang: ` (Example: https://github.com/0x7c13/Notepads/pull/30)
5. Let me know and I will merge it if it looks good to me.
Notes: You should use the language code as your folder name listed here: https://docs.microsoft.com/en-us/windows/uwp/publish/supported-languages
Note: This repository follows [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/), format your pull request title according to specifications.
# How to Build and Run Notepads from source:
* Make sure your machine is running on Windows 10 1903+.
* Make sure you have Visual Studio 2019 16.2 or newer installed.
* Make sure you have "Universal Windows Platform development" component installed for Visual Studio.
* Make sure you installed "Windows 10 SDK (10.0.17763.0 + 10.0.19041.0)" as well.
* Open src/Notepads.sln with Visual Studio and set Solution Platform to x64(amd64).
* Once opened, right click on the solution and click on "Restore NuGet Packages".
* Now you should be able to build and run Notepads on your machine. If it fails, try close the solution and reopen it again.
# TL;DR:
This is my first UWP project and I learn as I go. As a result, the code base is not well organized, and it is not well written. The philosophy here is to create a text editor that is easy to use, lightweight and yet stylish instead of creating another Notepad++ or VS Code in anyway. If you are looking for a code/programming editor, you might want to use VS Code instead. If you are looking for a lightweight text editor, you come to the right place. Notepads is here to help you do small things quicker and you should always install and use other editors that suit your need.
================================================
FILE: LICENSE.txt
================================================
MIT License
Copyright (c) 2019-2024 Jackie (Jiaqi) Liu
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: PRIVACY.md
================================================
Privacy Policy
----------------
### Introduction
Our privacy policy will help you understand what information we collect by *[Notepads](https://github.com/0x7c13/Notepads)* app, how *[Notepads](https://github.com/0x7c13/Notepads)* app uses it, and what choices you have.
*[0x7c13](https://github.com/0x7c13)* with the help of the Github Notepads App community built the *[Notepads](https://github.com/0x7c13/Notepads)* app as a free app. This APP is provided by *[0x7c13](https://github.com/0x7c13)* at no cost and is intended for use as is.
If you choose to use this app, then you agree to the collection and use of information in relation with this policy. The data that we collect are used for providing and improving the app service. We will not use or share your information or usage data with anyone except as described in this Privacy Policy.
### Information Collection and Use
For a better experience while using this app, certain usage data and errors are collected for identifying issues or improving the user experience of the app. *[Visual Studio AppCenter](https://visualstudio.microsoft.com/app-center/)* analytics service is used in this app to collect basic usage data plus some minimum telemetry to help debug runtime errors. See thread [#334](https://github.com/0x7c13/Notepads/issues/334) for more details.
The app does NOT use third party services that may collect information used to identify you.
Note: Visual Studio App Center is scheduled for retirement on March 31, 2025. Notepads v1.5.6.0+ starts to use Microsoft Store Services SDK to log non-privacy usage data and errors.
### Data Security
We value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and we cannot guarantee its absolute security.
### Changes to This Privacy Policy
We may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. We will notify you of any changes by posting the new Privacy Policy on this page. These changes are effective immediately, after they are posted on this page.
### Contact Us
If you have any questions or suggestions about our Privacy Policy, do not hesitate to contact us.
Contact Information:
Email: notepadsapp@outlook.com
================================================
FILE: README.md
================================================
<p align="center">
<img width="128" align="center" src="src/Notepads/Assets/appicon_ws.gif">
</p>
<h1 align="center">
Notepads
</h1>
<p align="center">
A modern, lightweight text editor with a minimalist design.
</p>
<p align="center">
<a style="text-decoration:none" href="https://www.microsoft.com/store/apps/9nhl4nsc67wm">
<img src="https://img.shields.io/badge/Microsoft%20Store-Download-orange.svg?style=flat-square" alt="Store link" />
</a>
<a style="text-decoration:none" href="https://github.com/0x7c13/Notepads/releases">
<img src="https://img.shields.io/github/release/0x7c13/notepads.svg?label=latest%20version&style=flat-square" alt="Releases" />
</a>
<a style="text-decoration:none">
<img src="https://img.shields.io/badge/platform-Windows%20%7C%20UWP-yellow.svg?style=flat-square" alt="Platform" />
</a>
<a style="text-decoration:none" href="https://discord.gg/VqetCub">
<img src="https://img.shields.io/discord/588473626651787274.svg?style=flat-square" alt="Discord" />
</a>
</p>
## What is Notepads and why do I care?
I have been waiting long enough for a modern Windows 10 notepad app to come before I decided to create one myself. Don’t get me wrong, Notepad++, VS Code, and Sublime are great text editors. I have used them all and I will continue to use them in the future. However, they are either too heavy or look less appealing. There are times that I just wanted to use Windows notepad for things like writing notes or editing config files. So I decided to create a win32 notepad replacement here and try to give it a modern look and feel. Most importantly, it has to be blazingly fast and appeals to everyone.
So here comes the “Notepads” 🎉 (s stands for Sets).
* Fluent design with a built-in tab system.
* Blazingly fast and lightweight.
* Launch from the command line or PowerShell by typing: `notepads` or `notepads %FilePath%`.
* Multi-line handwriting support.
* Built-in Markdown live preview.
* Built-in diff viewer (preview your changes).
* Session snapshot and multi-instances.




## Shortcuts:
* Ctrl+N/T to create new tab.
* Ctrl+(Shift)+Tab to switch between tabs.
* Ctrl+Num(1-9) to quickly switch to specified tab.
* Ctrl+"+"/"-" for zooming. Ctrl+"0" to reset zooming to default.
* Ctrl+L/R to change text flow direction. (LTR/RTL)
* Alt+P to toggle preview split view for Markdown file.
* Alt+D to toggle side-by-side diff viewer.
## Platform limitations (UWP):
* You won't be able to save files to system folders due to UWP restriction (windows, system32, etc.).
* You cannot associate potentially harmful file types (.cmd, .bat etc.) with Notepads.
* Notepads does not work well with large files; the file size limit is set to 1MB for now. I will add large file support later.
## Downloads:
Notepads is available in the Microsoft Store. You can get the latest version of Notepads here for free: [Microsoft Store Link](https://www.microsoft.com/store/apps/9nhl4nsc67wm).
You can also use the Windows Package Manager to install notepads:
```cmd
winget install "Notepads App"
```
## Changelog:
* [Notepads Releases](https://github.com/0x7c13/Notepads/releases)
## Disclaimer and Privacy statement:
To be 100% transparent:
* Notepads does not and will never collect user information in terms of user privacy.
* I will not track your IP.
* I will not record your typings or read any of your files created in Notepads including file name and file path.
* No typings or files will be sent to me or third parties.
I am using analytics service "AppCenter" to collect basic usage data plus some minimum telemetry to help me debug runtime errors. Here is the thread I made clear on this topic: https://github.com/0x7c13/Notepads/issues/334
Feel free to review the source code or build your own version of Notepads since it is 100% open sourced.
#### More to read here: [[Privacy Policy](PRIVACY.md)]
TL;DR: You might notice that I work for Microsoft but Notepads is my personal project that I accomplish during free time (to empower every person and every organization on the planet to achieve more😃). I do not work for the Windows team, nor do I work for a Microsoft UX/App team. I am not expert on creating Windows apps either. I learned how to code UWP as soon as I started this project, so don’t put too much hope on me or treat it as a project sponsored by Microsoft.
## Contributing:
* [How to contribute?](CONTRIBUTING.md)
* Notepads is free and open source, if you like my work, please consider:
* Star this project on GitHub
* Leave me a review [here](https://www.microsoft.com/store/apps/9nhl4nsc67wm)
* [](https://ko-fi.com/D1D6Y3C6)
## Dependencies and References:
* [Windows Community Toolkit](https://github.com/windows-toolkit/WindowsCommunityToolkit)
* [XAML Controls Gallery](https://github.com/microsoft/Xaml-Controls-Gallery)
* [Windows UI Library](https://github.com/Microsoft/microsoft-ui-xaml)
* [ColorCode Universal](https://github.com/WilliamABradley/ColorCode-Universal)
* [UTF Unknown](https://github.com/CharsetDetector/UTF-unknown)
* [DiffPlex](https://github.com/mmanela/diffplex)
* [Win2D](https://github.com/microsoft/Win2D)
## Special Thanks:
* [Yi Zhou](http://zhouyiwork.com/) - App icon designer, Notepads App Icon (old) is greatly inspired by the new icon for Windows Terminal.
* [Mahmoud Qurashy](https://github.com/mah-qurashy) - App icon and file icon(s) designer, creator of the new Notepads App Icon.
* Alexandru Sterpu - App Tester, who helped me a lot during preview/beta testing.
* Code Contributors: [DanverZ](https://github.com/chenghanzou), [BernhardWebstudio](https://github.com/BernhardWebstudio), [Csányi István](https://github.com/AmionSky), [Pavel Erokhin](https://github.com/MairwunNx), [Sergio Pedri](https://github.com/Sergio0694), [Lucas Pinho B. Santos](https://github.com/pinholucas), [Soumya Ranjan Mahunt](https://github.com/soumyamahunt), [Belleve Invis](https://github.com/be5invis), [Maickonn Richard](https://github.com/Maickonn), [Xam](https://github.com/XamDR)
* Documentation Contributors: [Craig S.](https://github.com/sercraig)
* Localization Contributors:
* [fr-FR][French (France)]: [François Rousselet](https://github.com/frousselet), [François-Joseph du Fou](https://github.com/FJduFou), [Armand Delessert](https://github.com/ArmandDelessert)
* [es-ES][Spanish (Spain)]: [Jose Pinilla](https://github.com/joseppinilla)
* [zh-CN][Chinese (S)]: [lindexi](https://github.com/lindexi), [walterlv](https://github.com/walterlv), [0x7c13](https://github.com/0x7c13)
* [hu-HU][Hungarian (Hungary)]: [Csányi István](https://github.com/AmionSky), [Kristóf Kékesi](https://github.com/KristofKekesi)
* [tr-TR][Turkish (Turkey)]: [Mert Can Demir](https://github.com/validatedev), [Emirhakan Tanhan](https://github.com/EmirhakanTanhan)
* [ja-JP][Japanese (Japan)]: [Mamoru Satoh](https://github.com/pnp0a03)
* [de-DE][German (Germany)]/[de-CH][German (Switzerland)]: [Walter Wolf](https://github.com/WalterWolf49)
* [ru-RU][Russian (Russia)]: [Pavel Erokhin](https://github.com/MairwunNx), [krlvm](https://github.com/krlvm)
* [fi-FI][Finnish (Finland)]: [Esa Elo](https://github.com/sauihdik)
* [uk-UA][Ukrainian (Ukraine)]: [Taras Fomin aka Tarik02](https://github.com/Tarik02)
* [it-IT][Italian (Italy)]: [Andrea Guarinoni](https://github.com/guari), [Bunz](https://github.com/66Bunz)
* [cs-CZ][Czech (Czech Republic)]: [Jan Rajnoha](https://github.com/JanRajnoha)
* [pt-BR][Portuguese (Brazil)]: [Lucas Pinho B. Santos](https://github.com/pinholucas)
* [ko-KR][Korean (Korea)]: [Donghyeok Tak](https://github.com/tdh8316)
* [hi-IN][Hindi (India)]/[or-IN][Odia (India)]: [Soumya Ranjan Mahunt](https://github.com/soumyamahunt)
* [pl-PL][Polish (Poland)]: [Daxxxis](https://github.com/Daxxxis)
* [ka-GE][Georgian (Georgia)]: [guram mazanashvili](https://github.com/gmaza)
* [hr-HR][Croatian (Croatia)]: [milotype](https://github.com/milotype)
* [zh-TW][Chinese (T)]: [Tony Yao](https://github.com/SeaBao)
* [pt-PT][Portuguese (Portugal)]: [O.Leitão](https://github.com/oleitao)
* [sr-Latn][Serbian (Latin)]: [bzzrak](https://github.com/bzzrak)
* [sr-cyrl][Serbian (Cyrillic)]: [bzzrak](https://github.com/bzzrak)
* [nl-NL][Dutch (Netherlands)]: [Stephan Paternotte](https://github.com/Stephan-P)
* Notepads CI/CD pipeline: Built with ❤ by [Pipeline Foundation](https://pipeline.foundation)
[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/0)[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/1)[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/2)[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/3)[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/4)[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/5)[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/6)[](https://sourcerer.io/fame/0x7c13/0x7c13/Notepads/links/7)
## Stay tuned 📢:
* [Notepads Discord Server](https://discord.gg/VqetCub)
================================================
FILE: azure-pipelines.yml
================================================
# Universal Windows Platform build definition
trigger:
paths:
exclude:
- '*.md'
- 'ScreenShots/'
- '.whitesource'
- '.github/'
tags:
exclude:
- '*'
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'x86|x64|arm64'
buildConfiguration: 'Production'
appxPackageDir: '$(build.artifactStagingDirectory)\AppxPackages\\'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
platform: 'x64'
solution: '$(solution)'
configuration: '$(buildConfiguration)'
msbuildArgs: '/p:AppxBundlePlatforms="$(buildPlatform)"
/p:AppxPackageDir="$(appxPackageDir)"
/p:AppxBundle=Always
/p:UapAppxPackageBuildMode=StoreUpload
/p:AppxPackageSigningEnabled=false'
================================================
FILE: src/.editorconfig
================================================
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true
# C# files
[*.cs]
#### Core EditorConfig Options ####
# Indentation and spacing
indent_size = 4
indent_style = space
tab_width = 4
# New line preferences
end_of_line = crlf
insert_final_newline = false
#### .NET Coding Conventions ####
# this. and Me. preferences
dotnet_style_qualification_for_event = false:silent
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_property = false:silent
# Language keywords vs BCL types preferences
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
# Parentheses preferences
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
# Modifier preferences
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
# Expression-level preferences
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_inlined_variable_declaration = true:silent
csharp_style_throw_expression = true:suggestion
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_object_initializer = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
# Field preferences
dotnet_style_readonly_field = true:suggestion
#### C# Coding Conventions ####
# var preferences
csharp_style_var_elsewhere = true:silent
csharp_style_var_for_built_in_types = true:silent
csharp_style_var_when_type_is_apparent = true:silent
# Expression-bodied members
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_operators = true:silent
csharp_style_expression_bodied_properties = true:silent
# Pattern matching preferences
csharp_style_pattern_matching_over_as_with_null_check = true:silent
csharp_style_pattern_matching_over_is_with_cast_check = true:silent
# Null-checking preferences
csharp_style_conditional_delegate_call = true:suggestion
# Modifier preferences
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
# Code-block preferences
csharp_prefer_braces = false:suggestion
# Expression-level preferences
csharp_prefer_simple_default_expression = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
#### C# Formatting Rules ####
# New line preferences
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true
# Indentation preferences
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = one_less_than_current
csharp_indent_switch_labels = true
# Space preferences
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false
# Wrapping preferences
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = true
# Naming Symbols
# constant_fields - Define constant fields
dotnet_naming_symbols.constant_fields.applicable_kinds = field
dotnet_naming_symbols.constant_fields.required_modifiers = const
# non_private_readonly_fields - Define public, internal and protected readonly fields
dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, internal, protected
dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field
dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly
# static_readonly_fields - Define static and readonly fields
dotnet_naming_symbols.static_readonly_fields.applicable_kinds = field
dotnet_naming_symbols.static_readonly_fields.required_modifiers = static, readonly
# private_readonly_fields - Define private readonly fields
dotnet_naming_symbols.private_readonly_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_readonly_fields.applicable_kinds = field
dotnet_naming_symbols.private_readonly_fields.required_modifiers = readonly
# public_internal_fields - Define public and internal fields
dotnet_naming_symbols.public_internal_protected_fields.applicable_accessibilities = public, internal, protected
dotnet_naming_symbols.public_internal_protected_fields.applicable_kinds = field
# private_protected_fields - Define private and protected fields
dotnet_naming_symbols.private_protected_fields.applicable_accessibilities = private, protected
dotnet_naming_symbols.private_protected_fields.applicable_kinds = field
# public_symbols - Define any public symbol
dotnet_naming_symbols.public_symbols.applicable_accessibilities = public, internal, protected, protected_internal
dotnet_naming_symbols.public_symbols.applicable_kinds = method, property, event, delegate
# parameters - Defines any parameter
dotnet_naming_symbols.parameters.applicable_kinds = parameter
# non_interface_types - Defines class, struct, enum and delegate types
dotnet_naming_symbols.non_interface_types.applicable_kinds = class, struct, enum, delegate
# interface_types - Defines interfaces
dotnet_naming_symbols.interface_types.applicable_kinds = interface
# Naming Styles
# camel_case - Define the camelCase style
dotnet_naming_style.camel_case.capitalization = camel_case
# pascal_case - Define the Pascal_case style
dotnet_naming_style.pascal_case.capitalization = pascal_case
# first_upper - The first character must start with an upper-case character
dotnet_naming_style.first_upper.capitalization = first_word_upper
# prefix_interface_interface_with_i - Interfaces must be PascalCase and the first character of an interface must be an 'I'
dotnet_naming_style.prefix_interface_interface_with_i.capitalization = pascal_case
dotnet_naming_style.prefix_interface_interface_with_i.required_prefix = I
# Naming Rules
# Async
dotnet_naming_rule.async_methods_end_in_async.severity = silent
dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
dotnet_naming_symbols.any_async_methods.applicable_kinds = method
dotnet_naming_symbols.any_async_methods.applicable_accessibilities = *
dotnet_naming_symbols.any_async_methods.required_modifiers = async
dotnet_naming_style.end_in_async.required_suffix = Async
dotnet_naming_style.end_in_async.capitalization = pascal_case
# Constant fields must be PascalCase
dotnet_naming_rule.constant_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.constant_fields_must_be_pascal_case.symbols = constant_fields
dotnet_naming_rule.constant_fields_must_be_pascal_case.style = pascal_case
# Public, internal and protected readonly fields must be PascalCase
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.symbols = non_private_readonly_fields
dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.style = pascal_case
# Static readonly fields must be PascalCase
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.symbols = static_readonly_fields
dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.style = pascal_case
# Private readonly fields must be camelCase
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.severity = silent
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.symbols = private_readonly_fields
dotnet_naming_rule.private_readonly_fields_must_be_camel_case.style = camel_case
# Public and internal fields must be PascalCase
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.severity = silent
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.symbols = public_internal_protected_fields
dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.style = pascal_case
# Private and protected fields must be camelCase
dotnet_naming_rule.private_fields_must_be_camel_case.severity = silent
dotnet_naming_rule.private_fields_must_be_camel_case.symbols = private_protected_fields
dotnet_naming_rule.private_fields_must_be_camel_case.style = prefix_private_field_with_underscore
# Public members must be capitalized
dotnet_naming_rule.public_members_must_be_capitalized.severity = silent
dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols
dotnet_naming_rule.public_members_must_be_capitalized.style = first_upper
# Parameters must be camelCase
dotnet_naming_rule.parameters_must_be_camel_case.severity = silent
dotnet_naming_rule.parameters_must_be_camel_case.symbols = parameters
dotnet_naming_rule.parameters_must_be_camel_case.style = camel_case
# Class, struct, enum and delegates must be PascalCase
dotnet_naming_rule.non_interface_types_must_be_pascal_case.severity = silent
dotnet_naming_rule.non_interface_types_must_be_pascal_case.symbols = non_interface_types
dotnet_naming_rule.non_interface_types_must_be_pascal_case.style = pascal_case
# Interfaces must be PascalCase and start with an 'I'
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.severity = silent
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.symbols = interface_types
dotnet_naming_rule.interface_types_must_be_prefixed_with_i.style = prefix_interface_interface_with_i
# prefix_private_field_with_underscore - Private fields must be prefixed with _
dotnet_naming_style.prefix_private_field_with_underscore.capitalization = camel_case
dotnet_naming_style.prefix_private_field_with_underscore.required_prefix = _
# Code files
[*.{cs,vb}]
# Migrate back from old Toolkit.ruleset
dotnet_diagnostic.CA1001.severity = warning
dotnet_diagnostic.CA1009.severity = warning
dotnet_diagnostic.CA1016.severity = warning
dotnet_diagnostic.CA1033.severity = warning
dotnet_diagnostic.CA1049.severity = warning
dotnet_diagnostic.CA1060.severity = warning
dotnet_diagnostic.CA1061.severity = warning
dotnet_diagnostic.CA1063.severity = warning
dotnet_diagnostic.CA1065.severity = warning
dotnet_diagnostic.CA1301.severity = warning
dotnet_diagnostic.CA1400.severity = warning
dotnet_diagnostic.CA1401.severity = warning
dotnet_diagnostic.CA1403.severity = warning
dotnet_diagnostic.CA1404.severity = warning
dotnet_diagnostic.CA1405.severity = warning
dotnet_diagnostic.CA1410.severity = warning
dotnet_diagnostic.CA1415.severity = warning
dotnet_diagnostic.CA1821.severity = warning
dotnet_diagnostic.CA1900.severity = warning
dotnet_diagnostic.CA1901.severity = warning
dotnet_diagnostic.CA2002.severity = warning
dotnet_diagnostic.CA2100.severity = warning
dotnet_diagnostic.CA2101.severity = warning
dotnet_diagnostic.CA2108.severity = warning
dotnet_diagnostic.CA2111.severity = warning
dotnet_diagnostic.CA2112.severity = warning
dotnet_diagnostic.CA2114.severity = warning
dotnet_diagnostic.CA2116.severity = warning
dotnet_diagnostic.CA2117.severity = warning
dotnet_diagnostic.CA2122.severity = warning
dotnet_diagnostic.CA2123.severity = warning
dotnet_diagnostic.CA2124.severity = warning
dotnet_diagnostic.CA2126.severity = warning
dotnet_diagnostic.CA2131.severity = warning
dotnet_diagnostic.CA2132.severity = warning
dotnet_diagnostic.CA2133.severity = warning
dotnet_diagnostic.CA2134.severity = warning
dotnet_diagnostic.CA2137.severity = warning
dotnet_diagnostic.CA2138.severity = warning
dotnet_diagnostic.CA2140.severity = warning
dotnet_diagnostic.CA2141.severity = warning
dotnet_diagnostic.CA2146.severity = warning
dotnet_diagnostic.CA2147.severity = warning
dotnet_diagnostic.CA2149.severity = warning
dotnet_diagnostic.CA2200.severity = warning
dotnet_diagnostic.CA2202.severity = warning
dotnet_diagnostic.CA2207.severity = warning
dotnet_diagnostic.CA2212.severity = warning
dotnet_diagnostic.CA2213.severity = warning
dotnet_diagnostic.CA2214.severity = warning
dotnet_diagnostic.CA2216.severity = warning
dotnet_diagnostic.CA2220.severity = warning
dotnet_diagnostic.CA2229.severity = warning
dotnet_diagnostic.CA2231.severity = warning
dotnet_diagnostic.CA2232.severity = warning
dotnet_diagnostic.CA2235.severity = warning
dotnet_diagnostic.CA2236.severity = warning
dotnet_diagnostic.CA2237.severity = warning
dotnet_diagnostic.CA2238.severity = warning
dotnet_diagnostic.CA2240.severity = warning
dotnet_diagnostic.CA2241.severity = warning
dotnet_diagnostic.CA2242.severity = warning
dotnet_diagnostic.CA1031.severity = none # Disable https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1031?view=vs-2019
dotnet_diagnostic.SA1011.severity = none
dotnet_diagnostic.SA1101.severity = none
dotnet_diagnostic.SA1118.severity = none
dotnet_diagnostic.SA1200.severity = none
dotnet_diagnostic.SA1201.severity = none
dotnet_diagnostic.SA1202.severity = none
dotnet_diagnostic.SA1309.severity = none
dotnet_diagnostic.SA1310.severity = none
dotnet_diagnostic.SA1600.severity = none
dotnet_diagnostic.SA1602.severity = none
dotnet_diagnostic.SA1611.severity = none
dotnet_diagnostic.SA1633.severity = none
dotnet_diagnostic.SA1634.severity = none
dotnet_diagnostic.SA1652.severity = none
dotnet_diagnostic.SA1629.severity = none # DocumentationTextMustEndWithAPeriod: Let's enable this rule back when we shift to WinUI3 (v8.x). If we do it now, it would mean more than 400 file changes.
dotnet_diagnostic.SA1413.severity = none # UseTrailingCommasInMultiLineInitializers: This would also mean a lot of changes at the end of all multiline intializers. It's also debatable if we want this or not.
dotnet_diagnostic.SA1314.severity = none # TypeParameterNamesMustBeginWithT: We do have a few templates that don't start with T. We need to double check that changing this is not a breaking change. If not, we can re-enable this.
================================================
FILE: src/Notepads/App.xaml
================================================
<Application
x:Class="Notepads.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<!--<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
</ResourceDictionary>
<ResourceDictionary x:Key="HighContrast">
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Notepads.Controls/Themes/Generic.xaml" />
<ResourceDictionary Source="Controls/TextEditor/TextEditorCore.xaml" />
<ResourceDictionary Source="Controls/FindAndReplace/FindAndReplacePlaceholder.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/DismissButtonStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/TransparentTextBoxStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/CustomSplitViewStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/InAppNotificationNoDismissButton.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/CustomSliderStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/CustomRadioButtonStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/CustomToggleSwitchStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/CustomNavigationViewItemStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/CustomAppBarButtonStyle.xaml"></ResourceDictionary>
<ResourceDictionary Source="Resource/CustomCheckBoxStyle.xaml"></ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style x:Key="CompactSubtitleTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource SubtitleTextBlockStyle}">
<Setter Property="FontSize" Value="18"/>
</Style>
<Style x:Key="DescriptionTextBlockStyle" TargetType="TextBlock" BasedOn="{StaticResource CaptionTextBlockStyle}">
<Setter Property="Foreground" Value="{ThemeResource SystemBaseMediumHighColor}"/>
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
================================================
FILE: src/Notepads/App.xaml.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Toolkit.Uwp.Helpers;
using Notepads.Services;
using Notepads.Settings;
using Notepads.Utilities;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.ApplicationModel.Core;
using Windows.ApplicationModel.DataTransfer;
using Windows.ApplicationModel.Resources.Core;
using Windows.UI;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
public sealed partial class App : Application
{
public static string ApplicationName = "Notepads";
public static Guid InstanceId { get; } = Guid.NewGuid();
public static bool IsPrimaryInstance = false;
public static bool IsGameBarWidget = false;
public static Mutex InstanceHandlerMutex { get; set; }
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
UnhandledException += OnUnhandledException;
TaskScheduler.UnobservedTaskException += OnUnobservedException;
InstanceHandlerMutex = new Mutex(true, App.ApplicationName, out bool isNew);
if (isNew)
{
IsPrimaryInstance = true;
ApplicationSettingsStore.Write(SettingsKey.ActiveInstanceIdStr, null);
}
else
{
InstanceHandlerMutex.Close();
}
LoggingService.LogInfo($"[{nameof(App)}] Started: Instance = {InstanceId} IsPrimaryInstance: {IsPrimaryInstance} IsGameBarWidget: {IsGameBarWidget}.");
ApplicationSettingsStore.Write(SettingsKey.ActiveInstanceIdStr, App.InstanceId.ToString());
InitializeComponent();
Suspending += OnSuspending;
}
/// <summary>
/// Invoked when the application is launched normally by the end user. Other entry points
/// will be used such as when the application is launched to open a specific file.
/// </summary>
/// <param name="e">Details about the launch request and process.</param>
protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
await ActivateAsync(e);
}
protected override async void OnFileActivated(FileActivatedEventArgs args)
{
await ActivateAsync(args);
base.OnFileActivated(args);
}
protected override async void OnActivated(IActivatedEventArgs args)
{
await ActivateAsync(args);
base.OnActivated(args);
}
private async Task ActivateAsync(IActivatedEventArgs e)
{
bool rootFrameCreated = false;
if (!(Window.Current.Content is Frame rootFrame))
{
rootFrame = CreateRootFrame(e);
Window.Current.Content = rootFrame;
rootFrameCreated = true;
ThemeSettingsService.Initialize();
AppSettingsService.Initialize();
}
var appLaunchSettings = new Dictionary<string, string>()
{
{ "OSArchitecture", SystemInformation.Instance.OperatingSystemArchitecture.ToString() },
{ "OSVersion", $"{SystemInformation.Instance.OperatingSystemVersion.Major}.{SystemInformation.Instance.OperatingSystemVersion.Minor}.{SystemInformation.Instance.OperatingSystemVersion.Build}" },
{ "UseWindowsTheme", ThemeSettingsService.UseWindowsTheme.ToString() },
{ "ThemeMode", ThemeSettingsService.ThemeMode.ToString() },
{ "UseWindowsAccentColor", ThemeSettingsService.UseWindowsAccentColor.ToString() },
{ "AppBackgroundTintOpacity", $"{(int) (ThemeSettingsService.AppBackgroundPanelTintOpacity * 10.0) * 10}" },
{ "ShowStatusBar", AppSettingsService.ShowStatusBar.ToString() },
{ "IsSessionSnapshotEnabled", AppSettingsService.IsSessionSnapshotEnabled.ToString() },
{ "IsShadowWindow", (!IsPrimaryInstance && !IsGameBarWidget).ToString() },
{ "IsGameBarWidget", IsGameBarWidget.ToString() },
{ "AlwaysOpenNewWindow", AppSettingsService.AlwaysOpenNewWindow.ToString() },
{ "IsHighlightMisspelledWordsEnabled", AppSettingsService.IsHighlightMisspelledWordsEnabled.ToString() },
{ "IsSmartCopyEnabled", AppSettingsService.IsSmartCopyEnabled.ToString() },
{ "ExitWhenLastTabClosed", AppSettingsService.ExitWhenLastTabClosed.ToString() },
};
LoggingService.LogInfo($"[{nameof(App)}] Launch settings: \n{string.Join("\n", appLaunchSettings.Select(x => x.Key + "=" + x.Value).ToArray())}.");
AnalyticsService.TrackEvent("AppLaunch_Settings", appLaunchSettings);
var appLaunchEditorSettings = new Dictionary<string, string>()
{
{ "EditorDefaultLineEnding", AppSettingsService.EditorDefaultLineEnding.ToString() },
{ "EditorDefaultEncoding", EncodingUtility.GetEncodingName(AppSettingsService.EditorDefaultEncoding) },
{ "EditorDefaultTabIndents", AppSettingsService.EditorDefaultTabIndents.ToString() },
{ "EditorDefaultDecoding", AppSettingsService.EditorDefaultDecoding == null ? "Auto" : EncodingUtility.GetEncodingName(AppSettingsService.EditorDefaultDecoding) },
{ "EditorFontFamily", AppSettingsService.EditorFontFamily },
{ "EditorFontSize", AppSettingsService.EditorFontSize.ToString() },
{ "EditorFontStyle", AppSettingsService.EditorFontStyle.ToString() },
{ "EditorFontWeight", AppSettingsService.EditorFontWeight.Weight.ToString() },
{ "EditorDefaultSearchEngine", AppSettingsService.EditorDefaultSearchEngine.ToString() },
{ "DisplayLineHighlighter", AppSettingsService.EditorDisplayLineHighlighter.ToString() },
{ "DisplayLineNumbers", AppSettingsService.EditorDisplayLineNumbers.ToString() },
};
LoggingService.LogInfo($"[{nameof(App)}] Editor settings: \n{string.Join("\n", appLaunchEditorSettings.Select(x => x.Key + "=" + x.Value).ToArray())}.");
AnalyticsService.TrackEvent("AppLaunch_Editor_Settings", appLaunchEditorSettings);
try
{
await ActivationService.ActivateAsync(rootFrame, e);
}
catch (Exception ex)
{
var diagnosticInfo = new Dictionary<string, string>()
{
{ "Message", ex?.Message },
{ "Exception", ex?.ToString() },
};
AnalyticsService.TrackEvent("AppFailedToActivate", diagnosticInfo);
AnalyticsService.TrackError(ex, diagnosticInfo);
throw;
}
try
{
if (Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.ApplicationModel.Core.CoreApplication", "EnablePrelaunch"))
{
// Only enable prelaunch when AlwaysOpenNewWindow is set to false
CoreApplication.EnablePrelaunch(!AppSettingsService.AlwaysOpenNewWindow);
}
}
catch (Exception)
{
// Best efforts
}
if (rootFrameCreated)
{
ExtendViewIntoTitleBar();
Window.Current.Activate();
}
}
private Frame CreateRootFrame(IActivatedEventArgs e)
{
Frame rootFrame = new Frame();
var flowDirectionSetting = ResourceContext.GetForCurrentView().QualifierValues["LayoutDirection"];
if (flowDirectionSetting == "RTL" || flowDirectionSetting == "TTBRTL")
{
rootFrame.FlowDirection = FlowDirection.RightToLeft;
}
else
{
rootFrame.FlowDirection = FlowDirection.LeftToRight;
}
rootFrame.NavigationFailed += OnNavigationFailed;
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
// TODO: Load state from previously suspended application
}
return rootFrame;
}
/// <summary>
/// Invoked when Navigation to a certain page fails
/// </summary>
/// <param name="sender">The Frame which failed navigation</param>
/// <param name="e">Details about the navigation failure</param>
void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
{
var exception = new Exception($"[{nameof(App)}] Failed to load Page: {e.SourcePageType.FullName} Exception: {e.Exception.Message}");
LoggingService.LogException(exception);
AnalyticsService.TrackEvent("FailedToLoadPage", new Dictionary<string, string>()
{
{ "Page", e.SourcePageType.FullName },
{ "Exception", e.Exception.Message }
});
throw exception;
}
/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">The source of the suspend request.</param>
/// <param name="args">Details about the suspend request.</param>
private void OnSuspending(object sender, SuspendingEventArgs args)
{
var deferral = args.SuspendingOperation.GetDeferral();
try
{
// Here we flush the Clipboard again to make sure content in clipboard to remain available
// after the application shuts down.
Clipboard.Flush();
}
catch (Exception)
{
// Best efforts
}
finally
{
deferral.Complete();
}
}
// Occurs when an exception is not handled on the UI thread.
private static void OnUnhandledException(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e)
{
LoggingService.LogError($"[{nameof(App)}] OnUnhandledException: {e.Exception}");
var diagnosticInfo = new Dictionary<string, string>()
{
{ "Message", e.Message },
{ "Exception", e.Exception?.ToString() },
{ "Culture", SystemInformation.Instance.Culture.EnglishName },
{ "AvailableMemory", SystemInformation.Instance.AvailableMemory.ToString("F0") },
{ "FirstUseTimeUTC", SystemInformation.Instance.FirstUseTime.ToUniversalTime().ToString("MM/dd/yyyy HH:mm:ss") },
{ "OSArchitecture", SystemInformation.Instance.OperatingSystemArchitecture.ToString() },
{ "OSVersion", SystemInformation.Instance.OperatingSystemVersion.ToString() },
{ "IsShadowWindow", (!IsPrimaryInstance && !IsGameBarWidget).ToString() },
{ "IsGameBarWidget", IsGameBarWidget.ToString() }
};
AnalyticsService.TrackEvent("OnUnhandledException", diagnosticInfo);
AnalyticsService.TrackError(e.Exception, diagnosticInfo);
// suppress and handle it manually.
e.Handled = true;
}
// Occurs when an exception is not handled on a background thread.
// ie. A task is fired and forgotten Task.Run(() => {...})
private static void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
{
LoggingService.LogError($"[{nameof(App)}] OnUnobservedException: {e.Exception}");
var diagnosticInfo = new Dictionary<string, string>()
{
{ "Message", e.Exception?.Message },
{ "Exception", e.Exception?.ToString() },
{ "InnerException", e.Exception?.InnerException?.ToString() },
{ "InnerExceptionMessage", e.Exception?.InnerException?.Message }
};
AnalyticsService.TrackEvent("OnUnobservedException", diagnosticInfo);
AnalyticsService.TrackError(e.Exception, diagnosticInfo);
// suppress and handle it manually.
e.SetObserved();
}
private static void ExtendViewIntoTitleBar()
{
if (!IsGameBarWidget)
{
CoreApplication.GetCurrentView().TitleBar.ExtendViewIntoTitleBar = true;
ApplicationViewTitleBar titleBar = ApplicationView.GetForCurrentView().TitleBar;
titleBar.ButtonBackgroundColor = Colors.Transparent;
titleBar.ButtonInactiveBackgroundColor = Colors.Transparent;
}
}
//private static void UpdateAppVersion()
//{
// var packageVer = Package.Current.Id.Version;
// string oldVer = ApplicationSettingsStore.Read(SettingsKey.AppVersionStr) as string ?? "";
// string currentVer = $"{packageVer.Major}.{packageVer.Minor}.{packageVer.Build}.{packageVer.Revision}";
// if (currentVer != oldVer)
// {
// JumpListService.IsJumpListOutOfDate = true;
// ApplicationSettingsStore.Write(SettingsKey.AppVersionStr, currentVer);
// }
//}
//private static async Task UpdateJumpListAsync()
//{
// if (JumpListService.IsJumpListOutOfDate)
// {
// if (await JumpListService.UpdateJumpListAsync())
// {
// JumpListService.IsJumpListOutOfDate = false;
// }
// }
//}
}
}
================================================
FILE: src/Notepads/Brushes/HostBackdropAcrylicBrush.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Brushes
{
using System;
using System.Collections.Generic;
using System.Numerics;
using System.Threading;
using System.Threading.Tasks;
using Windows.Foundation;
using Windows.Graphics.DirectX;
using Windows.Graphics.Display;
using Windows.Graphics.Effects;
using Windows.Graphics.Imaging;
using Windows.System;
using Windows.System.Power;
using Windows.UI;
using Windows.UI.Composition;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Media;
using Microsoft.Graphics.Canvas;
using Microsoft.Graphics.Canvas.Effects;
using Microsoft.Graphics.Canvas.UI.Composition;
using Controls.Helpers;
using Notepads.Services;
public sealed class HostBackdropAcrylicBrush : XamlCompositionBrushBase, IDisposable
{
private static readonly DependencyProperty TintOpacityProperty = DependencyProperty.Register(
nameof(TintOpacity),
typeof(float),
typeof(HostBackdropAcrylicBrush),
new PropertyMetadata(0.0f, OnTintOpacityChanged)
);
public float TintOpacity
{
get => (float)GetValue(TintOpacityProperty);
set => SetValue(TintOpacityProperty, value);
}
private static void OnTintOpacityChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs args)
{
if (!(dependencyObject is HostBackdropAcrylicBrush brush)) return;
if (brush.CompositionBrush is CompositionEffectBrush)
{
TintOpacityToArithmeticCompositeEffectSourceAmount((float)args.NewValue,
_acrylicTintOpacityMinThreshold,
out var source1Amount,
out var source2Amount);
brush.CompositionBrush?.Properties.InsertScalar("LuminosityBlender.Source1Amount", source1Amount);
brush.CompositionBrush?.Properties.InsertScalar("LuminosityBlender.Source2Amount", source2Amount);
}
else if (brush.CompositionBrush is CompositionColorBrush)
{
// Do nothing since we are falling back to CompositionColorBrush here
// TintOpacity only applies to the CompositionEffectBrush we created
}
}
private static readonly DependencyProperty LuminosityColorProperty = DependencyProperty.Register(
nameof(LuminosityColor),
typeof(Color),
typeof(HostBackdropAcrylicBrush),
new PropertyMetadata(Colors.Transparent, OnLuminosityColorChanged)
);
public Color LuminosityColor
{
get => (Color)GetValue(LuminosityColorProperty);
set => SetValue(LuminosityColorProperty, value);
}
private static void OnLuminosityColorChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs args)
{
if (!(dependencyObject is HostBackdropAcrylicBrush brush)) return;
switch (brush.CompositionBrush)
{
case CompositionEffectBrush _
when brush.CompositionBrush?.Properties.TryGetColor("LuminosityColor.Color", out var currentColor)
== CompositionGetValueStatus.Succeeded:
{
var easing = Window.Current.Compositor.CreateLinearEasingFunction();
var animation = Window.Current.Compositor.CreateColorKeyFrameAnimation();
animation.InsertKeyFrame(0.0f, currentColor);
animation.InsertKeyFrame(1.0f, (Color)args.NewValue, easing);
animation.Duration = TimeSpan.FromMilliseconds(167);
brush.CompositionBrush.StartAnimation("LuminosityColor.Color", animation);
break;
}
case CompositionEffectBrush _:
brush.CompositionBrush?.Properties.InsertColor("LuminosityColor.Color", (Color)args.NewValue);
break;
case CompositionColorBrush colorBrush:
colorBrush.Color = (Color)args.NewValue;
break;
}
}
public Uri NoiseTextureUri { get; set; }
private readonly SemaphoreSlim _semaphoreSlim = new SemaphoreSlim(1);
private readonly UISettings UISettings = new UISettings();
private const float _acrylicTintOpacityMinThreshold = 0.35f;
private readonly DispatcherQueue _dispatcherQueue;
private CompositionSurfaceBrush _noiseBrush;
public HostBackdropAcrylicBrush()
{
_dispatcherQueue = DispatcherQueue.GetForCurrentThread();
}
protected override async void OnConnected()
{
if (CompositionBrush == null)
{
await BuildInternalAsync();
}
base.OnConnected();
}
private async Task BuildInternalAsync()
{
await _semaphoreSlim.WaitAsync();
try
{
if (PowerManager.EnergySaverStatus == EnergySaverStatus.On || !UISettings.AdvancedEffectsEnabled)
{
CompositionBrush = Window.Current.Compositor.CreateColorBrush(LuminosityColor);
}
else
{
CompositionBrush = await BuildHostBackdropAcrylicBrushInternalAsync();
}
// Register energy saver event
PowerManager.EnergySaverStatusChanged -= OnEnergySaverStatusChanged;
PowerManager.EnergySaverStatusChanged += OnEnergySaverStatusChanged;
// Register system level transparency effects settings change event
UISettings.AdvancedEffectsEnabledChanged -= OnAdvancedEffectsEnabledChanged;
UISettings.AdvancedEffectsEnabledChanged += OnAdvancedEffectsEnabledChanged;
}
catch (Exception)
{
// Fallback to color brush if unable to create HostBackdropAcrylicBrush
CompositionBrush = Window.Current.Compositor.CreateColorBrush(LuminosityColor);
}
finally
{
_semaphoreSlim.Release();
}
}
private async void OnEnergySaverStatusChanged(object sender, object e)
{
await _dispatcherQueue.ExecuteOnUIThreadAsync(async () =>
{
await BuildInternalAsync();
});
}
private async void OnAdvancedEffectsEnabledChanged(UISettings sender, object args)
{
await _dispatcherQueue.ExecuteOnUIThreadAsync(async () =>
{
await BuildInternalAsync();
});
}
protected override async void OnDisconnected()
{
await _semaphoreSlim.WaitAsync();
if (CompositionBrush != null)
{
PowerManager.EnergySaverStatusChanged -= OnEnergySaverStatusChanged;
UISettings.AdvancedEffectsEnabledChanged -= OnAdvancedEffectsEnabledChanged;
CompositionBrush.Dispose();
CompositionBrush = null;
}
_semaphoreSlim.Release();
base.OnDisconnected();
}
private async Task<CompositionBrush> BuildHostBackdropAcrylicBrushInternalAsync()
{
int stage = 0;
try
{
stage = 1;
var luminosityColorEffect = new ColorSourceEffect()
{
Name = "LuminosityColor",
Color = LuminosityColor
};
TintOpacityToArithmeticCompositeEffectSourceAmount(TintOpacity, _acrylicTintOpacityMinThreshold,
out var source1Amount,
out var source2Amount);
stage = 2;
var luminosityBlendingEffect = new ArithmeticCompositeEffect
{
Name = "LuminosityBlender",
Source1 = new CompositionEffectSourceParameter("Backdrop"),
Source2 = luminosityColorEffect,
MultiplyAmount = 0,
Source1Amount = source1Amount,
Source2Amount = source2Amount,
Offset = 0
};
stage = 3;
var noiseBorderEffect = new BorderEffect()
{
ExtendX = CanvasEdgeBehavior.Wrap,
ExtendY = CanvasEdgeBehavior.Wrap,
Source = new CompositionEffectSourceParameter("Noise"),
};
stage = 4;
var noiseBlendingEffect = new BlendEffect()
{
Name = "NoiseBlender",
Mode = BlendEffectMode.Overlay,
Background = luminosityBlendingEffect,
Foreground = noiseBorderEffect
};
stage = 5;
_noiseBrush = _noiseBrush ?? await LoadImageBrushAsync(NoiseTextureUri);
IGraphicsEffect finalEffect;
if (_noiseBrush == null)
{
finalEffect = luminosityBlendingEffect;
}
else
{
finalEffect = noiseBlendingEffect;
}
stage = 6;
CompositionEffectFactory effectFactory = Window.Current.Compositor.CreateEffectFactory(finalEffect,
new[]
{
"LuminosityColor.Color",
"LuminosityBlender.Source1Amount",
"LuminosityBlender.Source2Amount"
});
stage = 7;
CompositionEffectBrush brush = effectFactory.CreateBrush();
stage = 8;
var hostBackdropBrush = Window.Current.Compositor.CreateHostBackdropBrush();
brush.SetSourceParameter("Backdrop", hostBackdropBrush);
stage = 9;
if (_noiseBrush != null)
{
brush.SetSourceParameter("Noise", _noiseBrush);
}
return brush;
}
catch (Exception ex)
{
AnalyticsService.TrackEvent("FailedToBuildAcrylicBrushInternal",
new Dictionary<string, string>
{
{ "Exception", ex.ToString() },
{ "FailedAtStage", stage.ToString() },
});
throw; // rethrow here
}
}
private static async Task<CompositionSurfaceBrush> LoadImageBrushAsync(Uri textureUri)
{
try
{
using (CanvasDevice sharedDevice = CanvasDevice.GetSharedDevice())
{
DisplayInformation display = DisplayInformation.GetForCurrentView();
float dpi = display.LogicalDpi;
CanvasBitmap bitmap = await CanvasBitmap.LoadAsync(sharedDevice, textureUri, dpi >= 96 ? dpi : 96);
CompositionGraphicsDevice device = CanvasComposition.CreateCompositionGraphicsDevice(Window.Current.Compositor, sharedDevice);
CompositionDrawingSurface surface = device.CreateDrawingSurface(default, DirectXPixelFormat.B8G8R8A8UIntNormalized, DirectXAlphaMode.Premultiplied);
Size size = bitmap.Size;
Size sizeInPixels = new Size(bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height);
CanvasComposition.Resize(surface, sizeInPixels);
using (CanvasDrawingSession session = CanvasComposition.CreateDrawingSession(surface, new Rect(0, 0, sizeInPixels.Width, sizeInPixels.Height), dpi))
{
session.Clear(Color.FromArgb(0, 0, 0, 0));
session.DrawImage(bitmap, new Rect(0, 0, size.Width, size.Height), new Rect(0, 0, size.Width, size.Height));
session.EffectTileSize = new BitmapSize { Width = (uint)size.Width, Height = (uint)size.Height };
CompositionSurfaceBrush brush = surface.Compositor.CreateSurfaceBrush(surface);
brush.Stretch = CompositionStretch.None;
double pixels = display.RawPixelsPerViewPixel;
if (pixels > 1)
{
brush.Scale = new Vector2((float)(1 / pixels));
brush.BitmapInterpolationMode = CompositionBitmapInterpolationMode.NearestNeighbor;
}
return brush;
}
}
}
catch (Exception ex)
{
AnalyticsService.TrackEvent("FailedToLoadImageBrush", new Dictionary<string, string> { { "Exception", ex.ToString() } });
return null;
}
}
private static void TintOpacityToArithmeticCompositeEffectSourceAmount(float tintOpacity, float minThreshold,
out float source1Amount, out float source2Amount)
{
minThreshold = Math.Clamp(minThreshold, 0, 1);
var adjustedTintOpacity = Math.Clamp(tintOpacity, 0, 1);
adjustedTintOpacity = ((1 - minThreshold) * adjustedTintOpacity) + minThreshold;
source1Amount = 1 - adjustedTintOpacity;
source2Amount = adjustedTintOpacity;
}
public void Dispose()
{
PowerManager.EnergySaverStatusChanged -= OnEnergySaverStatusChanged;
UISettings.AdvancedEffectsEnabledChanged -= OnAdvancedEffectsEnabledChanged;
_semaphoreSlim?.Dispose();
}
}
}
================================================
FILE: src/Notepads/Commands/CommandHandlerResult.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
public class CommandHandlerResult
{
public CommandHandlerResult(bool shouldHandle, bool shouldSwallow)
{
ShouldHandle = shouldHandle;
ShouldSwallow = shouldSwallow;
}
/// <summary>
/// "ShouldHandle == true" means the keyboard command event should be handled after execution
/// Meaning you should set KeyRoutedEventArgs.Handled to true after execution
/// All child OnKeyDown event will not be received and should not be triggered if it is true
/// </summary>
public bool ShouldHandle { get; }
/// <summary>
/// "ShouldSwallow == true" means the keyboard command event should not go to it's children
/// Meaning you should not call base.OnKeyDown after execution
/// All parent OnKeyDown event will not be received and should not be triggered if it is true
/// </summary>
public bool ShouldSwallow { get; }
}
}
================================================
FILE: src/Notepads/Commands/ICommandHandler.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
public interface ICommandHandler<in T>
{
CommandHandlerResult Handle(T args);
}
}
================================================
FILE: src/Notepads/Commands/IKeyboardCommand.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
using Windows.System;
public interface IKeyboardCommand<T>
{
bool Hit(bool ctrlDown, bool altDown, bool shiftDown, VirtualKey key);
bool ShouldExecute(IKeyboardCommand<T> lastCommand);
bool ShouldHandleAfterExecution();
bool ShouldSwallowAfterExecution();
void Execute(T args);
}
}
================================================
FILE: src/Notepads/Commands/IMouseCommand.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
public interface IMouseCommand<in T>
{
bool Hit(
bool ctrlDown,
bool altDown,
bool shiftDown,
bool leftButtonDown,
bool middleButtonDown,
bool rightButtonDown);
bool ShouldHandleAfterExecution();
bool ShouldSwallowAfterExecution();
void Execute(T args);
}
}
================================================
FILE: src/Notepads/Commands/KeyboardCommand.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
using System;
using System.Collections.Generic;
using Windows.System;
public sealed class KeyboardCommand<T> : IKeyboardCommand<T>
{
private static readonly TimeSpan ConsecutiveHitsInterval = TimeSpan.FromMilliseconds(500);
private readonly bool _ctrl;
private readonly bool _alt;
private readonly bool _shift;
private readonly IList<VirtualKey> _keys;
private readonly Action<T> _action;
private readonly bool _shouldHandle;
private readonly bool _shouldSwallow;
private readonly int _requiredHits;
private int _hits;
private DateTime _lastHitTimestamp;
public KeyboardCommand(
VirtualKey key,
Action<T> action,
bool shouldHandle = true,
bool shouldSwallow = true) :
this(false, false, false, key, action, shouldHandle, shouldSwallow)
{
}
public KeyboardCommand(
bool ctrlDown,
bool altDown,
bool shiftDown,
VirtualKey key,
Action<T> action,
bool shouldHandle = true,
bool shouldSwallow = true,
int requiredHits = 1) :
this(ctrlDown, altDown, shiftDown, new List<VirtualKey>() { key }, action, shouldHandle, shouldSwallow, requiredHits)
{
}
public KeyboardCommand(
bool ctrlDown,
bool altDown,
bool shiftDown,
IList<VirtualKey> keys,
Action<T> action,
bool shouldHandle,
bool shouldSwallow,
int requiredHits = 1)
{
_ctrl = ctrlDown;
_alt = altDown;
_shift = shiftDown;
_keys = keys ?? new List<VirtualKey>();
_action = action;
_shouldHandle = shouldHandle;
_shouldSwallow = shouldSwallow;
_requiredHits = requiredHits;
_hits = 0;
_lastHitTimestamp = DateTime.MinValue;
}
public bool Hit(bool ctrlDown, bool altDown, bool shiftDown, VirtualKey key)
{
return _ctrl == ctrlDown && _alt == altDown && _shift == shiftDown && _keys.Contains(key);
}
public bool ShouldExecute(IKeyboardCommand<T> lastCommand)
{
DateTime now = DateTime.UtcNow;
if (lastCommand == this && now - _lastHitTimestamp < ConsecutiveHitsInterval)
{
_hits++;
}
else
{
_hits = 1;
}
_lastHitTimestamp = now;
if (_hits >= _requiredHits)
{
_hits = 0;
return true;
}
return false;
}
public bool ShouldHandleAfterExecution()
{
return _shouldHandle;
}
public bool ShouldSwallowAfterExecution()
{
return _shouldSwallow;
}
public void Execute(T args)
{
_action?.Invoke(args);
}
}
}
================================================
FILE: src/Notepads/Commands/KeyboardCommandHandler.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
using System.Collections.Generic;
using Windows.System;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Input;
public sealed class KeyboardCommandHandler : ICommandHandler<KeyRoutedEventArgs>
{
public readonly ICollection<IKeyboardCommand<KeyRoutedEventArgs>> Commands;
private IKeyboardCommand<KeyRoutedEventArgs> _lastCommand;
public KeyboardCommandHandler(ICollection<IKeyboardCommand<KeyRoutedEventArgs>> commands)
{
Commands = commands;
}
public CommandHandlerResult Handle(KeyRoutedEventArgs args)
{
var ctrlDown = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
var altDown = Window.Current.CoreWindow.GetKeyState(VirtualKey.Menu).HasFlag(CoreVirtualKeyStates.Down);
var shiftDown = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down);
var shouldHandle = false;
var shouldSwallow = false;
foreach (var command in Commands)
{
if (command.Hit(ctrlDown, altDown, shiftDown, args.Key))
{
if (command.ShouldExecute(_lastCommand))
{
command.Execute(args);
}
if (command.ShouldSwallowAfterExecution())
{
shouldSwallow = true;
}
if (command.ShouldHandleAfterExecution())
{
shouldHandle = true;
}
_lastCommand = command;
break;
}
}
if (!shouldHandle)
{
_lastCommand = null;
}
return new CommandHandlerResult(shouldHandle, shouldSwallow);
}
}
}
================================================
FILE: src/Notepads/Commands/MouseCommand.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
using System;
public sealed class MouseCommand<T> : IMouseCommand<T>
{
private readonly bool _ctrl;
private readonly bool _alt;
private readonly bool _shift;
private readonly bool _leftButton;
private readonly bool _middleButton;
private readonly bool _rightButton;
private readonly Action<T> _action;
private readonly bool _shouldHandle;
private readonly bool _shouldSwallow;
public MouseCommand(
bool leftButtonDown,
bool middleButtonDown,
bool rightButtonDown,
Action<T> action,
bool shouldHandle = true,
bool shouldSwallow = true) :
this(false, false, false, leftButtonDown, middleButtonDown, rightButtonDown, action, shouldHandle, shouldSwallow)
{
}
public MouseCommand(
bool ctrlDown,
bool altDown,
bool shiftDown,
bool leftButtonDown,
bool middleButtonDown,
bool rightButtonDown,
Action<T> action,
bool shouldHandle = true,
bool shouldSwallow = true)
{
_ctrl = ctrlDown;
_alt = altDown;
_shift = shiftDown;
_leftButton = leftButtonDown;
_middleButton = middleButtonDown;
_rightButton = rightButtonDown;
_action = action;
_shouldHandle = shouldHandle;
_shouldSwallow = shouldSwallow;
}
public bool Hit(
bool ctrlDown,
bool altDown,
bool shiftDown,
bool leftButtonDown,
bool middleButtonDown,
bool rightButtonDown)
{
return _ctrl == ctrlDown &&
_alt == altDown &&
_shift == shiftDown &&
_leftButton == leftButtonDown &&
_middleButton == middleButtonDown &&
_rightButton == rightButtonDown;
}
public bool ShouldHandleAfterExecution()
{
return _shouldHandle;
}
public bool ShouldSwallowAfterExecution()
{
return _shouldSwallow;
}
public void Execute(T args)
{
_action?.Invoke(args);
}
}
}
================================================
FILE: src/Notepads/Commands/MouseCommandHandler.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Commands
{
using System.Collections.Generic;
using Windows.System;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Input;
public sealed class MouseCommandHandler : ICommandHandler<PointerRoutedEventArgs>
{
public readonly ICollection<IMouseCommand<PointerRoutedEventArgs>> Commands;
private readonly UIElement _relativeTo;
public MouseCommandHandler(ICollection<IMouseCommand<PointerRoutedEventArgs>> commands, UIElement relativeTo)
{
Commands = commands;
_relativeTo = relativeTo;
}
public CommandHandlerResult Handle(PointerRoutedEventArgs args)
{
var ctrlDown = Window.Current.CoreWindow.GetKeyState(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down);
var altDown = Window.Current.CoreWindow.GetKeyState(VirtualKey.Menu).HasFlag(CoreVirtualKeyStates.Down);
var shiftDown = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down);
var point = args.GetCurrentPoint(_relativeTo).Properties;
var shouldHandle = false;
var shouldSwallow = false;
foreach (var command in Commands)
{
if (command.Hit(
ctrlDown,
altDown,
shiftDown,
point.IsLeftButtonPressed,
point.IsMiddleButtonPressed,
point.IsRightButtonPressed))
{
command.Execute(args);
if (command.ShouldSwallowAfterExecution())
{
shouldSwallow = true;
}
if (command.ShouldHandleAfterExecution())
{
shouldHandle = true;
}
break;
}
}
return new CommandHandlerResult(shouldHandle, shouldSwallow);
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/AppCloseSaveReminderDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
using System;
using Windows.UI;
using Windows.UI.Xaml;
public sealed class AppCloseSaveReminderDialog : NotepadsDialog
{
public AppCloseSaveReminderDialog(Action saveAndExitAction, Action discardAndExitAction, Action cancelAction)
{
Title = ResourceLoader.GetString("AppCloseSaveReminderDialog_Title");
HorizontalAlignment = HorizontalAlignment.Center;
Content = ResourceLoader.GetString("AppCloseSaveReminderDialog_Content");
PrimaryButtonText = ResourceLoader.GetString("AppCloseSaveReminderDialog_PrimaryButtonText");
SecondaryButtonText = ResourceLoader.GetString("AppCloseSaveReminderDialog_SecondaryButtonText");
CloseButtonText = ResourceLoader.GetString("AppCloseSaveReminderDialog_CloseButtonText");
PrimaryButtonStyle = GetButtonStyle(Color.FromArgb(255, 38, 114, 201));
PrimaryButtonClick += (dialog, eventArgs) => saveAndExitAction();
SecondaryButtonClick += (dialog, eventArgs) => discardAndExitAction();
CloseButtonClick += (dialog, eventArgs) => cancelAction();
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/FileOpenErrorDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
public sealed class FileOpenErrorDialog : NotepadsDialog
{
public FileOpenErrorDialog(string filePath, string errorMsg)
{
Title = ResourceLoader.GetString("FileOpenErrorDialog_Title");
Content = string.IsNullOrEmpty(filePath) ? errorMsg : string.Format(ResourceLoader.GetString("FileOpenErrorDialog_Content"), filePath, errorMsg);
PrimaryButtonText = ResourceLoader.GetString("FileOpenErrorDialog_PrimaryButtonText");
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/FileRenameDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
using System;
using System.Collections.Generic;
using Windows.System;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Notepads.Services;
using Notepads.Utilities;
public sealed class FileRenameDialog : NotepadsDialog
{
private readonly TextBox _fileNameTextBox;
private readonly TextBlock _errorMessageTextBlock;
private readonly Action<string> _confirmedAction;
private readonly string _originalFilename;
private readonly bool _fileExists;
public FileRenameDialog(string filename, bool fileExists, Action<string> confirmedAction)
{
_originalFilename = filename;
_fileExists = fileExists;
_confirmedAction = confirmedAction;
_fileNameTextBox = new TextBox
{
Style = (Style)Application.Current.Resources["TransparentTextBoxStyle"],
Text = filename,
IsSpellCheckEnabled = false,
AcceptsReturn = false,
SelectionStart = 0,
SelectionLength = filename.Contains(".") ? filename.LastIndexOf(".", StringComparison.Ordinal) : filename.Length,
Height = 35,
};
_errorMessageTextBlock = new TextBlock()
{
Visibility = Visibility.Collapsed,
Margin = new Thickness(4, 10, 4, 0),
FontSize = Math.Clamp(_fileNameTextBox.FontSize - 2, 1, Double.PositiveInfinity),
TextWrapping = TextWrapping.Wrap
};
var contentStack = new StackPanel();
contentStack.Children.Add(_fileNameTextBox);
contentStack.Children.Add(_errorMessageTextBlock);
Title = ResourceLoader.GetString("FileRenameDialog_Title");
Content = contentStack;
PrimaryButtonText = ResourceLoader.GetString("FileRenameDialog_PrimaryButtonText");
CloseButtonText = ResourceLoader.GetString("FileRenameDialog_CloseButtonText");
IsPrimaryButtonEnabled = false;
_fileNameTextBox.TextChanging += OnTextChanging;
_fileNameTextBox.KeyDown += OnKeyDown;
PrimaryButtonClick += (sender, args) => TryRename();
AnalyticsService.TrackEvent("FileRenameDialogOpened", new Dictionary<string, string>()
{
{ "FileExists", fileExists.ToString() },
});
}
private bool TryRename()
{
var newFileName = _fileNameTextBox.Text;
if (string.Compare(_originalFilename, newFileName, StringComparison.OrdinalIgnoreCase) == 0)
{
return false;
}
if (!FileSystemUtility.IsFilenameValid(newFileName, out var error))
{
return false;
}
if (_fileExists && !FileExtensionProvider.IsFileExtensionSupported(FileTypeUtility.GetFileExtension(newFileName)))
{
return false;
}
_confirmedAction(newFileName.Trim());
return true;
}
private void OnKeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Enter)
{
if (TryRename())
{
Hide();
}
}
}
private void OnTextChanging(TextBox sender, TextBoxTextChangingEventArgs args)
{
if (!args.IsContentChanging) return;
var newFilename = sender.Text;
var isFilenameValid = FileSystemUtility.IsFilenameValid(newFilename, out var error);
var nameChanged = string.Compare(_originalFilename, newFilename, StringComparison.OrdinalIgnoreCase) != 0;
var isExtensionSupported = false;
var fileExtension = FileTypeUtility.GetFileExtension(newFilename);
if (!_fileExists) // User can rename whatever they want for new file
{
isExtensionSupported = true;
}
else if (FileExtensionProvider.IsFileExtensionSupported(fileExtension))
{
// User can only rename an existing file if extension is supported by the app
// This is a Windows 10 UWP limitation
isExtensionSupported = true;
}
if (!isFilenameValid)
{
_errorMessageTextBlock.Foreground = new SolidColorBrush(Colors.Red);
_errorMessageTextBlock.Text = ResourceLoader.GetString($"InvalidFilenameError_{error}");
_errorMessageTextBlock.Visibility = Visibility.Visible;
}
else if (!isExtensionSupported)
{
_errorMessageTextBlock.Foreground = new SolidColorBrush(Colors.OrangeRed);
_errorMessageTextBlock.Text = string.IsNullOrEmpty(fileExtension)
? string.Format(ResourceLoader.GetString("FileRenameError_EmptyFileExtension"))
: string.Format(ResourceLoader.GetString("FileRenameError_UnsupportedFileExtension"), fileExtension);
_errorMessageTextBlock.Visibility = Visibility.Visible;
}
else
{
_errorMessageTextBlock.Visibility = Visibility.Collapsed;
}
IsPrimaryButtonEnabled = isFilenameValid && nameChanged && isExtensionSupported;
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/FileSaveErrorDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
public sealed class FileSaveErrorDialog : NotepadsDialog
{
public FileSaveErrorDialog(string filePath, string errorMsg)
{
var content = string.IsNullOrEmpty(filePath) ? errorMsg : string.Format(ResourceLoader.GetString("FileSaveErrorDialog_Content"), filePath, errorMsg);
Title = ResourceLoader.GetString("FileSaveErrorDialog_Title");
Content = content;
PrimaryButtonText = ResourceLoader.GetString("FileSaveErrorDialog_PrimaryButtonText");
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/NotepadsDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
using Windows.ApplicationModel.Resources;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media;
using Notepads.Services;
using Microsoft.Toolkit.Uwp.Helpers;
public class NotepadsDialog : ContentDialog
{
public bool IsAborted = false;
private readonly SolidColorBrush _darkModeBackgroundBrush = new SolidColorBrush("#101010".ToColor());
private readonly SolidColorBrush _lightModeBackgroundBrush = new SolidColorBrush(Colors.White);
public NotepadsDialog()
{
RequestedTheme = ThemeSettingsService.ThemeMode;
Background = ThemeSettingsService.ThemeMode == ElementTheme.Dark
? _darkModeBackgroundBrush
: _lightModeBackgroundBrush;
ActualThemeChanged += NotepadsDialog_ActualThemeChanged;
}
private void NotepadsDialog_ActualThemeChanged(FrameworkElement sender, object args)
{
Background = ActualTheme == ElementTheme.Dark
? _darkModeBackgroundBrush
: _lightModeBackgroundBrush;
}
internal readonly ResourceLoader ResourceLoader = ResourceLoader.GetForCurrentView();
internal static Style GetButtonStyle(Color backgroundColor)
{
var buttonStyle = new Windows.UI.Xaml.Style(typeof(Button));
buttonStyle.Setters.Add(new Setter(Control.BackgroundProperty, backgroundColor));
buttonStyle.Setters.Add(new Setter(Control.ForegroundProperty, Colors.White));
return buttonStyle;
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/RevertAllChangesConfirmationDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
using System;
public sealed class RevertAllChangesConfirmationDialog : NotepadsDialog
{
public RevertAllChangesConfirmationDialog(string fileNameOrPath, Action confirmedAction)
{
Title = ResourceLoader.GetString("RevertAllChangesConfirmationDialog_Title");
Content = string.Format(ResourceLoader.GetString("RevertAllChangesConfirmationDialog_Content"), fileNameOrPath);
PrimaryButtonText = ResourceLoader.GetString("RevertAllChangesConfirmationDialog_PrimaryButtonText");
CloseButtonText = ResourceLoader.GetString("RevertAllChangesConfirmationDialog_CloseButtonText");
PrimaryButtonClick += (dialog, args) => { confirmedAction(); };
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/SessionCorruptionErrorDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
using System;
using Windows.UI;
public sealed class SessionCorruptionErrorDialog : NotepadsDialog
{
public SessionCorruptionErrorDialog(Action recoveryAction)
{
Title = ResourceLoader.GetString("SessionCorruptionErrorDialog_Title");
Content = ResourceLoader.GetString("SessionCorruptionErrorDialog_Content");
PrimaryButtonText = ResourceLoader.GetString("SessionCorruptionErrorDialog_PrimaryButtonText");
CloseButtonText = ResourceLoader.GetString("SessionCorruptionErrorDialog_CloseButtonText");
PrimaryButtonStyle = GetButtonStyle(Color.FromArgb(255, 255, 69, 0));
PrimaryButtonClick += (dialog, args) => { recoveryAction(); };
}
}
}
================================================
FILE: src/Notepads/Controls/Dialog/SetCloseSaveReminderDialog.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.Dialog
{
using System;
public sealed class SetCloseSaveReminderDialog : NotepadsDialog
{
public SetCloseSaveReminderDialog(string fileNameOrPath, Action saveAction, Action skipSavingAction)
{
Title = ResourceLoader.GetString("SetCloseSaveReminderDialog_Title");
Content = string.Format(ResourceLoader.GetString("SetCloseSaveReminderDialog_Content"), fileNameOrPath);
PrimaryButtonText = ResourceLoader.GetString("SetCloseSaveReminderDialog_PrimaryButtonText");
SecondaryButtonText = ResourceLoader.GetString("SetCloseSaveReminderDialog_SecondaryButtonText");
CloseButtonText = ResourceLoader.GetString("SetCloseSaveReminderDialog_CloseButtonText");
PrimaryButtonClick += (dialog, args) => { saveAction(); };
SecondaryButtonClick += (dialog, args) => { skipSavingAction(); };
}
}
}
================================================
FILE: src/Notepads/Controls/DiffViewer/BrushFactory.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.DiffViewer
{
using System.Collections.Generic;
using Windows.UI;
using Windows.UI.Xaml.Media;
public sealed class BrushFactory
{
private readonly Dictionary<Color, SolidColorBrush> _brushes = new Dictionary<Color, SolidColorBrush>();
public SolidColorBrush GetOrCreateSolidColorBrush(Color color)
{
if (_brushes.TryGetValue(color, out var brush))
{
return brush;
}
_brushes[color] = new SolidColorBrush(color);
return _brushes[color];
}
}
}
================================================
FILE: src/Notepads/Controls/DiffViewer/ISideBySideDiffViewer.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.DiffViewer
{
using Windows.UI.Xaml;
public interface ISideBySideDiffViewer
{
void RenderDiff(string left, string right, ElementTheme theme);
}
}
================================================
FILE: src/Notepads/Controls/DiffViewer/RichTextBlockDiffContext.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.DiffViewer
{
using System.Collections.Generic;
using System.Linq;
using Windows.UI;
using Windows.UI.Xaml.Documents;
public class RichTextBlockDiffContext
{
private bool _hasPendingHighlighter;
private int _lastStart;
private int _lastEnd;
private Color _lastHighlightColor;
private readonly BrushFactory _brushFactory;
private readonly Dictionary<Color, TextHighlighter> _textHighlighters = new Dictionary<Color, TextHighlighter>();
public RichTextBlockDiffContext(BrushFactory brushFactory)
{
Blocks = new List<Block>();
_brushFactory = brushFactory;
}
public IList<Block> Blocks { get; set; }
public void QueuePendingHighlighter(TextRange textRange, Color backgroundColor)
{
_lastStart = textRange.StartIndex;
_lastEnd = _lastStart + textRange.Length;
_lastHighlightColor = backgroundColor;
_hasPendingHighlighter = true;
}
public void AddTextHighlighter(TextRange textRange, Color backgroundColor)
{
if (!_hasPendingHighlighter)
{
QueuePendingHighlighter(textRange, backgroundColor);
}
else
{
if (_lastEnd == textRange.StartIndex && _lastHighlightColor == backgroundColor)
{
_lastEnd += textRange.Length;
}
else
{
TextRange range = new TextRange() { StartIndex = _lastStart, Length = _lastEnd - _lastStart };
AddOrUpdateTextHighlighterInternal(_lastHighlightColor, range);
QueuePendingHighlighter(textRange, backgroundColor);
}
}
}
public IList<TextHighlighter> GetTextHighlighters()
{
if (_hasPendingHighlighter)
{
TextRange range = new TextRange() { StartIndex = _lastStart, Length = _lastEnd - _lastStart };
AddOrUpdateTextHighlighterInternal(_lastHighlightColor, range);
_hasPendingHighlighter = false;
}
return _textHighlighters.Values.ToList();
}
private void AddOrUpdateTextHighlighterInternal(Color backgroundColor, TextRange range)
{
if (_textHighlighters.ContainsKey(backgroundColor))
{
_textHighlighters[backgroundColor].Ranges.Add(range);
}
else
{
_textHighlighters[backgroundColor] = new TextHighlighter()
{
Background = _brushFactory.GetOrCreateSolidColorBrush(backgroundColor),
Ranges = { range }
};
}
}
}
}
================================================
FILE: src/Notepads/Controls/DiffViewer/RichTextBlockDiffRenderer.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.DiffViewer
{
using System;
using System.Collections.Generic;
using System.Linq;
using DiffPlex;
using DiffPlex.DiffBuilder;
using DiffPlex.DiffBuilder.Model;
using Windows.UI;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Documents;
using Windows.UI.Xaml.Media;
public sealed class RichTextBlockDiffRenderer
{
//private const char ImaginaryLineCharacter = '\u202B';
private readonly SideBySideDiffBuilder differ;
private readonly object mutex = new object();
private bool inDiff;
private readonly BrushFactory _brushFactory;
public RichTextBlockDiffRenderer()
{
differ = new SideBySideDiffBuilder(new Differ());
_brushFactory = new BrushFactory();
}
private const char BreakingSpace = '-';
private Brush _defaultForeground;
public Tuple<RichTextBlockDiffContext, RichTextBlockDiffContext> GenerateDiffViewData(string leftText, string rightText, Brush defaultForeground)
{
if (inDiff) return null;
lock (mutex)
{
if (inDiff) return null;
inDiff = true;
}
_defaultForeground = defaultForeground;
var diff = differ.BuildDiffModel(leftText, rightText, ignoreWhitespace: false);
var zippedDiffs = diff.OldText.Lines.Zip(diff.NewText.Lines, (oldLine, newLine) => new OldNew<DiffPiece> { Old = oldLine, New = newLine }).ToList();
var leftContext = RenderDiff(zippedDiffs, line => line.Old, piece => piece.Old);
var rightContext = RenderDiff(zippedDiffs, line => line.New, piece => piece.New);
inDiff = false;
return new Tuple<RichTextBlockDiffContext, RichTextBlockDiffContext>(leftContext, rightContext);
}
private RichTextBlockDiffContext RenderDiff(System.Collections.Generic.List<OldNew<DiffPiece>> lines, Func<OldNew<DiffPiece>, DiffPiece> lineSelector, Func<OldNew<DiffPiece>, DiffPiece> pieceSelector)
{
var context = new RichTextBlockDiffContext(_brushFactory);
int index = 0;
foreach (var line in lines)
{
var lineLength = Math.Max(line.Old.Text?.Length ?? 0, line.New.Text?.Length ?? 0);
var lineSubPieces = line.Old.SubPieces.Zip(line.New.SubPieces, (oldPiece, newPiece) => new OldNew<DiffPiece> { Old = oldPiece, New = newPiece, Length = Math.Max(oldPiece.Text?.Length ?? 0, newPiece.Text?.Length ?? 0) });
var oldNewLine = lineSelector(line);
switch (oldNewLine.Type)
{
case ChangeType.Unchanged:
AppendParagraph(context, oldNewLine.Text ?? string.Empty, ref index, null);
break;
case ChangeType.Imaginary:
AppendParagraph(context, new string(BreakingSpace, lineLength), ref index, Colors.Gray, Colors.LightCyan);
break;
case ChangeType.Inserted:
AppendParagraph(context, oldNewLine.Text ?? string.Empty, ref index, Colors.LightGreen);
break;
case ChangeType.Deleted:
AppendParagraph(context, oldNewLine.Text ?? string.Empty, ref index, Colors.OrangeRed);
break;
case ChangeType.Modified:
context.Blocks.Add(ConstructModifiedParagraph(pieceSelector, lineSubPieces, context, ref index));
break;
}
}
return context;
}
private Paragraph ConstructModifiedParagraph(Func<OldNew<DiffPiece>, DiffPiece> pieceSelector, IEnumerable<OldNew<DiffPiece>> lineSubPieces, RichTextBlockDiffContext context, ref int index)
{
var paragraph = new Paragraph()
{
LineStackingStrategy = LineStackingStrategy.BlockLineHeight,
Foreground = _defaultForeground,
};
paragraph.LineHeight = paragraph.FontSize + 6;
foreach (var subPiece in lineSubPieces)
{
var oldNewPiece = pieceSelector(subPiece);
switch (oldNewPiece.Type)
{
case ChangeType.Unchanged: paragraph.Inlines.Add(NewRun(context, oldNewPiece.Text ?? string.Empty, ref index, Colors.Yellow)); break;
case ChangeType.Imaginary: paragraph.Inlines.Add(NewRun(context, oldNewPiece.Text ?? string.Empty, ref index)); break;
case ChangeType.Inserted: paragraph.Inlines.Add(NewRun(context, oldNewPiece.Text ?? string.Empty, ref index, Colors.LightGreen)); break;
case ChangeType.Deleted: paragraph.Inlines.Add(NewRun(context, oldNewPiece.Text ?? string.Empty, ref index, Colors.OrangeRed)); break;
case ChangeType.Modified: paragraph.Inlines.Add(NewRun(context, oldNewPiece.Text ?? string.Empty, ref index, Colors.Yellow)); break;
}
paragraph.Inlines.Add(NewRun(context, new string(BreakingSpace, subPiece.Length - (oldNewPiece.Text ?? string.Empty).Length), ref index, Colors.Gray, Colors.LightCyan));
}
return paragraph;
}
private Inline NewRun(RichTextBlockDiffContext richTextBlockData, string text, ref int index, Color? background = null, Color? foreground = null)
{
var run = new Run
{
Text = text,
Foreground = foreground.HasValue
? _brushFactory.GetOrCreateSolidColorBrush(foreground.Value)
: _defaultForeground
};
if (background != null)
{
richTextBlockData.AddTextHighlighter(new TextRange() { StartIndex = index, Length = text.Length }, background.Value);
}
index += text.Length;
return run;
}
private void AppendParagraph(RichTextBlockDiffContext richTextBlockData, string text, ref int index, Color? background = null, Color? foreground = null)
{
var paragraph = new Paragraph
{
LineStackingStrategy = LineStackingStrategy.BlockLineHeight,
Foreground = foreground.HasValue
? _brushFactory.GetOrCreateSolidColorBrush(foreground.Value)
: _defaultForeground,
};
paragraph.LineHeight = paragraph.FontSize + 6;
var run = new Run { Text = text };
paragraph.Inlines.Add(run);
richTextBlockData.Blocks.Add(paragraph);
if (background != null)
{
richTextBlockData.AddTextHighlighter(new TextRange() { StartIndex = index, Length = text.Length }, background.Value);
}
index += text.Length;
}
private class OldNew<T>
{
public T Old { get; set; }
public T New { get; set; }
public int Length { get; set; }
}
}
}
================================================
FILE: src/Notepads/Controls/DiffViewer/ScrollViewerSynchronizer.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.DiffViewer
{
using System;
using System.Collections.Generic;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Media;
public sealed class ScrollViewerSynchronizer : IDisposable
{
private readonly List<ScrollViewer> _scrollViewers;
private readonly Dictionary<ScrollBar, ScrollViewer> _horizontalScrollBars = new Dictionary<ScrollBar, ScrollViewer>();
private readonly Dictionary<ScrollBar, ScrollViewer> _verticalScrollBars = new Dictionary<ScrollBar, ScrollViewer>();
private double _verticalScrollOffset = .0f;
private double _horizontalScrollOffset = .0f;
public ScrollViewerSynchronizer(List<ScrollViewer> scrollViewers)
{
_scrollViewers = scrollViewers;
scrollViewers.ForEach(scrollViewer => scrollViewer.Loaded += ScrollViewerLoaded);
scrollViewers.ForEach(scrollViewer => scrollViewer.Unloaded += ScrollViewerUnloaded);
}
private void ScrollViewerLoaded(object sender, RoutedEventArgs e)
{
if (!(sender is ScrollViewer scrollViewer)) return;
scrollViewer.ChangeView(_horizontalScrollOffset, _verticalScrollOffset, null, true);
scrollViewer.ApplyTemplate();
var scrollViewerRoot = (FrameworkElement)VisualTreeHelper.GetChild(scrollViewer, 0);
var horizontalScrollBar = (ScrollBar)scrollViewerRoot.FindName("HorizontalScrollBar");
var verticalScrollBar = (ScrollBar)scrollViewerRoot.FindName("VerticalScrollBar");
if (horizontalScrollBar != null)
{
if (!_horizontalScrollBars.Keys.Contains(horizontalScrollBar))
{
_horizontalScrollBars.Add(horizontalScrollBar, scrollViewer);
}
horizontalScrollBar.Scroll += HorizontalScrollBar_Scroll;
horizontalScrollBar.ValueChanged += HorizontalScrollBar_ValueChanged;
}
if (verticalScrollBar != null)
{
if (!_verticalScrollBars.Keys.Contains(verticalScrollBar))
{
_verticalScrollBars.Add(verticalScrollBar, scrollViewer);
}
verticalScrollBar.Scroll += VerticalScrollBar_Scroll;
verticalScrollBar.ValueChanged += VerticalScrollBar_ValueChanged;
}
}
private void ScrollViewerUnloaded(object sender, RoutedEventArgs e)
{
if (!(sender is ScrollViewer scrollViewer)) return;
scrollViewer.ApplyTemplate();
var scrollViewerRoot = (FrameworkElement)VisualTreeHelper.GetChild(scrollViewer, 0);
var horizontalScrollBar = (ScrollBar)scrollViewerRoot.FindName("HorizontalScrollBar");
var verticalScrollBar = (ScrollBar)scrollViewerRoot.FindName("VerticalScrollBar");
if (horizontalScrollBar != null)
{
horizontalScrollBar.Scroll -= HorizontalScrollBar_Scroll;
horizontalScrollBar.ValueChanged -= HorizontalScrollBar_ValueChanged;
if (_horizontalScrollBars.Keys.Contains(horizontalScrollBar))
{
_horizontalScrollBars.Remove(horizontalScrollBar);
}
}
if (verticalScrollBar != null)
{
verticalScrollBar.Scroll -= VerticalScrollBar_Scroll;
verticalScrollBar.ValueChanged -= VerticalScrollBar_ValueChanged;
if (_verticalScrollBars.Keys.Contains(verticalScrollBar))
{
_verticalScrollBars.Remove(verticalScrollBar);
}
}
}
private void VerticalScrollBar_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (!(sender is ScrollBar changedScrollBar)) return;
var changedScrollViewer = _verticalScrollBars[changedScrollBar];
Scroll(changedScrollViewer);
}
private void VerticalScrollBar_Scroll(object sender, ScrollEventArgs e)
{
if (!(sender is ScrollBar changedScrollBar)) return;
var changedScrollViewer = _verticalScrollBars[changedScrollBar];
Scroll(changedScrollViewer);
}
private void HorizontalScrollBar_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (!(sender is ScrollBar changedScrollBar)) return;
var changedScrollViewer = _horizontalScrollBars[changedScrollBar];
Scroll(changedScrollViewer);
}
private void HorizontalScrollBar_Scroll(object sender, ScrollEventArgs e)
{
if (!(sender is ScrollBar changedScrollBar)) return;
var changedScrollViewer = _horizontalScrollBars[changedScrollBar];
Scroll(changedScrollViewer);
}
private void Scroll(ScrollViewer changedScrollViewer)
{
_verticalScrollOffset = changedScrollViewer.VerticalOffset;
_horizontalScrollOffset = changedScrollViewer.HorizontalOffset;
foreach (var scrollViewer in _scrollViewers.Where(s => s != changedScrollViewer))
{
if (Math.Abs(scrollViewer.VerticalOffset - changedScrollViewer.VerticalOffset) > 0.01)
{
scrollViewer.ChangeView(null, changedScrollViewer.VerticalOffset, null, true);
}
if (Math.Abs(scrollViewer.HorizontalOffset - changedScrollViewer.HorizontalOffset) > 0.01)
{
scrollViewer.ChangeView(changedScrollViewer.HorizontalOffset, null, null, true);
}
}
}
public void Dispose()
{
var horizontalScrollBars = new List<ScrollBar>(_horizontalScrollBars.Keys);
horizontalScrollBars.ForEach(horizontalScrollBar =>
{
horizontalScrollBar.Scroll -= HorizontalScrollBar_Scroll;
horizontalScrollBar.ValueChanged -= HorizontalScrollBar_ValueChanged;
});
horizontalScrollBars.Clear();
var verticalScrollBars = new List<ScrollBar>(_verticalScrollBars.Keys);
verticalScrollBars.ForEach(verticalScrollBar =>
{
verticalScrollBar.Scroll -= VerticalScrollBar_Scroll;
verticalScrollBar.ValueChanged -= VerticalScrollBar_ValueChanged;
});
verticalScrollBars.Clear();
_horizontalScrollBars.Clear();
_verticalScrollBars.Clear();
_scrollViewers?.ForEach(scrollViewer => scrollViewer.Loaded -= ScrollViewerLoaded);
_scrollViewers?.ForEach(scrollViewer => scrollViewer.Unloaded -= ScrollViewerUnloaded);
_scrollViewers?.Clear();
}
}
}
================================================
FILE: src/Notepads/Controls/DiffViewer/SideBySideDiffViewer.xaml
================================================
<UserControl
x:Class="Notepads.Controls.DiffViewer.SideBySideDiffViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource SystemControlForegroundTransparentBrush}">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<SolidColorBrush x:Key="RightBoxBackgroundThemeBrush"
Opacity="0.25"
Color="White"/>
<SolidColorBrush x:Key="HeaderBackgroundThemeBrush"
Opacity="0.35"
Color="LightGray"/>
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
<SolidColorBrush x:Key="RightBoxBackgroundThemeBrush"
Opacity="0.15"
Color="Black"/>
<SolidColorBrush x:Key="HeaderBackgroundThemeBrush"
Opacity="0.2"
Color="Black"/>
</ResourceDictionary>
<ResourceDictionary x:Key="HighContrast">
<SolidColorBrush x:Key="RightBoxBackgroundThemeBrush"
Color="{ThemeResource SystemColorHighlightColor}"/>
<SolidColorBrush x:Key="HeaderBackgroundThemeBrush"
Color="{ThemeResource SystemColorHighlightColor}"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Row="0" Background="{ThemeResource HeaderBackgroundThemeBrush}">
<TextBlock Grid.Row="0"
x:Uid="DiffViewer_Header_OldTextTittle"
FontStyle="Italic"
HorizontalAlignment="Center"
VerticalAlignment="Center">
</TextBlock>
<Button x:Name="DismissButton"
VerticalAlignment="Center"
HorizontalAlignment="Left"
IsTabStop="False"
Padding="0"
Height="25"
Width="32"
FontSize="12"
Style="{StaticResource DismissButtonStyle}"
Content=""
FontFamily="Segoe MDL2 Assets">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="Escape"/>
</Button.KeyboardAccelerators>
</Button>
</Grid>
<ScrollViewer Name="LeftScroller"
Grid.Row="1"
IsTabStop="False"
Padding="6, 0, 8, 6"
HorizontalScrollBarVisibility="Hidden"
VerticalScrollBarVisibility="Hidden">
<Border Name="LeftTextBlockBorder" Background="Transparent">
<RichTextBlock Name="LeftTextBlock"
FontFamily="Consolas"/>
</Border>
</ScrollViewer>
</Grid>
<Grid Column="1" Background="{ThemeResource RightBoxBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Row="0" Background="{ThemeResource HeaderBackgroundThemeBrush}">
<TextBlock Grid.Row="0"
x:Uid="DiffViewer_Header_NewTextTittle"
FontStyle="Italic"
HorizontalAlignment="Center"
VerticalAlignment="Center">
</TextBlock>
</Grid>
<ScrollViewer Name="RightScroller"
Grid.Row="1"
IsTabStop="False"
Padding="6, 0, 8, 6"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<Border Name="RightTextBlockBorder" Background="Transparent">
<RichTextBlock Name="RightTextBlock"
FontFamily="Consolas"/>
</Border>
</ScrollViewer>
</Grid>
</Grid>
</UserControl>
================================================
FILE: src/Notepads/Controls/DiffViewer/SideBySideDiffViewer.xaml.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.DiffViewer
{
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Notepads.Commands;
using Notepads.Extensions;
using Notepads.Services;
using Windows.System;
using Windows.UI;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
public sealed partial class SideBySideDiffViewer : UserControl, ISideBySideDiffViewer, IDisposable
{
public event EventHandler OnCloseEvent;
private readonly RichTextBlockDiffRenderer _diffRenderer;
private readonly ICommandHandler<KeyRoutedEventArgs> _keyboardCommandHandler;
private readonly ICommandHandler<PointerRoutedEventArgs> _mouseCommandHandler;
private CancellationTokenSource _cancellationTokenSource;
private readonly ScrollViewerSynchronizer _scrollSynchronizer;
public SideBySideDiffViewer()
{
InitializeComponent();
_scrollSynchronizer = new ScrollViewerSynchronizer(new List<ScrollViewer> { LeftScroller, RightScroller });
_diffRenderer = new RichTextBlockDiffRenderer();
_keyboardCommandHandler = GetKeyboardCommandHandler();
_mouseCommandHandler = GetMouseCommandHandler();
LeftTextBlock.SelectionHighlightColor = new SolidColorBrush(ThemeSettingsService.AppAccentColor);
RightTextBlock.SelectionHighlightColor = new SolidColorBrush(ThemeSettingsService.AppAccentColor);
LeftTextBlockBorder.PointerWheelChanged += LeftTextBlockBorder_PointerWheelChanged;
RightTextBlockBorder.PointerWheelChanged += RightTextBlockBorder_PointerWheelChanged;
ThemeSettingsService.OnAccentColorChanged += ThemeSettingsService_OnAccentColorChanged;
DismissButton.Click += DismissButton_OnClick;
LayoutRoot.KeyDown += OnKeyDown;
KeyDown += OnKeyDown;
LeftTextBlock.KeyDown += OnKeyDown;
RightTextBlock.KeyDown += OnKeyDown;
Loaded += SideBySideDiffViewer_Loaded;
}
public void Dispose()
{
StopRenderingAndClearCache();
ThemeSettingsService.OnAccentColorChanged -= ThemeSettingsService_OnAccentColorChanged;
DismissButton.Click -= DismissButton_OnClick;
LayoutRoot.KeyDown -= OnKeyDown;
KeyDown -= OnKeyDown;
LeftTextBlock.KeyDown -= OnKeyDown;
RightTextBlock.KeyDown -= OnKeyDown;
Loaded -= SideBySideDiffViewer_Loaded;
LeftTextBlockBorder.PointerWheelChanged -= LeftTextBlockBorder_PointerWheelChanged;
RightTextBlockBorder.PointerWheelChanged -= RightTextBlockBorder_PointerWheelChanged;
_scrollSynchronizer.Dispose();
}
private void SideBySideDiffViewer_Loaded(object sender, RoutedEventArgs e)
{
Focus();
}
private async void ThemeSettingsService_OnAccentColorChanged(object sender, Color color)
{
await Dispatcher.CallOnUIThreadAsync(() =>
{
LeftTextBlock.SelectionHighlightColor = new SolidColorBrush(color);
RightTextBlock.SelectionHighlightColor = new SolidColorBrush(color);
});
}
private KeyboardCommandHandler GetKeyboardCommandHandler()
{
return new KeyboardCommandHandler(new List<IKeyboardCommand<KeyRoutedEventArgs>>
{
new KeyboardCommand<KeyRoutedEventArgs>(VirtualKey.Escape, (args) =>
{
DismissButton_OnClick(this, new RoutedEventArgs());
}),
new KeyboardCommand<KeyRoutedEventArgs>(false, true, false, VirtualKey.D, (args) =>
{
DismissButton_OnClick(this, new RoutedEventArgs());
}),
});
}
private ICommandHandler<PointerRoutedEventArgs> GetMouseCommandHandler()
{
return new MouseCommandHandler(new List<IMouseCommand<PointerRoutedEventArgs>>()
{
new MouseCommand<PointerRoutedEventArgs>(false, false, false, ChangeVerticalScrollingBasedOnMouseInput),
new MouseCommand<PointerRoutedEventArgs>(true, false, true, false, false, false, ChangeHorizontalScrollingBasedOnMouseInput),
new MouseCommand<PointerRoutedEventArgs>(false, false, true, false, false, false, ChangeHorizontalScrollingBasedOnMouseInput),
new MouseCommand<PointerRoutedEventArgs>(false, true, false, ChangeHorizontalScrollingBasedOnMouseInput)
}, this);
}
private void ChangeVerticalScrollingBasedOnMouseInput(PointerRoutedEventArgs args)
{
var mouseWheelDelta = args.GetCurrentPoint(this).Properties.MouseWheelDelta;
RightScroller.ChangeView(null, RightScroller.VerticalOffset + (-1 * mouseWheelDelta), null, false);
}
// Ctrl + Shift + Wheel -> horizontal scrolling
private void ChangeHorizontalScrollingBasedOnMouseInput(PointerRoutedEventArgs args)
{
var mouseWheelDelta = args.GetCurrentPoint(this).Properties.MouseWheelDelta;
RightScroller.ChangeView(RightScroller.HorizontalOffset + (-1 * mouseWheelDelta), null, null, false);
}
private void OnKeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedEventArgs args)
{
var result = _keyboardCommandHandler.Handle(args);
if (result.ShouldHandle)
{
args.Handled = true;
}
}
public void Focus()
{
RightTextBlock.Focus(FocusState.Programmatic);
}
public void StopRenderingAndClearCache()
{
if (_cancellationTokenSource != null && !_cancellationTokenSource.IsCancellationRequested)
{
_cancellationTokenSource.Cancel();
}
LeftTextBlock.TextHighlighters.Clear();
LeftTextBlock.Blocks.Clear();
RightTextBlock.TextHighlighters.Clear();
RightTextBlock.Blocks.Clear();
}
public void RenderDiff(string left, string right, ElementTheme theme)
{
StopRenderingAndClearCache();
var foregroundBrush = (theme == ElementTheme.Dark)
? new SolidColorBrush(Colors.White)
: new SolidColorBrush(Colors.Black);
var diffContext = _diffRenderer.GenerateDiffViewData(left, right, foregroundBrush);
var leftContext = diffContext.Item1;
var rightContext = diffContext.Item2;
var leftHighlighters = leftContext.GetTextHighlighters();
var rightHighlighters = rightContext.GetTextHighlighters();
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
Task.Factory.StartNew(async () =>
{
var leftCount = leftContext.Blocks.Count;
var rightCount = rightContext.Blocks.Count;
var leftStartIndex = 0;
var rightStartIndex = 0;
var threshold = 1;
while (true)
{
Thread.Sleep(10);
if (leftStartIndex < leftCount)
{
var end = leftStartIndex + threshold;
if (end >= leftCount) end = leftCount;
var start = leftStartIndex;
await Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
for (int x = start; x < end; x++)
{
if (cancellationTokenSource.IsCancellationRequested) return;
LeftTextBlock.Blocks.Add(leftContext.Blocks[x]);
}
});
}
if (rightStartIndex < rightCount)
{
var end = rightStartIndex + threshold;
if (end >= rightCount) end = rightCount;
var start = rightStartIndex;
await Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
for (int x = start; x < end; x++)
{
if (cancellationTokenSource.IsCancellationRequested) return;
RightTextBlock.Blocks.Add(rightContext.Blocks[x]);
}
});
}
leftStartIndex += threshold;
rightStartIndex += threshold;
threshold *= 5;
if (leftStartIndex >= leftCount && rightStartIndex >= rightCount)
{
break;
}
}
}, cancellationTokenSource.Token);
Task.Factory.StartNew(async () =>
{
var leftCount = leftHighlighters.Count;
var rightCount = rightHighlighters.Count;
var leftStartIndex = 0;
var rightStartIndex = 0;
var threshold = 5;
while (true)
{
Thread.Sleep(10);
if (leftStartIndex < leftCount)
{
var end = leftStartIndex + threshold;
if (end >= leftCount) end = leftCount;
var start = leftStartIndex;
await Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
for (int x = start; x < end; x++)
{
if (cancellationTokenSource.IsCancellationRequested) return;
LeftTextBlock.TextHighlighters.Add(leftHighlighters[x]);
}
});
}
if (rightStartIndex < rightCount)
{
var end = rightStartIndex + threshold;
if (end >= rightCount) end = rightCount;
var start = rightStartIndex;
await Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
for (int x = start; x < end; x++)
{
if (cancellationTokenSource.IsCancellationRequested) return;
RightTextBlock.TextHighlighters.Add(rightHighlighters[x]);
}
});
}
leftStartIndex += threshold;
rightStartIndex += threshold;
threshold *= 5;
if (leftStartIndex >= leftCount && rightStartIndex >= rightCount)
{
break;
}
}
}, cancellationTokenSource.Token);
_cancellationTokenSource = cancellationTokenSource;
//Task.Factory.StartNew(async () =>
//{
// var count = rightCount > leftCount ? rightCount : leftCount;
// for (int i = 0; i < count; i++)
// {
// if (i < leftCount)
// {
// var j = i;
// await Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
// {
// Thread.Sleep(20);
// LeftTextBlock.Blocks.Add(leftContext.Blocks[j]);
// });
// }
// if (i < rightCount)
// {
// var j = i;
// await Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
// {
// Thread.Sleep(20);
// RightTextBlock.Blocks.Add(rightContext.Blocks[j]);
// });
// }
// }
//});
//Task.Factory.StartNew(async () =>
//{
// var leftCount = leftHighlighters.Count;
// var rightCount = rightHighlighters.Count;
// var count = rightCount > leftCount ? rightCount : leftCount;
// for (int i = 0; i < count; i++)
// {
// if (i < leftCount)
// {
// var j = i;
// await Dispatcher.RunAsync(CoreDispatcherPriority.Low,
// () => LeftTextBlock.TextHighlighters.Add(leftHighlighters[j]));
// }
// if (i < rightCount)
// {
// var j = i;
// await Dispatcher.RunAsync(CoreDispatcherPriority.Low,
// () => RightTextBlock.TextHighlighters.Add(rightHighlighters[j]));
// }
// }
//});
}
private void DismissButton_OnClick(object sender, RoutedEventArgs e)
{
StopRenderingAndClearCache();
OnCloseEvent?.Invoke(this, EventArgs.Empty);
}
private void LeftTextBlockBorder_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
_mouseCommandHandler.Handle(e);
// Always handle it so that left ScrollViewer won't pick up the event
e.Handled = true;
}
private void RightTextBlockBorder_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
_mouseCommandHandler.Handle(e);
// Always handle it so that right ScrollViewer won't pick up the event
e.Handled = true;
}
}
}
================================================
FILE: src/Notepads/Controls/FilePicker/FilePickerFactory.cs
================================================
// ---------------------------------------------------------------------------------------------
// Copyright (c) 2019-2024, Jiaqi (0x7c13) Liu. All rights reserved.
// See LICENSE file in the project root for license information.
// ---------------------------------------------------------------------------------------------
namespace Notepads.Controls.FilePicker
{
using System;
using System.Collections.Generic;
using System.Linq;
using Services;
using TextEditor;
using Utilities;
using Windows.Storage.Pickers;
public static class FilePickerFactory
{
private static IList<string> _allSupportedExtensions;
private static IList<string> AllSupportedExtensions
{
get
{
if (_allSupportedExtensions != null) return _allSupportedExtensions;
var allSupportedExtensions = FileExtensionProvider.AllSupportedFi
gitextract_92diuyzb/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── RELEASE_TEMPLATE/
│ │ ├── changelog_config.json
│ │ └── changelog_template.hbs
│ ├── dependabot.yml
│ ├── issue_label_bot.yaml
│ └── workflows/
│ ├── csa-bulk-dismissal.yml
│ └── main.yml
├── .gitignore
├── .whitesource
├── CI-CD_DOCUMENTATION.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── PRIVACY.md
├── README.md
├── azure-pipelines.yml
└── src/
├── .editorconfig
├── Notepads/
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Brushes/
│ │ └── HostBackdropAcrylicBrush.cs
│ ├── Commands/
│ │ ├── CommandHandlerResult.cs
│ │ ├── ICommandHandler.cs
│ │ ├── IKeyboardCommand.cs
│ │ ├── IMouseCommand.cs
│ │ ├── KeyboardCommand.cs
│ │ ├── KeyboardCommandHandler.cs
│ │ ├── MouseCommand.cs
│ │ └── MouseCommandHandler.cs
│ ├── Controls/
│ │ ├── Dialog/
│ │ │ ├── AppCloseSaveReminderDialog.cs
│ │ │ ├── FileOpenErrorDialog.cs
│ │ │ ├── FileRenameDialog.cs
│ │ │ ├── FileSaveErrorDialog.cs
│ │ │ ├── NotepadsDialog.cs
│ │ │ ├── RevertAllChangesConfirmationDialog.cs
│ │ │ ├── SessionCorruptionErrorDialog.cs
│ │ │ └── SetCloseSaveReminderDialog.cs
│ │ ├── DiffViewer/
│ │ │ ├── BrushFactory.cs
│ │ │ ├── ISideBySideDiffViewer.cs
│ │ │ ├── RichTextBlockDiffContext.cs
│ │ │ ├── RichTextBlockDiffRenderer.cs
│ │ │ ├── ScrollViewerSynchronizer.cs
│ │ │ ├── SideBySideDiffViewer.xaml
│ │ │ └── SideBySideDiffViewer.xaml.cs
│ │ ├── FilePicker/
│ │ │ └── FilePickerFactory.cs
│ │ ├── FindAndReplace/
│ │ │ ├── FindAndReplaceControl.xaml
│ │ │ ├── FindAndReplaceControl.xaml.cs
│ │ │ ├── FindAndReplaceEventArgs.cs
│ │ │ ├── FindAndReplacePlaceHolder.xaml
│ │ │ ├── FindAndReplaceTextBox.cs
│ │ │ └── SearchContext.cs
│ │ ├── GoTo/
│ │ │ ├── GoToControl.xaml
│ │ │ ├── GoToControl.xaml.cs
│ │ │ └── GoToEventArgs.cs
│ │ ├── Markdown/
│ │ │ ├── MarkdownExtensionView.xaml
│ │ │ └── MarkdownExtensionView.xaml.cs
│ │ ├── Print/
│ │ │ ├── ContinuationPageFormat.xaml
│ │ │ ├── ContinuationPageFormat.xaml.cs
│ │ │ ├── PrintArgs.cs
│ │ │ ├── PrintPageFormat.xaml
│ │ │ └── PrintPageFormat.xaml.cs
│ │ └── TextEditor/
│ │ ├── ITextEditor.cs
│ │ ├── TextEditor.xaml
│ │ ├── TextEditor.xaml.cs
│ │ ├── TextEditorContextFlyout.cs
│ │ ├── TextEditorCore.DateTime.cs
│ │ ├── TextEditorCore.DuplicateText.cs
│ │ ├── TextEditorCore.ExternalEventListener.cs
│ │ ├── TextEditorCore.FindAndReplace.cs
│ │ ├── TextEditorCore.FontSize.cs
│ │ ├── TextEditorCore.Indentation.cs
│ │ ├── TextEditorCore.JoinText.cs
│ │ ├── TextEditorCore.LineHighlighter.cs
│ │ ├── TextEditorCore.LineNumbers.cs
│ │ ├── TextEditorCore.MoveText.cs
│ │ ├── TextEditorCore.WebSearch.cs
│ │ ├── TextEditorCore.cs
│ │ ├── TextEditorCore.xaml
│ │ └── TextEditorStateMetaData.cs
│ ├── Core/
│ │ ├── INotepadsCore.cs
│ │ ├── ISessionManager.cs
│ │ ├── NotepadsCore.cs
│ │ ├── SessionDataModels/
│ │ │ ├── NotepadsSessionData.cs
│ │ │ └── TextEditorSessionData.cs
│ │ ├── SessionManager.cs
│ │ └── TabContextFlyout.cs
│ ├── Extensions/
│ │ ├── DispatcherExtensions.cs
│ │ ├── IContentPreviewExtension.cs
│ │ ├── INotepadsExtensionProvider.cs
│ │ ├── NotepadsExtensionProvider.cs
│ │ ├── ScrollViewerExtensions.cs
│ │ └── StringExtensions.cs
│ ├── Models/
│ │ └── TextFile.cs
│ ├── Notepads.csproj
│ ├── Package.StoreAssociation.xml
│ ├── Package.appxmanifest
│ ├── Package.targets
│ ├── Program.cs
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
│ ├── Resource/
│ │ ├── CustomAppBarButtonStyle.xaml
│ │ ├── CustomCheckBoxStyle.xaml
│ │ ├── CustomNavigationViewItemStyle.xaml
│ │ ├── CustomRadioButtonStyle.xaml
│ │ ├── CustomSliderStyle.xaml
│ │ ├── CustomSplitViewStyle.xaml
│ │ ├── CustomToggleSwitchStyle.xaml
│ │ ├── DismissButtonStyle.xaml
│ │ ├── InAppNotificationNoDismissButton.xaml
│ │ ├── MiddleClickScrolling-CursorType.res
│ │ ├── Text Document.txt
│ │ └── TransparentTextBoxStyle.xaml
│ ├── Services/
│ │ ├── ActivationService.cs
│ │ ├── AnalyticsService.cs
│ │ ├── AppSettingsService.cs
│ │ ├── FileExtensionProvider.cs
│ │ ├── JumpListService.cs
│ │ ├── LoggingService.cs
│ │ ├── MRUService.cs
│ │ ├── NotepadsProtocolService.cs
│ │ ├── NotificationCenter.cs
│ │ └── ThemeSettingsService.cs
│ ├── Settings/
│ │ ├── ApplicationSettings.cs
│ │ └── SettingsKey.cs
│ ├── Strings/
│ │ ├── ar-YE/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── bg-BG/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── cs-CZ/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── de-CH/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── de-DE/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── en-US/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── es-ES/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── fi-FI/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── fr-FR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── hi-IN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── hr-HR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── hu-HU/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── it-IT/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ja-JP/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ka-GE/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ko-KR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── nl-NL/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── or-IN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── pl-PL/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── pt-BR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── pt-PT/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── ru-RU/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── sr-Latn/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── sr-cyrl/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── tr-TR/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── uk-UA/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── vi-VN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ ├── zh-CN/
│ │ │ ├── Manifest.resw
│ │ │ ├── Resources.resw
│ │ │ └── Settings.resw
│ │ └── zh-TW/
│ │ ├── Manifest.resw
│ │ ├── Resources.resw
│ │ └── Settings.resw
│ ├── Utilities/
│ │ ├── BrushUtility.cs
│ │ ├── DialogManager.cs
│ │ ├── Downloader.cs
│ │ ├── EncodingUtility.cs
│ │ ├── FileSystemUtility.cs
│ │ ├── FileTypeUtility.cs
│ │ ├── FontUtility.cs
│ │ ├── FutureAccessListUtility.cs
│ │ ├── LanguageUtility.cs
│ │ ├── LineEndingUtility.cs
│ │ ├── SearchEngineUtility.cs
│ │ ├── SessionUtility.cs
│ │ └── ThreadUtility.cs
│ └── Views/
│ ├── MainPage/
│ │ ├── NotepadsMainPage.IO.cs
│ │ ├── NotepadsMainPage.MainMenu.cs
│ │ ├── NotepadsMainPage.Notification.cs
│ │ ├── NotepadsMainPage.StatusBar.cs
│ │ ├── NotepadsMainPage.Theme.cs
│ │ ├── NotepadsMainPage.ViewModes.cs
│ │ ├── NotepadsMainPage.xaml
│ │ └── NotepadsMainPage.xaml.cs
│ └── Settings/
│ ├── AboutPage.xaml
│ ├── AboutPage.xaml.cs
│ ├── AdvancedSettingsPage.xaml
│ ├── AdvancedSettingsPage.xaml.cs
│ ├── PersonalizationSettingsPage.xaml
│ ├── PersonalizationSettingsPage.xaml.cs
│ ├── SettingsPage.xaml
│ ├── SettingsPage.xaml.cs
│ ├── SettingsPanel.xaml
│ ├── SettingsPanel.xaml.cs
│ ├── TextAndEditorSettingsPage.xaml
│ └── TextAndEditorSettingsPage.xaml.cs
├── Notepads.Controls/
│ ├── DropShadowPanel/
│ │ ├── DropShadowPanel.Properties.cs
│ │ ├── DropShadowPanel.cs
│ │ └── DropShadowPanel.xaml
│ ├── GridSplitter/
│ │ ├── GridSplitter.Data.cs
│ │ ├── GridSplitter.Events.cs
│ │ ├── GridSplitter.Helper.cs
│ │ ├── GridSplitter.Options.cs
│ │ ├── GridSplitter.cs
│ │ ├── GridSplitter.xaml
│ │ └── GripperHoverWrapper.cs
│ ├── Helpers/
│ │ ├── DispatcherQueueHelper.cs
│ │ └── ThemeListener.cs
│ ├── InAppNotification/
│ │ ├── InAppNotification.AttachedProperties.cs
│ │ ├── InAppNotification.Constants.cs
│ │ ├── InAppNotification.Events.cs
│ │ ├── InAppNotification.Properties.cs
│ │ ├── InAppNotification.cs
│ │ ├── InAppNotification.xaml
│ │ ├── InAppNotificationClosedEventArgs.cs
│ │ ├── InAppNotificationClosingEventArgs.cs
│ │ ├── InAppNotificationDismissKind.cs
│ │ ├── InAppNotificationOpeningEventArgs.cs
│ │ ├── NotificationOptions.cs
│ │ ├── StackMode.cs
│ │ └── Styles/
│ │ └── MSEdgeNotificationStyle.xaml
│ ├── MarkdownTextBlock/
│ │ ├── CodeBlockResolvingEventArgs.cs
│ │ ├── ImageResolvingEventArgs.cs
│ │ ├── LinkClickedEventArgs.cs
│ │ ├── Markdown/
│ │ │ ├── Blocks/
│ │ │ │ ├── CodeBlock.cs
│ │ │ │ ├── HeaderBlock.cs
│ │ │ │ ├── HorizontalRuleBlock.cs
│ │ │ │ ├── LinkReferenceBlock.cs
│ │ │ │ ├── List/
│ │ │ │ │ ├── ListItemBlock.cs
│ │ │ │ │ ├── ListItemBuilder.cs
│ │ │ │ │ ├── ListItemPreamble.cs
│ │ │ │ │ └── NestedListInfo.cs
│ │ │ │ ├── ListBlock.cs
│ │ │ │ ├── ParagraphBlock.cs
│ │ │ │ ├── QuoteBlock.cs
│ │ │ │ ├── TableBlock.cs
│ │ │ │ └── YamlHeaderBlock.cs
│ │ │ ├── Core/
│ │ │ │ ├── IParser.cs
│ │ │ │ ├── ParseHelpers.cs
│ │ │ │ ├── SchemaBase.cs
│ │ │ │ └── StringValueAttribute.cs
│ │ │ ├── Enums/
│ │ │ │ ├── ColumnAlignment.cs
│ │ │ │ ├── HyperlinkType.cs
│ │ │ │ ├── InlineParseMethod.cs
│ │ │ │ ├── ListStyle.cs
│ │ │ │ ├── MarkdownBlockType.cs
│ │ │ │ └── MarkdownInlineType.cs
│ │ │ ├── Helpers/
│ │ │ │ ├── Common.cs
│ │ │ │ ├── DebuggingReporter.cs
│ │ │ │ ├── InlineParseResult.cs
│ │ │ │ ├── InlineTripCharHelper.cs
│ │ │ │ └── LineInfo.cs
│ │ │ ├── Inlines/
│ │ │ │ ├── BoldItalicTextInline.cs
│ │ │ │ ├── BoldTextInline.cs
│ │ │ │ ├── CodeInline.cs
│ │ │ │ ├── CommentInline.cs
│ │ │ │ ├── EmojiInline.EmojiCodes.cs
│ │ │ │ ├── EmojiInline.cs
│ │ │ │ ├── HyperlinkInline.cs
│ │ │ │ ├── IInlineContainer.cs
│ │ │ │ ├── IInlineLeaf.cs
│ │ │ │ ├── ILinkElement.cs
│ │ │ │ ├── ImageInline.cs
│ │ │ │ ├── ItalicTextInline.cs
│ │ │ │ ├── LinkAnchorInline.cs
│ │ │ │ ├── MarkdownLinkInline.cs
│ │ │ │ ├── StrikethroughTextInline.cs
│ │ │ │ ├── SubscriptTextInline.cs
│ │ │ │ ├── SuperscriptTextInline.cs
│ │ │ │ └── TextRunInline.cs
│ │ │ ├── MarkdownBlock.cs
│ │ │ ├── MarkdownDocument.cs
│ │ │ ├── MarkdownElement.cs
│ │ │ ├── MarkdownInline.cs
│ │ │ └── Render/
│ │ │ ├── ICodeBlockResolver.cs
│ │ │ ├── IImageResolver.cs
│ │ │ ├── ILinkRegister.cs
│ │ │ ├── IRenderContext.cs
│ │ │ ├── InlineRenderContext.cs
│ │ │ ├── MarkdownRenderer.Blocks.cs
│ │ │ ├── MarkdownRenderer.Dimensions.cs
│ │ │ ├── MarkdownRenderer.Inlines.cs
│ │ │ ├── MarkdownRenderer.Properties.cs
│ │ │ ├── MarkdownRenderer.cs
│ │ │ ├── MarkdownRendererBase.Blocks.cs
│ │ │ ├── MarkdownRendererBase.Inlines.cs
│ │ │ ├── MarkdownRendererBase.cs
│ │ │ ├── MarkdownTable.cs
│ │ │ ├── RenderContext.cs
│ │ │ ├── RenderContextIncorrectException.cs
│ │ │ └── UIElementCollectionRenderContext.cs
│ │ ├── MarkdownRenderedEventArgs.cs
│ │ ├── MarkdownTextBlock.Dimensions.cs
│ │ ├── MarkdownTextBlock.Events.cs
│ │ ├── MarkdownTextBlock.Methods.cs
│ │ ├── MarkdownTextBlock.Properties.cs
│ │ ├── MarkdownTextBlock.cs
│ │ └── MarkdownTextBlock.xaml
│ ├── Notepads.Controls.csproj
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ └── Notepads.Controls.rd.xml
│ ├── SetsView/
│ │ ├── SetClosingEventArgs.cs
│ │ ├── SetDraggedOutsideEventArgs.cs
│ │ ├── SetSelectedEventArgs.cs
│ │ ├── SetsView.HeaderLayout.cs
│ │ ├── SetsView.ItemSources.cs
│ │ ├── SetsView.Properties.cs
│ │ ├── SetsView.cs
│ │ ├── SetsView.xaml
│ │ ├── SetsViewItem.Properties.cs
│ │ ├── SetsViewItem.cs
│ │ └── SetsWidthMode.cs
│ └── Themes/
│ └── Generic.xaml
└── Notepads.sln
SYMBOL INDEX (1372 symbols across 211 files)
FILE: src/Notepads.Controls/DropShadowPanel/DropShadowPanel.Properties.cs
class DropShadowPanel (line 16) | public partial class DropShadowPanel
method OnBlurRadiusChanged (line 148) | private static void OnBlurRadiusChanged(DependencyObject d, Dependency...
method OnColorChanged (line 156) | private static void OnColorChanged(DependencyObject d, DependencyPrope...
method OnOffsetXChanged (line 164) | private static void OnOffsetXChanged(DependencyObject d, DependencyPro...
method OnOffsetYChanged (line 172) | private static void OnOffsetYChanged(DependencyObject d, DependencyPro...
method OnOffsetZChanged (line 180) | private static void OnOffsetZChanged(DependencyObject d, DependencyPro...
method OnShadowOpacityChanged (line 188) | private static void OnShadowOpacityChanged(DependencyObject d, Depende...
method OnIsMaskedChanged (line 196) | private static void OnIsMaskedChanged(DependencyObject d, DependencyPr...
FILE: src/Notepads.Controls/DropShadowPanel/DropShadowPanel.cs
class DropShadowPanel (line 20) | [TemplatePart(Name = PartShadow, Type = typeof(Border))]
method DropShadowPanel (line 32) | public DropShadowPanel()
method OnApplyTemplate (line 47) | protected override void OnApplyTemplate()
method OnContentChanged (line 62) | protected override void OnContentChanged(object oldContent, object new...
method OnSizeChanged (line 83) | private void OnSizeChanged(object sender, SizeChangedEventArgs e)
method ConfigureShadowVisualForCastingElement (line 88) | private void ConfigureShadowVisualForCastingElement()
method OnBlurRadiusChanged (line 94) | private void OnBlurRadiusChanged(double newValue)
method OnColorChanged (line 102) | private void OnColorChanged(Color newValue)
method OnOffsetXChanged (line 110) | private void OnOffsetXChanged(double newValue)
method OnOffsetYChanged (line 118) | private void OnOffsetYChanged(double newValue)
method OnOffsetZChanged (line 126) | private void OnOffsetZChanged(double newValue)
method OnShadowOpacityChanged (line 134) | private void OnShadowOpacityChanged(double newValue)
method UpdateShadowMask (line 142) | private void UpdateShadowMask()
method UpdateShadowOffset (line 169) | private void UpdateShadowOffset(float x, float y, float z)
method UpdateShadowSize (line 177) | private void UpdateShadowSize()
FILE: src/Notepads.Controls/GridSplitter/GridSplitter.Data.cs
class GridSplitter (line 11) | public partial class GridSplitter
type GridResizeDirection (line 16) | public enum GridResizeDirection
type GridResizeBehavior (line 38) | public enum GridResizeBehavior
type GripperCursorType (line 64) | public enum GripperCursorType
type SplitterCursorBehavior (line 145) | public enum SplitterCursorBehavior
FILE: src/Notepads.Controls/GridSplitter/GridSplitter.Events.cs
class GridSplitter (line 18) | public partial class GridSplitter
method GridSplitter_Loaded (line 25) | private void GridSplitter_Loaded(object sender, RoutedEventArgs e)
method CreateGripperDisplay (line 53) | private void CreateGripperDisplay()
method OnKeyDown (line 69) | protected override void OnKeyDown(KeyRoutedEventArgs e)
method OnManipulationStarted (line 119) | protected override void OnManipulationStarted(ManipulationStartedRoute...
method OnManipulationCompleted (line 139) | protected override void OnManipulationCompleted(ManipulationCompletedR...
method OnManipulationDelta (line 147) | protected override void OnManipulationDelta(ManipulationDeltaRoutedEve...
method VerticalMove (line 170) | private bool VerticalMove(double verticalChange)
method HorizontalMove (line 236) | private bool HorizontalMove(double horizontalChange)
FILE: src/Notepads.Controls/GridSplitter/GridSplitter.Helper.cs
class GridSplitter (line 14) | public partial class GridSplitter
method IsStarColumn (line 16) | private static bool IsStarColumn(ColumnDefinition definition)
method IsStarRow (line 21) | private static bool IsStarRow(RowDefinition definition)
method SetColumnWidth (line 26) | private bool SetColumnWidth(ColumnDefinition columnDefinition, double ...
method IsValidColumnWidth (line 51) | private bool IsValidColumnWidth(ColumnDefinition columnDefinition, dou...
method SetRowHeight (line 75) | private bool SetRowHeight(RowDefinition rowDefinition, double vertical...
method IsValidRowHeight (line 100) | private bool IsValidRowHeight(RowDefinition rowDefinition, double vert...
method GetTargetedColumn (line 125) | private int GetTargetedColumn()
method GetTargetedRow (line 132) | private int GetTargetedRow()
method GetSiblingColumn (line 139) | private int GetSiblingColumn()
method GetSiblingRow (line 146) | private int GetSiblingRow()
method GetTargetIndex (line 153) | private int GetTargetIndex(int currentIndex)
method GetSiblingIndex (line 169) | private int GetSiblingIndex(int currentIndex)
method GetResizeDirection (line 185) | private GridResizeDirection GetResizeDirection()
method GetResizeBehavior (line 218) | private GridResizeBehavior GetResizeBehavior()
FILE: src/Notepads.Controls/GridSplitter/GridSplitter.Options.cs
class GridSplitter (line 15) | public partial class GridSplitter
method OnGripperForegroundPropertyChanged (line 169) | private static void OnGripperForegroundPropertyChanged(DependencyObjec...
method OnGripperCursorPropertyChanged (line 181) | private static void OnGripperCursorPropertyChanged(DependencyObject d,...
method GripperCustomCursorResourcePropertyChanged (line 193) | private static void GripperCustomCursorResourcePropertyChanged(Depende...
method CursorBehaviorPropertyChanged (line 205) | private static void CursorBehaviorPropertyChanged(DependencyObject d, ...
method OnElementPropertyChanged (line 215) | private static void OnElementPropertyChanged(DependencyObject d, Depen...
FILE: src/Notepads.Controls/GridSplitter/GridSplitter.cs
class GridSplitter (line 17) | public partial class GridSplitter : Control
method GridSplitter (line 163) | public GridSplitter()
method OnApplyTemplate (line 172) | protected override void OnApplyTemplate()
method GridSplitter_PointerReleased (line 201) | private void GridSplitter_PointerReleased(object sender, PointerRouted...
method GridSplitter_PointerPressed (line 207) | private void GridSplitter_PointerPressed(object sender, PointerRoutedE...
method GridSplitter_PointerExited (line 213) | private void GridSplitter_PointerExited(object sender, PointerRoutedEv...
method GridSplitter_PointerEntered (line 223) | private void GridSplitter_PointerEntered(object sender, PointerRoutedE...
method GridSplitter_ManipulationCompleted (line 233) | private void GridSplitter_ManipulationCompleted(object sender, Manipul...
method GridSplitter_ManipulationStarted (line 240) | private void GridSplitter_ManipulationStarted(object sender, Manipulat...
FILE: src/Notepads.Controls/GridSplitter/GripperHoverWrapper.cs
class GripperHoverWrapper (line 12) | internal class GripperHoverWrapper
method GripperHoverWrapper (line 42) | internal GripperHoverWrapper(UIElement element, GridSplitter.GridResiz...
method UpdateHoverElement (line 53) | internal void UpdateHoverElement(UIElement element)
method Element_PointerExited (line 61) | private void Element_PointerExited(object sender, PointerRoutedEventAr...
method Element_PointerEntered (line 75) | private void Element_PointerEntered(object sender, PointerRoutedEventA...
method UpdateDisplayCursor (line 91) | private void UpdateDisplayCursor()
method SplitterManipulationStarted (line 121) | internal void SplitterManipulationStarted(object sender, ManipulationS...
method SplitterManipulationCompleted (line 132) | internal void SplitterManipulationCompleted(object sender, Manipulatio...
method UnhookEvents (line 143) | internal void UnhookEvents()
FILE: src/Notepads.Controls/Helpers/DispatcherQueueHelper.cs
class DispatcherQueueHelper (line 15) | public static class DispatcherQueueHelper
method ExecuteOnUIThreadAsync (line 25) | public static Task ExecuteOnUIThreadAsync(this DispatcherQueue dispatc...
method ExecuteOnUIThreadAsync (line 81) | public static Task<T> ExecuteOnUIThreadAsync<T>(this DispatcherQueue d...
method ExecuteOnUIThreadAsync (line 129) | public static Task ExecuteOnUIThreadAsync(this DispatcherQueue dispatc...
method ExecuteOnUIThreadAsync (line 196) | public static Task<T> ExecuteOnUIThreadAsync<T>(this DispatcherQueue d...
FILE: src/Notepads.Controls/Helpers/ThemeListener.cs
class ThemeListener (line 25) | [AllowForWeb]
method ThemeListener (line 60) | public ThemeListener(DispatcherQueue dispatcherQueue = null)
method Accessible_HighContrastChanged (line 77) | private async void Accessible_HighContrastChanged(AccessibilitySetting...
method Settings_ColorValuesChanged (line 83) | private async void Settings_ColorValuesChanged(UISettings sender, obje...
method OnColorValuesChanged (line 88) | internal Task OnColorValuesChanged()
method CoreWindow_Activated (line 103) | private void CoreWindow_Activated(Windows.UI.Core.CoreWindow sender, W...
method UpdateProperties (line 115) | private void UpdateProperties()
method Dispose (line 134) | public void Dispose()
FILE: src/Notepads.Controls/InAppNotification/InAppNotification.AttachedProperties.cs
class InAppNotification (line 15) | public partial class InAppNotification
method GetKeyFrameDuration (line 22) | public static TimeSpan GetKeyFrameDuration(DependencyObject obj)
method SetKeyFrameDuration (line 32) | public static void SetKeyFrameDuration(DependencyObject obj, TimeSpan ...
method OnKeyFrameAnimationChanged (line 43) | private static void OnKeyFrameAnimationChanged(DependencyObject d, Dep...
FILE: src/Notepads.Controls/InAppNotification/InAppNotification.Constants.cs
class InAppNotification (line 11) | public partial class InAppNotification
FILE: src/Notepads.Controls/InAppNotification/InAppNotification.Events.cs
class InAppNotification (line 16) | public partial class InAppNotification
method DismissButton_Click (line 40) | private void DismissButton_Click(object sender, RoutedEventArgs e)
method DismissTimer_Tick (line 45) | private void DismissTimer_Tick(object sender, object e)
method OpenAnimationTimer_Tick (line 50) | private void OpenAnimationTimer_Tick(object sender, object e)
method AutomateTextNotification (line 65) | private void AutomateTextNotification(string message)
method ClosingAnimationTimer_Tick (line 78) | private void ClosingAnimationTimer_Tick(object sender, object e)
FILE: src/Notepads.Controls/InAppNotification/InAppNotification.Properties.cs
class InAppNotification (line 14) | public partial class InAppNotification
method OnShowDismissButtonChanged (line 91) | private static void OnShowDismissButtonChanged(DependencyObject d, Dep...
FILE: src/Notepads.Controls/InAppNotification/InAppNotification.cs
class InAppNotification (line 17) | [TemplateVisualState(Name = StateContentVisible, GroupName = GroupContent)]
method InAppNotification (line 33) | public InAppNotification()
method OnApplyTemplate (line 43) | protected override void OnApplyTemplate()
method Show (line 75) | public void Show(int duration = 0)
method Show (line 112) | public void Show(string text, int duration = 0)
method Show (line 127) | public void Show(UIElement element, int duration = 0)
method Show (line 142) | public void Show(DataTemplate dataTemplate, int duration = 0)
method Dismiss (line 155) | public void Dismiss()
method Dismiss (line 164) | private void Dismiss(InAppNotificationDismissKind dismissKind)
method ShouldDisplayImmediately (line 220) | private bool ShouldDisplayImmediately()
method UpdateContent (line 230) | private void UpdateContent(NotificationOptions notificationOptions)
method Show (line 253) | private void Show(NotificationOptions notificationOptions)
FILE: src/Notepads.Controls/InAppNotification/InAppNotificationClosedEventArgs.cs
class InAppNotificationClosedEventArgs (line 20) | public class InAppNotificationClosedEventArgs : EventArgs
method InAppNotificationClosedEventArgs (line 26) | public InAppNotificationClosedEventArgs(InAppNotificationDismissKind d...
FILE: src/Notepads.Controls/InAppNotification/InAppNotificationClosingEventArgs.cs
class InAppNotificationClosingEventArgs (line 20) | public class InAppNotificationClosingEventArgs : EventArgs
method InAppNotificationClosingEventArgs (line 26) | public InAppNotificationClosingEventArgs(InAppNotificationDismissKind ...
FILE: src/Notepads.Controls/InAppNotification/InAppNotificationDismissKind.cs
type InAppNotificationDismissKind (line 11) | public enum InAppNotificationDismissKind
FILE: src/Notepads.Controls/InAppNotification/InAppNotificationOpeningEventArgs.cs
class InAppNotificationOpeningEventArgs (line 20) | public class InAppNotificationOpeningEventArgs : EventArgs
method InAppNotificationOpeningEventArgs (line 25) | public InAppNotificationOpeningEventArgs()
FILE: src/Notepads.Controls/InAppNotification/NotificationOptions.cs
class NotificationOptions (line 13) | internal class NotificationOptions
FILE: src/Notepads.Controls/InAppNotification/StackMode.cs
type StackMode (line 11) | public enum StackMode
FILE: src/Notepads.Controls/MarkdownTextBlock/CodeBlockResolvingEventArgs.cs
class CodeBlockResolvingEventArgs (line 14) | public class CodeBlockResolvingEventArgs : EventArgs
method CodeBlockResolvingEventArgs (line 16) | internal CodeBlockResolvingEventArgs(InlineCollection inlineCollection...
FILE: src/Notepads.Controls/MarkdownTextBlock/ImageResolvingEventArgs.cs
class ImageResolvingEventArgs (line 18) | public class ImageResolvingEventArgs : EventArgs
method ImageResolvingEventArgs (line 22) | internal ImageResolvingEventArgs(string url, string tooltip)
method GetDeferral (line 53) | public Deferral GetDeferral()
method WaitForDeferrals (line 68) | internal Task WaitForDeferrals()
FILE: src/Notepads.Controls/MarkdownTextBlock/LinkClickedEventArgs.cs
class LinkClickedEventArgs (line 13) | public class LinkClickedEventArgs : EventArgs
method LinkClickedEventArgs (line 15) | internal LinkClickedEventArgs(string link)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/CodeBlock.cs
class CodeBlock (line 14) | public class CodeBlock : MarkdownBlock
method CodeBlock (line 19) | public CodeBlock()
method Parse (line 45) | internal static CodeBlock Parse(string markdown, int start, int maxEnd...
method ToString (line 191) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/HeaderBlock.cs
class HeaderBlock (line 16) | public class HeaderBlock : MarkdownBlock
method HeaderBlock (line 21) | public HeaderBlock()
method ParseHashPrefixedHeader (line 58) | internal static HeaderBlock ParseHashPrefixedHeader(string markdown, i...
method ParseUnderlineStyleHeader (line 97) | internal static HeaderBlock ParseUnderlineStyleHeader(string markdown,...
method ToString (line 156) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/HorizontalRuleBlock.cs
class HorizontalRuleBlock (line 11) | public class HorizontalRuleBlock : MarkdownBlock
method HorizontalRuleBlock (line 16) | public HorizontalRuleBlock()
method Parse (line 28) | internal static HorizontalRuleBlock Parse(string markdown, int start, ...
method ToString (line 68) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/LinkReferenceBlock.cs
class LinkReferenceBlock (line 11) | public class LinkReferenceBlock : MarkdownBlock
method LinkReferenceBlock (line 16) | public LinkReferenceBlock()
method Parse (line 43) | internal static LinkReferenceBlock Parse(string markdown, int start, i...
method ToString (line 165) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/List/ListItemBlock.cs
class ListItemBlock (line 13) | public class ListItemBlock
method ListItemBlock (line 20) | internal ListItemBlock()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/List/ListItemBuilder.cs
class ListItemBuilder (line 10) | internal class ListItemBuilder : MarkdownBlock
method ListItemBuilder (line 14) | public ListItemBuilder()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/List/ListItemPreamble.cs
class ListItemPreamble (line 8) | internal class ListItemPreamble
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/List/NestedListInfo.cs
class NestedListInfo (line 8) | internal class NestedListInfo
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/ListBlock.cs
class ListBlock (line 17) | public class ListBlock : MarkdownBlock
method ListBlock (line 22) | public ListBlock()
method Parse (line 46) | internal static ListBlock Parse(string markdown, int start, int maxEnd...
method ParseItemPreamble (line 216) | private static ListItemPreamble ParseItemPreamble(string markdown, int...
method AppendTextToListItem (line 272) | private static void AppendTextToListItem(ListItemBlock listItem, strin...
method ReplaceStringBuilders (line 312) | private static bool ReplaceStringBuilders(ListBlock list)
method ToString (line 368) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/ParagraphBlock.cs
class ParagraphBlock (line 13) | public class ParagraphBlock : MarkdownBlock
method ParagraphBlock (line 18) | public ParagraphBlock()
method Parse (line 33) | internal static ParagraphBlock Parse(string markdown)
method ToString (line 42) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/QuoteBlock.cs
class QuoteBlock (line 14) | public class QuoteBlock : MarkdownBlock
method QuoteBlock (line 19) | public QuoteBlock()
method Parse (line 38) | internal static QuoteBlock Parse(string markdown, int startOfLine, int...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/TableBlock.cs
class TableBlock (line 14) | public class TableBlock : MarkdownBlock
method TableBlock (line 19) | public TableBlock()
method Parse (line 46) | internal static TableBlock Parse(string markdown, int start, int endOf...
class TableColumnDefinition (line 167) | public class TableColumnDefinition
class TableRow (line 178) | public class TableRow
method ParseContents (line 195) | internal static int ParseContents(string markdown, int startingPos, ...
method Parse (line 298) | internal int Parse(string markdown, int startingPos, int maxEndingPo...
class TableCell (line 321) | public class TableCell
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Blocks/YamlHeaderBlock.cs
class YamlHeaderBlock (line 19) | public class YamlHeaderBlock : MarkdownBlock
method YamlHeaderBlock (line 24) | public YamlHeaderBlock()
method Parse (line 42) | internal static YamlHeaderBlock Parse(string markdown, int start, int ...
method ToString (line 146) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Core/IParser.cs
type IParser (line 14) | public interface IParser<out T>
method Parse (line 22) | IEnumerable<T> Parse(string data);
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Core/ParseHelpers.cs
class ParseHelpers (line 11) | public static class ParseHelpers
method IsMarkdownBlankOrWhiteSpace (line 17) | public static bool IsMarkdownBlankOrWhiteSpace(string str)
method IsMarkdownWhiteSpace (line 34) | public static bool IsMarkdownWhiteSpace(char c)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Core/SchemaBase.cs
class SchemaBase (line 11) | public abstract class SchemaBase
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Core/StringValueAttribute.cs
class StringValueAttribute (line 13) | [AttributeUsage(AttributeTargets.Field)]
method StringValueAttribute (line 21) | public StringValueAttribute(string value)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Enums/ColumnAlignment.cs
type ColumnAlignment (line 11) | public enum ColumnAlignment
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Enums/HyperlinkType.cs
type HyperlinkType (line 11) | public enum HyperlinkType
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Enums/InlineParseMethod.cs
type InlineParseMethod (line 8) | internal enum InlineParseMethod
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Enums/ListStyle.cs
type ListStyle (line 11) | public enum ListStyle
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Enums/MarkdownBlockType.cs
type MarkdownBlockType (line 11) | public enum MarkdownBlockType
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Enums/MarkdownInlineType.cs
type MarkdownInlineType (line 11) | public enum MarkdownInlineType
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Helpers/Common.cs
class Common (line 15) | internal class Common
method Common (line 20) | static Common()
method ParseInlineChildren (line 45) | public static List<MarkdownInline> ParseInlineChildren(string markdown...
method FindNextInlineElement (line 82) | private static InlineParseResult FindNextInlineElement(string markdown...
method FindNextSingleNewLine (line 221) | public static int FindNextSingleNewLine(string markdown, int startingP...
method IndexOf (line 251) | public static int IndexOf(string markdown, string search, int starting...
method IndexOf (line 289) | public static int IndexOf(string markdown, char search, int startingPo...
method FindNextWhiteSpace (line 327) | public static int FindNextWhiteSpace(string markdown, int startingPos,...
method ParseLines (line 347) | public static IEnumerable<LineInfo> ParseLines(string markdown, int st...
method SkipQuoteCharacters (line 444) | public static int SkipQuoteCharacters(string markdown, int start, int ...
method IsUrlValid (line 515) | public static bool IsUrlValid(string url)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Helpers/DebuggingReporter.cs
class DebuggingReporter (line 13) | internal class DebuggingReporter
method ReportCriticalError (line 18) | public static void ReportCriticalError(string errorText)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Helpers/InlineParseResult.cs
class InlineParseResult (line 11) | internal class InlineParseResult
method InlineParseResult (line 13) | public InlineParseResult(MarkdownInline parsedElement, int start, int ...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Helpers/InlineTripCharHelper.cs
class InlineTripCharHelper (line 15) | internal class InlineTripCharHelper
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Helpers/LineInfo.cs
class LineInfo (line 8) | internal class LineInfo
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/BoldItalicTextInline.cs
class BoldItalicTextInline (line 13) | internal class BoldItalicTextInline : MarkdownInline, IInlineContainer
method BoldItalicTextInline (line 18) | public BoldItalicTextInline()
method AddTripChars (line 31) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 44) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 108) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/BoldTextInline.cs
class BoldTextInline (line 13) | public class BoldTextInline : MarkdownInline, IInlineContainer
method BoldTextInline (line 18) | public BoldTextInline()
method AddTripChars (line 31) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 44) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 97) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/CodeInline.cs
class CodeInline (line 14) | public class CodeInline : MarkdownInline, IInlineLeaf
method CodeInline (line 19) | public CodeInline()
method AddTripChars (line 32) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 44) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 102) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/CommentInline.cs
class CommentInline (line 14) | internal class CommentInline : MarkdownInline, IInlineLeaf
method CommentInline (line 19) | public CommentInline()
method AddTripChars (line 32) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 44) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 80) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/EmojiInline.EmojiCodes.cs
class EmojiInline (line 13) | public partial class EmojiInline
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/EmojiInline.cs
class EmojiInline (line 13) | public partial class EmojiInline : MarkdownInline, IInlineLeaf
method EmojiInline (line 18) | public EmojiInline()
method AddTripChars (line 26) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 31) | internal static InlineParseResult Parse(string markdown, int start, in...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/HyperlinkInline.cs
class HyperlinkInline (line 16) | public class HyperlinkInline : MarkdownInline, IInlineLeaf, ILinkElement
method HyperlinkInline (line 21) | public HyperlinkInline()
method AddTripChars (line 49) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method ParseAngleBracketLink (line 65) | internal static InlineParseResult ParseAngleBracketLink(string markdow...
method ParseUrl (line 110) | internal static InlineParseResult ParseUrl(string markdown, int tripPo...
method ParseRedditLink (line 164) | internal static InlineParseResult ParseRedditLink(string markdown, int...
method ParseDoubleSlashLink (line 182) | private static InlineParseResult ParseDoubleSlashLink(string markdown,...
method ParseSingleSlashLink (line 232) | private static InlineParseResult ParseSingleSlashLink(string markdown,...
method ParsePartialLink (line 284) | internal static InlineParseResult ParsePartialLink(string markdown, in...
method ParseEmailAddress (line 319) | internal static InlineParseResult ParseEmailAddress(string markdown, i...
method ToString (line 410) | public override string ToString()
method FindEndOfRedditLink (line 427) | private static int FindEndOfRedditLink(string markdown, int start, int...
method FindUrlEnd (line 454) | private static int FindUrlEnd(string markdown, int start, int maxEnd)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/IInlineContainer.cs
type IInlineContainer (line 13) | public interface IInlineContainer
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/IInlineLeaf.cs
type IInlineLeaf (line 11) | public interface IInlineLeaf
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/ILinkElement.cs
type ILinkElement (line 11) | internal interface ILinkElement
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/ImageInline.cs
class ImageInline (line 14) | public class ImageInline : MarkdownInline, IInlineLeaf
method ImageInline (line 19) | public ImageInline()
method AddTripChars (line 61) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 73) | internal static InlineParseResult Parse(string markdown, int start, in...
method ResolveReference (line 204) | internal void ResolveReference(MarkdownDocument document)
method ToString (line 238) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/ItalicTextInline.cs
class ItalicTextInline (line 13) | public class ItalicTextInline : MarkdownInline, IInlineContainer
method ItalicTextInline (line 18) | public ItalicTextInline()
method AddTripChars (line 31) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 44) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 92) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/LinkAnchorInline.cs
class LinkAnchorInline (line 14) | public class LinkAnchorInline : MarkdownInline
method LinkAnchorInline (line 16) | internal LinkAnchorInline()
method AddTripChars (line 34) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 46) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 119) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/MarkdownLinkInline.cs
class MarkdownLinkInline (line 15) | public class MarkdownLinkInline : MarkdownInline, IInlineContainer, ILin...
method MarkdownLinkInline (line 20) | public MarkdownLinkInline()
method AddTripChars (line 48) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 60) | internal static InlineParseResult Parse(string markdown, int start, in...
method ResolveReference (line 240) | internal void ResolveReference(MarkdownDocument document)
method ToString (line 275) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/StrikethroughTextInline.cs
class StrikethroughTextInline (line 13) | public class StrikethroughTextInline : MarkdownInline, IInlineContainer
method StrikethroughTextInline (line 18) | public StrikethroughTextInline()
method AddTripChars (line 31) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 43) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 89) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/SubscriptTextInline.cs
class SubscriptTextInline (line 13) | public class SubscriptTextInline : MarkdownInline, IInlineContainer
method SubscriptTextInline (line 18) | public SubscriptTextInline()
method AddTripChars (line 31) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 43) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 84) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/SuperscriptTextInline.cs
class SuperscriptTextInline (line 13) | public class SuperscriptTextInline : MarkdownInline, IInlineContainer
method SuperscriptTextInline (line 18) | public SuperscriptTextInline()
method AddTripChars (line 31) | internal static void AddTripChars(List<InlineTripCharHelper> tripCharH...
method Parse (line 44) | internal static InlineParseResult Parse(string markdown, int start, in...
method ToString (line 140) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Inlines/TextRunInline.cs
class TextRunInline (line 15) | public class TextRunInline : MarkdownInline, IInlineLeaf
method TextRunInline (line 20) | public TextRunInline()
method Parse (line 299) | internal static TextRunInline Parse(string markdown, int start, int end)
method ResolveEscapeSequences (line 403) | internal static string ResolveEscapeSequences(string markdown, int sta...
method ToString (line 460) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/MarkdownBlock.cs
class MarkdownBlock (line 11) | public abstract class MarkdownBlock : MarkdownElement
method MarkdownBlock (line 21) | internal MarkdownBlock(MarkdownBlockType type)
method Equals (line 31) | public override bool Equals(object obj)
method GetHashCode (line 45) | public override int GetHashCode()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/MarkdownDocument.cs
class MarkdownDocument (line 17) | public class MarkdownDocument : MarkdownBlock
method MarkdownDocument (line 41) | public MarkdownDocument()
method Parse (line 55) | public void Parse(string markdownText)
method Parse (line 91) | internal static List<MarkdownBlock> Parse(string markdown, int start, ...
method LookUpReference (line 383) | public LinkReferenceBlock LookUpReference(string id)
method ToString (line 407) | public override string ToString()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/MarkdownElement.cs
class MarkdownElement (line 11) | public abstract class MarkdownElement
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/MarkdownInline.cs
class MarkdownInline (line 11) | public abstract class MarkdownInline : MarkdownElement
method MarkdownInline (line 21) | internal MarkdownInline(MarkdownInlineType type)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/ICodeBlockResolver.cs
type ICodeBlockResolver (line 13) | public interface ICodeBlockResolver
method ParseSyntax (line 27) | bool ParseSyntax(InlineCollection inlineCollection, string text, strin...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/IImageResolver.cs
type IImageResolver (line 14) | public interface IImageResolver
method ResolveImageAsync (line 22) | Task<ImageSource> ResolveImageAsync(string url, string tooltip);
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/ILinkRegister.cs
type ILinkRegister (line 14) | public interface ILinkRegister
method RegisterNewHyperLink (line 21) | void RegisterNewHyperLink(Hyperlink newHyperlink, string linkUrl);
method RegisterNewHyperLink (line 29) | void RegisterNewHyperLink(Image newImagelink, string linkUrl, bool isH...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/IRenderContext.cs
type IRenderContext (line 11) | public interface IRenderContext
method Clone (line 27) | IRenderContext Clone();
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/InlineRenderContext.cs
class InlineRenderContext (line 13) | public class InlineRenderContext : RenderContext
method InlineRenderContext (line 15) | internal InlineRenderContext(InlineCollection inlineCollection, IRende...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRenderer.Blocks.cs
class MarkdownRenderer (line 19) | public partial class MarkdownRenderer
method RenderBlocks (line 24) | protected override void RenderBlocks(IEnumerable<MarkdownBlock> blockE...
method RenderParagraph (line 75) | protected override void RenderParagraph(ParagraphBlock element, IRende...
method RenderYamlHeader (line 97) | protected override void RenderYamlHeader(YamlHeaderBlock element, IRen...
method RenderHeader (line 152) | protected override void RenderHeader(HeaderBlock element, IRenderConte...
method RenderListElement (line 223) | protected override void RenderListElement(ListBlock element, IRenderCo...
method RenderHorizontalRule (line 283) | protected override void RenderHorizontalRule(IRenderContext context)
method RenderQuote (line 312) | protected override void RenderQuote(QuoteBlock element, IRenderContext...
method RenderCode (line 350) | protected override void RenderCode(CodeBlock element, IRenderContext c...
method RenderTable (line 411) | protected override void RenderTable(TableBlock element, IRenderContext...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRenderer.Dimensions.cs
class MarkdownRenderer (line 15) | public partial class MarkdownRenderer
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRenderer.Inlines.cs
class MarkdownRenderer (line 19) | public partial class MarkdownRenderer
method RenderEmoji (line 26) | protected override void RenderEmoji(EmojiInline element, IRenderContex...
method RenderTextRun (line 49) | protected override void RenderTextRun(TextRunInline element, IRenderCo...
method InternalRenderTextRun (line 54) | private Run InternalRenderTextRun(TextRunInline element, IRenderContex...
method RenderBoldRun (line 79) | protected override void RenderBoldRun(BoldTextInline element, IRenderC...
method RenderMarkdownLink (line 110) | protected override void RenderMarkdownLink(MarkdownLinkInline element,...
method RenderHyperlink (line 181) | protected override void RenderHyperlink(HyperlinkInline element, IRend...
method RenderImage (line 224) | protected override async void RenderImage(ImageInline element, IRender...
method RenderItalicRun (line 343) | protected override void RenderItalicRun(ItalicTextInline element, IRen...
method RenderStrikethroughRun (line 374) | protected override void RenderStrikethroughRun(StrikethroughTextInline...
method RenderSuperscriptRun (line 425) | protected override void RenderSuperscriptRun(SuperscriptTextInline ele...
method RenderSubscriptRun (line 479) | protected override void RenderSubscriptRun(SubscriptTextInline element...
method RenderCodeRun (line 526) | protected override void RenderCodeRun(CodeInline element, IRenderConte...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRenderer.Properties.cs
class MarkdownRenderer (line 18) | public partial class MarkdownRenderer
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRenderer.cs
class MarkdownRenderer (line 18) | public partial class MarkdownRenderer : MarkdownRendererBase
method MarkdownRenderer (line 27) | public MarkdownRenderer(MarkdownDocument document, ILinkRegister linkR...
method Render (line 40) | public UIElement Render()
method CreateOrReuseRichTextBlock (line 59) | protected RichTextBlock CreateOrReuseRichTextBlock(IRenderContext cont...
method CreateTextBlock (line 96) | protected TextBlock CreateTextBlock(RenderContext context)
method AlterChildRuns (line 117) | protected void AlterChildRuns(Span parentSpan, Action<Span, Run> action)
method AllTextIsSuperscript (line 136) | private bool AllTextIsSuperscript(IInlineContainer container, int supe...
method RemoveSuperscriptRuns (line 171) | private void RemoveSuperscriptRuns(IInlineContainer container, bool in...
method Preventative_PointerWheelChanged (line 203) | private void Preventative_PointerWheelChanged(object sender, Windows.U...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRendererBase.Blocks.cs
class MarkdownRendererBase (line 11) | public partial class MarkdownRendererBase
method RenderParagraph (line 16) | protected abstract void RenderParagraph(ParagraphBlock element, IRende...
method RenderYamlHeader (line 21) | protected abstract void RenderYamlHeader(YamlHeaderBlock element, IRen...
method RenderHeader (line 26) | protected abstract void RenderHeader(HeaderBlock element, IRenderConte...
method RenderListElement (line 31) | protected abstract void RenderListElement(ListBlock element, IRenderCo...
method RenderHorizontalRule (line 36) | protected abstract void RenderHorizontalRule(IRenderContext context);
method RenderQuote (line 41) | protected abstract void RenderQuote(QuoteBlock element, IRenderContext...
method RenderCode (line 46) | protected abstract void RenderCode(CodeBlock element, IRenderContext c...
method RenderTable (line 51) | protected abstract void RenderTable(TableBlock element, IRenderContext...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRendererBase.Inlines.cs
class MarkdownRendererBase (line 11) | public partial class MarkdownRendererBase
method RenderEmoji (line 18) | protected abstract void RenderEmoji(EmojiInline element, IRenderContex...
method RenderTextRun (line 25) | protected abstract void RenderTextRun(TextRunInline element, IRenderCo...
method RenderBoldRun (line 32) | protected abstract void RenderBoldRun(BoldTextInline element, IRenderC...
method RenderMarkdownLink (line 39) | protected abstract void RenderMarkdownLink(MarkdownLinkInline element,...
method RenderImage (line 46) | protected abstract void RenderImage(ImageInline element, IRenderContex...
method RenderHyperlink (line 53) | protected abstract void RenderHyperlink(HyperlinkInline element, IRend...
method RenderItalicRun (line 60) | protected abstract void RenderItalicRun(ItalicTextInline element, IRen...
method RenderStrikethroughRun (line 67) | protected abstract void RenderStrikethroughRun(StrikethroughTextInline...
method RenderSuperscriptRun (line 74) | protected abstract void RenderSuperscriptRun(SuperscriptTextInline ele...
method RenderSubscriptRun (line 81) | protected abstract void RenderSubscriptRun(SubscriptTextInline element...
method RenderCodeRun (line 88) | protected abstract void RenderCodeRun(CodeInline element, IRenderConte...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownRendererBase.cs
class MarkdownRendererBase (line 14) | public abstract partial class MarkdownRendererBase
method MarkdownRendererBase (line 20) | protected MarkdownRendererBase(MarkdownDocument document)
method Render (line 29) | public virtual void Render(IRenderContext context)
method RenderBlocks (line 37) | protected virtual void RenderBlocks(IEnumerable<MarkdownBlock> blockEl...
method RenderBlock (line 48) | protected void RenderBlock(MarkdownBlock element, IRenderContext context)
method RenderInlineChildren (line 93) | protected void RenderInlineChildren(IList<MarkdownInline> inlineElemen...
method RenderInline (line 115) | protected void RenderInline(MarkdownInline element, IRenderContext con...
method CollapseWhitespace (line 169) | protected static string CollapseWhitespace(IRenderContext context, str...
method CheckRenderMarkdownLink (line 209) | protected void CheckRenderMarkdownLink(MarkdownLinkInline element, IRe...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/MarkdownTable.cs
class MarkdownTable (line 20) | internal class MarkdownTable : Panel
method MarkdownTable (line 28) | public MarkdownTable(int columnCount, int rowCount, double borderThick...
method MeasureOverride (line 80) | protected override Size MeasureOverride(Size availableSize)
method ArrangeOverride (line 146) | protected override Size ArrangeOverride(Size finalSize)
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/RenderContext.cs
class RenderContext (line 13) | public abstract class RenderContext : IRenderContext
method Clone (line 32) | public IRenderContext Clone()
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/RenderContextIncorrectException.cs
class RenderContextIncorrectException (line 13) | public class RenderContextIncorrectException : Exception
method RenderContextIncorrectException (line 15) | internal RenderContextIncorrectException() : base("Markdown Render Con...
method RenderContextIncorrectException (line 19) | public RenderContextIncorrectException(string message) : base(message)
method RenderContextIncorrectException (line 23) | public RenderContextIncorrectException(string message, Exception inner...
FILE: src/Notepads.Controls/MarkdownTextBlock/Markdown/Render/UIElementCollectionRenderContext.cs
class UIElementCollectionRenderContext (line 13) | public class UIElementCollectionRenderContext : RenderContext
method UIElementCollectionRenderContext (line 15) | internal UIElementCollectionRenderContext(UIElementCollection blockUIE...
method UIElementCollectionRenderContext (line 20) | internal UIElementCollectionRenderContext(UIElementCollection blockUIE...
FILE: src/Notepads.Controls/MarkdownTextBlock/MarkdownRenderedEventArgs.cs
class MarkdownRenderedEventArgs (line 14) | public class MarkdownRenderedEventArgs : EventArgs
method MarkdownRenderedEventArgs (line 16) | internal MarkdownRenderedEventArgs(Exception ex)
FILE: src/Notepads.Controls/MarkdownTextBlock/MarkdownTextBlock.Dimensions.cs
class MarkdownTextBlock (line 14) | public partial class MarkdownTextBlock
FILE: src/Notepads.Controls/MarkdownTextBlock/MarkdownTextBlock.Events.cs
class MarkdownTextBlock (line 16) | public partial class MarkdownTextBlock
method OnPropertyChangedStatic (line 21) | private static void OnPropertyChangedStatic(DependencyObject d, Depend...
method OnPropertyChanged (line 32) | private void OnPropertyChanged(DependencyObject d, DependencyProperty ...
method Hyperlink_Click (line 40) | private void Hyperlink_Click(Hyperlink sender, HyperlinkClickEventArgs...
method NewImagelink_Tapped (line 48) | private void NewImagelink_Tapped(object sender, Windows.UI.Xaml.Input....
FILE: src/Notepads.Controls/MarkdownTextBlock/MarkdownTextBlock.Methods.cs
class MarkdownTextBlock (line 25) | public partial class MarkdownTextBlock
method SetRenderer (line 31) | public void SetRenderer<T>()
method RenderMarkdown (line 40) | private void RenderMarkdown()
method HookListeners (line 179) | private void HookListeners()
method UnhookListeners (line 197) | private void UnhookListeners()
method RegisterNewHyperLink (line 216) | public void RegisterNewHyperLink(Hyperlink newHyperlink, string linkUrl)
method RegisterNewHyperLink (line 231) | public void RegisterNewHyperLink(Image newImagelink, string linkUrl, b...
method ResolveImageAsync (line 250) | async Task<ImageSource> IImageResolver.ResolveImageAsync(string url, s...
method ParseSyntax (line 294) | bool ICodeBlockResolver.ParseSyntax(InlineCollection inlineCollection,...
method LinkHandled (line 345) | internal async void LinkHandled(string url, bool isHyperlink)
FILE: src/Notepads.Controls/MarkdownTextBlock/MarkdownTextBlock.Properties.cs
class MarkdownTextBlock (line 21) | public partial class MarkdownTextBlock
FILE: src/Notepads.Controls/MarkdownTextBlock/MarkdownTextBlock.cs
class MarkdownTextBlock (line 15) | public partial class MarkdownTextBlock : Control, ILinkRegister, IImageR...
method MarkdownTextBlock (line 34) | public MarkdownTextBlock()
method OnLoaded (line 51) | private void OnLoaded(object sender, RoutedEventArgs e)
method OnUnloaded (line 72) | private void OnUnloaded(object sender, RoutedEventArgs e)
method OnApplyTemplate (line 99) | protected override void OnApplyTemplate()
method RegisterThemeChangedHandler (line 110) | private void RegisterThemeChangedHandler()
FILE: src/Notepads.Controls/SetsView/SetClosingEventArgs.cs
class SetClosingEventArgs (line 12) | public class SetClosingEventArgs : EventArgs
method SetClosingEventArgs (line 19) | public SetClosingEventArgs(object item, SetsViewItem set)
FILE: src/Notepads.Controls/SetsView/SetDraggedOutsideEventArgs.cs
class SetDraggedOutsideEventArgs (line 12) | public class SetDraggedOutsideEventArgs : EventArgs
method SetDraggedOutsideEventArgs (line 19) | public SetDraggedOutsideEventArgs(object item, SetsViewItem set)
FILE: src/Notepads.Controls/SetsView/SetSelectedEventArgs.cs
class SetSelectedEventArgs (line 12) | public class SetSelectedEventArgs : EventArgs
method SetSelectedEventArgs (line 19) | public SetSelectedEventArgs(object item, SetsViewItem set)
FILE: src/Notepads.Controls/SetsView/SetsView.HeaderLayout.cs
class SetsView (line 14) | public partial class SetsView
method GetOriginalWidth (line 17) | private static double GetOriginalWidth(SetsViewItem obj)
method SetOriginalWidth (line 22) | private static void SetOriginalWidth(SetsViewItem obj, double value)
method OnLayoutEffectingPropertyChanged (line 31) | private static void OnLayoutEffectingPropertyChanged(DependencyObject ...
method SetsView_SizeChanged (line 39) | private void SetsView_SizeChanged(object sender, SizeChangedEventArgs e)
method ProvideEqualWidth (line 171) | private double ProvideEqualWidth(SetsViewItem set, double availableWidth)
method ProvideCompactWidth (line 208) | private double ProvideCompactWidth(SetsViewItem set)
FILE: src/Notepads.Controls/SetsView/SetsView.ItemSources.cs
class SetsView (line 15) | public partial class SetsView
method OnItemsChanged (line 21) | protected override void OnItemsChanged(object e)
method ItemContainerGenerator_ItemsChanged (line 43) | private void ItemContainerGenerator_ItemsChanged(object sender, ItemsC...
method SetInitialSelection (line 53) | private void SetInitialSelection()
method FindNextSetIndex (line 72) | private int FindNextSetIndex(int startIndex, int direction)
method ItemsSource_PropertyChanged (line 100) | private void ItemsSource_PropertyChanged(DependencyObject sender, Depe...
FILE: src/Notepads.Controls/SetsView/SetsView.Properties.cs
class SetsView (line 13) | public partial class SetsView
method GetIgnoreColumn (line 228) | public static bool GetIgnoreColumn(ColumnDefinition obj)
method SetIgnoreColumn (line 238) | public static void SetIgnoreColumn(ColumnDefinition obj, bool value)
method GetConstrainColumn (line 255) | public static bool GetConstrainColumn(ColumnDefinition obj)
method SetConstrainColumn (line 265) | public static void SetConstrainColumn(ColumnDefinition obj, bool value)
FILE: src/Notepads.Controls/SetsView/SetsView.cs
class SetsView (line 20) | [TemplatePart(Name = SetsContentPresenterName, Type = typeof(ContentPres...
method SetsView (line 59) | public SetsView()
method GetContainerForItemOverride (line 103) | protected override DependencyObject GetContainerForItemOverride()
method IsItemItsOwnContainerOverride (line 109) | protected override bool IsItemItsOwnContainerOverride(object item)
method OnApplyTemplate (line 115) | protected override void OnApplyTemplate()
method SetsScrollViewer_Loaded (line 147) | private void SetsScrollViewer_Loaded(object sender, RoutedEventArgs e)
method ScrollSetBackButton_Click (line 177) | private void ScrollSetBackButton_Click(object sender, RoutedEventArgs e)
method ScrollSetForwardButton_Click (line 182) | private void ScrollSetForwardButton_Click(object sender, RoutedEventAr...
method SetsView_SelectionChanged (line 187) | private void SetsView_SelectionChanged(object sender, SelectionChanged...
method UpdateSetSeparators (line 224) | private void UpdateSetSeparators()
method SetsContentPresenter_Loaded (line 248) | private void SetsContentPresenter_Loaded(object sender, RoutedEventArg...
method PrepareContainerForItemOverride (line 256) | protected override void PrepareContainerForItemOverride(DependencyObje...
method SetItem_PointerEntered (line 304) | private void SetItem_PointerEntered(object sender, PointerRoutedEventA...
method SetItem_PointerExited (line 319) | private void SetItem_PointerExited(object sender, PointerRoutedEventAr...
method SetsViewItem_DoubleTapped (line 352) | private void SetsViewItem_DoubleTapped(object sender, DoubleTappedRout...
method SetsViewItem_Tapped (line 358) | private void SetsViewItem_Tapped(object sender, TappedRoutedEventArgs e)
method SetsViewItem_Loaded (line 364) | private void SetsViewItem_Loaded(object sender, RoutedEventArgs e)
method SetsViewItem_Closing (line 389) | private void SetsViewItem_Closing(object sender, SetClosingEventArgs e)
method SetsView_DragItemsStarting (line 410) | private void SetsView_DragItemsStarting(object sender, DragItemsStarti...
method SetsView_DragItemsCompleted (line 419) | private void SetsView_DragItemsCompleted(ListViewBase sender, DragItem...
method SetsScrollViewer_ViewChanged (line 461) | private void SetsScrollViewer_ViewChanged(object sender, ScrollViewerV...
method ScrollToLastSet (line 468) | public void ScrollToLastSet()
method ScrollTo (line 473) | public void ScrollTo(double offset)
method UpdateScrollViewerShadows (line 489) | private void UpdateScrollViewerShadows()
method UpdateScrollViewerNavigateButtons (line 528) | private void UpdateScrollViewerNavigateButtons()
FILE: src/Notepads.Controls/SetsView/SetsViewItem.Properties.cs
class SetsViewItem (line 14) | public partial class SetsViewItem
FILE: src/Notepads.Controls/SetsView/SetsViewItem.cs
class SetsViewItem (line 23) | [TemplatePart(Name = SetCloseButtonName, Type = typeof(ButtonBase))]
method SetsViewItem (line 50) | public SetsViewItem()
method ShowLeftSideSeparator (line 60) | public void ShowLeftSideSeparator()
method HideLeftSideSeparator (line 68) | public void HideLeftSideSeparator()
method ShowRightSideSeparator (line 76) | public void ShowRightSideSeparator()
method HideRightSideSeparator (line 84) | public void HideRightSideSeparator()
method OnApplyTemplate (line 93) | protected override void OnApplyTemplate()
method OnPointerPressed (line 115) | protected override void OnPointerPressed(PointerRoutedEventArgs e)
method OnPointerReleased (line 149) | protected override void OnPointerReleased(PointerRoutedEventArgs e)
method PrepareForClosing (line 162) | public void PrepareForClosing()
method Close (line 167) | public void Close()
method SetCloseButton_Click (line 175) | private void SetCloseButton_Click(object sender, RoutedEventArgs e)
FILE: src/Notepads.Controls/SetsView/SetsWidthMode.cs
type SetsWidthMode (line 12) | public enum SetsWidthMode
FILE: src/Notepads/App.xaml.cs
class App (line 28) | public sealed partial class App : Application
method App (line 43) | public App()
method OnLaunched (line 73) | protected override async void OnLaunched(LaunchActivatedEventArgs e)
method OnFileActivated (line 78) | protected override async void OnFileActivated(FileActivatedEventArgs a...
method OnActivated (line 84) | protected override async void OnActivated(IActivatedEventArgs args)
method ActivateAsync (line 90) | private async Task ActivateAsync(IActivatedEventArgs e)
method CreateRootFrame (line 179) | private Frame CreateRootFrame(IActivatedEventArgs e)
method OnNavigationFailed (line 207) | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
method OnSuspending (line 226) | private void OnSuspending(object sender, SuspendingEventArgs args)
method OnUnhandledException (line 247) | private static void OnUnhandledException(object sender, Windows.UI.Xam...
method OnUnobservedException (line 273) | private static void OnUnobservedException(object sender, UnobservedTas...
method ExtendViewIntoTitleBar (line 292) | private static void ExtendViewIntoTitleBar()
FILE: src/Notepads/Brushes/HostBackdropAcrylicBrush.cs
class HostBackdropAcrylicBrush (line 31) | public sealed class HostBackdropAcrylicBrush : XamlCompositionBrushBase,...
method OnTintOpacityChanged (line 46) | private static void OnTintOpacityChanged(DependencyObject dependencyOb...
method OnLuminosityColorChanged (line 80) | private static void OnLuminosityColorChanged(DependencyObject dependen...
method HostBackdropAcrylicBrush (line 120) | public HostBackdropAcrylicBrush()
method OnConnected (line 125) | protected override async void OnConnected()
method BuildInternalAsync (line 134) | private async Task BuildInternalAsync()
method OnEnergySaverStatusChanged (line 167) | private async void OnEnergySaverStatusChanged(object sender, object e)
method OnAdvancedEffectsEnabledChanged (line 175) | private async void OnAdvancedEffectsEnabledChanged(UISettings sender, ...
method OnDisconnected (line 183) | protected override async void OnDisconnected()
method BuildHostBackdropAcrylicBrushInternalAsync (line 198) | private async Task<CompositionBrush> BuildHostBackdropAcrylicBrushInte...
method LoadImageBrushAsync (line 294) | private static async Task<CompositionSurfaceBrush> LoadImageBrushAsync...
method TintOpacityToArithmeticCompositeEffectSourceAmount (line 337) | private static void TintOpacityToArithmeticCompositeEffectSourceAmount...
method Dispose (line 347) | public void Dispose()
FILE: src/Notepads/Commands/CommandHandlerResult.cs
class CommandHandlerResult (line 8) | public class CommandHandlerResult
method CommandHandlerResult (line 10) | public CommandHandlerResult(bool shouldHandle, bool shouldSwallow)
FILE: src/Notepads/Commands/ICommandHandler.cs
type ICommandHandler (line 8) | public interface ICommandHandler<in T>
method Handle (line 10) | CommandHandlerResult Handle(T args);
FILE: src/Notepads/Commands/IKeyboardCommand.cs
type IKeyboardCommand (line 10) | public interface IKeyboardCommand<T>
method Hit (line 12) | bool Hit(bool ctrlDown, bool altDown, bool shiftDown, VirtualKey key);
method ShouldExecute (line 14) | bool ShouldExecute(IKeyboardCommand<T> lastCommand);
method ShouldHandleAfterExecution (line 16) | bool ShouldHandleAfterExecution();
method ShouldSwallowAfterExecution (line 18) | bool ShouldSwallowAfterExecution();
method Execute (line 20) | void Execute(T args);
FILE: src/Notepads/Commands/IMouseCommand.cs
type IMouseCommand (line 8) | public interface IMouseCommand<in T>
method Hit (line 10) | bool Hit(
method ShouldHandleAfterExecution (line 18) | bool ShouldHandleAfterExecution();
method ShouldSwallowAfterExecution (line 20) | bool ShouldSwallowAfterExecution();
method Execute (line 22) | void Execute(T args);
FILE: src/Notepads/Commands/KeyboardCommand.cs
class KeyboardCommand (line 12) | public sealed class KeyboardCommand<T> : IKeyboardCommand<T>
method KeyboardCommand (line 27) | public KeyboardCommand(
method KeyboardCommand (line 36) | public KeyboardCommand(
method KeyboardCommand (line 49) | public KeyboardCommand(
method Hit (line 71) | public bool Hit(bool ctrlDown, bool altDown, bool shiftDown, VirtualKe...
method ShouldExecute (line 76) | public bool ShouldExecute(IKeyboardCommand<T> lastCommand)
method ShouldHandleAfterExecution (line 100) | public bool ShouldHandleAfterExecution()
method ShouldSwallowAfterExecution (line 105) | public bool ShouldSwallowAfterExecution()
method Execute (line 110) | public void Execute(T args)
FILE: src/Notepads/Commands/KeyboardCommandHandler.cs
class KeyboardCommandHandler (line 14) | public sealed class KeyboardCommandHandler : ICommandHandler<KeyRoutedEv...
method KeyboardCommandHandler (line 20) | public KeyboardCommandHandler(ICollection<IKeyboardCommand<KeyRoutedEv...
method Handle (line 25) | public CommandHandlerResult Handle(KeyRoutedEventArgs args)
FILE: src/Notepads/Commands/MouseCommand.cs
class MouseCommand (line 10) | public sealed class MouseCommand<T> : IMouseCommand<T>
method MouseCommand (line 22) | public MouseCommand(
method MouseCommand (line 33) | public MouseCommand(
method Hit (line 55) | public bool Hit(
method ShouldHandleAfterExecution (line 71) | public bool ShouldHandleAfterExecution()
method ShouldSwallowAfterExecution (line 76) | public bool ShouldSwallowAfterExecution()
method Execute (line 81) | public void Execute(T args)
FILE: src/Notepads/Commands/MouseCommandHandler.cs
class MouseCommandHandler (line 14) | public sealed class MouseCommandHandler : ICommandHandler<PointerRoutedE...
method MouseCommandHandler (line 20) | public MouseCommandHandler(ICollection<IMouseCommand<PointerRoutedEven...
method Handle (line 26) | public CommandHandlerResult Handle(PointerRoutedEventArgs args)
FILE: src/Notepads/Controls/Dialog/AppCloseSaveReminderDialog.cs
class AppCloseSaveReminderDialog (line 12) | public sealed class AppCloseSaveReminderDialog : NotepadsDialog
method AppCloseSaveReminderDialog (line 14) | public AppCloseSaveReminderDialog(Action saveAndExitAction, Action dis...
FILE: src/Notepads/Controls/Dialog/FileOpenErrorDialog.cs
class FileOpenErrorDialog (line 8) | public sealed class FileOpenErrorDialog : NotepadsDialog
method FileOpenErrorDialog (line 10) | public FileOpenErrorDialog(string filePath, string errorMsg)
FILE: src/Notepads/Controls/Dialog/FileRenameDialog.cs
class FileRenameDialog (line 18) | public sealed class FileRenameDialog : NotepadsDialog
method FileRenameDialog (line 30) | public FileRenameDialog(string filename, bool fileExists, Action<strin...
method TryRename (line 76) | private bool TryRename()
method OnKeyDown (line 99) | private void OnKeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedE...
method OnTextChanging (line 110) | private void OnTextChanging(TextBox sender, TextBoxTextChangingEventAr...
FILE: src/Notepads/Controls/Dialog/FileSaveErrorDialog.cs
class FileSaveErrorDialog (line 8) | public sealed class FileSaveErrorDialog : NotepadsDialog
method FileSaveErrorDialog (line 10) | public FileSaveErrorDialog(string filePath, string errorMsg)
FILE: src/Notepads/Controls/Dialog/NotepadsDialog.cs
class NotepadsDialog (line 16) | public class NotepadsDialog : ContentDialog
method NotepadsDialog (line 23) | public NotepadsDialog()
method NotepadsDialog_ActualThemeChanged (line 33) | private void NotepadsDialog_ActualThemeChanged(FrameworkElement sender...
method GetButtonStyle (line 42) | internal static Style GetButtonStyle(Color backgroundColor)
FILE: src/Notepads/Controls/Dialog/RevertAllChangesConfirmationDialog.cs
class RevertAllChangesConfirmationDialog (line 10) | public sealed class RevertAllChangesConfirmationDialog : NotepadsDialog
method RevertAllChangesConfirmationDialog (line 12) | public RevertAllChangesConfirmationDialog(string fileNameOrPath, Actio...
FILE: src/Notepads/Controls/Dialog/SessionCorruptionErrorDialog.cs
class SessionCorruptionErrorDialog (line 11) | public sealed class SessionCorruptionErrorDialog : NotepadsDialog
method SessionCorruptionErrorDialog (line 13) | public SessionCorruptionErrorDialog(Action recoveryAction)
FILE: src/Notepads/Controls/Dialog/SetCloseSaveReminderDialog.cs
class SetCloseSaveReminderDialog (line 10) | public sealed class SetCloseSaveReminderDialog : NotepadsDialog
method SetCloseSaveReminderDialog (line 12) | public SetCloseSaveReminderDialog(string fileNameOrPath, Action saveAc...
FILE: src/Notepads/Controls/DiffViewer/BrushFactory.cs
class BrushFactory (line 12) | public sealed class BrushFactory
method GetOrCreateSolidColorBrush (line 16) | public SolidColorBrush GetOrCreateSolidColorBrush(Color color)
FILE: src/Notepads/Controls/DiffViewer/ISideBySideDiffViewer.cs
type ISideBySideDiffViewer (line 10) | public interface ISideBySideDiffViewer
method RenderDiff (line 12) | void RenderDiff(string left, string right, ElementTheme theme);
FILE: src/Notepads/Controls/DiffViewer/RichTextBlockDiffContext.cs
class RichTextBlockDiffContext (line 13) | public class RichTextBlockDiffContext
method RichTextBlockDiffContext (line 23) | public RichTextBlockDiffContext(BrushFactory brushFactory)
method QueuePendingHighlighter (line 31) | public void QueuePendingHighlighter(TextRange textRange, Color backgro...
method AddTextHighlighter (line 39) | public void AddTextHighlighter(TextRange textRange, Color backgroundCo...
method GetTextHighlighters (line 60) | public IList<TextHighlighter> GetTextHighlighters()
method AddOrUpdateTextHighlighterInternal (line 71) | private void AddOrUpdateTextHighlighterInternal(Color backgroundColor,...
FILE: src/Notepads/Controls/DiffViewer/RichTextBlockDiffRenderer.cs
class RichTextBlockDiffRenderer (line 19) | public sealed class RichTextBlockDiffRenderer
method RichTextBlockDiffRenderer (line 27) | public RichTextBlockDiffRenderer()
method GenerateDiffViewData (line 36) | public Tuple<RichTextBlockDiffContext, RichTextBlockDiffContext> Gener...
method RenderDiff (line 56) | private RichTextBlockDiffContext RenderDiff(System.Collections.Generic...
method ConstructModifiedParagraph (line 88) | private Paragraph ConstructModifiedParagraph(Func<OldNew<DiffPiece>, D...
method NewRun (line 115) | private Inline NewRun(RichTextBlockDiffContext richTextBlockData, stri...
method AppendParagraph (line 133) | private void AppendParagraph(RichTextBlockDiffContext richTextBlockDat...
class OldNew (line 156) | private class OldNew<T>
FILE: src/Notepads/Controls/DiffViewer/ScrollViewerSynchronizer.cs
class ScrollViewerSynchronizer (line 16) | public sealed class ScrollViewerSynchronizer : IDisposable
method ScrollViewerSynchronizer (line 24) | public ScrollViewerSynchronizer(List<ScrollViewer> scrollViewers)
method ScrollViewerLoaded (line 31) | private void ScrollViewerLoaded(object sender, RoutedEventArgs e)
method ScrollViewerUnloaded (line 66) | private void ScrollViewerUnloaded(object sender, RoutedEventArgs e)
method VerticalScrollBar_ValueChanged (line 99) | private void VerticalScrollBar_ValueChanged(object sender, RangeBaseVa...
method VerticalScrollBar_Scroll (line 106) | private void VerticalScrollBar_Scroll(object sender, ScrollEventArgs e)
method HorizontalScrollBar_ValueChanged (line 113) | private void HorizontalScrollBar_ValueChanged(object sender, RangeBase...
method HorizontalScrollBar_Scroll (line 120) | private void HorizontalScrollBar_Scroll(object sender, ScrollEventArgs e)
method Scroll (line 127) | private void Scroll(ScrollViewer changedScrollViewer)
method Dispose (line 146) | public void Dispose()
FILE: src/Notepads/Controls/DiffViewer/SideBySideDiffViewer.xaml.cs
class SideBySideDiffViewer (line 23) | public sealed partial class SideBySideDiffViewer : UserControl, ISideByS...
method SideBySideDiffViewer (line 36) | public SideBySideDiffViewer()
method Dispose (line 63) | public void Dispose()
method SideBySideDiffViewer_Loaded (line 82) | private void SideBySideDiffViewer_Loaded(object sender, RoutedEventArg...
method ThemeSettingsService_OnAccentColorChanged (line 87) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
method GetKeyboardCommandHandler (line 96) | private KeyboardCommandHandler GetKeyboardCommandHandler()
method GetMouseCommandHandler (line 111) | private ICommandHandler<PointerRoutedEventArgs> GetMouseCommandHandler()
method ChangeVerticalScrollingBasedOnMouseInput (line 122) | private void ChangeVerticalScrollingBasedOnMouseInput(PointerRoutedEve...
method ChangeHorizontalScrollingBasedOnMouseInput (line 129) | private void ChangeHorizontalScrollingBasedOnMouseInput(PointerRoutedE...
method OnKeyDown (line 135) | private void OnKeyDown(object sender, Windows.UI.Xaml.Input.KeyRoutedE...
method Focus (line 144) | public void Focus()
method StopRenderingAndClearCache (line 149) | public void StopRenderingAndClearCache()
method RenderDiff (line 162) | public void RenderDiff(string left, string right, ElementTheme theme)
method DismissButton_OnClick (line 342) | private void DismissButton_OnClick(object sender, RoutedEventArgs e)
method LeftTextBlockBorder_PointerWheelChanged (line 348) | private void LeftTextBlockBorder_PointerWheelChanged(object sender, Po...
method RightTextBlockBorder_PointerWheelChanged (line 356) | private void RightTextBlockBorder_PointerWheelChanged(object sender, P...
FILE: src/Notepads/Controls/FilePicker/FilePickerFactory.cs
class FilePickerFactory (line 16) | public static class FilePickerFactory
method GetFileOpenPicker (line 42) | public static FileOpenPicker GetFileOpenPicker()
method GetFileSavePicker (line 59) | public static FileSavePicker GetFileSavePicker(ITextEditor textEditor)
FILE: src/Notepads/Controls/FindAndReplace/FindAndReplaceControl.xaml.cs
class FindAndReplaceControl (line 21) | public sealed partial class FindAndReplaceControl : UserControl
method FindAndReplaceControl (line 44) | public FindAndReplaceControl()
method Dispose (line 54) | public void Dispose()
method GetSearchContext (line 60) | private SearchContext GetSearchContext()
method FindAndReplaceControl_Loaded (line 65) | private void FindAndReplaceControl_Loaded(object sender, RoutedEventAr...
method ThemeSettingsService_OnAccentColorChanged (line 70) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
method GetHeight (line 78) | public double GetHeight(bool showReplaceBar)
method SetSelectionHighlightColor (line 90) | private void SetSelectionHighlightColor(Color color)
method Focus (line 98) | public void Focus(string searchString, FindAndReplaceMode mode)
method ShowReplaceBar (line 114) | public void ShowReplaceBar(bool showReplaceBar)
method DismissButton_OnClick (line 137) | private void DismissButton_OnClick(object sender, RoutedEventArgs e)
method FindBar_OnTextChanged (line 142) | private void FindBar_OnTextChanged(object sender, TextChangedEventArgs e)
method SearchForwardButton_OnClick (line 163) | private void SearchForwardButton_OnClick(object sender, RoutedEventArg...
method SearchBackwardButton_OnClick (line 170) | private void SearchBackwardButton_OnClick(object sender, RoutedEventAr...
method FindBar_OnKeyDown (line 177) | private void FindBar_OnKeyDown(object sender, KeyRoutedEventArgs e)
method FindBar_GotFocus (line 200) | private void FindBar_GotFocus(object sender, RoutedEventArgs e)
method FindBar_LostFocus (line 208) | private void FindBar_LostFocus(object sender, RoutedEventArgs e)
method ReplaceBar_OnKeyDown (line 215) | private void ReplaceBar_OnKeyDown(object sender, KeyRoutedEventArgs e)
method ReplaceBar_GotFocus (line 239) | private void ReplaceBar_GotFocus(object sender, RoutedEventArgs e)
method ReplaceBar_LostFocus (line 247) | private void ReplaceBar_LostFocus(object sender, RoutedEventArgs e)
method ReplaceBar_OnTextChanged (line 254) | private void ReplaceBar_OnTextChanged(object sender, TextChangedEventA...
method ReplaceButton_OnClick (line 258) | private void ReplaceButton_OnClick(object sender, RoutedEventArgs e)
method ReplaceAllButton_OnClick (line 263) | private void ReplaceAllButton_OnClick(object sender, RoutedEventArgs e)
method OptionButtonFlyoutItem_OnClick (line 268) | private void OptionButtonFlyoutItem_OnClick(object sender, RoutedEvent...
method FindAndReplaceRootGrid_KeyDown (line 283) | private void FindAndReplaceRootGrid_KeyDown(object sender, KeyRoutedEv...
method ToggleReplaceModeButton_OnClick (line 306) | private void ToggleReplaceModeButton_OnClick(object sender, RoutedEven...
FILE: src/Notepads/Controls/FindAndReplace/FindAndReplaceEventArgs.cs
type FindAndReplaceMode (line 10) | public enum FindAndReplaceMode
type SearchDirection (line 17) | public enum SearchDirection
class FindAndReplaceEventArgs (line 23) | public sealed class FindAndReplaceEventArgs : EventArgs
method FindAndReplaceEventArgs (line 25) | public FindAndReplaceEventArgs(
FILE: src/Notepads/Controls/FindAndReplace/FindAndReplaceTextBox.cs
class FindAndReplaceTextBox (line 14) | public sealed class FindAndReplaceTextBox : TextBox
method OnKeyDown (line 16) | protected override void OnKeyDown(KeyRoutedEventArgs e)
FILE: src/Notepads/Controls/FindAndReplace/SearchContext.cs
class SearchContext (line 8) | public sealed class SearchContext
method SearchContext (line 10) | public SearchContext(
FILE: src/Notepads/Controls/GoTo/GoToControl.xaml.cs
class GoToControl (line 19) | public sealed partial class GoToControl : UserControl
method SetLineData (line 30) | public void SetLineData(int currentLine, int maxLine)
method GoToControl (line 36) | public GoToControl()
method Dispose (line 46) | public void Dispose()
method GoToControl_Loaded (line 52) | private void GoToControl_Loaded(object sender, RoutedEventArgs e)
method ThemeSettingsService_OnAccentColorChanged (line 57) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
method GetHeight (line 65) | public double GetHeight()
method SetSelectionHighlightColor (line 70) | private void SetSelectionHighlightColor(Color color)
method Focus (line 76) | public void Focus()
method GoToBar_OnTextChanged (line 82) | private void GoToBar_OnTextChanged(object sender, TextChangedEventArgs e)
method SearchButton_OnClick (line 87) | private void SearchButton_OnClick(object sender, RoutedEventArgs e)
method GoToBar_OnKeyDown (line 94) | private void GoToBar_OnKeyDown(object sender, KeyRoutedEventArgs e)
method GoToBar_GotFocus (line 107) | private void GoToBar_GotFocus(object sender, RoutedEventArgs e)
method GoToBar_LostFocus (line 113) | private void GoToBar_LostFocus(object sender, RoutedEventArgs e)
method DismissButton_OnClick (line 118) | private void DismissButton_OnClick(object sender, RoutedEventArgs e)
method GoToBar_BeforeTextChanging (line 123) | private void GoToBar_BeforeTextChanging(TextBox sender, TextBoxBeforeT...
method GoToRootGrid_KeyDown (line 139) | private void GoToRootGrid_KeyDown(object sender, KeyRoutedEventArgs e)
FILE: src/Notepads/Controls/GoTo/GoToEventArgs.cs
class GoToEventArgs (line 10) | public sealed class GoToEventArgs : EventArgs
method GoToEventArgs (line 12) | public GoToEventArgs(string searchLine)
FILE: src/Notepads/Controls/Markdown/MarkdownExtensionView.xaml.cs
class MarkdownExtensionView (line 20) | public sealed partial class MarkdownExtensionView : UserControl, IConten...
method MarkdownExtensionView (line 43) | public MarkdownExtensionView()
method OnThemeChanged (line 54) | private async void OnThemeChanged(object sender, ElementTheme theme)
method Dispose (line 62) | public void Dispose()
method MarkdownTextBlock_ImageResolving (line 80) | private async void MarkdownTextBlock_ImageResolving(object sender, Ima...
method GetImageAsync (line 109) | private async Task<ImageSource> GetImageAsync(string url)
method Bind (line 141) | public void Bind(TextEditorCore editorCore)
method OnTextChanged (line 156) | private void OnTextChanged(object sender, RoutedEventArgs e)
method OnTextWrappingChanged (line 164) | private void OnTextWrappingChanged(object sender, TextWrapping textWra...
method OnFontSizeChanged (line 172) | private void OnFontSizeChanged(object sender, double fontSize)
method UpdateFontSize (line 180) | private void UpdateFontSize()
method UpdateText (line 194) | private void UpdateText()
method UpdateTextWrapping (line 203) | private void UpdateTextWrapping()
method MarkdownTextBlock_OnLinkClicked (line 212) | private async void MarkdownTextBlock_OnLinkClicked(object sender, Link...
FILE: src/Notepads/Controls/Print/ContinuationPageFormat.xaml.cs
class ContinuationPageFormat (line 12) | public sealed partial class ContinuationPageFormat : Page
method ContinuationPageFormat (line 14) | public ContinuationPageFormat(RichTextBlockOverflow textLinkContainer,...
FILE: src/Notepads/Controls/Print/PrintArgs.cs
class PrintArgs (line 22) | public static class PrintArgs
method PreparePrintContent (line 84) | public static void PreparePrintContent(ITextEditor[] textEditors)
method RegisterForPrinting (line 120) | public static void RegisterForPrinting(Page sourcePage)
method UnregisterForPrinting (line 139) | public static void UnregisterForPrinting()
method CreatePrintPreviewPages (line 162) | private static void CreatePrintPreviewPages(object sender, PaginateEve...
method AddOnePrintPreviewPage (line 211) | private static RichTextBlockOverflow AddOnePrintPreviewPage(RichTextBl...
method GetPrintPreviewPage (line 303) | private static void GetPrintPreviewPage(object sender, GetPreviewPageE...
method AddPrintPages (line 316) | private static void AddPrintPages(object sender, AddPagesEventArgs e)
method PrintTaskRequested (line 336) | private static void PrintTaskRequested(PrintManager sender, PrintTaskR...
method PrintDetailedOptions_OptionChanged (line 410) | private static async void PrintDetailedOptions_OptionChanged(PrintTask...
method ShowPrintUIAsync (line 485) | public static async Task ShowPrintUIAsync()
FILE: src/Notepads/Controls/Print/PrintPageFormat.xaml.cs
class PrintPageFormat (line 13) | public sealed partial class PrintPageFormat : Page
method PrintPageFormat (line 17) | public PrintPageFormat(string textEditorText, FontFamily textEditorFon...
FILE: src/Notepads/Controls/TextEditor/ITextEditor.cs
type ITextEditor (line 19) | public interface ITextEditor
method Init (line 66) | void Init(TextFile textFile,
method RenameAsync (line 73) | Task RenameAsync(string newFileName);
method GetText (line 75) | string GetText();
method StartCheckingFileStatusPeriodically (line 77) | void StartCheckingFileStatusPeriodically();
method StopCheckingFileStatus (line 79) | void StopCheckingFileStatus();
method GetTextEditorStateMetaData (line 81) | TextEditorStateMetaData GetTextEditorStateMetaData();
method ResetEditorState (line 83) | void ResetEditorState(TextEditorStateMetaData metadata, string newText...
method ReloadFromEditingFileAsync (line 85) | Task ReloadFromEditingFileAsync(Encoding encoding = null);
method GetLineEnding (line 87) | LineEnding GetLineEnding();
method GetEncoding (line 89) | Encoding GetEncoding();
method CopyTextToWindowsClipboard (line 91) | void CopyTextToWindowsClipboard(TextControlCopyingToClipboardEventArgs...
method RevertAllChanges (line 93) | void RevertAllChanges();
method TryChangeEncoding (line 95) | bool TryChangeEncoding(Encoding encoding);
method TryChangeLineEnding (line 97) | bool TryChangeLineEnding(LineEnding lineEnding);
method ShowHideContentPreview (line 99) | void ShowHideContentPreview();
method OpenSideBySideDiffViewer (line 101) | void OpenSideBySideDiffViewer();
method CloseSideBySideDiffViewer (line 103) | void CloseSideBySideDiffViewer();
method GetLineColumnSelection (line 108) | void GetLineColumnSelection(
method GetFontZoomFactor (line 116) | double GetFontZoomFactor();
method SetFontZoomFactor (line 118) | void SetFontZoomFactor(double fontZoomFactor);
method IsEditorEnabled (line 120) | bool IsEditorEnabled();
method SaveContentToFileAndUpdateEditorStateAsync (line 122) | Task SaveContentToFileAndUpdateEditorStateAsync(StorageFile file);
method GetContentForSharing (line 124) | string GetContentForSharing();
method TypeText (line 126) | void TypeText(string text);
method Focus (line 128) | void Focus();
method NoChangesSinceLastSaved (line 130) | bool NoChangesSinceLastSaved(bool compareTextOnly = false);
method ShowFindAndReplaceControl (line 132) | void ShowFindAndReplaceControl(bool showReplaceBar);
method HideFindAndReplaceControl (line 134) | void HideFindAndReplaceControl();
method ShowGoToControl (line 136) | void ShowGoToControl();
method HideGoToControl (line 138) | void HideGoToControl();
method Dispose (line 140) | void Dispose();
method GetContextFlyout (line 142) | FlyoutBase GetContextFlyout();
FILE: src/Notepads/Controls/TextEditor/TextEditor.xaml.cs
type TextEditorMode (line 26) | public enum TextEditorMode
type FileModificationState (line 32) | public enum FileModificationState
class TextEditor (line 39) | public sealed partial class TextEditor : ITextEditor, IDisposable
method UpdateDocumentInfo (line 87) | private void UpdateDocumentInfo()
method TextEditor (line 189) | public TextEditor()
method TextEditor_KeyDown (line 212) | private void TextEditor_KeyDown(object sender, KeyRoutedEventArgs e)
method Dispose (line 218) | public void Dispose()
method ThemeSettingsService_OnThemeChanged (line 279) | private async void ThemeSettingsService_OnThemeChanged(object sender, ...
method RenameAsync (line 294) | public async Task RenameAsync(string newFileName)
method GetText (line 310) | public string GetText()
method GetTextEditorStateMetaData (line 316) | public TextEditorStateMetaData GetTextEditorStateMetaData()
method TextEditor_Loaded (line 353) | private void TextEditor_Loaded(object sender, RoutedEventArgs e)
method TextEditor_Unloaded (line 363) | private void TextEditor_Unloaded(object sender, RoutedEventArgs e)
method StartCheckingFileStatusPeriodically (line 369) | public async void StartCheckingFileStatusPeriodically()
method StopCheckingFileStatus (line 404) | public void StopCheckingFileStatus()
method CheckAndUpdateFileStatusAsync (line 412) | private async Task CheckAndUpdateFileStatusAsync(CancellationToken can...
method GetKeyboardCommandHandler (line 452) | private KeyboardCommandHandler GetKeyboardCommandHandler()
method Init (line 470) | public void Init(TextFile textFile, StorageFile file, bool resetLastSa...
method ReloadFromEditingFileAsync (line 493) | public async Task ReloadFromEditingFileAsync(Encoding encoding = null)
method ResetEditorState (line 509) | public void ResetEditorState(TextEditorStateMetaData metadata, string ...
method RevertAllChanges (line 533) | public void RevertAllChanges()
method TryChangeEncoding (line 539) | public bool TryChangeEncoding(Encoding encoding)
method TryChangeLineEnding (line 561) | public bool TryChangeLineEnding(LineEnding lineEnding)
method GetLineEnding (line 581) | public LineEnding GetLineEnding()
method GetEncoding (line 586) | public Encoding GetEncoding()
method OpenSplitView (line 591) | private void OpenSplitView(IContentPreviewExtension extension)
method CloseSplitView (line 602) | private void CloseSplitView()
method ShowHideContentPreview (line 613) | public void ShowHideContentPreview()
method OpenSideBySideDiffViewer (line 636) | public void OpenSideBySideDiffViewer()
method CloseSideBySideDiffViewer (line 651) | public void CloseSideBySideDiffViewer()
method ShowHideSideBySideDiffViewer (line 663) | private void ShowHideSideBySideDiffViewer()
method GetLineColumnSelection (line 678) | public void GetLineColumnSelection(
method GetFontZoomFactor (line 696) | public double GetFontZoomFactor()
method SetFontZoomFactor (line 701) | public void SetFontZoomFactor(double fontZoomFactor)
method IsEditorEnabled (line 706) | public bool IsEditorEnabled()
method SaveContentToFileAndUpdateEditorStateAsync (line 711) | public async Task SaveContentToFileAndUpdateEditorStateAsync(StorageFi...
method SaveContentToFileAsync (line 721) | private async Task<TextFile> SaveContentToFileAsync(StorageFile file)
method GetContentForSharing (line 731) | public string GetContentForSharing()
method TypeText (line 738) | public void TypeText(string text)
method Focus (line 746) | public void Focus()
method GetContextFlyout (line 758) | public FlyoutBase GetContextFlyout()
method CopyTextToWindowsClipboard (line 763) | public void CopyTextToWindowsClipboard(TextControlCopyingToClipboardEv...
method CutSelectedTextToWindowsClipboard (line 778) | public void CutSelectedTextToWindowsClipboard(TextControlCuttingToClip...
method CopyTextToWindowsClipboardInternal (line 789) | private void CopyTextToWindowsClipboardInternal(bool clearLineSelection)
method NoChangesSinceLastSaved (line 821) | public bool NoChangesSinceLastSaved(bool compareTextOnly = false)
method OnEscapeKeyDown (line 841) | private void OnEscapeKeyDown()
method LoadSplitView (line 860) | private void LoadSplitView()
method LoadSideBySideDiffViewer (line 869) | private void LoadSideBySideDiffViewer()
method SideBySideDiffViewer_OnCloseEvent (line 876) | private void SideBySideDiffViewer_OnCloseEvent(object sender, EventArg...
method SplitPanel_OnKeyDown (line 881) | private void SplitPanel_OnKeyDown(object sender, KeyRoutedEventArgs e)
method TextEditorCore_OnSelectionChanged (line 890) | private void TextEditorCore_OnSelectionChanged(object sender, RoutedEv...
method TextEditorCore_OnFontZoomFactorChanged (line 895) | private void TextEditorCore_OnFontZoomFactorChanged(object sender, dou...
method TextEditorCore_OnKeyDown (line 900) | private void TextEditorCore_OnKeyDown(object sender, KeyRoutedEventArg...
method TextEditorCore_OnTextChanging (line 920) | private void TextEditorCore_OnTextChanging(RichEditBox textEditor, Ric...
method TextEditorCore_CopyTextToWindowsClipboardRequested (line 936) | private void TextEditorCore_CopyTextToWindowsClipboardRequested(object...
method TextEditorCore_CutSelectedTextToWindowsClipboardRequested (line 941) | private void TextEditorCore_CutSelectedTextToWindowsClipboardRequested...
method FindAndReplaceControl_OnToggleReplaceModeButtonClicked (line 946) | private void FindAndReplaceControl_OnToggleReplaceModeButtonClicked(ob...
method ShowFindAndReplaceControl (line 951) | public void ShowFindAndReplaceControl(bool showReplaceBar)
method HideFindAndReplaceControl (line 980) | public void HideFindAndReplaceControl()
method FindAndReplaceControl_OnFindAndReplaceButtonClicked (line 985) | private async void FindAndReplaceControl_OnFindAndReplaceButtonClicked...
method InitiateFindAndReplace (line 1003) | private void InitiateFindAndReplace(FindAndReplaceEventArgs findAndRep...
method FindAndReplacePlaceholder_Closed (line 1059) | private void FindAndReplacePlaceholder_Closed(object sender, InAppNoti...
method FindAndReplaceControl_OnDismissKeyDown (line 1064) | private void FindAndReplaceControl_OnDismissKeyDown(object sender, Rou...
method ShowGoToControl (line 1070) | public void ShowGoToControl()
method HideGoToControl (line 1093) | public void HideGoToControl()
method GoToControl_OnGoToButtonClicked (line 1098) | private void GoToControl_OnGoToButtonClicked(object sender, GoToEventA...
method GoToPlaceholder_Closed (line 1119) | private void GoToPlaceholder_Closed(object sender, InAppNotificationCl...
method GoToControl_OnDismissKeyDown (line 1124) | private void GoToControl_OnDismissKeyDown(object sender, RoutedEventAr...
FILE: src/Notepads/Controls/TextEditor/TextEditorContextFlyout.cs
class TextEditorContextFlyout (line 18) | public sealed class TextEditorContextFlyout : MenuFlyout
method TextEditorContextFlyout (line 40) | public TextEditorContextFlyout(ITextEditor editor, TextEditorCore edit...
method Dispose (line 62) | public void Dispose()
method TextEditorContextFlyout_Opening (line 68) | private void TextEditorContextFlyout_Opening(object sender, object e)
method BuildProofingSubItems (line 104) | private void BuildProofingSubItems(MenuFlyout proofingFlyout)
method TextEditorContextFlyout_Closed (line 124) | private void TextEditorContextFlyout_Closed(object sender, object e)
method PrepareForInsertionMode (line 135) | public void PrepareForInsertionMode()
method PrepareForSelectionMode (line 142) | public void PrepareForSelectionMode()
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.DateTime.cs
class TextEditorCore (line 12) | public partial class TextEditorCore
method InsertDateTimeString (line 16) | private void InsertDateTimeString()
method TryInsertNewLogEntry (line 31) | public void TryInsertNewLogEntry()
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.DuplicateText.cs
class TextEditorCore (line 13) | public partial class TextEditorCore
method DuplicateText (line 15) | private void DuplicateText()
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.ExternalEventListener.cs
class TextEditorCore (line 15) | public partial class TextEditorCore
method HookExternalEvents (line 17) | internal void HookExternalEvents()
method UnhookExternalEvents (line 31) | internal void UnhookExternalEvents()
method EditorSettingsService_OnFontFamilyChanged (line 45) | private async void EditorSettingsService_OnFontFamilyChanged(object se...
method EditorSettingsService_OnFontSizeChanged (line 54) | private async void EditorSettingsService_OnFontSizeChanged(object send...
method EditorSettingsService_OnFontStyleChanged (line 62) | private async void EditorSettingsService_OnFontStyleChanged(object sen...
method EditorSettingsService_OnFontWeightChanged (line 70) | private async void EditorSettingsService_OnFontWeightChanged(object se...
method EditorSettingsService_OnDefaultTextWrappingChanged (line 78) | private async void EditorSettingsService_OnDefaultTextWrappingChanged(...
method EditorSettingsService_OnHighlightMisspelledWordsChanged (line 86) | private async void EditorSettingsService_OnHighlightMisspelledWordsCha...
method EditorSettingsService_OnDefaultDisplayLineNumbersViewStateChanged (line 94) | private async void EditorSettingsService_OnDefaultDisplayLineNumbersVi...
method EditorSettingsService_OnDefaultLineHighlighterViewStateChanged (line 102) | private async void EditorSettingsService_OnDefaultLineHighlighterViewS...
method ThemeSettingsService_OnAccentColorChanged (line 110) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.FindAndReplace.cs
class TextEditorCore (line 14) | public partial class TextEditorCore
method GetSearchString (line 16) | public string GetSearchString()
method TryFindNextAndSelect (line 47) | public bool TryFindNextAndSelect(SearchContext searchContext, bool sto...
method TryFindPreviousAndSelect (line 103) | public bool TryFindPreviousAndSelect(SearchContext searchContext, bool...
method TryFindNextAndReplace (line 167) | public bool TryFindNextAndReplace(SearchContext searchContext, string ...
method TryFindPreviousAndReplace (line 186) | public bool TryFindPreviousAndReplace(SearchContext searchContext, str...
method TryFindAndReplaceAll (line 205) | public bool TryFindAndReplaceAll(SearchContext searchContext, string r...
method TryFindNextAndSelectUsingRegex (line 254) | private bool TryFindNextAndSelectUsingRegex(string content, SearchCont...
method TryFindPreviousAndSelectUsingRegex (line 291) | private bool TryFindPreviousAndSelectUsingRegex(string content, Search...
method TryFindAndReplaceAllUsingRegex (line 328) | private static bool TryFindAndReplaceAllUsingRegex(string content, Sea...
method ApplyTabAndLineEndingFix (line 358) | private static string ApplyTabAndLineEndingFix(string text)
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.FontSize.cs
class TextEditorCore (line 11) | public partial class TextEditorCore
method IncreaseFontSize (line 13) | private void IncreaseFontSize(double delta)
method DecreaseFontSize (line 28) | private void DecreaseFontSize(double delta)
method ResetFontSizeToDefault (line 43) | private void ResetFontSizeToDefault()
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.Indentation.cs
class TextEditorCore (line 11) | public partial class TextEditorCore
method AddIndentation (line 19) | private void AddIndentation(int indent)
method RemoveIndentation (line 98) | private void RemoveIndentation(int indent)
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.JoinText.cs
class TextEditorCore (line 13) | public partial class TextEditorCore
method JoinText (line 26) | private void JoinText()
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.LineHighlighter.cs
class TextEditorCore (line 11) | public partial class TextEditorCore
method UpdateLineHighlighterAndIndicator (line 28) | private void UpdateLineHighlighterAndIndicator()
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.LineNumbers.cs
class TextEditorCore (line 18) | public partial class TextEditorCore
method ShowLineNumbers (line 48) | private void ShowLineNumbers()
method HideLineNumbers (line 59) | private void HideLineNumbers()
method OnLineNumberGridSizeChanged (line 77) | private void OnLineNumberGridSizeChanged(object sender, SizeChangedEve...
method ResetLineNumberCanvasClipping (line 82) | private void ResetLineNumberCanvasClipping()
method UpdateLineNumbersRendering (line 97) | private void UpdateLineNumbersRendering()
method CalculateMinimumRequisiteIntegerTextRenderingWidth (line 131) | private double CalculateMinimumRequisiteIntegerTextRenderingWidth(Font...
method CalculateLineNumberTextRenderingPositions (line 156) | private Dictionary<int, Rect> CalculateLineNumberTextRenderingPosition...
method RenderLineNumbersInternal (line 184) | private void RenderLineNumbersInternal(Dictionary<int, Rect> lineNumbe...
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.MoveText.cs
class TextEditorCore (line 11) | public partial class TextEditorCore
method MoveTextUp (line 13) | private void MoveTextUp()
method MoveTextDown (line 36) | private void MoveTextDown()
method MoveLines (line 59) | private void MoveLines(string document,
method MoveTextLeft (line 104) | private void MoveTextLeft()
method MoveTextRight (line 143) | private void MoveTextRight()
method GetMovingWordsIndexData (line 177) | private Tuple<int, int, int> GetMovingWordsIndexData(string document, ...
method MoveWords (line 211) | private void MoveWords(string document,
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.WebSearch.cs
class TextEditorCore (line 14) | public partial class TextEditorCore
method SearchInWebAsync (line 16) | public async Task SearchInWebAsync()
FILE: src/Notepads/Controls/TextEditor/TextEditorCore.cs
class TextEditorCore (line 26) | [TemplatePart(Name = ContentElementName, Type = typeof(ScrollViewer))]
method TextEditorCore (line 119) | public TextEditorCore()
method OnApplyTemplate (line 162) | protected override void OnApplyTemplate()
method Dispose (line 193) | public void Dispose()
method GetKeyboardCommandHandler (line 241) | private KeyboardCommandHandler GetKeyboardCommandHandler()
method GetMouseCommandHandler (line 290) | private ICommandHandler<PointerRoutedEventArgs> GetMouseCommandHandler()
method OnCoreWindowActivated (line 302) | private void OnCoreWindowActivated(CoreWindow sender, WindowActivatedE...
method OnLoaded (line 311) | private void OnLoaded(object sender, RoutedEventArgs _)
method OnLostFocus (line 331) | private void OnLostFocus(object sender, RoutedEventArgs _)
method OnKeyDown (line 336) | protected override void OnKeyDown(KeyRoutedEventArgs args)
method OnPointerWheelChanged (line 351) | private void OnPointerWheelChanged(object sender, PointerRoutedEventAr...
method OnPaste (line 360) | private async void OnPaste(object sender, TextControlPasteEventArgs args)
method OnCopyingToClipboard (line 365) | private void OnCopyingToClipboard(RichEditBox sender, TextControlCopyi...
method OnCuttingToClipboard (line 370) | private void OnCuttingToClipboard(RichEditBox sender, TextControlCutti...
method OnTextChanging (line 375) | private void OnTextChanging(RichEditBox sender, RichEditBoxTextChangin...
method OnTextChanged (line 385) | private void OnTextChanged(object sender, RoutedEventArgs _)
method OnSelectionChanging (line 390) | private void OnSelectionChanging(RichEditBox sender, RichEditBoxSelect...
method OnContentScrollViewerViewChanging (line 396) | private void OnContentScrollViewerViewChanging(object sender, ScrollVi...
method OnContentScrollViewerViewChanged (line 403) | private void OnContentScrollViewerViewChanged(object sender, ScrollVie...
method OnContentScrollViewerSizeChanged (line 420) | private void OnContentScrollViewerSizeChanged(object sender, SizeChang...
method OnFontSizeChanged (line 425) | private void OnFontSizeChanged(object sender, double _)
method OnSizeChanged (line 430) | private void OnSizeChanged(object sender, SizeChangedEventArgs _)
method OnTextWrappingChanged (line 435) | private void OnTextWrappingChanged(object sender, TextWrapping _)
method OnSelectionChanged (line 442) | private void OnSelectionChanged(object sender, RoutedEventArgs _)
method OnVerticalScrollBarValueChanged (line 447) | private void OnVerticalScrollBarValueChanged(object sender, RangeBaseV...
method OnRootGridSizeChanged (line 456) | private void OnRootGridSizeChanged(object sender, SizeChangedEventArgs _)
method ResetRootGridClipping (line 461) | private void ResetRootGridClipping()
method Undo (line 475) | public void Undo()
method Redo (line 483) | public void Redo()
method SetText (line 491) | public void SetText(string text)
method GetText (line 499) | public string GetText()
method GetSingleLineHeight (line 504) | public double GetSingleLineHeight()
method GetScrollViewerPosition (line 513) | public void GetScrollViewerPosition(out double horizontalOffset, out d...
method GetTextSelectionPosition (line 530) | public void GetTextSelectionPosition(out int startPosition, out int en...
method SetTextSelectionPosition (line 536) | public void SetTextSelectionPosition(int selectionStartPosition, int s...
method SetScrollViewerInitPosition (line 544) | public void SetScrollViewerInitPosition(double horizontalOffset, doubl...
method GetLineColumnSelection (line 553) | public void GetLineColumnSelection(
method GetDocumentLinesCache (line 614) | private string[] GetDocumentLinesCache()
method GetFontZoomFactor (line 625) | public double GetFontZoomFactor()
method SetFontZoomFactor (line 630) | public void SetFontZoomFactor(double fontZoomFactor)
method SmartlyTrimTextSelection (line 637) | public void SmartlyTrimTextSelection()
method PastePlainTextFromWindowsClipboardAsync (line 663) | public async Task PastePlainTextFromWindowsClipboardAsync(TextControlP...
method ClearUndoQueue (line 689) | public void ClearUndoQueue()
method SwitchTextFlowDirection (line 703) | public void SwitchTextFlowDirection(FlowDirection direction)
method GoTo (line 719) | public bool GoTo(int line)
method ResetFocusAndScrollToPreviousPosition (line 733) | public void ResetFocusAndScrollToPreviousPosition()
method SetDefaultTabStopAndLineSpacing (line 739) | private void SetDefaultTabStopAndLineSpacing(FontFamily font, double f...
method EnterWithAutoIndentation (line 747) | private void EnterWithAutoIndentation()
method OnPointerLeftButtonDown (line 757) | private void OnPointerLeftButtonDown(PointerRoutedEventArgs args)
method ChangeZoomingBasedOnMouseInput (line 769) | private void ChangeZoomingBasedOnMouseInput(PointerRoutedEventArgs args)
method ChangeHorizontalScrollingBasedOnMouseInput (line 783) | private void ChangeHorizontalScrollingBasedOnMouseInput(PointerRoutedE...
method TrimRichEditBoxText (line 789) | private static string TrimRichEditBoxText(string text)
method IsSelectionRectInView (line 800) | private bool IsSelectionRectInView(Windows.Foundation.Rect rect, doubl...
method ShowEasterEgg (line 820) | private static void ShowEasterEgg()
FILE: src/Notepads/Controls/TextEditor/TextEditorStateMetaData.cs
class TextEditorStateMetaData (line 8) | public sealed class TextEditorStateMetaData
FILE: src/Notepads/Core/INotepadsCore.cs
type INotepadsCore (line 21) | public interface INotepadsCore
method CreateTextEditorAsync (line 39) | Task<ITextEditor> CreateTextEditorAsync(
method CreateTextEditor (line 45) | ITextEditor CreateTextEditor(
method OpenNewTextEditor (line 52) | void OpenNewTextEditor(string fileNamePlaceholder);
method OpenTextEditor (line 54) | void OpenTextEditor(ITextEditor editor, int atIndex = -1);
method OpenTextEditors (line 56) | void OpenTextEditors(ITextEditor[] editors, Guid? selectedEditorId = n...
method SaveContentToFileAndUpdateEditorStateAsync (line 58) | Task SaveContentToFileAndUpdateEditorStateAsync(ITextEditor textEditor...
method DeleteTextEditor (line 60) | void DeleteTextEditor(ITextEditor textEditor);
method GetNumberOfOpenedTextEditors (line 62) | int GetNumberOfOpenedTextEditors();
method TryGetSharingContent (line 64) | bool TryGetSharingContent(ITextEditor textEditor, out string title, ou...
method HaveUnsavedTextEditor (line 66) | bool HaveUnsavedTextEditor();
method HaveNonemptyTextEditor (line 68) | bool HaveNonemptyTextEditor();
method ChangeLineEnding (line 70) | void ChangeLineEnding(ITextEditor textEditor, LineEnding lineEnding);
method SwitchTo (line 72) | void SwitchTo(bool next);
method SwitchTo (line 74) | void SwitchTo(int index);
method SwitchTo (line 76) | void SwitchTo(ITextEditor textEditor);
method GetSelectedTextEditor (line 78) | ITextEditor GetSelectedTextEditor();
method GetTextEditor (line 80) | ITextEditor GetTextEditor(StorageFile file);
method GetTextEditor (line 82) | ITextEditor GetTextEditor(string editingFilePath);
method GetAllTextEditors (line 84) | ITextEditor[] GetAllTextEditors();
method FocusOnTextEditor (line 86) | void FocusOnTextEditor(ITextEditor textEditor);
method FocusOnSelectedTextEditor (line 88) | void FocusOnSelectedTextEditor();
method CloseTextEditor (line 90) | void CloseTextEditor(ITextEditor textEditor);
method GetTabScrollViewerHorizontalOffset (line 92) | double GetTabScrollViewerHorizontalOffset();
method SetTabScrollViewerHorizontalOffset (line 94) | void SetTabScrollViewerHorizontalOffset(double offset);
FILE: src/Notepads/Core/ISessionManager.cs
type ISessionManager (line 11) | internal interface ISessionManager
method LoadLastSessionAsync (line 15) | Task<int> LoadLastSessionAsync();
method SaveSessionAsync (line 17) | Task SaveSessionAsync(Action actionAfterSaving = null);
method StartSessionBackup (line 19) | void StartSessionBackup(bool startImmediately = false);
method StopSessionBackup (line 21) | void StopSessionBackup();
method ClearSessionDataAsync (line 23) | Task ClearSessionDataAsync();
method RecoverBackupFilesAsync (line 25) | Task<int> RecoverBackupFilesAsync();
method OpenSessionBackupFolderAsync (line 27) | Task OpenSessionBackupFolderAsync();
FILE: src/Notepads/Core/NotepadsCore.cs
class NotepadsCore (line 32) | public class NotepadsCore : INotepadsCore
method NotepadsCore (line 71) | public NotepadsCore(SetsView sets,
method ThemeSettingsService_OnAccentColorChanged (line 92) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
method OpenNewTextEditor (line 105) | public void OpenNewTextEditor(string fileNamePlaceholder)
method OpenTextEditor (line 118) | public void OpenTextEditor(ITextEditor textEditor, int atIndex = -1)
method OpenTextEditors (line 152) | public void OpenTextEditors(ITextEditor[] editors, Guid? selectedEdito...
method CreateTextEditorAsync (line 174) | public async Task<ITextEditor> CreateTextEditorAsync(
method CreateTextEditor (line 184) | public ITextEditor CreateTextEditor(
method SaveContentToFileAndUpdateEditorStateAsync (line 214) | public async Task SaveContentToFileAndUpdateEditorStateAsync(ITextEdit...
method DeleteTextEditor (line 221) | public void DeleteTextEditor(ITextEditor textEditor)
method GetNumberOfOpenedTextEditors (line 251) | public int GetNumberOfOpenedTextEditors()
method TryGetSharingContent (line 256) | public bool TryGetSharingContent(ITextEditor textEditor, out string ti...
method HaveUnsavedTextEditor (line 263) | public bool HaveUnsavedTextEditor()
method HaveNonemptyTextEditor (line 275) | public bool HaveNonemptyTextEditor()
method ChangeLineEnding (line 287) | public void ChangeLineEnding(ITextEditor textEditor, LineEnding lineEn...
method SwitchTo (line 292) | public void SwitchTo(bool next)
method SwitchTo (line 324) | public void SwitchTo(int index)
method SwitchTo (line 330) | public void SwitchTo(ITextEditor textEditor)
method GetSelectedTextEditor (line 340) | public ITextEditor GetSelectedTextEditor()
method GetTextEditor (line 350) | public ITextEditor GetTextEditor(string editingFilePath)
method GetAllTextEditors (line 357) | public ITextEditor[] GetAllTextEditors()
method FocusOnSelectedTextEditor (line 372) | public void FocusOnSelectedTextEditor()
method FocusOnTextEditor (line 377) | public void FocusOnTextEditor(ITextEditor textEditor)
method CloseTextEditor (line 382) | public void CloseTextEditor(ITextEditor textEditor)
method GetTextEditor (line 388) | public ITextEditor GetTextEditor(StorageFile file)
method GetTabScrollViewerHorizontalOffset (line 394) | public double GetTabScrollViewerHorizontalOffset()
method SetTabScrollViewerHorizontalOffset (line 399) | public void SetTabScrollViewerHorizontalOffset(double offset)
method CreateTextEditorSetsViewItem (line 404) | private SetsViewItem CreateTextEditorSetsViewItem(ITextEditor textEditor)
method GetTextEditorSetsViewItem (line 434) | private SetsViewItem GetTextEditorSetsViewItem(StorageFile file)
method GetTextEditorSetsViewItem (line 448) | private SetsViewItem GetTextEditorSetsViewItem(ITextEditor textEditor)
method MarkTextEditorSetNotSaved (line 461) | private void MarkTextEditorSetNotSaved(ITextEditor textEditor)
method MarkTextEditorSetSaved (line 471) | private void MarkTextEditorSetSaved(ITextEditor textEditor)
method SetsView_OnSelectionChanged (line 485) | private void SetsView_OnSelectionChanged(object sender, RoutedEventArg...
method SetsView_OnItemsChanged (line 490) | private void SetsView_OnItemsChanged(object sender, IVectorChangedEven...
method SetsView_OnSetClosing (line 495) | private void SetsView_OnSetClosing(object sender, SetClosingEventArgs e)
method TextEditor_Loaded (line 506) | private void TextEditor_Loaded(object sender, RoutedEventArgs e)
method TextEditor_Unloaded (line 512) | private void TextEditor_Unloaded(object sender, RoutedEventArgs e)
method TextEditor_OnSelectionChanged (line 518) | private void TextEditor_OnSelectionChanged(object sender, EventArgs e)
method TextEditor_OnFontZoomFactorChanged (line 524) | private void TextEditor_OnFontZoomFactorChanged(object sender, EventAr...
method TextEditor_OnEditorModificationStateChanged (line 530) | private void TextEditor_OnEditorModificationStateChanged(object sender...
method TextEditor_OnModeChanged (line 544) | private void TextEditor_OnModeChanged(object sender, EventArgs e)
method TextEditor_OnFileModificationStateChanged (line 550) | private void TextEditor_OnFileModificationStateChanged(object sender, ...
method TextEditor_OnEncodingChanged (line 556) | private void TextEditor_OnEncodingChanged(object sender, EventArgs e)
method TextEditor_OnLineEndingChanged (line 562) | private void TextEditor_OnLineEndingChanged(object sender, EventArgs e)
method TextEditor_OnFileRenamed (line 568) | private void TextEditor_OnFileRenamed(object sender, EventArgs e)
method Sets_DragOver (line 579) | private async void Sets_DragOver(object sender, DragEventArgs args)
method Sets_DragItemsStarting (line 643) | private void Sets_DragItemsStarting(object sender, DragItemsStartingEv...
method Sets_Drop (line 684) | private async void Sets_Drop(object sender, DragEventArgs args)
method Sets_DragItemsCompleted (line 806) | private void Sets_DragItemsCompleted(ListViewBase sender, DragItemsCom...
method Sets_SetDraggedOutside (line 819) | private async void Sets_SetDraggedOutside(object sender, SetDraggedOut...
FILE: src/Notepads/Core/SessionDataModels/NotepadsSessionData.cs
class NotepadsSessionDataV1 (line 11) | internal sealed class NotepadsSessionDataV1
FILE: src/Notepads/Core/SessionDataModels/TextEditorSessionData.cs
class TextEditorSessionDataV1 (line 11) | internal sealed class TextEditorSessionDataV1
FILE: src/Notepads/Core/SessionManager.cs
class SessionDataCorruptedException (line 26) | public sealed class SessionDataCorruptedException : Exception
method SessionDataCorruptedException (line 28) | public SessionDataCorruptedException(string message) : base(message)
class SessionManager (line 33) | internal sealed class SessionManager : ISessionManager, IDisposable
method SessionManager (line 49) | public SessionManager(INotepadsCore notepadsCore, string backupFolderN...
method LoadLastSessionAsync (line 69) | public async Task<int> LoadLastSessionAsync()
method RecoverBackupFilesAsync (line 140) | public async Task<int> RecoverBackupFilesAsync()
method OpenSessionBackupFolderAsync (line 163) | public async Task OpenSessionBackupFolderAsync()
method SaveSessionAsync (line 168) | public async Task SaveSessionAsync(Action actionAfterSaving = null)
method GetTextEditorSessionDataAsync (line 279) | private async Task<TextEditorSessionDataV1> GetTextEditorSessionDataAs...
method BuildTextEditorSessionDataAsync (line 302) | private async Task<TextEditorSessionDataV1> BuildTextEditorSessionData...
method StartSessionBackup (line 366) | public void StartSessionBackup(bool startImmediately = false)
method StopSessionBackup (line 386) | public void StopSessionBackup()
method ClearSessionDataAsync (line 404) | public async Task ClearSessionDataAsync()
method BindEditorContentStateChangeEvent (line 419) | private void BindEditorContentStateChangeEvent(object sender, ITextEdi...
method UnbindEditorContentStateChangeEvent (line 428) | private void UnbindEditorContentStateChangeEvent(object sender, ITextE...
method RecoverTextEditorAsync (line 437) | private async Task<ITextEditor> RecoverTextEditorAsync(TextEditorSessi...
method BackupTextAsync (line 499) | private static async Task<bool> BackupTextAsync(string text, Encoding ...
method DeleteOrphanedBackupFilesAsync (line 515) | private async Task DeleteOrphanedBackupFilesAsync(NotepadsSessionDataV...
method DeleteOrphanedTokensInFutureAccessList (line 541) | private void DeleteOrphanedTokensInFutureAccessList(NotepadsSessionDat...
method ToToken (line 572) | private static string ToToken(Guid textEditorId)
method RemoveTextEditorSessionData (line 577) | private void RemoveTextEditorSessionData(object sender, EventArgs e)
method Dispose (line 585) | public void Dispose()
FILE: src/Notepads/Core/TabContextFlyout.cs
class TabContextFlyout (line 22) | public sealed class TabContextFlyout : MenuFlyout
method TabContextFlyout (line 40) | public TabContextFlyout(INotepadsCore notepadsCore, ITextEditor textEd...
method Dispose (line 63) | public void Dispose()
method TabContextFlyout_Opening (line 69) | private void TabContextFlyout_Opening(object sender, object e)
method TabContextFlyout_Closed (line 90) | private void TabContextFlyout_Closed(object sender, object e)
method ExecuteOnAllTextEditors (line 273) | private void ExecuteOnAllTextEditors(Action<ITextEditor> action)
FILE: src/Notepads/Extensions/DispatcherExtensions.cs
class DispatcherExtensions (line 12) | public static class DispatcherExtensions
method CallOnUIThreadAsync (line 14) | public static async Task CallOnUIThreadAsync(this CoreDispatcher dispa...
FILE: src/Notepads/Extensions/IContentPreviewExtension.cs
type IContentPreviewExtension (line 11) | public interface IContentPreviewExtension : IDisposable
method Bind (line 13) | void Bind(TextEditorCore editor);
FILE: src/Notepads/Extensions/INotepadsExtensionProvider.cs
type INotepadsExtensionProvider (line 10) | public interface INotepadsExtensionProvider
method GetContentPreviewExtension (line 12) | IContentPreviewExtension GetContentPreviewExtension(FileType fileType);
FILE: src/Notepads/Extensions/NotepadsExtensionProvider.cs
class NotepadsExtensionProvider (line 11) | public class NotepadsExtensionProvider : INotepadsExtensionProvider
method GetContentPreviewExtension (line 13) | public IContentPreviewExtension GetContentPreviewExtension(FileType fi...
FILE: src/Notepads/Extensions/ScrollViewerExtensions.cs
type Axis (line 17) | public enum Axis
class ScrollViewerExtensions (line 30) | public static class ScrollViewerExtensions
method StartExpressionAnimation (line 32) | public static ExpressionAnimation StartExpressionAnimation(
method StartExpressionAnimation (line 40) | public static ExpressionAnimation StartExpressionAnimation(
FILE: src/Notepads/Extensions/StringExtensions.cs
class StringExtensions (line 11) | public static class StringExtensions
method LeadingSpacesAndTabs (line 13) | public static string LeadingSpacesAndTabs(this string str)
method IndexOfWholeWord (line 27) | public static int IndexOfWholeWord(this string str, string value, int ...
method LastIndexOfWholeWord (line 49) | public static int LastIndexOfWholeWord(this string str, string value, ...
method ToAppxUri (line 71) | public static Uri ToAppxUri(this string path)
method ContainsAllowableCharactersOnly (line 77) | public static bool ContainsAllowableCharactersOnly(this string str, pa...
FILE: src/Notepads/Models/TextFile.cs
class TextFile (line 11) | public class TextFile
method TextFile (line 13) | public TextFile(string content, Encoding encoding, LineEnding lineEndi...
FILE: src/Notepads/Program.cs
class Program (line 16) | public static class Program
method Main (line 18) | static void Main(string[] args)
method OpenNewInstance (line 81) | private static void OpenNewInstance()
method RedirectOrCreateNewInstance (line 87) | private static void RedirectOrCreateNewInstance()
method GetLastActiveInstance (line 109) | private static AppInstance GetLastActiveInstance()
FILE: src/Notepads/Services/ActivationService.cs
class ActivationService (line 15) | public static class ActivationService
method ActivateAsync (line 17) | public static async Task ActivateAsync(Frame rootFrame, IActivatedEven...
method ProtocolActivated (line 42) | private static void ProtocolActivated(Frame rootFrame, ProtocolActivat...
method LaunchActivated (line 57) | private static void LaunchActivated(Frame rootFrame, LaunchActivatedEv...
method FileActivatedAsync (line 67) | private static async Task FileActivatedAsync(Frame rootFrame, FileActi...
method CommandActivatedAsync (line 82) | private static async Task CommandActivatedAsync(Frame rootFrame, Comma...
FILE: src/Notepads/Services/AnalyticsService.cs
class AnalyticsService (line 12) | public static class AnalyticsService
method AnalyticsService (line 16) | static AnalyticsService()
method TrackEvent (line 29) | public static void TrackEvent(string eventName, IDictionary<string, st...
method TrackError (line 45) | public static void TrackError(Exception exception, IDictionary<string,...
FILE: src/Notepads/Services/AppSettingsService.cs
class AppSettingsService (line 15) | public static class AppSettingsService
method Initialize (line 304) | public static void Initialize()
method InitializeStatusBarSettings (line 335) | private static void InitializeStatusBarSettings()
method InitializeSessionSnapshotSettings (line 347) | private static void InitializeSessionSnapshotSettings()
method InitializeLineEndingSettings (line 371) | private static void InitializeLineEndingSettings()
method InitializeTextWrappingSettings (line 384) | private static void InitializeTextWrappingSettings()
method InitializeSpellingSettings (line 397) | private static void InitializeSpellingSettings()
method InitializeDisplaySettings (line 409) | private static void InitializeDisplaySettings()
method InitializeSmartCopySettings (line 430) | private static void InitializeSmartCopySettings()
method InitializeEncodingSettings (line 442) | private static void InitializeEncodingSettings()
method InitializeDecodingSettings (line 470) | private static void InitializeDecodingSettings()
method InitializeTabIndentsSettings (line 502) | private static void InitializeTabIndentsSettings()
method InitializeSearchEngineSettings (line 514) | private static void InitializeSearchEngineSettings()
method InitializeFontSettings (line 536) | private static void InitializeFontSettings()
method InitializeAppOpeningPreferencesSettings (line 579) | private static void InitializeAppOpeningPreferencesSettings()
method InitializeAppClosingPreferencesSettings (line 591) | private static void InitializeAppClosingPreferencesSettings()
FILE: src/Notepads/Services/FileExtensionProvider.cs
class FileExtensionProvider (line 11) | public static class FileExtensionProvider
method IsFileExtensionSupported (line 204) | public static bool IsFileExtensionSupported(string fileExtension)
FILE: src/Notepads/Services/JumpListService.cs
class JumpListService (line 14) | public static class JumpListService
method UpdateJumpListAsync (line 30) | public static async Task<bool> UpdateJumpListAsync()
method ClearJumpListAsync (line 54) | public static async Task<bool> ClearJumpListAsync()
method GetNewWindowItem (line 72) | private static JumpListItem GetNewWindowItem()
FILE: src/Notepads/Services/LoggingService.cs
class LoggingService (line 19) | public static class LoggingService
method InitializeFileSystemLoggingAsync (line 32) | public static async Task InitializeFileSystemLoggingAsync()
method GetLogFile (line 45) | public static StorageFile GetLogFile()
method LogInfo (line 50) | public static void LogInfo(string message, bool consoleOnly = false)
method LogWarning (line 55) | public static void LogWarning(string message, bool consoleOnly = false)
method LogError (line 60) | public static void LogError(string message, bool consoleOnly = false)
method LogException (line 65) | public static void LogException(Exception ex, bool consoleOnly = false)
method LogMessage (line 75) | private static void LogMessage(string level, string message, bool cons...
method InitializeLogFileWriterBackgroundTaskAsync (line 95) | private static async Task<bool> InitializeLogFileWriterBackgroundTaskA...
method WriteLogMessagesAsync (line 132) | private static async Task WriteLogMessagesAsync()
method TryFlushMessageQueueAsync (line 147) | private static async Task<bool> TryFlushMessageQueueAsync()
FILE: src/Notepads/Services/MRUService.cs
class MRUService (line 14) | public static class MRUService
method TryAdd (line 16) | public static bool TryAdd(IStorageItem item)
method GetMostRecentlyUsedListAsync (line 34) | public static async Task<IList<IStorageItem>> GetMostRecentlyUsedListA...
method ClearAll (line 69) | public static void ClearAll()
FILE: src/Notepads/Services/NotepadsProtocolService.cs
type NotepadsOperationProtocol (line 14) | public enum NotepadsOperationProtocol
class NotepadsProtocolService (line 20) | public static class NotepadsProtocolService
method GetOperationProtocol (line 24) | public static NotepadsOperationProtocol GetOperationProtocol(Uri uri, ...
method LaunchProtocolAsync (line 62) | public static async Task<bool> LaunchProtocolAsync(NotepadsOperationPr...
FILE: src/Notepads/Services/NotificationCenter.cs
class NotificationCenter (line 8) | public class NotificationCenter
method NotificationCenter (line 14) | private NotificationCenter()
method SetNotificationDelegate (line 20) | public void SetNotificationDelegate(INotificationDelegate notification...
method PostNotification (line 25) | public void PostNotification(string notification, int duration)
type INotificationDelegate (line 31) | public interface INotificationDelegate
method PostNotification (line 33) | void PostNotification(string notification, int duration);
FILE: src/Notepads/Services/ThemeSettingsService.cs
class ThemeSettingsService (line 20) | public static class ThemeSettingsService
method Initialize (line 110) | public static void Initialize()
method InitializeAppAccentColor (line 121) | private static void InitializeAppAccentColor()
method InitializeCustomAccentColor (line 145) | private static void InitializeCustomAccentColor()
method UiSettings_ColorValuesChanged (line 157) | private static void UiSettings_ColorValuesChanged(UISettings sender, o...
method InitializeAppBackgroundPanelTintOpacity (line 165) | private static void InitializeAppBackgroundPanelTintOpacity()
method InitializeThemeMode (line 177) | private static void InitializeThemeMode()
method ThemeListener_ThemeChanged (line 204) | private static void ThemeListener_ThemeChanged(ThemeListener sender)
method SetTheme (line 212) | public static void SetTheme(ElementTheme theme)
method SetRequestedTheme (line 222) | public static void SetRequestedTheme(Panel backgroundPanel, UIElement ...
method SetRequestedAccentColor (line 254) | public static void SetRequestedAccentColor()
method ToElementTheme (line 259) | public static ElementTheme ToElementTheme(this ApplicationTheme theme)
method GetAppBackgroundBrush (line 272) | private static Brush GetAppBackgroundBrush(ElementTheme theme)
method ApplyThemeForTitleBarButtons (line 297) | public static void ApplyThemeForTitleBarButtons(ApplicationViewTitleBa...
method UpdateSystemAccentColorAndBrushes (line 337) | private static void UpdateSystemAccentColorAndBrushes(Color color)
FILE: src/Notepads/Settings/ApplicationSettings.cs
class ApplicationSettingsStore (line 12) | public static class ApplicationSettingsStore
method Read (line 14) | public static object Read(string key)
method Write (line 28) | public static void Write(string key, object obj)
method Remove (line 34) | public static bool Remove(string key)
FILE: src/Notepads/Settings/SettingsKey.cs
class SettingsKey (line 8) | internal static class SettingsKey
FILE: src/Notepads/Utilities/BrushUtility.cs
class BrushUtility (line 18) | public static class BrushUtility
method GetHostBackdropAcrylicBrushAsync (line 22) | public static async Task<Brush> GetHostBackdropAcrylicBrushAsync(Color...
FILE: src/Notepads/Utilities/DialogManager.cs
class DialogManager (line 15) | public static class DialogManager
method OpenDialogAsync (line 21) | public static async Task<ContentDialogResult?> OpenDialogAsync(Notepad...
method OpenDialogInternalAsync (line 51) | private static async Task<ContentDialogResult> OpenDialogInternalAsync...
FILE: src/Notepads/Utilities/Downloader.cs
class Downloader (line 12) | public static class Downloader
method GetDataFeedAsync (line 14) | public static async Task<MemoryStream> GetDataFeedAsync(string feedUrl)
FILE: src/Notepads/Utilities/EncodingUtility.cs
class EncodingUtility (line 15) | public static class EncodingUtility
method GetEncodingName (line 70) | public static string GetEncodingName(Encoding encoding)
method GetEncodingNameFallback (line 117) | private static string GetEncodingNameFallback(Encoding encoding)
method Equals (line 149) | public static bool Equals(Encoding p, Encoding q)
method GetEncodingByName (line 169) | public static Encoding GetEncodingByName(string name)
method GetEncodingByNameFallback (line 203) | private static Encoding GetEncodingByNameFallback(string name)
method TryGetSystemDefaultANSIEncoding (line 230) | public static bool TryGetSystemDefaultANSIEncoding(out Encoding encoding)
method TryGetCurrentCultureANSIEncoding (line 257) | public static bool TryGetCurrentCultureANSIEncoding(out Encoding encod...
method GetAllSupportedANSIEncodings (line 284) | public static Encoding[] GetAllSupportedANSIEncodings()
FILE: src/Notepads/Utilities/FileSystemUtility.cs
type InvalidFilenameError (line 23) | public enum InvalidFilenameError
class FileSystemUtility (line 34) | public static class FileSystemUtility
method IsFilenameValid (line 49) | public static bool IsFilenameValid(string filename, out InvalidFilenam...
method IsFullPath (line 94) | public static bool IsFullPath(string path)
method GetAbsolutePath (line 102) | public static String GetAbsolutePath(String basePath, String path)
method OpenFileFromCommandLineAsync (line 125) | public static async Task<StorageFile> OpenFileFromCommandLineAsync(str...
method ReplaceEnvironmentVariables (line 149) | private static string ReplaceEnvironmentVariables(string args)
method GetAbsolutePathFromCommandLine (line 186) | private static string GetAbsolutePathFromCommandLine(string dir, strin...
method RemoveExecutableNameOrPathFromCommandLineArgs (line 243) | private static string RemoveExecutableNameOrPathFromCommandLineArgs(st...
method GetFilePropertiesAsync (line 295) | private static async Task<BasicProperties> GetFilePropertiesAsync(Stor...
method GetDateModifiedAsync (line 300) | public static async Task<long> GetDateModifiedAsync(StorageFile file)
method IsFileReadOnly (line 307) | public static bool IsFileReadOnly(StorageFile file)
method IsFileWritableAsync (line 312) | private static async Task<bool> IsFileWritableAsync(StorageFile file)
method GetFileAsync (line 325) | public static async Task<StorageFile> GetFileAsync(string filePath)
method ReadFileAsync (line 337) | public static async Task<TextFile> ReadFileAsync(string filePath, bool...
method ReadFileAsync (line 343) | public static async Task<TextFile> ReadFileAsync(StorageFile file, boo...
method GetFallBackEncoding (line 394) | private static Encoding GetFallBackEncoding()
method CreateStreamReader (line 410) | private static StreamReader CreateStreamReader(Stream stream, byte[] b...
method TryGuessEncoding (line 442) | public static bool TryGuessEncoding(Stream stream, out Encoding encoding)
method AnalyzeAndGuessEncoding (line 471) | private static Encoding AnalyzeAndGuessEncoding(DetectionResult result)
method HasBom (line 530) | private static bool HasBom(byte[] bom)
method FixUtf8Bom (line 541) | private static Encoding FixUtf8Bom(Encoding encoding, byte[] bom)
method WriteTextToFileAsync (line 566) | public static async Task WriteTextToFileAsync(StorageFile file, string...
method WriteTextToFileAsync (line 605) | public static async Task WriteTextToFileAsync(StorageFile storageFile,...
method ExecuteFileIOOperationWithRetries (line 613) | private static async Task ExecuteFileIOOperationWithRetries(StorageFil...
method GetOrCreateFileAsync (line 695) | public static async Task<StorageFile> GetOrCreateFileAsync(StorageFold...
method DeleteFileAsync (line 712) | internal static async Task DeleteFileAsync(string filePath, StorageDel...
method GetOrCreateAppFolderAsync (line 728) | public static async Task<StorageFolder> GetOrCreateAppFolderAsync(stri...
method CreateFileAsync (line 734) | public static async Task<StorageFile> CreateFileAsync(StorageFolder fo...
method FileExistsAsync (line 739) | public static async Task<bool> FileExistsAsync(StorageFile file)
FILE: src/Notepads/Utilities/FileTypeUtility.cs
type FileType (line 11) | public enum FileType
class FileTypeUtility (line 18) | public static class FileTypeUtility
method GetFileExtension (line 20) | public static string GetFileExtension(string filename)
method GetFileTypeByFileName (line 30) | public static FileType GetFileTypeByFileName(string filename)
method GetFileTypeByFileExtension (line 40) | public static FileType GetFileTypeByFileExtension(string extension)
method IsPreviewSupported (line 68) | public static bool IsPreviewSupported(FileType fileType)
method GetDisplayText (line 78) | public static string GetDisplayText(FileType fileType)
FILE: src/Notepads/Utilities/FontUtility.cs
class FontUtility (line 18) | public static class FontUtility
method IsMonospacedFont (line 120) | public static bool IsMonospacedFont(FontFamily font)
method GetTextSize (line 131) | public static Size GetTextSize(FontFamily font, double fontSize, strin...
method GetSystemFontFamilies (line 138) | public static string[] GetSystemFontFamilies()
FILE: src/Notepads/Utilities/FutureAccessListUtility.cs
class FutureAccessListUtility (line 15) | public static class FutureAccessListUtility
method GetFileFromFutureAccessListAsync (line 17) | public static async Task<StorageFile> GetFileFromFutureAccessListAsync...
method TryAddOrReplaceTokenInFutureAccessListAsync (line 33) | public static async Task<bool> TryAddOrReplaceTokenInFutureAccessListA...
method GetFutureAccessListItemCount (line 56) | private static int GetFutureAccessListItemCount()
FILE: src/Notepads/Utilities/LanguageUtility.cs
class LanguageItem (line 14) | public class LanguageItem
class LanguageUtility (line 33) | public static class LanguageUtility
method GetSupportedLanguageItems (line 37) | public static IReadOnlyCollection<LanguageItem> GetSupportedLanguageIt...
FILE: src/Notepads/Utilities/LineEndingUtility.cs
type LineEnding (line 8) | public enum LineEnding
class LineEndingUtility (line 15) | public static class LineEndingUtility
method GetLineEndingTypeFromText (line 17) | public static LineEnding GetLineEndingTypeFromText(string text)
method GetLineEndingDisplayText (line 37) | public static string GetLineEndingDisplayText(LineEnding lineEnding)
method GetLineEndingName (line 52) | public static string GetLineEndingName(LineEnding lineEnding)
method GetLineEndingByName (line 72) | public static LineEnding GetLineEndingByName(string name)
method ApplyLineEnding (line 92) | public static string ApplyLineEnding(string text, LineEnding lineEnding)
FILE: src/Notepads/Utilities/SearchEngineUtility.cs
type SearchEngine (line 11) | public enum SearchEngine
class SearchEngineUtility (line 19) | public static class SearchEngineUtility
method GetSearchUrlBySearchEngine (line 29) | public static string GetSearchUrlBySearchEngine(SearchEngine searchEng...
FILE: src/Notepads/Utilities/SessionUtility.cs
class SessionUtility (line 16) | internal static class SessionUtility
method GetSessionManager (line 23) | public static ISessionManager GetSessionManager(INotepadsCore notepadC...
method GetSessionManager (line 28) | public static ISessionManager GetSessionManager(INotepadsCore notepadC...
method GetBackupFolderAsync (line 54) | public static async Task<StorageFolder> GetBackupFolderAsync(string ba...
method GetAllFilesInBackupFolderAsync (line 59) | public static async Task<IReadOnlyList<StorageFile>> GetAllFilesInBack...
method IsSessionMetaDataFileExists (line 65) | public static async Task<bool> IsSessionMetaDataFileExists(string sess...
method GetSerializedSessionMetaDataAsync (line 71) | public static async Task<string> GetSerializedSessionMetaDataAsync(str...
method SaveSerializedSessionMetaDataAsync (line 77) | public static async Task SaveSerializedSessionMetaDataAsync(string ser...
method DeleteSerializedSessionMetaDataAsync (line 84) | public static async Task DeleteSerializedSessionMetaDataAsync(string s...
method CreateNewFileInBackupFolderAsync (line 105) | public static async Task<StorageFile> CreateNewFileInBackupFolderAsync...
FILE: src/Notepads/Utilities/ThreadUtility.cs
class ThreadUtility (line 10) | internal static class ThreadUtility
method IsOnUIThread (line 12) | public static bool IsOnUIThread()
FILE: src/Notepads/Views/MainPage/NotepadsMainPage.IO.cs
class NotepadsMainPage (line 21) | public sealed partial class NotepadsMainPage
method OpenNewFilesAsync (line 23) | private async Task OpenNewFilesAsync()
method OpenFileAsync (line 54) | public async Task<bool> OpenFileAsync(StorageFile file, bool rebuildOp...
method TrackFileExtensionIfNotSupported (line 97) | private void TrackFileExtensionIfNotSupported(StorageFile file)
method OpenFilesAsync (line 120) | public async Task<int> OpenFilesAsync(IReadOnlyList<IStorageItem> stor...
method OpenFileUsingFileSavePickerAsync (line 141) | private async Task<StorageFile> OpenFileUsingFileSavePickerAsync(IText...
method SaveInternalAsync (line 149) | private async Task SaveInternalAsync(ITextEditor textEditor, StorageFi...
method SaveAsync (line 159) | private async Task<bool> SaveAsync(ITextEditor textEditor, bool saveAs...
method SaveAllAsync (line 219) | private async Task<bool> SaveAllAsync(ITextEditor[] textEditors)
method RenameFileAsync (line 236) | private async Task RenameFileAsync(ITextEditor textEditor)
method PrintAsync (line 264) | public async Task PrintAsync(ITextEditor textEditor)
method PrintAllAsync (line 271) | public async Task PrintAllAsync(ITextEditor[] textEditors)
method HaveNonemptyTextEditor (line 291) | private static bool HaveNonemptyTextEditor(ITextEditor[] textEditors)
FILE: src/Notepads/Views/MainPage/NotepadsMainPage.MainMenu.cs
class NotepadsMainPage (line 20) | public sealed partial class NotepadsMainPage
method InitializeMainMenu (line 22) | private void InitializeMainMenu()
method MainMenuButtonFlyout_Opening (line 69) | private void MainMenuButtonFlyout_Opening(object sender, object e)
method BuildOpenRecentButtonSubItemsAsync (line 114) | private async Task BuildOpenRecentButtonSubItemsAsync()
FILE: src/Notepads/Views/MainPage/NotepadsMainPage.Notification.cs
class NotepadsMainPage (line 11) | public sealed partial class NotepadsMainPage : INotificationDelegate
method InitializeNotificationCenter (line 13) | private void InitializeNotificationCenter()
method PostNotification (line 18) | public void PostNotification(string message, int duration)
FILE: src/Notepads/Views/MainPage/NotepadsMainPage.StatusBar.cs
class NotepadsMainPage (line 27) | public sealed partial class NotepadsMainPage
method InitializeStatusBar (line 29) | private void InitializeStatusBar()
method SetupStatusBar (line 35) | private void SetupStatusBar(ITextEditor textEditor)
method ShowHideStatusBar (line 49) | public void ShowHideStatusBar(bool showStatusBar)
method OnStatusBarVisibilityChanged (line 71) | private async void OnStatusBarVisibilityChanged(object sender, bool vi...
method UpdateFileModificationStateIndicator (line 79) | private void UpdateFileModificationStateIndicator(ITextEditor textEditor)
method UpdatePathIndicator (line 101) | private void UpdatePathIndicator(ITextEditor textEditor)
method UpdateEditorModificationIndicator (line 120) | private void UpdateEditorModificationIndicator(ITextEditor textEditor)
method UpdateEncodingIndicator (line 137) | private void UpdateEncodingIndicator(Encoding encoding)
method UpdateLineEndingIndicator (line 143) | private void UpdateLineEndingIndicator(LineEnding lineEnding)
method UpdateLineColumnIndicator (line 149) | private void UpdateLineColumnIndicator(ITextEditor textEditor)
method UpdateFontZoomIndicator (line 164) | private void UpdateFontZoomIndicator(ITextEditor textEditor)
method UpdateShadowWindowIndicator (line 172) | private void UpdateShadowWindowIndicator()
method ModificationFlyoutSelection_OnClick (line 182) | private async void ModificationFlyoutSelection_OnClick(object sender, ...
method ReloadFileFromDiskAsync (line 208) | private async void ReloadFileFromDiskAsync(object sender, RoutedEventA...
method CopyFullPath (line 232) | private void CopyFullPath(object sender, RoutedEventArgs e)
method OpenContainingFolderAsync (line 251) | private async void OpenContainingFolderAsync(object sender, RoutedEven...
method RenameFileAsync (line 266) | private async void RenameFileAsync(object sender, RoutedEventArgs e)
method FontZoomIndicatorFlyoutSelection_OnClick (line 273) | private void FontZoomIndicatorFlyoutSelection_OnClick(object sender, R...
method FontZoomSlider_ValueChanged (line 299) | private void FontZoomSlider_ValueChanged(object sender, RangeBaseValue...
method LineEndingSelection_OnClick (line 312) | private void LineEndingSelection_OnClick(object sender, RoutedEventArg...
method StatusBarComponent_OnTapped (line 324) | private void StatusBarComponent_OnTapped(object sender, TappedRoutedEv...
method FileModificationStateIndicatorClicked (line 363) | private void FileModificationStateIndicatorClicked(ITextEditor selecte...
method PathIndicatorClicked (line 375) | private async void PathIndicatorClicked(ITextEditor selectedEditor)
method ModificationIndicatorClicked (line 419) | private void ModificationIndicatorClicked(ITextEditor selectedEditor)
method LineColumnIndicatorClicked (line 427) | private static void LineColumnIndicatorClicked(ITextEditor selectedEdi...
method FontZoomIndicatorClicked (line 432) | private void FontZoomIndicatorClicked(ITextEditor _)
method LineEndingIndicatorClicked (line 438) | private void LineEndingIndicatorClicked(ITextEditor _)
method EncodingIndicatorClicked (line 443) | private void EncodingIndicatorClicked(ITextEditor selectedEditor)
method ShadowWindowIndicatorClicked (line 456) | private void ShadowWindowIndicatorClicked()
method StatusBarFlyout_OnClosing (line 461) | private void StatusBarFlyout_OnClosing(FlyoutBase sender, FlyoutBaseCl...
method BuildEncodingIndicatorFlyout (line 466) | private void BuildEncodingIndicatorFlyout()
method CreateAutoGuessEncodingItem (line 561) | private MenuFlyoutItem CreateAutoGuessEncodingItem()
method AddEncodingItem (line 616) | private void AddEncodingItem(Encoding encoding, MenuFlyoutSubItem reop...
FILE: src/Notepads/Views/MainPage/NotepadsMainPage.Theme.cs
class NotepadsMainPage (line 15) | public sealed partial class NotepadsMainPage
method InitializeThemeSettings (line 17) | private void InitializeThemeSettings()
method ThemeSettingsService_OnAccentColorChanged (line 25) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
method ThemeSettingsService_OnThemeChanged (line 30) | private async void ThemeSettingsService_OnThemeChanged(object sender, ...
method ThemeSettingsService_OnBackgroundChanged (line 38) | private async void ThemeSettingsService_OnBackgroundChanged(object sen...
FILE: src/Notepads/Views/MainPage/NotepadsMainPage.ViewModes.cs
class NotepadsMainPage (line 14) | public sealed partial class NotepadsMainPage
method WindowSizeChanged (line 22) | private void WindowSizeChanged(object sender, Windows.UI.Core.WindowSi...
method EnterExitCompactOverlayMode (line 46) | private static async void EnterExitCompactOverlayMode()
method EnterExitFullScreenMode (line 74) | private void EnterExitFullScreenMode()
method ExitCompactOverlayButton_OnClick (line 99) | private void ExitCompactOverlayButton_OnClick(object sender, RoutedEve...
FILE: src/Notepads/Views/MainPage/NotepadsMainPage.xaml.cs
class NotepadsMainPage (line 35) | public sealed partial class NotepadsMainPage : Page
method NotepadsMainPage (line 86) | public NotepadsMainPage()
method InitializeControls (line 126) | private void InitializeControls()
method InitializeKeyboardShortcuts (line 134) | private void InitializeKeyboardShortcuts()
method OpenNewAppInstanceAsync (line 168) | private static async Task OpenNewAppInstanceAsync()
method OnNavigatedTo (line 179) | protected override void OnNavigatedTo(NavigationEventArgs e)
method Sets_Loaded (line 202) | private async void Sets_Loaded(object sender, RoutedEventArgs e)
method App_EnteredBackground (line 307) | private async void App_EnteredBackground(object sender, Windows.Applic...
method ExecuteProtocol (line 319) | public void ExecuteProtocol(Uri uri)
method CoreWindow_Activated (line 324) | private void CoreWindow_Activated(Windows.UI.Core.CoreWindow sender, W...
method WindowVisibilityChangedEventHandler (line 348) | private void WindowVisibilityChangedEventHandler(System.Object sender,...
method MainPage_DataRequested (line 356) | private void MainPage_DataRequested(DataTransferManager sender, DataRe...
method MainPage_CloseRequested (line 372) | private async void MainPage_CloseRequested(object sender, Windows.UI.C...
method HideAllOpenFlyouts (line 446) | private void HideAllOpenFlyouts()
method OnSessionBackupAndRestoreOptionChanged (line 457) | private async void OnSessionBackupAndRestoreOptionChanged(object sende...
method UpdateApplicationTitle (line 475) | private static void UpdateApplicationTitle(ITextEditor activeTextEditor)
method OnTextEditorLoaded (line 487) | private void OnTextEditorLoaded(object sender, ITextEditor textEditor)
method OnTextEditorUnloaded (line 496) | private async void OnTextEditorUnloaded(object sender, ITextEditor tex...
method OnTextEditorFileModificationStateChanged (line 521) | private void OnTextEditorFileModificationStateChanged(ITextEditor text...
method OnTextEditorSaved (line 535) | private void OnTextEditorSaved(object sender, ITextEditor textEditor)
method OnTextEditorMovedToAnotherAppInstance (line 544) | private void OnTextEditorMovedToAnotherAppInstance(object sender, ITex...
method OnTextEditorClosing (line 553) | private async void OnTextEditorClosing(object sender, ITextEditor text...
method OnTextEditorKeyDown (line 604) | private void OnTextEditorKeyDown(object sender, KeyRoutedEventArgs e)
method OnStorageItemsDropped (line 616) | private async void OnStorageItemsDropped(object sender, IReadOnlyList<...
FILE: src/Notepads/Views/Settings/AboutPage.xaml.cs
class AboutPage (line 16) | public sealed partial class AboutPage : Page
method AboutPage (line 22) | public AboutPage()
method AboutPage_Loaded (line 31) | private void AboutPage_Loaded(object sender, RoutedEventArgs e)
method AboutPage_Unloaded (line 36) | private void AboutPage_Unloaded(object sender, RoutedEventArgs e)
method ThemeSettingsService_OnThemeChanged (line 41) | private async void ThemeSettingsService_OnThemeChanged(object sender, ...
method SetAppIconBasedOnTheme (line 49) | private void SetAppIconBasedOnTheme(ElementTheme theme)
method GetAppVersion (line 61) | private static string GetAppVersion()
FILE: src/Notepads/Views/Settings/AdvancedSettingsPage.xaml.cs
class AdvancedSettingsPage (line 16) | public sealed partial class AdvancedSettingsPage : Page
method AdvancedSettingsPage (line 20) | public AdvancedSettingsPage()
method AdvancedSettings_Loaded (line 57) | private void AdvancedSettings_Loaded(object sender, RoutedEventArgs e)
method AdvancedSettings_Unloaded (line 67) | private void AdvancedSettings_Unloaded(object sender, RoutedEventArgs e)
method EnableSmartCopyToggleSwitch_Toggled (line 77) | private void EnableSmartCopyToggleSwitch_Toggled(object sender, Routed...
method EnableSessionBackupAndRestoreToggleSwitch_Toggled (line 82) | private void EnableSessionBackupAndRestoreToggleSwitch_Toggled(object ...
method ShowStatusBarToggleSwitch_Toggled (line 87) | private void ShowStatusBarToggleSwitch_Toggled(object sender, RoutedEv...
method ExitWhenLastTabClosedToggleSwitch_Toggled (line 92) | private void ExitWhenLastTabClosedToggleSwitch_Toggled(object sender, ...
method AlwaysOpenNewWindowToggleSwitch_Toggled (line 97) | private void AlwaysOpenNewWindowToggleSwitch_Toggled(object sender, Ro...
method LanguagePicker_SelectionChanged (line 102) | private void LanguagePicker_SelectionChanged(object sender, SelectionC...
FILE: src/Notepads/Views/Settings/PersonalizationSettingsPage.xaml.cs
class PersonalizationSettingsPage (line 18) | public sealed partial class PersonalizationSettingsPage : Page
method PersonalizationSettingsPage (line 22) | public PersonalizationSettingsPage()
method ThemeSettingsService_OnAccentColorChanged (line 64) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
method PersonalizationSettings_Loaded (line 75) | private void PersonalizationSettings_Loaded(object sender, RoutedEvent...
method PersonalizationSettings_Unloaded (line 91) | private void PersonalizationSettings_Unloaded(object sender, RoutedEve...
method PowerManager_EnergySaverStatusChanged (line 107) | private async void PowerManager_EnergySaverStatusChanged(object sender...
method UISettings_AdvancedEffectsEnabledChanged (line 116) | private async void UISettings_AdvancedEffectsEnabledChanged(UISettings...
method ThemeRadioButton_OnChecked (line 125) | private void ThemeRadioButton_OnChecked(object sender, RoutedEventArgs e)
method AccentColorPicker_OnColorChanged (line 146) | private void AccentColorPicker_OnColorChanged(ColorPicker sender, Colo...
method BackgroundTintOpacitySlider_OnValueChanged (line 155) | private void BackgroundTintOpacitySlider_OnValueChanged(object sender,...
method WindowsAccentColorToggle_OnToggled (line 160) | private void WindowsAccentColorToggle_OnToggled(object sender, RoutedE...
FILE: src/Notepads/Views/Settings/SettingsPage.xaml.cs
class SettingsPage (line 16) | public sealed partial class SettingsPage : Page
method SettingsPage (line 18) | public SettingsPage()
method SettingsPage_Loaded (line 30) | private void SettingsPage_Loaded(object sender, RoutedEventArgs e)
method SettingsPage_Unloaded (line 40) | private void SettingsPage_Unloaded(object sender, RoutedEventArgs e)
method ThemeSettingsService_OnAccentColorChanged (line 49) | private async void ThemeSettingsService_OnAccentColorChanged(object se...
method ThemeSettingsService_OnThemeChanged (line 54) | private async void ThemeSettingsService_OnThemeChanged(object sender, ...
method OnNavigatedTo (line 62) | protected override void OnNavigatedTo(NavigationEventArgs e)
method SettingsPanel_OnItemInvoked (line 73) | private void SettingsPanel_OnItemInvoked(NavigationView sender, Naviga...
FILE: src/Notepads/Views/Settings/SettingsPanel.xaml.cs
class SettingsPanel (line 13) | public sealed partial class SettingsPanel : Page
method SettingsPanel (line 15) | public SettingsPanel()
method Show (line 20) | public void Show(string title, string tag)
FILE: src/Notepads/Views/Settings/TextAndEditorSettingsPage.xaml.cs
class FontStyleItem (line 20) | public class FontStyleItem
class FontWeightItem (line 27) | public class FontWeightItem
class TextAndEditorSettingsPage (line 34) | public sealed partial class TextAndEditorSettingsPage : Page
method TextAndEditorSettingsPage (line 92) | public TextAndEditorSettingsPage()
method InitializeLineEndingSettings (line 118) | private void InitializeLineEndingSettings()
method InitializeEncodingSettings (line 134) | private void InitializeEncodingSettings()
method InitializeDecodingSettings (line 157) | private void InitializeDecodingSettings()
method InitializeTabIndentationSettings (line 173) | private void InitializeTabIndentationSettings()
method InitializeSearchEngineSettings (line 193) | private void InitializeSearchEngineSettings()
method TextAndEditorSettings_Loaded (line 221) | private void TextAndEditorSettings_Loaded(object sender, RoutedEventAr...
method SearchEngineRadioButton_Checked (line 256) | private void SearchEngineRadioButton_Checked(object sender, RoutedEven...
method TabBehaviorRadioButton_Checked (line 280) | private void TabBehaviorRadioButton_Checked(object sender, RoutedEvent...
method EncodingRadioButton_Checked (line 301) | private void EncodingRadioButton_Checked(object sender, RoutedEventArg...
method DecodingRadioButton_Checked (line 322) | private void DecodingRadioButton_Checked(object sender, RoutedEventArg...
method LineEndingRadioButton_OnChecked (line 351) | private void LineEndingRadioButton_OnChecked(object sender, RoutedEven...
method FontFamilyPicker_OnSelectionChanged (line 369) | private void FontFamilyPicker_OnSelectionChanged(object sender, Select...
method FontSizePicker_OnSelectionChanged (line 377) | private void FontSizePicker_OnSelectionChanged(object sender, Selectio...
method FontStylePicker_OnSelectionChanged (line 382) | private void FontStylePicker_OnSelectionChanged(object sender, Selecti...
method FontWeightPicker_OnSelectionChanged (line 387) | private void FontWeightPicker_OnSelectionChanged(object sender, Select...
method TextWrappingToggle_OnToggled (line 392) | private void TextWrappingToggle_OnToggled(object sender, RoutedEventAr...
method HighlightMisspelledWordsToggle_OnToggled (line 397) | private void HighlightMisspelledWordsToggle_OnToggled(object sender, R...
method LineHighlighterToggle_OnToggled (line 402) | private void LineHighlighterToggle_OnToggled(object sender, RoutedEven...
method LineNumbersToggle_Toggled (line 407) | private void LineNumbersToggle_Toggled(object sender, RoutedEventArgs e)
method CustomSearchUrl_TextChanged (line 412) | private void CustomSearchUrl_TextChanged(object sender, TextChangedEve...
method CustomSearchUrl_LostFocus (line 418) | private void CustomSearchUrl_LostFocus(object sender, RoutedEventArgs e)
method IsValidUrl (line 434) | private static bool IsValidUrl(string url)
method OnCustomSearchEngineSelectionChanged (line 455) | private void OnCustomSearchEngineSelectionChanged(bool selected)
Condensed preview — 365 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,716K chars).
[
{
"path": ".gitattributes",
"chars": 354,
"preview": "# Set the default behavior, in case people don't have core.autocrlf set.\n* text=auto\n\n# Declare files that will always h"
},
{
"path": ".github/FUNDING.yml",
"chars": 556,
"preview": "# These are supported funding model platforms\n\ngithub: 0x7c13\npatreon: # Replace with a single Patreon username\nopen_col"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 593,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: \"[Bug]\"\nlabels: ''\nassignees: ''\n\n---\n\n**Describe "
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 612,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: \"[Feature request]\"\nlabels: ''\nassignees: ''\n\n-"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 726,
"preview": "<!-- Add a brief overview here of the feature/bug & fix. -->\n\n## PR Type\nWhat kind of change does this PR introduce?\n<!-"
},
{
"path": ".github/RELEASE_TEMPLATE/changelog_config.json",
"chars": 446,
"preview": "{\n \"conventionalCommitsParserOptions\": {\n \"revertPattern\": \"/^(?:Revert|revert:)\\\\s\\\"?([\\\\s\\\\S]+?)\\\"?\\\\s*This revert"
},
{
"path": ".github/RELEASE_TEMPLATE/changelog_template.hbs",
"chars": 1942,
"preview": "{{#with release}}\n## [{{name}}]({{href}})\n{{/with}}\n\n{{#commit-list commits heading='### 💥 Breaking Changes' breaking=tr"
},
{
"path": ".github/dependabot.yml",
"chars": 469,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"github-actions\"\n # default location of `.github/workflows`\n directory:"
},
{
"path": ".github/issue_label_bot.yaml",
"chars": 82,
"preview": "label-alias:\n bug: 'bug'\n feature_request: 'enhancement'\n question: 'question'\n"
},
{
"path": ".github/workflows/csa-bulk-dismissal.yml",
"chars": 4399,
"preview": "name: Code scanning alerts bulk dismissal\n\non:\n workflow_run:\n workflows: [ \"Notepads CI/CD Pipeline\" ]\n types:\n "
},
{
"path": ".github/workflows/main.yml",
"chars": 15687,
"preview": "name: Notepads CI/CD Pipeline\n\non:\n push:\n #paths-ignore:\n #- '**.md'\n #- 'ScreenShots/**'\n #- '.whitesourc"
},
{
"path": ".gitignore",
"chars": 5904,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
},
{
"path": ".whitesource",
"chars": 138,
"preview": "{\n \"checkRunSettings\": {\n \"vulnerableCheckRunConclusionLevel\": \"failure\"\n },\n \"issueSettings\": {\n \"minSeverityL"
},
{
"path": "CI-CD_DOCUMENTATION.md",
"chars": 19549,
"preview": "# Notepads CI/CD documentation\n\n- after merging the PR, the first run of the \"Notepads CI/CD Pipeline\" workflow will not"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3355,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 3647,
"preview": "# How to Contribute:\n\nYou can contribute to Notepads project by:\n- Report issues and bugs [here](https://github.com/0x7"
},
{
"path": "LICENSE.txt",
"chars": 1080,
"preview": "MIT License\n\nCopyright (c) 2019-2024 Jackie (Jiaqi) Liu\n\nPermission is hereby granted, free of charge, to any person obt"
},
{
"path": "PRIVACY.md",
"chars": 2438,
"preview": "Privacy Policy \n----------------\n\n### Introduction \nOur privacy policy will help you understand what information we co"
},
{
"path": "README.md",
"chars": 9792,
"preview": "<p align=\"center\">\n <img width=\"128\" align=\"center\" src=\"src/Notepads/Assets/appicon_ws.gif\">\n</p>\n<h1 align=\"center\">\n"
},
{
"path": "azure-pipelines.yml",
"chars": 880,
"preview": "# Universal Windows Platform build definition\n\ntrigger:\n paths:\n exclude:\n - '*.md'\n - 'ScreenShots/'\n - '."
},
{
"path": "src/.editorconfig",
"chars": 17206,
"preview": "# Remove the line below if you want to inherit .editorconfig settings from higher directories\nroot = true\n\n# C# files\n[*"
},
{
"path": "src/Notepads/App.xaml",
"chars": 2640,
"preview": "<Application\r\n x:Class=\"Notepads.App\"\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n xm"
},
{
"path": "src/Notepads/App.xaml.cs",
"chars": 14944,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Brushes/HostBackdropAcrylicBrush.cs",
"chars": 14770,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/CommandHandlerResult.cs",
"chars": 1360,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/ICommandHandler.cs",
"chars": 474,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/IKeyboardCommand.cs",
"chars": 725,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/IMouseCommand.cs",
"chars": 761,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/KeyboardCommand.cs",
"chars": 3573,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/KeyboardCommandHandler.cs",
"chars": 2390,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/MouseCommand.cs",
"chars": 2792,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Commands/MouseCommandHandler.cs",
"chars": 2449,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/AppCloseSaveReminderDialog.cs",
"chars": 1549,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/FileOpenErrorDialog.cs",
"chars": 880,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/FileRenameDialog.cs",
"chars": 6081,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/FileSaveErrorDialog.cs",
"chars": 916,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/NotepadsDialog.cs",
"chars": 2051,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/RevertAllChangesConfirmationDialog.cs",
"chars": 1129,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/SessionCorruptionErrorDialog.cs",
"chars": 1143,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Dialog/SetCloseSaveReminderDialog.cs",
"chars": 1289,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/DiffViewer/BrushFactory.cs",
"chars": 961,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/DiffViewer/ISideBySideDiffViewer.cs",
"chars": 542,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/DiffViewer/RichTextBlockDiffContext.cs",
"chars": 3292,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/DiffViewer/RichTextBlockDiffRenderer.cs",
"chars": 7720,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/DiffViewer/ScrollViewerSynchronizer.cs",
"chars": 7494,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/DiffViewer/SideBySideDiffViewer.xaml",
"chars": 5366,
"preview": "<UserControl\r\n x:Class=\"Notepads.Controls.DiffViewer.SideBySideDiffViewer\"\r\n xmlns=\"http://schemas.microsoft.com/"
},
{
"path": "src/Notepads/Controls/DiffViewer/SideBySideDiffViewer.xaml.cs",
"chars": 14951,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/FilePicker/FilePickerFactory.cs",
"chars": 3809,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/FindAndReplace/FindAndReplaceControl.xaml",
"chars": 11037,
"preview": "<UserControl\r\n x:Class=\"Notepads.Controls.FindAndReplace.FindAndReplaceControl\"\r\n xmlns=\"http://schemas.microsoft"
},
{
"path": "src/Notepads/Controls/FindAndReplace/FindAndReplaceControl.xaml.cs",
"chars": 12511,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/FindAndReplace/FindAndReplaceEventArgs.cs",
"chars": 1342,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/FindAndReplace/FindAndReplacePlaceHolder.xaml",
"chars": 8823,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Controls/FindAndReplace/FindAndReplaceTextBox.cs",
"chars": 1489,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/FindAndReplace/SearchContext.cs",
"chars": 969,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/GoTo/GoToControl.xaml",
"chars": 2691,
"preview": "<UserControl\r\n x:Class=\"Notepads.Controls.GoTo.GoToControl\"\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml"
},
{
"path": "src/Notepads/Controls/GoTo/GoToControl.xaml.cs",
"chars": 5016,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/GoTo/GoToEventArgs.cs",
"chars": 615,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Markdown/MarkdownExtensionView.xaml",
"chars": 1360,
"preview": "<UserControl\r\n x:Class=\"Notepads.Controls.Markdown.MarkdownExtensionView\"\r\n xmlns=\"http://schemas.microsoft.com/w"
},
{
"path": "src/Notepads/Controls/Markdown/MarkdownExtensionView.xaml.cs",
"chars": 8126,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Print/ContinuationPageFormat.xaml",
"chars": 1227,
"preview": "<Page\r\n x:Class=\"Notepads.Controls.Print.ContinuationPageFormat\"\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006"
},
{
"path": "src/Notepads/Controls/Print/ContinuationPageFormat.xaml.cs",
"chars": 2099,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Print/PrintArgs.cs",
"chars": 23710,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/Print/PrintPageFormat.xaml",
"chars": 1632,
"preview": "<Page\r\n x:Class=\"Notepads.Controls.Print.PrintPageFormat\"\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/p"
},
{
"path": "src/Notepads/Controls/Print/PrintPageFormat.xaml.cs",
"chars": 2305,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/ITextEditor.cs",
"chars": 4127,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditor.xaml",
"chars": 11076,
"preview": "<UserControl\r\n x:Class=\"Notepads.Controls.TextEditor.TextEditor\"\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditor.xaml.cs",
"chars": 43516,
"preview": "namespace Notepads.Controls.TextEditor\r\n{\r\n using System;\r\n using System.Collections.Generic;\r\n using System.T"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorContextFlyout.cs",
"chars": 15608,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.DateTime.cs",
"chars": 1885,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.DuplicateText.cs",
"chars": 3086,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.ExternalEventListener.cs",
"chars": 5454,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.FindAndReplace.cs",
"chars": 13833,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.FontSize.cs",
"chars": 1541,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.Indentation.cs",
"chars": 9563,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.JoinText.cs",
"chars": 2769,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.LineHighlighter.cs",
"chars": 3131,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.LineNumbers.cs",
"chars": 10850,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.MoveText.cs",
"chars": 10289,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.WebSearch.cs",
"chars": 2035,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.cs",
"chars": 37134,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorCore.xaml",
"chars": 9011,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Controls/TextEditor/TextEditorStateMetaData.cs",
"chars": 1363,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Core/INotepadsCore.cs",
"chars": 3529,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Core/ISessionManager.cs",
"chars": 873,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Core/NotepadsCore.cs",
"chars": 33192,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Core/SessionDataModels/NotepadsSessionData.cs",
"chars": 799,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Core/SessionDataModels/TextEditorSessionData.cs",
"chars": 921,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Core/SessionManager.cs",
"chars": 25052,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Core/TabContextFlyout.cs",
"chars": 11347,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Extensions/DispatcherExtensions.cs",
"chars": 731,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Extensions/IContentPreviewExtension.cs",
"chars": 592,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Extensions/INotepadsExtensionProvider.cs",
"chars": 540,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Extensions/NotepadsExtensionProvider.cs",
"chars": 863,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Extensions/ScrollViewerExtensions.cs",
"chars": 2076,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Extensions/StringExtensions.cs",
"chars": 2790,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Models/TextFile.cs",
"chars": 974,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Notepads.csproj",
"chars": 22842,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micro"
},
{
"path": "src/Notepads/Package.StoreAssociation.xml",
"chars": 22827,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<StoreAssociation xmlns=\"http://schemas.microsoft.com/appx/2010/storeassociation"
},
{
"path": "src/Notepads/Package.appxmanifest",
"chars": 58759,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10"
},
{
"path": "src/Notepads/Package.targets",
"chars": 3986,
"preview": "<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n <PropertyGroup>\n <!-- Rem"
},
{
"path": "src/Notepads/Program.cs",
"chars": 4999,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Properties/AssemblyInfo.cs",
"chars": 1103,
"preview": "using System.Reflection;\r\nusing System.Runtime.InteropServices;\r\n\r\n// General Information about an assembly is controll"
},
{
"path": "src/Notepads/Properties/Default.rd.xml",
"chars": 1243,
"preview": "<!--\n This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n develope"
},
{
"path": "src/Notepads/Resource/CustomAppBarButtonStyle.xaml",
"chars": 24151,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/CustomCheckBoxStyle.xaml",
"chars": 35978,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/CustomNavigationViewItemStyle.xaml",
"chars": 32970,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/CustomRadioButtonStyle.xaml",
"chars": 15089,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/CustomSliderStyle.xaml",
"chars": 19943,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/CustomSplitViewStyle.xaml",
"chars": 62803,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/CustomToggleSwitchStyle.xaml",
"chars": 24653,
"preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:local"
},
{
"path": "src/Notepads/Resource/DismissButtonStyle.xaml",
"chars": 4971,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/InAppNotificationNoDismissButton.xaml",
"chars": 8568,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Resource/Text Document.txt",
"chars": 0,
"preview": ""
},
{
"path": "src/Notepads/Resource/TransparentTextBoxStyle.xaml",
"chars": 12114,
"preview": "<ResourceDictionary\r\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n xmlns:x=\"http://schema"
},
{
"path": "src/Notepads/Services/ActivationService.cs",
"chars": 4742,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/AnalyticsService.cs",
"chars": 1808,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 2019"
},
{
"path": "src/Notepads/Services/AppSettingsService.cs",
"chars": 21264,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/FileExtensionProvider.cs",
"chars": 6755,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/JumpListService.cs",
"chars": 2790,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/LoggingService.cs",
"chars": 5985,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/MRUService.cs",
"chars": 2950,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/NotepadsProtocolService.cs",
"chars": 3631,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/NotificationCenter.cs",
"chars": 1184,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Services/ThemeSettingsService.cs",
"chars": 15098,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Settings/ApplicationSettings.cs",
"chars": 1656,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Settings/SettingsKey.cs",
"chars": 3146,
"preview": "// ---------------------------------------------------------------------------------------------\r\n// Copyright (c) 201"
},
{
"path": "src/Notepads/Strings/ar-YE/Manifest.resw",
"chars": 19950,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ar-YE/Resources.resw",
"chars": 37536,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ar-YE/Settings.resw",
"chars": 25469,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/bg-BG/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/bg-BG/Resources.resw",
"chars": 38106,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/bg-BG/Settings.resw",
"chars": 26078,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/cs-CZ/Manifest.resw",
"chars": 20323,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/cs-CZ/Resources.resw",
"chars": 37834,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/cs-CZ/Settings.resw",
"chars": 25795,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/de-CH/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/de-CH/Resources.resw",
"chars": 38219,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/de-CH/Settings.resw",
"chars": 26097,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/de-DE/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/de-DE/Resources.resw",
"chars": 38214,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/de-DE/Settings.resw",
"chars": 26109,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/en-US/Manifest.resw",
"chars": 20061,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/en-US/Resources.resw",
"chars": 37544,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/en-US/Settings.resw",
"chars": 25650,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/es-ES/Manifest.resw",
"chars": 20557,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/es-ES/Resources.resw",
"chars": 38192,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/es-ES/Settings.resw",
"chars": 26326,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/fi-FI/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/fi-FI/Resources.resw",
"chars": 38081,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/fi-FI/Settings.resw",
"chars": 26053,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/fr-FR/Manifest.resw",
"chars": 20549,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/fr-FR/Resources.resw",
"chars": 38581,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/fr-FR/Settings.resw",
"chars": 26743,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hi-IN/Manifest.resw",
"chars": 20212,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hi-IN/Resources.resw",
"chars": 37932,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hi-IN/Settings.resw",
"chars": 25879,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hr-HR/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hr-HR/Resources.resw",
"chars": 37910,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hr-HR/Settings.resw",
"chars": 25919,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hu-HU/Manifest.resw",
"chars": 20108,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hu-HU/Resources.resw",
"chars": 38055,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/hu-HU/Settings.resw",
"chars": 25885,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/it-IT/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/it-IT/Resources.resw",
"chars": 38140,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/it-IT/Settings.resw",
"chars": 25595,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/ja-JP/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ja-JP/Resources.resw",
"chars": 36387,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ja-JP/Settings.resw",
"chars": 24535,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ka-GE/Manifest.resw",
"chars": 20062,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ka-GE/Resources.resw",
"chars": 38060,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ka-GE/Settings.resw",
"chars": 26058,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ko-KR/Manifest.resw",
"chars": 19688,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ko-KR/Resources.resw",
"chars": 36395,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ko-KR/Settings.resw",
"chars": 24373,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/nl-NL/Manifest.resw",
"chars": 20366,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/nl-NL/Resources.resw",
"chars": 38063,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/nl-NL/Settings.resw",
"chars": 26250,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/or-IN/Manifest.resw",
"chars": 20252,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/or-IN/Resources.resw",
"chars": 38052,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/or-IN/Settings.resw",
"chars": 25861,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pl-PL/Manifest.resw",
"chars": 20523,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pl-PL/Resources.resw",
"chars": 38166,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pl-PL/Settings.resw",
"chars": 25747,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pt-BR/Manifest.resw",
"chars": 20351,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pt-BR/Resources.resw",
"chars": 38074,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pt-BR/Settings.resw",
"chars": 26137,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pt-PT/Manifest.resw",
"chars": 20648,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pt-PT/Resources.resw",
"chars": 38287,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/pt-PT/Settings.resw",
"chars": 26164,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ru-RU/Manifest.resw",
"chars": 20095,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ru-RU/Resources.resw",
"chars": 38018,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/ru-RU/Settings.resw",
"chars": 25903,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/sr-Latn/Manifest.resw",
"chars": 20453,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/sr-Latn/Resources.resw",
"chars": 37963,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/sr-Latn/Settings.resw",
"chars": 26003,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/sr-cyrl/Manifest.resw",
"chars": 20451,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/sr-cyrl/Resources.resw",
"chars": 37927,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/sr-cyrl/Settings.resw",
"chars": 25960,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n Th"
},
{
"path": "src/Notepads/Strings/tr-TR/Manifest.resw",
"chars": 20365,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
},
{
"path": "src/Notepads/Strings/tr-TR/Resources.resw",
"chars": 37809,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n <!-- \r\n Microsoft ResX Schema \r\n \r\n Version 2.0\r\n \r\n T"
}
]
// ... and 165 more files (download for full content)
About this extraction
This page contains the full source code of the 0x7c13/Notepads GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 365 files (4.2 MB), approximately 1.1M tokens, and a symbol index with 1372 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.