Scintillanet是Windows Forms控件,包装器和多功能scintilla源代码编辑组件的绑定。
"As well as features found in standard text editing components, Scintilla includes features especially useful when editing and debugging source code. These include support for syntax styling, error indicators, code completion and call tips. The selection margin can contain markers like those used in debuggers to indicate breakpoints and the current line. Styling choices are more open than with many editors, allowing the use of proportional fonts, bold and italics, multiple foreground and background colours and多个字体。” - scintilla.org
Scintillanet也可以使用WindowsFormshost与WPF一起使用。
Scintillanet正在积极发展。如果您发现任何问题,或者只是有一个问题,请随时在我们的GitHub页面上使用这些问题。
可以从Nuget或发行页面下载编译的生产版本。
对于最新和最伟大的,您可以使用Visual Studio 2015从源构建主分支。
Github上存在着一个相当充满活力的闪烁体社区。我们特别建议您查看以下项目:
在Wiki的用户提交配方页面中跟踪其他项目和用户提取的代码。
该项目是对Codeplex主持的Scintillanet项目的重写,由我自己和其他人维护。在为该项目做出了多年的贡献之后,我决定对我们创建的API进行不同的思考,并认为如果我愿意回到空白的画布,我可以做得更好。因此,这个项目是原始scintillanet的精神继任者,但已从从头开始写。
Scintillanet历史上遇到的问题之一是,本地scintilla控制在字节而不是角色上运行的事实。 Scintillanet的先前版本并未解释这一点,当您处理Unicode时,一个字节并不总是等于一个字符。结果是一个API,有时是预期的字节偏移和其他时间预期的字符偏移。有时,事情会按预期工作,而其他时间会随机失败和外部异常。
不再。这种改写的主要重点之一是使Scintillanet从头开始了解Unicode。现在,每个API都像.NET开发人员的期望一样,始终与基于字符的偏移和范围一起使用。在内部,我们将字符映射到字节偏移(反之亦然),并为您完成所有翻译,因此您无需担心它。没有更多的异常例外。没有更多的混乱。没有更多的痛苦。它只是有效的。
第二个最受欢迎的Scintillanet问题是混乱分发了Scintillanet DLL及其本地成分Scilexer DLL。 Scintillanet是一名包装纸。没有scilexer.dll包含核心闪烁功能的功能,那是什么。作为本机组件,必须将32和64位版本的Windows分别编译为scilexer.dll。因此,实际上是开发人员必须运送其应用程序的三个DLL。
这证明了一个痛点,因为开发人员通常不想分发这么多库,也不想将它们放在替代位置,这会破坏Pinvoke和Scintillanet使用的DLL加载机制。由于相同的原因,它还在视觉工作室的设计时间内引起头痛。
要解决此scintillanet,现在在scintillanet dll中嵌入了32位和64位版本的scilexer.dll。您需要在一个库中运行Scintillanet所需的一切。除了舒缓上面提到的痛苦之外,现在这使我们有可能创建一个scintillanet nuget软件包。
重写的另一个目标是接受原始的scintilla API,而不是在不应该或不可能的情况下尝试将其胁到.NET风格的API。一个很好的例子是Scintillanet使用索引器访问线路的方式,但不将其视为.NET集合。 Scintilla控件中的线路不是集合中的项目。没有API可以添加,插入或删除Scintilla中的一条线,因此我们不会尝试在scintillanet中创建一条线。这些与.NET惯例的偏差很少见,但是这样做是为了保留与托管包装器相关的任何本地scintilla文档,并避免试图强迫原始API进入更熟悉的情况,这比有用更有害。
注意:这并不是说Scintillanet无法添加,插入或删除线条。但是,这些操作是随着文本更改而不是线路更改处理的。
我们的所有软件包都包含完整的API文档。此外,Wiki项目中还有大量文档,该文档具有用于常见任务和问题的食谱。如果您是Scintillanet的新手,那么Wiki是一个开始的好地方。
正如Project Charter中所指出的那样,已经付出了巨大的努力来保持Scintillanet API与本地Scintilla API组成。因此,本地的Scintilla文档仍然是学习一些更深层次功能的宝贵资源。
一般而言,他们的API将以以下方式映射到我们的API:
SCI_GETTEXT和SCI_SETTEXT(value) ,将映射到类似命名的属性(例如Text )。SCI_INDICSETFORE(indicatorNumber, ...)或SCI_STYLEGETSIZE(styleNumber, ...) ,将通过索引器(例如Indicators[0].ForeColor或Styles[0].Size 。天然的scintilla控制习惯将输入值夹在可接受的范围内,而不是抛出异常,因此我们将这种行为保留在scintillanet中。例如, GotoPosition方法需要一个字符position参数。如果该值小于零或超过文档末尾,则将夹紧到0或TextLength ,而不是抛出OutOfRangeException 。这往往会导致较少的例外,但是相同的预期结果。
麻省理工学院许可证(MIT)
版权(c)2017,雅各布·斯卢塞(Jacob Slusser),https://github.com/jacobslusser
特此免费授予获得此软件副本和相关文档文件副本(“软件”)的任何人,以无限制处理该软件,包括无限制的使用权,复制,复制,修改,合并,合并,发布,分发,分发,分发,订婚,和/或允许软件的副本,并允许对以下条件提供以下条件,以下是以下条件。
上述版权通知和此许可通知应包含在软件的所有副本或大量部分中。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,作者或版权持有人都不应对任何索赔,损害赔偿或其他责任责任,无论是在合同,侵权的诉讼中还是其他责任,是由软件,使用或与软件中的使用或其他交易有关的。