Traduire Markdown en Document Object Model (DOM)
Pour lire, manipuler et modifier par programme le contenu et le formatage d’un document, vous devez le traduire au format Aspose.Words Document Object Model (DOM).
Contrairement aux documents Word, Markdown n’est pas conforme au DOM décrit dans l’article Aspose.Words Document Object Model (DOM). Cependant, Aspose.Words fournit son propre mécanisme pour traduire les documents Markdown vers DOM et inversement, afin que nous puissions travailler avec succès avec leurs éléments tels que le formatage du texte, les tableaux, les en-têtes et autres.
Cet article explique comment les différentes fonctionnalités de markdown peuvent être traduites en Aspose.Words DOM et renvoyées au format Markdown.
Complexité de la traduction Markdown – DOM – Markdown
La principale difficulté de ce mécanisme n’est pas seulement de traduire Markdown en DOM, mais également d’effectuer la transformation inverse: sauvegarder le document au format Markdown avec une perte minimale. Il existe des éléments, comme les guillemets multiniveaux, pour lesquels la transformation inverse n’est pas anodine.
Notre moteur de traduction permet aux utilisateurs non seulement de travailler avec des éléments complexes d’un document Markdown existant, mais également de créer leur propre document au format Markdown avec la structure originale à partir de zéro. Pour créer divers éléments, vous devez utiliser des styles avec des noms spécifiques selon certaines règles décrites plus loin dans cet article. De tels styles peuvent être créés par programme.
Principes communs de traduction
Nous utilisons le formatage Font pour les blocs en ligne. Lorsqu’il n’y a pas de correspondance directe pour une fonctionnalité Markdown dans Aspose.Words DOM, nous utilisons un style de caractère avec un nom qui commence par des mots spéciaux.
Pour les blocs conteneurs, nous utilisons l’héritage de style pour désigner les fonctionnalités Markdown imbriquées. Dans ce cas, même lorsqu’il n’y a pas de fonctionnalités imbriquées, nous utilisons également des styles de paragraphe dont le nom commence par des mots spéciaux.
Les listes à puces et ordonnées sont également des blocs conteneurs dans Markdown. Leur imbrication est représentée dans DOM de la même manière que pour tous les autres blocs conteneurs utilisant l’héritage de style. Cependant, en outre, les listes dans DOM ont un formatage de nombres correspondant, soit en style de liste, soit en format de paragraphe.
Blocs en ligne
Nous utilisons le formatage Font lors de la traduction des fonctionnalités Bold, Italic ou Strikethrough markdown en ligne.
Fonctionnalité Markdown | Aspose.Words |
---|---|
Bold{1} |
Font.Bold = true |
Italic*italic text* |
Font.Italic = true |
Strikethrough~Strikethrough text~ |
Font.StrikeThrough = true |
|
Nous utilisons un style de caractère avec un nom qui commence par le mot InlineCode
, suivi d’un point (.)
facultatif et d’un certain nombre de backticks (`)
pour la fonctionnalité InlineCode
. Si un certain nombre de backticks sont manqués, alors un backtick sera utilisé par défaut.
Fonctionnalité Markdown | Aspose.Words |
---|---|
InlineCode{1} |
Font.StyleName = “InlineCode[.][N]” |
Autolink<scheme://domain.com> <email@domain.com> |
La classe FieldHyperlink |
Link{1} {2} {3} {4}) |
La classe FieldHyperlink |
Image{1} {2} {3} {4}) |
La classe Shape |
Blocs de conteneurs
Un document est une séquence de blocs conteneurs tels que des titres, des paragraphes, des listes, des citations et autres. Les blocs conteneurs peuvent être divisés en 2 classes: les blocs feuilles et les conteneurs complexes. Les blocs feuilles ne peuvent contenir que du contenu en ligne. Les conteneurs complexes, à leur tour, peuvent contenir d’autres blocs de conteneurs, notamment des blocs Leaf.
Blocs de feuilles
Le tableau ci-dessous montre des exemples d’utilisation des blocs Markdown Leaf dans Aspose.Words:
Fonctionnalité Markdown | Aspose.Words |
---|---|
HorizontalRule----- |
Il s’agit d’un simple paragraphe avec une forme HorizontalRule correspondante:DocumentBuilder.InsertHorizontalRule() |
ATX Heading# H1, ## H2, ### H3… |
ParagraphFormat.StyleName = “Heading N” , où (1<= N <= 9).Ceci est traduit dans un style intégré et doit être exactement du modèle spécifié (aucun suffixe ou préfixe n’est autorisé). Sinon, ce sera juste un paragraphe normal avec un style correspondant |
Setext Heading=== (si titre niveau 1),--- (si titre niveau 2) |
ParagraphFormat.StyleName = “SetextHeading[some suffix]” , basé sur le style “Heading N” .Si (N >= 2), alors “Heading 2” sera utilisé, sinon “Heading 1” .Tout suffixe est autorisé, mais l’importateur Aspose.Words utilise respectivement les nombres “1” et “2” |
|
|
Indented Code | ParagraphFormat.StyleName = “IndentedCode[some suffix]” |
Fenced Code
|
ParagraphFormat.StyleName = “FencedCode[.][info string]” Le [.] et le [info string] sont facultatifs |
Conteneurs complexes
Le tableau ci-dessous montre des exemples d’utilisation de conteneurs complexes Markdown dans Aspose.Words:
Fonctionnalité Markdown | Aspose.Words |
---|---|
Quote> quote, >> nested quote |
ParagraphFormat.StyleName = “Quote[some suffix]” Le suffixe dans le nom du style est facultatif, mais l’importateur Aspose.Words utilise les nombres ordonnés 1, 2, 3,…. en cas de guillemets imbriqués. L’imbrication est définie via les styles hérités |
|
|
BulletedList- Item 1 - Item 2 - Item 2a - Item 2b |
Les listes à puces sont représentées à l’aide de la numérotation des paragraphes:ListFormat.ApplyBulletDefault() Il peut y avoir 3 types de listes à puces. Ils ne diffèrent que par un format de numérotation du tout premier niveau. Ce sont respectivement: ‘-’ , ‘+’ ou ‘*’ |
OrderedList1. Item 1 2. Item 2 1) Item 2a 2) Item 2b |
Les listes ordonnées sont représentées à l’aide de la numérotation des paragraphes:ListFormat.ApplyNumberDefault() Il peut y avoir 2 marqueurs de format numérique: ‘.’ et ‘)’. Le marqueur par défaut est ‘.’ |
|
les tables
Aspose.Words permet également de traduire des tableaux en DOM, comme indiqué ci-dessous:
Fonctionnalité Markdown | Aspose.Words |
---|---|
Table un | b -|- c|d |
Classes Table, Row et Cell |
|