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
|
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 ‘*’ . |
OrderedList1. 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. |