EonaCat.MarkdownEditor
0.0.2
Prefix Reserved
dotnet add package EonaCat.MarkdownEditor --version 0.0.2
NuGet\Install-Package EonaCat.MarkdownEditor -Version 0.0.2
<PackageReference Include="EonaCat.MarkdownEditor" Version="0.0.2" />
<PackageVersion Include="EonaCat.MarkdownEditor" Version="0.0.2" />
<PackageReference Include="EonaCat.MarkdownEditor" />
paket add EonaCat.MarkdownEditor --version 0.0.2
#r "nuget: EonaCat.MarkdownEditor, 0.0.2"
#:package EonaCat.MarkdownEditor@0.0.2
#addin nuget:?package=EonaCat.MarkdownEditor&version=0.0.2
#tool nuget:?package=EonaCat.MarkdownEditor&version=0.0.2
EonaCat.MarkdownEditor
A feature-rich Markdown-to-FlowDocument rendering engine and WPF viewer control for .NET. EonaCat.MarkdownEditor converts Markdown (with several GitHub/Textile-style extensions) into a native WPF FlowDocument, and ships a ready-to-use MarkdownScrollViewer control with syntax-highlighted code blocks, inline HTML, SVG images, emoticons, YAML front matter, theming, and a fully pluggable pipeline.
Installation
dotnet add package EonaCat.MarkdownEditor
Features
- WPF Markdown viewer/editor
- Live FlowDocument rendering
- Markdig-based parsing
- Syntax highlighting
- HTML parser support
- Tables
- Images
- Hyperlinks
- Code blocks
- Lists and task lists
- Block quotes
- Anchors
- Custom commands
- Theme support
- Extensible parser architecture
Basic Usage
Quick start
Add the namespace and drop in the fully-featured viewer (EonaCat.MarkdownEditor.Viewer.MarkdownScrollViewer — this is the variant that enables code highlighting and inline HTML and SVG and YAML metadata):
xml<Window x:Class="MyApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:md="clr-namespace:EonaCat.MarkdownEditor.Viewer;assembly=EonaCat.MarkdownEditor" Title="Markdown demo" Height="600" Width="900">
<md:MarkdownScrollViewer x:Name="Viewer"
MarkdownStyleName="GithubLike"
ClickAction="OpenBrowser" />
</Window>
You can also set the Markdown content declaratively, right inside the XAML, using the HereMarkdown content property (indentation is automatically stripped):
xml<md:MarkdownScrollViewer MarkdownStyleName="Standard"> # Hello, world!
This is **bold**, this is *italic*, and this is `inline code`.
- Item one
- Item two
- Nested item
</md:MarkdownScrollViewer>
Code-behind usage
csharpusing EonaCat.MarkdownEditor.Viewer;
public partial class MainWindow : Window { public MainWindow() { InitializeComponent();
Viewer.Markdown = """
# Release notes
## v0.0.1
- Initial release
- Added **Markdown** rendering
- Added `code` highlighting
> Thanks for trying EonaCat.MarkdownEditor!
""";
}
}
Loading Markdown asynchronously (e.g. after a network/file read):
csharpvar text = await File.ReadAllTextAsync("CHANGELOG.md"); Viewer.Markdown = text;
XAML
<Window
x:Class="MarkdownDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:markdown="clr-namespace:EonaCat.MarkdownEditor;assembly=EonaCat.MarkdownEditor">
<Grid>
<markdown:MarkdownEditor
x:Name="Editor"
Margin="10"/>
</Grid>
</Window>
Load markdown from code:
Editor.Markdown = """
# Hello World
This is **Markdown**.
- Item 1
- Item 2
- Item 3
```csharp
Console.WriteLine("Hello");
""";
---
# MVVM Usage
```xml
<markdown:MarkdownEditor
Markdown="{Binding Document}"
IsReadOnly="{Binding IsReadOnly}" />
public class MainViewModel
{
public string Document { get; set; } = File.ReadAllText("README.md");
public bool IsReadOnly { get; set; }
}
Loading a File
Editor.Markdown = File.ReadAllText("Document.md");
Saving
File.WriteAllText("Document.md", Editor.Markdown);
Creating a New Document
Editor.Markdown = "";
Loading Embedded Resources
using var stream =
Assembly.GetExecutingAssembly()
.GetManifestResourceStream("MyProject.Readme.md");
using var reader = new StreamReader(stream);
Editor.Markdown = reader.ReadToEnd();
Loading from a URL
using var client = new HttpClient();
Editor.Markdown =
await client.GetStringAsync(
"https://raw.githubusercontent.com/user/repo/main/README.md");
Read-Only Mode
<markdown:MarkdownEditor
IsReadOnly="True"/>
Dark Theme
<markdown:MarkdownEditor
Theme="Dark"/>
Light Theme
<markdown:MarkdownEditor
Theme="Light"/>
Binding to Commands
<Button
Command="{Binding SaveCommand}"
Content="Save"/>
SaveCommand = new RelayCommand(() =>
{
File.WriteAllText(
"document.md",
Editor.Markdown);
});
Editing Programmatically
Append text
Editor.Markdown += Environment.NewLine + "New content";
Replace text
Editor.Markdown = "# New document";
Clear
Editor.Markdown = string.Empty;
Supported Markdown
Headings
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
Bold
**Bold**
Italic
*Italic*
Bold Italic
***Bold Italic***
Strike-through
~~Deleted~~
Underline (HTML)
<u>Underline</u>
Links
https://example.com
[Google](https://google.com)
Images

Block Quotes
> Quote
>> Nested Quote
Horizontal Rules
---
***
Bullet Lists
- One
- Two
- Three
Numbered Lists
1. One
2. Two
3. Three
Task Lists
- [x] Done
- [ ] Todo
Tables
| Name | Value |
|------|------|
| A | 1 |
| B | 2 |
Inline Code
`Console.WriteLine()`
Editor:
// Base engine only:
var basic = new EonaCat.MarkdownEditor.Markdown();
// + code highlighting:
var withHl = new EonaCat.MarkdownEditor.Highlighting.Markdown();
// Full feature set (recommended):
var full = new EonaCat.MarkdownEditor.Viewer.Markdown();
Target Frameworks
- .NET Framework 4.8
- .NET 8 Windows
Supported Markdown
- Headers
- Paragraphs
- Bold / Italic
- Lists
- Ordered Lists
- Task Lists
- Tables
- Images
- Links
- HTML
- Code Blocks
- Block Quotes
- Horizontal Rules
Syntax Highlighting
Supports highlighted fenced code blocks through the highlighting extensions.
HTML Support
Includes parsers for buttons, inputs, figures, details, code blocks, images, tables and more.
Extending
Create custom parsers and extensions by implementing the existing parser infrastructure.
MVVM
Quick Start
<markdown:MarkdownScrollViewer
Markdown="{Binding Markdown}" />
Bind the Markdown dependency property directly to your ViewModel.
<markdown:MarkdownScrollViewer Markdown="{Binding Document}" />
<Window xmlns:md="clr-namespace:EonaCat.MarkdownEditor">
</Window>
XAML usage
Add the namespace and drop in the fully-featured viewer (EonaCat.MarkdownEditor.Viewer.MarkdownScrollViewer — this is the variant that enables code highlighting and inline HTML and SVG and YAML metadata):
<Window x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:md="clr-namespace:EonaCat.MarkdownEditor.Viewer;assembly=EonaCat.MarkdownEditor"
Title="Markdown demo" Height="600" Width="900">
<md:MarkdownScrollViewer x:Name="Viewer"
MarkdownStyleName="GithubLike"
ClickAction="OpenBrowser" />
</Window>
You can also set the Markdown content declaratively, right inside the XAML, using the HereMarkdown content property (indentation is automatically stripped):
<md:MarkdownScrollViewer MarkdownStyleName="Standard">
# Hello, world!
This is **bold**, this is *italic*, and this is `inline code`.
- Item one
- Item two
- Nested item
</md:MarkdownScrollViewer>
Code-behind usage
using EonaCat.MarkdownEditor.Viewer;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Viewer.Markdown = """
# Release notes
## v1.0.0
- Initial release
- Added **Markdown** rendering
- Added `code` highlighting
> Thanks for trying EonaCat.MarkdownEditor!
""";
}
}
Loading Markdown asynchronously (e.g. after a network/file read):
var text = await File.ReadAllTextAsync("CHANGELOG.md");
Viewer.Markdown = text;
Class hierarchy
The engine (Markdown) and the viewer (MarkdownScrollViewer) both come in three progressively richer flavors, each adding plugin setups on top of the previous one. Pick the namespace matching the feature set you need — or start from Viewer.* and remove plugins you don't want.
| Namespace | Adds on top of the base | Recommended when |
|---|---|---|
EonaCat.MarkdownEditor.Markdown / MarkdownScrollViewer |
Core Markdown only (headings, emphasis, lists, tables, quotes, rules, images, links) | You want the smallest, most predictable feature set. |
EonaCat.MarkdownEditor.Highlighting.Markdown / MarkdownScrollViewer |
SyntaxHighlightPluginSetup → syntax-highlighted fenced code blocks |
You render technical docs / READMEs with code samples. |
EonaCat.MarkdownEditor.Viewer.Markdown / MarkdownScrollViewer |
MetaDataPluginSetup (YAML front matter) + HtmlPluginSetup (inline HTML) + SvgPluginSetup (SVG images), on top of syntax highlighting |
Default recommendation — the full feature set, used in the examples in this README. |
// Base engine only:
var basic = new EonaCat.MarkdownEditor.Markdown();
// + code highlighting:
var withHl = new EonaCat.MarkdownEditor.Highlighting.Markdown();
// Full feature set (recommended):
var full = new EonaCat.MarkdownEditor.Viewer.Markdown();
Each level lets you AddIfAbsent<TPluginSetup> extra setups, or assign a brand-new Plugins object if you want to compose your own subset from scratch (see The plugin system).
Markdown syntax reference
| Feature | Syntax | Toggle (via SyntaxManager) |
|---|---|---|
| Headings (ATX) | # H1 … ###### H6 |
always on |
| Headings (Setext) | Title\n===== / Subtitle\n----- |
always on |
| Bold / Italic | **bold**, *italic*, ___strict___ (with StrictBoldItalic) |
always on |
| Strikethrough | ~~text~~ |
EnableStrikethrough |
| Inline code | `code` |
always on |
| Fenced code block | ```csharp\ncode\n``` |
always on (highlighting needs Highlighting.*) |
| Indented code block | 4-space indented lines | always on |
| Blockquote | > quoted text |
always on |
| Note block | < note text > |
EnableNoteBlock |
| Unordered/ordered list | -, *, +, 1. (nested with indentation) |
classic vs. EnableListMarkerExt (adds roman numerals, letters, etc.) |
| Table | \| Col A \| Col B \| GFM pipe tables |
EnableTableBlock |
| Horizontal rule | ---, ***, ___ (extended: bold/double variants) |
classic vs. EnableRuleExt |
| Paragraph alignment | p<. left, p=. center, p>. right |
EnableTextAlignment |
| Image |  |
always on |
| Image with size | {width=200px height=100px} |
EnableImageResizeExt — units: px,%,em,ex,mm,cm,in,pt,pc,Q |
| Link | [text](url "title") |
always on |
| Inline HTML | any of the supported tags (see below) | requires Html.HtmlPluginSetup (already in Viewer.*) |
| SVG image |  |
requires Svg.SvgPluginSetup (already in Viewer.*) |
| Emoticon | :smile:, :heart:, :thumbsup:, … |
always on when using Emoticons lookups in your own filter/pre-processing |
| YAML front matter | leading ---\nkey: value\n--- block |
requires MetaData.MetaDataPluginSetup (already in Viewer.*) |
Supported inline HTML tags
a, abbr/acronym, b/strong, bdi, br, cite, del/s/strike, em/i, ins/u, mark, sub, sup, code/kbd/var, plus block-level tags such as div, p, address, article, aside, blockquote, center, footer, h1–h6, ul/ol/li, table/thead/tbody/tr/td/th, details/summary, button, input, textarea, progress/meter, figure, hr, img, and HTML comments.
Example: a fully-featured document
---
title: EonaCat.MarkdownEditor demo
tags: [wpf, markdown, demo]
date: 2026-07-04
---
# EonaCat.MarkdownEditor :rocket:
p=. This paragraph is centered.
## Features
- **Bold**, *italic*, ~~strikethrough~~, `inline code`
- Nested lists
1. First
2. Second
- Task-style progress: <progress value="70" max="100"></progress>
> A classic blockquote.
< This is a note block, rendered with the NoteStyle. >
| Language | Highlighted |
|----------|:-----------:|
| C# | ✅ |
| Python | ✅ |
```csharp
public class Example
{
public void Run() => Console.WriteLine("Hello, EonaCat!");
}
```
{width=128px}
Jump to the [features](#features) section.
Styling & themes
MarkdownStyle bundles six ready-made Style resources for the FlowDocument, applied via MarkdownStyleName (string) or MarkdownStyle (Style object):
<md:MarkdownScrollViewer MarkdownStyleName="GithubLike" />
Viewer.MarkdownStyle = EonaCat.MarkdownEditor.MarkdownStyle.Compact;
// or by name:
Viewer.MarkdownStyleName = nameof(EonaCat.MarkdownEditor.MarkdownStyle.Sasabune);
Available styles: Standard, Compact, GithubLike, Sasabune, SasabuneStandard, SasabuneCompact.
You can also override the style of individual element types on the Markdown engine directly (see Per-element style overrides), or supply your own Style targeting FlowDocument/Paragraph/etc. and pass it through MarkdownStyle.
Dark mode
MarkdownScrollViewer.IsDarkTheme is auto-detected from the Windows "Apps use light theme" registry setting on construction, and kept in sync automatically as the OS setting changes (SystemEvents.UserPreferenceChanged). You can also set it explicitly:
Viewer.IsDarkTheme = true; // force dark colors regardless of OS setting
Colors are applied through MarkdownThemeProperties, a set of inheritable attached properties (BackgroundColor, ForegroundColor, Heading1Color…Heading4Color, CodeForeground, CodeBackground, CodeBorderColor, BlockquoteBorderColor, NoteBackgroundColor, NoteBorderColor, LinkColor, LinkHoverColor, TableBorderColor, TableHeaderBackground, TableEvenRowBackground). Override any of them from XAML to customize a single color without replacing the whole style:
<md:MarkdownScrollViewer
md:MarkdownThemeProperties.LinkColor="#FF00A2FF"
md:MarkdownThemeProperties.CodeBackground="#FF1B1B1B" />
Hyperlinks & click behavior
Set ClickAction on the viewer to control what happens when a link is clicked:
Viewer.ClickAction = EonaCat.MarkdownEditor.ClickAction.SafetyOpenBrowser;
ClickAction value |
Behavior |
|---|---|
None |
No built-in handling. |
OpenBrowser |
Opens the link with the OS shell (Process.Start). |
SafetyOpenBrowser |
Same, but blocks known dangerous extensions (.exe, .dll, .bat, .ps1, …) and prompts for confirmation before opening local files. |
DisplayWithRelativePath |
Loads the linked Markdown/text file into the same viewer, resolved relative to the current document. |
DisplayAll |
Same, but resolves against the absolute path. |
SafetyDisplayWithRelativePath |
DisplayWithRelativePath + the same dangerous-extension safety checks. |
HighlightOnly |
Clicking does nothing except visually indicate the link was clicked (no navigation at all). |
#fragment links (e.g. [Jump](#features)) are always intercepted and scrolled to in-document, regardless of ClickAction, as long as a matching heading/anchor exists.
For full control, assign a custom ICommand instead:
Viewer.HyperlinkCommand = new MyOwnLinkCommand();
Viewer.OnHyperLinkClicked = (sender, link) =>
{
Debug.WriteLine($"Clicked: {link}");
};
Code blocks & syntax highlighting
When using Highlighting.* or Viewer.*, fenced code blocks render inside a read-only, syntax-highlighted EonaCat.Editor.TextEditor:
```csharp
Console.WriteLine("Hello!");
```
Built-in language aliases include: csharp/c#, c++, html, javascript, markdown, powershell/posh, python, tsql, boo, coco, asp/xhtml.
Registering a custom highlighting definition
using EonaCat.MarkdownEditor.Plugins;
var plugins = viewer.Plugins ?? new MarkdownEditorPlugins();
plugins.Highlights.Add(new Definition
{
Alias = "myLang",
RealName = "MyLang",
Resource = new Uri("pack://application:,,,/Resources/MyLang.xshd")
});
viewer.Plugins = plugins;
Then reference it in Markdown with:
```myLang
your code here
```
Mouse-wheel scrolling inside a code block scrolls the code editor horizontally when <kbd>Shift</kbd> is held, and bubbles up to the outer scroll viewer otherwise. Each code block also gets its own Copy/Select-All context menu (disable via DisabledContextMenu).
Images (bitmap, SVG, resizing, lazy load)
- Standard raster images (
png,jpg,bmp,gif, …) load via the built-in WPFBitmapImagepipeline. .svgimages are handled bySvg.SvgImageLoader(included inViewer.*), which rasterizes the SVG to aBitmapImageat its intrinsic size.- Large/remote images download lazily by default; disable with
DisabledLazyLoad = trueif you want everything loaded eagerly up-front. - Resize any image inline:
{width=400px}
{width=32px height=32px}
{width=100%}
Supported size units: px, %, em, ex, mm, cm, in, pt, pc, Q.
Relative image/link paths are resolved against AssetPathRoot (defaults to Environment.CurrentDirectory, and is auto-updated whenever you Open/Source a file so that sibling assets resolve correctly).
Inline HTML support
Because Html.HtmlPluginSetup is included in Viewer.*, you can freely mix raw HTML into your Markdown — useful for things Markdown itself doesn't express well, such as collapsible sections or inline progress bars:
<details>
<summary>Click to expand</summary>
Hidden content goes here — **Markdown works inside too**.
</details>
<div style="text-align:center">
<b>Centered, bold HTML block</b>
</div>
Progress: <progress value="42" max="100"></progress>
Note: enabling the HTML plugin turns off the library's own
< note >block syntax (EnableNoteBlockis set tofalsebyHtmlPluginSetup) because<starts an HTML tag in that mode.
Emoticons
The Emoticons static class exposes a large bundled shortcode → emoji table (e.g. grinning, heart_eyes, thumbsup, rocket, …), loaded from an embedded resource. Use it directly if you're writing your own pre-processing filter or inline parser:
using EonaCat.MarkdownEditor;
Emoticons.OnError += (s, ex) => Debug.WriteLine($"Emoticons failed to load: {ex}");
// look up / iterate the table as needed inside a custom IFilter or IInlineParser
YAML front matter (metadata)
When using Viewer.*, a leading YAML block is stripped from the rendered body and parsed with YamlDotNet:
---
title: My Document
author: Jeroen Saey
tags: [wpf, markdown]
---
# Body content starts here
Read the parsed metadata back off the resulting FlowDocument (or the viewer, once arranged):
using EonaCat.MarkdownEditor.MetaData;
if (MetaData.GetMetaDataDic(Viewer) is { } metadata)
{
var title = metadata["title"]; // "My Document"
var tags = metadata["tags"]; // List<object> { "wpf", "markdown" }
}
In-document anchors & the Fragment/Source API
Every heading gets an automatically generated, collision-safe anchor (duplicate heading text gets -1, -2, … suffixes). Link to it from anywhere in the document:
See the [Installation](#installation) section.
Programmatically scroll to a fragment:
Viewer.Fragment = "#installation";
or bind the whole thing to a URI, including remote/http(s) and WPF pack URIs:
Viewer.Source = new Uri("https://raw.githubusercontent.com/you/repo/main/README.md");
// or:
Viewer.Source = new Uri("pack://application:,,,/Docs/readme.md");
// or a plain file:
Viewer.Source = new Uri(@"C:\Docs\readme.md");
Source supports #fragment suffixes directly (new Uri("readme.md#installation", UriKind.Relative)), and relative sources are resolved against BaseUri/AssetPathRoot.
Loading Markdown from files, resources & URLs
// Local file (relative paths are resolved against BaseUri / AssetPathRoot):
Viewer.Source = new Uri("docs/readme.md", UriKind.Relative);
Viewer.BaseUri = new Uri(AppContext.BaseDirectory);
// Embedded WPF resource:
Viewer.Source = new Uri("pack://application:,,,/Assets/readme.md");
// Remote HTTP(S) (downloaded via WebClient on net48, HttpClient on net8.0):
Viewer.Source = new Uri("https://example.com/readme.md");
// Straight from a string, no URI resolution needed:
Viewer.Markdown = "# Hello\n\nJust some **text**.";
Headless usage: Markdown engine only
You don't need the viewer control at all if you just want a FlowDocument — e.g. to print, export, or host inside your own FlowDocumentReader/RichTextBox-like surface:
using EonaCat.MarkdownEditor.Viewer; // full feature set
var engine = new Markdown();
FlowDocument document = engine.Transform("# Hello\n\nSome **Markdown** text.");
myFlowDocumentReader.Document = document;
Configure the engine before transforming:
engine.StrictBoldItalic = false; // require _x_ / __x__ style rather than *_x_* leniency
engine.DisabledTag = false; // keep semantic Tag values (Heading1, Bold, ...) on generated elements
engine.DisabledTooltip = false;
engine.DisabledLazyLoad = true;
engine.AssetPathRoot = @"C:\MyDocs\assets";
engine.Heading1Style = (Style)FindResource("MyH1Style");
The plugin system (extensibility)
Everything the library does — beyond the hard-coded CommonMark-ish core — is wired up through MarkdownEditorPlugins, a mutable, observable bag of extension points:
public class MarkdownEditorPlugins
{
public SyntaxManager Syntax { get; } // on/off toggles for built-in syntax extensions
public ObservableCollection<IPluginSetup> Setups { get; } // bundles of the below, applied on add
public ObservableCollection<IFilter> Filters { get; } // pre-processors (e.g. YAML front matter)
public ObservableCollection<IBlockParser> TopBlock { get; } // top-level block parsers (e.g. inline HTML blocks)
public ObservableCollection<IBlockParser> Block { get; } // nested/sub block parsers
public ObservableCollection<IInlineParser> Inline { get; } // inline span parsers
public ObservableCollection<IImageLoader> ImageLoader { get; } // e.g. SVG
public ObservableCollection<IElementLoader> ElementLoader { get; }
public ObservableCollection<ICodeBlockLoader> CodeBlockLoader { get; }// e.g. syntax-highlighted code editor
public ObservableCollection<Definition> Highlights { get; } // custom language highlighting definitions
public ObservableCollection<IStyleOverwriter> StyleOverwriter { get; }
public ObservableCollection<IViewerArranger> ViewerArranger { get; } // post-render hook, e.g. attach YAML metadata
}
Assign a MarkdownEditorPlugins instance to Viewer.Plugins (or Engine.Plugins on the headless engine) to fully customize the pipeline, or add individual pieces to an existing set:
var plugins = Viewer.Plugins ?? new MarkdownEditorPlugins();
plugins.Syntax.EnableTableBlock = false; // turn a built-in syntax feature off
plugins.Filters.Add(new MyLoggingFilter()); // add a custom pre-processor
Viewer.Plugins = plugins;
SyntaxManager also ships three presets you can start from:
plugins.Syntax.And(SyntaxManager.Plain); // strip almost everything back to plain CommonMark-ish text
plugins.Syntax.And(SyntaxManager.Standard); // tables + strikethrough, nothing else extended
plugins.Syntax.And(SyntaxManager.MarkdownEditor); // everything on (the default)
Custom IFilter
Filters run before Markdown parsing and can pre-process the raw text (as MetaDataFilter does for YAML front matter):
using EonaCat.MarkdownEditor.Plugins;
using System.Windows.Documents;
public class UpperCaseHeadingsFilter : IFilter
{
public FlowDocument DoFilter(string markdownText, IConversion next)
{
// Inspect/modify markdownText here, then hand off to the rest of the pipeline:
return next.DoConversion(markdownText);
}
}
plugins.Filters.Add(new UpperCaseHeadingsFilter());
Custom IBlockParser / IInlineParser
Add entirely new block- or inline-level Markdown syntax using BlockParser.New / InlineParser.New with your own Regex and evaluator delegate, then register it on plugins.TopBlock, plugins.Block, or plugins.Inline.
Custom IImageLoader
using EonaCat.MarkdownEditor.Plugins;
using System.Windows.Media.Imaging;
public class MyFormatImageLoader : IImageLoader
{
public BitmapImage? Load(Stream stream)
{
// decode `stream` into a BitmapImage for e.g. a proprietary image format
return null;
}
}
plugins.ImageLoader.Add(new MyFormatImageLoader());
Custom ICodeBlockLoader
Implement ICodeBlockLoader to replace the code-block rendering entirely (e.g. to use a different code editor control), or call Register(Definition) to add highlighting definitions to the existing one.
Custom IStyleOverwriter
using EonaCat.MarkdownEditor.Plugins;
using System.Windows;
public class CompactSpacingOverwriter : IStyleOverwriter
{
public Style Overwrite(Style style)
{
// Return a derived Style (e.g. BasedOn = style) with tweaks applied.
return style;
}
}
plugins.StyleOverwriter.Add(new CompactSpacingOverwriter());
Custom IViewerArranger
Runs after the FlowDocument is generated and attached to the viewer — useful for post-processing hooks like attaching computed metadata (this is exactly how YAML front matter reaches the viewer):
using EonaCat.MarkdownEditor.Plugins;
using System.Windows.Controls;
using System.Windows.Documents;
public class WordCountArranger : IViewerArranger
{
public void Arrange(Control viewer, FlowDocument document)
{
// e.g. compute and store a word count somewhere accessible to your app
}
public void ResetArrange(Control viewer) { /* clean up if needed */ }
}
plugins.ViewerArranger.Add(new WordCountArranger());
Per-element style overrides
The Markdown engine exposes a Style? property per element kind, letting you override individual pieces without replacing the whole document style:
Viewer.Engine.Heading1Style = (Style)FindResource("BigBlueHeading");
Viewer.Engine.CodeBlockStyle = (Style)FindResource("DarkCodeBlock");
Viewer.Engine.BlockquoteStyle = (Style)FindResource("SubtleQuote");
Viewer.Engine.TableHeaderStyle = (Style)FindResource("StripedHeader");
Viewer.Engine.NoteStyle = (Style)FindResource("CalloutNote");
Available style hooks: DocumentStyle, Heading1Style…Heading6Style, NormalParagraphStyle, CodeStyle, CodeBlockStyle, BlockquoteStyle, LinkStyle, ImageStyle, SeparatorStyle, TableStyle, TableHeaderStyle, TableBodyStyle, NoteStyle.
API reference (most-used members)
MarkdownScrollViewer (all three namespace variants share this surface)
| Member | Type | Description |
|---|---|---|
Markdown |
string |
The Markdown source to render. |
HereMarkdown |
string |
Same as Markdown, but designed for inline XAML content with automatic indent-stripping. |
MarkdownStyle / MarkdownStyleName |
Style / string |
The document style to apply. |
Syntax |
SyntaxVersion (Plain/Standard/MarkdownEditor) |
Coarse syntax preset. |
ClickAction |
ClickAction |
What happens when a hyperlink is clicked. |
HyperlinkCommand |
ICommand |
Custom link-click command (used when ClickAction doesn't cover your case). |
OnHyperLinkClicked |
HyperLinkClickCallback |
Callback fired on link click. |
Source / Fragment |
Uri / string |
Load content from a URI and/or scroll to an in-document fragment. |
AssetPathRoot |
string |
Base path used to resolve relative images/links. |
BaseUri |
Uri |
Base URI used to resolve relative Source values. |
IsDarkTheme |
bool |
Current theme; auto-detected, but settable. |
DisabledLazyLoad |
bool |
Disable lazy image loading. |
Plugins |
MarkdownEditorPlugins |
The active plugin pipeline. |
Engine |
Markdown |
The underlying conversion engine (for per-element style overrides, etc.). |
Markdown (engine)
| Member | Description |
|---|---|
Transform(string text) |
Converts Markdown text to a FlowDocument. |
StrictBoldItalic |
Require unambiguous **bold**/*italic* delimiters. |
DisabledTag / DisabledTooltip / DisabledContextMenu |
Toggle auxiliary behaviors on generated elements. |
Plugins |
The plugin pipeline (block/inline parsers, filters, loaders, etc.). |
Heading1Style…NoteStyle |
Per-element style overrides. |
Enums
public enum ClickAction { None, OpenBrowser, DisplayWithRelativePath, DisplayAll, SafetyOpenBrowser, SafetyDisplayWithRelativePath, HighlightOnly }
public enum SyntaxVersion { Plain, Standard, MarkdownEditor }
Emoji Reference
| Emoji | Name |
|---|---|
| 😀 | grinning |
| 😃 | grinning_face_with_big_eyes |
| 😄 | grinning_face_with_smiling_eyes |
| 😁 | beaming_face_with_smiling_eyes |
| 😆 | grinning_squinting_face |
| 😅 | grinning_face_with_sweat |
| 🤣 | rolling_on_the_floor_laughing |
| 😂 | face_with_tears_of_joy |
| 🙂 | slightly_smiling_face |
| 🙃 | upside_down_face |
| 😉 | winking_face |
| 😊 | smiling_face_with_smiling_eyes |
| 😇 | innocent |
| 🥰 | smiling_face_with_hearts |
| 😍 | smiling_face_with_heart_eyes |
| 🤩 | star_struck |
| 😘 | face_blowing_a_kiss |
| 😗 | kissing_face |
| ☺️ | smiling_face |
| 😚 | kissing_face_with_closed_eyes |
| 😙 | kissing_face_with_smiling_eyes |
| 🥲 | smiling_face_with_tear |
| 😋 | face_savoring_food |
| 😛 | face_with_tongue |
| 😜 | winking_face_with_tongue |
| 🤪 | zany_face |
| 😝 | squinting_face_with_tongue |
| 🤑 | money_mouth_face |
| 🤗 | face_with_hands |
| 🤭 | face_with_hand_over_mouth |
| 🫢 | face_with_open_eyes_and_hand_over_mouth |
| 🫣 | face_with_peeking_eye |
| 🤫 | shushing_face |
| 🤔 | thinking_face |
| 🫡 | saluting_face |
| 🤐 | zipper_mouth_face |
| 🤨 | face_with_raised_eyebrow |
| 😐 | neutral_face |
| 😑 | expressionless_face |
| 😶 | face_without_mouth |
| 🫥 | dotted_line_face |
| 😶🌫️ | face_in_clouds |
| 😒 | unamused_face |
| 🙄 | face_with_rolling_eyes |
| 😬 | grimacing_face |
| 😮💨 | face_exhaling |
| 😔 | pensive_face |
| 😪 | sleepy_face |
| 🤤 | drooling_face |
| 😴 | sleeping_face |
| 😷 | face_with_medical_mask |
| 🤒 | face_with_thermometer |
| 🤕 | face_with_head_bandage |
| 🤢 | nauseated_face |
| 🤮 | face_vomiting |
| 🤧 | sneezing_face |
| 🥵 | hot_face |
| 🥶 | cold_face |
| 🥴 | woozy_face |
| 😵 | dizzy_face |
| 😵💫 | face_with_spiral_eyes |
| 🤯 | exploding_head |
| 😕 | confused_face |
| 🫤 | face_with_diagonal_mouth |
| 😟 | worried_face |
| 🙁 | slightly_frowning_face |
| ☹️ | frowning_face |
| 😮 | face_with_open_mouth |
| 😯 | hushed_face |
| 😲 | astonished_face |
| 😳 | flushed_face |
| 🥺 | pleading_face |
| 😦 | frowning_face_with_open_mouth |
| 😧 | anguished_face |
| 😨 | fearful_face |
| 😰 | anxious_face_with_sweat |
| 😥 | sad_but_relieved_face |
| 😢 | crying_face |
| 😭 | loudly_crying_face |
| 😱 | face_screaming_in_fear |
| 😖 | confounded_face |
| 😣 | persevering_face |
| 😞 | disappointed_face |
| 😓 | downcast_face_with_sweat |
| 😩 | weary_face |
| 😫 | tired_face |
| 🥱 | yawning_face |
| 😤 | face_with_steam_from_nose |
| 😡 | pouting_face |
| 😠 | angry_face |
| 🤬 | face_with_symbols_on_mouth |
| 💀 | skull |
| ☠️ | skull_and_crossbones |
| 👻 | ghost |
| 💩 | pile_of_poo |
| 🤡 | clown_face |
| 👽 | alien |
| 👾 | alien_monster |
| 🤖 | robot |
| 🎃 | jack_o_lantern |
| 👍 | thumbs_up |
| 👎 | thumbs_down |
| 👌 | ok_hand |
| 🤌 | finger_pinched |
| 🤏 | pinching_hand |
| ✌️ | victory_hand |
| 🤞 | crossed_fingers |
| 🤟 | love_you_gesture |
| 🤘 | sign_of_the_horns |
| 🤙 | call_me_hand |
| 👈 | backhand_index_pointing_left |
| 👉 | backhand_index_pointing_right |
| 👆 | backhand_index_pointing_up |
| 👇 | backhand_index_pointing_down |
| ☝️ | index_pointing_up |
| ✋ | raised_hand |
| 🤚 | raised_back_of_hand |
| 🖐 | hand_with_fingers_splayed |
| ✊ | raised_fist |
| 👊 | oncoming_fist |
| 🤛 | left_facing_fist |
| 🤜 | right_facing_fist |
| 👏 | clapping_hands |
| 🙌 | raising_hands |
| 👐 | open_hands |
| 🤝 | handshake |
| 🙏 | folded_hands |
| ❤️ | red_heart |
| 🧡 | orange_heart |
| 💛 | yellow_heart |
| 💚 | green_heart |
| 💙 | blue_heart |
| 💜 | purple_heart |
| 🖤 | black_heart |
| 🤍 | white_heart |
| 🤎 | brown_heart |
| 💔 | broken_heart |
| ❣️ | heart_exclamation |
| 💕 | two_hearts |
| 💞 | revolving_hearts |
| 💓 | beating_heart |
| 💗 | growing_heart |
| 💖 | sparkling_heart |
| 💘 | heart_with_arrow |
| 💝 | heart_with_ribbon |
| 💟 | heart_decoration |
| 🐶 | dog_face |
| 🐕 | dog |
| 🐕🦺 | service_dog |
| 🐩 | poodle |
| 🐺 | wolf |
| 🦊 | fox |
| 🦝 | raccoon |
| 🐱 | cat_face |
| 🐈 | cat |
| 🐈⬛ | black_cat |
| 🦁 | lion |
| 🐯 | tiger_face |
| 🐅 | tiger |
| 🐆 | leopard |
| 🐴 | horse |
| 🐎 | horse_racing |
| 🦄 | unicorn |
| 🦓 | zebra |
| 🦌 | deer |
| 🐮 | cow_face |
| 🐄 | cow |
| 🐂 | ox |
| 🐃 | water_buffalo |
| 🐷 | pig_face |
| 🐖 | pig |
| 🐗 | boar |
| 🐽 | pig_nose |
| 🐏 | ram |
| 🐑 | ewe |
| 🐐 | goat |
| 🐪 | camel |
| 🐫 | two_hump_camel |
| 🦙 | llama |
| 🦒 | giraffe |
| 🐘 | elephant |
| 🦣 | mammoth |
| 🦏 | rhinoceros |
| 🦛 | hippopotamus |
| 🐭 | mouse_face |
| 🐁 | mouse |
| 🐀 | rat |
| 🐹 | hamster |
| 🐰 | rabbit_face |
| 🐇 | rabbit |
| 🐿 | squirrel |
| 🐦 | bird |
| 🐧 | penguin |
| 🕊 | dove |
| 🦅 | eagle |
| 🦆 | duck |
| 🦢 | swan |
| 🦉 | owl |
| 🦜 | parrot |
| 🐔 | chicken |
| 🐓 | rooster |
| 🐣 | hatching_chick |
| 🐤 | baby_chick |
| 🐥 | front_facing_baby_chick |
| 🐸 | frog |
| 🐊 | crocodile |
| 🐢 | turtle |
| 🦎 | lizard |
| 🐍 | snake |
| 🐲 | dragon_face |
| 🐉 | dragon |
| 🐟 | fish |
| 🐠 | tropical_fish |
| 🐡 | blowfish |
| 🦈 | shark |
| 🐙 | octopus |
| 🦑 | squid |
| 🦐 | shrimp |
| 🦞 | lobster |
| 🦀 | crab |
| 🐚 | shell |
| 🐝 | honeybee |
| 🐛 | bug |
| 🦋 | butterfly |
| 🐌 | snail |
| 🐞 | lady_beetle |
| 🐜 | ant |
| 🪲 | beetle |
| 🪳 | cockroach |
| 🕷 | spider |
| 🕸 | spider_web |
| 🌵 | cactus |
| 🎄 | christmas_tree |
| 🌲 | evergreen_tree |
| 🌳 | deciduous_tree |
| 🌴 | palm_tree |
| 🌱 | seedling |
| 🌿 | herb |
| ☘️ | shamrock |
| 🍀 | four_leaf_clover |
| 🍁 | maple_leaf |
| 🍂 | fallen_leaf |
| 🍃 | leaf_fluttering_in_wind |
| 🌺 | hibiscus |
| 🌻 | sunflower |
| 🌹 | rose |
| 🌷 | tulip |
| 🌼 | blossom |
| 🌸 | cherry_blossom |
| 💐 | bouquet |
| 🌍 | earth_africa |
| 🌎 | earth_americas |
| 🌏 | earth_asia |
| 🌑 | new_moon |
| 🌒 | waxing_crescent_moon |
| 🌓 | first_quarter_moon |
| 🌔 | waxing_gibbous_moon |
| 🌕 | full_moon |
| 🌖 | waning_gibbous_moon |
| 🌗 | last_quarter_moon |
| 🌘 | waning_crescent_moon |
| 🌙 | crescent_moon |
| 🌚 | new_moon_face |
| 🌞 | sun_face |
| ☀️ | sun |
| 🌤 | sun_behind_small_cloud |
| ⛅ | sun_behind_cloud |
| 🌥 | sun_behind_large_cloud |
| ☁️ | cloud |
| 🌧 | cloud_with_rain |
| ⛈ | cloud_with_lightning_and_rain |
| 🌩 | cloud_with_lightning |
| 🌨 | cloud_with_snow |
| 🌪 | tornado |
| 🌈 | rainbow |
| ⚡ | high_voltage |
| ❄️ | snowflake |
| 🔥 | fire |
| 💧 | droplet |
| 🌊 | water_wave |
| 🍎 | red_apple |
| 🍏 | green_apple |
| 🍐 | pear |
| 🍊 | tangerine |
| 🍋 | lemon |
| 🍌 | banana |
| 🍉 | watermelon |
| 🍇 | grapes |
| 🍓 | strawberry |
| 🫐 | blueberries |
| 🍈 | melon |
| 🍒 | cherries |
| 🍑 | peach |
| 🥭 | mango |
| 🍍 | pineapple |
| 🥥 | coconut |
| 🥝 | kiwi_fruit |
| 🥑 | avocado |
| 🍆 | eggplant |
| 🥔 | potato |
| 🥕 | carrot |
| 🌽 | corn |
| 🌶 | hot_pepper |
| 🫑 | bell_pepper |
| 🥒 | cucumber |
| 🥬 | leafy_green |
| 🥦 | broccoli |
| 🧄 | garlic |
| 🧅 | onion |
| 🍄 | mushroom |
| 🥜 | peanuts |
| 🌰 | chestnut |
| 🍞 | bread |
| 🥐 | croissant |
| 🥖 | baguette |
| 🥨 | pretzel |
| 🫓 | flatbread |
| 🥯 | bagel |
| 🌮 | taco_shell |
| 🌯 | burrito |
| 🥪 | sandwich |
| 🥙 | stuffed_flatbread |
| 🍗 | poultry_leg |
| 🍖 | meat_on_bone |
| 🥩 | cut_of_meat |
| 🥓 | bacon |
| 🍔 | burger |
| 🌭 | hot_dog |
| 🍕 | pizza |
| 🍟 | french_fries |
| 🍤 | fried_shrimp |
| 🍳 | cooking_egg |
| 🍱 | bento_box |
| 🍘 | rice_cracker |
| 🍙 | rice_ball |
| 🍚 | cooked_rice |
| 🍛 | curry_rice |
| 🍜 | ramen |
| 🍝 | spaghetti |
| 🍠 | roasted_sweet_potato |
| 🍲 | stew |
| 🍢 | oden |
| 🍣 | sushi |
| 🍤 | tempura_shrimp |
| 🍥 | fish_cake |
| 🥘 | paella |
| 🍲 | soup |
| 🍦 | ice_cream |
| 🍧 | shaved_ice |
| 🍨 | ice_cream_bowl |
| 🍩 | doughnut |
| 🍪 | cookie |
| 🎂 | birthday_cake |
| 🍰 | shortcake |
| 🧁 | cupcake |
| 🍫 | chocolate_bar |
| 🍬 | candy |
| 🍭 | lollipop |
| 🍮 | custard |
| ☕ | hot_beverage |
| 🫖 | teapot |
| 🍵 | tea |
| 🥛 | milk |
| 🧃 | juice_box |
| 🥤 | cup_with_straw |
| 🍺 | beer |
| 🍻 | beers |
| 🍷 | wine_glass |
| 🥂 | clinking_glasses |
| 🍸 | cocktail |
| 🍹 | tropical_drink |
| 🥃 | tumbler_glass |
| 🍾 | bottle_with_popping_cork |
| 🍼 | baby_bottle |
| 🍴 | fork_and_knife |
| 🥄 | spoon |
| 🔪 | kitchen_knife |
| 🍽 | plate_with_cutlery |
| 🥢 | chopsticks |
| 🍯 | honey_pot |
| 🧂 | salt |
| 🫒 | olive |
| 🧈 | butter |
| 🧀 | cheese |
| 🥚 | egg |
| 🚗 | car |
| 🚕 | taxi |
| 🚙 | sport_utility_vehicle |
| 🚌 | bus |
| 🚎 | trolleybus |
| 🏎 | racing_car |
| 🚓 | police_car |
| 🚑 | ambulance |
| 🚒 | fire_engine |
| 🚐 | minibus |
| 🚚 | delivery_truck |
| 🚛 | articulated_lorry |
| 🚜 | tractor |
| 🛻 | pickup_truck |
| 🚲 | bicycle |
| 🛴 | kick_scooter |
| 🛵 | motor_scooter |
| 🏍 | motorcycle |
| 🚨 | police_light |
| 🚂 | steam_locomotive |
| 🚆 | train |
| 🚇 | metro |
| 🚈 | light_rail |
| 🚉 | station |
| 🚊 | tram |
| 🚝 | monorail |
| 🚞 | mountain_railway |
| ✈️ | airplane |
| 🛩 | small_airplane |
| 🛫 | airplane_departure |
| 🛬 | airplane_arrival |
| 🚀 | rocket |
| 🛰 | satellite |
| 🚁 | helicopter |
| 🛸 | ufo |
| 🚢 | ship |
| ⛴ | ferry |
| 🛥 | motor_boat |
| 🚤 | speedboat |
| ⛵ | sailboat |
| 🛶 | canoe |
| 🏠 | house |
| 🏡 | house_with_garden |
| 🏘 | houses |
| 🏚 | derelict_house |
| 🏗 | building_construction |
| 🏢 | office_building |
| 🏣 | japanese_post_office |
| 🏤 | post_office |
| 🏥 | hospital |
| 🏦 | bank |
| 🏨 | hotel |
| 🏪 | convenience_store |
| 🏫 | school |
| 🏬 | department_store |
| 🏭 | factory |
| 🏯 | japanese_castle |
| 🏰 | castle |
| 🗼 | tokyo_tower |
| 🗽 | statue_of_liberty |
| ⛪ | church |
| 🕌 | mosque |
| 🛕 | hindu_temple |
| 🕍 | synagogue |
| 🌍 | earth_africa |
| 🌎 | earth_americas |
| 🌏 | earth_asia |
| 🗺 | world_map |
| 🧭 | compass |
| 🏔 | snow_capped_mountain |
| ⛰ | mountain |
| 🌋 | volcano |
| 🗻 | mount_fuji |
| 🏕 | camping |
| 🏖 | beach_with_umbrella |
| 🏜 | desert |
| 🏝 | desert_island |
| 🚦 | vertical_traffic_light |
| 🚥 | horizontal_traffic_light |
| 🚧 | construction |
| 🛑 | stop_sign |
| ⚠️ | warning |
| ⛔ | no_entry |
| 🚫 | prohibited |
| 🚳 | no_bicycles |
| 🚭 | no_smoking |
| 🚯 | no_littering |
| 🚸 | children_crossing |
| 📍 | round_pushpin |
| 📌 | pushpin |
| 📎 | paperclip |
| 🧭 | compass |
| 🗺 | map |
| 📱 | mobile_phone |
| 📲 | mobile_phone_with_arrow |
| ☎️ | telephone |
| 📞 | telephone_receiver |
| 📟 | pager |
| 📠 | fax_machine |
| 📺 | television |
| 📻 | radio |
| 📡 | satellite_antenna |
| 📷 | camera |
| 📸 | camera_flash |
| 🎥 | movie_camera |
| 🎬 | clapper_board |
| 🎤 | microphone |
| 🎧 | headphones |
| 📢 | loudspeaker |
| 🔊 | speaker_high_volume |
| 🔉 | speaker_medium_volume |
| 🔈 | speaker_low_volume |
| 🔇 | muted_speaker |
| 📶 | antenna_bars |
| 📳 | vibration_mode |
| 📴 | mobile_phone_off |
| 💻 | laptop |
| 🖥 | desktop_computer |
| 🖨 | printer |
| ⌨️ | keyboard |
| 🖱 | computer_mouse |
| 💽 | minidisc |
| 💾 | floppy_disk |
| 💿 | optical_disk |
| 📀 | dvd |
| 🧮 | abacus |
| 🖲 | trackball |
| 💡 | light_bulb |
| 🔌 | electric_plug |
| 🔋 | battery |
| 🪫 | low_battery |
| 🔦 | flashlight |
| 🧰 | toolbox |
| 🧲 | magnet |
| 💰 | money_bag |
| 💴 | yen_banknote |
| 💵 | dollar_banknote |
| 💶 | euro_banknote |
| 💷 | pound_banknote |
| 💸 | money_with_wings |
| 💳 | credit_card |
| 🧾 | receipt |
| 🏧 | atm_sign |
| 💱 | currency_exchange |
| 💲 | dollar_sign |
| 📁 | file_folder |
| 📂 | open_file_folder |
| 🗂 | card_index_dividers |
| 📅 | calendar |
| 📆 | tear_off_calendar |
| 🗓 | spiral_calendar |
| 📇 | card_index |
| 📈 | upwards_chart |
| 📉 | downwards_chart |
| 📊 | bar_chart |
| 🗃 | card_file_box |
| 🗄 | file_cabinet |
| 📋 | clipboard |
| 📌 | pushpin |
| 📍 | round_pushpin |
| 📎 | paperclip |
| 🖇 | linked_paperclips |
| 📏 | ruler |
| 📐 | triangular_ruler |
| ✂️ | scissors |
| 🖊 | pen |
| 🖋 | fountain_pen |
| 🖌 | paintbrush |
| 🖍 | crayon |
| 📝 | memo |
| 📑 | bookmark_tabs |
| 📄 | page |
| 📃 | page_with_curl |
| 📜 | scroll |
| 📔 | notebook |
| 📕 | closed_book |
| 📖 | open_book |
| 📗 | green_book |
| 📘 | blue_book |
| 📙 | orange_book |
| 📚 | books |
| 📓 | notebook |
| 📒 | ledger |
| 🔒 | locked |
| 🔓 | unlocked |
| 🔏 | locked_with_pen |
| 🔐 | locked_with_key |
| 🗝 | old_key |
| 🛡 | shield |
| 🚨 | police_light |
| ⚠️ | warning |
| ⛔ | no_entry |
| 🚫 | forbidden |
| 🚷 | no_pedestrians |
| 🚯 | no_littering |
| 🚳 | no_bicycles |
| 🚭 | no_smoking |
| 🚱 | non_potable_water |
| 🔞 | no_under_18 |
| 📵 | no_mobile_phones |
| ⚙️ | gear |
| 🧭 | compass |
| ⏰ | alarm_clock |
| ⏲ | timer_clock |
| ⏱ | stopwatch |
| ⌚ | watch |
| ⏳ | hourglass |
| ⌛ | empty_hourglass |
| 🕹 | joystick |
| 🎛 | control_knobs |
| 🎚 | volume_slider |
| 🔋 | battery |
| 🔌 | power_plug |
| 💡 | bulb |
| 🔦 | torch |
| 🧯 | fire_extinguisher |
| 🪛 | screwdriver |
| 🔧 | wrench |
| 🔨 | hammer |
| 🪚 | wood_saw |
| ⚒ | hammer_and_pick |
| 🛠 | tools |
| 🌐 | globe_with_meridians |
| 🕸 | spider_web |
| 🛰 | satellite |
| 📡 | satellite_antenna |
| 📶 | antenna_bars |
| 📳 | vibration_mode |
| 📴 | mobile_phone_off |
| 📱 | mobile_phone |
| 💻 | laptop |
| 🖥 | desktop_computer |
| 🖨 | printer |
| 🧭 | compass |
| 🔗 | link |
| 📎 | paperclip |
| 🧷 | safety_pin |
| 📥 | inbox_tray |
| 📤 | outbox_tray |
| 📨 | incoming_envelope |
| 📩 | envelope_with_arrow |
| 📧 | e_mail |
| ✉️ | envelope |
| 📬 | open_mailbox_with_mail |
| 📭 | open_mailbox_with_no_mail |
| 📫 | closed_mailbox_with_raised_flag |
| 📪 | closed_mailbox_with_lowered_flag |
| 🚗 | automobile |
| 🚕 | taxi |
| 🚙 | sport_utility_vehicle |
| 🚌 | bus |
| 🚎 | trolleybus |
| 🚓 | police_car |
| 🚑 | ambulance |
| 🚒 | fire_engine |
| 🚐 | minibus |
| 🚚 | delivery_truck |
| 🚛 | articulated_lorry |
| 🚜 | tractor |
| 🚲 | bicycle |
| 🛵 | motor_scooter |
| 🏍 | motorcycle |
| 🚨 | police_light |
| 🚥 | traffic_light_horizontal |
| 🚦 | traffic_light_vertical |
| 🚧 | construction |
| 🚏 | bus_stop |
| 🛣 | motorway |
| 🛤 | railway_track |
| 🚆 | train |
| 🚇 | metro |
| 🚈 | light_rail |
| 🚉 | station |
| 🚊 | tram |
| 🚝 | monorail |
| 🚞 | mountain_railway |
| 🚋 | tram_car |
| 🚃 | railway_car |
| 🚢 | ship |
| ⛴ | ferry |
| 🛳 | passenger_ship |
| ✈️ | airplane |
| 🛩 | small_airplane |
| 🚀 | rocket |
| 🛰 | satellite |
| 🚁 | helicopter |
| ⛵ | sailboat |
| 🚤 | speedboat |
| 🏠 | house |
| 🏡 | house_with_garden |
| 🏢 | office_building |
| 🏣 | japanese_post_office |
| 🏤 | european_post_office |
| 🏥 | hospital |
| 🏦 | bank |
| 🏨 | hotel |
| 🏫 | school |
| 🏬 | department_store |
| 🏭 | factory |
| 🏯 | japanese_castle |
| 🏰 | european_castle |
| ⛪ | church |
| 🕌 | mosque |
| 🛕 | hindu_temple |
| 🕍 | synagogue |
| 🏟 | stadium |
| 🎡 | ferris_wheel |
| 🎢 | roller_coaster |
| 🎠 | carousel_horse |
| 🏗 | construction_site |
| 🏚 | derelict_house |
| 🏜 | desert |
| 🏝 | desert_island |
| 🏞 | national_park |
| 🌇 | sunset_cityscape |
| 🌆 | night_cityscape |
| 🌃 | night_with_stars |
| 🌉 | bridge_at_night |
| 🌁 | foggy |
| 🎉 | party_popper |
| 🎊 | confetti_ball |
| 🎈 | balloon |
| 🎁 | gift |
| 🎀 | ribbon |
| 🎗 | reminder_ribbon |
| 🏆 | trophy |
| 🥇 | 1st_place_medal |
| 🥈 | 2nd_place_medal |
| 🥉 | 3rd_place_medal |
| 🎯 | direct_hit |
| 🎮 | video_game |
| 🕹 | joystick |
| 🎲 | game_die |
| 🎰 | slot_machine |
| 🎳 | bowling |
| 🎣 | fishing_pole |
| 🎤 | microphone |
| 🎧 | headphones |
| 🎼 | musical_score |
| 🎹 | musical_keyboard |
| 🎷 | saxophone |
| 🎺 | trumpet |
| 🎸 | guitar |
| 🎻 | violin |
| 🥁 | drum |
| 🎬 | clapper_board |
| 🎭 | performing_arts |
| 🎨 | artist_palette |
| ☀️ | sun |
| 🌤 | sun_behind_small_cloud |
| ⛅ | partly_sunny |
| 🌥 | sun_behind_large_cloud |
| 🌦 | sun_behind_rain_cloud |
| 🌧 | rain_cloud |
| ⛈ | thunder_cloud_rain |
| 🌩 | cloud_lightning |
| ❄️ | snowflake |
| ☃️ | snowman |
| ⛄ | snowman_without_snow |
| 🌬 | wind_face |
| 💨 | dashing_away |
| 🌪 | tornado |
| 🌈 | rainbow |
| 🔥 | fire |
| 💧 | droplet |
| 🌊 | water_wave |
| 🌫 | fog |
| ❤️ | red_heart |
| 💔 | broken_heart |
| 💕 | two_hearts |
| 💖 | sparkling_heart |
| 💗 | growing_heart |
| 💘 | heart_with_arrow |
| 💝 | heart_with_ribbon |
| 💞 | revolving_hearts |
| 💟 | heart_decoration |
| ❣️ | heart_exclamation |
| 💯 | hundred_points |
| ✔️ | check_mark |
| ☑️ | check_box |
| ❌ | cross_mark |
| ❎ | cross_mark_button |
| ⚠️ | warning |
| 🚫 | prohibited |
| ⛔ | no_entry |
| 🔞 | no_one_under_eighteen |
| ♻️ | recycling |
| ♿ | wheelchair_symbol |
| ⚜️ | fleur_de_lis |
| 〽️ | part_alternation_mark |
| ⚛️ | atom_symbol |
| ✡️ | star_of_david |
| ☸️ | dharma_wheel |
| ☯️ | yin_yang |
| ✝️ | latin_cross |
| ☦️ | orthodox_cross |
| ☮️ | peace_symbol |
| 🕉 | om_symbol |
| 🔯 | six_pointed_star |
| 🔺 | red_triangle_up |
| 🔻 | red_triangle_down |
| 🔷 | blue_diamond |
| 🔶 | orange_diamond |
| 🔸 | small_orange_diamond |
| 🔹 | small_blue_diamond |
| ▪️ | black_small_square |
| ▫️ | white_small_square |
| ◼️ | black_medium_square |
| ◻️ | white_medium_square |
| ⬛ | black_large_square |
| ⬜ | white_large_square |
| 🔳 | white_square_button |
| 🔲 | black_square_button |
| 🧪 | test_tube |
| 🧫 | petri_dish |
| 🧬 | dna |
| ⚗️ | alembic |
| 🔬 | microscope |
| 🔭 | telescope |
| 💉 | syringe |
| 💊 | pill |
| 🩺 | stethoscope |
| 🩹 | adhesive_bandage |
| 🩼 | crutch |
| 🦠 | microbe |
| 🧠 | brain |
| 🫀 | heart_anatomical |
| 🫁 | lungs |
| 🦴 | bone |
| 🦷 | tooth |
| ⚕️ | medical_symbol |
| 👶 | baby |
| 🧒 | child |
| 👦 | boy |
| 👧 | girl |
| 🧑 | adult |
| 👨 | man |
| 👩 | woman |
| 🧓 | older_adult |
| 👴 | older_man |
| 👵 | older_woman |
| 👨👩👧 | family_man_woman_girl |
| 👨👩👦 | family_man_woman_boy |
| 👨👩👧👦 | family_complete |
| 👨👨👦 | family_two_men_boy |
| 👩👩👧 | family_two_women_girl |
| 👨👨👧👦 | family_two_men_complete |
| 👩👩👧👦 | family_two_women_complete |
| 🏳️ | white_flag |
| 🏴 | black_flag |
| 🏁 | checkered_flag |
| 🚩 | triangular_flag |
| 🏳️🌈 | rainbow_flag |
| 🏴☠️ | pirate_flag |
| 🇺🇸 | flag_united_states |
| 🇬🇧 | flag_united_kingdom |
| 🇩🇪 | flag_germany |
| 🇫🇷 | flag_france |
| 🇮🇹 | flag_italy |
| 🇪🇸 | flag_spain |
| 🇯🇵 | flag_japan |
| 🇰🇷 | flag_south_korea |
| 🇨🇳 | flag_china |
| 🇳🇱 | flag_netherlands |
| ⌚ | watch |
| 📿 | prayer_beads |
| 🧿 | nazar_amulet |
| 🎯 | dart_board |
| 🎲 | game_die |
| 🎰 | slot_machine |
| 🧩 | puzzle_piece |
| 🪀 | yo_yo |
| 🪁 | kite |
| 🪄 | magic_wand |
| 🪅 | pinata |
| 🪆 | nesting_dolls |
| 🔑 | key |
| 🗝 | old_key |
| 🔒 | locked |
| 🔓 | unlocked |
| 🛡 | shield |
| ⚙️ | gear |
| 🔧 | wrench |
| 🔨 | hammer |
| 🪛 | screwdriver |
| 🧲 | magnet |
| 🪚 | saw |
| 👨⚕️ | doctor_man |
| 👩⚕️ | doctor_woman |
| 🧑⚕️ | health_worker |
| 👨🎓 | student_man |
| 👩🎓 | student_woman |
| 🧑🎓 | graduate |
| 👨🏫 | teacher_man |
| 👩🏫 | teacher_woman |
| 🧑🏫 | instructor |
| 👨💻 | developer_man |
| 👩💻 | developer_woman |
| 🧑💻 | coder |
| 👨🔧 | mechanic_man |
| 👩🔧 | mechanic_woman |
| 🧑🔧 | technician |
| 👨🔬 | scientist_man |
| 👩🔬 | scientist_woman |
| 🧑🔬 | researcher |
| 👨🎨 | artist_man |
| 👩🎨 | artist_woman |
| 🧑🎨 | artist |
| 👨🚒 | firefighter_man |
| 👩🚒 | firefighter_woman |
| 🧑🚒 | firefighter |
| 👨✈️ | pilot_man |
| 👩✈️ | pilot_woman |
| 🧑✈️ | pilot |
| 👨⚖️ | judge_man |
| 👩⚖️ | judge_woman |
| 🧑⚖️ | judge |
| 👮♂️ | police_man |
| 👮♀️ | police_woman |
| 🧑✈️ | police_officer |
| 🥐 | croissant |
| 🥯 | bagel |
| 🥞 | pancakes |
| 🧇 | waffle |
| 🥓 | bacon |
| 🍳 | cooking |
| 🥚 | egg |
| 🧈 | butter |
| 🧀 | cheese |
| 🥗 | salad |
| 🍲 | stew |
| 🍛 | curry_rice |
| 🍜 | ramen |
| 🍝 | spaghetti |
| 🍣 | sushi |
| 🍤 | fried_shrimp |
| 🍙 | rice_ball |
| 🍘 | rice_cracker |
| 🍚 | cooked_rice |
| 🍧 | shaved_ice |
| 🍨 | ice_cream |
| 🍦 | soft_ice_cream |
| 🍰 | shortcake |
| 🎂 | birthday_cake |
| 🍫 | chocolate |
| 🍬 | candy |
| 🍭 | lollipop |
| 🍮 | custard |
| ☕ | coffee |
| 🍵 | green_tea |
| 🧃 | juice_box |
| 🥤 | cup_with_straw |
| 🍺 | beer |
| 🍷 | wine |
| 🥂 | clinking_glasses |
| 🇦🇩 | flag_andorra |
| 🇦🇪 | flag_united_arab_emirates |
| 🇦🇫 | flag_afghanistan |
| 🇦🇱 | flag_albania |
| 🇦🇲 | flag_armenia |
| 🇦🇷 | flag_argentina |
| 🇦🇹 | flag_austria |
| 🇦🇺 | flag_australia |
| 🇧🇪 | flag_belgium |
| 🇧🇷 | flag_brazil |
| 🇨🇦 | flag_canada |
| 🇨🇭 | flag_switzerland |
| 🇨🇱 | flag_chile |
| 🇨🇴 | flag_colombia |
| 🇩🇰 | flag_denmark |
| 🇪🇬 | flag_egypt |
| 🇫🇮 | flag_finland |
| 🇬🇷 | flag_greece |
| 🇭🇺 | flag_hungary |
| 🇮🇳 | flag_india |
| 🇮🇪 | flag_ireland |
| 🇮🇸 | flag_iceland |
| 🇮🇱 | flag_israel |
| 🇲🇽 | flag_mexico |
| 🇳🇴 | flag_norway |
| 🇳🇿 | flag_new_zealand |
| 🇵🇱 | flag_poland |
| 🇵🇹 | flag_portugal |
| 🇷🇴 | flag_romania |
| 🇸🇪 | flag_sweden |
| 🇹🇷 | flag_turkey |
| 🇺🇦 | flag_ukraine |
| 🇺🇸 | flag_united_states |
| 🇬🇧 | flag_united_kingdom |
| 🇿🇦 | flag_south_africa |
| 👍🏻 | thumbs_up_light_skin |
| 👍🏼 | thumbs_up_medium_light_skin |
| 👍🏽 | thumbs_up_medium_skin |
| 👍🏾 | thumbs_up_medium_dark_skin |
| 👍🏿 | thumbs_up_dark_skin |
| 👋🏻 | wave_light_skin |
| 👋🏼 | wave_medium_light_skin |
| 👋🏽 | wave_medium_skin |
| 👋🏾 | wave_medium_dark_skin |
| 👋🏿 | wave_dark_skin |
and more
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
| .NET Framework | net48 is compatible. net481 was computed. |
-
.NETFramework 4.8
- EonaCat.Editor (>= 0.0.2)
- HtmlAgilityPack (>= 1.12.4)
- Svg (>= 3.4.7)
- YamlDotNet (>= 18.1.0)
-
net8.0-windows7.0
- EonaCat.Editor (>= 0.0.2)
- HtmlAgilityPack (>= 1.12.4)
- Svg (>= 3.4.7)
- YamlDotNet (>= 18.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.