Rust में Markdown के साथ काम करना: उपकरणों और लाइब्रेरी का अवलोकन
Rust, जो अपने प्रदर्शन और सुरक्षा के लिए जाना जाता है, Markdown के साथ काम करने के लिए कई परिपक्व लाइब्रेरी प्रदान करता है। चाहे आप एक स्टैटिक साइट जनरेटर, चैट-बॉट, दस्तावेज़ीकरण प्रणाली या नोट्स एडिटर बना रहे हों, सही उपकरण का चुनाव विकास के घंटे बचा सकता है। इस लेख में, हम तीन मुख्य लाइब्रेरी: pulldown-cmark, markdown और comrak पर चर्चा करेंगे, साथ ही उनके उपयोग के व्यावहारिक उदाहरण भी दिखाएंगे।
1. pulldown-cmark — इवेंट-ओरिएंटेड पार्सर
pulldown-cmark Rust में Markdown को पार्स करने के लिए सबसे लोकप्रिय और तेज़ लाइब्रेरी है। यह CommonMark विनिर्देश को लागू करती है और "pull" सिद्धांत पर काम करती है: आपको इवेंट्स (टैग, टेक्स्ट, लिंक) की एक स्ट्रीम मिलती है, जिसे सीधे संसाधित किया जा सकता है या HTML में परिवर्तित किया जा सकता है।
मुख्य विशेषताएं:
- CommonMark 0.30 का पूर्ण समर्थन
- न्यूनतम मेमोरी खपत
- तालिकाओं, स्ट्राइकथ्रू टेक्स्ट, ऑटो-लिंक का समर्थन
- इवेंट प्रोसेसिंग के माध्यम से अनुकूलन की संभावना
- बिना आवंटन के काम (ज़ीरो-कॉपी पार्सिंग)
HTML में पार्सिंग और रेंडरिंग का उदाहरण:
use pulldown_cmark::{Parser, html};
fn main() { let markdown_input = "# नमस्ते, दुनिया!
यह **बोल्ड** टेक्स्ट है और *इटैलिक*।"; let parser = Parser::new(markdown_input); let mut html_output = String::new(); html::push_html(&mut html_output, parser); println!("{}", html_output);}निष्पादन का परिणाम <h1>, <strong> और <em> टैग के साथ सही HTML है। यह लाइब्रेरी उच्च-लोड सिस्टम के लिए आदर्श है जहाँ गति महत्वपूर्ण है।
2. markdown (crate) — बहुमुखी कन्वर्टर
markdown लाइब्रेरी (क्रेट markdown) पार्सिंग और विभिन्न प्रारूपों में रूपांतरण दोनों प्रदान करती है। pulldown-cmark के विपरीत, यह एक उच्च-स्तरीय API और अतिरिक्त आउटपुट विकल्प प्रदान करती है।
मुख्य विशेषताएं:
- CommonMark और GitHub Flavored Markdown (GFM) का समर्थन
- HTML, LaTeX, टर्मिनल में रेंडरिंग
- प्लगइन्स के साथ विस्तार योग्य आर्किटेक्चर
- HTML सैनिटाइज़ेशन के लिए अंतर्निहित समर्थन
- YAML फ्रंट मैटर मेटाडेटा के साथ काम
कॉन्फ़िगरेशन के साथ उदाहरण:
use markdown::to_html_with_options;use markdown::Options;
fn main() { let md = "## Rust में कोड```rustfn main() { println!(\\"Hello\\");}```"; let opts = Options { compile: markdown::CompileOptions { allow_dangerous_html: false, allow_dangerous_protocol: false, ..markdown::CompileOptions::default() }, ..markdown::Options::default() }; let html = to_html_with_options(md, &opts).unwrap(); println!("{}", html);}यह उदाहरण सिंटैक्स हाइलाइटिंग (यदि अतिरिक्त क्रेट जोड़ा जाए) के साथ कोड का सुरक्षित रेंडरिंग प्रदर्शित करता है। markdown उन परियोजनाओं के लिए अनुशंसित है जहाँ लचीलापन और गैर-मानक आउटपुट प्रारूपों के समर्थन की आवश्यकता है।
3. comrak — GFM के लिए विस्तारित पार्सर
comrak लोकप्रिय पार्सर cmark का एक फोर्क है जिसमें अतिरिक्त GitHub एक्सटेंशन हैं। यह सबसे अच्छा विकल्प है यदि आपकी परियोजना को GitHub Markdown के सटीक अनुपालन की आवश्यकता है, जिसमें एस्केपिंग, टास्क लिस्ट और इमोजी शामिल हैं।
comrak की विशेषताएं:
- GFM का पूर्ण समर्थन (तालिकाएं, स्ट्राइकथ्रू, ऑटो-लिंक)
- एक्सटेंशन: LaTeX सिंटैक्स, गणितीय सूत्र
- अनुकूलन योग्य HTML सैनिटाइज़ेशन
- कस्टम रेंडरर्स का समर्थन
- एब्सट्रैक्ट सिंटैक्स ट्री (AST) में निर्यात \