如何在NSString中遍历各个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:@\"-\"];
然后,对于每个符号,我将使用“ 4”的“ 3”对所有匹配的“ 2”进行着色。 我需要知道的是如何使用ѭ5或类似的东西来实现此目的。     

解决方法

        我对这个问题的回答可能会有助于将语法着色与
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];
    }
}