Scintillanet เป็นตัวควบคุมแบบฟอร์ม Windows, wrapper และการผูกสำหรับส่วนประกอบการแก้ไขซอร์สโค้ด Scintilla อเนกประสงค์
"เช่นเดียวกับคุณสมบัติที่พบในส่วนประกอบการแก้ไขข้อความมาตรฐาน Scintilla มีคุณสมบัติที่มีประโยชน์อย่างยิ่งเมื่อแก้ไขและดีบักซอร์สโค้ดซึ่งรวมถึงการรองรับการจัดแต่งทรงผมไวยากรณ์ตัวบ่งชี้ข้อผิดพลาดการสมบูรณ์ของรหัสและเคล็ดลับการเรียกใช้ และแบบอักษรหลายตัว " - scintilla.org
Scintillanet ยังสามารถใช้กับ WPF โดยใช้ WindowsFormShost
Scintillanet กำลังพัฒนาอย่างแข็งขัน หากคุณพบปัญหาใด ๆ หรือเพียงแค่มีคำถามอย่าลังเลที่จะใช้ปัญหาปัญหาที่หน้า GitHub ของเรา
เวอร์ชันที่รวบรวมซึ่งพร้อมการผลิตสามารถดาวน์โหลดได้จาก NuGet หรือหน้าเผยแพร่
สำหรับล่าสุดและยิ่งใหญ่ที่สุดคุณสามารถสร้างสาขาหลักจากแหล่งที่มาโดยใช้ Visual Studio 2015
ชุมชน Scintillanet ที่มีชีวิตชีวาค่อนข้างมีอยู่ที่นี่ใน GitHub เราขอแนะนำให้คุณดูโครงการต่อไปนี้โดยเฉพาะ:
โครงการเพิ่มเติมและรหัสที่ผู้ใช้ส่งได้จะถูกติดตามในหน้าสูตรที่ผู้ใช้ส่งของวิกิ
โครงการนี้เป็นการเขียนใหม่ของโครงการ Scintillanet ที่โฮสต์ที่ CodePlex และดูแลด้วยตัวเองและคนอื่น ๆ หลังจากหลายปีของการมีส่วนร่วมในโครงการนั้นฉันตัดสินใจที่จะคิดแตกต่างกันเกี่ยวกับ API ที่เราสร้างขึ้นและรู้สึกว่าฉันสามารถทำให้ดีขึ้นได้ถ้าฉันเต็มใจที่จะกลับไปที่ผืนผ้าใบเปล่า ดังนั้นโครงการนี้จึงเป็นผู้สืบทอดทางจิตวิญญาณของ Scintillanet ดั้งเดิม แต่ถูกเขียนตั้งแต่เริ่มต้น
หนึ่งในปัญหาที่ Scintillanet ได้รับความเดือดร้อนจากอดีตคือความจริงที่ว่า Scintilla ควบคุมพื้นเมืองทำงานบนไบต์ไม่ใช่ตัวละคร Scintillanet เวอร์ชันก่อนหน้านี้ไม่ได้คำนึงถึงสิ่งนี้และเมื่อคุณจัดการกับ Unicode หนึ่งไบต์ไม่ได้เท่ากับตัวละครตัวเดียวเสมอไป ผลที่ได้คือ API ที่บางครั้งคาดว่าจะมีการชดเชยไบต์และในเวลาอื่น ๆ ที่คาดว่าจะชดเชยตัวละคร บางครั้งสิ่งต่าง ๆ จะทำงานตามที่คาดไว้และเวลาอื่น ๆ ที่เกิดความล้มเหลวแบบสุ่มและข้อยกเว้นนอกช่วงจะเกิดขึ้น
ไม่มีอีกแล้ว หนึ่งในจุดสนใจที่สำคัญของการเขียนใหม่นี้คือการให้ความเข้าใจเกี่ยวกับ Unicode จากพื้นดิน ตอนนี้ API ทุกครั้งทำงานอย่างต่อเนื่องกับการชดเชยตัวละครและช่วงเช่นเดียวกับผู้พัฒนา. NET ที่คาดหวัง ภายในเราบำรุงรักษาการทำแผนที่ของตัวละครเพื่อออฟเซ็ตไบต์ (และในทางกลับกัน) และทำการแปลทั้งหมดให้คุณดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้ ไม่มีข้อยกเว้นนอกช่วงอีกต่อไป ไม่มีความสับสนอีกต่อไป ไม่มีความเจ็บปวดอีกต่อไป มันใช้งานได้
ปัญหา Scintillanet ที่ได้รับความนิยมมากเป็นอันดับสองคือความสับสนในการกระจาย Scintillanet DLL และส่วนประกอบดั้งเดิมของมันคือ Scilexer DLL Scintillanet เป็นเสื้อคลุม หากไม่มี Scilexer.dll ที่มีฟังก์ชั่น Core Scintilla มันจะไม่มีอะไรเลย ในฐานะองค์ประกอบดั้งเดิม Scilexer.dll จะต้องรวบรวมแยกต่างหากสำหรับ Windows รุ่น 32 และ 64 บิต ดังนั้นจริง ๆ แล้วมันเป็นสาม DLL ที่นักพัฒนาต้องจัดส่งด้วยแอปพลิเคชันของพวกเขา
สิ่งนี้พิสูจน์แล้วว่าเป็นจุดปวดเพราะนักพัฒนามักไม่ต้องการแจกจ่ายห้องสมุดจำนวนมากหรือต้องการวางไว้ในสถานที่อื่นซึ่งจะทำลายกลไกการโหลด DLL ที่ใช้โดย Pinvoke และ Scintillanet นอกจากนี้ยังทำให้เกิดอาการปวดหัวในช่วงเวลาการออกแบบใน Visual Studio ด้วยเหตุผลเดียวกัน
ในการจัดการกับ Scintillanet นี้ได้ฝัง Scilexer.dll รุ่น 32 และ 64 บิตใน Scintillanet DLL ทุกสิ่งที่คุณต้องการเรียกใช้ Scintillanet ในห้องสมุดเดียว นอกเหนือจากการผ่อนคลายความเจ็บปวดที่กล่าวถึงข้างต้นตอนนี้ทำให้เราสามารถสร้างแพ็คเกจ Scintillanet NuGet ได้
เป้าหมายอีกประการหนึ่งของการเขียนใหม่คือการยอมรับ Scintilla API ดั้งเดิมสำหรับสิ่งที่มันเป็นและไม่พยายามที่จะบีบบังคับให้เป็น API สไตล์. NET เมื่อไม่ควรหรือไม่สามารถเป็นได้ ตัวอย่างที่ดีของเรื่องนี้คือวิธีที่ Scintillanet ใช้ดัชนีเพื่อเข้าถึงสาย แต่ไม่ถือว่าเป็นคอลเลกชัน. NET บรรทัดในการควบคุม scintilla ไม่ใช่รายการในคอลเลกชัน ไม่มี API ที่จะเพิ่มแทรกหรือลบบรรทัดใน scintilla และดังนั้นเราจึงไม่พยายามสร้างหนึ่งใน scintillanet การเบี่ยงเบนเหล่านี้จากการประชุม. NET นั้นหายาก แต่ทำเพื่อเก็บเอกสาร Scintilla ดั้งเดิมที่เกี่ยวข้องกับเสื้อคลุมที่ได้รับการจัดการและเพื่อหลีกเลี่ยงสถานการณ์ที่พยายามบังคับให้ API ดั้งเดิมเข้ามาเป็นสิ่งที่คุ้นเคยมากกว่านั้นเป็นอันตรายมากกว่าที่เป็นประโยชน์
หมายเหตุ: นี่ไม่ได้หมายความว่า Scintillanet ไม่สามารถเพิ่มแทรกหรือลบบรรทัดได้ อย่างไรก็ตามการดำเนินการเหล่านั้นได้รับการจัดการเป็นการเปลี่ยนแปลงข้อความไม่ใช่การเปลี่ยนแปลงบรรทัด
เอกสาร API ที่สมบูรณ์นั้นรวมอยู่ในแพ็คเกจทั้งหมดของเรา นอกจากนี้ยังมีเอกสารมากมายที่โครงการวิกิซึ่งมีสูตรอาหารสำหรับงานและคำถามทั่วไป หากคุณยังใหม่กับ Scintillanet วิกิเป็นสถานที่ที่ดีในการเริ่มต้น
ดังที่ได้กล่าวไว้ก่อนหน้านี้ในกฎบัตรโครงการมีความพยายามอย่างมากในการรักษา Scintillanet API ประกอบด้วย Scintilla API พื้นเมือง เช่นนี้เอกสาร Scintilla ดั้งเดิมยังคงเป็นทรัพยากรที่มีค่าสำหรับการเรียนรู้คุณสมบัติที่ลึกซึ้งยิ่งขึ้น
โดยทั่วไป API ของพวกเขาจะแมปกับเราด้วยวิธีต่อไปนี้:
SCI_GETTEXT และ SCI_SETTEXT(value) จะแมปกับคุณสมบัติที่มีชื่อคล้ายกันเช่น TextSCI_INDICSETFORE(indicatorNumber, ...) หรือ SCI_STYLEGETSIZE(styleNumber, ...) จะเข้าถึงได้ผ่านตัวดัชนีเช่น Indicators[0].ForeColor Styles[0].Size การควบคุม Scintilla ดั้งเดิมมีนิสัยในการยึดค่าอินพุตให้อยู่ภายในช่วงที่ยอมรับได้มากกว่าการทิ้งข้อยกเว้นดังนั้นเราจึงเก็บพฤติกรรมนั้นไว้ใน Scintillanet ตัวอย่างเช่นวิธี GotoPosition ต้องใช้อาร์กิวเมนต์ position ตัวละคร หากค่านั้นน้อยกว่าศูนย์หรือผ่านจุดสิ้นสุดของเอกสารมันจะถูกยึดติดกับ 0 หรือ TextLength แทนที่จะโยน OutOfRangeException สิ่งนี้มีแนวโน้มที่จะส่งผลให้มีข้อยกเว้นน้อยลง แต่ผลลัพธ์ที่ต้องการเช่นเดียวกัน
ใบอนุญาต MIT (MIT)
ลิขสิทธิ์ (c) 2017, Jacob Slusser, https://github.com/jacobslusser
ได้รับอนุญาตโดยไม่ต้องเสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้สำเนาดัดแปลงผสานเผยแพร่เผยแพร่
ประกาศลิขสิทธิ์ข้างต้นและการแจ้งเตือนการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้ "ตามสภาพ" โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะการรับประกันความสามารถในการค้าการออกกำลังกายสำหรับวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือการติดต่ออื่น ๆ ในซอฟต์แวร์