정규식을 사용하여 Scintilla에서 구문 강조를 정의 할 수 있습니까? 그렇다면 어떻게해야합니까?Scintilla.NET 정규식 기반 구문 하이라이팅
처리 할 사용자 지정 언어가 있으며 키워드와 구분 기호로 간단하게 설명 할 수 없습니다. 이 언어의 특정 구조의 의미는 키워드와의 상대적인 위치에만 의존합니다. 이 형식에 대한 정규 표현식 기반 파서가 있는데 필요한 것은 정규 표현식 정의 된 규칙을 텍스트 스타일로 적용하는 것입니다.
뭔가가 regex1과 일치하면 스타일 1을 가져야 함을 의미합니다. 가능한가? 방법?
그렇지 않은 경우 수동으로 선택한 범위의 스타일을 설정할 수 있습니까? 에디터에서 지정된 문자 범위에 스타일 번호를 지정하려고합니다. 그것을하는 방법?
Scintilla 스타일을 XML 파일이 아닌 코드에 정의 할 수 있습니까?
편집 : 그래, 길을 찾았습니다.
foreach (Match m in Patterns.Keyword0.Matches(Encoding.ASCII.GetString(e.RawText)))
e.GetRange(m.Index, m.Index + m.Length).SetStyle(1);
문제는 RawText 속성입니다. UTF-8로 인코딩 된 텍스트의 바이트 버퍼입니다. 텍스트 속성에는 멋진 UTF-16 텍스트가 포함되어 있지만 GetRage 메서드는 문자 오프셋이 아닌 바이트 오프셋을 허용합니다. 각 TextChanged 이벤트에서 변환을 사용하면 Scintilla를 사용하여 거의 모든 속도 이점을 잃게됩니다.
물론 가장 쉬운 방법은 내부 인코딩을 UTF-16으로 변경하는 것입니다.하지만 그렇게하면 인코딩이 지원되지 않는다는 예외가 발생합니다. 유일하게 지원되는 것은 엄청나게 어려운 (그리고 느린) 처리가 가능한 UTF-8 인 것 같습니다.
여기 벽에 부딪치고 있습니다.
나는 신틸라에게 두 번째 시도를해야만하는 것처럼 보입니다. 첫 번째 시도에서 강조 표시된 텍스트를 편집하는 중에 용인 할 수없는 지연이 발생했습니다. 현재 파서가 외부 DLL로 컴파일 될 때 나는 빠르게 타오르는 것으로 판명 된 FTCB에 머물러 있습니다. 두 사람은 서로 매우 유사합니다. 거의 동일한 기능. – Harry