Перевести 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 или Зачеркнутых встроенных функций markdown.
Markdown особенность | Aspose.Words | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bold**bold text** |
get_Font()->set_Bold(true) |
||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||
Italic*italic text* |
get_Font()->set_Italic(true) |
||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||
Strikethrough~Strikethrough text~ |
get_Font()->set_StrikeThrough(true) |
||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
Мы используем стиль символов с названием, которое начинается со слова InlineCode
, за которым следует необязательная точка (.)
и несколько обратных знаков (`)
for the ` Функция встроенного кода. Если пропущено несколько обратных ссылок, то по умолчанию будет использоваться одна обратная ссылка.
Markdown особенность | Aspose.Words | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
InlineCode**inline code** |
get_Font()->set_StyleName(u"InlineCode[.][N]") |
||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||
Autolink<scheme://domain.com> <email@domain.com> |
Класс FieldHyperlink. | ||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||
Link[link text](url) [link text](<url>"title") [link text](url 'title') [link text](url (title)) |
Класс FieldHyperlink. | ||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||
Image![](url) ![alt text](<url>"title") ![alt text](url ‘title’) ![alt text](url (title)) |
Класс Shape. | ||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
Контейнерные блоки
Документ представляет собой последовательность блоков-контейнеров, таких как заголовки, абзацы, списки, цитаты и другие. Блоки-контейнеры можно разделить на классы 2: Конечные блоки и сложные контейнеры. Конечные блоки могут содержать только встроенное содержимое. Сложные контейнеры, в свою очередь, могут содержать другие блоки контейнеров, включая конечные блоки.
Листовые блоки
В таблице ниже приведены примеры использования конечных блоков Markdown в Aspose.Words:
Markdown особенность | Aspose.Words | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
HorizontalRule----- |
Это простой абзац с соответствующей формой HorizontalRule:DocumentBuilder::InsertHorizontalRule() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ATX Heading# H1, ## H2, ### H3… |
get_ParagraphFormat()->set_StyleName(u"Heading N") , где (1<= N <= 9).Это переводится во встроенный стиль и должно точно соответствовать указанному шаблону (суффиксы и префиксы не допускаются). В противном случае это будет просто обычный абзац с соответствующим стилем. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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” соответственно. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Indented Code | get_ParagraphFormat->set_StyleName(u"IndentedCode[some suffix]") |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Fenced Code
|
get_ParagraphFormat()->set_StyleName(u"FencedCode[.][info string]") Значения [.] и [info string] являются необязательными. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
Сложные контейнеры
В таблице ниже приведены примеры использования Markdown сложных контейнеров в Aspose.Words:
Markdown особенность | Aspose.Words | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Quote> quote, >> nested quote |
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]") Суффикс в названии стиля необязателен, но Aspose.Words импортер использует упорядоченные номера 1, 2, 3, …. в случае вложенных кавычек. Вложенность определяется с помощью унаследованных стилей. |
||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||||||
BulletedList- Item 1 - Item 2 - Item 2a - Item 2b |
Маркированные списки представлены с использованием нумерации абзацев:get_ListFormat()->ApplyBulletDefault() Маркированных списков может быть 3 типов. Они различаются только в формате нумерации самого первого уровня. Это: ‘-’ , ‘+’ или ‘*’ соответственно. |
||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
|||||||||||||||||||||||||||||||
OrderedList1. Item 1 2. Item 2 1) Item 2a 2) Item 2b |
Упорядоченные списки представлены с использованием нумерации абзацев:get_ListFormat()->ApplyNumberDefault() Могут быть маркеры числового формата 2: ‘.’ и ‘)’. По умолчанию используется маркер ‘.’. |
||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
Таблицы
Aspose.Words также позволяет переводить таблицы в DOM, как показано ниже:
Markdown особенность | Aspose.Words | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Table a|b -|- c|d |
классы Table, Row и Cell. | ||||||||||||||||||||||||||||||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|