c1 = array[i1];
c1 = array[i1]; else c1 = ' ';
	public byte markTokensImpl(byte token, Segment line, int lineIndex)	{		char[] array = line.array;		int offset   = line.offset;		lastOffset   = offset;		lastKeyword  = offset;		int length   = line.count + offset;		boolean backslash = false;loop:		for(int i = offset; i < length; i++)		{			int  i1 = (i+1);			char c  = array[i];			char c1 = ' ';			if( i1<array.length )			    c1 = array[i1];			if(c == '\\')			    {                                backslash = !backslash;                                continue;			    }			else 			    backslash = false;			switch(token)			{			case Token.NULL:				switch(c)				{				case '(':  // string				    doKeyword(line,i,c);				    {					addToken(i - lastOffset,token);					token = Token.LITERAL1;					lastOffset = lastKeyword = i;					braceCount = 1;				    }				    break;				case '<':				    doKeyword(line,i,c);				    addToken(i - lastOffset,token);				    token = Token.LITERAL2;				    lastOffset = lastKeyword = i;				    break;				case '/':				    doKeyword(line,i,c);				    addToken(i - lastOffset, token );				    token = Token.LABEL;				    lastOffset = lastKeyword = i;				    break;				case '%': // read comment 				    // (there are only one line comments in postscript, so there are no problems)				    doKeyword(line,i,c);				    if(length - i > 1)					{					    switch(array[i1])						{						case '%':						case '?':						case '!':						    addToken(i - lastOffset,token);						    addToken(length - i,Token.COMMENT2);						    lastOffset = lastKeyword = length;						    break loop;						default:						    addToken(i - lastOffset,token);						    addToken(length - i,Token.COMMENT1);						    lastOffset = lastKeyword = length;						    break loop;						}					}				    break;				default:				    if( Character.isWhitespace(c) || 					c1=='[' || c1==']' || c1=='{' || c1=='}' )					doKeyword(line,i,c);				    break;				}				break;			case Token.LITERAL1: // in string			    switch( c )				{				case ')':				    if( !backslash )					{					    braceCount--;					    if( braceCount <= 0 )						{						    addToken(i1 - lastOffset,token);						    token = Token.NULL;						    lastOffset = lastKeyword = i1;						}					}				    break;				case '(':				    if( !backslash )					braceCount++;				    break;				default:				}			    backslash = false;			    break;			case Token.LITERAL2:			    if( c == '>' )				{				    addToken(i1 - lastOffset,Token.LITERAL1);				    token = Token.NULL;				    lastOffset = lastKeyword = i1;				}			    break;			case Token.LABEL:			    if( Character.isWhitespace(c1) || 				c1=='[' || c1==']' || c1=='{' || c1=='}' )				{				    addToken(i1 - lastOffset,token);				    // doKeyword(line,i,c);				    token = Token.NULL;				    lastOffset = lastKeyword = i1;				}			    break;  			default:			    throw new InternalError("Invalid state: "						    + token);			}		}		if(token == Token.NULL)		    doKeyword(line,length,'\0');		addToken(length - lastOffset,token);				return token;	}