Swift में Markdown काम करना (iOS/macOS): Down, SwiftMarkdown लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

iOS और macOS के लिए Swift में Markdown प्रोसेसिंग: पार्सिंग से रेंडरिंग तक

Markdown टेक्स्ट को फ़ॉर्मेट करने के लिए सबसे लोकप्रिय मार्कअप भाषाओं में से एक है। Swift (iOS/macOS) इकोसिस्टम में कई शक्तिशाली लाइब्रेरी हैं जो Markdown को पार्स, कन्वर्ट और डिस्प्ले करने की अनुमति देती हैं। इस लेख में हम दो मुख्य लाइब्रेरी देखेंगे: Down (तेज़ और लचीला) और SwiftMarkdown (Apple की आधिकारिक लाइब्रेरी)। आप सीखेंगे कि इन्हें अपने प्रोजेक्ट में कैसे इंटीग्रेट करें, Markdown को NSAttributedString और HTML में कैसे बदलें, और SwiftUI में कैसे दिखाएं।

1. Down लाइब्रेरी (cmark-आधारित)

Down Swift में लिखा गया लोकप्रिय C-पार्सर cmark का एक रैपर है। यह उच्च प्रदर्शन प्रदान करता है और Markdown के सभी मुख्य एलिमेंट्स (हेडिंग, लिस्ट, कोड, लिंक, इमेज, टेबल आदि) को सपोर्ट करता है।

इंस्टॉलेशन

Swift Package Manager के माध्यम से पैकेज जोड़ें:

// Package.swift
dependencies: [
    .package(url: "https://github.com/johnxnguyen/Down.git", from: "0.11.0")
]

उदाहरण: Markdown को HTML में बदलना

import Down

let markdownString = "# नमस्ते दुनिया!\n\nयह **बोल्ड टेक्स्ट** और *इटैलिक* है।"
let down = Down(markdownString: markdownString)
let html = try? down.toHTML()
print(html ?? "")
// आउटपुट: <h1>नमस्ते दुनिया!</h1>\n<p>यह <strong>बोल्ड टेक्स्ट</strong> और <em>इटैलिक</em> है।</p>

NSAttributedString में रेंडरिंग

Down सीधे NSAttributedString बना सकता है जिसे UILabel, UITextView या NSTextView में दिखाया जा सकता है:

let attributedString = try? down.toAttributedString()
// UITextView में उपयोग करें:
textView.attributedText = attributedString

SwiftUI सपोर्ट

SwiftUI के लिए, आप AttributedString (iOS 15+) दिखाने वाला एक रैपर बना सकते हैं:

struct MarkdownView: View {
    let markdown: String

    var body: some View {
        if let nsAttr = try? Down(markdownString: markdown).toAttributedString() {
            Text(AttributedString(nsAttr))
        } else {
            Text(markdown)
        }
    }
}

2. SwiftMarkdown (Apple द्वारा)

SwiftMarkdown Apple की आधिकारिक लाइब्रेरी है, जो swift-markdown का हिस्सा है। यह कस्टमाइज़ेशन और विभिन्न फ़ॉर्मेट (HTML, CommonMark, AST) जनरेट करने की क्षमता के साथ एक पूर्ण Markdown पार्सर प्रदान करता है।

इंस्टॉलेशन

// Package.swift
dependencies: [
    .package(url: "https://github.com/apple/swift-markdown.git", branch: "main")
]

पार्सिंग और AST के साथ काम करना

लाइब्रेरी एक एब्सट्रैक्ट सिंटैक्स ट्री (AST) बनाती है जिसे विश्लेषित और संशोधित किया जा सकता है:

import Markdown

let source = """
# दस्तावेज़ीकरण

फ़ंक्शनों की सूची:
- `foo()` — पहला फ़ंक्शन
- `bar()` — दूसरा फ़ंक्शन
"""

let document = Document(parsing: source)
let heading = document.child(at: 0) as? Heading
print(heading?.plainText ?? "") // "दस्तावेज़ीकरण"

// सभी एलिमेंट्स को ट्रैवर्स करना
for child in document.children {
    if let list = child as? UnorderedList {
        for item in list.children {
            print((item as? ListItem)?.plainText ?? "")
        }
    }
}

HTML जनरेशन

let html = document.format(options: [.unsafeTags])
print(html)
// आउटपुट: <h1>दस्तावेज़ीकरण</h1>...<ul><li><code>foo()</code> — पहला फ़ंक्शन</li>...

AttributedString के माध्यम से रेंडरिंग (iOS 15+)

SwiftMarkdown स्टाइल के साथ सीधे AttributedString में रूपांतरण को सपोर्ट करता है:

import Markdown
import SwiftUI

struct ContentView: View {
    let markdown = "**महत्वपूर्ण**: *यहाँ* क्लिक करें।"

    var body: some View {
        if let attributed = try? AttributedString(markdown: markdown) {
            Text(attributed)
        } else {
            Text(markdown)
        }
    }
}

अनुशंसाएँ