Traduci Markdown in Document Object Model (DOM)

Per leggere, manipolare e modificare in modo programmatico il contenuto e la formattazione di un documento, è necessario tradurlo in Aspose.Words Document Object Model (DOM).

A differenza dei documenti Word, Markdown non è conforme al DOM descritto nel Aspose.Words Modello a oggetti documento (DOM) articolo. Tuttavia, Aspose.Words fornisce il proprio meccanismo per tradurre i documenti Markdown in DOM e viceversa, in modo da poter lavorare con successo con i loro elementi come la formattazione del testo, le tabelle, le intestazioni e altri.

Questo articolo spiega come le varie funzionalità di markdown possono essere tradotte in Aspose.Words DOM e di nuovo in formato Markdown.

Complessità della traduzione Markdown – DOM – Markdown

La principale difficoltà di questo meccanismo non è solo quella di tradurre Markdown in DOM, ma anche di eseguire la trasformazione inversa – per salvare il documento nel formato Markdown con una perdita minima. Ci sono elementi, come le virgolette multilivello, per i quali la trasformazione inversa non è banale.

Il nostro motore di traduzione consente agli utenti non solo di lavorare con elementi complessi in un documento Markdown esistente, ma anche di creare il proprio documento in formato Markdown con la struttura originale da zero. Per creare vari elementi, è necessario utilizzare stili con nomi specifici in base a determinate regole descritte più avanti in questo articolo. Tali stili possono essere creati a livello di programmazione.

Principi comuni di traduzione

Usiamo la formattazione Font per i blocchi in linea. Quando non c’è corrispondenza diretta per una funzione Markdown in Aspose.Words DOM, usiamo uno stile di carattere con un nome che inizia da alcune parole speciali.

Per i blocchi contenitore, usiamo l’ereditarietà dello stile per indicare le funzionalità annidate Markdown. In questo caso, anche quando non ci sono caratteristiche nidificate, usiamo anche stili di paragrafo con un nome che inizia da alcune parole speciali.

Gli elenchi puntati e ordinati sono anche blocchi contenitore in Markdown. Il loro nesting è rappresentato in DOM allo stesso modo di tutti gli altri blocchi contenitore usando l’ereditarietà dello stile. Tuttavia, inoltre, gli elenchi in DOM hanno una formattazione numerica corrispondente in stile elenco o formattazione di paragrafo.

Blocchi in linea

Usiamo la formattazione Font quando traduciamo le funzionalità Bold, Italic o Strikethrough inline markdown.

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

Usiamo uno stile di carattere con un nome che inizia dalla parola InlineCode, seguito da un punto opzionale (.) e un numero di backticks (`) per la funzione InlineCode. Se un numero di backtick viene perso, verrà utilizzato un backtick per impostazione predefinita.

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

Blocchi contenitore

Un documento è una sequenza di blocchi contenitore come intestazioni, paragrafi, elenchi, virgolette e altri. I blocchi contenitore possono essere suddivisi in classi 2: blocchi foglia e Contenitori complessi. I blocchi foglia possono contenere solo contenuti in linea. I contenitori complessi, a loro volta, possono contenere altri blocchi contenitore, inclusi i blocchi foglia.

Blocchi foglia

La tabella seguente mostra esempi di utilizzo dei blocchi foglia Markdown in Aspose.Words:

Funzione Markdown Aspose.Words
HorizontalRule
-----
Questo è un paragrafo semplice con una forma corrispondente HorizontalRule:
DocumentBuilder::InsertHorizontalRule()
ATX Heading
# H1, ## H2, ### H3…
get_ParagraphFormat()->set_StyleName(u"Heading N"), dove (1<= E <= 9).
Questo è tradotto in uno stile incorporato e dovrebbe essere esattamente del modello specificato (non sono consentiti suffissi o prefissi).
Altrimenti, sarà solo un paragrafo regolare con uno stile corrispondente.
Setext Heading
=== (if Heading level 1),
--- (if Heading level 2)
get_ParagraphFormat->set_StyleName(u"SetextHeading[some suffix]"), basato sullo stile "Heading N".
Se (N > = 2), allora verrà usato "Heading 2", altrimenti "Heading 1".
Qualsiasi suffisso è consentito, ma l’importatore Aspose.Words utilizza rispettivamente i numeri “1” e" 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]")
[.] e [info string] sono facoltativi.

Contenitori complessi

La tabella seguente mostra esempi di utilizzo di contenitori complessi Markdown in Aspose.Words:

Funzione Markdown Aspose.Words
Quote
> quote,
>> nested quote
get_ParagraphFormat()->set_StyleName(u"Quote[some suffix]")
Il suffisso in nome stile è facoltativo ,ma Aspose.Words importatore utilizza i numeri ordinati1, 2, 3, …. in caso di citazioni annidate.
Il nesting è definito tramite gli stili ereditati.
BulletedList
- Item 1
- Item 2
- Item 2a
- Item 2b
Gli elenchi puntati sono rappresentati utilizzando la numerazione dei paragrafi:
get_ListFormat()->ApplyBulletDefault()
Ci possono essere 3 tipi di elenchi puntati. Sono solo diff in un formato di numerazione del primo livello. Questi sono: ‘-’, ‘+’ o ‘*’ rispettivamente.
OrderedList
1. Item 1
2. Item 2
1) Item 2a
2) Item 2b
Gli elenchi ordinati sono rappresentati utilizzando la numerazione dei paragrafi:
get_ListFormat()->ApplyNumberDefault()
Ci possono essere marcatori di formato numerico 2: ‘.’ e ‘)’. Il marcatore predefinito è ‘.’.

Tavolo

Aspose.Words permette anche di tradurre le tabelle in DOM, come mostrato di seguito:

Funzione Markdown Aspose.Words
Table
a|b
-|-
c|d
classi Table, Row e Cell.

Vedi anche