Colorizer.ColorizeLine 方法
获取颜色和字体每个字符的特性信息在中指定的行。
命名空间: Microsoft.VisualStudio.Package
程序集: Microsoft.VisualStudio.Package.LanguageService.11.0(在 Microsoft.VisualStudio.Package.LanguageService.11.0.dll 中)
Microsoft.VisualStudio.Package.LanguageService.10.0(在 Microsoft.VisualStudio.Package.LanguageService.10.0.dll 中)
Microsoft.VisualStudio.Package.LanguageService(在 Microsoft.VisualStudio.Package.LanguageService.dll 中)
Microsoft.VisualStudio.Package.LanguageService.9.0(在 Microsoft.VisualStudio.Package.LanguageService.9.0.dll 中)
语法
声明
Public Overridable Function ColorizeLine ( _
line As Integer, _
length As Integer, _
ptr As IntPtr, _
state As Integer, _
attrs As UInteger() _
) As Integer
public virtual int ColorizeLine(
int line,
int length,
IntPtr ptr,
int state,
uint[] attrs
)
参数
- line
类型:System.Int32
[in] 文本行来自的行号。
- length
类型:System.Int32
[in] 字符数在给定文本的。
- ptr
类型:System.IntPtr
[in] 对文本行的 unmarshaled 指针。
- state
类型:System.Int32
[in] 当前状态如维护由分析器。
- attrs
类型:array<System.UInt32[]
[in, out] 使用索引填充到 GetColorableItem 的数组列表如维护由 LanguageService 类。
返回值
类型:System.Int32
返回已更新的状态值。
实现
IVsColorizer.ColorizeLine(Int32, Int32, IntPtr, Int32, array<UInt32[])
备注
此方法分析行,另一个索引。 ColorableItem 中的语言服务列表所提供的每个字符的产品 (通过 GetColorableItem)。通常,此方法调用 IScanner 对象分析行标记为并返回每个标记的可着色项索引。
此方法是 ColorizeLine 的实现。
该基方法通过调用扫描仪的 ScanTokenAndProvideInfoAboutIt 方法一次处理整个行一个标记,直到行不足使用返回的 TokenInfo 结构对于颜色信息,并填充每个标记的 attrs 数组。
示例
下面是 Colorizer 类的托管包框架版本如何实现此方法。请注意使该文本处理字符串。
namespace Microsoft.VisualStudio.Package
{
public class Colorizer : IVsColorizer
{
IScanner scanner;
public virtual int ColorizeLine(int line,
int length,
IntPtr ptr,
int state,
uint[] attrs)
{
int linepos = 0;
if (this.scanner != null) {
try
{
string text = Marshal.PtrToStringUni(ptr, length);
this.scanner.SetSource(text, 0);
TokenInfo tokenInfo = new TokenInfo();
tokenInfo.EndIndex = -1;
while (this.scanner.ScanTokenAndProvideInfoAboutIt(tokenInfo, ref state))
{
if (attrs != null)
{
for (; linepos < tokenInfo.StartIndex; linepos++)
attrs[linepos] = (uint)TokenColor.Text;
for (; linepos <= tokenInfo.EndIndex; linepos++)
attrs[linepos] = (uint)tokenInfo.Color;
}
}
}
catch (Exception)
{
// Ignore exceptions
}
}
if (attrs != null)
{
// Must initialize the colors in all cases, otherwise you get
// random color junk on the screen.
for (; linepos < length; linepos++)
attrs[linepos] = (uint)TokenColor.Text;
}
return state;
}
}
}
.NET Framework 安全性
- 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关更多信息,请参见通过部分受信任的代码使用库。