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 nel modello a oggetti del documento Aspose.Words (DOM).

A differenza dei documenti Word, Markdown non è conforme al DOM descritto nel Aspose.Words Modello oggetto 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 formato 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 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**
Font.Bold = true
Italic
*italic text*
Font.Italic = true
Strikethrough
~Strikethrough text~
Font.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**
Font.StyleName = "InlineCode[.][N]"
Autolink
<scheme://domain.com>
<email@domain.com>
La classe FieldHyperlink.
Link
[testo del collegamento](url)
[testo del collegamento](<url>"title")
[testo del collegamento](url 'title')
[testo del collegamento](url (title))
La classe FieldHyperlink.
Image
![](/words/java/translate-markdown-to-document-object-model/url)
![testo alternativo](/words/java/translate-markdown-to-document-object-model/<url>"title")
![testo alternativo](/words/java/translate-markdown-to-document-object-model/url ‘title’)
![testo alternativo](/words/java/translate-markdown-to-document-object-model/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 2 classi: 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…
ParagraphFormat.StyleName = "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)
ParagraphFormat.StyleName = "SetextHeading[some suffix]", basato sullo stile “Intestazione N”.
Se (N > = 2), allora ‘Heading 2’ sarà usato, altrimenti ‘Heading 1’.
Qualsiasi suffisso è consentito, ma Aspose.Words importatore utilizza i numeri “1” e “2” rispettivamente.
Indented Code
<br/>if ()<br/>then<br/>else<br/>```
ParagraphFormat.StyleName = "IndentedCode[some suffix]"

Contenitori complessi

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

Funzione Markdown Aspose.Words
Quote
> quote,
>> nested quote
ParagraphFormat.StyleName = "Quote[some suffix]"
Il suffisso nel nome stile è facoltativo, ma l’importatore Aspose.Words utilizza i numeri ordinati 1, 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:
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:
ListFormat.ApplyNumberDefault()
Ci possono essere 2 marcatori di formato numerico: ‘.’ 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