Traitement de Markdown en Swift pour iOS et macOS : de l'analyse au rendu
\n\nMarkdown est l'un des langages de balisage les plus populaires pour le formatage de texte. Dans l'écosystème Swift (iOS/macOS), il existe plusieurs bibliothèques puissantes qui permettent d'analyser, convertir et afficher Markdown. Dans cet article, nous examinerons deux bibliothèques principales : Down (rapide et flexible) et SwiftMarkdown (la bibliothèque officielle d'Apple). Vous apprendrez à les intégrer dans vos projets, à convertir Markdown en NSAttributedString, HTML et à l'afficher dans SwiftUI.
1. Bibliothèque Down (basée sur cmark)
\n\nDown est un wrapper autour du célèbre analyseur C cmark, écrit en Swift. Il offre des performances élevées et prend en charge tous les éléments Markdown de base (titres, listes, code, liens, images, tableaux, etc.).
Installation
\nAjoutez le paquet via Swift Package Manager :
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.11.0")\n]\n\nExemple : conversion de Markdown en HTML
\nimport Down\n\nlet markdownString = "# Bonjour le monde !\\n\\nCeci est du **texte gras** et de l'*italique*."\nlet down = Down(markdownString: markdownString)\nlet html = try? down.toHTML()\nprint(html ?? "")\n// Sortie : <h1>Bonjour le monde !</h1>\\n<p>Ceci est du <strong>texte gras</strong> et de l'<em>italique</em>.</p>\n\nRendu en NSAttributedString
\nDown peut créer directement un NSAttributedString pour l'affichage dans UILabel, UITextView ou NSTextView :
let attributedString = try? down.toAttributedString()\n// Utilisez dans UITextView :\ntextView.attributedText = attributedString\n\nPrise en charge de SwiftUI
\nPour SwiftUI, vous pouvez créer un wrapper affichant AttributedString (iOS 15+) :
struct MarkdownView: View {\n let markdown: String\n\n var body: some View {\n if let nsAttr = try? Down(markdownString: markdown).toAttributedString() {\n Text(AttributedString(nsAttr))\n } else {\n Text(markdown)\n }\n }\n}\n\n2. SwiftMarkdown (d'Apple)
\n\nSwiftMarkdown est la bibliothèque officielle d'Apple, faisant partie de swift-markdown. Elle fournit un analyseur Markdown complet avec possibilité de personnalisation et de génération de divers formats (HTML, CommonMark, AST).
Installation
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/apple/swift-markdown.git", branch: "main")\n]\n\nAnalyse et travail avec l'AST
\nLa bibliothèque construit un arbre syntaxique abstrait (AST) qui peut être analysé et modifié :
\nimport Markdown\n\nlet source = """\n# Documentation\n\nListe des fonctions :\n- `foo()` — première fonction\n- `bar()` — deuxième fonction\n"""\n\nlet document = Document(parsing: source)\nlet heading = document.child(at: 0) as? Heading\nprint(heading?.plainText ?? "") // "Documentation"\n\n// Parcours de tous les éléments\nfor child in document.children {\n if let list = child as? UnorderedList {\n for item in list.children {\n print((item as? ListItem)?.plainText ?? "")\n }\n }\n}\n\nGénération HTML
\nlet html = document.format(options: [.unsafeTags])\nprint(html)\n// Sortie : <h1>Documentation</h1>...<ul><li><code>foo()</code> — première fonction</li>...\n\nRendu via AttributedString (iOS 15+)
\nSwiftMarkdown prend en charge la conversion directe en AttributedString avec utilisation de styles :
import Markdown\nimport SwiftUI\n\nstruct ContentView: View {\n let markdown = "**Important** : cliquez *ici*."\n\n var body: some Aussi dans la bibliothèque
Surveillance des applications C++ : bibliothèques et outils pour la collecte de métriques
Générateur de QR codes en JavaScript (Node.js) avec qrcode et qr-image
gRPC pour Rust : bibliothèques et exemples d'utilisation
Envoi de SMS en Java : aperçu des bibliothèques API et outils