Translate Markdown to Document Object Model (DOM)

Aby programowo odczytywać, manipulować i modyfikować zawartość i formatowanie dokumentu, należy przetłumaczyć go na model obiektowy dokumentu Aspose.Words (DOM).

W przeciwieństwie do dokumentów Word, Markdown nie jest zgodny z DOM opisanym w Aspose.Words Obiektowy Model Dokumentu (DOM) artykuł. Jednak Aspose.Words zapewnia własny mechanizm tłumaczenia dokumentów Markdown na DOM iz powrotem, dzięki czemu możemy z powodzeniem pracować z ich elementami, takimi jak formatowanie tekstu, tabele, nagłówki i inne.

W tym artykule wyjaśniono, w jaki sposób różne funkcje markdown można przetłumaczyć na Aspose.Words DOM iz powrotem do formatu Markdown.

Złożoność tłumaczenia Markdown – DOM – Markdown

Główną trudnością tego mechanizmu jest nie tylko przetłumaczenie Markdown na DOM, ale także wykonanie odwrotnej transformacji – zapisanie dokumentu z powrotem do formatu Markdown przy minimalnych stratach. Istnieją elementy, takie jak cudzysłowy wielopoziomowe, dla których odwrotna transformacja nie jest trywialna.

Nasz silnik tłumaczeń pozwala użytkownikom nie tylko pracować ze złożonymi elementami w istniejącym dokumencie Markdown, ale także tworzyć własny dokument w formacie Markdown z oryginalną strukturą od podstaw. Aby utworzyć różne elementy, musisz użyć stylów o określonych nazwach zgodnie z pewnymi zasadami opisanymi w dalszej części tego artykułu. Takie style można tworzyć programowo.

Wspólne Zasady Tłumaczenia

Używamy formatowania Font dla bloków wbudowanych. Gdy nie ma bezpośredniej korespondencji dla funkcji Markdown w Aspose.Words DOM, używamy stylu znaków o nazwie zaczynającej się od niektórych specjalnych słów.

W przypadku bloków kontenerów używamy dziedziczenia stylów do oznaczania zagnieżdżonych funkcji Markdown. W takim przypadku, nawet jeśli nie ma funkcji zagnieżdżonych, używamy również stylów akapitów o nazwie zaczynającej się od niektórych specjalnych słów.

Listy punktowane i uporządkowane są również blokami kontenerów w Markdown. Ich zagnieżdżanie jest reprezentowane w DOM w taki sam sposób, jak w przypadku wszystkich innych bloków kontenerów wykorzystujących dziedziczenie stylu. Jednak dodatkowo listy w DOM odpowiadały formatowaniu liczb w stylu listy lub formatowaniu akapitu.

Bloki Inline

Używamy formatowania Font podczas tłumaczenia funkcji Bold, Italic lub Strikethrough inline markdown.

Markdown funkcja 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)

Używamy stylu znaków o nazwie zaczynającej się od słowa InlineCode, po którym następuje opcjonalna kropka (.) i liczba backticks (`) dla funkcji InlineCode. Jeśli zostanie pominięta liczba backticks, domyślnie zostanie użyty jeden backtick.

Markdown funkcja Aspose.Words
InlineCode
**inline code**
get_Font()->set_StyleName(u"InlineCode[.][N]")
Autolink
<scheme://domain.com>
<email@domain.com>
Klasa FieldHyperlink.
Link
[link text](url)
[link text](<url>"title")
[link text](url 'title')
[link text](url (title))
Klasa FieldHyperlink.
Image
![](url)
![alt text](<url>"title")
![alt text](url ‘title’)
![alt text](url (title))
Klasa Shape.

Bloki Kontenerowe

Dokument to sekwencja bloków kontenerów, takich jak nagłówki, akapity, listy, cudzysłowy i inne. Bloki kontenerowe można podzielić na 2 klasy: bloki liściowe i złożone Pojemniki. Bloki liści mogą zawierać tylko zawartość wbudowaną. Z kolei złożone pojemniki mogą zawierać inne bloki kontenerów, w tym bloki liści.

Bloki Liści

Poniższa tabela przedstawia przykłady użycia Markdown bloków liści w Aspose.Words:

Markdown funkcja Aspose.Words
HorizontalRule
-----
To jest prosty akapit o odpowiednim kształcie HorizontalRule:
DocumentBuilder::InsertHorizontalRule()
ATX Heading
# H1, ## H2, ### H3…
get_ParagraphFormat()->set_StyleName(u"Heading N"), gdzie (1<= N <= 9).
Jest to tłumaczone na wbudowany styl i powinno mieć dokładnie określony wzór (nie są dozwolone żadne przyrostki ani przedrostki).
W przeciwnym razie będzie to zwykły akapit z odpowiednim stylem.
Setext Heading
=== (if Heading level 1),
--- (if Heading level 2)
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), Na podstawie stylu “Nagłówek N”.
Jeśli (N >= 2), wówczas zostanie użyty " Heading 2", w przeciwnym razie " Heading 1".
Każdy przyrostek jest dozwolony, ale importer Aspose.Words używa odpowiednio liczb “1” i “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]")
[.] i [info string] są opcjonalne.

Złożone Kontenery

Poniższa tabela przedstawia przykłady użycia Markdown złożonych kontenerów w Aspose.Words:

Markdown funkcja Aspose.Words
Quote
> quote,
>> nested quote
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]")
przyrostek w nazwie stylu jest opcjonalny, ale importer Aspose.Words używa uporządkowanych liczb 1, 2, 3, …. w przypadku zagnieżdżonych cytatów.
Zagnieżdżanie jest definiowane za pomocą odziedziczonych stylów.
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Listy punktowane są reprezentowane za pomocą numeracji akapitów:
get_ListFormat()->ApplyBulletDefault()
mogą istnieć 3 typy list punktowanych. Różnią się tylko w formacie numeracji pierwszego poziomu. Są to odpowiednio: ‘-’, ‘+’ lub ‘*’.
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Uporządkowane listy są reprezentowane za pomocą numeracji akapitów:
get_ListFormat()->ApplyNumberDefault()
mogą istnieć 2 znaczniki formatu liczb: ‘.’ i ‘)’. Domyślnym znacznikiem jest ‘.’.

Tabele

Aspose.Words umożliwia również tłumaczenie tabel na DOM, Jak pokazano poniżej:

Markdown funkcja Aspose.Words
Table
a|b
-|-
c|d
Table, Row i Cell klasy.

Zobacz także