Перетворити 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) |
Клас 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< = N < = 9).Це перекладається у вбудований стиль і має точно відповідати вказаному шаблону (суфікси та префікси заборонені). В іншому випадку це буде просто звичайний абзац із відповідним стилем. |
Setext Heading=== (if Heading level 1),--- (if Heading level 2) |
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), заснований на стилі “Заголовок N”.Якщо (N > = 2), то буде використано “Heading 2”, інакше “Heading 1”. Допускається використання будь-якого суфікса, але Aspose.Words імпортер використовує цифри “1” і “2” відповідно. |
| Indented Code | get_ParagraphFormat->set_StyleName(u"IndentedCode[some suffix]") |
Fenced Code |
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()марковані списки можуть бути трьох типів. Вони розрізняються тільки в форматі нумерації самого першого рівня. Це: ‘-’, ‘+’ або ‘*’ відповідно. |
OrderedList1. Item 12. Item 21) Item 2a2) Item 2b |
Упорядковані списки представлені за допомогою нумерації абзаців:get_ListFormat()->ApplyNumberDefault()може бути 2 маркери числового формату: ‘.’ і ‘)’. За замовчуванням використовується маркер ‘.’. |
Таблиця
Aspose.Words також дозволяє перетворити таблиці на DOM, Як показано нижче:
| Markdown особливість | Aspose.Words |
|---|---|
Tablea|b-|-c|d |
класи Table, Row і Cell. |