Calendar Generator - شرح عن الأداة

Calendar Generator

الإصدار 0.2.0

Calendar Generator هي لوحة UXP لبرنامج Adobe InDesign تُنشئ مستندات مُرقّمة بالكامل ومرتبطة بالتواريخ — تقاويم حائط، مفكرات، يوميات — انطلاقًا من نطاق تاريخ، ومجموعة من الأطر المُسماة في القالب، و(اختياريًا) بيانات CSV وملفات PDF موضوعة. يصف هذا المستند كل إعداد في اللوحة، وكيفية تفسير محرك التوليد لهذه الإعدادات، ونموذج البيانات الأساسي.

سيتوفر قريباً فيديو تعليمي يشرح الخطوات بالتفصيل. ترقبوا ذلك!


1. كيف يترابط كل شيء

على مستوى عام، يقوم تشغيل توليد واحد بما يلي:

  1. بناء قائمة بأيام التقويم من نطاق التاريخ الذي حددته (مع مشتقات هجرية ويوليانية وأسبوع ISO لكل يوم).
  2. تجميع تلك الأيام في صفحات (أو انتشارات متعددة الأيام)، مع إدراج صفحات فارغة للمحاذاة وصفحات إدراج عند حدود الأشهر وفق الإعدادات.
  3. لكل صفحة، اختيار صفحة أصل (Parent/Master) باستخدام ترتيب أولوية (بداية الشهر ← عطلة نهاية الأسبوع ← فردي/زوجي ← الافتراضي).
  4. تطبيق تلك الصفحة الأصل على الصفحة، ثم المرور على كل عنصر مُسمّى فيها وتجاوزه (override) إلى الصفحة، مع استبدال العناصر النائبة {{variable}}، وملء جداول التقويم المصغّر، ووضع ملفات CSV/PDF.
  5. وسم كل صفحة وعنصر مُولَّد ببيانات وصفية مخفية بحيث تستطيع عملية إعادة التوليد لاحقًا العثور على هذا التشغيل واستبداله بأمان — دون المساس بأي شيء آخر في مستندك.

كل ما تضبطه في اللوحة هو ببساطة مُدخل لهذا المسار.


2. تبويب إعداد التقويم (Calendar Setup)

نطاق التاريخ

  • من / إلى — بصيغة YYYY-MM-DD، شاملة كلا الطرفين.
  • عرض اليوم الأول من كل شهر فقط — يختصر النطاق إلى إدخال واحد لكل شهر (اليوم 1 فقط). مفيد لتخطيطات نظرة عامة شهرية بدلًا من الصفحات اليومية.

عدد الأيام في الانتشار (Number of days in Spread)

يتحكم في عدد الأيام التقويمية المتتالية التي تُجمَّع في وحدة منطقية واحدة:

  • 1 (الافتراضي) — النمط الكلاسيكي بيوم واحد لكل صفحة.
  • 2+ — تشترك هذه العدد من الأيام المتتالية في انتشار (spread) واحد في InDesign. لا ينتج عن هذا تجميع فعلي بين صفحة يسرى ويمنى إلا عندما يستخدم المستند خاصية الصفحات المتقابلة (Facing Pages)؛ وإلا فإن اللوحة تُحذّر بأن جميع الأيام المرتبة يجب أن تُصمَّم على صفحة فعلية واحدة.
  • يُشار إلى كل يوم داخل المجموعة بواسطة ترتيب اليوم (Day order) (من 1 إلى N)، والذي يُطابق لاحقات التسمية/العنصر النائب: الترتيب 1 بلا لاحقة (date)، والترتيب 2 فما فوق يضيف #N (مثل date#2، date#3).
  • تستخدم صفحات إدراج الشهر (انظر أدناه) دائمًا يومًا واحدًا لكل صفحة — الترتيب 1 لصفحة "قبل"، واليوم الأخير من الشهر لصفحة "بعد" — حتى عندما يستخدم التقويم الرئيسي انتشارات متعددة الأيام.

بدء الشهر في...

أي صفحة / صفحة فردية / صفحة زوجية. عند ضبط هذا الخيار، يُدرج المولّد صفحة فارغة واحدة مباشرة قبل اليوم الأول من الشهر كلما استدعت الحاجة إجبار ذلك اليوم على تعادلية الصفحة المطلوبة. يُتجاهل هذا الإعداد بمجرد دمج عدة أيام لكل انتشار في انتشارات ذات صفحتين — وفي هذه الحالة، يتحكم موضع تسمية ترتيب اليوم على انتشار الصفحة الأصل بشكل كامل في الصفحة الفعلية التي يقع فيها بدء الشهر.

أيام عطلة نهاية الأسبوع

خانات اختيار لأي مجموعة من الأيام. تُغذّي هذه ما يلي:

  • متغيّر {{is_weekend}} (بقيمة "true"/"false" لكل يوم).
  • قاعدة الصفحة الأصل الخاصة بعطلة نهاية الأسبوع (انظر القسم 9).

التوليد (Generation)

  • إلحاق تقويم جديد (Append) — يضيف صفحات جديدة دائمًا.
  • إعادة توليد التقويم (Regenerate) — يبحث عن أحدث تشغيل مُولَّد ("مُدار") في المستند ويستبدله في مكانه، مستخدمًا نطاق الصفحات نفسه. تتطلب إعادة التوليد أن تظل صفحات التشغيل السابق متجاورة (وفي وضع الانتشار، أن تشغل انتشارات كاملة)؛ وإلا فإنها ترفض وتطلب منك استخدام الإلحاق.

إدراج متغيّر

هذه هي واجهة اللوحة لبناء قالبك:

  • اختر إدخالًا من القائمة المنسدلة — متغيرات تاريخ مدمجة، أهداف مصادر PDF، أو أهداف ملفات CSV. بالنسبة إلى الانتشارات متعددة الأيام، يظهر محدد ترتيب اليوم بحيث يمكنك استهداف date#2 أو date#3 إلخ.
  • مع وجود مؤشر النص داخل إطار نصي: يضع الإدراج عنصرًا نائبًا حرفيًا {{variable}} عند المؤشر، ويُسمَّى الإطار تلقائيًا calendar_mix (يمكن للإطار مزج عدة عناصر نائبة ونص ثابت بهذه الطريقة).
  • مع تحديد إطار أو أكثر: يُعيّن الإدراج تسمية Script Label مباشرة للإطار(ات) (يجب أن تكون جميع الكائنات المحددة من النوع المقبول ذاته — أطر نصية للنص/متغيرات التقويم المصغّر، أطر رسومية لأهداف PDF/ملف CSV).
  • لا يمكن تعيين تسميات التقويم المصغّر إلا لـ إطار نصي محدد، ولا يمكن أبدًا إدراجها كعنصر نائب وسط النص.
  • يعرض سطر حالة التحديد أدناه تسمية (تسميات) Script Label لما هو محدد حاليًا، ويتحدث مباشرة مع تغيّر تحديدك في InDesign.

سلوك التشغيل (Run behavior)

  • قابل للإلغاء (Cancellable) — يتنازل التشغيل عن التحكم بين عمليات الصفحة/العنصر بحيث يظل زر الإلغاء مستجيبًا، ويعرض شريط تقدم مباشرًا. يسجّل InDesign تراجعًا (Undo) خطوة بخطوة بشكل طبيعي.
  • تراجع بخطوة واحدة (Single-step Undo) — يُشغّل التوليد بأكمله داخل معاملة doScript واحدة (UndoModes.ENTIRE_SCRIPT)، فيختصره إلى إدخال تراجع واحد. لا يمكن للوحة الاستجابة للإلغاء أثناء تشغيل هذه المعاملة، لذا لا يتوفر شريط تقدم/زر إلغاء.

تشغيل الفحص المسبق (Run preflight)

يتحقق من صحة الإعداد الحالي دون توليد أي شيء. انظر القسم 12 لمعرفة ما يفحصه.


3. تبويب التوطين (Localization) — الترجمات المخصصة

تُعرّف كل ترجمة تُنشئها 12 اسمًا للأشهر و7 أسماء للأيام، وتُظهر تلقائيًا متغيرين مُسميين وفق اللاحقة (suffix) الخاصة بها (معرّف مبسّط مشتق من اسم الترجمة ما لم تحدده صراحة):

{{month_<suffix>}}   {{day_<suffix>}}

تُحل هذه القيم يوميًا تمامًا مثل المتغيرات المدمجة {{month}} / {{day}}. الإدخالات الفارغة للأشهر/الأيام مسموح بها لكنها تُعلَّم كتحذيرات في الفحص المسبق؛ أما اللاحقة المفقودة أو المكررة (المتعارضة مع ترجمة أخرى أو اسم متغيّر مدمج) فهي خطأ حاسم.

الترجمات المخصصة قابلة للاختيار أيضًا كـ لغة التقويم المصغّر (انظر القسم 5)، مما يتيح عرض التقويم المصغّر بالكامل بلغة تُعرّفها بنفسك.


4. تبويب البيانات (Data) — CSV

  • اختيار CSV يحلّل الملف (يُكتشف الفاصل تلقائيًا بين الفاصلة والفاصلة المنقوطة والتبويب عبر أخذ عينة من السطر الأول غير الفارغ) ويبني نموذج أعمدة.
  • عمود تاريخ التقويم — العمود الذي تُفسَّر قيمته كتاريخ لكل صف. صيغ الإدخال المقبولة: YYYY-MM-DD، أو DD/MM/YYYY، أو أي شيء يمكن لكائن Date تفسيره كحل احتياطي. تُخمّن اللوحة اختيارًا بدئيًا بالبحث عن عمود باسم date أو calendar_date أو date_iso أو day_date، وإلا فتلجأ إلى أول عمود لا يبدأ بـ @.
  • المتغيرات المكتشَفة — يصبح كل عمود لا يبدأ بـ @ متغيّرًا باسم custom_<العنوان_المُطبَّع>، قابلًا للاستخدام مثل أي متغيّر مدمج: {{custom_event}}.
  • أعمدة وضع الملفات — أي عنوان يبدأ بـ @ (مثل @photo) يُعامَل كعمود وضع ملفات بدلًا من متغيّر نصي. قيم خلاياه هي مسارات ملفات (مطلقة، أو نسبية إلى موقع ملف CSV نفسه) تُوضع في إطار رسومي يحمل تسمية Script Label المطابقة لما بعد @ (هنا، photo). لكل عمود ملفات وضع ملاءمة (fitting) خاص به: ملاءمة تناسبية، تعبئة تناسبية، ملاءمة المحتوى للإطار، توسيط بلا تحجيم، أو استخدام خيارات ملاءمة الإطار.
  • لا يمكن أن تنتهي تسمية وضع الملفات بلاحقة ترتيب يوم محجوزة على شكل #رقم (هذه الصيغة محجوزة للانتشارات متعددة الأيام)، ولا يمكن لعمودَي @ استهداف تسمية الإطار نفسها.
  • تُتجاهل الصفوف التي لا تُفسَّر خلية التاريخ فيها بصمت (وتُحتسب في سطر الإحصاءات)؛ كما يمكن للصفوف ذات تاريخ صالح لكنه فارغ/مكرر عبر الصفوف أن تُنتج تحذيرًا في الفحص المسبق.

5. تبويب التقويم المصغّر (Mini Month)

مولّد جدول تقويم مصغّر مستقل بذاته، يُشار إليه في القالب عبر التسميات mini_month، أو mini_month:-1، أو mini_month:+1، أو أي إزاحة أخرى بصيغة mini_month:±N (N بين -120 و120 شهرًا من تاريخ الصفحة نفسها).

التخطيط

  • الأعمدة / خانات التاريخ: 7 أو 14 أو 21 أو 28 أو 31.
  • صفوف التاريخ المفضّلة: تلقائي، أو عدد ثابت من 1 إلى 6. يحسب "تلقائي" الحد الأدنى من الصفوف اللازمة لاحتواء الشهر، مع مراعاة الإعدادات أدناه.
  • محاذاة اليوم 1 مع شبكة أيام الأسبوع — عند التفعيل: السلوك القياسي لشبكة الشهر، حيث يقع اليوم 1 تحت يوم أسبوعه الفعلي. عند الإيقاف: شريط تسلسلي يبدأ مباشرة بالتاريخ 1 (مثال: 31 عمودًا × صف واحد = شريط شهري متواصل واحد).
  • أول يوم في الأسبوع — أي يوم، يُستخدم لمحاذاة الشبكة.
  • عرض تواريخ الشهر المجاور — يملأ الخلايا الفارغة البادئة/الختامية بتواريخ الشهر السابق/التالي بدلًا من تركها فارغة.
  • ضغط شهر من 6 أسابيع إلى 5 صفوف عند الإمكان — بالنسبة إلى تخطيط مُحاذى للأسبوع من 7 أعمدة و5 صفوف مطلوبة، حيث يحتاج الشهر فعليًا إلى 6 أسابيع، تُطوى تواريخ الأسبوع السادس داخل خلايا أيام الأسبوع غير المستخدمة في بداية الصف الأول بدلًا من التوسّع إلى صف سادس. يُعطَّل هذا تلقائيًا كلما عُرضت تواريخ الشهر المجاور (تلك الخلايا مطلوبة عندئذ لتواريخ الشهر المجاور بدلًا من ذلك)، وهو الوسيلة الوحيدة لمنع التوسّع التلقائي إلى صف سادس.

المحتوى

  • مفتاح عنوان الشهر، مع خيارات تنسيق: January 2027، January، Jan 2027، Jan، 01/2027.
  • أسماء أيام الأسبوع: كامل، مختصر، ضيّق (الحرف الأول)، أو مخفي.
  • اللغة/الترجمة: الإنجليزية، الفرنسية، العربية، أو أي ترجمة مخصصة أنشأتها (القسم 3) — تعرض كل منها أسماء الأشهر/الأيام الخاصة بها داخل الجدول.
  • تمييز تاريخ الصفحة المُولَّدة — يُظهر الخلية المطابقة لليوم التقويمي للصفحة نفسها (له معنى فقط بالنسبة إلى تسمية mini_month بإزاحة 0).
  • تمييز أيام عطلة نهاية الأسبوع المُعدَّة — يستخدم مجموعة أيام عطلة نهاية الأسبوع ذاتها من تبويب إعداد التقويم.
  • عرض أرقام الأسابيع: يضيف عمود "Wk" بادئًا قبل كل كتلة من 7 أيام. متاح فقط عندما يكون التخطيط مُحاذى للأسبوع وعدد الأعمدة من مضاعفات 7 (7/14/21/28) — لا يمكن لشريط من 31 عمودًا أو تخطيط غير مُحاذى عرضها.
  • نظام رقم الأسبوع:
    • ISO 8601 — تبدأ الأسابيع يوم الاثنين؛ الأسبوع 1 هو أول أسبوع يحتوي على 4 أيام أو أكثر من السنة الجديدة.
    • مبني على الأحد — تبدأ الأسابيع يوم الأحد؛ الأسبوع الذي يحتوي على 1 يناير هو الأسبوع 1.
    • مخصص — تبدأ الأسابيع بحسب إعداد "أول يوم في الأسبوع" الخاص بالتقويم المصغّر نفسه، مع حد أدنى قابل للتهيئة لعدد أيام أول أسبوع (من 1 إلى 7).

ملفات تعريف حسب الصفحة الأصل (Parent/Master)

الإعدادات أعلاه هي تكوين التقويم المصغّر الافتراضي. يمكنك حفظ لقطة مميزة لكل صفحة أصل ("حفظ الإعدادات الحالية للصفحة الأصل")، بحيث يمكن لقوالب مختلفة (مثل صفحة غلاف مقابل صفحة يومية) عرض تقويمها المصغّر بشكل مختلف دون تعارض. أثناء التوليد، تبحث الصفحة عن ملف تعريف الصفحة الأصل المُطبَّقة عليها أولًا، وتعود إلى الإعدادات الافتراضية إذا لم يوجد أي ملف تعريف.

تُنشأ أنماط جدول/خلية/فقرة التقويم المصغّر تلقائيًا وتكون محدّدة النطاق لكل صفحة أصل (يُضاف تجزئة (hash) داخلية لاسم الصفحة الأصل إلى كل اسم نمط)، بحيث يحصل التقويم المصغّر لكل صفحة أصل على أنماط قابلة للتحرير بشكل مستقل.


6. تبويب الأصول (Assets) — مصادر PDF

يُعرّف كل مصدر PDF ما يلي:

  • الاسم — تسمية لمرجعيتك الخاصة.
  • تسمية Script Label لإطار الهدف — تسمية الإطار الرسومي الذي يوضع فيه هذا المصدر (يُعيَّن عبر سير عمل "إدراج / تسمية التحديد" ذاته في تبويب إعداد التقويم، باختيار مصدر PDF هذا كهدف المتغيّر).
  • وضع الوضع (Placement mode):
    • صفحة PDF حسب يوم السنة التقويمي — يضع صفحة PDF رقم (يوم-السنة + الإزاحة) لكل يوم.
    • صفحة PDF واحدة لكل شهر — تكرار يوميًا — يضع صفحة PDF رقم (رقم الشهر + 1 + الإزاحة) في كل يوم من ذلك الشهر.
    • صفحة PDF واحدة لكل شهر — اليوم الأول فقط — رقم الصفحة نفسه، لكن يُوضع فقط في اليوم الأول من الشهر.
  • إزاحة صفحة PDF — عدد صحيح (موجب أو سالب) يُضاف إلى رقم الصفحة المحسوب.
  • الملاءمة (Fitting) — نفس الخيارات الخمسة المتاحة في أعمدة ملفات CSV.

لا يمكن لمصدرَي PDF مشاركة تسمية إطار هدف نفسها، ولا يمكن لتسمية هدف PDF أن تتعارض مع تسمية @file في CSV. يُبلغ الفحص المسبق عن ملفات PDF المفقودة/غير المتاحة؛ ويمكنك إعادة اختيار الملف في أي وقت من صف ذلك المصدر.


7. تبويب التخطيط والقواعد (Layout & Rules)

الصفحة الأصل الافتراضية للتقويم

الصفحة الأصل الاحتياطية المُطبَّقة على أي صفحة لا تطابق قاعدة أكثر تحديدًا.

صفحات قبل / بعد الشهر

  • الصفحات قبل الشهر (0 يُعطّل الخيار) — تُدرج مباشرة قبل صفحة اليوم الأول من الشهر، باستخدام صفحة أصل مخصصة لها. تتلقى كل صفحة من هذه الصفحات وتعرض بيانات اليوم الأول.
  • الصفحات بعد الشهر (0 يُعطّل الخيار) — تُدرج مباشرة بعد اليوم الأخير من الشهر، باستخدام صفحة أصل مخصصة لها، وتعرض بيانات اليوم الأخير.
  • مع وجود عدة أيام لكل انتشار، يحافظ تفعيل هذه الخيارات على تجميع الأيام مُحاذى لحدود الأشهر — قد ينتهي الأمر بآخر انتشار في الشهر بعدد أيام أقل من العدد المُهيّأ لكل انتشار حتى تقع صفحات الإدراج عند الحدود بدقة.
  • تتتبع إعادة التوليد هذه الصفحات المُدرجة بأمان وتستبدلها مع بقية التشغيل.

قواعد الصفحة الأصل

ترتيب الأولوية المستخدم لاختيار صفحة أصل لكل صفحة تقويم (انظر القسم 9 للخوارزمية الدقيقة):

  1. صفحات إدراج الشهر ← صفحتها الأصل المخصصة قبل/بعد.
  2. اليوم الأول من الشهر ← الصفحة الأصل الخاصة باليوم الأول من الشهر (إن وُجدت).
  3. عطلة نهاية الأسبوع ← الصفحة الأصل الخاصة بعطلة نهاية الأسبوع (إن وُجدت). يُفحص فقط ترتيب اليوم 1 من الانتشار، لأن صفحة InDesign واحدة لا يمكن أن تحمل سوى صفحة أصل واحدة.
  4. الموضع الفردي/الزوجي في المستند ← الصفحة الأصل الفردية / الزوجية (إن وُجدت).
  5. خلاف ذلك ← الصفحة الأصل الافتراضية للتقويم.
  6. تستخدم صفحات المحاذاة الفارغة (المُدرجة فقط لإجبار بدء الشهر على صفحة فردية/زوجية) صفحة أصل الصفحة الفارغة المُدرجة المنفصلة بدلًا من هذه السلسلة.

تحديث الصفحات الأصل (Refresh Parents)

يُعيد فحص انتشارات الصفحات الرئيسية (master spreads) في المستند النشط لإعادة ملء كل قائمة منسدلة للصفحة الأصل في اللوحة — استخدم هذا بعد إضافة/إعادة تسمية الصفحات الرئيسية.

معلومات الإدارة (Managed info)

يعرض عدد الصفحات التي تنتمي إلى أحدث تشغيل مُولَّد، إن وُجد تشغيل متتبَّع حاليًا في المستند المفتوح.


8. تبويب القوالب الجاهزة (Presets)

تلتقط القوالب الجاهزة الإعداد بأكمله: إعدادات التقويم، إعدادات التقويم المصغّر الافتراضية وملفات تعريفه لكل صفحة أصل، ربط أعمدة CSV، قائمة مصادر PDF، والترجمات المخصصة.

  • القوالب الجاهزة المُعرَّفة مسبقًا (مدمجة، متاحة دائمًا):

    • التقويم اليومي (Daily Calendar) — يوم واحد لكل انتشار.
    • انتشار أسبوعي من 7 أيام (Weekly 7-Day Spread) — 7 أيام لكل انتشار.

    يؤدي تطبيق أحدهما إلى تركيب حقول شكل التقويم الخاصة به فقط فوق إعداداتك الحالية.

  • حفظ الحالي كقالب جاهز — يخزّن لقطة كاملة تحت اسم تختاره، في وحدة التخزين المحلية للمتصفح.
  • تصدير — يكتب ملف .calendarpreset.json (بصيغة calendar-generator-preset، الإصدار 1). تُزال رموز الوصول (tokens) الخاصة بملفات CSV وPDF عمدًا قبل التصدير — يتذكر القالب الجاهز ربط الأعمدة وتسميات الأطر، لكن ليس رابطًا فعّالًا بالملفات الفعلية. يجب إعادة ربط ملفات CSV/PDF على الجهاز المستقبِل.
  • استيراد قالب جاهز — يقرأ ملفًا كهذا مجددًا، مع إعادة تسمية تلقائية عند تعارض الأسماء (Name (2)، Name (3)، إلخ).
  • إعادة ضبط جميع الإعدادات — يستعيد كل حقل في اللوحة إلى قيمه الافتراضية. لا تتأثر القوالب الجاهزة المحفوظة.

9. مرجع المتغيرات

المتغيرات المدمجة (الميلادية، اليوليانية، الهجرية، والمساعدة)

المتغيّرمثالملاحظات
date16يوم الشهر، بلا صفر بادئ
date_206يوم الشهر، مع صفر بادئ
day / day_shortMonday / Monالإنجليزية
day_f / day_f_shortLundi / Lun.الفرنسية
day_a(بالعربية)العربية
day_symbolرمز واحد لكل يوم أسبوع
month / month_shortJanuary / Janالإنجليزية
month_number01مع صفر بادئ
month_f / month_f_shortJanvier / Janv.الفرنسية
month_a / month_a2 / month_a3(صيغ عربية مختلفة)ثلاث اصطلاحات مختلفة لأسماء الأشهر بالعربية
year / year_22027 / 27 
week / week_26 / 06رقم أسبوع ISO
day_of_year / days_gone126القيمة نفسها؛ days_gone اسم بديل
days_left239الأيام المتبقية من السنة
days_in_month31 
quarter2 
is_weekendtrue/falseبحسب أيام عطلة نهاية الأسبوع المُعدَّة
is_leap_yeartrue/false 
date_iso2027-05-06 
date_eu06/05/2027يوم/شهر/سنة
date_us05/06/2027شهر/يوم/سنة
date_julian / month_julian / year_julian / year_2_julianمكافئات التقويم اليولياني (بإزاحة عن الميلادي)
hijri_date / hijri_month / hijri_month_a / hijri_yearتُحسب عبر تحويل يعتمد جدول بحث أم القرى
mini_month, mini_month:-1, mini_month:+1خاص: يُعيَّن إلى إطار، وليس مدرَجًا كنص {{...}}؛ يعرض جدول تقويم مصغّر كاملًا (القسم 5)

المتغيرات الديناميكية

  • تضيف الترجمات المخصصة month_<suffix> وday_<suffix> (القسم 3).
  • تضيف أعمدة CSV (غير @) custom_<العنوان_المُطبَّع> (القسم 4).
  • لا تظهر أعمدة @file في CSV ومصادر PDF كمتغيرات نصية {{}} — بل تُعيَّن مباشرة إلى تسميات Script Label للأطر الرسومية.

مع الانتشارات متعددة الأيام، يمكن لأي من صيغ تسمية الإطار أعلاه حمل لاحقة #N لاستهداف ترتيب اليوم N داخل الانتشار (مثل date#3، mini_month#2). تستخدم العناصر النائبة النصية داخل إطار calendar_mix الصيغة نفسها {{key#N}}.


10. مرجع الفحص المسبق والتحقق

يتحقق تشغيل الفحص المسبق (أو التوليد، الذي يُجري الفحص المسبق دائمًا أولًا) من جملة أمور، من بينها:

  • اختيار صفحة أصل افتراضية للتقويم ووجودها فعليًا.
  • وجود كل صفحة أصل مُشار إليها (الافتراضية، القواعد، إدراج الشهر) في المستند.
  • التعرّف على العناصر المُسمّاة في كل صفحة أصل مفحوصة: يُبلَّغ عن تسميات Script Label غير معروفة، وعناصر نائبة {{}} غير معروفة داخل أطر calendar_mix، وتسميات على أنواع عناصر خاطئة (مثل تسمية تقويم مصغّر على إطار غير نصي)، ولواحق ترتيب يوم تتجاوز عدد الأيام المُهيّأ لكل انتشار.
  • تُعامَل صفحة أصل يُتوقَّع أن تحمل محتوى تقويم لكنها لا تحتوي على أي تسميات تقويم معروفة كخطأ إذا كانت الصفحة الأصل الافتراضية، وكتحذير في غير ذلك.
  • تعارضات/فراغات لاحقة الترجمة المخصصة (القسم 3).
  • صحة إعدادات التقويم المصغّر، إضافة إلى تحذيرات سياقية (مثل تخطيطات 31 عمودًا بصفوف زائدة غير مستخدمة، أو تعارض ضغط 6→5 مع عرض تواريخ الشهر المجاور).
  • ملفات تعريف التقويم المصغّر لكل صفحة أصل التي تشير إلى صفحة أصل لم تعد موجودة في المستند.
  • CSV: اختيار عمود تاريخ صالح، امتلاك أعمدة @file تسميات، عدم وجود أهداف @file مكررة، عدم وجود تسميات @file بلاحقة #رقم، وعدد الصفوف ذات التواريخ غير القابلة للتفسير/المكررة.
  • مصادر PDF: تسميات هدف فريدة، عدم وجود تسميات بلاحقة #رقم، إمكانية العثور على الملف، وإزاحات أعداد صحيحة (الإزاحات السالبة تحذير وليست خطأ).
  • عدم مطالبة أي تسمية إطار من قِبل كل من مصدر PDF وعمود @file في CSV.
  • غياب تسمية إطار PDF أو @file في CSV عن أي صفحة أصل يُتوقَّع منها حمل محتوى تقويم هو تحذير (وليس خطأ) — يُتخطَّى الوضع ببساطة في الصفحات التي تستخدم تلك الصفحة الأصل.
  • فحوصات خاصة بالانتشارات متعددة الأيام: تفعيل الصفحات المتقابلة (Facing Pages)، احتواء انتشار الصفحة الأصل الافتراضية على صفحتين أصل على الأقل، وملاحظة أن "بدء الشهر في صفحة فردية/زوجية" يُتجاهل بمجرد استخدام الانتشارات.

11. سلوك التوليد وعمليات التشغيل المُدارة

تُوسَم كل صفحة وعنصر مُولَّد ببيانات وصفية مخفية (عبر آلية التسمية/استخراج التسمية الخاصة بـ InDesign):

  • على مستوى المستند: معرّف أحدث تشغيل مُدار، وإصدار اللوحة الذي أنشأه.
  • على مستوى الصفحة: التشغيل الذي تنتمي إليه، وما إذا كانت صفحة "يوم" أو "فارغة"، ومفتاح تاريخها.
  • على مستوى العنصر: التشغيل الذي وضعه، وتسمية المصدر الذي جاء منه.

هذا ما يجعل إعادة التوليد آمنة: فهي تحدّد موقع كل صفحة تنتمي إلى التشغيل السابق، وتتحقق من أنها لا تزال متجاورة (وفي وضع الانتشار، تُشكّل انتشارات كاملة)، وتبني المحتوى الجديد إما على الصفحات الفعلية ذاتها أو على صفحات مُدرجة حديثًا، ثم تُزيل فقط صفحات/عناصر التشغيل القديم المتتبَّعة — تاركة أي تعديلات يدوية أجريتها في أي مكان آخر من المستند بلا مساس. إذا حدث خطأ أثناء التشغيل (بما في ذلك الإلغاء)، تُتراجَع أي صفحات مُنشأة حديثًا وتُستعاد الصفحات المُدارة الموجودة مسبقًا إلى حالة تسميتها قبل التشغيل.

يتجاهل وضع الإلحاق (Append) أي تشغيل سابق تمامًا، ويُنشئ دائمًا كتلة صفحات جديدة تمامًا في نهاية المستند (أو، إذا كانت الصفحة الأولى فعليًا في المستند لا تزال فارغة وغير مُعدَّلة، يُعاد استخدامها كصفحة أولى).


12. استمرارية البيانات (ملاحظات تقنية)

  • تُحفظ إعدادات اللوحة تلقائيًا في localStorage تحت المفتاح calendarGenerator.settings.v3 عند أي تغيير تقريبًا، وتُعاد تحميلها تلقائيًا عند بدء تشغيل اللوحة.
  • تُخزَّن القوالب الجاهزة المحفوظة تحت المفتاح calendarGenerator.presets.v1، بمعزل عن الإعدادات الحيّة.
  • يُشار إلى ملفات CSV وPDF عبر رموز ملفات دائمة (persistent file tokens) في UXP، بحيث يُتذكَّر الملف المختار (ويُعاد فتحه بصمت) عبر الجلسات في المستند/الجلسة نفسها — لكن الرموز لا تُدرج أبدًا في القوالب الجاهزة المُصدَّرة، بحكم التصميم، لأنها غير قابلة للنقل إلى جهاز آخر.
  • تُعيد إعادة فتح ملف CSV اكتشاف أعمدته تلقائيًا وتُعيد التحقق من عمود التاريخ المختار سابقًا، مع الرجوع إلى عمود مُخمَّن إذا لم يعد العمود القديم موجودًا.

13. استكشاف الأخطاء السريع وإصلاحها

العارضالسبب المحتمل
"Choose a valid default Calendar Parent / Master first."لم تُختر صفحة أصل افتراضية، أو أن المختارة لم تعد موجودة — استخدم تحديث الصفحات الأصل.
"Mini Month must be assigned to the text frame itself."حاولت إدراج عنصر نائب mini_month وسط النص بدلًا من تسمية الإطار بأكمله. حدد الإطار وأدرج مجددًا.
ترفض إعادة التوليد وتطلب منك استخدام الإلحاقتم تقسيم الصفحات المُولَّدة سابقًا، أو إعادة ترتيبها، أو حذف جزء منها منذ آخر تشغيل.
خيار أرقام الأسابيع معطّلتخطيط التقويم المصغّر لديك غير مُحاذى للأسبوع، أو أن عدد أعمدته ليس من مضاعفات 7.
ضغط الأسبوع من 6 إلى 5 لا يحدثخيار "عرض تواريخ الشهر المجاور" مُفعَّل — الخياران متعارضان.
إطار @file في CSV أو PDF لا يُملأ بصمت في بعض الصفحاتيفتقر قالب تلك الصفحة الأصل إلى إطار يحمل تسمية Script Label المطابقة — تحقق من تحذيرات الفحص المسبق، التي تسرد بالضبط أي الصفحات الأصل تفتقر إلى أي تسمية.
القالب الجاهز المستورَد يعمل لكن لا تظهر أي صور/ملفات PDFهذا متوقع — لا تحمل القوالب الجاهزة أبدًا وصولًا إلى الملفات. أعد اختيار ملف CSV وكل مصدر PDF بعد الاستيراد.