objective-c - 如何循环遍历 NSString 中的各个 NSString? (语法突出显示/着色)

标签 objective-c cocoa nsstring

我正在制作一个 Brainfuck(编程语言)IDE,但我被语法着色困扰了。

我想用子字符串预定义一个 NSDictionary ,然后循环它们并 返回一个数组,其中包含(或循环遍历)给定字符串中子字符串的范围。

示例:

NSMutableDictionary* keywords = [[NSMutableDictionary alloc] init];

[keywords setObject:[self colorForSymbol:0] forKey:@"<"];

[keywords setObject:[self colorForSymbol:0] forKey:@">"];

[keywords setObject:[self colorForSymbol:1] forKey:@"+"];

[keywords setObject:[self colorForSymbol:1] forKey:@"-"];

然后,对于每个符号,我将使用 NSTextViewNSTextStorage 为所有匹配的 NSRanges 着色。

我需要知道的是如何使用 NSScanner 或类似的东西来达到此目的。

最佳答案

我对this question的回答可能有助于将语法着色 Hook 到 NSTextView 中。

要进行实际的标记化,您应该查看 NSScanner 。您可能需要为每个标记分多次解析文本。您还可以使用正则表达式,例如 RegexKitLite .

这是 NSScanner 的简单演示:

NSScanner* scanner = [NSScanner scannerWithString:@"A string <with> <tokens>"];

NSString* token = @"<";

NSMutableArray* ranges = [NSMutableArray array];

while(![scanner isAtEnd])
{
    [scanner scanUpToString:token intoString:nil];
    if(![scanner isAtEnd])
    {
        NSRange tokenRange = NSMakeRange([scanner scanLocation], 1);
        [ranges addObject:[NSValue valueWithRange:tokenRange]];
        [scanner scanString:token intoString:nil];
    }
}

关于objective-c - 如何循环遍历 NSString 中的各个 NSString? (语法突出显示/着色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325562/

相关文章:

iphone - 罗盘校准物镜-c

objective-c - 核心数据属性唯一性

swift - NSMenu 打开时出现 NSAlert 会导致 UI 卡住

ios - UITextField 获取当前编辑的单词

iphone - 在后台发送邮件

iphone - 按下主页按钮时强制退出 iPhone 应用程序(在 iOS4 上)

cocoa - 如何移动 NSTextView 开头的插入点?

objective-c - 核心数据文件大小

objective-c - 将 NSString 中的选项卡替换为\t

ios - 附加到 NSString 的推荐方法是什么