C++ में Markdown के साथ काम: लाइब्रेरी, पार्सर और टूल्स

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

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

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

C++ में Markdown के साथ काम: लाइब्रेरी और टूल्स की समीक्षा

Markdown एक हल्की मार्कअप भाषा है, जिसका उपयोग डॉक्यूमेंटेशन, README फ़ाइलों, ब्लॉग और शैक्षिक प्रोजेक्ट्स में टेक्स्ट को फ़ॉर्मेट करने के लिए व्यापक रूप से किया जाता है। C++ में Markdown के लिए कोई बिल्ट-इन सपोर्ट नहीं है, लेकिन कई परिपक्व और उच्च-प्रदर्शन वाली लाइब्रेरी उपलब्ध हैं जो Markdown को पार्स करके HTML या अन्य फ़ॉर्मेट में बदल सकती हैं। इस लेख में हम C++ में Markdown के लिए प्रमुख लाइब्रेरी, उनकी क्षमताएँ, उपयोग के उदाहरण और चयन के सुझाव देखेंगे।

C++ में Markdown की आवश्यकता क्यों?

C++ प्रोजेक्ट्स में Markdown के कई उपयोग हो सकते हैं:

  • Markdown फ़ाइलों से स्टैटिक डॉक्यूमेंटेशन जनरेट करना।
  • मार्कअप प्रीव्यू के साथ एडिटर बनाना।
  • सर्वर-साइड पर यूज़र कंटेंट (कमेंट, आर्टिकल) प्रोसेस करना।
  • कंटेंट मैनेजमेंट सिस्टम (CMS) और शैक्षिक प्लेटफ़ॉर्म के साथ इंटीग्रेशन।

सही लाइब्रेरी का चुनाव प्रदर्शन और सुरक्षा के लिए बहुत महत्वपूर्ण है, खासकर अगर आप यूज़र इनपुट प्रोसेस कर रहे हैं।

C++ में Markdown के लिए प्रमुख लाइब्रेरी

1. md4c

md4c एक कॉम्पैक्ट और तेज़ Markdown पार्सिंग लाइब्रेरी है, जो C में लिखी गई है। यह CommonMark स्पेसिफिकेशन और GFM (GitHub Flavored Markdown) के कुछ एक्सटेंशन को सपोर्ट करती है। यह लाइब्रेरी सीधे HTML जनरेट नहीं करती, बल्कि SAX-जैसा इवेंट इंटरफ़ेस प्रदान करती है, जिससे आउटपुट पर पूरा नियंत्रण मिलता है।

मुख्य विशेषताएँ:

  • CommonMark 0.30 का सपोर्ट।
  • मोड: पार्स ट्री जनरेशन के साथ या बिना (MD_PARSE_FLAG_COLLAPSEWHITESPACE)।
  • टेबल, टास्क लिस्ट, GFM फ़्लैग का सपोर्ट।
  • न्यूनतम मेमोरी उपयोग।

md4c का उपयोग कर Markdown को HTML में बदलने का उदाहरण

#include <md4c.h>
#include <string>
#include <iostream>

// HTML जनरेट करने के लिए कॉलबैक फ़ंक्शन
static int render_html(const MD_CHAR* text, MD_SIZE size, void* userdata) {
    std::string* html = static_cast<std::string*>(userdata);
    html->append(text, size);
    return 0;
}

int main() {
    std::string markdown = "# Hello, **world**!\n\nयह *Markdown* का उदाहरण है।";
    std::string html;

    MD_PARSER parser = {
        0, // फ़्लैग: MD_FLAG_COLLAPSEWHITESPACE जोड़ सकते हैं
        nullptr, nullptr, nullptr, nullptr,
        nullptr, nullptr, nullptr, nullptr,
        nullptr, nullptr, nullptr, nullptr,
        render_html, // टेक्स्ट के लिए कॉलबैक
        nullptr, nullptr
    };

    md_parse(markdown.c_str(), markdown.size(), &parser, &html);
    std::cout << html << std::endl;
    return 0;
}

यह कोड न्यूनतम इंटीग्रेशन दिखाता है: लाइब्रेरी हर टेक्स्ट फ़्रैगमेंट के लिए render_html को कॉल करती है। पूर्ण HTML रेंडरिंग के लिए सभी इवेंट (हेडिंग, लिस्ट, लिंक आदि) को हैंडल करना होगा।

2. CMark

CMark एक C लाइब्रेरी है जो CommonMark स्पेसिफिकेशन को लागू करती है। यह एक रेफरेंस इम्प्लीमेंटेशन है और GitHub और Stack Overflow जैसे प्रोजेक्ट्स में उपयोग होती है। CMark में पार्सर और HTML, XML, LaTeX और man-पेजों के लिए रेंडरर शामिल हैं।

मुख्य विशेषताएँ:

  • CommonMark 0.31.2 का पूर्ण सपोर्ट।
  • एक्सटेंशन: टेबल, स्ट्राइकथ्रू, ऑटोलिंक।
  • कस्टम प्रोसेसिंग के लिए AST (एब्सट्रैक्ट सिंटैक्स ट्री) जनरेशन।
  • अच्छा डॉक्यूमेंटेशन और सक्रिय कम्युनिटी।

CMark का उपयोग करने का उदाहरण

#include <cmark.h>
#include <iostream>

int main() {
    const char* markdown = "## शीर्षक\n\n*इटैलिक* और **बोल्ड** वाला टेक्स्ट।";
    char* html = cmark_markdown_to_html(markdown, strlen(markdown), CMARK_OPT_DEFAULT);
    if (html) {
        std::cout << html << std::endl;
        free(html);
    }                    

अनुशंसाएँ