Skip to content

About

تطبيق ويب للبرمجة البصرية بلغة ضاد العربية

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Repository files navigation

لغة ضاد - بيئة البرمجة البصرية

شعار لغة ضاد

ضاد بلوكلي(Daad Blockly) هي لغة برمجة عربية بالكامل. هذا التطبيق هو بيئة تطوير سطح مكتب تعتمد على Blockly من Google و Electron، تسمح لك بكتابة برامج بلغة ضاد عن طريق تركيب القطع البصرية (Blocks) دون الحاجة لكتابة الأكواد يدويًا.

لا يحتاج التطبيق إلى خادم أو قاعدة بيانات — كل شيء يعمل محليًا على جهازك.

المميزات

  • واجهة عربية كاملة (RTL) بخطوط وألوان مريحة
  • أكثر من 50 قطعة برمجية بصرية تغطي أساسيات البرمجة
  • توليد كود ضاد تلقائيًا من القطع البصرية
  • تشغيل البرامج مباشرة داخل التطبيق والتفاعل مع الإدخال (ادخل)
  • عرض المخرجات بشكل فوري مع دعم الإدخال التفاعلي أثناء التشغيل
  • حفظ واسترجاع مساحات العمل (ملفات JSON)
  • دعم Windows و Linux و macOS (بنيات x86-64 و ARM64)
  • تصدير واستيراد المشاريع عبر مربعات الحوار

المتطلبات

  • Node.js (الإصدار 18 أو أحدث)
  • نظام تشغيل: Windows (x86-64 / ARM64 / x86) أو Linux (x86-64 / ARM64 / x86) أو macOS (x86-64 / Apple Silicon)

التثبيت والتشغيل

# استنساخ المستودع
git clone https://github.com/daadLang/daad-blockly
cd daad-blockly

# تثبيت التبعيات
npm install

# تشغيل التطبيق
npm start

# تشغيل مع أدوات المطور (DevTools)
npm run dev

كيفية الاستخدام

1. تركيب القطع

اسحب القطع من شريط الأدوات الجانبي إلى مساحة العمل. كل قطعة تولد كود ضاد تلقائيًا.

2. تشغيل البرنامج

انقر على زر تشغيل (يتحول إلى إيقاف أثناء التنفيذ). تظهر المخرجات مباشرة في لوحة المخرجات.

3. الإدخال التفاعلي

عند استخدام قطعة ادخل، يظهر حقل الإدخال تلقائيًا. اكتب النص ثم اضغط إرسال. يمكنك إرسال أكثر من قيمة أثناء التشغيل.

4. حفظ العمل

  • حفظ: يحفظ تلقائيًا في مجلد المستخدم
  • حفظ باسم: يفتح مربع حوار لحفظ الملف في مكان تختاره
  • فتح: يفتح ملف مساحة عمل سابق

القطع البرمجية

النصوص

القطعة الكود المولد
نص "..."
اطبع اطبع(...)
طول النص طول(...)
دمج النصوص ... + ...
ألحق نص س = س + ...
حول إلى نص نص(...)
تنسيق نسق("...", ...)

الأرقام

القطعة الكود المولد
عدد رقم
عمليات حسابية (+ - * /)
أس (... ** ...)
باقي القسمة (... % ...)
قسمة صحيحة (... // ...)
حول إلى عشري عشري(...)

المنطق

القطعة الكود المولد
صحيح / خطأ صحيح / خطأ
مقارنة (== != < <= > >=)
و / أو (... و ...) / (... أو ...)
نفي ليس(...)
معرفة النوع نوع(...)
انتماء (... في ...)

القوائم

القطعة الكود المولد
إنشاء قائمة [ع1, ع2, ...]
قائمة فارغة []
Tuple (ع1, ع2, ...)
عنصر من قائمة قائمة[رقم]
طول القائمة طول(...)
نطاق نطاق(...)
أضف عنصر ق = اضف(ق, عنصر)
أزل عنصر ق = ازل(ق)
انسخ قائمة انسخ(قائمة)
أفرغ قائمة ق = افرغ(ق)

القاموس

القطعة الكود المولد
قاموس {...}

العوامل

القطعة الكود المولد
تعيين مركب س +=, -=, *=, /=, %=, //=, **=
عمليات بت & , | , ^ , << , >>
قلب البتات ~...

التحكم

القطعة الكود المولد
إذا / وإلا اذا ... : واذا ... : والا :
طالما طالما ... :
لكل لكل ... في ... :
كرر كرر ... مرات :
اخرج / تابع اخرج / تابع

الدوال

القطعة الكود المولد
دالة بدون إرجاع دالة اسم(وسائط):
دالة مع إرجاع دالة اسم(وسائط): ... ارجع
إرجاع شرطي اذا ... : ارجع
استدعاء دالة اسم(وسائط)

المتغيرات

القطعة الكود المولد
متغير اسم_المتغير
تعيين اسم = ...

دوال مدمجة

القطعة الكود المولد
إدخال ادخل(...)
استيراد استورد ...
استيراد من من ... استورد ...

الوحدات المدمجة المتاحة للاستيراد: رياضيات, عشوائي, وقت, نظام, مسار (مثال: من رياضيات استورد جذر ثم اطبع(جذر(16))).

الكائنات

القطعة الكود المولد
صنف صنف اسم:
دالة (خاصة بالصنف) دالة اسم(ذاتي, وسائط):
ذاتي ذاتي
خاصية كائن.خاصية
تعيين خاصية كائن.خاصية = ...
إنشاء كائن اسم(وسائط)

مثال: برنامج ترحيب

# كود ضاد مولّد من القطع البصرية
اطبع("مرحباً بك في لغة ضاد!")
الاسم = ادخل("ما اسمك؟ ")
اطبع("أهلاً، " + الاسم)

خطوات بناء البرنامج:

  • اسحب قطعة اطبع من قسم النصوص واكتب النص
  • اسحب قطعة إدخال من قسم الدوال المدمجة وأدخل رسالة التنبيه
  • اسحب قطعة متغير من قسم المتغيرات وسمّه الاسم
  • وصّل قطعة الإدخال إلى المتغير
  • اسحب قطعة اطبع أخرى وألحق بها اسم المتغير

هيكل المشروع

daad-blockly/
├── main.js                      # عملية Electron الرئيسية
├── preload.js                   # جسر الأمان (DaadAPI)
├── renderer.js                  # ربط واجهة المستخدم بـ Blockly ومنطق التطبيق
├── index.html                   # الصفحة الرئيسية (RTL)
├── package.json                 # إعدادات المشروع
├── vitest.config.js             # إعدادات بيئة الاختبارات (Vitest + jsdom)
├── AGENTS.md                    # دليل المساهمين والأوامر
├── .github/workflows/
│   ├── ci.yml                   # فحص الأكواد والاختبارات عند كل push/PR
│   └── release.yml              # بناء وإصدار الحزم عند دفع وسم v*
├── bin/
│   ├── linux/                   # مترجم ضاد (Linux: x64 / x86 / arm64)
│   ├── darwin/                  # مترجم ضاد (macOS: x64 / arm64)
│   └── win32/                   # مترجم ضاد (Windows: x64 / x86 / arm64)
├── assets/
│   ├── css/app.css              # الأنماط (RTL، استجابة، إتاحة)
│   ├── img/logo.svg             # الشعار
│   ├── icons/                   # أيقونات الحزم (512.png, 256.png, icon.ico)
│   └── js/
│       ├── app/logic.js         # منطق التطبيق النقي (DaadApp) — قابل للاختبار
│       ├── blocks/custom.js     # تعريفات القطع المخصصة
│       ├── blocks/toolbox.js    # ترتيب شريط الأدوات
│       ├── generator/index.js   # مولّد كود ضاد
│       └── examples.js          # أمثلة جاهزة
├── tests/                       # اختبارات Vitest (generator.*, app.logic)
│   └── setup.js                 # تحميل Blockly وDaad في بيئة jsdom
└── node_modules/                # التبعيات

التقنيات المستخدمة

التقنية الإصدار الاستخدام
Electron ^42.4.1 إطار التطبيق سطح المكتب
Blockly ^13.0.0 محرر القطع البرمجية البصرية
Node.js (مضمن) تشغيل التطبيق والعمليات الخلفية
Daad Interpreter v0.2.0 مترجم لغة ضاد (ثنائي مستقل)

التطوير

لفتح أدوات المطور:

npm run dev

يضيف الوسيط --dev الذي يفتح DevTools تلقائيًا عند بدء التطبيق.

الاختبارات

يعتمد المشروع على Vitest مع jsdom لاختبار مولّد الكود (assets/js/generator/index.js) ومنطق التطبيق (assets/js/app/logic.js) دون الحاجة إلى Electron أو Blockly كامل. يقوم tests/setup.js بتحميل Blockly كـ ESM، ثم ينسخه إلى كائن قابل للتوسيع، ثم يُنفّذ custom.js وgenerator/index.js عبر eval بحيث تتوفر Blockly.Daad فعلياً في الاختبارات. يمكن بناء حالة الكتل عبر الدوال المساعدة المُصدَّرة من tests/setup.js: block(), val(), stmt(), text(), num(), program(), variable(), codeOf().

npm test              # تشغيل الاختبارات مرة واحدة (كود الخروج يعكس النجاح/الفشل)
npm run test:watch    # وضع المراقبة
npm run lint          # فحص ESLint (تحذيرات فقط)
npm run lint:fix      # إصلاح تلقائي للأكواد

يُشغّل CI (.github/workflows/ci.yml) lint وtest عند كل push/PR. لتفاصيل أكثر حول إضافة اختبارات أو القطع، راجع AGENTS.md.

اختصارات لوحة المفاتيح

الاختصار العمل
Ctrl+Z تراجع
Ctrl+Y أو Ctrl+Shift+Z إعادة
Ctrl+S حفظ
Ctrl+O فتح
Alt+R تشغيل
Alt+S حفظ
Alt+O فتح

يدعم قائمة الأمثلة التنقل بلوحة المفاتيح: ↓/↑ للتنقل بين العناصر، Enter للاختيار، Esc للإغلاق.

الإتاحة والاستجابة

  • تسميات ARIA وaria-live على مناطق الكود والمخرجات والأخطاء.
  • حلقات تركيز واضحة (focus-visible) لكل الأزرار وعناصر القائمة.
  • نقاط توقف استجابية عند 960px و768px و480px (تتكديس اللوحات ويُخفى اسم الملف على الشاشات الضيقة).
  • دعم prefers-reduced-motion (تعطيل الرسوم المتحركة).

بناء الحزم

npm run dist:linux   # AppImage + deb (x86-64)
npm run dist:win     # مثبّت NSIS (x86-64)
npm run dist:mac     # dmg + zip (x86-64 / Apple Silicon)

يُبني macOS على كلٍّ من البنيتين عبر --x64 و--arm64 (يتم ذلك تلقائيًا في release.yml). للحصول على إصدار منشور، ادفع وسم v* (مثل v1.0.0)؛ سيقوم release.yml ببناء حزم Linux وWindows وmacOS وإنشاء إصدار مسودة على GitHub مع ملاحظات تلقائية.

الشكر موصول

  • لغة ضاد: الشكر موصول لمنظمة daadLang على تطوير لغة البرمجة العربية.
  • مكتبة Blockly: يعتمد هذا المشروع على المكتبة الرائعة Google Blockly.

المساهمة

نرحب دائمًا بمساهماتكم! سواء كان ذلك من خلال إصلاح الأخطاء (Bug Fixes)، إضافة ميزات وكتل جديدة، أو حتى تحسين التوثيق. لا تتردد في فتح طلب سحب (Pull Request) أو الإبلاغ عن مشكلة عبر (Issues).

يرجى الاطلاع على AGENTS.md لقائمة الأوامر وقواعد التنسيق وكيفية إضافة اختبارات جديدة للمولّد أو منطق التطبيق. شغّل npm run lint وnpm test قبل إرسال المساهمة.

الترخيص

هذا المشروع مقدم كبرنامج مفتوح المصدر للتعليم والتعلم.

About

تطبيق ويب للبرمجة البصرية بلغة ضاد العربية

Topics

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages