Working with Markdown Features
This topic discusses how to implement Markdown features using Aspose.Words. Markdown is a simple way to format plain text that can easily be converted to HTML. Aspose.Words supports the following Markdown features:
- Headings
- Blockquotes
- Horizontal rules
- Bold emphasis
- Italic emphasis
The Markdown feature implementation mostly follows the CommonMark
specification in Aspose.Words API and all the features are represented as corresponding styles or direct formatting. Which means that
- Bold and Italic are represented as
Font.Bold
andFont.Italic
. - Headings are paragraphs with Heading 1 - Heading 6 styles.
- Quotes are paragraphs with “Quote” in the style name.
- HorizontalRule is a paragraph with HorizontalRule shape.
Markdown Document with Emphases
This section demonstrates you how to produce a markdown document with emphases as given below:
Markdown treats asterisks (*) and underscores (_) as indicators of emphasis.
You can write **bold** or *italic* text.
You can also write ***BoldItalic***text.
The following code snippet can be used to produce the above-given markdown document.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"Markdown treats asterisks (*) and underscores (_) as indicators of emphasis."); | |
builder->Write(u"You can write "); | |
builder->get_Font()->set_Bold(true); | |
builder->Write(u"bold"); | |
builder->get_Font()->set_Bold(false); | |
builder->Write(u" or "); | |
builder->get_Font()->set_Italic(true); | |
builder->Write(u"italic"); | |
builder->get_Font()->set_Italic(false); | |
builder->Writeln(u" text. "); | |
builder->Write(u"You can also write "); | |
builder->get_Font()->set_Bold(true); | |
builder->get_Font()->set_Italic(true); | |
builder->Write(u"BoldItalic"); | |
builder->get_Font()->set_Bold(false); | |
builder->get_Font()->set_Italic(false); | |
builder->Write(u"text."); | |
System::String outputPath = outputDataDir + u"WorkingWithMarkdownFeatures.MarkdownDocumentWithEmphases.md"; | |
builder->get_Document()->Save(outputPath); |
Markdown Document with Headings
This section demonstrates you how to produce a markdown document with headings as given below:
The following produces headings:
# Heading1
## Heading2
### Heading3
#### Heading4
##### Heading5
###### Heading6
# **Bold Heading1**
The following code snippet can be used to produce the above-given markdown document.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
// By default Heading styles in Word may have bold and italic formatting. | |
// If we do not want text to be emphasized, set these properties explicitly to false. | |
builder->get_Font()->set_Bold(false); | |
builder->get_Font()->set_Italic(false); | |
builder->Writeln(u"The following produces headings:"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 1")); | |
builder->Writeln(u"Heading1"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 2")); | |
builder->Writeln(u"Heading2"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 3")); | |
builder->Writeln(u"Heading3"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 4")); | |
builder->Writeln(u"Heading4"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 5")); | |
builder->Writeln(u"Heading5"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 6")); | |
builder->Writeln(u"Heading6"); | |
// Note, emphases are also allowed inside Headings: | |
builder->get_Font()->set_Bold(true); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 1")); | |
builder->Writeln(u"Bold Heading1"); | |
System::String outputPath = outputDataDir + u"WorkingWithMarkdownFeatures.MarkdownDocumentWithHeadings.md"; | |
doc->Save(outputPath); |
Markdown Document with Block Quotes
This section demonstrates you how to produce a markdown document with block quotes as given below:
We support blockquotes in Markdown:
>*Lorem*
>*ipsum*
>The quotes can be of any level and can be nested:
>>>Quote level 3
>>>
>>>>Nested quote level 4
>
>*Back to first level*
>### Headings are allowed inside Quotes
>
The following code snippet can be used to produce the above-given markdown document.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Writeln(u"We support blockquotes in Markdown:"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Quote")); | |
builder->Writeln(u"Lorem"); | |
builder->Writeln(u"ipsum"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Normal")); | |
builder->Writeln(u"The quotes can be of any level and can be nested:"); | |
System::SharedPtr<Style> quoteLevel3 = doc->get_Styles()->Add(Aspose::Words::StyleType::Paragraph, u"Quote2"); | |
builder->get_ParagraphFormat()->set_Style(quoteLevel3); | |
builder->Writeln(u"Quote level 3"); | |
System::SharedPtr<Style> quoteLevel4 = doc->get_Styles()->Add(Aspose::Words::StyleType::Paragraph, u"Quote3"); | |
builder->get_ParagraphFormat()->set_Style(quoteLevel4); | |
builder->Writeln(u"Nested quote level 4"); | |
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Quote")); | |
builder->Writeln(); | |
builder->Writeln(u"Back to first level"); | |
System::SharedPtr<Style> quoteLevel1WithHeading = doc->get_Styles()->Add(Aspose::Words::StyleType::Paragraph, u"Quote Heading 3"); | |
builder->get_ParagraphFormat()->set_Style(quoteLevel1WithHeading); | |
builder->Write(u"Headings are allowed inside Quotes"); | |
System::String outputPath = outputDataDir + u"WorkingWithMarkdownFeatures.MarkdownDocumentWithBlockQuotes.md"; | |
doc->Save(outputPath); |
Markdown Document with Horizontal Rule
This section demonstrates you how to produce a markdown document with Horizontal Rule as given below:
We support Horizontal rules (Thematic breaks) in Markdown:
-----
The following code snippet can be used to produce the above-given markdown document.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(System::MakeObject<Document>()); | |
builder->Writeln(u"We support Horizontal rules (Thematic breaks) in Markdown:"); | |
builder->InsertHorizontalRule(); | |
System::String outputPath = outputDataDir + u"WorkingWithMarkdownFeatures.MarkdownDocumentWithHorizontalRule.md"; | |
builder->get_Document()->Save(outputPath); |
Reading a Markdown Document
The following code snippet shows you how to read a markdown document.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// This is Markdown document that was produced in example of UC3. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"QuotesExample.md"); | |
// Let's remove Heading formatting from a Quote in the very last paragraph. | |
System::SharedPtr<Paragraph> paragraph = doc->get_FirstSection()->get_Body()->get_LastParagraph(); | |
paragraph->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Quote")); | |
System::String outputPath = outputDataDir + u"WorkingWithMarkdownFeatures.ReadMarkdownDocument.md"; | |
doc->Save(outputPath); |
Specify Markdown Save Options
Aspose.Words API provides MarkdownSaveOptions class to specify additional options while saving a document into the Markdown format.
The following code example demonstrated how to specify various Markdown save options.
auto builder = System::MakeObject<DocumentBuilder>(); | |
builder->Writeln(u"Some text!"); | |
// specify MarkDownSaveOptions | |
auto saveOptions = SaveOptions::CreateSaveOptions(SaveFormat::Markdown); | |
builder->get_Document()->Save(outputDataDir + u"TestDocument.md", saveOptions); |
How to Align Content Inside the Table while Exporting into Markdown
Aspose.Words API provides TableContentAlignment enumeration which defines alignment directions to align contents in tables while exporting into the Markdown document. The following code example demonstrates how to align content inside the table.
auto builder = System::MakeObject<DocumentBuilder>(); | |
// Create a new table with two cells. | |
builder->InsertCell(); | |
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Right); | |
builder->Write(u"Cell1"); | |
builder->InsertCell(); | |
builder->get_ParagraphFormat()->set_Alignment(ParagraphAlignment::Center); | |
builder->Write(u"Cell2"); | |
auto saveOptions = System::MakeObject<MarkdownSaveOptions>(); | |
// Makes all paragraphs inside table to be aligned to Left. | |
saveOptions->set_TableContentAlignment(TableContentAlignment::Left); | |
builder->get_Document()->Save(outputDataDir + u"left.md", saveOptions); | |
// Makes all paragraphs inside table to be aligned to Right. | |
saveOptions->set_TableContentAlignment(TableContentAlignment::Right); | |
builder->get_Document()->Save(outputDataDir + u"right.md", saveOptions); | |
// Makes all paragraphs inside table to be aligned to Center. | |
saveOptions->set_TableContentAlignment(TableContentAlignment::Center); | |
builder->get_Document()->Save(outputDataDir + u"center.md", saveOptions); | |
// Makes all paragraphs inside table to be aligned automatically. | |
// The alignment in this case will be taken from the first paragraph in corresponding table column. | |
saveOptions->set_TableContentAlignment(TableContentAlignment::Auto); | |
builder->get_Document()->Save(outputDataDir + u"auto.md", saveOptions); |