ترجمه Markdown به مستند سازی مدل شی (DOM)

برای خواندن، دستکاری و تغییر برنامه ریزی محتوا و قالب بندی یک سند، باید آن را به مدل شیء سند Aspose.Words (DOM) ترجمه کنید.

برخلاف اسناد ورد، Markdown با DOM که در Aspose.Words مدل شیء سند (DOM) مقاله. با این حال، Aspose.Words مکانیسم خود را برای ترجمه Markdown اسناد به DOM و بازگشت فراهم می کند، به طوری که ما می توانیم با موفقیت با عناصر آنها مانند قالب بندی متن، جداول، سرصفحه ها و دیگران کار کنیم.

این مقاله توضیح می دهد که چگونه ویژگی های مختلف markdown را می توان به Aspose.Words DOM و به Markdown ترجمه کرد.

پیچیدگی ترجمه Markdown – DOM – Markdown

مشکل اصلی این مکانیزم نه تنها ترجمه Markdown به DOM، بلکه انجام تبدیل معکوس است – برای ذخیره سند به فرمت Markdown با حداقل از دست دادن. عناصری مانند نقل قول های چند سطحی وجود دارد که تبدیل معکوس برای آنها بی اهمیت نیست.

موتور ترجمه ما به کاربران اجازه می دهد نه تنها با عناصر پیچیده در یک سند Markdown موجود کار کنند، بلکه سند خود را در فرمت Markdown با ساختار اصلی از ابتدا ایجاد کنند. برای ایجاد عناصر مختلف، باید از سبک هایی با نام های خاص با توجه به قوانین خاصی که بعدا در این مقاله شرح داده شده است استفاده کنید. چنین سبک هایی می توانند به صورت برنامه ریزی شده ایجاد شوند.

اصول ترجمه متداول

ما از فرمت Font برای بلوک های خطی استفاده می کنیم. وقتی که هیچ مکاتبه مستقیم برای یک ویژگی Markdown در Aspose.Words DOM وجود ندارد، ما از یک سبک کاراکتر با نامی استفاده می کنیم که از برخی کلمات خاص شروع می شود.

برای بلوک های کانتینر، ما از میراث سبک برای نشان دادن ویژگی های آشیانه ای Markdown استفاده می کنیم. در این مورد، حتی زمانی که هیچ ویژگی آشیانه ای وجود ندارد، ما همچنین از سبک های پاراگراف با نامی استفاده می کنیم که از برخی کلمات خاص شروع می شود.

لیست های با گلوله و مرتب شده بلوک های کانتینری در Markdown نیز هستند. لانه سازی آنها در DOM به همان شیوه ای که برای تمام بلوک های کانتینر دیگر با استفاده از میراث سبک نشان داده شده است. با این حال، علاوه بر این، لیست های DOM دارای قالب بندی شماره مربوطه در سبک لیست یا قالب بندی پاراگراف هستند.

بلوک های خطی

ما هنگام ترجمه ویژگی های Bold، Italic یا Strikethrough inline markdown از قالب بندی Font استفاده می کنیم.

ویژگی Markdown 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 شروع می شود، و به دنبال آن یک نقطه اختیاری (.) و تعدادی از backticks (`) برای ویژگی InlineCode است. اگر تعدادی از backticks از دست رفته باشد، پس از آن یک backtick به طور پیش فرض استفاده خواهد شد.

ویژگی Markdown 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
Link
[link text](url)
[link text](<url>"title")
[link text](url 'title')
[link text](url (title))
کلاس FieldHyperlink
Image
![](url)
![alt text](<url>"title")
![alt text](url ‘title’)
![alt text](url (title))
کلاس Shape
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);

بلوک های کانتینری

یک سند یک دنباله از بلوک های کانتینر مانند عناوین، پاراگراف ها، لیست ها، نقل قول ها و دیگران است. بلوک های کانتینر را می توان به کلاس های 2 تقسیم کرد: بلوک های برگ و ظروف پیچیده. بلوک های برگ فقط می توانند حاوی محتوای خطی باشند. ظروف پیچیده به نوبه خود می توانند حاوی بلوک های ظرف دیگری از جمله بلوک های برگ باشند.

بلوک های برگ

جدول زیر نمونه هایی از استفاده از بلوک های برگ Markdown در Aspose.Wordsرا نشان می دهد:

ویژگی Markdown Aspose.Words
HorizontalRule
-----
این یک پاراگراف ساده با شکل HorizontalRule مربوطه است:
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")، جایی که (1<= N <= 9).
این به یک سبک داخلی ترجمه شده است و باید دقیقا از الگوی مشخص شده باشد (هیچ پسوند یا پیشوند مجاز نیست).
در غیر این صورت، فقط یک پاراگراف معمولی با سبک مربوطه خواهد بود.
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" سبک.
اگر (N > = 2)، پس "Heading 2" استفاده خواهد شد، در غیر این صورت "Heading 1".
هر پسوند مجاز است، اما وارد کننده Aspose.Words به ترتیب از اعداد “1” و “2” استفاده می کند.
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]")
[.] و [info string] اختیاری هستند.
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");

ظروف پیچیده

جدول زیر نمونه هایی از استفاده از Markdown ظروف پیچیده در Aspose.Wordsرا نشان می دهد:

ویژگی Markdown Aspose.Words
Quote
> quote,
>> nested quote
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]")
پسوند در نام سبک اختیاری است، اما وارد کننده Aspose.Words از اعداد مرتب شده استفاده می کند1, 2, 3, …. در مورد نقل قول های آشیانه ای.
لانه سازی از طریق سبک های ارثی تعریف می شود.
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
لیست های با گلوله با استفاده از شماره گذاری پاراگراف نمایش داده می شوند:
get_ListFormat()->ApplyBulletDefault()
می تواند 3 انواع لیست های با گلوله وجود داشته باشد. آنها فقط در قالب شماره گذاری در سطح اول متفاوت هستند. این ها عبارتند از: ‘-’، ‘+’ یا ‘*’ به ترتیب.
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
لیست های مرتب شده با استفاده از شماره گذاری پاراگراف نمایش داده می شوند:
get_ListFormat()->ApplyNumberDefault()
می تواند نشانگرهای فرمت عدد 2 وجود داشته باشد: ‘.’ و ‘)’. نشانگر پیش فرض ‘.’ است.
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");

جداول

Aspose.Words همچنین اجازه می دهد تا جداول را به DOM ترجمه کنیم، همانطور که در زیر نشان داده شده است:

ویژگی Markdown Aspose.Words
Table
a|b
-|-
c|d
Table، Row و Cell کلاس ها.
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");

بایگانی برچسب برای: