我正在制作一个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:@"-"];
然后对于每个符号,我会使用NSRanges
的{{1}}为所有匹配的NSTextStorage
着色。
我需要知道的是如何为此目的使用NSTextView
或类似的东西。
答案 0 :(得分:2)
我对this question的回答可能有助于将语法着色挂钩到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];
}
}