- case eCharToken:
- case eCharStar:
- add(c);
- break;
- default:
- break;
- }
- return true;
- }
- bool tokeniseQuotedToken(char c)
- {
- switch(charType(c))
- {
- case eNewline:
- if(m_crossline)
- {
- globalErrorStream() << Unsigned(getLine()) << ":" << Unsigned(getColumn()) << ": unexpected end-of-line in quoted token\n";
- return false;
- }
- break;
- case eWhitespace:
- case eCharToken:
- case eCharSolidus:
- case eCharStar:
- case eCharSpecial:
- add(c);
- break;
- case eCharQuote:
- pop();
- push(Tokenise(&ScriptTokeniser::tokeniseEndQuote));
- break;
- default:
- break;
- }
- return true;
- }
- bool tokeniseSolidus(char c)
- {
- switch(charType(c))
- {
- case eNewline:
- case eWhitespace:
- case eCharQuote:
- case eCharSpecial:
- pop();
- add('/');
- m_emit = true; // emit single slash
- break;
- case eCharToken:
- pop();
- add('/');
- add(c);
- break;
- case eCharSolidus:
- pop();
- push(Tokenise(&ScriptTokeniser::tokeniseComment));
- break; // dont emit single slash
- case eCharStar:
- pop();
- push(Tokenise(&ScriptTokeniser::tokeniseBlockComment));
- break; // dont emit single slash
- default:
- break;
- }
- return true;
- }
- bool tokeniseComment(char c)
- {
- if(c == '\n')
- {
- pop();
- if(state() == Tokenise(&ScriptTokeniser::tokeniseToken))
- {
- pop();
- m_emit = true; // emit token immediatly preceding comment
- }
- }
- return true;
- }
- bool tokeniseBlockComment(char c)
- {
- if(c == '*')
- {
- pop();
- push(Tokenise(&ScriptTokeniser::tokeniseEndBlockComment));
- }
- return true;
- }
- bool tokeniseEndBlockComment(char c)
- {
- switch(c)
- {
- case '/':
- pop();
- if(state() == Tokenise(&ScriptTokeniser::tokeniseToken))
- {
- pop();
- m_emit = true; // emit token immediatly preceding comment
- }
- break; // dont emit comment
- case '*':
- break; // no state change
- default:
- pop();
- push(Tokenise(&ScriptTokeniser::tokeniseBlockComment));
- break;
- }
- return true;
- }
- bool tokeniseEndQuote(char c)
- {
- pop();
- m_emit = true; // emit quoted token
- return true;
- }
- bool tokeniseSpecial(char c)
- {
- pop();
- m_emit = true; // emit single-character token
- return true;
- }
+ case eCharToken:
+ case eCharStar:
+ add( c );
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+bool tokeniseQuotedToken( char c ){
+ switch ( charType( c ) )
+ {
+ case eNewline:
+ if ( m_crossline ) {
+ globalErrorStream() << Unsigned( getLine() ) << ":" << Unsigned( getColumn() ) << ": unexpected end-of-line in quoted token\n";
+ return false;
+ }
+ break;
+ case eWhitespace:
+ case eCharToken:
+ case eCharSolidus:
+ case eCharStar:
+ case eCharSpecial:
+ add( c );
+ break;
+ case eCharQuote:
+ pop();
+ push( Tokenise( &ScriptTokeniser::tokeniseEndQuote ) );
+ break;
+ default:
+ break;
+ }
+ return true;
+}
+bool tokeniseSolidus( char c ){
+ switch ( charType( c ) )
+ {
+ case eNewline:
+ case eWhitespace:
+ case eCharQuote:
+ case eCharSpecial:
+ pop();
+ add( '/' );
+ m_emit = true; // emit single slash
+ break;
+ case eCharToken:
+ pop();
+ add( '/' );
+ add( c );
+ break;
+ case eCharSolidus:
+ pop();
+ push( Tokenise( &ScriptTokeniser::tokeniseComment ) );
+ break; // dont emit single slash
+ case eCharStar:
+ pop();
+ push( Tokenise( &ScriptTokeniser::tokeniseBlockComment ) );
+ break; // dont emit single slash
+ default:
+ break;
+ }
+ return true;
+}
+bool tokeniseComment( char c ){
+ if ( c == '\n' ) {
+ pop();
+ if ( state() == Tokenise( &ScriptTokeniser::tokeniseToken ) ) {
+ pop();
+ m_emit = true; // emit token immediatly preceding comment
+ }
+ }
+ return true;
+}
+bool tokeniseBlockComment( char c ){
+ if ( c == '*' ) {
+ pop();
+ push( Tokenise( &ScriptTokeniser::tokeniseEndBlockComment ) );
+ }
+ return true;
+}
+bool tokeniseEndBlockComment( char c ){
+ switch ( c )
+ {
+ case '/':
+ pop();
+ if ( state() == Tokenise( &ScriptTokeniser::tokeniseToken ) ) {
+ pop();
+ m_emit = true; // emit token immediatly preceding comment
+ }
+ break; // dont emit comment
+ case '*':
+ break; // no state change
+ default:
+ pop();
+ push( Tokenise( &ScriptTokeniser::tokeniseBlockComment ) );
+ break;
+ }
+ return true;
+}
+bool tokeniseEndQuote( char c ){
+ pop();
+ m_emit = true; // emit quoted token
+ return true;
+}
+bool tokeniseSpecial( char c ){
+ pop();
+ m_emit = true; // emit single-character token
+ return true;
+}