Недавно я работал над простой в использовании системой подсветки синтаксиса для личного проекта. До сих пор у меня все работало правильно, находя диапазон определенных строк и выделяя этот диапазон в NSTextView. Все работает, пока вы не попытаетесь набрать выделенное слово дважды, что приводит к ошибке, показанной ниже:
<div class="container">
<div> <!-- This <div> would not get highlighted -->
Hello World
</div>
</div> <!-- this </div> would not get highlighted -->
Я считаю, что это происходит, потому что я получаю только первое вхождение строки NSString с помощью метода rangeOfString, и по этой причине подсвечивается только первый выделенный элемент.
Извините за длинное объяснение! В любом случае, мне было интересно, существует ли метод rangeOfString или что-то подобное, что может дать мне NSArray из NSRanges для каждого вхождения строки NSString внутри другой строки NSString. Ниже приведена строка кода, которую я использую для получения моего диапазона:
NSString *textViewString = [textView string];
NSString *textToHighlight = @"<div>";
NSRange area;
area.location = 0;
area.length = [textViewString length];
NSRange range = [textViewString rangeOfString: textToHighlight
options: NSCaseInsensitiveSearch
range: area];
Что бы я хотел, это примерно так:
NSString *textViewString = [textView string];
NSString *textToHighlight = @"<div>";
NSRange area;
area.location = 0;
area.length = [textViewString length];
NSArray *ranges = [textViewString rangesOfString: textToHighlight
options: NSCaseInsensitiveSearch
range: area];
int i;
int total = [ranges count];
for (i = 0; i < total; i++) {
NSRange occurrence = [ranges objectAtIndex: i];
// Apply color highlighting here
}
Если это невозможно, может кто-нибудь указать мне правильное направление или предложить альтернативный способ подсветки синтаксиса? Спасибо!