وُصف Markdown عام 2004 طريقةَ كتابة تُقرأ جيّدًا نصًّا صرفًا وتتحوّل إلى HTML. كان الوصف غير رسمي وترك حالات كثيرة جدًّا بلا تعريف، فحسمها كل تطبيق على نحو مختلف، وسمّى كلٌّ منهم النتيجة Markdown.
بعد عقدين، ثمّة شيئان يستحقّان المعرفة، والفرق بينهما يفسّر كل مفاجأة تقريبًا.
CommonMark وGitHub Flavored Markdown
CommonMark مواصفة دقيقة معها مجموعة اختبارات، كُتبت لحسم المواضع الملتبسة. تعرّف بالضبط ما يحدث مع القوائم المتداخلة، ومع التوكيد داخل الكلمات، ومع قائمة تقطعها فقرة — الحالات التي كانت تختلف بين الأدوات.
GitHub Flavored Markdown هو CommonMark زائد أربع إضافات صار الناس يفترضونها أساسية: الجداول، والشطب، وقوائم المهامّ، والربط التلقائي للعناوين المجرّدة.
النقطة الأخيرة هي العملية. الجداول امتداد. المحوّل الذي يطبّق CommonMark بأمانة سيعرض جدولك فقرةً مليئة بالشرطات العمودية، وهو ليس مخطئًا.
ما يتّفق عليه كل محوّل
العناوين بعلامات المربّع، والفقرات تفصلها أسطر فارغة، والتوكيد بالنجمات أو الشرطات السفلية، والقوائم المرقّمة وغير المرقّمة، والروابط والصور بصيغة القوسين المعقوفين والهلاليين، والاقتباسات، والشفرة السطرية بالعلامات الخلفية، وكتل الشفرة المسوّرة، والخطوط الأفقية.
تلك هي المجموعة الجزئية المحمولة. كل ما يُكتب بها وحدها يتحوّل على النحو نفسه في كل مكان، وهي تغطّي معظم المستندات.
ما يتغيّر
الجداول والشطب وقوائم المهامّ والروابط التلقائية — امتدادات GFM. مدعومة على نطاق واسع لا في كل مكان.
الحواشي وقوائم التعريفات والاختصارات — امتدادات من لهجات أخرى، تدعمها أدوات أقلّ.
الترويسة الأمامية — كتلة YAML في أعلى الملف. ليست Markdown إطلاقًا؛ بل عرف تزيله مولّدات المواقع الساكنة قبل التحليل. المحوّل العامّ يعرضها فقرةً فوقها خطّ أفقي.
HTML الخام — يمرّره معظمها، ويزيله كل ما ينقّي، والسلوك الصحيح يتوقّف كلّيًّا على مصدر Markdown.
فواصل الأسطر، الالتباس المتكرّر
السطر الجديد المفرد مسافة. Markdown يعيد تدفّق الفقرات، فجملة مقسومة على ثلاثة أسطر في محرّرك تصير سطرًا واحدًا من النثر.
السطر الفارغ يبدأ فقرة جديدة. لكسر سطر داخل فقرة، أنهه بمسافتين أو بشرطة مائلة خلفية.
قاعدة المسافتين غير مرئية في كل محرّر، ولهذا تسبّب كل هذا العناء — فأدوات قصّ المسافات اللاحقة تزيلها بصمت، ويتغيّر شكل المستند دون تعديل مرئي. الشرطة المائلة الخلفية أقبح وتبقى.
التحويل في الاتّجاه الآخر
HTML إلى Markdown ينجح ويفقد شيئًا على نحو محدّد: كل ما لا قواعد في Markdown له يُحذف. الأصناف والأنماط السطرية ومعظم السمات والبنية العميقة التداخل، كلّها تُسطَّح.
فالذهاب والإياب لا يعيد الأصل. لا بأس بذلك حين يكون المقصد استخراج نصّ مقروء من صفحة — وهو السبب المعتاد — ويستحقّ أن تعرفه قبل استعماله صيغةَ تخزين.
إلى أين تذهب المخرجات
المحوّل يعطيك قطعة لا مستندًا — عناوين وفقرات، بلا <html>، وبلا ترويسة، وبلا تنسيق. هذا ما تريده عادةً، ما دامت ستدخل في قالب.
إن كانت ستُنشر، فيتبع ذلك أمران. كل ما يحوي Markdown كتبه مستخدم يحتاج تنقية، لأن HTML الخام يمرّ افتراضيًّا ووسم script هو HTML خام. ثم تحتاج القطعة ورقة أنماط — فالعناوين والقوائم بلا تنسيق تبدو كمستند من عام 1995، ولهذا تبدو المخرجات المحوّلة غير مكتملة كثيرًا.
الخلاصة
التزم المجموعة الجزئية المحمولة فيتحوّل النص على النحو نفسه في كل مكان. الجداول وقوائم المهامّ امتدادات GFM، فافحص ما يطبّقه محوّلك قبل أن تفترض أن شيئًا معطوب. تذكّر أن السطر الجديد المفرد مسافة — معظم المفاجآت هي ذلك.