الفصل 3.4 · الجزء II · الحرفة
الإعدادات: تقسيم الكلمات واللغة
أنماط تقسيم الكلمات بالواصلة واستثناءاتها، والنص غير المضبوط، ولغة المستند وأرقامها واتجاهها، وأنظمة الكتابة التي ينضّدها Postext
باختصار
تتناول هذه الصفحة طريقة تقسيم الكلمات في آخر السطر، وكيف يعرف Postext لغة الكتاب. تشغّل تقسيم الكلمات أو توقفه، وتسرد الكلمات التي لا يجوز تقسيمها أبدًا. ويمكنك أن تترك نهايات الأسطر غير متساوية بدلًا من حافة مستقيمة. وتحدد لغة المستند قواعد التقسيم، وأسماء الأشكال والجداول، والأرقام، واتجاه النص. وتبيّن الأقسام الأخيرة أنظمة الكتابة التي يستطيع Postext تنضيدها، وطريقة معالجة النص العربي.
#تقسيم الكلمات بالواصلة
حين تُضبط محاذاة النص على 'justify'، يمنع التقسيم بالواصلة الإفراط في تباعد الكلمات بكسر الكلمات الطويلة عند حدود المقاطع. يستخدم المحرّك أنماط TeX/Liang لإيجاد نقاط الكسر الطبيعية عند حدود المقاطع. انظر تقسيم الكلمات وضبط الأسطر لشرح مفصّل. ولا يُقسَّم النص غير المضبوط إلا إذا طلبت ذلك: انظر النص غير المضبوط أدناه.
| الخاصية | النوع | القيمة الافتراضية | الوصف |
|---|---|---|---|
enabled | boolean | true | ما إذا كان التقسيم بالواصلة مسموحًا. |
locale | LocaleTag | locale في المستوى الأعلى، وإلا 'en-us' | قواعد اللغة لحدود المقاطع: إحدى اللغات المدعومة أدناه، أو أي وسم BCP 47 ('es-ES'، 'pt-BR'). |
ragged | boolean | false | قسّم بالواصلة النص غير المضبوط أيضًا (المحاذى إلى اليسار أو اليمين أو الوسط)، ضمن zone. انظر النص غير المضبوط. |
zone | Dimension | 3em | منطقة التقسيم بالواصلة في النص غير المضبوط: لا تُقسَّم الكلمة التي لا يتّسع لها السطر إلا حين يترك إرسالها كاملة إلى السطر التالي فراغًا أعرض من هذا. وحدة em نسبية إلى حجم خط النص نفسه. تُتجاهَل في النص المضبوط. |
compounds | boolean | true | اسمح للقاموس بتقسيم أجزاء الكلمة المركّبة، وهي كلمة فيها واصلة بين حرفين (af-ter-dinner). القيمة false تُبقي هذه الكلمة كاملة إلا عند واصلتها الخاصة، حيث يظل جائزًا أن ينتهي السطر (after- · dinner)، كما يفعل TeX. الواصلة الاختيارية (soft hyphen) المكتوبة في الكلمة تظل تكسرها، والكلمة المركّبة الأعرض من السطر كله تظل تُقسَّم. ينطبق على النص الجاري والعناوين والقوائم والاقتباسات الكتلية والأطر؛ أما تعليقات الأشكال والملاحظات وخلايا الجداول وجدول المحتويات فتظل تقسّم الكلمات المركّبة. انظر الكلمات المركّبة. |
exceptions | string[] | لا شيء | كلمات يجب ألّا يقسّمها القاموس، أو لا يجوز أن يقسّمها إلا حيث يحدّد المدخل: 'Alice' لا تُقسَّم أبدًا، و'You-Tube' عند واصلتها فقط. انظر كلمات لا تُقسَّم. |
capitalized | boolean | true | قسّم الكلمات المبدوءة بحرف كبير كغيرها من الكلمات. القيمة false تُبقي كل كلمة تبدأ بحرف كبير كاملة (Alice، Ámsterdam، UNESCO)، ومنها أول كلمة في الجملة. انظر كلمات لا تُقسَّم. |
اللغات المدعومة: 'en-us' (الإنجليزية)، 'es' (الإسبانية)، 'fr' (الفرنسية)، 'de' (الألمانية)، 'it' (الإيطالية)، 'pt' (البرتغالية)، 'ca' (الكتالونية)، 'nl' (الهولندية).
تُتجاهَل الوسوم الفرعية للمنطقة ونظام الكتابة والمتغيّر عند اختيار الأنماط، وكذلك حالة الأحرف والفاصل _: فـ 'es-ES' و'es-MX' و'es_419' تُقسَّم بأنماط 'es'، و'pt-BR' بأنماط 'pt'، وكل وسم إنجليزي ('en'، 'en-GB') بأنماط 'en-us' — وهي الأنماط الإنجليزية الوحيدة المضمَّنة، فينال النص البريطاني نقاط كسر أمريكية. واللغة التي لا أنماط مضمَّنة لها ('sv'، 'pl'، 'fi'…) تُقسَّم بأنماط 'en-us'، وهذا يعطي نقاط كسر خاطئة لا انعدامها؛ ويبلّغ المحرّك عن ذلك مرة واحدة لكل وسم عبر console.warn، ويُدرجه Sandbox في لوحة «الفحوص». اضبط enabled: false لمثل هذا المستند؛ فذلك يُسكت التحذير أيضًا. أما الصينية واليابانية والكورية (zh، ja، ko، أيًّا كانت المنطقة أو نظام الكتابة) فلا تحتاج إلى أنماط ولا تطبع تحذيرًا: المستند المكتوب بإحداها يُنضَّد بلا تقسيم بالواصلة. ولتقسيم الكلمات اللاتينية المقتبسة فيه، اضبط enabled: true وسمِّ لغتها في locale ('en-us' للإنجليزية). أما enabled: true بلا locale، أو مع لغة صينية أو يابانية أو كورية، فيترك التقسيم معطّلًا ويقول ذلك مرة واحدة في وحدة التحكم (console). تعيد matchHyphenationLocale(tag) اللغة المضمَّنة التي يُطابقها الوسم (undefined حين لا توجد)، وتُدرج HYPHENATION_LOCALES اللغات المضمَّنة. وتسمّي الإعدادات المحلولة (doc.config.bodyText.hyphenation) الأنماط المستخدمة فعلًا في locale، وتحتفظ بالوسم الذي أعطيته في tag حين يختلف. ويعلن مُخرِج PDF لغة المستند من locale في المستوى الأعلى، ومن هذا الوسم فقط حين لا يكون locale مضبوطًا (انظر لغة المستند).
import { matchHyphenationLocale } from 'postext';
matchHyphenationLocale('es-MX'); // 'es'
matchHyphenationLocale('en-GB'); // 'en-us'
matchHyphenationLocale('sv'); // undefined: hyphenated with 'en-us', with a console warningلا تُقسَّم أبدًا الكلمات الأقصر من 5 أحرف. ويشترط المحرّك حرفين على الأقل قبل نقطة الكسر و3 أحرف بعدها.
#كلمات لا تُقسَّم
يقسّم القاموس اسم العلم كما يقسّم أي كلمة: Al-ice، Áms-ter-dam، You-Tu-be. وثمة ثلاثة إعدادات تُبقي الكلمات كاملة، والقيمة الافتراضية لكل منها هي ما يفعله القاموس.
الإعداد hyphenation.exceptions قائمة كلمات، مثل \hyphenation{…} في TeX. المدخل المكتوب بلا واصلة لا يُقسَّم أبدًا؛ والمدخل المكتوب بواصلات لا يُقسَّم إلا عندها، فيعطي 'You-Tube' القسمين You- · Tube ولا شيء غيرهما. ويطابق المدخل سلسلة من الحروف أيًّا كان ما يحيط بها: 'Alice' يشمل (Alice, وAlice’s، والكلمة المركّبة تُطابَق جزءًا جزءًا (Blender-based تطابق 'Blender'). والصيغة المصرَّفة كلمة أخرى تحتاج إلى مدخل خاص بها. والمدخل المكتوب بأحرف صغيرة يطابق الكلمة أيًّا كانت حالة أحرفها ('blender' يشمل Blender وBLENDER)؛ أما المدخل المبدوء بحرف كبير فلا يطابق إلا المواضع التي تبدأ بحرف كبير، فيُبقي 'Rose' الاسم كاملًا ويترك rose للقاموس. ولا تحوي المداخل إلا حروفًا وواصلات؛ وكل ما عدا ذلك يُحذف.
والإعداد hyphenation.capitalized: false يُبقي كل كلمة تبدأ بحرف كبير كاملة: أسماء الأعلام والمختصرات، وأول كلمة في كل جملة أيضًا. وهو مفتاح «Hyphenate Capitalized Words» في InDesign وهو معطَّل، ويقابله \uchyph=0 في TeX. والمدخل ذو الواصلات في exceptions يظل يقسّم كلمته عندها. والألمانية تبدأ كل اسم بحرف كبير، فيترك هذا المفتاح النص الألماني بلا كلمات تُقسَّم تقريبًا: سمِّ الكلمات هناك في exceptions، أو استعمل citations.hyphenateNames.
والإعداد citations.hyphenateNames: false يُبقي أسماء عائلات المؤلفين الذين يستشهد بهم المستند كاملة أينما وردت: في استشهاد، وفي النص الجاري، وفي قائمة المراجع. انظر الاستشهادات.
const config: PostextConfig = {
locale: 'es',
bodyText: {
hyphenation: { exceptions: ['Ámsterdam', 'Blender', 'You-Tube'] },
},
};تسري الإعدادات الثلاثة على كل نص يقسّمه القاموس: المتن والعناوين والقوائم والأطر وتعليقات الأشكال وخلايا الجداول والملاحظات والترويسات وسائر نص التصميم. وهذا أوسع من compounds الذي تتجاهله تعليقات الأشكال والملاحظات والخلايا وجدول المحتويات. ويبقى أمران على حالهما. الواصلة الاختيارية المكتوبة في موضع من مواضع الكلمة تظل هي التي تحكم ذلك الموضع، والواصلة الاختيارية قبل الحرف الأول تُبقي موضعًا واحدًا كاملًا بلا قائمة (انظر حيث لا ينكسر السطر أبدًا). والكلمة الأعرض من عرض السطر كله تظل تُقسَّم: عند نقاط مدخلها إن كانت له نقاط، وإلا فعند مقاطع القاموس. وقلّة الكلمات المقسَّمة تترك للعمود الضيق المضبوط طرقًا أقل لملء أسطره، فراجع تباعد الكلمات بعد تعطيل capitalized في صفحة من ثلاثة أعمدة. أما EPUB المتدفق فيترك التقسيم بالواصلة لنظام القراءة، وهو لا يعرف شيئًا عن هذه القواعد.
#النص غير المضبوط
افتراضيًا لا يُقسَّم بالواصلة إلا النص المضبوط: مع textAlign: 'left'، وفي أنماط الفقرات المحاذاة إلى اليسار أو الوسط أو اليمين، تبقى كل كلمة كاملة مهما ازدادت الحافة تعرّجًا، إلا عند واصلة اختيارية (U+00AD) مكتوبة في النص. اضبط hyphenation.ragged: true لتقسيم النص غير المضبوط أيضًا.
لا يُمدَّد السطر غير المضبوط أبدًا، فتقسيم كل كلمة لا يتّسع لها السطر سيملأ الحافة بالواصلات. وتحدّ من ذلك منطقة التقسيم بالواصلة، كما يفعل مُنضِّد السطر الواحد في برامج النشر المكتبي. حين لا تتّسع كلمة في آخر السطر، ينظر المحرّك إلى الفراغ الذي سيتركه إرسالها كاملة إلى السطر التالي. فإن كان ذلك الفراغ أعرض من zone، تُقسَّم الكلمة عند آخر مقطع يتّسع؛ وإلا نزلت كاملة. المنطقة المقيسة بـ em نسبية إلى حجم خط النص نفسه. القيمة الافتراضية 3em لا تقسّم إلا الكلمات التي ستترك سطرًا قصيرًا على نحو ملحوظ. والمنطقة الأعرض تعطي واصلات أقل وحافة أكثر تعرّجًا؛ والقيمة 0 تقسّم كل كلمة لا تتّسع. وفي التنضيد سطرًا سطرًا، لا ينتهي أكثر من سطرين متتاليين بمقطع. أما الواصلات الصلبة (enseñanza-aprendizaje) ومفاصل عناوين URL والواصلات الاختيارية المكتوبة في النص والكلمات الأعرض من السطر كله فتنكسر كما تفعل دائمًا: المنطقة وحدّ السطرين لا يحكمان إلا مقاطع القاموس.
الإعداد على مستوى المستند كله. ينطبق على نص المتن والاقتباسات الكتلية حين تكون غير مضبوطة، وعلى كل نمط فقرة غير مضبوط ومتن إطار يكون hyphenation الخاص به مفعّلًا (وقيمته الافتراضية هي hyphenation.enabled الخاصة بالمتن)، فالقيمة hyphenation: false تُبقي كلمات نمطٍ واحد كاملة. لا تُقسَّم العناوين وتعليقات الأشكال والملاحظات وخلايا الجداول وجدول المحتويات؛ وهناك، كما في كل موضع، لا تُقسَّم إلا الكلمة الأعرض من عرض السطر كله. أما نص التصميم — الترويسات وصفحات الافتتاح وصفحات الأجزاء — فيتبع علامة hyphenate الخاصة بكل عنصر نصي، التي تضبطها صفحات الافتتاح الكاملة وصفحات الأجزاء المضمَّنة، ويستخدم قاموس المستند أيضًا. ويتجاهل النص المضبوط ragged وzone.
const config: PostextConfig = {
locale: 'es',
bodyText: {
textAlign: 'left',
// A little more hyphenation than the 3 em default.
hyphenation: { ragged: true, zone: { value: 2, unit: 'em' } },
},
};مع optimalRagged (القيمة الافتراضية) يُكسر النص الجاري غير المضبوط بخوارزمية Knuth-Plass، وتحتفظ المنطقة بمعناها هناك: لا تُقسَّم الكلمة إلا حين لا يتّسع لها باقي السطر ويترك إنزالها كاملة أكثر من المنطقة فارغًا. ولا يُرفض مقطعان متتاليان، لكنهما يكلّفان ما تكلّفه واصلتان متتاليتان في النص المضبوط، فيندر الثالث. ومع optimalRagged: false، أو optimalLineBreaking: false، يُملأ كل سطر قبل الذي يليه، كما حتى postext 1.4.
يُخرج التقسيمُ بالواصلة للنص غير المضبوط الفقراتِ بكاسر الأسطر الذي تستخدمه دائمًا الفقرات ذات التنسيق المضمَّن (العريض والمائل والروابط والرياضيات)، فتفعيله قد يحرّك بضع نقاط كسر غير الواصلات. في السطر غير المضبوط، وإلى جانب المسافات ومقاطع القاموس، يكسر ذلك الكاسر بعد واصلة صلبة أو شرطة بين كلمتين (largas—separadas؛ ومع breakAfterDashes، بعد أي شرطة منضَّدة ملتصقة بين كلمتين، وriddles.—I وriddles—*and* أيضًا)، وعند مفاصل عناوين URL وبين الرموز الإيديوغرافية، ويُبقي معًا الكلمة المنضَّدة في عدة مقاطع (**Nota**:، (*véase*). ومن دون التقسيم بالواصلة للنص غير المضبوط، تكسر Knuth-Plass الفقرة غير المضبوطة الخالية من التنسيق حين يكون optimalRagged مفعّلًا (القيمة الافتراضية): عند المسافات بين الكلمات، وبعد واصلة صلبة بين حرفين (meta- · analyses)، كما يفعل الكاسر الآخر، ومع breakAfterDashes، بعد الشرطات الملتصقة. وفي التنضيد سطرًا سطرًا، تمرّ الفقرة عبر كاسر pretext، الذي يختلف في ثلاثة أمور: قد يكسر أيضًا قبل شرطة تُغلق جملة اعتراضية أو بعد شرطة تفتحها (él · — y)، وبعد الشرطة المائلة عند التقسيم بالواصلة (km/ · h)، ويقطع الكلمة الأعرض من السطر عند أي حرف بلا واصلة، حيث يقسّمها الكاسر الآخر عند مقطع أولًا.
في Sandbox، المفتاح هو قسّم النص غير المضبوط بالواصلة، تحت محاذاة الفقرة في قسم نص المتن، والمنطقة تحته. وتحت متنٍ مضبوط يقع المفتاح نفسه مع إعدادات ضبط الأسطر، لأنماط الفقرات والأطر غير المضبوطة.
#لغة المستند
locale في المستوى الأعلى هو لغة المستند ككل. يأخذ القيم نفسها التي يأخذها hyphenation.locale، وهو البديل حين لا يكون ذلك الحقل مضبوطًا، فلا يحتاج كتاب إسباني إلا إلى locale: 'es' ليُقسَّم بالواصلة بالإسبانية. ويختار أيضًا لغة عبارات الاستمرار المضمَّنة في الجداول والأطر المقسومة ((cont.) / Continued مقابل Continúa، انظر الجداول الأطول من الصفحة والعلامات على الإطار المقسوم) ولغة أرقام العناوين المكتوبة بالحروف (Chapter One مقابل Capítulo uno، انظر الأرقام المكتوبة بالحروف)، وهو اللغة التي يُوسَم بها ملف PDF الميسَّر الوصول. إن لم يُضبط، يفترض المحرّك 'en-us'؛ ويرجع Sandbox إلى لغة الواجهة ويضبط الحقل تحت التصميم › نظام الكتابة.
ويختار أنواع الموارد المضمَّنة أيضًا. حين لا يكون resourceTypes مضبوطًا، يرقّم buildDocument ويكتب التعليقات باستخدام defaultResourceTypes(locale)، فيعطي locale: 'de' وحده Abbildung 1.1 وTabelle 1.1. وحين لا يكون locale مضبوطًا، تحلّ محلّه لغة التقسيم بالواصلة، لأنواع الموارد ولعبارات الجداول على السواء. وقائمة resourceTypes الصريحة تغلب دائمًا. كانت الإصدارات السابقة تستخدم الأنواع الإنجليزية أيًّا كان locale ما لم تمرّر defaultResourceTypes(locale) بنفسك؛ والمستند الذي يضبط locale ويريد الاحتفاظ بالتسميات الإنجليزية يمرّر resourceTypes: defaultResourceTypes('en'). كتب Sandbox والحزم تحمل قائمتها الخاصة، فلا تتأثر.
أي وسم BCP 47 يصلح هنا كما في hyphenation.locale: فـ 'de-AT' ينال العبارات الألمانية. العبارات المضمَّنة موجودة باللغات الثماني التي يدعمها التقسيم بالواصلة، وبالصينية (بالحروف المبسّطة والتقليدية)، وباليابانية، وبالعربية؛ وأي لغة أخرى تنال العبارات الإنجليزية.
تقبل الصينية zh وzh-Hans وzh-Hant وzh-CN وzh-SG وzh-TW وzh-HK وzh-MO والصيغ الطويلة (zh-Hant-TW)، بأي حالة أحرف ومع - أو _. تتبع العبارات نظامَ الكتابة، مقروءًا بـ Intl.Locale(tag).maximize(): zh وzh-CN وzh-SG مبسّطة، وzh-TW وzh-HK وzh-MO تقليدية. أما الإعدادات الطباعية الافتراضية التي تعتمد على اللغة فتتبع المنطقة بدلًا من ذلك، كما يوصي clreq §1.2: تُعدّ CN و SG و MY البرَّ الرئيسي، و TW تايوان، و HK و MO هونغ كونغ، والوسم الذي لا منطقة فيه يُؤخذ بنظام كتابته (zh-Hant تايوان، وzh وzh-Hans البر الرئيسي). وتقبل اليابانية ja وja-JP وja-Jpan وأي وسم ja آخر (isJapaneseLanguage(tag))؛ ومنذ postext 1.16 لها عباراتها الخاصة ومنطقتها الخاصة، japan، التي تتبع إعداداتها الطباعية الافتراضية JLReq (انظر الإخراج الياباني). وجدول العبارات الذي لا مدخل ياباني فيه يعطي الإنجليزية، ولا يعطي الصينية أبدًا. تعطي localeScript(tag) وcjkRegionOf(tag) وstringsKeyOf(tag) وsameContentLocale(a, b) هذه القراءات، وتُدرج DOCUMENT_LANGUAGES اللغات ذات العبارات المضمَّنة، كلٌّ منها باسمها في لغتها (日本語 بين المداخل الصينية والعربية)، كما تعرضها قائمة «لغة المستند» في Sandbox.
| اللغة | الشكل: الاسم، الجمع، التسمية المختصرة | الجدول: الاسم، الجمع، التسمية المختصرة | استمرار الجدول: continuedSuffix، continuesMarker |
|---|---|---|---|
الإنجليزية (en) | Figure, Figures, Fig. | Table, Tables, Tab. | (cont.), Continued |
الإسبانية (es) | Figura, Figuras, Fig. | Tabla, Tablas, Tabla | (cont.), Continúa |
الفرنسية (fr) | Figure, Figures, Fig. | Tableau, Tableaux, Tabl. | (suite), À suivre |
الألمانية (de) | Abbildung, Abbildungen, Abb. | Tabelle, Tabellen, Tab. | (Forts.), Wird fortgesetzt |
الإيطالية (it) | Figura, Figure, Fig. | Tabella, Tabelle, Tab. | (segue), Continua |
البرتغالية (pt) | Figura, Figuras, Fig. | Tabela, Tabelas, Tab. | (cont.), Continua |
الكتالونية (ca) | Figura, Figures, Fig. | Taula, Taules, Taula | (cont.), Continua |
الهولندية (nl) | Figuur, Figuren, Fig. | Tabel, Tabellen, Tab. | (vervolg), Wordt vervolgd |
الصينية المبسّطة (zh-Hans، zh، zh-CN) | 图, 图, 图 | 表, 表, 表 | (续), 接下页 |
الصينية التقليدية (zh-Hant، zh-TW، zh-HK) | 圖, 圖, 圖 | 表, 表, 表 | (續), 接下頁 |
اليابانية (ja، ja-JP) | 図, 図, 図 | 表, 表, 表 | (続き), 次ページへ続く |
العربية (ar، ar-EG، ar-MA…) | شكل, أشكال, شكل | جدول, جداول, جدول | (تابع), يتبع |
بادئة التعليق هي اسم النوع (Figure 1.1.). ترقّم الأنواع الصينية داخل الفصل بواصلة، {h1}-{n} (图 1-1)؛ ومع إعدادَي التعليق labelNumberGap: '' وlabelSeparator: ' ' يصبح التعليق 图1-1 标题 (انظر نمط التعليق). ويتبع الفهرس الأبجدي في آخر الكتاب اللغةَ أيضًا: 见 و另见 قبل الإحالة، و符号 و数字 فوق الرموز والأرقام في المبسّطة؛ و見 و另見 و符號 و數字 في التقليدية. وترقّم اليابانية أنواعها بالطريقة نفسها وتجعل تعليقاتها 図1-1 題 دون هذين الإعدادين، وتكتب الإحالات على هيئة 第3章 و2.3節 و12ページ، وتعنون قائمة المراجع بـ 参考文献، ويطبع فهرسها 記号 و数字 فوق الرموز والأرقام ويكتب إحالاته بسهم، →夏目漱石 لـ انظر و→夏目漱石、森鷗外も見よ بعد الصفحات لـ انظر أيضًا، والتسميات قائمة. وترقّم العربية أنواعها بالطريقة نفسها، {h1}-{n} (شكل 2-3)، وتكتب الإحالات على هيئة «الفصل 3» و«القسم 2-1» و«ص 12»، وتعنون قائمة المراجع بـ «المراجع»، ويطبع فهرسها «انظر» / «انظر أيضًا» و«رموز» و«أرقام»، بالفاصلة والفاصلة المنقوطة العربيتين (، ؛).
يعلن المستند الصيني أو الياباني أو الكوري لغته في مخرجات HTML (lang على الجذر .pt-doc، مع الإبقاء على zh-Hant-TW كاملًا) وعلى اللوحة التي يرسمها (ctx.lang، في Chrome 136 وما بعده)، فيرسم المتصفح أشكال الحروف الخاصة بالمنطقة: يوحّد Unicode محارف الهان، ونقطة الترميز الواحدة تبدو مختلفة في خط تايواني وفي خط ياباني. ومنذ postext 1.30 تفعل المستندات الأخرى ذلك أيضًا، باللغة التي يُشكَّل بها نصها (bodyText.shapingLanguage: 'document'، وهي القيمة الافتراضية)؛ أما مع 'host' فلا تحمل المستندات الأخرى lang، وترسم كل لوحة بلغة الصفحة التي تستضيفها. ويعلن ملف PDF القيمة /Lang من locale لكل مستند، موسومًا كان أو غير موسوم، مع نظام كتابته ومنطقته. والمستند المكتوب بلغة تُكتب من اليمين إلى اليسار (العربية والفارسية والأردية والعبرية…) يعلن لغته أيضًا: أشكال الحروف الخاصة باللغة في الخط (locl) والخط البديل يتبعانها.
const config: PostextConfig = {
locale: 'es',
bodyText: { textAlign: 'justify', hyphenation: { enabled: true } }, // hyphenates in Spanish
};#أرقام المستند
يضبط numerals في المستوى الأعلى أرقامَ كل عدد يكتبه المحرّك: أرقام الصفحات وتسميات الصفحات في جدول المحتويات والفهرس الأبجدي والإحالات إلى الصفحات؛ وأرقام القوائم المرقّمة والحواشي السفلية؛ وعدّادات العناوين والفصول، و{chapterNumber}؛ و{h1} و{n} في رقم الشكل وفي الإحالة إليه؛ و{totalPages} و{bookTotalPages} و{numberDecimal}. القيمة 'latn' تكتب 0–9، و'arab' الأرقام الهندية العربية ٠–٩، و'arabext' الأرقام الفارسية ۰–۹. لا يتغيّر إلا التنسيق العشري — decimal، أو arabic في القوائم، أو إعداد متروك على قيمته الافتراضية — فالتنسيق الذي يسمّيه المؤلف يُطبع كما سُمّي: lower-roman يبقى i, ii, iii، وarabic-indic في مستند لاتيني يظل يكتب ١, ٢, ٣. ولا يُعاد أبدًا كتابة نص المستند.
القيمة الافتراضية، 'auto'، تأخذ أرقام locale (defaultNumeralsFor(tag)): 'arab' للعربية بلا منطقة أو مع أي منطقة خارج المغرب العربي (ar، ar-EG، ar-SA، ar-AE…)، و'latn' لـ ar-MA وar-DZ وar-TN وar-LY وar-MR وar-EH، و'arabext' للفارسية (fa) والبشتوية (ps) وأردية الهند (ur-IN)، و'latn' لكل ما سوى ذلك، ومنه أردية باكستان. تعطي CLDR القيمة latn للوسم ar المجرّد وللوسم ar-AE؛ لكن الكتب العربية في المشرق والخليج تطبع ٠–٩، وهذا ما يتبعه Postext. والوسم الذي يسمّي أرقامه يحتفظ بها: ar-MA-u-nu-arab. والصفحة المرقّمة بأرقام المستند تسجّل arabic-indic أو persian في pageNumberFormat الخاص بها، فتعرض تسميات صفحات PDF الأرقام نفسها. والقيمة غير المعروفة تتبع اللغة ويُبلَّغ عنها بـ unknownNumerals.
الأعداد التي يكتبها المؤلف تُقرأ بأي من الأنظمة الثلاثة: بند القائمة ٣. يبدأ من 3، و{startAt=٥} و:::numbering{startAt=٥} و:::space{lines=٢} و:::part{number="٣"} (من أجل {numberDecimal}) تقرأ القيمة.
const config: PostextConfig = { locale: 'ar' }; // ١، ٢، ٣
const maghreb: PostextConfig = { locale: 'ar-MA' }; // 1, 2, 3
const forced: PostextConfig = { locale: 'ar', numerals: 'latn' }; // 1, 2, 3#اتجاه النص
يضبط direction في المستوى الأعلى الاتجاه الأساسي للمستند: 'ltr' أو 'rtl' أو 'auto' (القيمة الافتراضية)، وهي 'rtl' حين يكون نظام الكتابة في locale مكتوبًا من اليمين إلى اليسار (العربية والفارسية والأردية والعبرية والسريانية والثانا وإنكو وأدلام…، ويقرؤه directionOf(tag))، و'ltr' في غير ذلك. يُخرَج المستند المكتوب من اليمين إلى اليسار في إطار معكوس: تبدأ أسطره من اليمين، وعموده الأول هو الأيمن، وتقف مسافاته البادئة وعلامات قوائمه وعناصره العائمة وحواشيه السفلية وأطره على اليمين، وpage.binding: 'auto' يجلّده من اليمين. ولا تحمل الإعدادات المحلولة direction: 'rtl' إلا لمثل هذا المستند، فيُحَلّ المستند المكتوب من اليسار إلى اليمين كما كان من قبل. والقيمة غير المعروفة تُقرأ 'auto' ويُبلَّغ عنها بـ unknownConfigValue. وترتّب خوارزمية Unicode ثنائية الاتجاه (UAX #9) مقاطع كل سطر في أي من الاتجاهين: فالاقتباس العربي في كتاب إنجليزي يُقرأ من اليمين إلى اليسار في موضعه.
داخل المستند، يأخذ العنوان أو الحاوية ::: القيمة {dir=ltr} أو {dir=rtl}، ويعزل :ltr[…] و:rtl[…] المضمَّنان مقطعًا من النص (انظر اتجاه النص في الترميز)؛ ويأخذ مورد الجدول table.direction. والكتلة المضبوطة بعكس اتجاه المستند تحتفظ بجانب بدايتها الخاص: تنتقل مسافتها البادئة وعلامات قوائمها والطرف المحاذى لسطرها الأخير إلى الجانب الذي يبدأ منه نصها.
الإعداد الذي يسمّي جانبًا يعني جانبًا من النص أو من تدفّق المتن، لا من الورقة أبدًا، فالتصميم المُعدّ لكتاب إنجليزي يعمل حين يُحوَّل الكتاب إلى العربية. وتُقبل 'start' و'end' اسمين صريحين:
| الإعداد | 'left' / 'right' | 'start' / 'end' |
|---|---|---|
textAlign للمتن والعناوين وأنماط الفقرات والأجزاء والحواشي السفلية ومتون الأطر؛ وalign للتعليق ولملاحظة التعليق | جانبا النص: 'left' هو الجانب الذي يبدأ منه السطر، أي يمين الفقرة العربية، حيث يذهب السطر الأخير من الفقرة المضبوطة. | مرادفات لـ 'left' و'right'. تحمل الإعدادات المحلولة 'left' / 'right'؛ وتحتفظ الإعدادات المحفوظة بما كُتب. |
align لخلية الجدول | جانبا نص الخلية، مقروءين باتجاه الجدول (table.direction). | مرادفات، مقروءة باتجاه الجدول. |
placement.align (العناصر العائمة، الأشكال الضيقة) | جانبا تدفّق المتن: في كتاب مكتوب من اليمين إلى اليسار، 'left' هو يمين الورقة. | مرادفات. |
stripe.side وicon.cornerSide وlabelTab.position للإطار ('top-start'، 'top-end') | جانبا تدفّق المتن، وهما نفسهما لكل إطار في الصفحة. | اتجاه الإطار الخاص (:::callout{dir=ltr} في كتاب عربي يبدأ من يسار الورقة). |
| خانات رأس الصفحة وتذييلها؛ وعناصر التصميم المثبّتة إلى الورقة | جانبا الورقة. | للعناصر النصية فقط: بداية direction الخاص بالعنصر ونهايته. |
يحتفظ placement.rotate بمعناه المادي في الصفحة المعكوسة: الشكل المُدار باتجاه عقارب الساعة يُدار باتجاه عقارب الساعة على الورقة. والمضيف الذي يقرأ الإخراج يجد الإطار المعكوس في كل صفحة (VDTPage.flow مع direction: 'rtl'، وpageIsMirrored(page)) والترتيب البصري لمقاطع كل سطر في VDTLine.order؛ وتحوّل flowToPage وpageToFlow بين التدفّق والورقة. انظر الإخراج العربي.
const arabic: PostextConfig = { locale: 'ar' }; // right to left, bound on the right
const english: PostextConfig = { locale: 'en', direction: 'rtl' }; // forced; rarely what you want#اللغات وأنظمة الكتابة
ينضّد Postext أنظمة الكتابة الأبجدية المكتوبة من اليسار إلى اليمين، والصينية واليابانية أفقيًا عبر الصفحة وعموديًا نزولًا فيها. يشرح الإخراج الصيني والإخراج الياباني كيف تُنضَّدان وأيّ الإعدادات تتحكم فيهما؛ والمفاتيح تحت طباعة شرق آسيا والكتابة العمودية والتجليد. ما يناله كل نظام كتابة:
- الصينية يُنضّدها مُنضِّد CJK حين تحوي الفقرة محارف CJK أكثر من المسافات بين الكلمات: تنكسر أسطرها بين المحارف وفق قواعد بداية السطر ونهايته في
cjk.lineBreak(لا سطر يبدأ بـ 。、」 أو ー، ولا سطر ينتهي بـ 「 أو ()، وتُبقي —— و…… والعدد مع علاماته والكلمة اللاتينية كاملةً، والسطر المضبوط تُوزَّع مسافاته بين محارفه حتى يبلغ عرض السطر. وتتبع عروضُ علامات الترقيم، وعلامات الترقيم المعلّقة، والمسافة بين الهان واللاتينية، وشبكة المحارف، ونقاط التوكيد، وعلامات أسماء الأعلام وعناوين الكتب، وحواشي الروبي (ruby) والواريتشو (warichu) منطقةَlocale، أفقيًا أو عموديًا (layout.writingMode: 'vertical-rl'). والفقرة اللاتينية التي تقتبس بضع كلمات CJK تحتفظ بكسر الأسطر الأمثل وقد تنكسر بجوارها؛ أما قوس CJK أو النقطة الوسطى أو العلامة كاملة العرض المقتبسة في نص لاتيني (〈h〉، %) فلا تغيّر شيئًا. - اليابانية تمرّ عبر المُنضِّد نفسه بقواعد خاصة بها منذ postext 1.16، هي قواعد وثيقة W3C Requirements for Japanese Text Layout (JLReq) والمعيار JIS X 4051: فالوسم
jaيعطي المنطقةjapan، وقيمها التلقائية تضبط مستويات الكينسوكو في JLReq (الكانا الصغيرة و ー لا تفتتح سطرًا أبدًا)، وعلامات ترقيم كاملة العرض مع ضغط الأزواج، وem بعد ?!، والقوس الذي يفتتح الفقرة في النصف الثاني من المسافة البادئة، وعلامات توكيد سمسمية فوق النص، وعناوين كتب بين 『』، وفوريغانا موزّعة بنسبة 1:2:1، وعدّادات يابانية، وحواشي، وفهرسًا مرتّبًا بحسب النطق. وكانت الإصدارات السابقة تنضّد اليابانية بالإعدادات الافتراضية لصينية البر الرئيسي. - الكورية تمرّ عبر المُنضِّد نفسه وتُنضَّد بلا تقسيم بالواصلة، لكن بالإعدادات الافتراضية لصينية البر الرئيسي: قواعدها الخاصة (KLREQ) غير مطبّقة. والنص الكوري ينكسر بين المقاطع كما ينكسر عند مسافاته.
- العربية وأنظمة الكتابة الأخرى من اليمين إلى اليسار (الفارسية والأردية والعبرية…) تُنضَّد من اليمين إلى اليسار: يشرح الإخراج العربي الكيفية. يأتي
directionالخاص بالمستند من نظام الكتابة فيlocale، وترتّب خوارزمية Unicode ثنائية الاتجاه الكلماتِ اللاتينية والأعداد داخل كل سطر، ويُجلَّد الكتاب من اليمين وعموده الأول هو الأيمن، وكل عدد يكتبه المحرّك يأخذ أرقام المنطقة. والكلمة التي تحوي حرفًا من الحرف العربي لا تُقسَّم بالواصلة ولا تُباعَد حروفها ولا تُقطع أبدًا، والسطر العربي المضبوط يُمدَّد عند مسافاته وبالكشيدات. علامات التشكيل والتوكيد والحواشي السفلية وعبارات العربية مشروحة تحت النص العربي. وتنال الفارسية والأردية والعبرية الاتجاه والأرقام وقواعد الكلمة الكاملة، لكن بلا عبارات مضمَّنة خاصة بها.
تُشحن أنماط التقسيم بالواصلة لثماني لغات (en-us، es، fr، de، it، pt، ca، nl)؛ وأنواع الموارد وعبارات الاستمرار المضمَّنة موجودة بهذه الثماني وبالصينية واليابانية والعربية. تُنضَّد الصينية واليابانية والكورية واللغات المكتوبة من اليمين إلى اليسار بلا تقسيم بالواصلة. وأي لغة أخرى تُقسَّم بأنماط الإنجليزية الأمريكية، مع تحذير في وحدة التحكم، وتنال العبارات الإنجليزية. لمثل هذا المستند، اضبط hyphenation.enabled: false ومرّر resourceTypes وعبارات الاستمرار في tableStyle بلغته.
#النص العربي
تخدم هذه الإعدادات النص المكتوب بالحرف العربي؛ ولا يغيّر أيٌّ منها مستندًا مكتوبًا بنظام كتابة آخر. يشرحها الإخراج العربي مع سائر ما في الكتاب العربي: الاتجاه والتجليد والأرقام والشعر وجدول المحتويات والفهرس.
- علامات التشكيل وتباعد الأسطر. علامات التشكيل في النص المشكول (الفتحة والكسرة والشدة والتنوين والألف الخنجرية والعلامات القرآنية) تتراكب فوق الحروف وتحتها، داخل تباعد الأسطر، الذي لا يزداد من أجلها أبدًا. كل سطر يحوي علامات يسجّل مدى وصول حبرها (
VDTLine.markInk)، ويشمل قصّ العمود في المُخرِجات علاماتِ السطرين الأول والأخير من العمود. وحين تلتقي علامة فوق كلمة بالحروف أو العلامات المتدلّية تحت الكلمة التي فوقها، يبلّغ البناء عن الفقرة (arabicMarksExceedLeading، في لوحة «الفحوص» في Sandbox). ولا تُقارَن إلا الكلمات الواقعة بعضها فوق بعض. يحتاج النص المشكول جزئيًا إلى نحو 1.7–1.85 em منlineHeight، والشعر المشكول كاملًا إلى 1.9–2.1 em. - التوكيد. لا مائل في الحرف العربي، ففي المستند الذي تُكتب لغته
localeبالحرف العربي يُنضَّد*…*بالعريض افتراضيًا (bodyText.emphasis: 'auto'). القيمة'color'تنضّده قائمًا بلونitalicColor، و'overline'ترسم خطًا فوق الكلمات، وهو الخط الفوقي في الكتب العربية. يصل الإعداد إلى كل نص منضَّد بوجوه خط المتن: الفقرات والقوائم والاقتباسات الكتلية وأنماط الفقرات ومتون الأطر والملاحظات والعناوين. أما تعليقات الأشكال وخلايا الجداول وجدول المحتويات والفهرس فتحتفظ بإعدادات المائل الخاصة بها. ومهما كان الاختيار، لا يُميل المحرّك الحروف العربية أبدًا: الكلمات العربية في مقطع منضَّد بالمائل تقف قائمة، وكلماته اللاتينية تحتفظ بميلها. والاقتباس الكتلي قائم افتراضيًا في مثل هذا المستند. - التشكيل.
bodyText.tashkil: 'strip'يحذف علامات التشكيل والعلامات القرآنية من النص الذي ينضّده الإخراج، لإصدار غير مشكول يُصنع من مصدر مشكول: الفتحة والضمة والكسرة وتنوينها، والسكون، والشدة، والألف الخنجرية (هٰذا تصبح هذا) والعلامات U+0656–U+065F و U+06D6–U+06ED. والقيمة'strip-vowels'تُبقي الشدة، كما تطبعها معظم الكتب الحديثة. وتبقى الهمزة والمدّة (أ إ آ حروف، حتى حين تُكتب بعلامات مركّبة). يحتفظ المصدر بعلاماته؛ وتُنضَّد الأسطر والعناوين وجدول المحتويات بدونها، ويظل كل محرف منضَّد مرتبطًا بموضعه في المصدر. - الحواشي السفلية.
footnotes.markerTemplate: '({n})'يكتب العلامات «(١)» بأرقام المستند، وnumbering: 'page'يعيد ترقيمها في كل صفحة، وnoteNumberPosition: 'inline'ينضّد رقم الحاشية نفسها على السطر. ويقف خط الفصل وأرقام الحواشي في بداية العمود، على اليمين في الكتاب المكتوب من اليمين إلى اليسار. - الكلمات الكاملة. الكلمة التي تحوي حرفًا من الحرف العربي لا تُقسَّم بالواصلة ولا تُقطع ولا تُباعَد حروفها أبدًا، في كتاب عربي أو مقتبسةً في كتاب آخر. والنمط الذي يضبط
letterSpacingعلى نص عربي يُبلَّغ عنه (joiningScriptLetterSpacing)، والكلمة الأعرض من سطرها تفيض عنه ويُبلَّغ عنها (unbreakableWordOverflow). انظر الإخراج العربي. - الكشيدة والشعر. يُمدَّد السطر العربي المضبوط بالكشيدات كما يُمدَّد عند مسافاته (
bodyText.kashida، انظر الكشيدة في النص العربي)، وتُنضَّد القصيدة العمودية بيتًا في كل سطر، في شطرين متساويين في العرض، مع:::verse(انظر:::verse). - الفهرس. الفهرس بالعربية يُرتَّب ترتيبًا ألفبائيًا ويتجاهل أداة التعريف «ال» (
index.ignoreArticle) وعلامات التشكيل وكراسي الهمزة؛ انظر الفهرس الأبجدي في آخر الكتاب.