Преведи Markdown в модел на обект на документ (DOM)

За да четете програмно, манипулирате и променяте съдържанието и форматирането на документ, трябва да го преведете в Aspose.Words обектен модел на документ (DOM).

За разлика от Word документи, 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 имат съответстващо форматиране на числа в стил на списък или форматиране на абзац.

Вградени Блокове

Ние използваме Font форматиране, когато превеждаме Bold, Italic или Strikethrough инлайн markdown функции.

Markdown функция Aspose.Words
Bold
**bold text**
get_Font()->set_Bold(true)
Italic
*italic text*
get_Font()->set_Italic(true)
Strikethrough
~Strikethrough text~
get_Font()->set_StrikeThrough(true)

Използваме символен стил с име, което започва от думата InlineCode, последвано от незадължителна точка (.) и няколко бекстека (`) за функцията InlineCode. Ако се пропуснат няколко беклека, тогава по подразбиране ще се използва един беклик.

Markdown функция Aspose.Words
InlineCode
**inline code**
get_Font()->set_StyleName(u"InlineCode[.][N]")
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 клас.

Контейнерни Блокове

Документът е поредица от контейнерни блокове, като например заглавия, параграфи, списъци, цитати и други. Контейнерните блокове могат да бъдат разделени на 2 класа: листни блокове и сложни контейнери. Листните блокове могат да съдържат само вградено съдържание. Сложните контейнери, от своя страна, могат да съдържат други контейнерни блокове, включително листни блокове.

Блокове Листа

Таблицата по-долу показва примери за използване на Markdown листни блокове в Aspose.Words:

Markdown функция Aspose.Words
HorizontalRule
-----
Това е прост абзац със съответстваща форма HorizontalRule:
DocumentBuilder::InsertHorizontalRule()
ATX Heading
# H1, ## H2, ### H3…
get_ParagraphFormat()->set_StyleName(u"Heading N"), където (1<= Н <= 9).
Това е преведено във вграден стил и трябва да бъде точно на посочения модел (не се допускат наставки или представки).
В противен случай това ще бъде просто обикновен параграф със съответен стил.
Setext Heading
=== (if Heading level 1),
--- (if Heading level 2)
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), въз основа на ‘заглавие и’ стил.
Ако (Н > = 2), тогава ще се използваHeading 2', в противен случай' Heading 1'.
Допуска се всяка наставка, но Aspose.Words вносителят използва съответно номера “1” и “2”.
Indented Code get_ParagraphFormat->set_StyleName(u"IndentedCode[some suffix]")
Fenced Code
``` c#
if ()
then
else
```
get_ParagraphFormat()->set_StyleName(u"FencedCode[.][info string]")
[.] и [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, …. в случай на вложени цитати.
Гнезденето се определя чрез наследените стилове.
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Списъците с водещи символи са представени с номериране на абзаци:
get_ListFormat()->ApplyBulletDefault()
може да има 3 вида списъци с водещи символи. Те са само различие в номериращ формат на първото ниво. Те са: ‘-’, ‘+’ или ‘*’ съответно.
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Подредените списъци се представят с номериране на абзаци:
get_ListFormat()->ApplyNumberDefault()
може да има 2 числови формат маркери: ‘.’ и ‘)’. Маркерът по подразбиране е ‘.’.

Маси

Aspose.Words също така позволява да се преведат таблици в DOM, както е показано по-долу:

Markdown функция Aspose.Words
Table
a|b
-|-
c|d
Класове Table, Row и Cell.

Вижте Също