هل من الممكن تعديل إعدادات التكوين الحالية الخاصة بـ Markdown typographer (المعروفة أيضًا بـ “ترقيم ذكي”) لتمكين علامات الترقيم في Unicode، مثل علامات الاقتباس والشرطات، مع تعطيل (c) و ™ ورموز متخصصة أخرى من هذا النوع؟
يظهر هذا الأمر بشكل خاص في القوائم المرقمة. على سبيل المثال:
(أ) تفاحة
(ب) موزة
(ج) حقوق نشر؟
(د) تاريخ
هذا أسلوب الترقيم شائع جدًا في القوانين والعقود والسياسات وغيرها من الكتابات الرسمية المتأثرة بالأسلوب القانوني. وهو أيضًا أسلوب تلخيص شائع جدًا. كان جزءًا من أسلوب التلخيص “القياسي” الذي تم تدريسه لي كطالب في المدرسة الابتدائية في الولايات المتحدة.
أرى أن الإعدادات الحالية توفر بعض المرونة فيما يتعلق بـ الترقيم، لكنني لا أرى، بقدر ما أستطيع استنتاجه، أي طريقة لتمكين الترقيم الذكي دون تمكين الرموز الذكية.
لا أشعر بشعور قوي تجاه هذه النقطة، فأنا أعتقد أن «الحاجة» لكتابة رمز حقوق النشر نادرة جدًا لدرجة أنه يمكن سحب هذا الاختصار… فالتوازن بين فائدة نادرة جدًا مقابل تنسيق القائمة (a) (b) (c) الشائع نسبيًا (ولكنه غير جذاب) يجعلني مرتاحًا تمامًا لإزالة هذا الاختصار المحدد بالكامل @sam.
الميزة الإيجابية هي أن المحرك قابل للتكوين إلى حد كبير؛ يمكننا تعطيل القواعد في markdown.it، ونسخ الكود، وتنفيذ استبدالاتنا الخاصة تمامًا كما فعل @Roman → .
سيستغرق الأمر بضعة أيام من العمل الهندسي لتنظيف ذلك، كما سيكون من المحزن تسليم نفس الكود مرتين، لكن هذا أمر لا مفر منه إلى حد ما إذا كنا سنقوم بعمل نسخة منه.
اعتبارًا من الإصدار 7b8969ce5cb2edc54f2c1aa39a85a3a08076337d على الفرع master في markdown-it، فإن ملف المصدر ذي الصلة هو lib/rules_core/replacements.js، وملف الاختبار ذي الصلة هو test/fixtures/markdown-it/typographer.txt.
جميع عمليات الاستبدال مُعرَّفة بشكل ثابت. وتشمل (c) → (c)، (tm) → ™، (r) → (r)، و (p) → (p)، والتي تُصنَّف ضمن “الاختصارات المحددة النطاق”.
للعلم، لا أحصل على (p) لـ §. ومن المرجح جدًا أن يكون ذلك ℗، وهو رمز التسجيل الصوتي، بدلاً من ذلك.
سأقوم بإجراء بعض التجارب على هذا الأمر لأرى ما إذا كان بإمكاني اقتراح إصلاح يجعل ميزة “typographer” أكثر قابلية للتكوين.
المشرف متجاوب للغاية. يغلق طلباتي المدمجة (PRs) في غضون دقائق
ما أقرأه هو أنه يكره بشدة إدخال أي تغييرات كاسرة، حتى في الإصدارات الرئيسية الجديدة، حتى لأشياء مثل عرض (P) كـ §. كما أنه يرفض تمامًا السماح بخيارات على غرار typographer: {A: true, B: false}، حتى عندما يظل typographer: true فعالاً، وذلك بسبب التعقيد المُدرَك.
أقرأ بين السطور، وهو روسي يكتب بالإنجليزية. لكني أشعر أنه يرى أن markdown-it مشروع مكتمل لا يحتاج إلى تطوير.
مع كل الامتنان، قد يكون من الجيد عمل نسخة مشتقة (fork) من التطبيق، وإعادة كتابته كـ ES Modules، وإزالة جميع الوظائف الشبيهة بالإضافات المدمجة حاليًا، بما في ذلك ربط الروابط (linkification) والاستبدالات، مثل استبدالات علامات الترقيم الخاصة بـ typographer.
صانع الصيانة غير مهتم بالنقاط المتعلقة بتكرار الكود في الحزم بدون أرقام. كما أنه غير مهتم حتى بالتغييرات غير المكسرة في واجهة برمجة التطبيقات (API) التي لا تكون “مطلوبة من 100% من المستخدمين” أو تعيق تنفيذ الإضافات. هذا يؤدي إلى موقف محير بعض الشيء، حيث أنهم يصدرون حركتين فرعيين يعتمدان بشكل كبير على الإضافات، واحدة للربط (linkification) والأخرى للتنقيط الذكي (smart punctuation)، والتي كان يجب أن تكون في حزم npm صغيرة مستقلة تحت هذه الفلسفة. وهذا يحدث.
وللتوضيح، كانت هناك إصدارات كبيرة لمكتبة markdown-it في الماضي القريب. ولا سيما تحسين الأداء الذي قدمه أليكس كوتشارين في نوفمبر من العام الماضي.
لإصلاح (c)، والتعامل مع (p)، وفعل أي شيء آخر نرغب في فعله مع الأسهم وما شابه، فإن أفضل رهان هو طرح رقعة تزيل حركتي الربط والتنقيط الذكي من النواة وتحميلهما بدلاً من ذلك كإضافات في Discourse. استخدم إجراء GitHub أو مهمة مجدولة (cron job) للمراقبة على النسخة الرئيسية من markdown-it ومحاولة إعادة التأسيس تلقائيًا. إذا ظل الصانع محافظًا جدًا على التغييرات، فإن الرقعة يجب أن تُطبَّق بنقاء لفترة طويلة. ما لم يقم بقفزة كبيرة مثل إعادة الكتابة كـ ES Modules بدلاً من CommonJS.
ناقشنا هذا داخليًا وقررنا أن نقوم بعمل hard-fork لمكتبة typographer.
سنقوم أساسًا بتعطيل typographer في markdown.it وتنفيذ نسخة مخصصة في discourse. إن markdown.it قابل للتوسع بشكل كبير، لذا فإن هذا الإجراء هو في الغالب “نسخ ولصق”.
بمجرد الانتهاء من عملية النسخ واللصق، يمكننا إضافة الاختبارات وتخصيص بعض القواعد وتعديلها.
مرحبًا، آسف لإثارة هذا النقاش. بما أنني أبحث عن طريقة لتعطيل ... -> …، أردتُ معرفة ما إذا كان هذا الميزة قد تطورت بطريقة ما، وما إذا كان بإمكاني توقع تمكين أو تعطيل قواعد فردية في المستقبل.