Markdown in Dokumentobjektmodell übersetzen (DOM)

Um den Inhalt und die Formatierung eines Dokuments programmgesteuert zu lesen, zu bearbeiten und zu ändern, müssen Sie es in das Aspose.Words-Dokumentobjektmodell (DOM) übersetzen.

Im Gegensatz zu Word-Dokumenten entspricht Markdown nicht den DOM, die in der Aspose.Words Dokumentobjektmodell (DOM) Beitrag. Aspose.Words bietet jedoch einen eigenen Mechanismus zum Übersetzen von Markdown -Dokumenten nach DOM und zurück, sodass wir erfolgreich mit ihren Elementen wie Textformatierung, Tabellen, Überschriften und anderen arbeiten können.

In diesem Artikel wird erläutert, wie die verschiedenen markdown-Funktionen in das Aspose.Words DOM- und zurück in das Markdown-Format übersetzt werden können.

Komplexität der Übersetzung Markdown – DOM – Markdown

Die Hauptschwierigkeit dieses Mechanismus besteht nicht nur darin, Markdown in DOM zu übersetzen, sondern auch die umgekehrte Transformation durchzuführen – das Dokument mit minimalem Verlust wieder im Markdown -Format zu speichern. Es gibt Elemente wie mehrstufige Anführungszeichen, für die die umgekehrte Transformation nicht trivial ist.

Mit unserer Übersetzungsengine können Benutzer nicht nur mit komplexen Elementen in einem vorhandenen Markdown -Dokument arbeiten, sondern auch ihr eigenes Dokument im Markdown -Format mit der ursprünglichen Struktur von Grund auf neu erstellen. Um verschiedene Elemente zu erstellen, müssen Sie Stile mit bestimmten Namen gemäß bestimmten Regeln verwenden, die später in diesem Artikel beschrieben werden. Solche Stile können programmgesteuert erstellt werden.

Gemeinsame Übersetzungsprinzipien

Wir verwenden Font Formatierung für Inline-Blöcke. Wenn es keine direkte Entsprechung für ein Markdown-Feature in Aspose.Words DOM gibt, verwenden wir einen Zeichenstil mit einem Namen, der mit einigen speziellen Wörtern beginnt.

Für Containerblöcke verwenden wir die Stilvererbung, um verschachtelte Markdown -Features zu bezeichnen. In diesem Fall verwenden wir auch Absatzformate mit einem Namen, der mit einigen speziellen Wörtern beginnt, auch wenn keine verschachtelten Features vorhanden sind.

Aufzählungslisten und geordnete Listen sind ebenfalls Containerblöcke in Markdown. Ihre Verschachtelung wird in DOM genauso dargestellt wie bei allen anderen Containerblöcken, die Stilvererbung verwenden. Zusätzlich haben Listen in DOM jedoch eine entsprechende Zahlenformatierung entweder im Listenstil oder in der Absatzformatierung.

Inline-Blöcke

Wir verwenden die Font-Formatierung bei der Übersetzung von Bold-, Italic- oder Strikethrough-Inline-markdown-Funktionen.

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

Wir verwenden einen Zeichenstil mit einem Namen, der mit dem Wort InlineCode beginnt, gefolgt von einem optionalen Punkt (.) und einer Anzahl von Backticks (`) für die Funktion InlineCode. Wenn eine Anzahl von Backticks fehlt, wird standardmäßig ein Backtick verwendet.

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

Containerblöcke

Ein Dokument ist eine Folge von Containerblöcken wie Überschriften, Absätzen, Listen, Anführungszeichen und anderen. Containerblöcke können in 2 -Klassen unterteilt werden: Blattblöcke und komplexe Container. Blattblöcke können nur Inline-Inhalte enthalten. Komplexe Container können wiederum andere Containerblöcke enthalten, einschließlich Blattblöcke.

Blattblöcke

Die folgende Tabelle zeigt Beispiele für die Verwendung von Markdown-Blattblöcken in Aspose.Words:

Markdown Funktion Aspose.Words
HorizontalRule
-----
Dies ist ein einfacher Absatz mit einer entsprechenden HorizontalRule -Form:
DocumentBuilder::InsertHorizontalRule()
ATX Heading
# H1, ## H2, ### H3…
get_ParagraphFormat()->set_StyleName(u"Heading N"), wobei (1<= Und <= 9).
Dies wird in einen integrierten Stil übersetzt und sollte genau dem angegebenen Muster entsprechen (keine Suffixe oder Präfixe sind erlaubt).
Andernfalls handelt es sich nur um einen regulären Absatz mit einem entsprechenden Stil.
Setext Heading
=== (if Heading level 1),
--- (if Heading level 2)
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), basierend auf "Heading N" Stil.
Wenn (N >= 2), dann wird "Heading 2" verwendet, sonst "Heading 1".
Jedes Suffix ist erlaubt, aber Aspose.Words Importer verwendet die Nummern “1” und “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]")
Die [.] und [info string] sind optional.

Komplexe Behälter

Die folgende Tabelle zeigt Beispiele für die Verwendung von Markdown komplexen Containern in Aspose.Words:

Markdown Funktion Aspose.Words
Quote
> quote,
>> nested quote
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]")
Das Suffix im Stilnamen ist optional, aber Aspose.Words importer verwendet die sortierten Nummern 1, 2, 3, …. bei verschachtelten Anführungszeichen.
Die Verschachtelung wird über die geerbten Stile definiert.
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Aufzählungen werden mit Absatznummerierung dargestellt:
get_ListFormat()->ApplyBulletDefault()
Es kann 3 Arten von Aufzählungslisten geben. Sie unterscheiden sich nur in einem Nummerierungsformat der allerersten Ebene. Dies sind: ‘-’, ‘+’ oder ‘*’.
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Geordnete Listen werden mit Absatznummerierung dargestellt:
get_ListFormat()->ApplyNumberDefault()
Es können 2 Zahlenformatmarkierungen vorhanden sein: ‘.’ und ‘)’. Der Standardmarker ist ‘.’.

Tables

Aspose.Words ermöglicht auch die Übersetzung von Tabellen in DOM, wie unten gezeigt:

Markdown Funktion Aspose.Words
Table
a|b
-|-
c|d
Table, Row und Cell Klassen.

Siehe auch