Translate Markdown to Document Object Model (DOM)

Chcete-li programově číst, manipulovat a upravovat obsah a formátování dokumentu, musíte jej přeložit do Aspose.Words objektového modelu dokumentu (DOM).

Na rozdíl od Word dokumentů Markdown neodpovídá DOM popsanému v Aspose.Words Model Objektu Dokumentu (DOM) článek. Aspose.Words však poskytuje svůj vlastní mechanismus pro překlad dokumentů Markdown do DOM a zpět, abychom mohli úspěšně pracovat s jejich prvky, jako je formátování textu, tabulky, záhlaví a další.

Tento článek vysvětluje, jak lze různé funkce markdown přeložit do Aspose.Words DOM a zpět do formátu Markdown.

Složitost překladu Markdown – DOM – Markdown

Hlavním problémem tohoto mechanismu je nejen přeložit Markdown na DOM, ale také provést reverzní transformaci – uložit dokument zpět do formátu Markdown s minimální ztrátou. Existují prvky, jako jsou víceúrovňové uvozovky, pro které není reverzní transformace triviální.

Náš překladový modul umožňuje uživatelům nejen pracovat se složitými prvky v existujícím dokumentu Markdown, ale také vytvářet vlastní dokument ve formátu Markdown s původní strukturou od nuly. Chcete-li vytvořit různé prvky, musíte použít styly se specifickými názvy podle určitých pravidel popsaných dále v tomto článku. Takové styly lze vytvářet programově.

Společné Principy Překladu

Pro vložené bloky používáme formátování Font. Pokud neexistuje přímá korespondence pro funkci Markdown v Aspose.Words DOM, použijeme znakový styl s názvem, který začíná některými speciálními slovy.

U kontejnerových bloků používáme dědičnost stylů k označení vnořených funkcí Markdown. V tomto případě, i když neexistují žádné vnořené funkce, používáme také styly odstavců s názvem, který začíná některými speciálními slovy.

Seznamy s odrážkami a seřazené seznamy jsou také bloky kontejnerů v Markdown. Jejich vnoření je reprezentováno v DOM stejným způsobem jako u všech ostatních kontejnerových bloků pomocí dědičnosti stylů. Seznamy v DOM však navíc odpovídaly formátování čísel buď ve stylu seznamu, nebo ve formátování odstavců.

Inline Bloky

Při překladu funkcí Bold, Italic nebo Strikethrough inline markdown používáme formátování Font.

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

Používáme znakový styl s názvem, který začíná od slova InlineCode, následovaný volitelnou tečkou (.) a řadou zpětných tlačítek (`) pro funkci InlineCode. Pokud je vynechán počet backticků, bude ve výchozím nastavení použit jeden backtick.

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

Kontejnerové Bloky

Dokument je posloupnost kontejnerových bloků, jako jsou nadpisy, odstavce, seznamy, uvozovky a další. Kontejnerové bloky lze rozdělit do 2 tříd: listové bloky a složité kontejnery. Listové bloky mohou obsahovat pouze vložený obsah. Složité kontejnery zase mohou obsahovat další kontejnerové bloky, včetně listových bloků.

Listové Bloky

Níže uvedená tabulka ukazuje příklady použití Markdown listových bloků v Aspose.Words:

Markdown funkce Aspose.Words
HorizontalRule
-----
Jedná se o jednoduchý odstavec s odpovídajícím tvarem HorizontalRule:
DocumentBuilder::InsertHorizontalRule()
ATX Heading
# H1, ## H2, ### H3…
get_ParagraphFormat()->set_StyleName(u"Heading N"), kde (1<= N <= 9).
To je přeloženo do vestavěného stylu a mělo by být přesně zadaného vzoru (nejsou povoleny žádné přípony ani předpony).
Jinak to bude jen běžný odstavec s odpovídajícím stylem.
Setext Heading
=== (if Heading level 1),
--- (if Heading level 2)
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), na základě stylu' Nadpis N'.
Pokud (N >= 2), použije se ‘Heading 2’, jinak ‘Heading 1’.
Jakákoli Přípona je povolena ,ale Aspose.Words dovozce používá čísla “1” a “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]")
[.] a [info string] jsou volitelné.

Komplexní Kontejnery

Níže uvedená tabulka ukazuje příklady použití Markdown komplexních kontejnerů v Aspose.Words:

Markdown funkce Aspose.Words
Quote
> quote,
>> nested quote
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]")
přípona v názvu stylu je volitelná ,ale Aspose.Words dovozce používá seřazená čísla 1, 2, 3, …. v případě vnořených uvozovek.
Vnoření je definováno pomocí zděděných stylů.
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Seznamy s odrážkami jsou reprezentovány pomocí číslování odstavců:
get_ListFormat()->ApplyBulletDefault()
mohou existovat 3 typy seznamů s odrážkami. Liší se pouze ve formátu číslování úplně první úrovně. Jsou to: ‘-’, ‘+’ nebo ‘*’.
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Uspořádané seznamy jsou reprezentovány pomocí číslování odstavců:
get_ListFormat()->ApplyNumberDefault()
mohou existovat 2 značky formátu čísel: ‘.’ a ‘)’. Výchozí značka je ‘.’.

Tabulka

Aspose.Words také umožňuje překládat tabulky do DOM, Jak je uvedeno níže:

Markdown funkce Aspose.Words
Table
a|b
-|-
c|d
Table, Row a Cell třídy.

Vidět