AvalonEdit : 계단식 HighlightingColorizers
AvalonEdit의 SyntaxHighlighting Engine을 캐스케이드하고 싶습니다. 나는 2 HighlightingDefinitions
. 첫 번째는 기본 구문입니다. 두 번째는 복잡한 다중 라인 전 처리기 마크 업 언어입니다. 다만 문법 첫 번째 문법에 두 번째 문법을 포함하는 것이 너무 복잡합니다. 더 쉬운 방법은 첫 번째 구문을 나중에 영향을 줄 부분 (두 번째 구문을 기반으로) 변경하는 것입니다.
그래서 HighlightingColorizer
두 번째 언어로 새로운 것을 인스턴스화 하고 LineTransformers
. 그러나 두 번째 언어는 전 처리기 지시문이있는 전체 문서를 채색합니다. 비 전 처리기 코드는 검은 색입니다.
ColorizeLine
-th 라인 변환기 두 의 -method를 디버깅했을 때 강조-display되지 않은 코드 (= 전 처리기 코드 없음)의 라인은 예상대로 색상이 지정 되지 않았습니다 . 그러나 선의 색은 검은 색입니다.
모든 HighlightingColorizer
색상 화를 시작하기 전에 전체 문서의 이전 강조 표시를 전에 거기에?
아니면 무엇이 문제일까요? 2를 HighlightingColorizers
선택해야합니까?
문제는 HighlightingColorizer
직접 저장하지 DocumentHighlighter
않고 대신 참조를 저장하는 것 TextView.Services
입니다. 이는 동일한 컬러 라이저를 여러 편집기에 연결하여 각 편집기가 고유 한 DocumentHighlighter
.
두 번째 컬러 라이저를 부착 IHighlighter
하면 서비스 컨테이너에 필요한 것을 사용합니다 . 두 colorizer 모두 새로운 형광펜을 사용하게됩니다.
또한 '클립 보드로 복사'로직 HtmlClipboard
은 IHighlighter
서비스 에 직접 액세스하며 컬러 라이저를 사용하지 않습니다. (텍스트를 Word로 복사하면 구문 강조 표시 만 유지되고 유지되고 축소 된 표현과 같은 다른 변환은.)
이 문제를 해결하는 데는 기본적으로 두 가지 접근 방식이 있습니다.
추가 형광펜을 서비스로 저장하지 않습니다.
HighlightingColorizer
클래스 의 자체 복사본을 만들고 .NET 프레임 워크 액세스하는 대신에 해당 클래스의 필드를 사용하여 이를 수행 할 수 있습니다textView.Services
. 추가 형광펜은 사용하지 않습니다.여러
IHighlighter
에서HighlightedLine
의 를 결합 하는 구현을 만듭니다DocumentHighlighter
. 이것은 SharpDevelop 5의 C # 의미 강조 표시에 사용하는 접근 방식으로, 기존 .xshd 기반 C # 강조 표시를 확장하는 추가 형광펜으로 작동합니다. 그러나이 접근 방식은 복잡하고 (HighlightedLine
의 병합 은 섹션의 순서 지정 및 중첩 제약보기 조건을 고려할 때 중요하지 않음) 알림IHighlighter
을 처리하기 위해 인터페이스에 , 대한 API 변경이 필요합니다OnHighlightStateChanged
(AvalonEdit 4.x의는에 중첩 된 파생 클래스를 사용합니다.HighlightingColorizer
이 콜백에 액세스하려면 AvalonEdit 5.0에서 이벤트를 사용합니다.)
참고 URL : https://stackoverflow.com/questions/8992137/avalonedit-cascading-highlightingcolorizers
'ProgramingTip' 카테고리의 다른 글
*이 '기능에 대한'rvalue 참조 없음에 대한 해결 방법 (0) | 2020.11.12 |
---|---|
LAPACK을 사용하여 Cython 기반 확장 배포 (0) | 2020.11.12 |
BcdDivide 함수는 Delphi XE 및 XE2에서 다르게 작동합니다. (0) | 2020.11.12 |
Visual Studio Code에서 엿보기 (0) | 2020.11.12 |
사용자 자격 증명을위한 Android 키 체인 (0) | 2020.11.12 |