我正在制作一个 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:@"-"];
然后,对于每个符号,我将使用 NSTextView
的 NSTextStorage
为所有匹配的 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/