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] 当前状态如维护由分析器。

返回值

类型: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 安全性

请参见

参考

Colorizer 类

Microsoft.VisualStudio.Package 命名空间