Scintillanet adalah kontrol Windows Forms, pembungkus, dan binding untuk komponen pengeditan kode sumber scintilla serbaguna.
"Serta fitur yang ditemukan dalam komponen pengeditan teks standar, Scintilla mencakup fitur yang sangat berguna saat mengedit dan men -debug kode sumber. Ini termasuk dukungan untuk gaya sintaks, indikator kesalahan, penyelesaian kode dan kiat panggilan. dan warna latar belakang dan beberapa font. " - scintilla.org
Scintillanet juga dapat digunakan dengan WPF menggunakan WindowsFormShost.
Scintillanet sedang dalam pengembangan aktif. Jika Anda menemukan masalah atau hanya memiliki pertanyaan, jangan ragu untuk menggunakan fitur masalah di halaman GitHub kami.
Versi yang dikompilasi yang siap produksi dapat diunduh dari Nuget atau halaman rilis.
Untuk yang terbaru dan terhebat Anda dapat membangun cabang master dari sumber menggunakan Visual Studio 2015.
Komunitas Scintillanet yang cukup bersemangat ada di sini di GitHub. Kami secara khusus menyarankan Anda melihat proyek -proyek berikut:
Proyek tambahan dan kode yang diterapkan pengguna dilacak di halaman resep yang dikirimkan pengguna wiki.
Proyek ini adalah penulisan ulang proyek Scintillanet yang diselenggarakan di Codeplex dan dikelola oleh saya dan orang lain. Setelah bertahun -tahun berkontribusi pada proyek itu, saya memutuskan untuk berpikir secara berbeda tentang API yang telah kami buat dan merasa saya bisa membuat yang lebih baik jika saya mau kembali ke kanvas kosong. Dengan demikian, proyek ini adalah penerus spiritual untuk Scintillanet asli tetapi telah ditulis dari awal.
Salah satu masalah yang diderita Scintillanet secara historis adalah fakta bahwa kontrol Scintilla asli beroperasi pada byte, bukan karakter. Versi sebelumnya dari Scintillanet tidak menjelaskan hal ini, dan ketika Anda berurusan dengan Unicode, satu byte tidak selalu sama dengan satu karakter. Hasilnya adalah API yang kadang -kadang diharapkan byte offset dan di lain waktu yang diharapkan mengimbangi karakter. Terkadang hal-hal akan bekerja seperti yang diharapkan dan waktu lain kegagalan acak dan pengecualian di luar jangkauan akan terjadi.
Tidak lebih. Salah satu fokus utama dari penulisan ulang ini adalah memberi Scintillanet pemahaman tentang Unicode dari bawah ke atas. Setiap API sekarang secara konsisten bekerja dengan offset dan rentang berbasis karakter seperti yang diharapkan oleh pengembang .NET. Secara internal kami mempertahankan pemetaan karakter ke offset byte (dan sebaliknya) dan melakukan semua terjemahan untuk Anda sehingga Anda tidak perlu khawatir tentang hal itu. Tidak ada lagi pengecualian di luar jangkauan. Tidak ada lagi kebingungan. Tidak ada lagi rasa sakit. Itu hanya berhasil.
Masalah Scintillanet paling populer kedua adalah kebingungan yang mendistribusikan DLL Scintillanet dan komponen asalnya, DLL scilexer. Scintillanet adalah pembungkus. Tanpa scilexer.dll yang berisi fungsionalitas inti scintilla itu bukan apa -apa. Sebagai komponen asli, scilexer.dll harus dikompilasi secara terpisah untuk 32 dan 64-bit versi windows. Jadi itu sebenarnya tiga DLL yang harus dikirim oleh pengembang dengan aplikasi mereka.
Ini terbukti titik rasa sakit karena pengembang sering tidak ingin mendistribusikan begitu banyak perpustakaan atau ingin menempatkannya di lokasi alternatif yang akan merusak mekanisme pemuatan DLL yang digunakan oleh Pinvoke dan Scintillanet. Ini juga menyebabkan sakit kepala selama waktu desain di Visual Studio karena alasan yang sama.
Untuk mengatasi Scintillanet ini sekarang menanamkan versi 32 dan 64-bit scilexer.dll di Scintillanet DLL. Semua yang Anda butuhkan untuk menjalankan Scintillanet di satu perpustakaan. Selain menenangkan rasa sakit yang disebutkan di atas ini sekarang memungkinkan kita untuk membuat paket Scintillanet Nuget.
Tujuan lain dari penulisan ulang adalah untuk menerima API Scintilla asli untuk apa adanya dan tidak mencoba untuk memaksa menjadi API .NET-style ketika seharusnya tidak atau tidak. Contoh yang baik dari ini adalah bagaimana Scintillanet menggunakan pengindeks untuk mengakses garis, tetapi tidak memperlakukannya sebagai koleksi .net. Garis dalam kontrol scintilla bukanlah item dalam koleksi. Tidak ada API untuk menambah, memasukkan, atau menghapus garis di Scintilla dan dengan demikian kami tidak mencoba membuatnya di Scintillanet. Penyimpangan dari konvensi .NET ini jarang terjadi, tetapi dilakukan untuk menjaga dokumentasi Scintilla asli tetap relevan dengan pembungkus yang dikelola dan untuk menghindari situasi di mana mencoba memaksa API asli ke yang lebih akrab lebih merugikan daripada membantu.
Catatan: Ini bukan untuk mengatakan bahwa Scintillanet tidak dapat menambah, memasukkan, atau menghapus garis. Namun, operasi tersebut ditangani sebagai perubahan teks, bukan perubahan garis.
Dokumentasi API lengkap disertakan dengan semua paket kami. Selain itu ada dokumentasi yang luas di proyek Wiki yang memiliki resep untuk tugas dan pertanyaan umum. Jika Anda baru mengenal Scintillanet, wiki adalah tempat yang baik untuk memulai.
Seperti yang sebelumnya dicatat dalam Piagam Proyek, upaya besar telah dilakukan untuk menjaga API Scintillanet terdiri dari API Scintilla asli. Dengan demikian, dokumentasi Scintilla asli terus menjadi sumber yang berharga untuk mempelajari beberapa fitur yang lebih dalam.
Secara umum, API mereka akan memetakan ke kita dengan cara berikut:
SCI_GETTEXT dan SCI_SETTEXT(value) , akan memetakan ke properti yang disebutkan sama seperti Text .SCI_INDICSETFORE(indicatorNumber, ...) atau SCI_STYLEGETSIZE(styleNumber, ...) , akan diakses melalui pengindeks seperti Indicators[0].ForeColor atau Styles[0].Size . Kontrol Scintilla asli memiliki kebiasaan menjepit nilai input ke dalam rentang yang dapat diterima daripada melemparkan pengecualian dan jadi kami telah menjaga perilaku itu di Scintillanet. Misalnya, metode GotoPosition membutuhkan argumen position karakter. Jika nilai itu kurang dari nol atau melewati akhir dokumen itu akan dijepit ke 0 atau TextLength daripada melempar OutOfRangeException . Ini cenderung menghasilkan lebih sedikit pengecualian, tetapi hasil yang diinginkan yang sama.
Lisensi MIT (MIT)
Hak Cipta (C) 2017, Jacob Slusser, https://github.com/jacobslusser
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam perangkat lunak.