Scintillanet es un control de Windows Forms, envoltorio y enlaces para el componente de edición del código fuente de Scintilla versátil.
"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 y múltiples fuentes ". - scintilla.org
Scintillanet también se puede usar con WPF usando WindowsFormshost.
Scintillanet está en desarrollo activo. Si encuentra algún problema o simplemente tiene una pregunta, no dude en usar la función de problemas en nuestra página de GitHub.
Las versiones compiladas que están listas para la producción se pueden descargar de Nuget o la página de versiones.
Para lo último y lo mejor, puede construir la rama maestra desde Source usando Visual Studio 2015.
Una comunidad Scintillanet bastante vibrante existe aquí en Github. Le recomendamos específicamente que mire los siguientes proyectos:
Los proyectos adicionales y el código enviado por el usuario se rastrean en la página de recetas enviadas por el usuario del wiki.
Este proyecto es una reescritura del Proyecto Scintillanet alojado en CodePlex y mantenido por mí y otros. Después de muchos años de contribuir a ese proyecto, decidí pensar de manera diferente sobre la API que habíamos creado y sentí que podría mejorar uno si estaba dispuesto a volver a un lienzo en blanco. Por lo tanto, este proyecto es el sucesor espiritual del Scintillanet original, pero ha sido escrito desde cero.
Uno de los problemas que Scintillanet ha sufrido históricamente es el hecho de que el control nativo de Scintilla opera en bytes, no en caracteres. Las versiones anteriores de Scintillanet no explicaron esto, y cuando se trata de unicode, un byte no siempre es igual a un personaje. El resultado fue una API que a veces esperaba compensaciones de bytes y, en otros momentos, esperaba compensaciones de personajes. A veces, las cosas funcionarían como se esperaba y otras veces se producirían fallas aleatorias y excepciones fuera de rango.
No más. Uno de los principales focos de esta reescritura fue darle a Scintillanet una comprensión de Unicode desde cero. Cada API ahora funciona constantemente con compensaciones y rangos basados en personajes como esperan los desarrolladores de .NET. Internamente mantenemos un mapeo de carácter para compensaciones de bytes (y viceversa) y hacemos toda la traducción por usted para que nunca tenga que preocuparse por eso. No más excepciones fuera de rango. No más confusión. No más dolor. Simplemente funciona.
El segundo problema de Scintillanet más popular fue la confusión que distribuyó el Scintillanet DLL y su componente nativo, el Scilexer DLL. Scintillanet es un envoltorio. Sin el scilexer.dll que contiene la funcionalidad de Scintilla central, no es nada. Como componente nativo, Scilexer.dll debe compilarse por separado para versiones de Windows de 32 y 64 bits. Por lo tanto, en realidad fueron tres DLL que los desarrolladores tuvieron que enviar con sus aplicaciones.
Esto resultó ser un punto de dolor porque los desarrolladores a menudo no querían distribuir tantas bibliotecas o querían colocarlas en ubicaciones alternativas que romperían los mecanismos de carga DLL utilizados por Pinvoke y Scintillanet. También causa dolores de cabeza durante el tiempo de diseño en Visual Studio por las mismas razones.
Para abordar este Scintillanet ahora incorpora una versión de 32 y 64 bits de Scilexer.dll en el Scintillanet Dll. Todo lo que necesitas para ejecutar Scintillanet en una biblioteca. Además de calmar el dolor mencionado anteriormente, esto ahora nos permite crear un paquete Scintillanet Nuget.
Otro objetivo de la reescritura era aceptar la API Scintilla original por lo que es y no tratar de coaccionarlo en una API de estilo .NET cuando no debería o no podría ser. Un buen ejemplo de esto es cómo Scintillanet usa indexadores para acceder a las líneas, pero no tratarlas como una colección .NET. Las líneas en un control de Scintilla no son elementos en una colección. No hay API para agregar, insertar o eliminar una línea en Scintilla y, por lo tanto, no intentamos crear una en Scintillanet. Estas desviaciones de la convención .NET son raras, pero se realizan para mantener cualquier documentación nativa de Scintilla relevante para el envoltorio administrado y evitar situaciones en las que tratar de forzar la API original a una más familiar es más perjudicial que útil.
Nota: Esto no quiere decir que Scintillanet no pueda agregar, insertar o eliminar líneas. Sin embargo, esas operaciones se manejan como cambios de texto, no cambios de línea.
La documentación completa de la API se incluye con todos nuestros paquetes. Además, hay una amplia documentación en el Wiki del Proyecto que tiene recetas para tareas y preguntas comunes. Si eres nuevo en Scintillanet, el wiki es un buen lugar para comenzar.
Como se señaló anteriormente en la Carta del Proyecto, se ha hecho un gran esfuerzo para mantener la API Scintillanet consisten con la API de Scintilla nativa. Como tal, la documentación nativa de Scintilla sigue siendo un recurso valioso para aprender algunas de las características más profundas.
En términos generales, su API se mapeará con la nuestra de las siguientes maneras:
SCI_GETTEXT y SCI_SETTEXT(value) , se asignará a una propiedad con nombre similar como Text .SCI_INDICSETFORE(indicatorNumber, ...) o SCI_STYLEGETSIZE(styleNumber, ...) , se accederá a través de un indexador como Indicators[0].ForeColor o Styles[0].Size . El control nativo de Scintilla tiene el hábito de sujetar valores de entrada a rangos aceptables en lugar de lanzar excepciones, por lo que hemos mantenido ese comportamiento en Scintillanet. Por ejemplo, el método GotoPosition requiere un argumento position de caracteres. Si ese valor es inferior a cero o más allá del final del documento, se sujetará a 0 o a la TextLength en lugar de lanzar una OutOfRangeException . Esto tiende a dar como resultado menos excepciones, pero el mismo resultado deseado.
La licencia del MIT (MIT)
Copyright (c) 2017, Jacob Slusser, https://github.com/jacobslusser
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar en el software sin restricción, incluidos los derechos de los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicense y/o vender copias del software, y para permitir que las personas a quienes se les proporciona el software para hacer, sujeto a las siguientes condiciones: las siguientes condiciones: las siguientes condiciones: las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otra manera, que surge, de o en relación con el software o el uso u otros tratos en el software.