问题描述
|
我正在制作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];
}
}