মার্কডাউন থেকে HTML

মার্কডাউন পেস্ট করুন এবং সঙ্গে সঙ্গে স্ট্যান্ডার্ড-সম্মত HTML পান, অটোলিংক, স্মার্ট টাইপোগ্রাফি, হার্ড লাইন ব্রেক এবং কাঁচা HTML পাসথ্রুর জন্য টগলসহ।

মার্কডাউন ইনপুট, স্ট্যান্ডার্ড-সম্মত HTML আউটপুট। আপনি টাইপ করার সাথে সাথে সবকিছু রূপান্তরিত হয়। চারটি টগল পার্সারের আচরণ পরিবর্তন করে, এবং নিচের প্রিভিউ রেন্ডার করা ফলাফল দেখায় যাতে আপনি একসাথে মার্কআপ ও আউটপুট দুটোই পরীক্ষা করতে পারেন।

পার্সার অপশন

প্রিভিউ

মার্কডাউন, CommonMark এবং মধ্যবর্তী বৈকল্পিকগুলো

কেন দুইটি পার্সার আপনার ডকুমেন্ট নিয়ে একমত হয় না

মার্কডাউন ২০০৪ সালে একটি Perl স্ক্রিপ্ট ও গদ্যের একটি পৃষ্ঠা হিসেবে প্রকাশিত হয়েছিল, কোনো আনুষ্ঠানিক ব্যাকরণ ছাড়াই। সেই অনানুষ্ঠানিকতাই এর বিস্তারের কারণ, এবং একই কারণে একই ডকুমেন্ট বিভিন্ন টুলে ভিন্নভাবে রেন্ডার হয়। মূল বাস্তবায়নটি ডজন ডজন ক্ষেত্রে অনির্ধারিত রেখেছিল: তিন স্পেস ইন্ডেন্টেড থাকলে লিস্ট মার্কার কী করে, জোর কীভাবে শব্দের ভেতরে বাসা বাঁধে, হেডিংয়ের আগে ফাঁকা লাইন দরকার কিনা। প্রতিটি বাস্তবায়নকারী সেই ফাঁকগুলো অনুমান করে পূরণ করেছে, এবং তারা ভিন্নভাবে অনুমান করেছে।

CommonMark সেই ফাঁক বন্ধ করার জন্যই বিদ্যমান। এটি একটি নির্ভুল স্পেসিফিকেশন যার কয়েক শত কনফরম্যান্স টেস্ট রয়েছে যা মূল যা খোলা রেখেছিল ঠিক সেই অস্পষ্ট ক্ষেত্রগুলো কভার করে। এই কনভার্টার markdown-it ব্যবহার করে, যা সম্পূর্ণ CommonMark স্যুট পাস করে, তাই আউটপুট GitHub, Reddit, Discourse এবং বেশিরভাগ আধুনিক টুলিং যা তৈরি করে তার সাথে মিলে যায়। একটি ডকুমেন্ট এখানে রেন্ডার হলে সেখানে একইভাবে রেন্ডার হবে।

GitHub Flavored Markdown একটি সুপারসেট যা ওপরে স্তরিত: টেবিল, স্ট্রাইকথ্রু, টাস্ক লিস্ট এবং অটোলিংকড URL। টেবিল ও টাস্ক লিস্ট এই টুলে কাজ করে, এ কারণেই নমুনা ডকুমেন্টে দুটোই অন্তর্ভুক্ত। আপনি যখন নিয়ন্ত্রণে নেই এমন একটি টার্গেটের জন্য লিখছেন তখন এই পার্থক্য গুরুত্বপূর্ণ, কারণ একটি টেবিল CommonMark-এর প্রকৃত অংশ নয় এবং একটি কঠোর পার্সার সেটিকে প্লেইন টেক্সট হিসেবে পাস করে দেবে।

চারটি টগল আসলে কী পরিবর্তন করে

অটোলিংক একটি বেয়ার URL-কে অ্যাঙ্করে পরিণত করে। চেঞ্জলগ ও নোটের জন্য এটি সুবিধাজনক, তবে এটি CommonMark থেকে বিচ্যুতি, কারণ CommonMark-এর একটি বেয়ার লিংকের চারপাশে অ্যাঙ্গেল ব্র্যাকেট প্রয়োজন। আউটপুটটি একটি কঠোর পার্সারে বহনযোগ্য হতে হলে এটি বন্ধ করুন।

স্মার্ট টাইপোগ্রাফি সোজা কোটকে কোঁকড়ানো কোটে এবং ---কে এন ড্যাশে রূপান্তর করে। গদ্যের জন্য এটি সঠিক, এবং কোড ব্লকের বাইরে কোড ফ্র্যাগমেন্ট থাকা যেকোনো কিছুর জন্য ভুল, কারণ এটি স্বাচ্ছন্দ্যে একটি কমান্ড-লাইন ফ্ল্যাগ নষ্ট করবে। কোড স্প্যান ও ফেন্সড ব্লক সবসময় অক্ষত থাকে।

হার্ড লাইন ব্রেক একক নিউলাইনের অর্থ পরিবর্তন করে। ডিফল্টভাবে মার্কডাউন পরপর লাইন এক অনুচ্ছেদে যুক্ত করে, যা বেশিরভাগ ডকুমেন্ট ধরে নেয়। যেখানে মানুষ নতুন লাইনের জন্য এন্টার চাপে এমন চ্যাট-স্টাইল ইনপুটে এটি চালু করা দরকার, নইলে তাদের ফরম্যাটিং ভেঙে পড়ে।

কাঁচা HTML পাসথ্রুই একমাত্র যার নিরাপত্তা পরিণতি আছে। বন্ধ থাকলে উৎসের একটি <img onerror=...> এস্কেপ হয়ে টেক্সট হিসেবে দেখানো হয়। চালু থাকলে এটি লাইভ মার্কআপ হিসেবে নির্গত হয়। যেকোনো ব্যবহারকারী-জমা দেওয়া কন্টেন্টের জন্য এটি বন্ধ রাখুন।

স্যানিটাইজ করা একটি পৃথক কাজ

যেকোনো মার্কডাউন পাইপলাইনের সবচেয়ে সাধারণ ভুল হলো ধরে নেওয়া যে কনভার্টার আপনাকে রক্ষা করে। এটি রক্ষা করে না, এবং রক্ষা করার কথা নয়। কাঁচা HTML অক্ষম থাকলেও, একটি লিংক টার্গেট এখনও আক্রমণকারী-নিয়ন্ত্রিত, তাই [ক্লিক](javascript:alert(1)) একটি অ্যাঙ্কর তৈরি করে যা ব্রাউজার সম্মান করতে পারে। শুধু মার্কডাউন সিনট্যাক্সই একটি কার্যকর আক্রমণ তৈরি করার জন্য যথেষ্ট।

সঠিক প্যাটার্ন হলো: রূপান্তর করুন, তারপর স্যানিটাইজ করুন, তারপর ঢোকান। HTML-কে DOMPurify-এর মতো একটি নিবেদিত স্যানিটাইজারের মাধ্যমে ট্যাগ ও অ্যাট্রিবিউটের অ্যালোলিস্ট দিয়ে চালান, এবং শুধুমাত্র তখনই পেজে রাখুন। কন্টেন্টটি লেখক ছাড়া অন্য কাউকে দেখানো হলে সার্ভারে এটি করুন, কারণ ক্লায়েন্ট-সাইড স্যানিটাইজিং যারা সরাসরি আপনার API-তে কথা বলতে পারে তারা বাইপাস করতে পারে। এই টুলটি তার প্রিভিউ আপনার নিজের ব্রাউজারে আপনার নিজের ইনপুট দিয়ে স্থানীয়ভাবে রেন্ডার করে, যা অন্য কারও মার্কডাউন প্রকাশ করার চেয়ে ভিন্ন হুমকি মডেল।

ওপেন-সোর্স নোট: রেন্ডারিং markdown-it দ্বারা চালিত, MIT লাইসেন্সে প্রকাশিত।

FAQ

এটি কোন মার্কডাউন ডায়ালেক্ট অনুসরণ করে?
CommonMark, সাথে GitHub এক্সটেনশনগুলো যা markdown-it ডিফল্টভাবে সক্রিয় করে যেমন টেবিল ও টাস্ক লিস্ট। এটি সম্পূর্ণ CommonMark কনফরম্যান্স স্যুট পাস করে, তাই আউটপুট GitHub, Discourse এবং বেশিরভাগ আধুনিক রেন্ডারারের সাথে মেলে।
তৈরি HTML কি সরাসরি প্রকাশ করা নিরাপদ?
না। পেজে ঢোকানোর আগে সবসময় DOMPurify-এর মতো স্যানিটাইজারের মাধ্যমে চালান, বিশেষ করে এমন কন্টেন্টের জন্য যা আপনি লেখেননি। কাঁচা HTML অক্ষম থাকলেও লিংক টার্গেট আক্রমণকারী-নিয়ন্ত্রিত থাকে এবং একটি javascript: URL পিছলে যেতে পারে।
আমার একক লাইন ব্রেকগুলো কেন অদৃশ্য হয়ে গেল?
স্ট্যান্ডার্ড মার্কডাউন পরপর লাইন এক অনুচ্ছেদে যুক্ত করে; হার্ড ব্রেকের জন্য দুটি ট্রেইলিং স্পেস বা একটি ফাঁকা লাইন প্রয়োজন। আপনার উৎস চ্যাট-স্টাইল টেক্সট হলে যেখানে প্রতিটি এন্টার লাইন ব্রেক হওয়া উচিত, সেখানে একক-নিউলাইন টগল চালু করুন।
আমি কি মার্কডাউন সাইডে HTML পেস্ট করতে পারি?
হ্যাঁ, কাঁচা HTML অপশন সক্রিয় করলে। নইলে ট্যাগ এস্কেপ হয়ে আক্ষরিক টেক্সট হিসেবে দেখানো হয়, যা নিরাপদ ডিফল্ট। মার্কডাউনে কাঁচা HTML মেশানো বৈধ, তবে প্রত্যাশা অনুযায়ী পার্স করতে ব্লকগুলো ফাঁকা লাইন দিয়ে পৃথক করা আবশ্যক।
আমার কন্টেন্ট কি কোথাও আপলোড হয়?
না। markdown-it সম্পূর্ণরূপে আপনার ব্রাউজারে চলে এবং পেজটি আপনার টেক্সটসহ কোনো নেটওয়ার্ক রিকোয়েস্ট করে না। আপনি পেজটি লোড করে অফলাইন হয়ে রূপান্তর চালিয়ে যেতে পারেন।
স্মার্ট টাইপোগ্রাফি আমার কোড ভাঙে কেন?
এটি গদ্যের মধ্যে কোট ও ড্যাশ পুনর্লিখন করে, তাই কোড স্প্যানের বাইরে লেখা একটি --dry-run-এর মতো ফ্ল্যাগ এন ড্যাশ হয়ে যায়। কোড ফ্র্যাগমেন্ট ব্যাকটিক দিয়ে ঘিরুন; পার্সার কোড স্প্যান বা ফেন্সড ব্লকের ভেতরে কখনো টাইপোগ্রাফিক প্রতিস্থাপন প্রয়োগ করে না।