C++ में Markdown के साथ काम करना: md4c, cmark और cpp-markdown लाइब्रेरीज़

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

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

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

C++ में Markdown के साथ काम करना: लाइब्रेरीज़ का अवलोकन और उपयोग के उदाहरण

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



1. md4c लाइब्रेरी

md4c एक हल्का Markdown पार्सर है, जो शुद्ध C में लिखा गया है (C++-संगत हेडर के साथ)। यह CommonMark विनिर्देश और GitHub Flavored Markdown (GFM) एक्सटेंशन का समर्थन करता है, जिसमें टेबल, स्ट्राइकथ्रू और ऑटो-लिंक शामिल हैं। यह लाइब्रेरी उच्च प्रदर्शन और न्यूनतम मेमोरी खपत के लिए जानी जाती है।

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

  • CommonMark 0.30 मानक का पालन।
  • GFM एक्सटेंशन का समर्थन (टेबल, टास्क लिस्ट, स्ट्राइकथ्रू)।
  • चरण-दर-चरण पार्सिंग के लिए API (SAX-जैसा) और HTML जनरेशन।
  • कोई बाहरी निर्भरता नहीं।

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

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

// HTML आउटपुट लिखने के लिए कॉलबैकstatic void append_html(const MD_CHAR* text, MD_SIZE size, void* userdata) { std::string* output = static_cast<std::string*>(userdata); output->append(text, size);}

int main() { std::string markdown = "# Hello, **World**!

This is a *test*."; std::string html; MD_HTML_FLAGS flags = MD_HTML_FLAG_SKIP_UTF8_BOM; int result = md_html(markdown.c_str(), markdown.length(), append_html, &html, flags, 0); if (result == 0) { std::cout << html << std::endl; } else { std::cerr << "Parsing failed" << std::endl; } return 0;}


2. cmark लाइब्रेरी

cmark (पहले cmark-gfm) समुदाय द्वारा CommonMark पार्सर का एक संदर्भ कार्यान्वयन है। यह भी C में लिखा गया है और C++ रैपर प्रदान करता है। यह लाइब्रेरी सक्रिय रूप से समर्थित है और GitHub, GitLab और Pandoc जैसी परियोजनाओं में उपयोग की जाती है।

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

  • CommonMark का पूर्ण समर्थन (विनिर्देश के नवीनतम संस्करण सहित)।
  • GitHub Flavored Markdown का अंतर्निहित समर्थन (टेबल, फ़ॉर्मूले, उल्लेख)।
  • HTML, LaTeX, man, XML और अन्य फ़ॉर्मेट का जनरेशन।
  • AST (Abstract Syntax Tree) के प्रोग्रामेटिक नियंत्रण के लिए API।

पार्सिंग और HTML आउटपुट के लिए cmark का उपयोग करने का उदाहरण:

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

int main() { const char* markdown = "## सूची

- [x] दूध खरीदें- [ ] दोस्त को कॉल करें"; // GFM समर्थन के साथ पार्सिंग cmark_node* doc = cmark_parse_document(markdown, strlen(markdown), CMARK_OPT_DEFAULT); // HTML में रूपांतरण char* html = cmark_render_html(doc, CMARK_OPT_DEFAULT, NULL); std::cout << html << std::endl; // मेमोरी मुक्त करना free(html); cmark_node_free(doc); return 0;}


3. cpp-markdown लाइब्रेरी

cpp-markdown एक C++ लाइब्रेरी है, जो STL और C++11/14 की आधुनिक क्षमताओं का उपयोग करके शुरू से लिखी गई है। यह C++ प्रोजेक्ट्स में एकीकरण में आसानी और उपयोग में सुविधा पर केंद्रित है। md4c और cmark के विपरीत, इसे बाहरी C निर्भरता की आवश्यकता नहीं है।

विशेषताएं:

  • शुद्ध C++ में कार्यान्वयन (टेम्पलेट, RAII, अपवाद)।
  • बुनियादी Markdown सिंटैक्स का समर्थन (शीर्षक, सूचियाँ, लिंक, चित्र)।
  • विस्तार योग्य आर्किटेक्चर (अपने स्वयं के पार्सिंग नियम जोड़े जा सकते हैं)।
  • सरल

अनुशंसाएँ