إنتقل إلى المحتوى الرئيسي

محرك الخطوات

الإجراء الذي محركه الخطوات هو قائمة TOML من جداول [[steps]] بدلًا من النص. يستدعي الدوال المضمَّنة نفسها ويتبع قواعد القيم وقيم الصدق نفسها. الاختلافات:

  • لكل خطوة id فريد من نوع عدد صحيح وop: call (fn، args)، وset (local مع value، أو call = { fn, args })، وif، وgoto، وend، وrepeat/end_repeat، وexit_repeat، وelse/end_if.

  • إما أن تقفز if حسب المعرّف (then_goto/else_goto)، أو، دونهما، تفتح كتلة تُغلقها end_if.

  • تأخذ repeat واحدًا بالضبط من times أو while أو until.

  • الشرط واحد بالضبط مما يلي: استدعاء دالة مضمَّنة (fn/args)، أو value (قيمة الصدق)، أو compare ("=="، "!="، "<"، "<="، ">"، ">=") مع left/right. أضف not = true لعكسه.

  • الوسيطة النصية التي تبدأ بـ $ تقرأ متغيرًا ("$target"). كل ما عدا ذلك قيمة حرفية نوعها هو نوعها في TOML، ويجب أن يطابق هذا النوع المعلمة تمامًا، كما في البرنامج النصي.

  • { const = "VirtualKey.MediaPlayPause" } ثابت مسمى، يُستبدل برقمه عند ترجمة الخطوات، كما في البرنامج النصي. أما السلسلة النصية العادية المكتوبة مثله، مثل "VirtualKey.F5"، فتبقى نصًا.

  • { fn = "MouseGetCursorX" }، وهو جدول لا يحتوي إلا على fn، هو نتيجة دالة مضمَّنة لا تأخذ وسيطات. ويُقبل في كل موضع تُقبل فيه قيمة:

    • في args الخاصة باستدعاء: args = [{ fn = "WindowGetActive" }]
    • في left/right الخاصين بشرط: left = { fn = "ContextGetPointCount" }, right = 20
    • في value الخاصة بشرط: value = { fn = "EngineIsSafeMode" }
    • في times الخاصة بـ repeat: times = { fn = "FolderWatchGetCount" }
    • في value الخاصة بخطوة set: value = { fn = "UtilityGetTickCount" }

    لا يأخذ args. أما الدالة المضمَّنة التي تحتاج إلى وسيطات، فاحفظ نتيجتها أولًا في متغير باستخدام set ثم مرِّر "$name".

  • لا توجد تعابير عوامل. تحتاج العمليات الحسابية وبناء السلاسل النصية إلى إجراء برنامج نصي.

[[steps]]
id = 1
op = "set"
local = "target"
call = { fn = "WindowGetActive", args = [] }

[[steps]]
id = 2
op = "if"
condition = { fn = "WindowContainsTitle", args = ["$target", "Notepad"] }

[[steps]]
id = 3
op = "call"
fn = "WindowMaximize"
args = ["$target"]

[[steps]]
id = 4
op = "end_if"