Scintillanet은 다양한 Scintilla 소스 코드 편집 구성 요소에 대한 Windows Forms Control, 래퍼 및 바인딩입니다.
"표준 텍스트 편집 구성 요소에서 볼 수있는 기능뿐만 아니라 소스 코드를 편집하고 디버깅 할 때 특히 유용한 기능이 포함되어 있습니다. 여기에는 구문 스타일링, 오류 표시기, 코드 완료 및 통화 팁에 대한 지원이 포함됩니다. 선택 마진에는 디버거에 사용 된 마커와 같은 마커가 포함될 수 있습니다. 중단 점과 현재 라인을 나타내는 것보다 더 개방적입니다. 그리고 배경색과 여러 글꼴. " -cintilla.org
Scintillanet은 WindowsFormShost를 사용하여 WPF와 함께 사용할 수도 있습니다.
Scintillanet은 적극적으로 개발 중입니다. 문제가 있거나 질문이 있으면 GitHub 페이지에서 문제 기능을 자유롭게 사용하십시오.
제작 준비가 된 컴파일 된 버전은 Nuget 또는 Releases 페이지에서 다운로드 할 수 있습니다.
최신의 가장 큰 것을 위해 Visual Studio 2015를 사용하여 소스에서 마스터 브랜치를 구축 할 수 있습니다.
Github에는 상당히 활기찬 Sincintillanet 커뮤니티가 존재합니다. 특히 다음 프로젝트를 살펴 보는 것이 좋습니다.
추가 프로젝트 및 사용자 제출 코드는 Wiki의 사용자 제출 레시피 페이지에서 추적됩니다.
이 프로젝트는 CodePlex에서 주최하고 나 자신과 다른 사람들이 유지하는 Scintillanet 프로젝트의 재 작성입니다. 수년간의 프로젝트에 기여한 후 나는 우리가 만든 API에 대해 다르게 생각하기로 결정했고 빈 캔버스로 돌아 가려고한다면 더 나은 것을 만들 수 있다고 생각했습니다. 따라서이 프로젝트는 원래 Scintillanet의 영적 후계자이지만 처음부터 작성되었습니다.
Scintillanet이 역사적으로 겪었던 문제 중 하나는 네이티브 Scintilla 컨트롤이 문자가 아닌 바이트에서 작동한다는 사실입니다. Scintillanet의 이전 버전은 이것을 설명하지 않았으며, 유니 코드를 다룰 때, 하나의 바이트가 항상 하나의 문자와 같지는 않습니다. 결과는 때때로 바이트 오프셋을 예상하는 API와 다른 경우에는 문자 오프셋이 예상되었습니다. 때로는 상황이 예상대로 작동하고 다른 경우에는 임의의 실패와 범위 외 예외가 발생합니다.
더 이상. 이 재 작성의 주요 초점 중 하나는 Scintillanet에게 처음부터 유니 코드에 대한 이해를 제공하는 것이 었습니다. 모든 API는 이제 .NET 개발자가 기대하는 것처럼 캐릭터 기반 오프셋 및 범위에서 일관되게 작동합니다. 내부적으로 우리는 바이트 오프셋에 문자 매핑을 유지하고 (그 반대도 마찬가지) 당신을 위해 모든 번역을 수행하므로 걱정할 필요가 없습니다. 더 이상 범위 외 예외는 없습니다. 더 이상 혼란이 없습니다. 더 이상 고통이 없습니다. 그것은 단지 작동합니다.
두 번째로 인기있는 Scintillanet 문제는 Scintillanet DLL과 기본 구성 요소 인 Scilexer DLL을 분배하는 혼란이었습니다. Scintillanet은 래퍼입니다. Scilexer.dll이 없으면 핵심 Scintilla 기능을 포함하지 않으면 아무것도 아닙니다. 기본 구성 요소 인 Scilexer.dll은 32 및 64 비트 버전의 Windows에 대해 별도로 컴파일되어야합니다. 따라서 개발자가 응용 프로그램과 함께 배송 해야하는 것은 실제로 3 개의 DLL이었습니다.
개발자는 종종 많은 라이브러리를 배포하기를 원하지 않았거나 Pinvoke와 Scintillanet에서 사용하는 DLL 로딩 메커니즘을 깨뜨릴 수있는 대체 위치에 배치하기를 원했기 때문에 이것은 고통스러운 점으로 입증되었습니다. 또한 같은 이유로 Visual Studio에서 디자인 시간 동안 두통이 발생합니다.
이 Scintillanet을 해결하기 위해 이제 Scintillanet DLL에 32 및 64 비트 버전의 Scilexer.dll을 포함시킵니다. 하나의 라이브러리에서 Sinlanet을 실행하는 데 필요한 모든 것. 위에서 언급 한 통증을 진정시키는 것 외에도 이제 우리는 Sincintillanet Nuget 패키지를 만들 수 있습니다.
다시 쓰기의 또 다른 목표는 원래 Scintilla API를 수용하는 것이 무엇인지 수락하고, 그렇지 않은 경우 .net 스타일 API로 강요하지 않는 것이 었습니다. 이에 대한 좋은 예는 Scintillanet이 인덱서를 사용하여 라인에 액세스하는 방법이지만 .NET 컬렉션으로 취급하지는 않습니다. Scintilla 컨트롤의 라인은 컬렉션의 항목이 아닙니다. Scintilla에서 라인을 추가, 삽입 또는 제거 할 API는 없으므로 Scintillanet에서 하나를 만들려고하지 않습니다. .NET 규칙과의 이러한 편차는 드물지만, 모든 네이티브 Scintilla 문서를 관리 래퍼와 관련하여 원래 API를 강제하려고하는 상황을 피하기 위해 수행됩니다.
참고 : 이것은 Scintillanet이 선을 추가, 삽입 또는 제거 할 수 없다고 말하는 것은 아닙니다. 그러나 이러한 작업은 줄 변경이 아니라 텍스트 변경으로 처리됩니다.
전체 API 문서는 모든 패키지에 포함되어 있습니다. 또한 Project Wiki에는 일반적인 작업 및 질문에 대한 레시피가있는 광범위한 문서가 있습니다. Scintillanet을 처음 접한다면 Wiki는 시작하기에 좋은 곳입니다.
Project Charter에서 언급했듯이 Scintillanet API가 Native Scintilla API로 구성되도록 많은 노력을 기울였습니다. 따라서, 네이티브 Scintilla 문서는 계속해서 더 깊은 기능을 배우는 데 귀중한 자료입니다.
일반적으로, 그들의 API는 다음과 같은 방법으로 우리에게 매핑 될 것입니다.
SCI_GETTEXT 및 SCI_SETTEXT(value) 와 같은 'Get'및 'set'이있는 호출은 Text 와 같은 유사하게 명명 된 속성에 매핑됩니다.SCI_INDICSETFORE(indicatorNumber, ...) 또는 SCI_STYLEGETSIZE(styleNumber, ...) 와 같은 '컬렉션'에서 항목에 액세스하기 위해 숫자 인수가 필요한 호출은 Indicators[0].ForeColor 또는 Styles[0].Size 와 같은 인덱서를 통해 액세스됩니다. 기본 Scintilla 컨트롤은 예외를 던지지 않고 허용 가능한 범위 내에서 입력 값을 클램핑하는 습관을 가지고 있으므로 우리는 그 행동을 Scintillanet에서 유지했습니다. 예를 들어, GotoPosition 방법에는 문자 position 인수가 필요합니다. 해당 값이 문서의 끝을 0보다 작거나 지나면 OutOfRangeException 던지지 않고 0 또는 TextLength 로 클램핑됩니다. 이로 인해 예외가 적지 만 원하는 결과가 동일합니다.
MIT 라이센스 (MIT)
Copyright (C) 2017, Jacob Slusser, https://github.com/jacobslusser
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게는 허가가 부여됩니다. 소프트웨어의 사용, 복사, 수정, 합병, 배포, 배포, 숭고 및/또는 소프트웨어의 사본을 판매 할 권한을 포함하여 제한없이 소프트웨어를 처리 할 수 있도록 소프트웨어를 제공 할 권한이 없습니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 소프트웨어의 사용 또는 기타 거래에서 발생하는 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않습니다.