Markdown öğesini Belge Nesne Modeline Çevir (DOM)

Bir belgenin içeriğini ve biçimlendirmesini programlı olarak okumak, değiştirmek ve değiştirmek için belgeyi Aspose.Words Belge Nesne Modeline (DOM) çevirmeniz gerekir.

Word belgelerinin aksine, Markdown, belgede açıklanan DOM belgesine uymaz. Aspose.Words Belge Nesne Modeli (DOM) makale. Ancak Aspose.Words, metin biçimlendirme, tablolar, üstbilgiler ve diğerleri gibi öğeleriyle başarılı bir şekilde çalışabilmemiz için Markdown belgelerini DOM ‘e ve geriye çevirmek için kendi mekanizmasını sağlar.

Bu makalede, çeşitli markdown özelliklerin Aspose.Words DOM biçimine ve Markdown biçimine nasıl çevrilebileceği açıklanmaktadır.

Çevirinin Karmaşıklığı Markdown – DOM – Markdown

Bu mekanizmanın temel zorluğu sadece Markdown ‘ı DOM ‘e çevirmek değil, aynı zamanda ters dönüşümü yapmaktır – belgeyi en az kayıpla Markdown biçimine geri kaydetmek. Ters dönüşümün önemsiz olmadığı çok düzeyli alıntılar gibi öğeler vardır.

Çeviri motorumuz, kullanıcıların yalnızca mevcut bir Markdown belgedeki karmaşık öğelerle çalışmasına değil, aynı zamanda orijinal yapısıyla sıfırdan Markdown biçiminde kendi belgelerini oluşturmasına da olanak tanır. Çeşitli öğeler oluşturmak için, bu makalenin ilerleyen bölümlerinde açıklanan belirli kurallara göre belirli adlara sahip stilleri kullanmanız gerekir. Bu tür stiller programlı olarak oluşturulabilir.

Ortak Çeviri İlkeleri

Satır içi bloklar için Font biçimlendirme kullanıyoruz. Aspose.Words DOM içindeki bir Markdown özelliği için doğrudan bir yazışma olmadığında, bazı özel kelimelerden başlayan bir ada sahip bir karakter stili kullanırız.

Konteyner blokları için, iç içe Markdown özellikleri belirtmek için stil kalıtımını kullanırız. Bu durumda, iç içe geçmiş özellikler olmasa bile, bazı özel kelimelerden başlayan bir ada sahip paragraf stilleri de kullanırız.

Madde işaretli ve sıralı listeler Markdown içindeki kapsayıcı bloklarıdır. İç içe geçmeleri, stil kalıtımını kullanan diğer tüm kapsayıcı bloklarda olduğu gibi DOM ile temsil edilir. Bununla birlikte, ek olarak, DOM içindeki listeler, liste stilinde veya paragraf biçimlendirmesinde karşılık gelen sayı biçimlendirmesine sahiptir.

Satır İçi Bloklar

Bold, Italic veya Strikethrough satır içi markdown özelliklerini çevirirken Font biçimlendirme kullanıyoruz.

Markdown özellik Aspose.Words
Bold
**bold text**
get_Font()->set_Bold(true)
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
// Make the text Bold.
builder->get_Font()->set_Bold(true);
builder->Writeln(u"This text will be Bold");
Italic
*italic text*
get_Font()->set_Italic(true)
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
// Make the text Italic.
builder->get_Font()->set_Italic(true);
builder->Writeln(u"This text will be Italic");
Strikethrough
~Strikethrough text~
get_Font()->set_StrikeThrough(true)
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
// Make the text Strikethrough.
builder->get_Font()->set_StrikeThrough(true);
builder->Writeln(u"This text will be Strikethrough");

InlineCode kelimesinden başlayan bir ada sahip bir karakter stili, ardından InlineCode özelliği için isteğe bağlı bir nokta (.) ve bir dizi geri işaret (`) kullanıyoruz. Bir dizi backtick kaçırılırsa, varsayılan olarak bir backtick kullanılır.

Markdown özellik Aspose.Words
InlineCode
**inline code**
get_Font()->set_StyleName(u"InlineCode[.][N]")
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
// Number of backticks is missed, one backtick will be used by default.
auto inlineCode1BackTicks = builder->get_Document()->get_Styles->Add(StyleType::Character, u"InlineCode");
builder->get_Font()->set_Style(inlineCode1BackTicks);
builder->Writeln(u"Text with InlineCode style with 1 backtick");
// There will be 3 backticks.
auto inlineCode3BackTicks = builder->get_Document()->get_Styles->Add(StyleType::Character, u"InlineCode.3");
builder->get_Font()->set_Style(inlineCode3BackTicks);
builder->Writeln(u"Text with InlineCode style with 3 backtick");
Autolink
<scheme://domain.com>
<email@domain.com>
FieldHyperlink sınıfı.
Link
[link text](url)
[link text](<url>"title")
[link text](url 'title')
[link text](url (title))
FieldHyperlink sınıfı.
Image
![](url)
![alt text](<url>"title")
![alt text](url ‘title’)
![alt text](url (title))
Shape sınıfı.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto doc = System::MakeObject<Document>();
auto builder = System::MakeObject<DocumentBuilder>(doc);
// Insert image.
auto shape = System::MakeObject<Shape>(doc, ShapeType::Image);
shape->set_WrapType(WrapType::Inline);
shape->get_ImageData()->set_SourceFullName(u"/attachment/1456/pic001.png");
shape->get_ImageData()->set_Title(u"title");
builder->InsertNode(shape);

Konteyner Blokları

Belge, başlıklar, paragraflar, listeler, alıntılar ve diğerleri gibi bir kapsayıcı blokları dizisidir. Konteyner blokları 2 sınıflarına ayrılabilir: Yaprak blokları ve Karmaşık Kaplar. Yaprak blokları yalnızca satır içi içerik içerebilir. Karmaşık kaplar, sırayla, Yaprak blokları da dahil olmak üzere başka kap blokları içerebilir.

Yaprak Blokları

Aşağıdaki tablo, Aspose.Words içinde Markdown Yaprak bloklarının kullanımına ilişkin örnekleri göstermektedir:

Markdown özellik Aspose.Words
HorizontalRule
-----
Bu, karşılık gelen HorizontalRule şekline sahip basit bir paragraftır:
DocumentBuilder::InsertHorizontalRule()
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
// Insert horizontal rule.
builder->InsertHorizontalRule();
ATX Heading
# H1, ## H2, ### H3…
get_ParagraphFormat()->set_StyleName(u"Heading N"), nerede (1<= N <= 9).
Bu, yerleşik bir stile çevrilir ve tam olarak belirtilen desende olmalıdır (soneklere veya öneklere izin verilmez).
Aksi takdirde, karşılık gelen bir stile sahip normal bir paragraf olacaktır.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
// By default Heading styles in Word may have Bold and Italic formatting.
// If we do not want to be emphasized, set these properties explicitly to false.
builder->get_Font()->set_Bold(false);
builder->get_Font()->set_Italic(false);
builder->get_ParagraphFormat()->set_StyleName(u"Heading 1");
builder->Writeln(u"This is an H1 tag");
Setext Heading
=== (if Heading level 1),
--- (if Heading level 2)
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), "Heading N" stiline göre.
Eğer (N> = 2), o zaman "Heading 2" kullanılacaktır, aksi takdirde "Heading 1".
Herhangi bir son eke izin verilir, ancak Aspose.Words içe aktarıcı sırasıyla “1” ve “2” numaralarını kullanır.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto doc = System::MakeObject<Document>();
auto builder = System::MakeObject<DocumentBuilder>(doc);
builder->get_ParagraphFormat()->set_StyleName(u"Heading 1");
builder->Writeln(u"This is an H1 tag");
// Reset styles from the previous paragraph to not combine styles between paragraphs.
builder->get_Font()->set_Bold(false);
builder->get_Font()->set_Italic(false);
auto setexHeading1 = builder->get_Document()->get_Styles->Add(StyleType::Paragraph, u"SetextHeading1");
builder->get_ParagraphFormat()->set_Style(setexHeading1);
doc->get_Styles()->idx_get(u"SetextHeading1")->set_BaseStyleName(u"Heading 1");
builder->Writeln(u"Setext Heading level 1");
builder->get_ParagraphFormat()->set_Style(doc->get_Styles()->idx_get(u"Heading 3"));
builder->Writeln(u"This is an H3 tag");
// Reset styles from the previous paragraph to not combine styles between paragraphs.
builder->get_Font()->set_Bold(false);
builder->get_Font()->set_Italic(false);
auto setexHeading2 = builder->get_Document()->get_Styles->Add(StyleType::Paragraph, u"SetextHeading2");
builder->get_ParagraphFormat()->set_Style(setexHeading2);
doc->get_Styles()->idx_get(u"SetextHeading2")->set_BaseStyleName(u"Heading 3");
// Setex heading level will be reset to 2 if the base paragraph has a Heading level greater than 2.
builder->Writeln(u"Setext Heading level 2");
Indented Code get_ParagraphFormat->set_StyleName(u"IndentedCode[some suffix]")
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto doc = System::MakeObject<Document>();
auto builder = System::MakeObject<DocumentBuilder>(doc);
auto indentedCode = builder->get_Document()->get_Styles->Add(StyleType::Paragraph, u"IndentedCode");
builder->get_ParagraphFormat()->set_StyleName(indentedCode);
builder->Writeln(u"This is an indented code");
Fenced Code
``` c#
if ()
then
else
```
get_ParagraphFormat()->set_StyleName(u"FencedCode[.][info string]")
[.] ve [info string] isteğe bağlıdır.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto doc = System::MakeObject<Document>();
auto builder = System::MakeObject<DocumentBuilder>(doc);
auto fencedCode = builder->get_Document()->get_Styles->Add(StyleType::Paragraph, u"FencedCode");
builder->get_ParagraphFormat()->set_StyleName(fencedCode);
builder->Writeln(u"This is an fenced code");
auto fencedCodeWithInfo = builder->get_Document()->get_Styles->Add(StyleType::Paragraph, u"FencedCode.C#");
builder->get_ParagraphFormat()->set_StyleName(fencedCodeWithInfo);
builder->Writeln(u"This is a fenced code with info string");

Karmaşık Konteynerler

Aşağıdaki tablo, Aspose.Words içinde Markdown Karmaşık Kapsayıcıları kullanma örneklerini göstermektedir:

Markdown özellik Aspose.Words
Quote
> quote,
>> nested quote
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]")
Stil adındaki sonek isteğe bağlıdır, ancak Aspose.Words içe aktarıcı sıralı numaraları kullanır 1, 2, 3, …. iç içe geçmiş alıntılar durumunda.
Yuvalama, devralınan stiller aracılığıyla tanımlanır.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto doc = System::MakeObject<Document>();
auto builder = System::MakeObject<DocumentBuilder>(doc);
// By default a document stores blockquote style for the first level.
builder->get_ParagraphFormat()->set_StyleName(u"Quote");
builder->Writeln(u"Blockquote");
// Create styles for nested levels through style inheritance.
auto quoteLevel2 = builder->get_Document()->get_Styles->Add(StyleType::Paragraph, u"Quote1");
builder->get_ParagraphFormat()->set_StyleName(quoteLevel2);
builder->get_Document()->get_Styles->idx_get(u"Quote1")->set_BaseStyleName(u"Quote");
builder->Writeln(u"1. Nested blockquote");
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Madde işaretli listeler paragraf numaralandırması kullanılarak temsil edilir:
get_ListFormat()->ApplyBulletDefault()
3 madde işaretli liste türleri olabilir. Bunlar yalnızca ilk seviyenin numaralandırma biçiminde farklılık gösterir. Bunlar: sırasıyla ‘-’, ‘+’ veya ‘*’.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
builder->get_ListFormat()->ApplyBulletDefault();
builder->get_ListFormat()->get_List()->get_ListLevels()->idx_get(0)->set_NumberFormat(u"-");
builder->Writeln(u"Item 1");
builder->Writeln(u"Item 2");
builder->get_ListFormat()->ListIndent();
builder->Writeln(u"Item 2a");
builder->Writeln(u"Item 2b");
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Sıralı listeler paragraf numaralandırması kullanılarak temsil edilir:
get_ListFormat()->ApplyNumberDefault()
2 sayı biçimi belirteçleri olabilir: ‘.’ ve ‘)’. Varsayılan belirteç ‘.’ ‘dir.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
builder->get_ListFormat()->ApplyBulletDefault();
builder->get_ListFormat()->get_List()->get_ListLevels()->idx_get(0)->set_NumberFormat(System::String::Format(u"{0}.", (char16_t)0));
builder->get_ListFormat()->get_List()->get_ListLevels()->idx_get(1)->set_NumberFormat(System::String::Format(u"{0}.", (char16_t)1));
builder->Writeln(u"Item 1");
builder->Writeln(u"Item 2");
builder->get_ListFormat()->ListIndent();
builder->Writeln(u"Item 2a");
builder->Writeln(u"Item 2b");

Masalar

Aspose.Words ayrıca aşağıda gösterildiği gibi tabloların DOM ‘e çevrilmesine de izin verir:

Markdown özellik Aspose.Words
Table
a|b
-|-
c|d
Table, Row ve Cell sınıfları.
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Use a document builder to add content to the document.
auto builder = System::MakeObject<DocumentBuilder>();
// Add the first row.
builder->InsertCell();
builder->Writeln(u"a");
builder->InsertCell();
builder->Writeln(u"b");
// Add the second row.
builder->InsertCell();
builder->Writeln(u"c");
builder->InsertCell();
builder->Writeln(u"d");

Ayrıca bakınız