markdown-to-html

Par github · awesome-copilot

Convertit des fichiers Markdown en HTML à la manière de `marked.js`, `pandoc`, `gomarkdown/markdown` ou d'outils similaires ; ou écriture de scripts personnalisés pour convertir du Markdown en HTML et/ou travail sur des systèmes de templates web comme `jekyll/jekyll`, `gohugoio/hugo` ou des systèmes de templating similaires qui utilisent des documents Markdown en les convertissant en HTML. À utiliser lorsqu'on demande de « convertir du Markdown en HTML », « transformer du md en HTML », « rendre du Markdown », « générer du HTML depuis du Markdown », ou lors du travail avec des fichiers .md et/ou un système de templating web qui convertit du Markdown en sortie HTML. Prend en charge les workflows CLI et Node.js avec les variantes GFM, CommonMark et Markdown standard.

npx skills add https://github.com/github/awesome-copilot --skill markdown-to-html

Conversion Markdown en HTML

Compétence spécialisée pour convertir des documents Markdown en HTML en utilisant la bibliothèque marked.js, ou en écrivant des scripts de conversion de données ; dans ce cas, des scripts similaires au repository markedJS/marked. Pour les scripts personnalisés, les connaissances ne sont pas limitées à marked.js, mais les méthodes de conversion de données sont exploitées à partir d'outils comme pandoc et gomarkdown/markdown pour la conversion de données ; jekyll/jekyll et gohugoio/hugo pour les systèmes de templating.

Le script ou l'outil de conversion doit gérer les fichiers individuels, les conversions par batch, et les configurations avancées.

Quand utiliser cette compétence

  • L'utilisateur demande de « convertir markdown en html » ou « transformer des fichiers md »
  • L'utilisateur veut « afficher du markdown » en tant que sortie HTML
  • L'utilisateur a besoin de générer de la documentation HTML à partir de fichiers .md
  • L'utilisateur construit des sites statiques à partir de contenu Markdown
  • L'utilisateur construit un système de template qui convertit markdown en html
  • L'utilisateur travaille sur un outil, widget, ou template personnalisé pour un système de templating existant
  • L'utilisateur veut prévisualiser du Markdown en tant que HTML rendu

Conversion de Markdown en HTML

Conversions fondamentales essentielles

Pour plus de détails, voir basic-markdown-to-html.md

    ```markdown
    # Level 1
    ## Level 2

    One sentence with a [link](https://example.com), and a HTML snippet like `<p>paragraph tag</p>`.

    - `ul` list item 1
    - `ul` list item 2

    1. `ol` list item 1
    2. `ol` list item 1

    | Table Item | Description |
    | One | One is the spelling of the number `1`. |
    | Two | Two is the spelling of the number `2`. |

    ```js
    var one = 1;
    var two = 2;

    function simpleMath(x, y) {
     return x + y;
    }
    console.log(simpleMath(one, two));
```

```html
<h1>Level 1</h1>
<h2>Level 2</h2>

<p>One sentence with a <a href="https://example.com">link</a>, and a HTML snippet like <code>&lt;p&gt;paragraph tag&lt;/p&gt;</code>.</p>

<ul>
 <li>`ul` list item 1</li>
 <li>`ul` list item 2</li>
</ul>

<ol>
 <li>`ol` list item 1</li>
 <li>`ol` list item 2</li>
</ol>

<table>
 <thead>
  <tr>
   <th>Table Item</th>
   <th>Description</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>One</td>
   <td>One is the spelling of the number `1`.</td>
  </tr>
  <tr>
   <td>Two</td>
   <td>Two is the spelling of the number `2`.</td>
  </tr>
 </tbody>
</table>

<pre>
 <code>var one = 1;
 var two = 2;

 function simpleMath(x, y) {
  return x + y;
 }
 console.log(simpleMath(one, two));</code>
</pre>
```

### Conversions de blocs de code

Pour plus de détails, voir [code-blocks-to-html.md](references/code-blocks-to-html.md)

```text

    ```markdown
    your code here
```html
<pre><code class="language-md">
your code here
</code></pre>
```

```js
console.log("Hello world");
```

```html
<pre><code class="language-js">
console.log("Hello world");
</code></pre>
```

```markdown
  ```

  ```
  visible backticks
  ```

  ```
```

```html
  <pre><code>
  ```

  visible backticks

  ```
  </code></pre>
```

### Conversions de sections repliables

Pour plus de détails, voir [collapsed-sections-to-html.md](references/collapsed-sections-to-html.md)

```text
    ```markdown
    <details>
    <summary>More info</summary>

    ### Header inside

    - Lists
    - **Formatting**
    - Code blocks

        ```js
        console.log("Hello");
</details>
```

```html
<details>
<summary>More info</summary>

<h3>Header inside</h3>

<ul>
 <li>Lists</li>
 <li><strong>Formatting</strong></li>
 <li>Code blocks</li>
</ul>

<pre>
 <code class="language-js">console.log("Hello");</code>
</pre>

</details>
```

### Conversions d'expressions mathématiques

Pour plus de détails, voir [writing-mathematical-expressions-to-html.md](references/writing-mathematical-expressions-to-html.md)

```text
    ```markdown
    This sentence uses `$` delimiters to show math inline: $\sqrt{3x-1}+(1+x)^2$
```html
<p>This sentence uses <code>$</code> delimiters to show math inline:
 <math-renderer><math xmlns="http://www.w3.org/1998/Math/MathML">
  <msqrt><mn>3</mn><mi>x</mi><mo>−</mo><mn>1</mn></msqrt>
  <mo>+</mo><mo>(</mo><mn>1</mn><mo>+</mo><mi>x</mi>
  <msup><mo>)</mo><mn>2</mn></msup>
 </math>
</math-renderer>
</p>
```

```markdown
**The Cauchy-Schwarz Inequality**\
$$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$
```

```html
<p><strong>The Cauchy-Schwarz Inequality</strong><br>
 <math-renderer>
  <math xmlns="http://www.w3.org/1998/Math/MathML">
   <msup>
    <mrow><mo>(</mo>
     <munderover><mo data-mjx-texclass="OP">∑</mo>
      <mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi>
     </munderover>
     <msub><mi>a</mi><mi>k</mi></msub>
     <msub><mi>b</mi><mi>k</mi></msub>
     <mo>)</mo>
    </mrow>
    <mn>2</mn>
   </msup>
   <mo>≤</mo>
   <mrow><mo>(</mo>
    <munderover><mo>∑</mo>
     <mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow>
     <mi>n</mi>
    </munderover>
    <msubsup><mi>a</mi><mi>k</mi><mn>2</mn></msubsup>
    <mo>)</mo>
   </mrow>
   <mrow><mo>(</mo>
     <munderover><mo>∑</mo>
      <mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow>
      <mi>n</mi>
     </munderover>
     <msubsup><mi>b</mi><mi>k</mi><mn>2</mn></msubsup>
     <mo>)</mo>
   </mrow>
  </math>
 </math-renderer></p>
```

### Conversions de tableaux

Pour plus de détails, voir [tables-to-html.md](references/tables-to-html.md)

```text
    ```markdown
    | First Header  | Second Header |
    | ------------- | ------------- |
    | Content Cell  | Content Cell  |
    | Content Cell  | Content Cell  |
```html
<table>
 <thead><tr><th>First Header</th><th>Second Header</th></tr></thead>
 <tbody>
  <tr><td>Content Cell</td><td>Content Cell</td></tr>
  <tr><td>Content Cell</td><td>Content Cell</td></tr>
 </tbody>
</table>
```

```markdown
| Left-aligned | Center-aligned | Right-aligned |
| :---         |     :---:      |          ---: |
| git status   | git status     | git status    |
| git diff     | git diff       | git diff      |
```

```html
<table>
  <thead>
   <tr>
    <th align="left">Left-aligned</th>
    <th align="center">Center-aligned</th>
    <th align="right">Right-aligned</th>
   </tr>
  </thead>
  <tbody>
   <tr>
    <td align="left">git status</td>
    <td align="center">git status</td>
    <td align="right">git status</td>
   </tr>
   <tr>
    <td align="left">git diff</td>
    <td align="center">git diff</td>
    <td align="right">git diff</td>
   </tr>
  </tbody>
</table>
```

## Travailler avec [`markedJS/marked`](references/marked.md)

### Prérequis

- Node.js installé (pour l'utilisation en CLI ou programmatique)
- Installer marked globalement pour la CLI : `npm install -g marked`
- Ou installer localement : `npm install marked`

### Méthodes de conversion rapides

Voir [marked.md](references/marked.md) **Méthodes de conversion rapides**

### Flux de travail étape par étape

Voir [marked.md](references/marked.md) **Flux de travail étape par étape**

### Configuration en CLI

### Utiliser des fichiers de configuration

Créez `~/.marked.json` pour des options persistantes :

```json
{
  "gfm": true,
  "breaks": true
}

Ou utilisez une configuration personnalisée :

marked -i input.md -o output.html -c config.json

Référence des options CLI

Option Description
-i, --input <file> Fichier Markdown d'entrée
-o, --output <file> Fichier HTML de sortie
-s, --string <string> Analyser une chaîne au lieu d'un fichier
-c, --config <file> Utiliser un fichier de configuration personnalisé
--gfm Activer GitHub Flavored Markdown
--breaks Convertir les retours à la ligne en <br>
--help Afficher toutes les options

Avertissement de sécurité

⚠️ Marked ne nettoie PAS la sortie HTML. Pour les entrées non fiables, utilisez un sanitizer :

import { marked } from 'marked';
import DOMPurify from 'dompurify';

const unsafeHtml = marked.parse(untrustedMarkdown);
const safeHtml = DOMPurify.sanitize(unsafeHtml);

Sanitizers recommandés :

Saveurs Markdown supportées

Saveur Support
Markdown original 100 %
CommonMark 0.31 98 %
GitHub Flavored Markdown 97 %

Dépannage

Problème Solution
Caractères spéciaux au début du fichier Supprimer les caractères de largeur zéro : content.replace(/^[\u200B\u200C\u200D\uFEFF]/,"")
Blocs de code non mis en évidence Ajouter un colorateur de syntaxe comme highlight.js
Tableaux ne s'affichant pas S'assurer que l'option gfm: true est définie
Retours à la ligne ignorés Définir breaks: true dans les options
Préoccupations concernant les vulnérabilités XSS Utiliser DOMPurify pour nettoyer la sortie

Travailler avec pandoc

Prérequis

  • Pandoc installé (télécharger depuis https://pandoc.org/installing.html)
  • Pour la sortie PDF : installation LaTeX (MacTeX sur macOS, MiKTeX sur Windows, texlive sur Linux)
  • Accès au terminal/invite de commande

Méthodes de conversion rapides

Méthode 1 : Conversion CLI basique

# Convertir markdown en HTML
pandoc input.md -o output.html

# Convertir en document autonome (inclut l'en-tête/pied de page)
pandoc input.md -s -o output.html

# Spécification explicite du format
pandoc input.md -f markdown -t html -s -o output.html

Méthode 2 : Mode filtre (interactif)

# Démarrer pandoc en tant que filtre
pandoc

# Taper du markdown, puis Ctrl-D (Linux/macOS) ou Ctrl-Z+Entrée (Windows)
Hello *pandoc*!
# Sortie : <p>Hello <em>pandoc</em>!</p>

Méthode 3 : Conversion de format

# HTML vers Markdown
pandoc -f html -t markdown input.html -o output.md

# Markdown vers LaTeX
pandoc input.md -s -o output.tex

# Markdown vers PDF (nécessite LaTeX)
pandoc input.md -s -o output.pdf

# Markdown vers Word
pandoc input.md -s -o output.docx

Configuration en CLI

Option Description
-f, --from <format> Format d'entrée (markdown, html, latex, etc.)
-t, --to <format> Format de sortie (html, latex, pdf, docx, etc.)
-s, --standalone Produire un document autonome avec en-tête/pied de page
-o, --output <file> Fichier de sortie (déduit de l'extension)
--mathml Convertir la mathématique TeX en MathML
--metadata title="Title" Définir les métadonnées du document
--toc Inclure une table des matières
--template <file> Utiliser un template personnalisé
--help Afficher toutes les options

Avertissement de sécurité

⚠️ Pandoc traite fidèlement l'entrée. Lors de la conversion de markdown non fiable :

  • Utiliser le mode --sandbox pour désactiver l'accès aux fichiers externes
  • Valider l'entrée avant le traitement
  • Nettoyer la sortie HTML si elle est affichée dans les navigateurs
# Exécuter en mode sandbox pour les entrées non fiables
pandoc --sandbox input.md -o output.html

Saveurs Markdown supportées

Saveur Support
Pandoc Markdown 100 % (natif)
CommonMark Complet (utiliser -f commonmark)
GitHub Flavored Markdown Complet (utiliser -f gfm)
MultiMarkdown Partiel

Dépannage

Problème Solution
Échec de la génération PDF Installer LaTeX (MacTeX, MiKTeX, ou texlive)
Problèmes d'encodage sur Windows Exécuter chcp 65001 avant d'utiliser pandoc
En-têtes autonomes manquants Ajouter le drapeau -s pour les documents complets
Mathématique ne s'affichant pas Utiliser l'option --mathml ou --mathjax
Tableaux ne s'affichant pas S'assurer que la syntaxe du tableau est correcte avec tuyaux et tirets

Travailler avec gomarkdown/markdown

Prérequis

  • Go 1.18 ou supérieur installé
  • Installer la bibliothèque : go get github.com/gomarkdown/markdown
  • Pour l'outil CLI : go install github.com/gomarkdown/mdtohtml@latest

Méthodes de conversion rapides

Méthode 1 : Conversion simple (Go)

package main

import (
    "fmt"
    "github.com/gomarkdown/markdown"
)

func main() {
    md := []byte("# Hello World\n\nThis is **bold** text.")
    html := markdown.ToHTML(md, nil, nil)
    fmt.Println(string(html))
}

Méthode 2 : Outil CLI

# Installer mdtohtml
go install github.com/gomarkdown/mdtohtml@latest

# Convertir un fichier
mdtohtml input.md output.html

# Convertir un fichier (sortie vers stdout)
mdtohtml input.md

Méthode 3 : Parser et Renderer personnalisés

package main

import (
    "github.com/gomarkdown/markdown"
    "github.com/gomarkdown/markdown/html"
    "github.com/gomarkdown/markdown/parser"
)

func mdToHTML(md []byte) []byte {
    // Créer un parser avec des extensions
    extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock
    p := parser.NewWithExtensions(extensions)
    doc := p.Parse(md)

    // Créer un renderer HTML avec des extensions
    htmlFlags := html.CommonFlags | html.HrefTargetBlank
    opts := html.RendererOptions{Flags: htmlFlags}
    renderer := html.NewRenderer(opts)

    return markdown.Render(doc, renderer)
}

Configuration en CLI

L'outil CLI mdtohtml a des options minimales :

mdtohtml input-file [output-file]

Pour une configuration avancée, utilisez la bibliothèque Go de manière programmatique avec des options de parser et renderer :

Extension Parser Description
parser.CommonExtensions Tableaux, code délimité, autolinks, barré, etc.
parser.AutoHeadingIDs Générer des identifiants pour les en-têtes
parser.NoEmptyLineBeforeBlock Pas de ligne vide nécessaire avant les blocs
parser.MathJax Support MathJax pour la mathématique LaTeX
Drapeau HTML Description
html.CommonFlags Drapeaux de sortie HTML communs
html.HrefTargetBlank Ajouter target="_blank" aux liens
html.CompletePage Générer une page HTML complète
html.UseXHTML Générer la sortie XHTML

Avertissement de sécurité

⚠️ gomarkdown ne nettoie PAS la sortie HTML. Pour les entrées non fiables, utiliser Bluemonday :

import (
    "github.com/microcosm-cc/bluemonday"
    "github.com/gomarkdown/markdown"
)

maybeUnsafeHTML := markdown.ToHTML(md, nil, nil)
html := bluemonday.UGCPolicy().SanitizeBytes(maybeUnsafeHTML)

Sanitizer recommandé : Bluemonday

Saveurs Markdown supportées

Saveur Support
Markdown original 100 %
CommonMark Élevé (avec extensions)
GitHub Flavored Markdown Élevé (tableaux, code délimité, barré)
MathJax/LaTeX Math Supporté via extension
Mmark Supporté

Dépannage

Problème Solution
Retours à la ligne Windows/Mac non analysés Utiliser parser.NormalizeNewlines(input)
Tableaux ne s'affichant pas Activer l'extension parser.Tables
Blocs de code sans mise en évidence Intégrer avec un colorateur de syntaxe comme Chroma
Mathématique ne s'affichant pas Activer l'extension parser.MathJax
Vulnérabilités XSS Utiliser Bluemonday pour nettoyer la sortie

Travailler avec jekyll

Prérequis

  • Version Ruby 2.7.0 ou supérieure
  • RubyGems
  • GCC et Make (pour les extensions natives)
  • Installer Jekyll et Bundler : gem install jekyll bundler

Méthodes de conversion rapides

Méthode 1 : Créer un nouveau site

# Créer un nouveau site Jekyll
jekyll new myblog

# Accéder au répertoire du site
cd myblog

# Construire et servir localement
bundle exec jekyll serve

# Accéder à http://localhost:4000

Méthode 2 : Construire un site statique

# Construire le site dans le répertoire _site
bundle exec jekyll build

# Construire avec l'environnement production
JEKYLL_ENV=production bundle exec jekyll build

Méthode 3 : Rechargement en direct pendant le développement

# Servir avec rechargement en direct
bundle exec jekyll serve --livereload

# Servir avec les brouillons
bundle exec jekyll serve --drafts

Configuration en CLI

Commande Description
jekyll new <path> Créer un nouveau site Jekyll
jekyll build Construire le site dans le répertoire _site
jekyll serve Construire et servir localement
jekyll clean Supprimer les fichiers générés
jekyll doctor Vérifier les problèmes de configuration
Options Serve Description
--livereload Recharger le navigateur lors des modifications
--drafts Inclure les articles en brouillon
--port <port> Définir le port du serveur (par défaut : 4000)
--host <host> Définir l'hôte du serveur (par défaut : localhost)
--baseurl <url> Définir l'URL de base

Avertissement de sécurité

⚠️ Considérations de sécurité Jekyll :

  • Éviter d'utiliser safe: false en production
  • Utiliser exclude dans _config.yml pour empêcher la publication de fichiers sensibles
  • Nettoyer le contenu généré par l'utilisateur en cas d'acceptation d'entrée externe
  • Maintenir Jekyll et les plugins à jour
# Paramètres de sécurité dans _config.yml
exclude:
  - Gemfile
  - Gemfile.lock
  - node_modules
  - vendor

Saveurs Markdown supportées

Saveur Support
Kramdown (par défaut) 100 %
CommonMark Via plugin (jekyll-commonmark)
GitHub Flavored Markdown Via plugin (jekyll-commonmark-ghpages)
RedCarpet Via plugin (déprécié)

Configurer le processeur markdown dans _config.yml :

markdown: kramdown
kramdown:
  input: GFM
  syntax_highlighter: rouge

Dépannage

Problème Solution
Ruby 3.0+ échoue à servir Exécuter bundle add webrick
Erreurs de dépendance Gem Exécuter bundle install
Constructions lentes Utiliser le drapeau --incremental
Erreurs de syntaxe Liquid Vérifier les { non échappés dans le contenu
Plugin ne se chargeant pas Ajouter à la liste des plugins dans _config.yml

Travailler avec hugo

Prérequis

  • Hugo installé (télécharger depuis https://gohugo.io/installation/)
  • Git (recommandé pour les thèmes et modules)
  • Go (optionnel, pour les modules Hugo)

Méthodes de conversion rapides

Méthode 1 : Créer un nouveau site

# Créer un nouveau site Hugo
hugo new site mysite

# Accéder au répertoire du site
cd mysite

# Ajouter un thème
git init
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke themes/ananke
echo "theme = 'ananke'" >> hugo.toml

# Créer du contenu
hugo new content posts/my-first-post.md

# Démarrer le serveur de développement
hugo server -D

Méthode 2 : Construire un site statique

# Construire le site dans le répertoire public
hugo

# Construire avec minification
hugo --minify

# Construire pour un environnement spécifique
hugo --environment production

Méthode 3 : Serveur de développement

# Démarrer le serveur avec les brouillons
hugo server -D

# Démarrer avec rechargement en direct et se lier à toutes les interfaces
hugo server --bind 0.0.0.0 --baseURL http://localhost:1313/

# Démarrer avec un port spécifique
hugo server --port 8080

Configuration en CLI

Commande Description
hugo new site <name> Créer un nouveau site Hugo
hugo new content <path> Créer un nouveau fichier de contenu
hugo Construire le site dans le répertoire public
hugo server Démarrer le serveur de développement
hugo mod init Initialiser les modules Hugo
Options Build Description
-D, --buildDrafts Inclure le contenu en brouillon
-E, --buildExpired Inclure le contenu expiré
-F, --buildFuture Inclure le contenu daté dans le futur
--minify Minifier la sortie
--gc Exécuter le garbage collection après la construction
-d, --destination <path> Répertoire de sortie
Options Server Description
--bind <ip> Interface à lier
-p, --port <port> Numéro de port (par défaut : 1313)
--liveReloadPort <port> Port de rechargement en direct
--disableLiveReload Désactiver le rechargement en direct
--navigateToChanged Naviguer vers le contenu modifié

Avertissement de sécurité

⚠️ Considérations de sécurité Hugo :

  • Configurer la politique de sécurité dans hugo.toml pour les commandes externes
  • Utiliser --enableGitInfo avec prudence avec les repositories publics
  • Valider les paramètres de shortcode pour le contenu généré par l'utilisateur
# Paramètres de sécurité dans hugo.toml
[security]
  enableInlineShortcodes = false
  [security.exec]
    allow = ['^go$', '^npx$', '^postcss$']
  [security.funcs]
    getenv = ['^HUGO_', '^CI$']
  [security.http]
    methods = ['(?i)GET|POST']
    urls = ['.*']

Saveurs Markdown supportées

Saveur Support
Goldmark (par défaut) 100 % (conforme à CommonMark)
GitHub Flavored Markdown Complet (tableaux, barré, autolinks)
CommonMark 100 %
Blackfriday (hérité) Déprécié, non recommandé

Configurer markdown dans hugo.toml :

[markup]
  [markup.goldmark]
    [markup.goldmark.extensions]
      definitionList = true
      footnote = true
      linkify = true
      strikethrough = true
      table = true
      taskList = true
    [markup.goldmark.renderer]
      unsafe = false  # Définir à true pour permettre le HTML brut

Dépannage

Problème Solution
« Page not found » sur les chemins Vérifier baseURL dans la configuration
Thème ne se chargeant pas Vérifier le thème dans themes/ ou modules Hugo
Constructions lentes Utiliser --templateMetrics pour identifier les goulots d'étranglement
HTML brut ne s'affichant pas Définir unsafe = true dans la configuration goldmark
Images ne se chargeant pas Vérifier la structure du dossier static/
Erreurs de modules Exécuter hugo mod tidy

Références

Écriture et stylisation Markdown

markedJS/marked

pandoc

gomarkdown/markdown

jekyll

hugo

Skills similaires