구문 색을 입히는 데 (패키지 관리 프레임 워크)
구문 색 지정에는 다양 한 요소를 소스 파일에 서로 다른 색상과 스타일을 표시 하는 프로그래밍 언어의 기능입니다. 이 기능을 지원 하려면 파서 또는 어휘 요소가 또는 토큰 파일에서의 종류를 식별할 수 있는 스캐너를 제공 해야 합니다. 많은 언어 다양 한 방식으로 색 조정에서 키워드, 구분 기호 (예: 괄호, 중괄호)와 메모를 구분 합니다.
구현
색 지정을 지원 하기 위해 패키지 관리 프레임 워크 (MPF)이 포함 됩니다는 Colorizer 클래스는 implements는 IVsColorizer 인터페이스입니다. 이 클래스와 상호 작용 하는 IScanner 토큰 및 색상을 결정 합니다. 스캐너에 대 한 자세한 내용은 언어 서비스 파서 및 검색 프로그램 (관리 되는 패키지 프레임 워크). Colorizer 클래스 다음 색 정보가 토큰의 각 문자를 표시 하 고 편집기에 원본 파일이 표시 정보를 반환 합니다.
편집기로 반환 되는 색 정보 목록 색 항목의 인덱스입니다. 각 색 항목 색상 값 및 집합의 글꼴 특성 예: 굵게 지정 또는 취소선입니다. 편집기에서는 언어 서비스를 사용할 수 있는 기본 색 항목을 제공 합니다. 각 토큰 형식에 대 한 적절 한 색 인덱스를 지정 하면 됩니다. 그러나 토큰에 대 한 사용자 지정 색 항목 및 사용자가 제공 하는 인덱스를 제공 하 고 기본 목록 대신 색 항목 목록을 참조할 수 있습니다. 또한 설정 해야는 RequestStockColors 레지스트리 항목을 0 (또는 지정 하지는 RequestStockColors 항목에 모두) 사용자 지정 색을 지원 합니다. 이 레지스트리 항목과 함께 명명 된 매개 변수를 설정할 수 있는 ProvideLanguageServiceAttribute 사용자 지정 특성. 언어 서비스를 등록 하 고 해당 옵션 설정에 대 한 자세한 내용은 참조 하십시오. 언어 서비스 (패키지 관리 프레임 워크)를 등록 하는 중.
사용자 지정 색 항목
사용자 고유의 사용자 지정 색 항목을 제공 하려면 재정의 해야는 GetItemCount 및 GetColorableItem 방법에의 LanguageService 클래스. 첫 번째 방법은 언어 서비스를 지 원하는 사용자 지정 색 항목 개수를 반환 하 고 두 번째 사용자 지정 색 항목 인덱스를 가져옵니다. 사용자 지정 색 항목의 기본 목록을 만든. 언어 서비스의 생성자에서 수행 하는 데 필요한 모든입니다 제공할 각 색 항목 이름으로. 위치 사용자가 다른 집합 색 항목을 선택 하는 경우 Visual Studio 자동으로 처리 합니다. 이 이름이 표시 됩니다는 글꼴 및 색 속성 페이지에는 옵션 대화 상자 (Visual Studio 사용할 수 있는 도구 메뉴) 및 사용자가 색상 재정의 되었습니다이 이름에 따라 결정. 확인란이 레지스트리에서 캐시 저장 되 고 색 이름을 사용 하 여 액세스 합니다. 해당 글꼴 및 색 속성 페이지 표시 모든 색 이름을 사전순으로 각 색 이름을 사용자 언어의 이름입니다; 앞으로 사용자 지정 색을 그룹화 할 수 있습니다 있도록 예를 들어, "TestLanguage 설명"및"TestLanguage 키워드". 또는 사용자 색 항목 유형별로 그룹화 할 수 있습니다 "(TestLanguage) 주석은"및"키워드 (TestLanguage)". 그룹화 하면 언어 이름 사용 하는 것입니다.
경고
기존 색 항목 이름 충돌을 피할 수 있는 색 항목 이름에 언어 이름을 포함 하는 것이 좋습니다.
참고
개발 하는 동안 색 중 하나의 이름을 변경 하는 경우 Visual Studio 색도 액세스할 수 없습니다 처음 생성 하는 캐시를 재설정 해야 합니다.실행 하 여 수행할 수 있습니다의 실험적 하이브를 원래 대로 설정 Visual Studio SDK에 있는 프로그램 메뉴 명령입니다.
색 항목의 목록에서 첫 번째 항목은 참조 하는 유의 하십시오. Visual Studio 항상 기본 텍스트 색 및 해당 항목에 대 한 특성을 제공합니다. 가장 쉬운 방법은이를 처리 하기에는 자리 표시자 색 항목의 첫 번째 항목으로 제공할 수입니다.
하이 컬러 색 항목
24 비트 또는 높은 색상 값을 색 항목을 지원할 수 있습니다 수도 IVsHiColorItem 인터페이스입니다. MPF ColorableItem 지원 클래스의 IVsHiColorItem 인터페이스와 24 비트 색의 생성자와 정상적인 색 지정 합니다. 참조는 ColorableItem 클래스에 대 한 자세한 내용을 보려면. 다음 예제에서는 키워드 및 설명의 24 비트 색을 설정 하는 방법을 보여 줍니다. 24 비트 색 24 비트 색을 사용자의 데스크톱에 지원 되는 경우에 사용 됩니다. 그렇지 않으면, 기본 텍스트 색이 사용 됩니다.
기억, 이러한 언어에 대 한 기본 색상입니다. 사용자가 원하는에이 색을 변경할 수 있습니다.
예제
선언 하 고 사용 하 여 사용자 지정 색 항목의 배열을 채울 하는 방법을 보여 주는이 예제는 ColorableItem 클래스입니다. 24 비트 색을 사용 하는 키워드와 설명을 색 설정 하는이 예제입니다.
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace TestLanguagePackage
{
public class TestLanguageService : LanguageService
{
private ColorableItem[] m_colorableItems;
TestLanguageService() : base()
{
m_colorableItems = new ColorableItem[] {
new ColorableItem("TestLanguage – Text",
"Text",
COLORINDEX.CI_SYSPLAINTEXT_FG,
COLORINDEX.CI_SYSPLAINTEXT_BK,
System.Drawing.Color.Empty,
System.Drawing.Color.Empty,
FONTFLAGS.FF_DEFAULT),
new ColorableItem("TestLanguage – Keyword",
"Keyword",
COLORINDEX.CI_MAROON,
COLORINDEX.CI_SYSPLAINTEXT_BK,
System.Drawing.Color.FromArgb(192,32,32),
System.Drawing.Color.Empty,
FONTFLAGS.FF_BOLD),
new ColorableItem("TestLanguage – Comment",
"Comment",
COLORINDEX.CI_DARKGREEN,
COLORINDEX.CI_LIGHTGRAY,
System.Drawing.Color.FromArgb(32,128,32),
System.Drawing.Color.Empty,
FONTFLAGS.FF_DEFAULT)
// ...
// Add as many colorable items as you want to support.
};
}
}
}
Colorizer 클래스 및 스캐너
기본 LanguageService 클래스는 GetColorizer 메서드는 instantiantes의 Colorizer 클래스. 스캐너에서 반환 되는 GetScanner 메서드에 전달 된는 Colorizer 클래스 생성자입니다.
구현 해야는 GetScanner 버전의 메서드에서 LanguageService 클래스입니다. Colorizer 클래스에서 스캐너를 사용 하 여 모든 토큰 색 정보를 얻습니다.
스캐너를 채울 필요가 있는 TokenInfo 모든 토큰에 대 한 검색 구성 합니다. 색 인덱스를 사용 하려면 토큰이 범위를 차지 하는 것과 같이이 구조 정보가 들어 토큰 및 토큰 트리거 유형입니다 (참조 하십시오 TokenTriggers). 범위와 색 인덱스 색 지정에 대 한 필요는 Colorizer 클래스입니다.
색 인덱스가 저장의 TokenInfo 구조는 일반적으로 값을는 TokenColor 키워드 및 연산자와 같은 다양 한 언어 요소에 해당 하는 명명 된 인덱스 수가 제공 하는 열거형입니다. 일치 하는 색을 사용자 지정 항목을 나열 된 항목 표시를 TokenColor 열거형을 바로 사용할 수 있는 열거형의 색으로 각 토큰에 대 한. 그러나 색 항목을 추가 하거나 기존 값을 순서 대로 사용 하지 않을 경우 필요에 따라 해당 목록에 적절 한 인덱스를 반환 하 여 사용자 지정 색 항목 목록을 정렬 수 있습니다. 단순히 인덱스에 캐스팅 해야는 TokenColor 에 저장 하는 경우는 TokenInfo 구조체입니다. Visual Studio인덱스 에서만 볼 수 있습니다.
예제
다음 예제는 스캐너 세 토큰 형식 식별 될 수 있습니다: 숫자, 문장 부호 및 식별자 (아무 숫자나 문장 부호 없는). 이 설명을 위한 것 이며 포괄적인 파서 및 검색 프로그램 구현을 표시 하지 않습니다. 있다고 가정은 Lexer 클래스에 GetNextToken() 는 문자열을 반환 하는 메서드.
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace TestLanguagePackage
{
private Lexer lex;
public class TestScanner : IScanner
{
public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo,
ref int state)
{
bool foundToken = false;
string token = lex.GetNextToken();
if (token != null)
{
char firstChar = token[0];
if (Char.IsPunctuation(firstChar))
{
tokenInfo.Type = TokenType.Operator;
tokenInfo.Color = TokenColor.Keyword;
}
else if (Char.IsNumber)
{
tokenInfo.Type = TokenType.Literal;
tokenInfo.Color = TokenColor.Number;
}
else
{
tokenInfo.Type = TokenType.Identifier;
tokenInfo.Color = TokenColor.Identifier;
}
}
return foundToken;
}
참고 항목
개념
언어 서비스 파서 및 검색 프로그램 (관리 되는 패키지 프레임 워크)
언어 서비스 (패키지 관리 프레임 워크)를 등록 하는 중