• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
NSScanner With Multiple Characters
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NSScanner With Multiple Characters


  • Subject: NSScanner With Multiple Characters
  • From: Austin Sarner <email@hidden>
  • Date: Thu, 12 May 2005 13:27:24 -0400

Hey,

I'm working on a piece of code that goes into a TextView subclass and highlights quotes (and handles escapes quotes and checks for being in a comment first, etc.). It works, almost perfectly - except for a rather minor snag. I can scan up to a '#' (A PHP one-line comment character) and it works fine. But I cannot for the life of me figure out how to be able to scan up to multiple characters (i.e. a "//"). So basically, how would I go about making the scanner recognize a //, /*, and */ even though they are not single characters. My code is below.

Thanks in Advance!


NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"\"\'#\n\r"];
NSScanner * theScanner = [NSScanner scannerWithString:[self string]];
[theScanner setCharactersToBeSkipped:[NSCharacterSet whitespaceCharacterSet]];


    BOOL inQuote = NO;
    BOOL inSQuote = NO;
    BOOL inComment = NO;
    BOOL inBlockComment = NO;

unsigned int quotePosition;
while ([theScanner isAtEnd] == NO)
{
if ([theScanner scanString:@"\"" intoString:NULL])
{
if ([[self substringWithRange:NSMakeRange([theScanner scanLocation]-2,1)]isEqualToString:@"\\"] == NO)
{
if (inQuote)
{
[self colorRange:NSMakeRange(quotePosition-1, [theScanner scanLocation]-quotePosition+1)withColor:[NSColor redColor]];
inQuote = NO;
} else if (inQuote == NO && inSQuote == NO && inComment == NO && inBlockComment == NO)
{
inQuote = YES;
quotePosition = [theScanner scanLocation];
}
}
}


if ([theScanner scanString:@"\'" intoString:NULL])
{
if ([[self substringWithRange:NSMakeRange([theScanner scanLocation]-2,1)]isEqualToString:@"\\"] == NO)
{
if (inSQuote)
{
[self colorRange:NSMakeRange(quotePosition-1, [theScanner scanLocation]-quotePosition+1)withColor:[NSColor redColor]];
inSQuote = NO;
} else if (inQuote == NO && inSQuote == NO && inComment == NO && inBlockComment == NO)
{
inSQuote = YES;
quotePosition = [theScanner scanLocation];
}
}
}


if ([theScanner scanString:@"#" intoString:NULL] || [theScanner scanString:@"//" intoString:NULL])
{
if (inQuote == NO && inSQuote == NO)
{
inComment = YES;
}
}



if ([theScanner scanString:@"\n" intoString:NULL] || [theScanner scanString:@"\r" intoString:NULL])
{
if (inComment)
{
inComment = NO;
}
}


        if ([theScanner scanString:@"/*" intoString:NULL])
        {
            inBlockComment = YES;
        }

        if ([theScanner scanString:@"*/" intoString:NULL])
        {
            inBlockComment = NO;
        }

        [theScanner scanUpToCharactersFromSet:charSet intoString:nil];
    }

--------------------
Austin Sarner

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Prev by Date: tool tips & lost mouse click
  • Next by Date: Re: Why would a defined selector not be found at runtime?
  • Previous by thread: Re: tool tips & lost mouse click
  • Next by thread: Two odd newbie questions ;-)
  • Index(es):
    • Date
    • Thread