다음을 통해 공유


편집기에서

편집기의 텍스트 보기 및 사용자 인터페이스에서 모델 별도 텍스트 편집기를 유지 하도록 설계 된 다른 하위 시스템의 구성입니다.

이 섹션에서는 편집기의 여러 측면에 설명합니다.

이 섹션에서는 편집기의 기능에 설명합니다.

하위 시스템의 개요

텍스트 모델 하위 시스템

텍스트 모델 하위 시스템을 표시 하 고 조작의 활성화입니다. 텍스트 모델 하위 시스템을 포함의 ITextBuffer 편집기에서 표시 되는 일련의 문자에 설명 하는 인터페이스입니다. 이 텍스트는 수정, 추적 및 다양 한 방법으로 조작할 수 있습니다. 텍스트 모델에는 다음과 같은 측면에 대 한 형식이 있습니다.

  • 텍스트 파일에 연결 하 고 읽기 및 해당 파일 시스템에 쓰기를 관리 하는 서비스입니다.

  • 두 시퀀스의 개체의 최소한의 차이 발견 하는 차이점 보관용 서비스입니다.

  • 텍스트 버퍼의 다른 버퍼가 텍스트의 하위 집합을 설명 하는 시스템입니다.

텍스트 모델 하위 시스템의 사용자 인터페이스 (UI) 개념을 무료입니다. 예를 들어, 해당 서식을 지정 하거나 텍스트 레이아웃에 대 한 책임을 지지 않습니다와 지식이 텍스트와 연결 될 수 있습니다 시각적 장식 했습니다.

Microsoft.VisualStudio.Text.Data.dll 및 Microsoft.VisualStudio.CoreUtilitiy.dll에 의존 하는 텍스트 모델 하위 시스템의 공용 형식을 포함 되어 있는.NET Framework 기본 클래스 라이브러리와 관리 되는 확장성 프레임 워크 (MEF).

텍스트 보기 하위 시스템

텍스트 보기 하위 시스템을 서식 지정 하 고 텍스트를 표시 하는 담당 합니다. 이 하위 시스템의 형식 Windows Presentation Foundation (WPF) 형식을 사용 하는 여부에 따라 두 개의 레이어를 나뉩니다. 가장 중요 한 형식에는 ITextViewIWpfTextView, 집합 표시 되는 텍스트 줄의 캐럿, 선택, 및 WPF UI 요소를 사용 하 여 텍스트를 표시할 기능을 제어 합니다. 이 하위 시스템 또한 텍스트 주변 여백 표시 영역을 제공 합니다. 이러한 여백을 확장할 수 및 다양 한 종류의 콘텐츠 및 시각적 효과 포함할 수 있습니다. 줄 번호 표시 되 고 스크롤 막대 여백입니다.

텍스트 보기 하위 시스템의 공용 형식은 microsoft.visualstudio.text.ui.dll와 microsoft.visualstudio.text.ui.wpf.dll에 포함 되어 있습니다. 첫 번째 어셈블리는 플랫폼 독립적 요소를 포함 하 고 두 번째 WPF에 특정 요소가 포함 되어 있습니다.

하위 분류 시스템

분류 하위 시스템을 텍스트의 글꼴 속성을 확인 하는 데 담당 합니다. 분류자는 텍스트 "키워드" 또는 "메모" 등의 다른 클래스에 중단 됩니다. 분류 서식 표가 이러한 클래스는 실제 글꼴 속성을 "블루 Consolas 10 pt" 관련이 있습니다. 서식을 지정 하 고 텍스트를 렌더링 하는 경우이 정보는 텍스트 보기에서 사용 됩니다. 태그 등은이 항목의 뒷부분에 자세히 설명 되어 있습니다 텍스트 범위와 관련 된 데이터를입니다.

하위 분류 시스템의 공용 형식을 microsoft.visualstudio.text.logic.dll에 포함 되어 있으며 microsoft.visualstudio.text.ui.wpf.dll에 포함 된 시각적 측면을 분류, 상호 작용 합니다.

작업 하위 시스템

편집기 동작을 정의 하는 작업이 하위 시스템입니다. Visual Studio 편집기 명령에 대 한 구현 및 실행 취소 시스템을 제공합니다.

자세히 보기에서는 텍스트 모델 및 텍스트 보기

텍스트 모델

텍스트 모델 하위 시스템의 여러 그룹화 텍스트 형식으로 구성 됩니다. 여기에 버퍼가 텍스트, 텍스트 스냅샷 및 텍스트 범위를 포함 합니다.

텍스트 버퍼 및 텍스트 스냅샷

ITextBuffer 인터페이스 인코딩이 사용 되는 utf-16을 사용 하 여 인코딩된 유니코드 문자 시퀀스를 나타내는 String 입력을.하 고. 필요 하지 않은 파일 시스템으로 문서에서 텍스트 버퍼를 유지할 수 있습니다.

ITextBufferFactoryService 는 빈 텍스트 버퍼 또는 문자열 또는 초기화 텍스트 버퍼를 만드는 데 사용 됩니다 TextReader. 텍스트 버퍼를 파일 시스템으로 유지할 수 있는 ITextDocument.

스레드를 호출 하 여 버퍼의 소유권을 받을 때까지 모든 스레드가 텍스트 버퍼를 편집할 수 있습니다 TakeThreadOwnership. 그런 다음 해당 스레드의 편집 수행할 수 있습니다.

텍스트 버퍼의 수명 동안 많은 버전을 통해 이동할 수 있습니다. 버퍼를 편집할 때마다 하는 변경할 수 없는 새 버전 생성 됩니다 ITextSnapshot 버전 버퍼의 내용을 나타냅니다. 스냅샷 텍스트는 변경할 수 없습니다 때문에 나타내는 텍스트 버퍼를 계속 해 서 변경 하는 경우에 텍스트 스냅샷을 모든 스레드에서 제한 없이 액세스할 수 있습니다.

텍스트 스냅샷 및 스냅샷 줄 텍스트

문자 시퀀스 또는 시퀀스의 줄으로 텍스트 스냅샷의 컨텐트를 볼 수 있습니다. 문자 및 줄 두 인덱스가 0부터 시작 됩니다. 빈 텍스트 스냅샷 0 문자 및 빈 줄을 포함합니다. 선은 잘못 유니코드 줄 바꿈 문자 시퀀스를 하거나 시작 하거나 버퍼의 끝을 구분 합니다. 줄 바꿈 문자는 텍스트 스냅샷에서 명시적으로 표현 되지 및 줄 바꿈 텍스트에 모두 동일 하 게 해야 합니다.

참고

Visual Studio 편집기에서 줄 바꿈 문자에 대 한 자세한 내용은 인코딩 및 줄 바꿈.

텍스트 줄에 표시 되는 ITextSnapshotLine 개체에서 특정 문자 위치 또는 특정 라인 번호에 대 한 텍스트 스냅샷을 얻을 수 있습니다.

SnapshotPoints, SnapshotSpans, 및 NormalizedSnapshotSpanCollections

A SnapshotPoint 는 스냅샷이 문자 위치를 나타냅니다. 위치가 0과 길이를 스냅샷 사이 보장 됩니다. A SnapshotSpan 의 스냅샷 텍스트 범위를 나타냅니다. 끝 위치가 0과 길이를 스냅샷 사이 보장 됩니다. NormalizedSnapshotSpanCollection 의 집합으로 구성 됩니다 SnapshotSpan 에서 동일한 스냅샷 개체입니다.

범위 및 NormalizedSpanCollections

A Span 스냅샷 텍스트에서에서 텍스트의 범위에 적용할 수 있는 간격을 나타냅니다. 스냅샷 위치 0부터 시작 되므로 범위 0을 포함 하 여 모든 위치에서 시작할 수 있습니다. End 에 걸쳐 수를 합한 것과 같은 해당 Start 속성 및 해당 Length 속성입니다. A Span 의해 인덱싱된 문자는 포함 되지 않습니다을 End 속성입니다. 시작 된 예를 들어, 범위 5, 길이 = = 3 인 끝 = 8, 5, 6 및 7 위치에 있는 문자를 포함 하 고. 이 범위에 대 한 표기법 5..8입니다).

모든 위치에서 공통 끝 위치를 포함 하 여가 있는 경우 두 개의 범위를 교차 합니다. 따라서이 교차 [3, 5) 및 [2, 7)입니다 [3, 5)의 교차 및 [3, 5) 및 [5, 7)입니다 [5, 5). (알 [5, 5)는 빈 범위입니다.)

위치 끝 위치를 제외 하 고, 공통 된 경우 두 개의 범위를 겹칩니다. 빈 범위는 전혀 다른 범위와 겹치는 및 겹치는 두 범위에는 비어 있습니다.

A NormalizedSpanCollection 범위에 걸쳐 시작 속성의 순서는 목록입니다. 목록에서 중복 되 나 인접해 있는 범위에 병합 됩니다. 예를 들어, 범위 집합이 [5..9), [0..1), [3..6), 및 [9..10), 표준화 된 확장 목록입니다 [0..1), [3..10).

ITextEdit, TextVersion 및 텍스트 변경 알림

텍스트 버퍼의 내용을 사용 하 여 변경할 수 있습니다는 ITextEdit 개체입니다. 이러한 개체를 만드는 (중 하나를 사용 하 여는 CreateEdit() 메서드를 ITextBuffer)의 텍스트 편집 구성 됩니다 텍스트 트랜잭션을 시작 합니다. 모든 편집 하는 일부 텍스트 문자열 버퍼에서 범위를 것. 트랜잭션이 시작 되었을 때 버퍼의 스냅샷을 기준으로 좌표 및 모든 편집 내용이 표시 됩니다. ITextEdit 개체가 동일한 트랜잭션에서 다른 편집에 영향을 받는 편집의 좌표를 조정 합니다.

예를 들어,이 문자열이 들어 있는 텍스트 버퍼를 고려해 야 합니다.

abcdefghij

두 편집, 범위를 대체 한 편집을 포함 하는 트랜잭션을 적용 [2..4) 문자를 사용 하 여 X 및 범위에 대체 하 여 두 번째 편집 [6..9) 문자를 사용 하 여 Y. 이 버퍼 결과 다음과 같습니다.

abXefYj

첫 번째 편집을 적용 하기 전에 두 번째 편집에 대 한 좌표를 트랜잭션 시작 부분에는 버퍼의 내용을 기준으로 계산한 것입니다.

버퍼에 변경 내용이 적용 하면는 ITextEdit 개체는 커밋 호출 하 여 해당 Apply() 메서드. 하나 이상의 빈 편집 되었으면 새 ITextVersion 을 만들면 새 ITextSnapshot 생성 됩니다 및 한 Changed 이벤트가 발생할 때. 텍스트 버전 마다 다른가 텍스트 스냅샷. 텍스트 스냅샷 텍스트 버퍼의 전체 상태는 편집 거래 후 나타내지만 스냅샷으로 변경 다음에만 텍스트 버전에 설명 합니다. 일반적으로 텍스트는 한 번만 사용 합니다 스냅숏과 텍스트 버전을 한 동안 유지 해야 하는 동안 다음 삭제 합니다.

텍스트 버전을 포함 한 INormalizedTextChangeCollection. 이 컬렉션의 내용에 설명, 스냅샷을 적용할 때 다음 스냅샷 생성 합니다. 모든 ITextChange 컬렉션에 변경, 대체 문자열에 대체 문자열의 문자 위치를 포함 합니다. 에 대 한 기본 삽입, 대체 문자열이 비어 및 삭제에 대 한 기본 대체 문자열이 비어 있습니다. 정규화 된 컬렉션이 항상 있습니다 null 텍스트 버퍼의 가장 최신 버전입니다.

하나의 ITextEdit 개체 수는 인스턴스화되지 텍스트 버퍼를 언제 든 지 및 모든 텍스트 편집 (소유권 요구 되는 경우) 텍스트 버퍼를 소유 하는 스레드에서 수행 해야 합니다. 호출 하 여 텍스트 편집 중단 될 수 있습니다 그 Cancel 메서드 또는 해당 Dispose 메서드.

ITextBuffer또한 제공 Insert(), Delete(), 및 Replace() 비슷합니다 메서드를 찾을 수에 있는 ITextEdit 인터페이스입니다. 이러한 호출 한 만들는 것과 같은 효과 ITextEdit 개체, 유사한 호출을 수행 하 고 다음 편집을 적용 합니다.

포인트를 추적 하 고 범위를 추적 합니다.

ITrackingPoint 텍스트 버퍼에 있는 문자 위치를 나타냅니다. 버퍼 이동 문자의 위치 시키는 방법으로 편집 하는 경우 추적 지점으로 이동 합니다. 예를 들어 추적 지점에서 버퍼에서 10 위치를 참조 하 고 버퍼 시작 부분에 문자 다섯 개가 삽입 됩니다 경우 추적 지점 다음 15 위치를 참조 합니다. 삽입 추적 지점에서 표시의 위치를 정확 하 게 발생 하는 경우의 동작으로 결정의 PointTrackingMode, 하나가 될 수 있습니다 Positive 또는 Negative. 관리 모드가 양수 이면 끝에 삽입 되는 동일한 문자 추적 지점이입니다. 관리 모드가 음수 이면 추적 지점을 첫 번째 삽입 된 문자를 원래 위치에 참조 합니다. 추적 지점에서 표현 되는 위치에 있는 문자를 삭제 하는 경우 추적 지점 삭제 된 범위 뒤에 오는 첫 번째 문자를 이동 합니다. 예를 들어 추적 지점 5, 위치의 문자를 의미 하 고 3-6 위치에 있는 문자 삭제 하면 추적 지점 3 위치의 문자 참조 합니다.

ITrackingSpan 하나의 위치 대신 문자 범위를 나타냅니다. 해당 동작에 의해 결정 됩니다 해당 SpanTrackingMode. 범위 관리 모드에 있는 경우 EdgeInclusive, 추적 기간; 가장자리에 삽입 된 텍스트를 포함 하 게 범위 관리 모드 경우 EdgeExclusive, 추적 범위 가장자리에 삽입 된 텍스트 통합 하지 않습니다. 그러나 범위 관리 모드에 있는 경우 EdgePositive, 삽입 방향으로 시작, 현재 위치를 푸시합니다 경우 범위 관리 모드 EdgeNegative, 끝으로 현재 위치에 삽입을 푸시합니다.

위치를 추적 하거나 추적 하는 범위에 속하는 텍스트 버퍼의 모든 스냅샷을 얻을 수 있습니다. 안전 하 게 모든 스레드에서 포인트를 추적 하 고 추적 범위를 참조할 수 있습니다.

콘텐츠 형식

콘텐츠 형식은 여러 종류의 콘텐츠를 정의 하는 메커니즘입니다. 콘텐트 유형을 파일 형식을 "텍스트", "코드" 또는 "이진" 또는 "xml", "vb" 또는 "c#" 기술 형식 될 수 있습니다. 예를 들어, 해당 단어 "using" C#와 Visual Basic 둘 다 있지만 다른 프로그래밍 언어에는 키워드입니다. 따라서, this이 키워드의 정의 "c#" 및 "vb" 콘텐츠 형식으로 제한 됩니다.

콘텐츠 형식은 장식 및 기타 요소에는 편집기에 대 한 필터로 사용 됩니다. 많은 편집기 기능 및 확장 포인트 당 콘텐츠 형식 정의 됩니다. 예를 들어, 텍스트 색 지정 일반 텍스트 파일, XML 파일 및 Visual Basic 소스 코드 파일에 대 한 다릅니다. 일반적으로 텍스트 버퍼는 만들 때 텍스트 버퍼의 콘텐츠 형식을 변경할 수 있습니다 콘텐츠 형식이 지정 됩니다.

콘텐츠 형식이 다른 콘텐츠 형식의 다중 상속할 수 있습니다. ContentTypeDefinition 여러 기본 유형이 지정 된 콘텐츠 형식의 부모로 지정할 수 있습니다.

개발자는 자신의 콘텐츠 형식 정의 하 고 사용 하 여이 등록 수는 IContentTypeRegistryService. 사용 하 여 특정 콘텐츠 형식에 여러 편집기 기능 정의할 수 있는 ContentTypeAttribute. 예를 들어 특정 콘텐츠 형식을 표시 편집기에만 적용 되도록 여백을 편집기, 장식, 및 마우스 처리기 정의할 수 있습니다.

텍스트 보기

모델 뷰 컨트롤러 (MVC) 패턴의 보기 부분 뷰, 스크롤 막대 및 캐럿 같은 그래픽 요소를 서식을 텍스트 뷰를 정의 합니다. 모든 프레젠테이션 요소 Visual Studio 편집기의 WPF에 기초 합니다.

텍스트 뷰

ITextView 인터페이스 텍스트 뷰는 플랫폼에 관계 없이 표시 됩니다. 주로 텍스트 문서 창에 표시 하는 데 사용 되지만 다른 목적을 위해 예를 들어, 도구 설명으로 사용할 수도 있습니다.

텍스트 뷰 텍스트 버퍼의 다른 종류를 참조합니다. TextViewModel 속성을 참조 하는 ITextViewModel 는 이러한 세 가지 다른 텍스트 버퍼를 가리키는 개체: 상위 수준 데이터 버퍼가 편집 버퍼는 편집 발생 하 고 버퍼가 텍스트 보기에 표시 되는 시각적 버퍼에 데이터 버퍼를.

텍스트가 기본 텍스트 버퍼를 연결 된 분류자에 따라 서식이 지정 된 및 텍스트 보기에 연결 된 장식 공급자를 사용 하 여 표시 됩니다.

텍스트 뷰 좌표계

텍스트 뷰 좌표계 텍스트 보기에서 위치를 지정합니다. 이 좌표계에서의 x 값 0.0에 표시 되는 텍스트의 왼쪽된 가장자리를 해당 하는 y 값 0.0에 표시 되는 텍스트의 위쪽 가장자리에 해당 합니다.x 좌표를 증가 왼쪽에서 오른쪽으로 하는 y 증가 위쪽에서 아래쪽으로 조정 됩니다.

세로로 스크롤할 때 뷰포트 (표시 텍스트 창에 있는 텍스트의 부분) 같은 방식으로 가로 방향으로 스크롤할 수 없습니다. 뷰포트 그리기 화면에 움직이는 그 왼쪽된 좌표를 변경 하 여 가로로 스크롤 됩니다. 그러나, 뷰포트 세로로 하면 렌더링 된 텍스트를 변경 하 여 스크롤할 수 있는 LayoutChanged 이벤트가 발생 합니다.

좌표계에서 거리가 논리 픽셀에 해당 합니다. 텍스트 렌더링 화면 배율 변환을 하지 않고 표시 되는 경우 한 단위 텍스트 렌더링 좌표계에서 디스플레이 1 픽셀에 해당 합니다.

여백

ITextViewMargin 인터페이스는 여백을 나타내는 및 여백과 크기의 표시 여부를 제어할 수 있습니다. "Top", "왼쪽", "오른쪽" 및 "아래쪽" 라고 하 고 위쪽, 아래쪽, 왼쪽 또는 오른쪽 가장자리 보기에 연결 된 네 개의 미리 정의 된 여백입니다. 이러한 여백을 다른 여백 배치 될 수 있는 컨테이너입니다. 여백 크기 및 여백의 표시 여부를 반환 하는 메서드는 인터페이스를 정의 합니다. 여백은 텍스트는 연결 된 보기에 대 한 추가 정보를 제공 하는 시각적 요소입니다. 예를 들어, 줄 번호 여백 텍스트 보기에 대 한 줄 번호를 표시합니다. 문자 모양 여백 UI 요소를 표시 합니다.

IWpfTextViewMarginProvider 인터페이스 생성 및 여백 위치를 처리 합니다. 여백 다른 여백은 기준으로 주문할 수 있습니다. 높은 우선 순위의 여백 텍스트 보기에 더 가까이 배치 됩니다. 예를 들어, 두 왼쪽된 여백, 여백 A 및 B, 여백 여백 B A 여백 보다 낮은 우선 있으면 A. 여백 왼쪽에 B 여백 표시

텍스트 뷰 호스트

IWpfTextViewHost 텍스트 보기 및 보기, 예를 들어, 스크롤 막대와 함께 제공 되는 인접해 있는 장식이 인터페이스를 포함 합니다. 텍스트 뷰 호스트도 보기의 테두리에 연결 된 여백이 포함 됩니다.

서식이 지정 된 텍스트

텍스트 보기에 표시 되는 텍스트의 구성 됩니다 ITextViewLine 개체입니다. 모든 텍스트 보기 줄 텍스트 보기에서 텍스트를 한 줄에 해당합니다. 내부 버퍼의 긴 줄 수 부분적으로 가려진 (자동 줄 바꿈 설정 하지 않은 경우) 하거나 여러 뷰 텍스트의 줄으로 나누었습니다. ITextViewLine 메서드와 속성 행이 관련 될 수 있습니다 장식 및 매핑 좌표와 문자에 대 한 인터페이스를 포함 합니다.

ITextViewLine개체를 사용 하 여 생성 된 IFormattedLineSource 인터페이스입니다. 현재 보기에 표시 되는 텍스트에 대 한 우려만 하는 경우 서식 소스를 무시할 수 있습니다. 아닌 텍스트 형식으로 원하는 (예 지원 서식 있는 텍스트 잘라내기 및 붙여넣기를), 보기에서 표시 사용할 수 있습니다 IFormattedLineSource 형식 텍스트를 텍스트 버퍼에서에 합니다.

텍스트 보기 형식을 하나 ITextSnapshotLine 번에.

편집기 기능

편집기의 기능 설계는 정의 기능의 구현에서 분리 됩니다. 편집기에 이러한 기능이 포함 되어 있습니다.

  • 태그와 분류자

  • 장식

  • Projection

  • 개요

  • 마우스와 키 바인딩

  • 운영 및 기본 형식

  • IntelliSense

태그와 분류자

태그 표시자 텍스트 범위와 관련 된입니다. 이들은 다른 방법으로, 예를 들어, 텍스트가 색, 밑줄, 그래픽 또는 팝업을 사용 하 여 표시할 수 있습니다. 분류자 태그의 한 종류입니다.

태그의 다른 종류는 TextMarkerTag 텍스트 강조 표시, OutliningRegionTag 개요에 대 한 및 ErrorTag 컴파일 오류입니다.

분류 유형

IClassificationType 인터페이스는 텍스트에 대 한 추상 항목는 등가 클래스를 나타냅니다. 분류 유형 분류 외에서 다중 상속할 수 있습니다. 예를 들어, 프로그래밍 언어 분류 "키워드", "설명" 및 "식별자"는 모든 "코드를" 상속 포함 될 수 있습니다. 자연 언어 분류 종류 "명사", "동사" 및 "형용사"는 모든 "자연 언어"에서 상속할 수 있습니다.

분류

분류 분류 특정 형식의 인스턴스는 텍스트의 범위에 걸쳐 일반적입니다. A ClassificationSpan 분류를 나타내는 데 사용 됩니다. 분류 하는 범위는 텍스트의 특정 범위에 설명 하 고이 텍스트 범위가 특정 분류 형식이 시스템에 지시를 레이블로 생각할 수 있습니다.

분류자

IClassifier 텍스트 분류 집합으로 구분 하는 메커니즘입니다. 분류자 특정 콘텐츠 형식에 대해 정의 하 고 특정 텍스트 버퍼를 인스턴스화할 수 합니다. 클라이언트에서 구현 해야 하 IClassifier 텍스트 분류에 참여할 수 있습니다.

분류자 수직적

분류자 수집기는 텍스트 버퍼에 대 한 모든 분류자 분류 하나의 집합으로 결합 하는 메커니즘입니다. 예를 들어, C# 분류자와 영어 분류자 분류 C# 파일에서 주석 위에 만들 수 있습니다. 이 설명은 참조 하십시오.

// This method produces a classifier

C# 분류자에 주석으로 전체 범위 레이블을 수 있습니다 및 영어 분류자 "생성" "동사" 및 "방법" "명사"로 분류 될 수 있습니다. 수집기 겹치지 않는 분류 집합이 며, 모든 공헌을 형식 집합을 기반으로 합니다.

분류자 수집기도 분류자 때문 다음 텍스트 분류 집합으로 나눕니다. 또한 분류자 수집기 겹쳐 있는 분류 및 분류 정렬 하도록 확인 됩니다. 개별 분류자 사용할 수 있는 임의의 순서로 분류 된 집합을 반환 하는 중복입니다.

분류 서식 지정 및 텍스트 색 지정

텍스트 서식 지정 텍스트 등급을 기본적으로 제공 되는 기능의 예입니다. 이 응용 프로그램에서 텍스트의 표시를 확인 하는 텍스트 뷰 계층에서 사용 됩니다. WPF의 텍스트 서식 지정 영역 다릅니다 있지만 논리 정의 분류를 아닙니다.

구분 형식을 서식 분류 특정 형식에 대 한 속성 집합입니다. 이러한 형식을 분류 종류의 부모 형식에서 상속 됩니다.

IClassificationFormatMap 분류 형식에서 지도에 텍스트 서식 지정 속성의 집합입니다. 형식 맵 편집기에서 구현 형식을 분류 하는 모든 내보내기 처리합니다.

장식

장식 글꼴 및 문자 텍스트 보기에서 색을 직접 관련 되지 않은 그래픽 효과입니다. 예를 들어 대부분의 프로그래밍 언어에서 코드 컴파일 되지 않은 표시 하는 데 사용 되는 빨간색 오류 표시선 밑줄 포함 된 장식, 이며 장식 팝업 도구 설명입니다. 장식에서 파생 된 UIElement 을 구현 하 고 ITag. 두 가지 특수 한 장식 태그,는 SpaceNegotiatingAdornmentTag, 보기에서 텍스트와 같은 공간을 차지 하는 액세서리를 하는 ErrorTag, 오류 표시선 밑줄에 대 한.

포함 된 액세서리 보기 서식이 지정 된 텍스트의 일부를 구성 하는 그래픽입니다. 이들은 다양 한 제일 계층에서 구성 됩니다. 세 가지 기본 제공 된 계층은 다음과 같이: 텍스트, 캐럿, 및 선택 합니다. 그러나 개발자가 더 많은 레이어를 정의 하 고 순서를 기준으로 다른이 넣을 수 있습니다. 세 종류의 포함 된 장식 (텍스트를 삭제할 때 어떤 텍스트를 이동할 때 이동 되며 삭제) 텍스트에 상대적인 장식, (어떤 보기의 텍스트가 아닌 부분과 하지 않아도) 보기에 상대적인 장식 및 소유자 제어 장식 (개발자가 배치를 관리 해야)입니다.

팝업 장식을 작은 창 위에 텍스트 보기, 예를 들어, 도구 설명에에서 표시 되는 그래픽입니다.

Projection

다른 종류의 텍스트를 실제로 저장 하지 않지만 텍스트가 다른 텍스트 버퍼에서 결합 하는 대신 텍스트 버퍼를 구성 하는 방법으로 합니다. 예를 들어, 프로젝션 버퍼 텍스트에서 다른 두 가지 버퍼를 연결 하 고 단 하나의 버퍼에서 인 경우에 결과 표시 하거나 하나 이상의 버퍼에서 텍스트를 숨길 수 사용할 수 있습니다. 프로젝션 버퍼 소스 버퍼를 다른 투영 버퍼 역할을 할 수 있습니다. 여러 가지 방법으로 텍스트를 다시 정렬할 수는 투영에 관련 된 버퍼 집합을 생성할 수 있습니다. (의 집합이 라고도 알려져 있는 버퍼 그래프입니다.) Visual Studio 텍스트 개요 기능이 ASP에 대 한 Visual Studio 편집기는 축소 된 텍스트를 숨길 수 있는 프로젝션 버퍼를 사용 하 여 구현 됩니다.NET 페이지 Visual Basic 및 C#와 같은 포함 된 언어를 지원 하도록 프로젝션을 사용 합니다.

IProjectionBuffer 를 사용 하 여 만든 IProjectionBufferFactoryService. 프로젝션 버퍼는 순서가 있는 일련의 표시 됩니다 ITrackingSpan 로 알려진 개체 소스에 걸쳐. 이러한 확장의 내용은 문자 시퀀스로 표시 됩니다. 원본 범위에서 그려진 텍스트 버퍼 명명 된 원본 버퍼. 프로젝션 버퍼의 클라이언트는 일반 텍스트 버퍼와 다르다는 것을 알아야 필요가 없습니다.

프로젝션 버퍼가 텍스트 변경 이벤트를 원본 버퍼에 수신 대기합니다. 변경 텍스트 소스에 걸쳐 있을 때 투영 버퍼 변경 된 텍스트 좌표 자체 좌표를 매핑하고 적절 한 텍스트 변경 이벤트를 발생 시킵니다. 예를 들어, 이러한 내용이 소스 버퍼 A와 B를 고려해 야 합니다.

A: ABCDE
B: vwxyz

두 개의 텍스트 범위에서 한 모든 버퍼를 고이 기타 B, 버퍼의 모든 P 투영 버퍼 형식이 아니면 다음 P의 내용은 다음과 같습니다.

P: ABCDEvwxyz

경우 부분 xy P 버퍼 문자 위치 7 및 8에 삭제 되었음을 나타내는 이벤트를 발생 시킵니다. 그런 다음 B 버퍼에서 삭제 됩니다.

프로젝션 버퍼를 직접 편집할 수 있습니다. 편집 내용을 적절 한 원본 버퍼에 전파합니다. 예를 들어, 버퍼 P 6 ("v"의 원래 위치) 위치에 문자열을 삽입 하면 삽입 버퍼 B 1에서 전파 됩니다.

프로젝션 버퍼에 기여 원본 범위에 대 한 제한입니다. 원본 범위를 겹칠 수 있습니다. 프로젝션 버퍼에서 위치는 원본 버퍼에 둘 이상의 위치에 매핑할 수 없습니다 및 위치를 원본 버퍼에 투영 버퍼에서 둘 이상의 위치에 매핑할 수 없습니다. 없음 circularities 소스 버퍼 관계에서 사용할 수 있습니다.

원본 집합 버퍼를 투영 버퍼 변경 및 변경 내용 집합을 소스에 걸쳐 때 이벤트가 발생 합니다.

Elision 버퍼를 특별 한 프로젝션 버퍼입니다. 개요 및 확장 하 고 텍스트 블록을 축소 하는 작업에 주로 사용 됩니다. Elision 버퍼 한 소스 버퍼를 기반으로 하며 원본 버퍼의 순서가 지정 된 대로 elision 버퍼에서 범위 같은 정렬 되어야 합니다.

버퍼 그래프

IBufferGraph 인터페이스 매핑 그래프 프로젝션 버퍼의 전체 수 있습니다. 텍스트 버퍼 및 프로젝션 버퍼는 언어 컴파일러에 의해 생성 된 추상 구문 트리 훨씬 유도 비순환 그래프에 수집 됩니다. 그래프는 텍스트 버퍼 수 위 버퍼에서 정의 됩니다. 버퍼 그래프 지점 원본 버퍼에 위쪽 버퍼에서 나 위쪽 버퍼 집합에서 소스 버퍼 범위에 범위를 매핑할 수 있습니다. 마찬가지로 지점 지도 하거나 원본 버퍼에서 버퍼 위쪽에 걸쳐 수 있습니다. 사용 하 여 버퍼 그래프를 만들는 IBufferGraphFactoryService.

이벤트 및 버퍼 프로젝션

프로젝션 버퍼를 수정 하는 경우 수정 사항이 관련 된 버퍼 투영 버퍼에서 전송 됩니다. 버퍼 수정 후에 버퍼가 변경 이벤트가 발생할 지 깊은 버퍼부터 시작 합니다.

개요

개요를 확장 하거나 여러 텍스트 블록의 텍스트 보기에서 축소 하는 기능입니다. 개요 일종으로 정의 됩니다의 ITag, 장식 방법으로 정의 된 것과 동일 합니다. A OutliningRegionTag 확장 하거나 축소할 수 있는 텍스트 영역을 정의 하는 태그입니다. 개요를 사용 하 여 가져와야 합니다는 IOutliningManagerService 얻을 수 있는 IOutliningManager. 개요 관리자 열거, 축소 하 고, 및 확장으로 표현 되는 서로 다른 블록 ICollapsible 개체와 그에 따라 이벤트를 발생 시킵니다.

마우스 바인딩

마우스 바인딩이 다른 명령에 마우스 움직임을 연결합니다. 마우스 바인딩을 사용 하 여 정의 됩니다는 IMouseProcessorProvider, 키 바인딩을 사용 하 여 정의 하는 IKeyProcessorProvider. IWpfTextViewHost 자동으로 모든 바인딩을 인스턴스화하고 보기에서 마우스 이벤트에 연결 합니다.

IMouseProcessor 인터페이스는 다른 마우스 이벤트에 대 한 전처리 및 후 처리 이벤트 처리기를 포함 합니다. 핸들을 이벤트 중 하나, 일부의 방법으로 무시할 수 있습니다 MouseProcessorBase.

작업 편집기

스크립트 편집기 또는 다른 목적으로 상호 작용을 자동화할 편집기 작업을 사용할 수 있습니다. 가져올 수는 IEditorOperationsFactoryService 액세스 작업을 하는 지정 된 ITextView. 선택 영역을 수정 하거나 화면을 스크롤하려면 보기의 여러 부분에 캐럿을 이동 하 고 이러한 개체를 사용할 수 있습니다.

IntelliSense

IntelliSense 문 완성, 도움말 시그니처 (매개 변수 정보 라고도 함), 요약 정보 및 스마트 태그를 지원합니다.

문 완성 팝업 목록이 메서드 이름, XML 요소 및 기타 코딩 또는 태그 요소에 대 한 잠재적인 완료의 제공합니다. 일반적으로 사용자 동작 완료 세션을 호출합니다. 세션이 있는 잠재적인 완성을 표시 하 고 하나를 선택 하거나 목록을 닫을 수 있습니다. ICompletionBroker 만들기를 트리거하는 및 담당의 ICompletionSession. ICompletionSource 계산에서 CompletionSet 세션 완료 항목.

참고 항목

개념

편집기 확장 지점

편집기 가져오기