[{"data":1,"prerenderedAt":41},["Reactive",2],{"blog-post-swift-markdown-parsing":3},{"slug":4,"title":5,"description":6,"excerpt":7,"date":8,"category":9,"author":10,"keywords":11,"readingMinutes":12,"html":13,"headings":14,"tools":18,"related":19},"swift-markdown-parsing","Swift Markdown Parsing: How to Guide & Examples","Learn to parse Markdown in Swift using SwiftMarkdown. This tutorial provides examples for converting Markdown to HTML and customization.","As Swift becomes increasingly ubiquitous in iOS development, we often find ourselves needing to process different kinds of text data. Today, we'll focus on a popular plaintext markup language:…","2024-07-23","Tutorial","Matthew Rathbone","Swift markdown parsing",2,"\u003Ch2 id=\"parsing-markdown-in-swift\">Parsing Markdown in Swift\u003C/h2>\n\u003Cp>As Swift becomes increasingly ubiquitous in iOS development, we often find ourselves needing to process different kinds of text data. Today, we&#39;ll focus on a popular plaintext markup language: Markdown. In this tutorial, we dive into parsing Markdown in Swift, providing examples along the way.\u003C/p>\n\u003Ch3 id=\"understanding-markdown\">Understanding Markdown\u003C/h3>\n\u003Cp>Markdown is a lightweight and easy-to-use format for writing content for the web. It is highly readable, writeable, and easily convertible to HTML. For a comprehensive guide to writing in Markdown, consider our \u003Ca href=\"/blog/markdown-table-ultimate-guide\">Ultimate Guide to Markdown\u003C/a>.\u003C/p>\n\u003Ch3 id=\"the-swiftmarkdown-framework\">The SwiftMarkdown Framework\u003C/h3>\n\u003Cp>There are various ways to parse Markdown in Swift, but one of the most effective methods is using a dedicated framework. This tutorial will focus on an open-source third-party library, \u003Ccode>SwiftMarkdown\u003C/code>. \u003Ccode>SwiftMarkdown\u003C/code> is built on top of libcmark, the C reference implementation of CommonMark, which ensures accurate and standardized Markdown rendering.\u003C/p>\n\u003Cp>To start, install \u003Ccode>SwiftMarkdown\u003C/code> through Swift Package Manager:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-swift\">dependencies: [\n  .package(url: \u003Cspan class=\"hljs-string\">&quot;https://github.com/SwiftDocOrg/SwiftMarkdown.git&quot;\u003C/span>, from: \u003Cspan class=\"hljs-string\">&quot;1.0.0&quot;\u003C/span>)\n]\n\u003C/code>\u003C/pre>\u003Ch3 id=\"parsing-markdown-to-html\">Parsing Markdown to HTML\u003C/h3>\n\u003Cp>With \u003Ccode>SwiftMarkdown\u003C/code> installed, we can now parse a Markdown string into a HTML string. Here is an example:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-swift\">\u003Cspan class=\"hljs-keyword\">import\u003C/span> SwiftMarkdown\n\n\u003Cspan class=\"hljs-keyword\">let\u003C/span> markdownString \u003Cspan class=\"hljs-operator\">=\u003C/span> \u003Cspan class=\"hljs-string\">&quot;&quot;&quot;\n# Hello, Swift Markdown!\n\nThis is a basic Markdown text with **bold text**, *italic text*, [a link](https://example.com), and:\n\n- A\n- Simple\n- List\n&quot;&quot;&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-keyword\">let\u003C/span> html \u003Cspan class=\"hljs-operator\">=\u003C/span> \u003Cspan class=\"hljs-keyword\">try?\u003C/span> \u003Cspan class=\"hljs-type\">SwiftMarkdown\u003C/span>.markdownToHTML(markdownString)\n\u003Cspan class=\"hljs-built_in\">print\u003C/span>(html \u003Cspan class=\"hljs-operator\">??\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Markdown conversion failed&quot;\u003C/span>)\n\u003C/code>\u003C/pre>\u003Cp>When you run the above code, it should output:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-html\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">h1\u003C/span>&gt;\u003C/span>Hello, Swift Markdown!\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">h1\u003C/span>&gt;\u003C/span>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">p\u003C/span>&gt;\u003C/span>This is a basic Markdown text with \u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">strong\u003C/span>&gt;\u003C/span>bold text\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">strong\u003C/span>&gt;\u003C/span>, \u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">em\u003C/span>&gt;\u003C/span>italic text\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">em\u003C/span>&gt;\u003C/span>, \u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">a\u003C/span> \u003Cspan class=\"hljs-attr\">href\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;https://example.com&quot;\u003C/span>&gt;\u003C/span>a link\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">a\u003C/span>&gt;\u003C/span>, and:\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">p\u003C/span>&gt;\u003C/span>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">ul\u003C/span>&gt;\u003C/span>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">li\u003C/span>&gt;\u003C/span>A\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">li\u003C/span>&gt;\u003C/span>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">li\u003C/span>&gt;\u003C/span>Simple\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">li\u003C/span>&gt;\u003C/span>\n\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">li\u003C/span>&gt;\u003C/span>List\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">li\u003C/span>&gt;\u003C/span>\n\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">ul\u003C/span>&gt;\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"customizing-markdown-rendering\">Customizing Markdown Rendering\u003C/h3>\n\u003Cp>SwiftMarkdown is flexible enough to accommodate customization of rendering. Let&#39;s say you want to add a custom class to every link your Markdown generates. Here&#39;s an example of how you can achieve this:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-swift\">\u003Cspan class=\"hljs-keyword\">import\u003C/span> SwiftMarkdown\n\n\u003Cspan class=\"hljs-keyword\">let\u003C/span> markdownString \u003Cspan class=\"hljs-operator\">=\u003C/span> \u003Cspan class=\"hljs-string\">&quot;[a link](https://example.com)&quot;\u003C/span>\n\n\u003Cspan class=\"hljs-keyword\">let\u003C/span> document \u003Cspan class=\"hljs-operator\">=\u003C/span> \u003Cspan class=\"hljs-keyword\">try?\u003C/span> \u003Cspan class=\"hljs-type\">SwiftMarkdown\u003C/span>(markdown: markdownString)\ndocument\u003Cspan class=\"hljs-operator\">?\u003C/span>.linkAttributes \u003Cspan class=\"hljs-operator\">=\u003C/span> [\u003Cspan class=\"hljs-string\">&quot;class&quot;\u003C/span>: \u003Cspan class=\"hljs-string\">&quot;custom-class&quot;\u003C/span>]\n\n\u003Cspan class=\"hljs-keyword\">let\u003C/span> html \u003Cspan class=\"hljs-operator\">=\u003C/span> \u003Cspan class=\"hljs-keyword\">try?\u003C/span> document\u003Cspan class=\"hljs-operator\">?\u003C/span>.getHTML()\n\u003Cspan class=\"hljs-built_in\">print\u003C/span>(html \u003Cspan class=\"hljs-operator\">??\u003C/span> \u003Cspan class=\"hljs-string\">&quot;Markdown conversion failed&quot;\u003C/span>)\n\u003C/code>\u003C/pre>\u003Cp>The output will be:\u003C/p>\n\u003Cpre>\u003Ccode class=\"hljs language-html\">\u003Cspan class=\"hljs-tag\">&lt;\u003Cspan class=\"hljs-name\">a\u003C/span> \u003Cspan class=\"hljs-attr\">href\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;https://example.com&quot;\u003C/span> \u003Cspan class=\"hljs-attr\">class\u003C/span>=\u003Cspan class=\"hljs-string\">&quot;custom-class&quot;\u003C/span>&gt;\u003C/span>a link\u003Cspan class=\"hljs-tag\">&lt;/\u003Cspan class=\"hljs-name\">a\u003C/span>&gt;\u003C/span>\n\u003C/code>\u003C/pre>\u003Ch3 id=\"visual-markdown-preview\">Visual Markdown Preview\u003C/h3>\n\u003Cp>To preview the rendered Markdown in a Swift-based text editor like \u003Ccode>NSTextView\u003C/code>, a \u003Ccode>WKWebView\u003C/code> component can be used where the HTML string is loaded. Further information about previewing Markdown can be found in our \u003Ca href=\"/blog/how-to-preview-rendered-markdown-in-vim\">blog post about previewing Markdown in Vim\u003C/a>.\u003C/p>\n\u003Ch3 id=\"conclusion\">Conclusion\u003C/h3>\n\u003Cp>Processing Markdown is a frequent necessity in many Swift and iOS projects. Thanks to the SwiftMarkdown framework, parsing and customizing Markdown has never been easier. Now you know how to parse Markdown in Swift, so go ahead, test it in your project, and enhance your text processing capabilities.\u003C/p>\n\u003Cp>Back to \u003Ca href=\"/blog\">main blog\u003C/a>.\u003C/p>\n",[15],{"id":16,"text":17,"level":12},"parsing-markdown-in-swift","Parsing Markdown in Swift",[],[20,27,34],{"slug":21,"title":22,"description":23,"excerpt":24,"date":25,"category":9,"author":10,"keywords":26,"readingMinutes":12},"java-markdown-example","Java Markdown Parsing Guide with Examples","Learn how to parse Markdown in Java. Includes setup for 'flexmark-java' and examples of Markdown syntaxes.","Writing in plain text has its own charm, but what if you could format your text without using complex editors or software? Enter Markdown, a language designed to enhance plain text formatting…","2024-05-01","Java markdown example",{"slug":28,"title":29,"description":30,"excerpt":31,"date":32,"category":9,"author":10,"keywords":33,"readingMinutes":12},"javascript-markdown-example","Javascript Markdown Parsing with Markdown-it: A Guide","Discover how to parse and generate markdown in Javascript using Markdown-it, with practical examples for easy markdown-to-HTML conversion.","Markdown, a lightweight markup language with plain text formatting syntax, has gained immense popularity due to its ease of use and broad compatibility. This article will guide you on how to parse…","2024-04-26","Javascript markdown example",{"slug":35,"title":36,"description":37,"excerpt":38,"date":39,"category":9,"author":10,"keywords":40,"readingMinutes":12},"flutter-markdown-parsing","Flutter Markdown Parsing Tutorial","Learn to parse Markdown in Flutter with the `flutter_markdown` library. This tutorial covers setup, implementation, and customization.","This tutorial aims to demonstrate how to parse Markdown content in the Flutter framework. We will utilize the fluttermarkdown library which wraps around the Dart package markdown to translate…","2024-07-20","Flutter markdown parsing",1792184940734]