Перетворити 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< = 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 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. |