我想在 HexFiend 框架驱动的 TextView 中实现颜色。我几乎成功了,但是颜色渲染得不是很好。有什么建议吗?

I want To achieve color in a TextView driven by the HexFiend framework. I almost succeeded, but the colours don't render very well. Any suggestion?

我正在尝试在 HexFiend 框架驱动的 TextView 中实现多色文本。我已经成功地将纯黑色设置为背景,但现在我想实现多色文本。我研究了很多 HexFiend 源代码,并得出以下代码: 我对 HFStringEncodingTextRepresenter 进行了子类化,并且基本上覆盖了一种方法:styleForAttributes:ranges:

#import "HFRepresenterStringEncodingTextView.h"
#import <Cocoa/Cocoa.h>
#import <HexFiend/HexFiend.h>
#import "HFTextVisualStyleRun.h"

NS_ASSUME_NONNULL_BEGIN

@interface SpecialTextRepresenter : HFStringEncodingTextRepresenter

@end

NS_ASSUME_NONNULL_END

#import "SpecialTextRepresenter.h"

@implementation SpecialTextRepresenter


- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {
    HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
     
    [run setRange:NSMakeRange(0, [self.controller.byteArray length])];
    [run setForegroundColor:[HFColor orangeColor]];
    [run setBackgroundColor:[HFColor blackColor]];

    NSMutableIndexSet *bookmarkExtents = nil;

    if (! bookmarkExtents) bookmarkExtents = [[NSMutableIndexSet alloc] init];
     
    [bookmarkExtents addIndexesInRange:NSMakeRange(0,[self.controller.byteArray length])];
     
     if (bookmarkExtents) {
         [run setBookmarkExtents:bookmarkExtents];
     }

    return run;
}

@end

我很高兴找到了解决方案,但不幸的是它看起来不太好:

到目前为止,我无法确定为什么行与行之间有那些彩色虚线。任何帮助是极大的赞赏。谢谢

我找到了导致彩色线条的问题。它与称为“书签”的 HexFiend 功能有关。在这种情况下不需要它,因为我们只对文本颜色感兴趣。因此,我的问题中列出的代码可以简化:

- (HFTextVisualStyleRun *)styleForAttributes:(NSSet *)attributes range:(NSRange)range {

    HFTextVisualStyleRun *run = [[HFTextVisualStyleRun alloc] init];
         
    [run setRange:NSMakeRange(0, [self.controller.byteArray length])];
    [run setForegroundColor:[HFColor orangeColor]];
    [run setBackgroundColor:[HFColor blackColor]];

    return run;
}

结果看起来不错,正如我所期待的:

设置一种颜色覆盖上面的方法很简单,但是要做到精确range-basedmulti-colour就另当别论了。我试图通过使用 HFRepresenterTextView 的 属性 来实现这一点:

@property (nullable, nonatomic, copy) NSArray *styles;

这是一个数组,包含 HFTextVisualStyleRun 类型的对象,与我们在上述重写方法中处理的对象相同。这很棘手,因为在设置数组时,如果其中一个索引没有分配属性,框架会引发异常。一旦我得到一个干净的解决方案,我会尽快完成这个答案。谢谢