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)
}
}
} पुस्तकालय में भी
Winston JavaScript (Node.js): पूर्ण गाइड उदाहरण सहित
Kotlin में Prometheus मेट्रिक्स: Micrometer और Ktor के साथ एकीकरण
जावास्क्रिप्ट (Node.js) पर ईमेल भेजना: nodemailer, sendgrid, mailgun
Prometheus मेट्रिक्स C++ में: prometheus-cpp लाइब्रेरी गाइड
Java WebSocket लाइब्रेरीज़: रियल-टाइम कार्यान्वयन के लिए संपूर्ण गाइड