Femur.Markdown.Extended.Parser
0.0.31
dotnet add package Femur.Markdown.Extended.Parser --version 0.0.31
NuGet\Install-Package Femur.Markdown.Extended.Parser -Version 0.0.31
<PackageReference Include="Femur.Markdown.Extended.Parser" Version="0.0.31" />
<PackageVersion Include="Femur.Markdown.Extended.Parser" Version="0.0.31" />
<PackageReference Include="Femur.Markdown.Extended.Parser" />
paket add Femur.Markdown.Extended.Parser --version 0.0.31
#r "nuget: Femur.Markdown.Extended.Parser, 0.0.31"
#:package Femur.Markdown.Extended.Parser@0.0.31
#addin nuget:?package=Femur.Markdown.Extended.Parser&version=0.0.31
#tool nuget:?package=Femur.Markdown.Extended.Parser&version=0.0.31
Femur.Markdown.Extended.Parser
Extended Markdown parser with YAML frontmatter support.
This package extends the base Markdown parser to support YAML frontmatter, allowing metadata to be embedded at the beginning of Markdown documents.
Features
- Full CommonMark 0.31.2 compliance (inherits from base parser)
- YAML frontmatter parsing (delimited by
---) - Nested and complex YAML structures
- Graceful handling of malformed YAML
- Composable parser architecture - demonstrates extending parsers through inheritance
Installation
dotnet add package Femur.Markdown.Extended.Parser
Usage
using Femur.Markdown.Extended.Parser;
using Femur.Markdown.Extended.Abstractions.Nodes;
using System.IO;
// Parse markdown with YAML frontmatter from a stream
using (var stream = File.OpenRead("document.md"))
{
var parser = new ExtendedMarkdownParser(stream);
var document = parser.Parse();
// Access frontmatter
if (document is ExtendedMarkdownDocumentNode extendedDoc)
{
if (extendedDoc.FrontMatter != null)
{
foreach (var (key, value) in extendedDoc.FrontMatter)
{
Console.WriteLine($"{key}: {value}");
}
}
// Access regular markdown content
foreach (var child in extendedDoc.Children)
{
// Process markdown nodes as usual
}
}
}
Frontmatter Format
The parser expects YAML frontmatter at the very start of the document, delimited by ---:
---
title: My Document
author: John Doe
tags:
- markdown
- yaml
date: 2024-01-01
metadata:
version: 1.0
published: true
---
# Document Content
This is the actual markdown content...
Supported YAML Features
- Scalars (strings, numbers, booleans, dates)
- Lists
- Nested mappings (objects)
Parsing Behavior
- If no frontmatter is present,
FrontMatterisnull - If frontmatter is malformed,
FrontMatterRawcontains the raw text (for debugging) - The
FrontMatterproperty will benullif YAML parsing fails - Document parsing continues normally if frontmatter is invalid
Architecture: Composable Parsers
ExtendedMarkdownParser demonstrates Femur's composable parser architecture:
- Inheritance-based composition: Extends
MarkdownParserrather than reimplementing parsing logic - Preprocessing hooks: Overrides
InitializeParsing()to extract frontmatter as a preprocessing block - Shared buffer: Uses the same StreamReader buffer for frontmatter and markdown content
- Delegation pattern: Calls
base.InitializeParsing()after frontmatter extraction to perform standard markdown parsing
This pattern can be repeated for other preprocessing needs:
- Extracting directives (e.g., ``)
- Processing metadata comments
- Filtering or transforming content
- Any preprocessing that should happen before main parsing
All preprocessing shares the same buffer and maintains true streaming semantics.
License
MIT
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Femur.Markdown.Abstractions (>= 0.0.31)
- Femur.Markdown.Extended.Abstractions (>= 0.0.31)
- Femur.Markdown.Parser (>= 0.0.31)
- System.Memory (>= 4.6.3)
- YamlDotNet (>= 16.3.0)
-
net10.0
- Femur.Markdown.Abstractions (>= 0.0.31)
- Femur.Markdown.Extended.Abstractions (>= 0.0.31)
- Femur.Markdown.Parser (>= 0.0.31)
- YamlDotNet (>= 16.3.0)
-
net8.0
- Femur.Markdown.Abstractions (>= 0.0.31)
- Femur.Markdown.Extended.Abstractions (>= 0.0.31)
- Femur.Markdown.Parser (>= 0.0.31)
- YamlDotNet (>= 16.3.0)
-
net9.0
- Femur.Markdown.Abstractions (>= 0.0.31)
- Femur.Markdown.Extended.Abstractions (>= 0.0.31)
- Femur.Markdown.Parser (>= 0.0.31)
- YamlDotNet (>= 16.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.