أعطني رافعة ، نقطة ارتكاز ، أرجل وشريط مقوى
حتى لو حاولت ، لا يمكنك أن تصف بإيجاز كيف ينتظرك ثقب الأرانب القاع. إليك إحدى هذه الحالات النادرة التي ، من أجل إدراك ما سيتم مناقشته ، من الضروري الاستماع إلى الخطاب حتى النهاية. بعد دراسة الخطوات الواردة في هذا الدليل ، سيجد الجميع شيئًا لأنفسهم: محرر "النص" الباطني Leo Editor بكل ما يتطلبه جوهره لاستخدامه بأكثر طريقة مذهلة.
محتوى
1. مقدمة ................................... 2
2. تثبيت محرر ليو ..................... 2
3. الإعداد ................................ 4
4. التعرف على الواجهة ................. 7
5. إنشاء ملفات خارجية ................. 14
6. استخدام المقاطع المسماة ........ 18
7. الجشع إدراج ........................ 21
8. سحر بسيط ...................... 24
9. الجانب العكسي للذئب ............... 30
10. تصور هذا ........................ 33
11. المحتوى والشكل ...................... 36
12. سأبني بيئة تطوير متكاملة لنفسي .................... 39
13. حرية الفكر ........................... 49
14. يا هلا ، النهاية .............................. 58
15. محدث. أمثلة التطبيق ................. 58
فاتحة
عندما تكتب بأية لغة برمجة ، يوجد دائمًا نقص حاد في متصفح الفصل من Smalltalk ، والشعور المزعج بأن يديك مقيدتان وأن ساقيك رطبتان لا تنتهي. ويحدث أيضًا أنك غالبًا ما تبحث عن شيء واحد على الإنترنت ، وتجد شيئًا مختلفًا تمامًا ، ولكنه جميل جدًا لدرجة أن سبب بداية البحث يضيع على خلفية الآفاق التي تتكشف. يؤدي البحث عن عبارة "متصفح فئة python class" إلى إنتاج الكثير من القمامة ، لكن الماس غير المصقول يكمن في هذا الجبل ، اللامع الخافت ، ولا يجذب اهتمامًا كبيرًا ، في انتظار العين اليقظة والعقل المستفسر لإشعاره واستلامه.
تثبيت محرر ليو
المشروع عبر الأنظمة الأساسية ، يتم توفير عملية التثبيت لمنصة Windows. لبدء المحرر ، تحتاج إلى Python ومكتبة Qt. يعد خيار التثبيت الموضح هو الأكثر تطوراً بالنسبة للمستخدم غير مستعد للمعاناة ، ويمكن للمحترفين التصرف وفقًا لتقديرهم.
تثبيت Miniconda بيثون مدير مساحة عمل مبرمج. يسمح لك هذا الحل بالحد من القدرة على الحصول على اليقطين بدلاً من المكونات المتصلة بشكل صحيح ، وفي حالة الجمود التعسفي ، استرجع بشكل غير مؤلم إلى حالة الصفر والتحول بسرعة إلى اختبار خيار ضبط مختلف.
من صفحة
التنزيل ، نزّل برنامج التثبيت Python 3.7 Miniconda3 Windows 64 بت. نضع عندما ينشأ سؤال حول العلامات ، قم بتنشيط الاثنين.
بعد ذلك ، قم بتشغيل سطر الأوامر (المفاتيح [Win + R] ، "cmd" ، [Enter]). نحن اكتب:
conda

لا توجد أخطاء ، هناك إمكانية الوصول المباشر إلى الشقة. نحن نتحقق من توفر الإصدار المطلوب من لغوي اللغة:
python -V

على الفور.
ننظر إلى إصدارات المحرر المتوفرة للتثبيت:
pip install leo==
نحن نفضل أحدث إصدار بدون أحرف في الرقم:
pip install leo==6.1
بعد التنزيل والتفريغ والتثبيت ، نجرب حظنا: نحن نطلق مترجم python ونتصل بمكونات المحرر ونبدأ تشغيل المحرر
python >>>import leo >>>leo.run()

تعديل
إذا لم يظهر اختصار التشغيل على سطح المكتب ، فقم بإضافته بنفسك:
المسار إلى محرر
المشغل :
٪ USERPROFILE٪ \ Miniconda3 \ Scripts \ leo.exeمسار
الرمز :
٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ Icons \ SplashScreen_trans.ico
لم يعجبني شكل مظهري المرئي الأصلي ، لذلك اضطررت إلى صنع موضوعاتي الخاصة. لاستخدامه ، يجب عليك أولاً
تنزيله . خالي من الفيروسات 1000٪. ملف
python.py هو وصف لعناصر التمييز في بناء جملة python. يجب وضعه في
٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ modes \ مع استبدال الملف السابق. ما استسلمت من أجله سوف تصبح لغة الثعبان واضحة بعد قليل. يجب نسخ الملفات المتبقية من الأرشيف إلى المجلد
٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ themes \ .
تحتاج الآن إلى تمكين السمة في إعدادات المستخدم.

انقر فوق عنصرsettings ، ثم استخدم المفتاح [Insert] لإضافة عنصر متداخل جديد. لصق النص:
@string theme-name = monokai.leo
لحفظ التغييرات ، اضغط على [Enter]. إذا تم إلغاء تنشيط تحرير اسم عنصر ما عن غير قصد ، يمكنك تمكينه بالنقر المزدوج على العنصر أو بالضغط على المجموعة [Ctrl + h].

إعادة التشغيل مع حفظ التغييرات.

يجب أن يحدث الارتباط مع ملفات ".leo" تلقائيًا ، ولكن إذا لم يكن كذلك ، فسنستخدم الحل المدمج.

حتى وقت قريب ، لم ينجح هذا بدون تعديلات ، والآن قاموا بإصلاحه ، كما لو ، هه.
التعرف على الواجهة

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

يبدو أن هناك شيئًا نمطيًا ، لكن هناك غرابة ، بدلاً من الأزرار التي تظهر على الشاشة ، يُقترح الضغط على مفاتيح لوحة المفاتيح. ولا يحتوي الأمر find-all على مفتاح معين على الإطلاق. الآن كل الاهتمام في أسفل النافذة.

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



يتم عرض نتائج البحث عن كل الكلمات التي تحدث "the" في عقدة شجرة جديدة تم إنشاؤها عمداً. المزرعة الجماعية! (لا تقلق ، فإن البحث الحكيم "يمتد" خلال الأحداث المكتشفة ، كما هو الحال في الأعمام الصحية).

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

تسمح لك منطقة العلامات بتعيين تسميات إلى العقد ثم العمل معها لاحقًا. تستخدم على ما يبدو لإضافة أبعاد جديدة إلى عمق الفوضى الترتيب. نختار العقدة ، نكتب معرف العلامة ، انقر فوق "+". نختار عقدة أخرى ، فقط اضغط على "+" ، سيتم تعيين العلامة النشطة. نختار العقدة الثالثة ، اكتب "Schmucker" ، اضغط على "+". لدينا حاليًا عقدتان تحمل علامة "zutsker" وعقدة واحدة تحمل علامة "shmutsker".

يؤدي تحديد علامة من قائمة العلامات إلى قائمة العقد المرتبطة بالعلامات التي يمكنك التنقل من خلالها. لتحديد علامة من عقدة ، انقر بزر الماوس الأيمن عليها.

التالي يأتي لوحة ناف مفيدة للغاية. يساعد على التغاضي بسرعة عن العقد التي تحدث فيها كلمة معينة. نظرًا لأن طريقة الحفاظ على ملفات .leo تمثل فوضى كبيرة مع مستوى عالٍ من التنظيم ، فإن التنقل من خلال البحث يناسب الدورة الطبيعية للتطبيق.

الاستخدام الشائع لمحرري النصوص الهيكلية هو تراكم قاعدة المعرفة الشخصية. الاستخدام الثاني الأكثر شيوعًا هو الحفاظ على قائمة المهام. تساعد علامة التبويب التالية في تلوين هذه العملية بالأولويات والمواعيد النهائية وحالات التنفيذ.

تسمح لك قائمة السياق الخاصة بالعقدة باستخدام نسبة كبيرة من إمكانيات علامة تبويب المهام.

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

يتم تغيير اسم العقدة المفردة
NewHeadline
إلى
@file 1.txt

إضافة بعض النص إلى محتويات العقدة.

احفظ ملف. lo في مكان ما. افتح المجلد الذي يوجد به ملف .leo. نلاحظ وجود 1.txt. نحن نفتحها

ماذا بنينا؟ قمنا بتكوين تصدير أحد العقد لملف .leo إلى ملف خارجي.
ما القمامة حول النص لدينا؟ البيانات الوصفية التي تسمح لك بإعادة إنشاء الهيكل عند تحميل الملف مرة أخرى إلى محرر Leo ، وهو أمر ضروري إذا كان سيتم تعديل الملف في مكان ما بالخارج. يمكن إسقاط معظم ملفات python من الكود المصدري Leo Editor بالسحب والإسقاط في المحرر ووجدت أنها تحتوي على وصف للبنية:

ولكن إذا لم نكن بحاجة إلى وظيفة التحميل العكسي على الإطلاق ، ولكن على العكس من ذلك ، نريد ألا يحتوي الملف على بايتات غريبة ، ثم يتم ذلك عن طريق استبدال التوجيه
@file
بـ
@file-nosent
(بدون حراس).

بعد حفظ التغييرات في ملف .leo ، سيتم تحديث الملف الخارجي تلقائيًا.

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

يتم إخطارنا بمشكلتين:
- لدينا عقدة "اختبار" معلقة في الهواء (نسبة إلى الملف الخارجي ، نظرًا لوجود عقدة داخل بنية .leo ، لكننا لم نشير إلى كيفية إضافتها إلى الملف الخارجي ، نظرًا لوجود خطأ).
- حتى يتم حل المشكلة
@file-nosent 1.txt
لن يتم حفظ أية تغييرات أخرى داخل @file-nosent 1.txt
في القرص.
الطريقة الأولى لإضافة الروابط بين العقد هي من خلال المقاطع. يبدو التنسيق الخاص لأسماء الأقسام كما يلي:
<<my_name>>
يسمح لك هذا بإعلان عقدة متداخلة كقسم مسمى ، ويجب تحديد نفس الاسم في مكان العقدة الخارجية حيث يجب وضع محتويات العقدة الثانوية.


الملف الناتج:

في المثال نفسه على ملف حقيقي ، يتم تخصيص قسم الاستيراد للتبعيات الخارجية بشكل صريح لعقدة منفصلة.

إدراج الجشع
ولكن ماذا نفعل إذا أردنا إنشاء قسم متداخل في قسم متداخل ووضع قسمًا آخر فيه؟ يمكنك التصرف بسذاجة:

ولكن لمثل هذه الرغبات الطبيعية ، هناك ما يصل إلى
@all
:
@all
و
@others
.
التوجيه
@all
طعم النصوص من جميع العقد المتداخلة.

بالطبع ، كل هذا يتوقف على تنسيق الملف الذي تحتاجه في الإخراج ، ولكن ربما ترغب في توجيه
@others
، والذي يسمح لك بتحقيق الهيكل المصمم في النموذج المطلوب. خيار حزين:

التفاف الأقسام مع الكلمات الرئيسية:

تنسيق المسافة البادئة:

حسنا؟ هل بدأت في التبلور؟ نحن بالكاد ننكب على المتعة الحقيقية.
:: ::
سحر بسيط
أخيرًا ، نبدأ في إنشاء الرمز. ستكون المهمة غبية ، لكن تحتوي على عناصر أساسية نموذجية لبرنامج مفيد. إنشاء عقدة جديدة في أي مكان في الملف الموجود أو الجديد. يشير السطر الأول إلى توجيه
@language
لتمكين تمييز الكود. إذا كنت تحت لغتك المميزة في المجلد
٪ USERPROFILE٪ \ Miniconda3 \ Lib \ site-package \ leo \ modes \ no ، فلا أحد يحظر إضافتها بنفسك.

افترض أن المعلومات التي سنقوم بمعالجتها مخزنة بواسطة لوحة في ملف CSV.
نحتاج إلى: حساب عدد الأحرف "0" الموجودة في العمود Count
يجب علينا:
- تحويل النص إلى نموذج بنية البيانات
- أداء التكرار مع العد

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

بعد ذلك ، قم بإنشاء مجموعة من القواميس المقابلة للبيانات الموجودة في الجدول. هذه العقدة في المستوى العلوي.

والخطوة الاخيرة.

في غضون ذلك ، سيتشكل الملف main.py الناتج على القرص.

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

وهنا تفرح فرحتنا بالحزن ، لأن اسم ملف CSV قد يصبح مختلفًا ، مما يعني أننا إذا صححناه في برنامج واحد ، فحينئذٍ في الثانية سوف نغفل عنه بالتأكيد ونخسر فرحة إعادة استخدام الكود.
حزينة وجميلة ، انها محرر ليو! وقد تزامن نسخ من العقد. ماذا؟ بدلاً من نسخ محتويات العقدة ، يمكنك لصق العقدة المنسوخة في وضع "clone" ، "phantom" ، ثم يتم عرض تغيير إحدى العقد المرتبطة على العقد الأخرى. هذا مفهوم قوي للغاية يتيح لك حل التناقضات المتأصلة في تنظيم المعلومات في الأشجار.
انسخ العقدة.

ندرج باسم "الوهمية".

الفانتوم لها أيقونة مختلفة. تنعكس أي تغييرات في الاسم أو المحتوى أو العقد الفرعية في النسخة. نقوم بحذف عقدة القراءة القديمة وتحقق من أن تعديل اسم الملف يتم تنفيذه الآن بشكل متزامن في كل مكان.

عند التحدث بلغة الرياضيات ، تسمح لك "الوهمية" بالانتقال من شجرة إلى رسم بياني كامل. يمكن أن تحتوي شجرة في ليو على أكثر من جذر واحد!

يتيح لك ذلك القيام بأشياء رائعة: توفق مع تمثيلات المعلومات ، وربط حاويات البيانات غير المتجانسة ، وعدد لا حصر له من النسخ الفعلية من البيانات في مشروع واحد ، وتحميل البيانات في شجرة Leo التي لا يمكن وضعها في شجرة منتظمة.
بالذئب عكس
دعونا نفعل تجربة. إنشاء عقدة جديدة. أضف نصًا إليه.
g.es( len("This is test".split()) )

اضغط على [Ctrl] + [b].

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

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

هذا كل شيء - هذا رمز يعمل شيئًا داخل محرر Leo ، دون تحميله إلى ملفات .py.
على عكس أوراق السباغيتي في الصورة ، يمكنك على الفور فهم الجوهر العام لما يحدث. على سبيل المثال ، في برنامج "4 Linear Regression" ، تتم كتابة البيانات من الإنترنت لأول مرة في ملف. ثم يتم إجراء العديد من التلاعب على النموذج العددي لـ "انحدار OLS" ، المصمم وفقًا للملف. علاوة على ذلك ، إذا كنا بحاجة إلى استخدام بيانات أخرى أو إعدادات أخرى للنموذج ، فهذا يكفي لإجراء تغييرات في عقدة واحدة ، نظرًا لأن الأجزاء المعاد استخدامها من البرنامج يتم تنفيذها بواسطة "phantoms". ينقسم البرنامج إلى 6 أجزاء مستقلة ، يتم إطلاق كل منها على حدة ، ولكن في نفس الوقت يبدأ تنفيذها من نقطة واحدة مشتركة.
عندما يتم تخزين رمز الموضوعات المشابهة بشكل منظم في مكان واحد ، يكون ملائمًا للغاية ، حتى إذا مر وقت طويل ، ثم باستخدام بحث التنقل ، يمكنك العثور بسرعة على بعض الطرق المحددة ، وستساعد المنظمة الهيكلية على التنقل فيما يحدث. تسمح لك "Phantoms" بتحويل الشفرة غير الخطية المعقدة إلى مجموعة من الإجراءات المتسلسلة ، في حين أن كيانات "الاستنساخ" لا تتكاثر في الإنتروبيا ، ولكنها تقللها ، لأنه يتم استبدال التكرار بربط ، ولا يتم إنشاء مستويات إضافية من التجريد.
50 ملفات مبعثرة مع ملفات المصدر و 50 ملفات مبعثرة. 50 عقد مع أكواد المصدر هي قاعدة المعرفة مع الرغبة الداخلية للتنظيم الذاتي.
تصور ذلك
قبل الشروع في مستوى صعوبة Nightmare ، دعنا نعود إلى الواجهة.
يمكن سحب لوحات المحرر لتنظيم مساحة العمل الخاصة بك بأفضل طريقة. يحتفظ كل ملف بإعدادات المظهر الخاصة به. يمكنك إغلاق جميع اللوحات باستثناء الشجرة. لإعادة اللوحات مرة أخرى ، انقر بزر الماوس الأيمن على رأس الشجرة.

في نفس القائمة هناك تقديم معين. تم تصميم هذا الشيء الصغير وفقًا لاسمه لعرض كل شيء في العالم.
بشكل افتراضي ، يحاول التجسيد تقديم نص العقدة كـ
reStructuredText . يتم تضمين أوضاع أخرى من التشغيل عن طريق فرض نوع المحتوى في اسم العقدة.
كما ترون من الجدول ، Render لا يعمل بقوة كبيرة ، والخبر السار هو أنه يمكن توسيع Leo Editor مع الإضافات ، بما في ذلك المكونات المرئية. على سبيل المثال ، كنت بحاجة لتحميل الأرقام في الجداول ورسم الرسوم البيانية ، مع تغيير البيانات الأولية ألف مرة.

يبدو الحد الأدنى لرمز البرنامج المساعد المرئي كما يلي:
from leo.core.leoQt import QtCore, QtGui, QtWidgets import leo.core.leoGlobals as g class My_Plugin_Widget(QtWidgets.QWidget): def __init__(self, parent=None, leo_com=None): super(My_Plugin_Widget, self).__init__(parent) c = leo_com self.c = c self.layout = QtWidgets.QVBoxLayout() self.message = QtWidgets.QLabel("Hello there!", self) self.layout.addWidget(self.message) self.setLayout(self.layout) def init(): g.registerHandler("after-create-leo-frame", onCreate) g.plugin_signon(__name__) return True def onCreate(tag, keys): c = keys.get("c") if not c: return dw = c.frame.top dock = g.app.gui.create_dock_widget(closeable=True, moveable=True, height=150, name='My plugin') dw.leo_docks.append(dock) dock.setWidget(My_Plugin_Widget(leo_com=c)) dw.splitDockWidget(dw.body_dock, dock, QtCore.Qt.Horizontal) dock.show()
البرنامج المساعد مطلوب:
- حفظ إلى
%USERPROFILE%\Miniconda3\Lib\site-packages\leo\plugins\
- قم بالتسجيل في ملف myLeoSettings.leo في
@settings\@enabled-plugins

يمكنك أن تقرأ عن كيفية صنع الإضافات
هنا ، إذا لم يكن لديك نفاد صبر للحصول على مزيد من المعلومات ، فالطريقة الوحيدة هي دراسة البرنامج المساعد viewrendered.py بنفسك.
لماذا هذا كله؟ مرة أخرى إلى احتمالات لا حدود لها. يتيح لك الوصول الكامل إلى QT إما إعادة إنتاج المعلومات بطريقة تعسفية ، أو إدخالها بأكثر الطرق غير المتوقعة.
المحتوى والنموذج
كل ما هو موضح أعلاه يشبه أداة مريحة لحل مجموعة محدودة من مهام الشاشة ، لا أكثر. التحويل من شجرة إلى ملف خارجي هو خطي ومحدود من قبل أطر صارمة. حتى أسماء العقد تلعب دور التعليقات ، لكن لا تحمل وظائف مفيدة أخرى. لكن من الناحية العملية ، يتضح أنه من المناسب جدًا وصف كيان معقد للتفكير الإنساني بشجرة ، ولكن في نفس الوقت قد لا يبدو تنسيق الجهاز وكأنه شيء و / أو قد لا يكون له أي بنية مميزة على الإطلاق. على سبيل المثال البسيط ، خذ HTML. سيكون من السهل جدًا (حكم القيمة) إعداد العلامات في هذا النموذج:

كل شيء متسق من الناحية الهيكلية والبصرية ، من المستحيل ارتكاب خطأ عدم إغلاق علامة أو وضعها بشكل غير صحيح ، وإجراء تغييرات على أي مقياس أمر أساسي. على الرغم من أن ملف إخراج HTML سيكون "متناسبًا خطيًا" مع هذا الهيكل الوهمي ، فإن آلية مرفق القسم ليست قادرة على إنتاج ما يلي:
- فتح إغلاق العلامات
- تعيين نص العقدة كسمات علامة
- يتم وضع نص العقد بالاسم الخاص "> <" داخل العلامة المقابلة
حسنًا ، بالطبع ، محرر Leo يتيح الوصول غير المحدود إلى الشجرة من رمز العقدة. سواء بالنسبة للقراءة والكتابة. ما الذي يجعل من الممكن إجراء تعديلات تعسفية على تمثيلات المعلومات للإنسان والآلة. في أي اتجاه وبقدر ما تريد. يمكنك تنزيل تنسيق معين وإعادة بنائه إلى شجرة يمكن فهمها لك وإجراء تغييرات وتحويلها مرة أخرى. إذا كان تنسيق الإخراج تافهًا ، فيمكنك كتابة ملف خارجي باستخدام Python. إذا كان التنسيق معقدًا و / أو يوجد قدر كبير من البيانات ، فمن المفيد أن تقضي بعض الوقت في نقل البيانات إلى عقدة ملف مع أقسام ، لأن هذا يسهل إلى حد كبير تصحيح التحويلات.وصف وظائف للعمل مع شجرة:يمكن الحصول على وظائف أخرى من مصادر Leo Editor وملفات .leo كاملة ، ولا يوجد بالفعل أي وثائق ( باستثناء هذه الصفحة ) = (بالمناسبة ، هذه المقالة مكتوبة في Leo Editor.
يتم استخدام الكود التالي لتصدير الشجرة إلى HTML: @language python from pathlib import Path @others path = Path('C:\\Projects\\article\\') / 'out.html' out_text = '<body><script>document.body.style.fontSize = 20;</script>' n = g.findNodeAnywhere(c, 'TITLE') assert nh == ('TITLE') tag = f'<h1>{nb}</h1> ' out_text = out_text + tag + '\n\n' n = g.findNodeAnywhere(c, 'TEXT') assert nh == ('TEXT') for header_node in n.children(): anchor_id = hash(header_node.h) tag = f'<anchor>{anchor_id}</anchor><h3>{header_node.h}</h3>' out_text = out_text + tag + '\n' if '' == header_node.h: text = make_toc(header_node) tag = f'{text}' out_text = out_text + tag + '\n' for content_node in header_node.children(): if '@image' in content_node.h: tag = f' <img src="{content_node.b}" alt=" "> ' else: text = content_node.b if not 'table' in content_node.h: content_node.h = ' '.join(content_node.b.split()[:3]) text = text.replace('\n', ' ') tag = f'{text}' out_text = out_text + tag + '\n' tag = ' <hr/>' out_text = out_text + tag + '\n' out_text = out_text + '</body>' + '\n' with open(path, 'w', encoding='utf-8') as f: f.write(out_text) g.es('.')
سوف نبني بيئة تطوير متكاملة لنفسي
ليس ثعبان واحد ، لذلك دعونا نحاول تزويد أنفسنا بزاوية تحت ... أي شيء. أولاً ، أخيرًا اضغط على زر البرنامج النصي.
يؤدي هذا الإجراء إلى ظهور زر جديد أسفل القائمة الرئيسية باسم العقدة الحالية. يشير المنطق إلى أن النقر على هذا الزر حديثًا سيؤدي إلى محاولة تنفيذ التعليمات البرمجية من العقدة المرتبطة بالزر. أنها مريحة ، ولكن غير مريح أن الزر سوف تتبخر بعد إعادة تشغيل المحرر. للحفاظ على الزر دائمًا في مكانه ، تحتاج إلى إضافة تعويذة خاصة باسم العقدة @button
وإعادة تشغيل Leo Editor.
لكل زر مستخدم ، يمكنك تعيين مفتاح الاختصار باستخدام التعبير. من @key=
أجل تشغيل برنامج نصي آخر من برنامج نصي واحد ، يجب عليك استدعاء وظيفةc.executeMinibufferCommand('FIRE')
. كل نص برمجي مرتبط يقع في المجموعة العامة لأوامر المحرر تحت اسم الزر ، أي نعم ، يمكن تشغيل البرنامج النصي من سطر أوامر المحرر أيضًا.
من أجل تنفيذ البرنامج النصي للعقدة قيد التركيز حاليًا ، من برنامج نصي آخر (كما لو كان بالضغط على [Ctrl] + [b]) ، يتم استخدام الأمر c.executeMinibufferCommand('execute-script')
.لنفترض أن لدينا بعض الرموز المعدة. سيكون من المفيد تنفيذها من Leo Editor ، وسيكون من الرائع الحصول على جميع الأخطاء من وحدة التحكم. ألقِ نظرة على مثال للتنسيق التلقائي لرمز Python داخل عقدة باستخدام الأداة المساعدة Black الشهيرة. @language python import subprocess import re c.frame.log.selectTab('Log') c.frame.log.clearLog() python_src = [] for line in pbsplitlines(): if re.match(r'@', line) is not None: line = line.replace('@', '# special_comment@') elif re.match(r'<<', line) is not None: line = line.replace('<<', '# special_comment<<') python_src.append(line) text = '\n'.join(python_src) proc = subprocess.Popen( ['black', '-', '-q', '--skip-string-normalization'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, bufsize=0, shell=True, ) proc.stdin.write(text.encode()) proc.stdin.close() s = proc.stdout.read() if s: text = s.decode('utf-8') text = text.replace('# special_comment<<', '<<') text = text.replace('# special_comment@', '@') if 'error: cannot format -: Cannot parse:' in text: z = re.search(r'Cannot parse:.*', text) g.error(z.group(0)) else: undoData = c.undoer.beforeChangeNodeContents(p) pb = text.strip() c.undoer.afterChangeNodeContents(p,'Format with black', undoData) c.executeMinibufferCommand('execute-script')
تم القيام بما يلي:- نحن نأخذ النص من العقدة
- نضع تعليمات محرر ليو الخاصة في التعليقات
- قم بتشغيل الأداة المساعدة وحدة التحكم
- نمرر النص إلى الأداة
- قراءة استنتاجها
- نعود إلى المكان تعليمات خاصة
- إذا لم تكن هناك أخطاء ، فاستبدل النص الحالي بالتنسيق
- قم بتشغيل رمز العقدة
ستكون هذه العينة كافية لإطلاق أي شيء على أساسها.الآن دعونا نلقي نظرة على نسخة جميلة وواضحة للاستخدام العملي لمحرر ليو. يحتوي نظام Python البيئي على العديد من الحلول لإنشاء تطبيقات واجهة المستخدم الرسومية ، أحدها إطار عمل Kivy. من الميزات المهمة في هذا الإطار القدرة على تحميل وصف واجهة بلغة خاصة من ملف نصي. سيساعدنا محرر Leo أولاً على تخزين رمز ووصف الواجهة في مساحة واحدة ، وثانيًا ، سيحل محل تحرير النص بتحرير شجرة ، وهو ما سيقربنا أكثر من رسومات واجهة wysiwyg.
ما الحقائق التي يمكن استخلاصها من لقطة الشاشة أعلاه:- Leo Editor Kivy
- RUN make_GUI, make_py,
أعلاه ، يمكنك إلقاء نظرة على كيفية ظهور وصف الواجهة في شكل تجميع. قد يكون هذا بنكهة ، ولكن يبدو أن المزرعة الجماعية الموجودة على اليسار هي حل صناعي أكثر قابلية للإدارة. الإصدار الصحيح يطلب عمل أخطاء مطبعية فيه مساء الجمعة.نمر إلى الفرع مع الرمز.
نظيفة جدا وهذا واضح. نحن لا نولي اهتماما ل DATAGRAPH. وماذا عن الفصول؟
تم إغلاق الدائرة ، ثم ما حدث لهذه القصة جاء في شكل تطبيق مؤقت لمتصفح الفئة لبيثون. رؤوس العقدة ليست مجرد تعليقات ؛ يتم استخدام محتوياتها عند إنشاء ملفات .py. تشكل مستويات تداخل الفئة تلقائيًا تسلسل هرمي. كل شيء ونحن نعبد.
KA-EE-FF !!! لا تركز على معنى ما يحدث ، يتم إلقاء الدروس للحصول على لقطة شاشة.يمكن القيام بشيء مماثل على الوظائف العارية لأقسام الملفات ، ولكن سيتعين عليك تحديد جميع بنيات اللغة بشكل صريح (def ، class ...) ، ومع أي تغييرات ، سيكون من الضروري تذكر إجراء العديد من التصحيحات هناك (ورؤوس تعليق العقد غير المجدية أيضًا. ).ومرة أخرى ، حول مساحة واحدة من التعليمات البرمجية وواجهة. أولاً ، تذكر بحث التنقل ، والذي يسمح لك بالبحث السريع عن معالجات التعليمات البرمجية عن العناصر المرئية والعناصر المرئية من التعليمات البرمجية.
ثانياً ، لا تزال هناك ميزة متوقعة مثل محرر نصوص إضافي.
قفز!
لذلك ليست هناك حاجة للتشغيل ذهابًا وإيابًا مع التحرير المتبادل المعقّد للعقد.بالمناسبة:
حرية الفكر
في النهاية سيكون هناك القليل غير طبيعي. لا ينبغي اعتبار كل ما هو موضح أدناه كدليل على الممارسات الهندسية الجيدة ، إنه مجرد بذرة لتبلور أفكارك الشخصية.نقطة البداية للتجربة الأولى: إذا كانت معظم البرامج تشارك في إنتاج صفائف بيانات أخرى بشكل متكرر من صفيف بيانات واحد عدة مرات ، فلماذا لا تنشئ كتلة بناء بسيطة موصوفة من قبل فئة عالمية واحدة مع واجهة استقبال / إخراج بيانات موحدة من أجل ربط بصريا كتل مماثلة في شجرة محرر ليو ، في صورة البرمجة على الرسوم البيانية (كتل وظيفة). مع الاختلاف في أنه سيكون نظامًا هجينًا من فئة البلوك ، وسيتم استخدام كل طريقة لوصف الكود وفقًا لأقصى فائدة طويلة الأجل.يجب على الوحدة الوظيفية الأولية: أن يكون لها مدخلات لتلقي المعلومات ، وتكون قادرة على الاستجابة لنوعها ، ومعالجة المعلومات الأولية ، وحزم نتائج المعالجة في تنسيق للإرسال ، وترجمة النتيجة إلى الخارج.
لنفترض أن هناك مهمة جريئة تتمثل في تحليل المواقع. سنحتاج الكتل التالية:- مكون الشبكة
- محلل صفحة الويب
- منع للاتصال من البيانات الواردة واجهة رسومية
يظهر أدناه الحد الأدنى من التطبيق العملي للكتلة الشاملة بما يكفي ، والتي تتناسب مع فرع الفصل.
بالطبع ، يمكن لكل كتلة خرسانية إعادة تحميل الطرق النموذجية بطريقتها الخاصة إذا تمت ملاحظة قاعدتين بدقة:- في كل كتلة ، تستدعي طريقة فك التشفير بالضرورة العملية ، والتي بدورها تستدعي التشفير
- تستدعي طريقة التشفير طريقة فك التشفير على جميع الكتل المسجلة كمخرجات.
وهذا هو: توافر التوحيد الهيكلي وتجانس تبادل المعلومات مضمونة.
نفس الشيء ، ولكن بشكل أكثر وضوحًا:- المنتج الأصلي يكمن في اللوحة اليسرى.
- فك شفرة يعد المنتج للمعالجة
- بعد ذلك ، تنفذ الكتلة وظيفتها الرئيسية في طريقة العملية
- يتم حزم المنتج عن طريق ترميز
- يتم نقل المنتج المعبأ إلى وحدات لاحقة
تبين أن كل كتلة مستقلة تمامًا ، والشيء الوحيد الذي يحتاج إلى معرفته عن العالم الخارجي هو طريقة محددة لتحليل البيانات الواردة. الرمز العالمي مسؤول عن التنفيذ المحدد لربط الكتل معًا. نتيجة لذلك ، إذا كان لدينا العديد من خطوط الأنابيب المماثلة المتاحة ، يمكنك ببساطة نسخها ككل ، فقط من خلال إجراء تصحيحات على عمليات تنفيذ محددة لأساليب العملية.في الصورة التالية ، يمكنك ملاحظة شيء مشابه جدًا للعمل مع الفئات الموضحة في القسم السابق. الفرق هو أن تداخل العقد لا ينشئ العلاقة بين الوالدين والطفل ، ولكن العلاقة بين المدخلات والمخرجات من الكتل المقابلة. لتنظيم تبادل البيانات مع الكتل غير المجاورة ، يتم استخدام عكاز في شكل إعلان صريح عن المخارج ، وهو ما يبرره عدد قليل من هذه الحالات.
مع هذا النهج ، يصبح عدد خطوط الأنابيب غير مبال: اثنان منها أو 50. عدد مراحل معالجة المعلومات غير مهم (ضمن حدود معقولة) ، وهذا لا يؤثر على بساطة الفهم ، على عكس تورم وحدات النص. عند نسخ الناقلات في خطوة واحدة ، يتم تشكيل سلسلة جديدة كاملة. يتم ترتيب كل شيء بشكل متطابق تمامًا ، فمن السهل إجراء تغييرات حتى بعد 5 سنوات ، والمبدأ المنهجي لتنظيم الوظائف هو نفسه ، ليست هناك حاجة لإنشاء قلاع أثيري في الرأس من التجريد.
إرفاق خطوط أنابيب مخصصة لا يشوه الصورة العامة ، لأن منطق العمل مع البيانات التعسفية متطابق دائمًا.
القصة السخيفة الثانية. كنت بحاجة إلى صنع لعبة Kvent (تناظرية مباشرة للعبة المعروفة داخل لعبة معروفة على نطاق أوسع ، للعبة باستخدام أوراق اللعب القياسية). هناك العديد من الطرق المختلفة لتنظيم دورة اللعبة ، أحد الخيارات الساذجة هو جهاز الدولة. مع جهاز الحالة ، كل شيء جيد وبسيط من الناحية النظرية ، في الممارسة العملية ، يصبح دعم أكثر من 7 حالات في أي برنامج حقيقي تدريجيًا دون إضافة بضع طبقات من التجريد. في هذه المرحلة ، اعتقدت أن الصيانة المرئية لآلة الحالة في شكل شجرة تعد خيارًا مثيرًا للاهتمام.
نكتب مولد رمز البرنامج من شجرة ، وينتج النتيجة التالية:
لا يوجد خوف.
التالي يأتي تغيير الشرط حسب الحالة. يتم ذلك بشكل مثير للريبة.
لقد كانت مجرد مجموعة من البطاقات مع استبدال زوج من البطاقات التعسفية. حسنًا ، شارك جهازًا واحدًا في العديد من الأجهزة.
بعد ذلك ، يتم إنشاء منطق معالجة جولة اللعبة.
في هذه المرحلة ، يتم الحد من قابلية التطبيق العملي لمثل هذا الوصف لجهاز الحالة ، على الرغم من أن الشجرة تبدو زاحفة فقط إذا تم نشرها عن قصد بنسبة مائة بالمائة. ولكن لا تزال هناك تأثيرات غير محققة تمامًا لتأثير البطاقات مع الصور على اللعبة. يمكن افتراض أن جهاز الحدث لمثل هذه المهمة سيكون حلاً أفضل. ومرة أخرى ، من السهل جعله على الأشجار ؛)
الصيحة ، النهاية
في Leo Editor ، هناك نقص حاد في الإكمال التلقائي العادي وإبراز متعدد للكلمة المحددة ("تسليط الضوء الذكي" في المفكرة ++). لكن حتى مع هذه العيوب الدهنية ، من السهل تحملها ، لأنه بمجرد أن تجربها ، يكون من المستحيل بالفعل الاستغناء عن هذه الأداة المريحة التي يمكنك من خلالها طلاء بيئتك الشخصية دون أي جهد. هل هناك أي شيء مماثل أو أفضل في العالم؟ هناك الكثير من الوحوش بين IDE ، فهي مليئة للغاية بالوظائف الذكية الذكية الذكية ، ولكن أي منهم يعطي قوة مماثلة على المعلومات وأي منهم يوفر الكثير من الحرية في تنظيم سير العمل؟فكرة ، المادة ، أداة ، المنتج. في عالم الهندسة ، تتيح لك أداة الجيل السابق الانتقال إلى الجيل التالي من الأدوات الأكثر تطوراً. لقد انتقلنا من تدريبات يدوية إلى أجهزة متنامية تضم القطط التي تستخدم الكهرباء. البرمجة معلقة في مرحلة المخارط الجيدة ، ولكن بدلاً من التعمق ، نناقش أي سبيكة أفضل من القاطع ، ويجب أن تتغذى من الأعلى أو من الجانب. محرر ليو ليس هو الحل لأسئلة الغد ، بل هو إشارة إلى ما يمكن القيام به بشكل أفضل.النقطة ليست أن أحد المبرمجين يمكنه حل المشكلة عن طريق كتابة الكود ، في حين أن الآخر "يدفع" نفس الشيء (مشروطًا). تتيح لك الأداة التي يمكنك من خلالها النقر فوق "مشروط" حل المشكلات التي لم يكن من الممكن الوصول إليها من قبل من حيث الوقت والتعقيد. في المستقبل ، سنحتاج إلى برامج تكتب في الوقت الحقيقي ملايين البرامج ذات الصلة ، وليس لدينا شيء لإدارة تعقيد هذا النطاق.بشكل عام ، اصنع واقعك ، وإذا لم تكن هناك أدوات ضرورية لذلك ، ففعله.
UPD. أمثلة التطبيق
الادارية : مكتبة القيادة. يمكنك فقط تخزينه ، يمكنك تشغيله كما هو ، يمكنك استخدام إعدادات الوسيطة داخل الشجرة. على سبيل المثال ، قم بتنظيم العمل باستخدام عدة قواعد بيانات.
التوليف الخوارزمي للموسيقى : تنظيم المسار
تضمين : تنظيم تعسفي للكود في حال كانت البيئة الخاصة بك محدودة في الوسائل.هناك خياران:1. تقسيم البرنامج إلى أقسام بالترتيب الأكثر ملاءمة2. إذا لم يكن للغة وظائف ، فيمكن محاكاتها باستخدام phantoms ،
هناك ثلاث طرق لتنظيم ترتيب تنفيذ التعليمات البرمجية:

Pentester : نقل ترسانتك المعتادة إلى "ضربة الكوبالت" الشخصية "