# الرسم والنص والصوت وHTTP مع رايليب

[English](guide.en.md) · [الواجهة الدقيقة](reference.ar.md) · [النشر](deployment.ar.md) · [الأمثلة](../examples/raylib/README.ar.md)

توفر ASPL مكتبة واحدة عربية أولا مع تسميات إنجليزية مطابقة. استورد
`أساسي::رايليب` أو `core::raylib`. تقبل البادئة المكتوبة أسماء الأعضاء
باللغتين. استورد التسميتين لاستخدام البادئتين. تستخدم المكتبة رايليب 6.0 المثبت للنوافذ والرسم الثنائي
والأنسجة PNG وصوت WAV وOGG وMP3. يستخدم النص HarfBuzz وICU وFreeType
وخطين عربي ولاتيني مضمنين. يرفض الملعب الشبكي المكتبة حتى عند استيرادها
دون استعمالها.

## شغل الأمثلة

من جذر المستودع، استخدم `aspl` المثبت أو `build/aspl` للمساهمين:

```sh
aspl check docs/examples/raylib/window-input.ar.aspl
aspl run docs/examples/raylib/window-input.ar.aspl
aspl build -o build/sprites docs/examples/raylib/sprite-camera.en.aspl
./build/sprites
```

لا يتطلب الفحص والبناء جهاز عرض أو صوت أو مترجم C. تتطلب أمثلة الأجهزة
المرافق الموضحة في دليل النشر. تبدأ مسارات الأصول من مجلد عمل العملية.
تستخدم الأمثلة الأصول الصغيرة في `docs/examples/assets` وملفات `.NOTICE`
الخاصة بها. يعمل مثال الهوية دون أجهزة ويقيس النص المشكل المضمن.

## تعامل مع نتيجة مفحوصة

تنقل المحولات قيم C المركبة حقلا حقلا وتعطي الفشل المتوقع عبر `نتيجة<T>`.
الأحجام العددية دقيقة، لذا حول العدد الأوسع المكتوب بنوع صريح. افحص النجاح
قبل قراءة المحتوى:

```aspl
استورد أساسي::رايليب;
دالة ابدأ_الرئيسية() -> ص64 {
    دع opened = رايليب::هيئ_نافذة(640, 360, "سلام ASPL");
    إذا لا opened::نجاح {
        اطبع(opened::الخطأ::الرمز);
        اطبع(opened::الخطأ::الرسالة);
        أرجع 1;
    }
    دع closed = رايليب::أغلق_النافذة();
    إذا لا closed::نجاح { اطبع(closed::الخطأ::الرسالة); أرجع 2; }
    أرجع 0;
}
```

`نجاح` و`قيمة` و`الخطأ` و`الرمز` و`الرسالة` هي حقول النتيجة الحالية،
وتقبل نظائرها الإنجليزية. لم تضاف حقول تشخيص. قراءة فرع غير صالح توقف
البرنامج بمصيدة. قارن رمز ASCII الثابت في البرنامج. تحتوي رسائل رايليب
الجديدة على اللغتين بغض النظر عن لغة المصدر أو إعدادات المضيف. تعيد فحوص
الجاهزية والصلاحية السبعة منطقي مباشرة.

| الرموز | المعنى |
| --- | --- |
| `raylib.invalid_argument`, `raylib.numeric_overflow` | مجال أو اختيار أو محرف غير صالح، أو NUL في عنوان أو مسار، أو حساب لا يمكن تمثيله. |
| `raylib.invalid_order` | جهاز غائب أو تهيئة مكررة أو زوج رسم غير صالح أو حالة إطار ممنوعة. |
| `raylib.invalid_context`, `raylib.owner_busy` | تنفيذ أو خيط أو سياق تأثير غير صالح، أو جهاز يملكه تنفيذ آخر. |
| `raylib.closed_resource` | المالك المشترك مغلق منطقيا. |
| `raylib.load_failed`, `raylib.unsupported_asset` | فشل القراءة أو فك الترميز، أو صيغة صورة أو صوت غير مختارة. |
| `raylib.invalid_font`, `raylib.unsupported_font` | بيانات خط تالفة، أو نوع خط غير مدعوم. |
| `raylib.invalid_text`, `raylib.missing_glyph` | تحكم أو نص غير صالح، أو لا يوجد خط مسموح يغطي النص. |
| `raylib.resource_limit` | استنفاد ميزانية الواجهة الخلفية المشتركة أو سعة المخزن الأصلي المحدود. |
| `raylib.host_unavailable`, `raylib.host_incompatible` | مرفق مضيف غائب أو غير متاح، أو رمز أو بروتوكول أو سياق غير متوافق. |
| `raylib.initialization_failed`, `raylib.host_failure` | فشل تهيئة أو بدء حرر بأمان، أو فشل أصلي أو فشل رفع آخر. |

تسمي الرسالة العملية القانونية والمدخل أو المورد المتأثر. أخطاء النص تحمل
`scalar_index=N` من صفر في الترتيب المنطقي و`scalar=U+XXXX`. يستخدم UTF-8
الأصلي التالف `byte_offset=N`. هذه تفاصيل رسالة وليست حقولا إضافية أو واجهة
تحليل رسائل. يظهر NUL والتحكم بترميز مرئي. يحتفظ فحص المصدر بالمفاتيح
`type-mismatch` و`invalid-field` و`forbidden-context-operation` و
`supplied-operator-not-supported`. التشخيص عربي افتراضيا. اختر الإنجليزية
بـ`--diagnostic-language=en`، وللبرنامج المولد استخدم
`--aspl-diagnostic-language=en`.

يجب أن تكون مدخلات الفاصلة العائمة النشطة منتهية. أبعاد النافذة وتكبير
الكاميرا ودرجة الصوت وسماكة الخط موجبة، ونصف القطر ومعدل الإطارات غير
سالبين. مستوى الصوت 0..1 والتوازن -1..1. تفحص الإحداثيات والمعدلات والأعداد
ومقادير البايتات الناتجة قبل الدخول الأصلي. تحفظ أبعاد الأنسجة الموقعة
ومقاييسها الصفرية والسالبة والأشكال المنعدمة المسموحة سلوك رايليب المثبت.
يحفظ الرفض قبل الدخول الحالة، ويضمن الفشل بعد التأثيرات تنظيف الملكية
دون وعد بإلغاء كل تأثير سابق.

## الموارد وإطارات الرسم

النسيج والخط والصوت والموسيقى وتخطيط النص موارد معتمة لها ملاك مدارون.
تشارك النسخ والقوائم وحالة HTTP المورد نفسه. تحرير نسخة يغلق كل النسخ
وينجح تكرار التحرير. فشل المورد المغلق يسبق فشل الجهاز السابق الغائب.
تبقى البيانات الأصلية وحساب ذاكرتها حتى انتهاء الاستخدام الأصلي المسموح.
قد يحتفظ رسم مقبول بالبيانات بعد التحرير المنطقي داخل إطار.

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

ابدأ إطارا عبر ابدأ_الرسم وارسم بإحداثيات الشاشة. يمكن دخول ابدأ_وضع_ثنائي_الأبعاد
ثم الخروج عبر أنه_وضع_ثنائي_الأبعاد قبل أنه_الرسم. يرفض الزوج غير المطابق أو المتداخل
بـ`raylib.invalid_order` دون تغيير الحالة. تتطلب عمليات الرسم ومسح الخلفية
إطارا. تتطلب الأحمال ودورة حياة الأجهزة وتغيير العنوان ومفتاح الخروج ومعدل
الإطارات ومرشح النسيج والتفافه إطارا مغلقا. يستبدل اضبط_أعلام_الإعداد أعلام
النافذة التالية ويتطلب عدم وجود نافذة حية. تبقى الأعلام والتوقيت بعد إعادة
الفتح، ويعاد مفتاح هروب والإدخال والتوقيت إلى البداية.

الحساب والنص على المعالج والفحوص الكلية وبيانات المالك للقراءة فقط هي
العمليات المسموحة في معالجات HTTP والدوال الراجعة المدارة. يحدد المرجع
السياق لكل عملية. لا تتجاوز الدوال المساعدة أو الموارد المخزنة أو قيم
الدوال هذه القيود. يفحص المصدر والبايتكود والتنفيذ التأثيرات ولا يستدعي
خيط مزج الصوت دوال المصدر.

## شكل النص وقس صندوقه

احفظ النص في ترتيبه المنطقي. لا تتغير البايتات والتطبيع وأسماء المستخدم
والمسارات. تعمل وصلات العربية والأربطة والعلامات والترتيب ثنائي الاتجاه
بخطوط مثبتة وUnicode 17. لا تغير خطوط المضيف أو اللغة أو `ICU_DATA` ذلك.
يختار الخط لعناقيد المحارف وتسلسل الوصل العربي كاملا. يجرب الخط المخصص
ثم الخطوط الافتراضية حسب الكتابة، ولا يقبل مربعات استبدال نهائية.

تستخدم اختصارات القياس والرسم اتجاها تلقائيا ومحاذاة البداية دون التفاف
أو تباعد أسطر إضافي. تباعد محارف Ex وPro يجب أن يكون صفرا. يتطلب إنشاء
تخطيط النص الحقول الستة كلها. الاتجاه التلقائي يتبع أول محرف قوي، أو
اليسار إلى اليمين للفقرة المحايدة. البداية والنهاية تتبعان قاعدة الفقرة
واليسار واليمين موضعان فعليان. العرض المحدد يفعل التفاف ICU وتقطيع
العناقيد عند الضرورة. قد يتجاوز العنقود الأكبر من العرض الصندوق.

تفصل LF وCR وCRLF وU+2029 الفقرات، وU+2028 يكسر السطر. تدعم الأسطر
الفارغة والأخيرة وتحكم الاتجاه وZWJ وZWNJ والشرطة الاختيارية حسب العقد.
يرفض NUL والجدولة وDEL وعناصر Cc الأخرى غير المدعومة. الحجم الصحيح
1..4096 وحجم ع32 للرسم 0.5..4096. يقرب الحجم الفعلي إلى 1/64 بالتعادل
إلى الزوجي.

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

## حدث الموسيقى والخدمة صراحة

هيئ الصوت قبل تحميل الصوت أو الموسيقى. يسمح التشغيل والتحكم بالصوت
والتوازن والدرجة وتحديث بث الموسيقى داخل إطار. مستوى الصوت 0..1 والتوازن
-1..1 والدرجة موجبة مع فحص معدل أصلي ناتج. يحتاج البث استدعاء التطبيق
لتحديثه. يسمح الانتقال في الموسيقى من صفر إلى الطول المبلغ عنه شاملا
النهاية. النهاية EOF منطقية. يعيد التحديث التالي الموسيقى الجارية المتكررة
أو يوقف غير المتكررة والفارغة.

تعيد ابدأ في HTTP جلسة<C,S> بعد جاهزية كل المستمعين دون تشغيل معالج.
استدع تقدم خارج الإطار. الميزانية الافتراضية 4096 تعليمة و2 مللي ثانية
عمل وصفر انتظار. التقدم تعاوني بأدوار متسلسلة محدودة، وقد تتجاوز عملية
أصلية أو نظامية زمن العمل. تعمل المعالجات الصريحة فقط عبر تقدم. قد يحافظ
إنهاء الرسم والإدخال المعلق خارج الإطار على النقل والمهل دون تشغيل معالج
مصدر. لا يدفع الإدخال داخل الإطار HTTP أو معالجاته. قد ينتهي طلب HTTP
حاجب من التطبيق بمهلة عند طلب خادمه الصريح نفسه. حدد تكرار التقدم حسب
عمل التطبيق.

دوال حالة الجلسة وإعداداتها للتطبيق فقط ويسمح بها في إطار. دوال السياق
للمعالج الحي فقط. القراءة تنسخ الحالة. تحمل اللقطات هوية جلسة وإصدار خفية
وتبقى قيمتها للقراءة فقط بعد الإغلاق. يعيد النشر المشروط نجاحا بقيمة خطأ
للقطة قديمة، و`http.invalid_argument` للقطة جلسة أخرى. يستبدل النشر الناجح
الحالة كلها ويرفع إصدارها. لا تمنح اللقطة سلطة سياق أو جهاز. يبدأ إيقاف
الجلسة الاستكمال التدريجي ويتطلب مواصلة التقدم حتى الإغلاق. يغلق إغلاق
الجلسة فورا دون تشغيل معالجات استكمال. ينجح تكرار الإيقاف والإغلاق العادي
ويعيد تقدم المغلقة جلسة_مغلقة. تعيد دوال حالة المغلقة `http.closed_session`
ويستخدم الإطار أو السياق غير الصالح `http.invalid_order` أو
`http.invalid_context` برسائل ثنائية اللغة. تبقى رموز HTTP ورسائله السابقة
على عقدها.

## التنظيف التلقائي والمقاطعة

العودة والمصيدة والحدود والإلغاء توقف المصدر وتهجر إطارا مفتوحا دون عرض
إطار أخير مقصود. يحرر التنظيف GPU قبل النافذة والمفكك والمزج قبل الصوت.
تبقى البيانات وحسابها إذا لم يمكن إثبات التحرير. الذاكرة الافتراضية
256 MiB للآلة و128 MiB مشتركة بين رايليب وHTTP. تنطبق حدود إطارات دوال
الآلة وخاناتها على العمل المعلق أيضا.

توقف أول SIGINT أو SIGTERM التطبيق نهائيا وتلغي إدخاله وطلباته المعلقة
وتسمح فقط باستكمال معالجات HTTP المقبولة مسبقا خارج الرسم. تلغي الإشارة
الثانية ما بقي. لا تشغل المصيدة والحدود والإلغاء الآخر معالجات استكمال.
يحدد تنظيف الموارد المتبقية مهلة واحدة `t + max(R,H)` تقيدها مهلة التنفيذ
ونطاقات العمليات والجلسات السابقة. لا يجدد التكرار المهلة. R مهلة رايليب،
وH مهلة الجلسة المتبقية أو أكبر 1000 مللي ثانية ومدد تنظيف العملاء المقبولين
إذا بقي عمل HTTP. لا يضيف استيراد غير مستخدم أو رأس مغلق مهلة. حالات
النهاية تبقى 5 للمصيدة و6 للحد و7 للإلغاء و8 لفشل المضيف. يحتفظ الفشل
الأول بتشخيص تنظيف منفصل. لا يوجد ضمان قطع قسري داخل العملية لتعليق مشغل.
