O Scintillanet é um controle do Windows Control, Wrapper e Bindings para o componente versátil de edição do código -fonte do Scintilla.
"Além de recursos encontrados em componentes de edição de texto padrão, o Scintilla inclui recursos especialmente úteis ao editar e depurar o código -fonte. Eles incluem suporte para estilo de sintaxe, indicadores de erros, conclusão de código e dicas de chamadas. A margem de seleção pode conter marcadores como os usados em que os devassados, que são os pontos de vista, o uso da linha de base. cores e várias fontes. " - scintilla.org
O Scintillanet também pode ser usado com o WPF usando o WindowsFormShost.
O Scintillanet está em desenvolvimento ativo. Se você encontrar algum problema ou apenas tiver uma pergunta, fique à vontade para usar o recurso de problemas em nossa página do Github.
As versões compiladas prontas para a produção podem ser baixadas da página Nuget ou da Releases.
Para o mais recente e o melhor, você pode construir o ramo principal a partir da fonte usando o Visual Studio 2015.
Uma comunidade Scintillanet bastante vibrante existe aqui no Github. Recomendamos especificamente que você veja os seguintes projetos:
Projetos adicionais e código submitido pelo usuário são rastreados na página Receitas enviadas do usuário do wiki.
Este projeto é uma reescrita do projeto Scintillanet, hospedado no CodePlex e mantido por mim e por outros. Depois de muitos anos contribuindo para esse projeto, decidi pensar de maneira diferente sobre a API que havíamos criado e senti que poderia melhorar se estivesse disposto a voltar a uma tela em branco. Assim, este projeto é o sucessor espiritual do Scintillanet original, mas foi escrito do zero.
Uma das questões que a Scintillanet sofreu historicamente é o fato de o controle de scintilla nativo operar em bytes, não em caracteres. As versões anteriores do Scintillanet não foram responsáveis por isso e, quando você está lidando com o Unicode, um byte nem sempre é igual a um caractere. O resultado foi uma API que às vezes esperava compensações de bytes e, outras vezes, compensações de caráter esperadas. Às vezes, as coisas funcionavam conforme o esperado e outras vezes falhas aleatórias e exceções fora de alcance ocorreriam.
Não mais. Um dos principais focos dessa reescrita foi dar à Scintillanet uma compreensão do Unicode desde o início. Toda API agora trabalha consistentemente com compensações e variações baseadas em caracteres, como os desenvolvedores .NET esperam. Internamente, mantemos um mapeamento de caráter para compensações de bytes (e vice -versa) e fazemos toda a tradução para você, para que você nunca precise se preocupar com isso. Não há mais exceções fora de alcance. Não há mais confusão. Não há mais dor. Apenas funciona.
A segunda questão mais popular do Scintillanet foi a confusão distribuindo a DLL do Scintillanet e seu componente nativo, a DLL do Scilexer. Scintillanet é um invólucro. Sem o scilexer.dll que contém a funcionalidade principal do Scintilla, não é nada. Como componente nativo, o scilexer.dll deve ser compilado separadamente para versões de 32 e 64 bits do Windows. Portanto, foram na verdade três DLLs que os desenvolvedores tiveram que enviar com suas aplicações.
Isso provou ser um ponto de dor porque os desenvolvedores geralmente não queriam distribuir tantas bibliotecas ou queriam colocá -las em locais alternativos, o que quebraria os mecanismos de carregamento da DLL usados por Pinvoke e Scintillanet. Também causa dores de cabeça durante o tempo de design no Visual Studio pelas mesmas razões.
Para abordar este Scintillanet, agora incorpora uma versão de 32 e 64 bits do scilexer.dll na dll scintillanet. Tudo o que você precisa para executar o Scintillanet em uma biblioteca. Além de acalmar a dor mencionada acima, isso agora permite criar um pacote Scintillanet Nuget.
Outro objetivo da reescrita foi aceitar a API original do Scintilla para o que é e não tentar coagi-lo em uma API no estilo .NET quando não deveria ou não poderia ser. Um bom exemplo disso é como o Scintillanet usa indexadores para acessar linhas, mas não as tratam como uma coleção .NET. Linhas em um controle de scintilla não são itens em uma coleção. Não há API para adicionar, inserir ou remover uma linha no Scintilla e, portanto, não tentamos criar um no Scintillanet. Esses desvios da Convenção do .NET são raros, mas são feitos para manter qualquer documentação de scintilla nativa relevante para o invólucro gerenciado e evitar situações em que tentar forçar a API original a uma mais familiar é mais prejudicial do que útil.
Nota: Isso não quer dizer que o Scintillanet não possa adicionar, inserir ou remover linhas. Essas operações, no entanto, são tratadas como mudanças de texto, não alterações de linha.
A documentação completa da API está incluída em todos os nossos pacotes. Além disso, há uma extensa documentação no Wiki do projeto, que possui receitas para tarefas e perguntas comuns. Se você é novo no Scintillanet, o wiki é um bom lugar para começar.
Como observado anteriormente na Carta do Projeto, foi feito um grande esforço para manter a API do Scintillanet consiste com a API nativa do Scintilla. Como tal, a documentação nativa do Scintilla continua sendo um recurso valioso para aprender alguns dos recursos mais profundos.
De um modo geral, sua API mapeará para a nossa das seguintes maneiras:
SCI_GETTEXT e SCI_SETTEXT(value) , mapeará para uma propriedade de nome semelhante, como Text .SCI_INDICSETFORE(indicatorNumber, ...) ou SCI_STYLEGETSIZE(styleNumber, ...) , será acessado por meio de um indexador como Indicators[0].ForeColor ou Styles[0].Size . O controle de scintilla nativo tem o hábito de fixar os valores de entrada dentro de intervalos aceitáveis, em vez de jogar exceções e, portanto, mantivemos esse comportamento no Scintillanet. Por exemplo, o método de GotoPosition requer um argumento position do caractere. Se esse valor for menor que zero ou passado do final do documento, ele será preso a 0 ou o TextLength em vez de lançar uma O OutOfRangeException . Isso tende a resultar em menos exceções, mas o mesmo resultado desejado.
A licença do MIT (MIT)
Copyright (c) 2017, Jacob Sussser, https://github.com/jacobslusser
A permissão é concedida, gratuita, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, inclusive sem limitação os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, mobilizar o software e/ou vender cópias do software e permitir que as pessoas a quem
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsáveis por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.