SpecWorks.MarkMyDeck
0.1.0
.NET 10.0
This package targets .NET 10.0. The package is compatible with this framework or higher.
.NET Standard 2.1
This package targets .NET Standard 2.1. The package is compatible with this framework or higher.
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package SpecWorks.MarkMyDeck --version 0.1.0
NuGet\Install-Package SpecWorks.MarkMyDeck -Version 0.1.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SpecWorks.MarkMyDeck" Version="0.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SpecWorks.MarkMyDeck" Version="0.1.0" />
<PackageReference Include="SpecWorks.MarkMyDeck" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SpecWorks.MarkMyDeck --version 0.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: SpecWorks.MarkMyDeck, 0.1.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SpecWorks.MarkMyDeck@0.1.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SpecWorks.MarkMyDeck&version=0.1.0
#tool nuget:?package=SpecWorks.MarkMyDeck&version=0.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
MarkMyDeck
A .NET library for converting CommonMark/GitHub Flavored Markdown to Microsoft PowerPoint (.pptx) presentations. The library targets .NET Standard 2.1 and .NET 10, and the CLI targets .NET 10.
Features
- Markdown → PowerPoint: Convert CommonMark markdown to PowerPoint (.pptx) presentations using the Open XML SDK
Currently Supported
✅ Slide Generation
# H1and## H2headings create new slides### H3through###### H6render as styled text on the current slide---(thematic breaks) force a new slide- Content between headings renders on the current slide
✅ Block Elements
- Headings (ATX:
# H1through###### H6) - Paragraphs
- Code blocks (fenced with ```) with syntax highlighting
- Block quotes (
>) - Thematic breaks (
---,***,___) as slide separators - Lists (ordered, unordered, nested)
- Tables (with headers, borders, and shading)
✅ Inline Elements
- Bold (
**text**or__text__) - Italic (
*text*or_text_) - Bold + Italic (
***text***) - Inline code (
`code`) - Links (
[text](url)) - Images (
) - Hard line breaks
✅ Styling
- Customizable fonts and colors
- Configurable heading/title sizes
- Code syntax highlighting for JSON, TypeSpec, and Bash
- Widescreen 16:9 slide format
Installation
dotnet add package SpecWorks.MarkMyDeck
Quick Start
using MarkMyDeck;
// Convert markdown string to .pptx file
string markdown = "# Hello World\n\nThis is **bold** text.\n\n---\n\n# Slide 2\n\n- Item 1\n- Item 2";
MarkdownConverter.ConvertToPptx(markdown, "output.pptx");
Convert to Byte Array
byte[] pptxBytes = MarkdownConverter.ConvertToPptxBytes(markdown);
Stream-based Conversion
using var inputStream = File.OpenRead("input.md");
using var outputStream = File.Create("output.pptx");
MarkdownConverter.ConvertToPptx(inputStream, outputStream);
Async Conversion
await MarkdownConverter.ConvertToPptxAsync(markdown, "output.pptx");
Custom Styling
using MarkMyDeck.Configuration;
var options = new ConversionOptions
{
Styles = new SlideStyleConfiguration
{
DefaultFontName = "Arial",
DefaultFontSize = 20,
TitleFontSize = 40,
TitleColor = "2E74B5",
CodeFontName = "Fira Code",
CodeFontSize = 16,
CodeBackgroundColor = "282C34"
},
DocumentTitle = "My Presentation",
Author = "John Doe"
};
MarkdownConverter.ConvertToPptx(markdown, "styled.pptx", options);
Command-Line Interface
MarkMyDeck includes a CLI for converting markdown files from the command line.
Installation
dotnet tool install --global SpecWorks.MarkMyDeck.CLI
Or run directly from the project:
dotnet run --project src/MarkMyDeck.CLI/MarkMyDeck.CLI.csproj -- convert -i input.md
Usage
# Basic conversion
markmydeck convert -i README.md
# Specify output file
markmydeck convert -i input.md -o output.pptx
# Custom font and size
markmydeck convert -i document.md --font "Arial" --font-size 20
# With title metadata
markmydeck convert -i document.md --title "My Presentation"
# Verbose output
markmydeck convert -i document.md -v
# Force overwrite
markmydeck convert -i document.md --force
# View version
markmydeck version
CLI Options
| Option | Alias | Description |
|---|---|---|
--input |
-i |
Input markdown file path (required) |
--output |
-o |
Output file path (default: same name with .pptx) |
--verbose |
-v |
Enable verbose output |
--force |
- | Overwrite output file if it exists |
--font |
-f |
Default font name |
--font-size |
-s |
Default font size (6-72 points) |
--title |
-t |
Presentation title metadata |
Architecture
MarkMyDeck uses a three-stage conversion pipeline:
- Parse: Markdown is parsed into an AST using Markdig
- Render: The AST is traversed and converted to OpenXML Presentation elements
- Save: The presentation is saved using DocumentFormat.OpenXml
Slide Strategy
# H1and## H2headings create new slides### H3through###### H6are rendered as styled text within the current slide---thematic breaks force a new slide- All other content (paragraphs, lists, tables, code blocks) renders on the current slide
Project Structure
MarkMyDeck/
├── src/
│ ├── MarkMyDeck/ # Core library (netstandard2.1;net10.0)
│ │ ├── MarkdownConverter.cs # Public API
│ │ ├── Converters/
│ │ │ ├── OpenXmlPresentationRenderer.cs # Main renderer
│ │ │ ├── BlockRenderers/ # Block element renderers
│ │ │ └── InlineRenderers/ # Inline element renderers
│ │ ├── SyntaxHighlighting/ # Syntax highlighting
│ │ ├── OpenXml/
│ │ │ ├── PresentationBuilder.cs # OpenXML presentation builder
│ │ │ └── SlideManager.cs # Slide content management
│ │ └── Configuration/ # Configuration classes
│ └── MarkMyDeck.CLI/ # Command-line tool (net10.0)
└── tests/
└── MarkMyDeck.Tests/ # Unit tests (net10.0)
Requirements
- Library: .NET Standard 2.1 or .NET 10.0
- CLI: .NET 10.0
- Dependencies:
- Markdig 0.37.0
- DocumentFormat.OpenXml 3.1.0
- ColorCode.Core 2.0.15
Building from Source
git clone https://github.com/spec-works/MarkMyDeck.git
cd MarkMyDeck/dotnet
dotnet build
dotnet test
License
MIT License
Acknowledgments
- Built with Markdig by Alexandre Mutel
- Uses DocumentFormat.OpenXml by Microsoft
- Implements CommonMark specification
- Inspired by MarkMyWord
| 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 was computed. 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 was computed. 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 | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.1
- ColorCode.Core (>= 2.0.15)
- DocumentFormat.OpenXml (>= 3.1.0)
- Markdig (>= 0.37.0)
- System.IO.Packaging (>= 8.0.1)
-
net10.0
- ColorCode.Core (>= 2.0.15)
- DocumentFormat.OpenXml (>= 3.1.0)
- Markdig (>= 0.37.0)
- System.IO.Packaging (>= 8.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.