Beri aku tuas, tumpuan, ruang kaki dan selotip yang diperkuat
Bahkan jika Anda mencoba, Anda tidak dapat dengan singkat menggambarkan bagaimana lubang kelinci yang tidak berdasar menanti Anda. Ini adalah salah satu kasus langka ketika, untuk menyadari apa yang akan dibahas, perlu mendengarkan pidato sampai akhir. Setelah mempelajari langkah-langkah dalam manual ini, semua orang akan menemukan sesuatu untuk diri mereka sendiri: editor “teks” esoteris Leo Editor, dengan segala esensinya, menyerukan penggunaannya dengan cara yang paling menakjubkan.
Isi
1. Prolog ................................... 2
2. Menginstal Leo Editor ..................... 2
3. Pengaturan ................................ 4
4. Mengenal antarmuka ................. 7
5. Pembuatan file eksternal ................. 14
6. Penggunaan bagian bernama ........ 18
7. Inklusi serakah ........................ 21
8. Sihir sederhana ...................... 24
9. Sisi kebalikan dari werewolf ............... 30
10. Visualisasikan ini ........................ 33
11. Konten dan formulir ...................... 36
12. Saya akan membangun IDE untuk diri saya sendiri .................... 39
13. Kebebasan berpikir ........................... 49
14. Hore, akhir .............................. 58
15. UPD. Contoh aplikasi ................. 58
Prolog
Ketika Anda menulis dalam bahasa pemrograman apa pun, selalu ada kekurangan akut browser kelas dari Smalltalk, perasaan yang terus-menerus mengganggu bahwa tangan Anda terikat dan kaki Anda lemas. Dan itu juga terjadi bahwa Anda sering mencari satu hal di Internet, dan Anda menemukan sesuatu yang sama sekali berbeda, tetapi begitu indah sehingga alasan awal pencarian hilang dengan latar belakang cakrawala yang terbuka. Pencarian untuk frase "browser kelas python" menghasilkan satu ton sampah, tetapi sebuah berlian yang tidak terpotong terletak di gunung ini, samar-samar berkilau, tidak menarik minat yang luas, menunggu mata yang penuh perhatian dan pikiran yang ingin tahu untuk memperhatikan dan mengambilnya.
Instal Leo Editor
Proyek ini adalah lintas platform, proses instalasi disediakan untuk platform Windows. Untuk memulai editor, Anda memerlukan Python dan perpustakaan Qt. Opsi instalasi yang dijelaskan adalah yang paling canggih untuk pengguna yang tidak siap untuk menderita, para profesional dapat bertindak atas kebijakan mereka.
Instal manajer ruang kerja programmer Miniconda python. Solusi ini memungkinkan Anda untuk secara serius mengurangi kemampuan untuk mendapatkan labu dan bukannya komponen yang terhubung dengan benar, dan dalam kasus kebuntuan yang sewenang-wenang, tanpa kesulitan memutar kembali ke keadaan nol dan dengan cepat beralih ke pengujian opsi penyetelan yang berbeda.
Dari halaman
unduh, kami
mengunduh pemasang Windows 64-bit Python 3.7 Miniconda3. Kami menetapkan ketika pertanyaan tentang tanda centang muncul, aktifkan keduanya.
Selanjutnya, jalankan baris perintah (tombol [Win + R], "cmd", [Enter]). Kami mengetik:
conda

Tidak ada kesalahan, ada akses langsung ke conda. Kami memeriksa ketersediaan versi yang dibutuhkan pelaksana bahasa:
python -V

Di tempat.
Kami melihat versi editor apa yang tersedia untuk instalasi:
pip install leo==
Kami lebih suka versi terbaru tanpa huruf dalam nomor:
pip install leo==6.1
Setelah mengunduh, membongkar dan memasang, kami mencoba keberuntungan kami: kami meluncurkan interpreter python, terhubung ke komponen editor, mulai editor
python >>>import leo >>>leo.run()

Kustomisasi
Jika pintasan untuk peluncuran tidak muncul di desktop, maka tambahkan sendiri:
Jalur ke
peluncur editor:
% USERPROFILE% \ Miniconda3 \ Scripts \ leo.exeIkon path:
% USERPROFILE% \ Miniconda3 \ Lib \ situs-paket \ leo \ Ikon \ SplashScreen_trans.ico
Saya tidak terlalu menyukai tampilan tema visual asli saya, jadi saya harus membuatnya sendiri. Untuk menggunakannya, Anda harus
mengunduhnya terlebih dahulu. Bebas virus 1000%. File
python.py adalah deskripsi untuk elemen sintaksis python yang membedakan warna. Itu harus dimasukkan ke dalam
% USERPROFILE% \ Miniconda3 \ Lib \ situs-paket \ leo \ mode \ dengan penggantian file sebelumnya. Apa demi Anda yang menyerah bahasa python akan menjadi jelas nanti. File yang tersisa dari arsip harus disalin ke
folder% USERPROFILE% \ Miniconda3 \ Lib \ situs-paket \ leo \ themes \ folder.
Sekarang Anda harus mengaktifkan tema di pengaturan pengguna.

Klik pada elemen @settings, lalu gunakan tombol [Insert] untuk menambahkan elemen bersarang baru. Rekatkan teks:
@string theme-name = monokai.leo
Untuk menyimpan perubahan, tekan [Enter]. Jika mengedit nama elemen secara tidak sengaja dinonaktifkan, Anda dapat mengaktifkannya dengan mengklik dua kali pada elemen atau dengan menekan kombinasi [Ctrl + h].

Mulai ulang dengan menyimpan perubahan.

Asosiasi dengan file ".leo" akan muncul secara otomatis, tetapi jika tidak, maka kami akan menggunakan solusi bawaan.

Sampai baru-baru ini, ini tidak bekerja tanpa amandemen, dan sekarang mereka telah diperbaiki, seolah-olah, hehe.
Mengenal antarmuka

Pada pandangan pertama, kita memiliki editor teks terstruktur biasa (editor garis besar bahasa Inggris, outliner) di hadapan kita, klon dari
treepad yang dicintai oleh banyak orang (arsip web, di luar kantor, sayangnya, telah dinonaktifkan karena masalah keuangan pengembang). Memang, ada pohon dan ada area untuk memasukkan teks milik simpul pohon yang dipilih. Area multifungsi dengan Tab nama yang tidak rumit, selain log, menyimpulkan sesuatu yang bermanfaat, mari kita mulai dengan mencari teks.

Tampaknya menjadi hal stereotip, tetapi ada eksentrisitas, alih-alih tombol di layar, diusulkan untuk menekan tombol keyboard. Dan perintah find-all tidak memiliki kunci yang ditetapkan sama sekali. Sekarang semua perhatian ada di bagian paling bawah jendela.

Tru-geeks pasti tersedak bir. Ya teman-teman, ini pinjaman langsung dari emacs. Sebagian besar operasi editor dapat dimulai menggunakan baris perintah bawaan.



Hasil pencarian untuk semua kata yang muncul "the" ditampilkan dalam simpul pohon baru yang sengaja dibuat. Pertanian kolektif! (Jangan khawatir, pencarian elemen-bijaksana "berjalan" melalui kejadian yang terdeteksi, seperti pada paman yang sehat).

Anak muda, jangan tersebar! Itu perlu untuk mengguncang lepuh tertidur. Anda selalu dapat berkeliling tepi zona gelap Leo Editor ini. Program ini sangat mirip dengan Linux: hasrat, seberapa banyak semuanya dilakukan oleh berbagai penggemar untuk diri mereka sendiri, semuanya membutuhkan studi yang cermat, kinerja yang satu berbeda dengan implementasi yang lain, selalu mengejutkan untuk menemukan chip baru yang diletakkan seseorang, tetapi tidak benar-benar menggambarkan, dan untuk semua ini, ada puncak gunung es di mana ia duduk dengan nyaman, dan jika Anda enggan untuk bertualang, Anda tidak dapat membungkus diri Anda di kedalaman suram.

Area tag memungkinkan Anda untuk menetapkan label ke node dan kemudian bekerja dengannya. Rupanya digunakan untuk menambah dimensi baru pada kedalaman kekacauan pemesanan. Kami memilih node, menulis pengenal tag, klik "+". Kami memilih node lain, cukup tekan "+" di atasnya, tag aktif akan ditetapkan. Kami memilih simpul ketiga, tulis "Schmucker", tekan "+". Saat ini kami memiliki dua simpul dengan tag "zutsker" dan satu simpul dengan tag "shmutsker".

Memilih tag dari daftar tag mengarah ke daftar node yang terkait dengan tag dengan nama yang dapat Anda navigasikan. Untuk memilih tag dari sebuah node, klik kanan padanya.

Berikutnya adalah panel Nav yang sangat berguna. Ini membantu untuk dengan cepat mengabaikan node di mana kata tertentu muncul. Karena cara mempertahankan file .leo adalah kekacauan besar dengan tingkat organisasi yang tinggi, navigasi melalui pencarian cocok dengan siklus alami aplikasi.

Penggunaan umum editor teks struktural adalah akumulasi dari basis pengetahuan pribadi. Penggunaan kedua yang paling umum adalah untuk memelihara daftar tugas. Tab berikutnya membantu mewarnai proses ini dengan prioritas, tenggat waktu, dan status implementasi.

Menu konteks simpul memungkinkan Anda untuk menggunakan sebagian besar kemampuan dari tab Tugas.

Buat file eksternal
Bagaimana mengedit teks dan menggunakan pohon itu tidak akan sulit untuk mencari tahu sendiri, jadi kami melanjutkan untuk menyelam ke dalam jurang kemungkinan yang tak terbatas untuk mentransfer abstraksi ke dunia nyata. Buat file baru.

Nama single node
NewHeadline
diubah menjadi
@file 1.txt

Tambahkan beberapa teks ke isi simpul.

Simpan file .leo di suatu tempat. Buka folder tempat file .leo berada. Kami perhatikan ada 1.txt. Kami membukanya.

Apa yang kami bangun? Kami mengonfigurasi ekspor salah satu simpul file .leo ke file eksternal.
Sampah apa yang ada di sekitar teks kita? Metadata yang memungkinkan Anda untuk membuat ulang struktur saat memuat file kembali ke Leo Editor, yang diperlukan jika file tersebut akan dimodifikasi di suatu tempat di luar. Sebagian besar file python dari kode sumber Leo Editor dapat dijatuhkan dengan drag-n-drop ke editor dan menemukan bahwa mereka berisi deskripsi struktur:

Tetapi jika kita sama sekali tidak membutuhkan fungsi unggah terbalik, tetapi sebaliknya menginginkan file tersebut tidak mengandung byte yang asing, maka ini dilakukan dengan mengganti direktif
@file
dengan
@file-nosent
(tanpa sentinel).

Setelah menyimpan perubahan dalam file .leo, file eksternal akan diperbarui secara otomatis.

Menggunakan bagian bernama
Setiap node adalah entitas independen yang terpisah, yang secara default tidak memiliki informasi tentang tetangganya. Jika kami mencoba menambahkan struktur baru ke simpul yang dilampirkan ke file eksternal dan klik simpan, kesalahan akan terjadi.

Kami diberitahu dua masalah:
- Kami memiliki "test" node yang menggantung di udara (relatif terhadap file eksternal, karena ada node di dalam struktur .leo, tetapi kami tidak menunjukkan bagaimana itu harus ditambahkan ke file eksternal, oleh karena itu ada kesalahan).
- Sampai masalah dengan simpul gantung diselesaikan, tidak ada perubahan lain di dalam
@file-nosent 1.txt
akan disimpan ke disk.
Cara pertama untuk menambahkan tautan antar node adalah melalui bagian. Format khusus untuk nama bagian terlihat seperti ini:
<<my_name>>
Ini memungkinkan Anda untuk menyatakan simpul bersarang sebagai bagian bernama, nama yang sama harus ditentukan di tempat simpul eksternal di mana konten dari simpul bawahan harus ditempatkan.


File yang dihasilkan:

Contoh yang sama pada file nyata, bagian impor dependensi eksternal secara eksplisit dialokasikan ke node yang terpisah.

Inklusi serakah
Tetapi apa yang harus dilakukan jika kita ingin membangun bagian bersarang di bagian bersarang dan meletakkan bagian lain di dalamnya? Anda dapat bertindak secara naif:

Tetapi untuk keinginan alami seperti itu, ada sebanyak dua arahan:
@others
dan
@others
.
Arahan
@all
hambar merangkai teks-teks dari semua node bersarang.

Tentu saja, itu semua tergantung pada format file yang Anda butuhkan di output, tetapi mungkin Anda akan lebih menyukai arahan
@others
, yang memungkinkan Anda untuk mewujudkan struktur yang dirancang dalam bentuk yang diinginkan. Opsi yang menyedihkan:

Membungkus bagian dengan kata kunci:

Pemformatan indentasi:

Bagaimana? Apakah mulai terbentuk? Kami hampir tidak bisa bersenang-senang.
:: ::
Sihir sederhana
Akhirnya, kami mulai membuat kode. Tugas ini akan bodoh, tetapi berisi elemen dasar khas dari program yang bermanfaat. Buat simpul baru di mana saja di file yang ada atau yang baru. Baris pertama menunjukkan direktif
@language
untuk mengaktifkan penyorotan kode. Jika di bawah bahasa penyorotan Anda di folder
% USERPROFILE% \ Miniconda3 \ Lib \ situs-paket \ leo \ mode \ tidak, maka tidak ada yang melarang menambahkannya sendiri.

Misalkan informasi yang akan kita proses disimpan oleh sebuah piring di file csv.
Kita perlu: menghitung jumlah karakter "0" yang ditemukan di kolom Count
Kita harus:
- Konversi teks menjadi struktur data sampel
- Lakukan iterasi dengan menghitung

Kami menguraikan program sesuai dengan algoritma yang dikembangkan. Langkah kedua setelah membaca file, pisahkan teks menjadi beberapa baris. Apa langkah pertama pindah ke simpul bawahan Baca.

Selanjutnya, buat array kamus yang sesuai dengan data dalam tabel. Node ini ada di level atas.

Dan langkah terakhir.

Sementara itu, file main.py yang dihasilkan akan terbentuk pada disk.

Hore, kami hebat. Tapi tiba-tiba kami memiliki keinginan yang tidak dapat dipahami untuk menghitung jumlah baris signifikan dalam file csv yang sama. Tidak masalah, buat copy.paste dari simpul utama, ubah nama file output, modifikasi kode langkah terakhir. Kami mendapatkan hasilnya.

Dan di sini kegembiraan kita memberi jalan bagi kesedihan, karena nama file CSV mungkin menjadi berbeda, yang berarti bahwa jika kita memperbaikinya dalam satu program, maka dalam program kedua kita pasti akan kehilangan penglihatan dan dengan demikian mengurangi kesenangan menggunakan kembali kode.
Sedih dan cantik, ini Editor Leo! Ini telah disinkronkan salinan node. Apa? Alih-alih menyalin isi node, Anda dapat menempelkan node yang disalin dalam mode "clone", "phantom", dan kemudian mengubah salah satu node yang terhubung akan ditampilkan di node lain. Ini adalah konsep yang sangat kuat yang memungkinkan Anda untuk menyelesaikan kontradiksi yang melekat dalam organisasi informasi di pohon.
Salin simpulnya.

Kami menyisipkan sebagai "hantu".

Hantu memiliki ikon yang berbeda. Setiap perubahan dalam nama, konten, atau node bawahan tercermin dalam salinan. Kami menghapus simpul Baca lama dan memverifikasi bahwa modifikasi nama file sekarang dilakukan secara serempak di mana-mana.

Berbicara dalam bahasa matematika, "hantu" memungkinkan Anda untuk beralih dari pohon ke grafik asiklik penuh. Sebuah pohon di Leo dapat memiliki lebih dari satu root!

Ini memungkinkan Anda untuk melakukan hal-hal fantastis: menyulap dengan representasi informasi, mengikat wadah data yang heterogen, memiliki salinan data aktual dalam jumlah tak terbatas dalam satu proyek, memuat data ke dalam pohon Leo yang tidak dapat ditempatkan di pohon biasa.
Werewolf Reverse
Ayo lakukan percobaan. Buat simpul baru. Tambahkan teks ke dalamnya.
g.es( len("This is test".split()) )

Tekan [Ctrl] + [b].

Chpok, malam yang indah. Ya, yang kita miliki di sini, ternyata, interpreter Python adalah built-in, yang dapat mengeksekusi teks dari node sebagai kode. Jika bagian terhubung ke node sesuai dengan aturan untuk bergabung dengan bagian ke file eksternal, maka kode dari mereka juga dieksekusi, yang berarti tidak ada kekuatan yang dapat menghentikan kita dalam pertempuran dengan kekacauan.

Contoh kehidupan: kode untuk tutorial sangat enggan untuk menulis secara normal, tetapi jika ini adalah sesuatu yang lebih dari 50 baris, maka kekacauan yang menjadi tidak dapat dibaca pada hari berikutnya dijamin. Perlu ditambahkan bahwa banyak pelatih menggunakan set sumber data yang sama, melakukan berbagai manipulasi pada mereka. Hal di atas berlaku untuk "prototipe" atau "utilitas alat 1-2 kali". Di tempat ini, chip Leo Editor yang dijelaskan sangat berguna.

Itu saja - ini adalah kode yang melakukan sesuatu di dalam Leo Editor, tanpa mengunggahnya ke file .py.
Berbeda dengan lembar spageti dalam gambar, Anda dapat segera memahami esensi umum dari apa yang terjadi. Misalnya, dalam program “4 Linear Regression”, data dari Internet pertama kali ditulis ke file. Dan kemudian berbagai manipulasi dilakukan pada model numerik "regresi OLS", dibangun sesuai dengan file. Selain itu, jika kita perlu menggunakan data lain atau pengaturan model lainnya, maka itu sudah cukup untuk membuat perubahan dalam satu node, karena bagian-bagian program yang digunakan kembali diimplementasikan oleh "hantu". Program ini dibagi menjadi 6 bagian independen, yang masing-masing diluncurkan secara terpisah, tetapi pada saat yang sama mulai dijalankan dari satu titik umum.
Ketika kode mata pelajaran yang sama disimpan secara terorganisir dalam satu tempat, sangat nyaman, bahkan jika banyak waktu berlalu, maka dengan menggunakan pencarian navigasi Anda dapat dengan cepat menemukan beberapa metode tertentu, dan organisasi struktural akan membantu menavigasi apa yang terjadi. "Hantu" memungkinkan Anda untuk mengubah kode non-linier yang kompleks menjadi serangkaian tindakan berurutan, sementara entitas "kloning" tidak menggandakan entropi, tetapi menguranginya, karena pengulangan diganti dengan mengikat, dan tingkat abstraksi tambahan tidak dibuat.
50 file tersebar dengan file sumber adalah 50 file tersebar. 50 node dengan kode sumber adalah basis pengetahuan dengan keinginan internal untuk mengatur diri sendiri.
Visualisasikan itu
Sebelum memulai tingkat kesulitan Nightmare, mari kita kembali ke antarmuka.
Panel editor dapat diseret untuk mengatur ruang kerja Anda dengan cara terbaik. Setiap file mempertahankan pengaturan penampilannya sendiri. Anda dapat menutup semua panel kecuali pohon. Untuk mengembalikan panel kembali, klik kanan pada header pohon.

Di menu yang sama ada Render tertentu. Hal kecil ini dirancang sesuai dengan namanya untuk menampilkan segala sesuatu di dunia.
Secara default, render mencoba membuat teks node sebagai
reStructuredText . Mode operasi lainnya termasuk dengan memaksa jenis konten atas nama node.
Seperti yang Anda lihat dari tabel, Render tidak berfungsi dengan penuh semangat, kabar baiknya adalah Leo Editor dapat diperluas dengan plugin, termasuk yang visual. Sebagai contoh, saya perlu memuat angka ke dalam tabel dan menggambar grafik, sambil mengubah data awal seribu kali lipat.

Kode plugin visual minimum terlihat seperti ini:
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()
Plugin diperlukan:
- Simpan ke
%USERPROFILE%\Miniconda3\Lib\site-packages\leo\plugins\
- Daftarkan di file myLeoSettings.leo di
@settings\@enabled-plugins

Anda dapat membaca tentang cara membuat plugin di
sini , jika tidak sabar untuk mendapatkan informasi lebih lanjut, maka satu-satunya cara adalah mempelajari sendiri plugin viewrendered.py.
Kenapa ini semua? Sekali lagi untuk kemungkinan tanpa batas. Akses penuh ke QT memungkinkan Anda mereproduksi informasi dengan cara sewenang-wenang, atau memasukkannya dengan cara yang paling tidak terduga.
Konten dan Formulir
Segala sesuatu yang dijelaskan di atas terlihat seperti alat yang nyaman untuk menyelesaikan berbagai tugas layar, tidak lebih. Konversi dari pohon ke file eksternal adalah linier dan dibatasi oleh bingkai yang ketat. Bahkan nama-nama node memainkan peran komentar, tetapi tidak membawa fungsi bermanfaat lainnya. Tetapi dalam praktik ternyata sangat tepat untuk menggambarkan entitas yang kompleks untuk pemikiran manusia dengan pohon, tetapi pada saat yang sama format untuk mesin mungkin tidak terlihat seperti apa pun dan / atau mungkin tidak memiliki struktur yang berbeda sama sekali. Sebagai contoh sederhana, ambil HTML. Akan sangat mudah dan mudah (penilaian nilai) untuk mempersiapkan markup dalam bentuk ini:

Semuanya secara struktural konsisten dan visual, tidak mungkin membuat kesalahan dengan tidak menutup atau salah menempatkan tag, dan membuat perubahan skala apa pun adalah hal yang mendasar. Meskipun file output HTML akan "sebanding secara linear" dengan struktur fiktif ini, mekanisme lampiran bagian tidak mampu menghasilkan yang berikut:
- Buka-tutup tag
- Tetapkan teks simpul sebagai atribut tag
- Teks node dengan nama khusus "> <" ditempatkan di dalam tag yang sesuai
Yah, tentu saja, Leo Editor memberikan akses tanpa batas ke pohon dari kode simpul. Baik untuk membaca dan menulis. Apa yang memungkinkan untuk melakukan modifikasi sewenang-wenang atas representasi informasi untuk manusia dan mesin. Dalam arah apa pun dan sebanyak yang Anda suka. Anda dapat mengunduh format tertentu, membangunnya kembali menjadi pohon yang dapat dimengerti untuk ANDA, membuat perubahan dan mengubahnya kembali. Jika format output sepele, maka Anda dapat menulis file eksternal menggunakan Python. Jika formatnya kompleks dan / atau sejumlah besar data hadir, maka menguntungkan untuk menghabiskan waktu menggeser data ke file node dengan bagian, karena ini sangat memudahkan debugging konversi.Deskripsi fungsi untuk bekerja dengan pohon:Fungsi lain dapat diambil dari sumber Leo Editor dan melengkapi file .leo, dan benar-benar tidak ada dokumentasi ( kecuali untuk halaman ini ) = (Omong-omong, artikel ini ditulis dalam Leo Editor.
Kode berikut digunakan untuk mengekspor pohon ke 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('.')
Saya akan membangun IDE untuk diri saya sendiri
Bukan python tunggal, jadi mari kita coba lengkapi diri kita dengan sudut di bawah ... apa pun. Pertama, akhirnya tekan tombol tombol script.
Tindakan ini mengarah pada tampilan tombol baru di bawah menu utama dengan nama simpul saat ini. Logika menunjukkan bahwa mengklik tombol yang baru dibuat ini akan mengarah pada upaya untuk mengeksekusi kode dari simpul yang terkait dengan tombol. Memang nyaman, tetapi tidak nyaman bahwa tombol akan menguap setelah restart editor. Untuk menjaga tombol tetap di tempatnya, Anda perlu menambahkan mantra khusus dalam nama node @button
dan restart Leo Editor.
Untuk setiap tombol pengguna, Anda dapat menetapkan hotkey menggunakan ekspresi. @key=
Untuk menjalankan skrip lain dari satu skrip, Anda harus memanggil fungsic.executeMinibufferCommand('FIRE')
. Setiap skrip dengan tombol tertaut masuk ke kumpulan perintah editor di bawah nama tombol, yaitu, ya, skrip Anda dapat dijalankan dari baris perintah editor juga.
Untuk menjalankan skrip node yang saat ini dalam fokus, dari skrip lain (seolah-olah dengan menekan [Ctrl] + [b]), perintah tersebut digunakan c.executeMinibufferCommand('execute-script')
.Misalkan kita memiliki beberapa kode yang disiapkan. Akan sangat bermanfaat untuk menjalankannya dari Leo Editor, dan akan sangat bagus untuk mendapatkan semua kesalahan dari konsol. Lihatlah contoh autoformatting kode Python di dalam node menggunakan utilitas Black yang terkenal. @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')
Berikut ini dilakukan:- Kami mengambil teks dari node
- Kami memasukkan instruksi khusus Leo Editor di komentar
- Luncurkan utilitas konsol
- Kami meneruskan teks ke utilitas
- Baca kesimpulannya
- Kami kembali ke tempat instruksi khusus
- Jika tidak ada kesalahan, maka ganti teks saat ini dengan yang diformat
- Jalankan kode simpul
Sampel ini akan cukup untuk meluncurkan apa pun atas dasar itu.Sekarang mari kita lihat versi yang indah dan jelas dari penggunaan praktis Leo Editor. Ekosistem Python memiliki beberapa solusi untuk membuat aplikasi GUI, salah satunya adalah kerangka kerja Kivy. Fitur signifikan dari kerangka kerja ini adalah kemampuan untuk memuat deskripsi antarmuka dalam bahasa khusus dari file teks. Leo Editor akan membantu kita, pertama, untuk menyimpan kode dan deskripsi antarmuka dalam satu ruang, dan kedua, itu akan menggantikan pengeditan teks dengan pengeditan pohon, yang dalam arti akan membawa kita lebih dekat ke sketsa antarmuka wysiwyg.
Fakta apa yang bisa diekstrak dari tangkapan layar di atas:- Leo Editor Kivy
- RUN make_GUI, make_py,
Di atas, Anda dapat melihat bagaimana deskripsi antarmuka terlihat dalam bentuk rakitan. Ini mungkin rasanya, tetapi pertanian kolektif di sebelah kiri tampaknya menjadi solusi yang lebih mudah dikelola dan industri. Versi yang tepat meminta untuk membuat kesalahan ketik di dalamnya pada Jumat malam.Kami lolos ke cabang dengan kode.
Sangat bersih Dan sudah jelas. Kami tidak memperhatikan DATAGRAPH. Dan bagaimana dengan kelasnya?
Lingkaran telah ditutup, lalu apa yang terjadi dengan kisah ini muncul dalam bentuk implementasi sementara dari browser kelas untuk Python. Node header bukan hanya komentar, isinya digunakan saat membuat file .py. Level bersarang kelas secara otomatis membentuk hierarki warisan. Semuanya seperti yang kita puja.
KA-EE-FF !!! Jangan berkonsentrasi pada makna dari apa yang terjadi, kelas dilemparkan untuk tangkapan layar.Sesuatu yang serupa dapat dilakukan pada fungsionalitas telanjang bagian file, tetapi Anda harus secara eksplisit menentukan semua konstruksi bahasa (def, class ...), dan dengan perubahan apa pun perlu diingat untuk membuat banyak koreksi di sana (dan header menggantung yang tidak berguna dari node juga )Dan lagi, tentang satu ruang kode dan antarmuka. Pertama, ingat pencarian navigasi, yang memungkinkan Anda dengan cepat mencari penangan kode untuk elemen visual dan elemen visual dari kode.
Kedua, masih ada fitur yang cukup diharapkan sebagai editor teks tambahan.
Hop!
Jadi tidak perlu lagi bolak-balik dengan saling mengedit node yang kompleks.Ngomong-ngomong:
Kebebasan berpikir
Pada akhirnya akan ada sedikit yang tidak wajar. Segala sesuatu yang diuraikan di bawah ini tidak boleh dianggap sebagai demonstrasi praktik rekayasa yang baik, ini hanya benih untuk mengkristalisasi ide-ide pribadi Anda.Titik awal untuk percobaan pertama: jika sebagian besar program terlibat dalam berulang kali menghasilkan array data lainnya dari satu array data berkali-kali, maka mengapa tidak membuat blok bangunan sederhana yang dijelaskan oleh satu kelas universal dengan antarmuka penerimaan / keluaran data terpadu untuk secara visual menghubungkan bersama blok-blok serupa di pohon Editor Leo, pada gambar pemrograman pada grafik (blok fungsi). Dengan perbedaan bahwa itu akan menjadi sistem kelas blok hybrid, dan setiap cara menggambarkan kode akan digunakan sesuai dengan manfaat jangka panjang maksimum.Unit fungsional dasar harus: memiliki input untuk menerima informasi, dapat menanggapi tipenya, memproses informasi awal, mengemas hasil pemrosesan dalam format untuk pengiriman, dan menerjemahkan hasilnya.
Misalkan ada tugas berani untuk mengurai situs. Kami membutuhkan blok berikut:- Komponen jaringan
- Pengurai halaman web
- Blokir untuk komunikasi data yang diterima dan antarmuka grafis
Implementasi praktis minimum dari blok universal yang cukup, yang cocok di cabang kelas, ditunjukkan di bawah ini.
Tentu saja, setiap blok beton dapat memuat ulang metode khas dengan miliknya jika dua aturan dipatuhi:- Di setiap blok, metode decode tentu proses panggilan, yang pada gilirannya panggilan mengkodekan
- Metode encode memanggil metode decode pada semua blok yang terdaftar sebagai output.
Yaitu: ketersediaan unifikasi struktural dan homogenitas pertukaran informasi dijamin.
Hal yang sama, tetapi lebih jelas:- Produk asli terletak di piring kiri.
- Decode menyiapkan produk untuk diproses
- Setelah itu, blok melakukan fungsi utamanya dalam metode proses
- Produk ini dikemas dengan encode
- Produk yang dikemas ditransfer ke unit berikutnya
Setiap blok ternyata sangat independen, satu-satunya hal yang perlu dia ketahui tentang dunia luar adalah cara spesifik untuk menganalisis data yang masuk. Kode universal bertanggung jawab untuk implementasi spesifik menghubungkan blok bersama. Akibatnya, jika kami memiliki beberapa saluran pipa serupa yang tersedia, Anda dapat menyalinnya secara keseluruhan, hanya dengan membuat koreksi terhadap implementasi spesifik dari metode proses.Pada gambar berikutnya, Anda bisa mengamati sesuatu yang sangat mirip dengan pekerjaan dengan kelas-kelas yang dijelaskan di bagian sebelumnya. Perbedaannya adalah bahwa bersarangnya node tidak membentuk hubungan orangtua-anak, tetapi hubungan input-output dari blok yang sesuai. Untuk mengatur pertukaran data dengan blok yang tidak berbatasan, kruk digunakan dalam bentuk pengumuman eksplisit keluar, yang dibenarkan oleh sejumlah kecil kasus tersebut.
Dengan pendekatan ini, jumlah pipa menjadi tidak berbeda: dua atau 50. Jumlah tahapan pemrosesan informasi juga tidak signifikan (dalam batas yang wajar), ini tidak mempengaruhi kesederhanaan pemahaman, berbeda dengan pembengkakan modul teks. Saat menyalin konveyor dalam satu langkah, seluruh rantai baru terbentuk. Semuanya diatur benar-benar identik, mudah untuk membuat perubahan bahkan setelah 5 tahun, prinsip metodologis pengorganisasian fungsi adalah sama, tidak perlu membuat istana halus di kepala dari abstraksi.
Melampirkan pipa kustom tidak mengubah gambaran keseluruhan, karena logika bekerja dengan data arbitrer selalu identik.
Kisah absurd kedua. Saya perlu membuat game Kvent (analog langsung dari game terkenal di dalam game yang bahkan lebih dikenal luas, untuk game yang menggunakan kartu remi standar). Ada banyak pendekatan berbeda dalam pengaturan siklus permainan, salah satu opsi naif adalah mesin negara. Dengan mesin negara, semuanya baik-baik saja dan sederhana dalam teori, dalam praktiknya, mendukung lebih dari 7 negara dalam program nyata secara bertahap menjadi membosankan tanpa menambahkan beberapa lapisan abstraksi. Pada titik ini, saya berpikir bahwa pemeliharaan visual mesin negara dalam bentuk pohon adalah pilihan yang menarik.
Kami menulis generator kode program dari pohon, menghasilkan hasil sebagai berikut:
Tidak ada rasa takut.
Berikutnya adalah perubahan kondisi oleh kondisi. Ini dilakukan dengan curiga.
Itu hanya kesepakatan kartu dengan penggantian sepasang kartu yang sewenang-wenang. Ok, bagikan satu mesin ke beberapa mesin.
Selanjutnya, logika untuk memproses putaran permainan lahir.
Pada titik ini, batas penerapan praktis dari deskripsi mesin negara seperti itu rusak, meskipun pohon itu tampak menyeramkan hanya jika sengaja dikerahkan seratus persen. Tetapi masih ada efek yang sama sekali tidak direalisasi dari pengaruh kartu dengan gambar pada jalannya permainan. Dapat diasumsikan bahwa mesin acara untuk tugas seperti itu akan menjadi solusi yang lebih baik. Dan lagi, mudah membuatnya di pohon;)
Hore, akhirnya
Di Leo Editor, ada kekurangan tajam pada pelengkapan otomatis normal dan beberapa penyorotan dari kata yang dipilih ("smart highlight" di notepad ++). Tetapi bahkan dengan kekurangan yang terlalu besar ini, mudah untuk direkonsiliasi, karena setelah mencobanya, sudah tidak mungkin dilakukan tanpa alat yang praktis ini, di mana Anda dapat dengan mudah mengecat lingkungan pribadi Anda untuk tugas apa pun. Adakah yang serupa atau lebih baik di dunia? Ada banyak monster di antara IDE, mereka sangat sarat dengan fungsi pintar-pintar-pintar, tetapi siapa di antara mereka yang memberikan kekuatan yang sama terhadap informasi dan mana di antara mereka yang memberikan begitu banyak kebebasan dalam mengatur alur kerja?Ide, Bahan, Alat, Produk. Di dunia teknik, alat generasi sebelumnya memungkinkan Anda untuk beralih ke generasi alat yang lebih canggih. Kami telah beralih dari latihan tangan ke perangkat yang tumbuh menampilkan kucing menggunakan listrik. Pemrograman melayang pada tahap mesin bubut yang baik, tetapi bukannya semakin dalam, kami berdebat paduan mana yang merupakan pemotong terbaik, dan benda kerja harus diumpankan dari atas atau dari samping. Leo Editor bukanlah jawaban untuk pertanyaan besok, itu adalah sinyal dari apa yang bisa dilakukan dengan lebih baik.Intinya bukan bahwa satu programmer dapat memecahkan masalah dengan menulis kode, sementara yang lain "mendorong" hal yang sama (kondisional). Alat di mana Anda dapat "mengklik" (bersyarat) akan memungkinkan Anda untuk memecahkan masalah yang sebelumnya tidak dapat diakses dalam hal waktu dan kompleksitas. Di masa depan, kita akan memerlukan program yang menulis jutaan program terkait secara waktu nyata, dan kita tidak memiliki apa pun untuk mengelola kompleksitas skala ini.Secara umum, ciptakan realitas Anda, dan jika tidak ada alat yang diperlukan untuk ini, lakukanlah, itu akan berhasil.
UPD Contoh aplikasi
Admin : perpustakaan perintah. Anda bisa menyimpannya, menjalankannya apa adanya, Anda bisa menggunakan pengaturan argumen di dalam pohon. Misalnya, mengatur kerja dengan beberapa basis data.
Sintesis algoritma musik : pengorganisasian trek
Embedder : pengorganisasian kode yang sewenang-wenang seandainya lingkungan Anda terbatas.Ada dua opsi:1. Membagi program menjadi beberapa bagian dalam urutan yang paling menguntungkan2. Jika bahasa tidak memiliki fungsi, maka mereka dapat disimulasikan menggunakan hantu.Ada
tiga cara untuk mengatur urutan eksekusi kode:

Pentester : mentransfer persenjataan Anda yang biasa ke personal Anda “Cobalt strike "