static void NotifyScroll(Widget gw, XEvent *event, String *params, Cardinal *num_params) { ScrollbarWidget w = (ScrollbarWidget)gw; long call_data = 0; char style; Position x, y; if (w->scrollbar.direction == 0) /* if no StartScroll */ return; if (LookAhead(gw, event)) return; if (*num_params > 0) style = *params[0]; else style = 'P'; switch(style) { case 'P': /* Proportional */ case 'p': ExtractPosition(event, &x, &y); call_data = InRange(PICKLENGTH(w, x, y), 0, (int)w->scrollbar.length); break; case 'F': /* FullLength */ case 'f': call_data = w->scrollbar.length; break; } switch(w->scrollbar.direction) { case 'B': case 'b': call_data = -call_data; /*FALLTHROUGH*/ case 'F': case 'f': XtCallCallbacks(gw, XtNscrollProc, (XtPointer)call_data); break; case 'C': case 'c': /* NotifyThumb has already called the thumbProc(s) */ break; } }
/*ARGSUSED*/ static void MoveThumb(Widget gw, XEvent *event, String *params, Cardinal *num_params) { ScrollbarWidget w = (ScrollbarWidget)gw; Position x, y; if (w->scrollbar.direction == 0) /* if no StartScroll */ return; if (LookAhead(gw, event)) return; if (!event->xmotion.same_screen) return; ExtractPosition(event, &x, &y); w->scrollbar.top = FractionLoc(w, x, y); }
void CentipedeBodyPart::Update() { if(distanceToNextLookAhead <= 0) { LookAhead(); MainSprite.Update(); } distanceToNextLookAhead -= SPEED; if(currentState == Enumerators::centipedeMovementMode::Left || currentState == Enumerators::centipedeMovementMode::Right) { Move(); } else if(currentState == Enumerators::centipedeMovementMode::Turning) { Turn(); } MainSprite.setPosition(Pos); }
PRBool nsCSSScanner::ParseCComment(nsresult& aErrorCode, nsCSSToken& aToken) { nsString& ident = aToken.mIdent; for (;;) { PRInt32 ch = Read(aErrorCode); if (ch < 0) break; if (ch == '*') { if (LookAhead(aErrorCode, '/')) { ident.Append(PRUnichar(ch)); ident.Append(PRUnichar('/')); break; } } #ifdef COLLECT_WHITESPACE ident.Append(PRUnichar(ch)); #endif } aToken.mType = eCSSToken_WhiteSpace; return PR_TRUE; }
static int GetAliasInfo( void ) /*****************************/ { int isfar16; if( CurToken != T_LEFT_PAREN ) // #pragma aux symbol ..... return( 1 ); NextToken(); if( CurToken != T_ID ) // error return( 0 ); LookAhead(); if( LAToken == T_RIGHT_PAREN ) { // #pragma aux (alias) symbol ..... PragCurrAlias( SavedId ); AdvanceToken(); NextToken(); return( 1 ); } else if( LAToken == T_COMMA ) { // #pragma aux (symbol, alias) HashValue = SavedHash; SetCurrInfo( SavedId ); AdvanceToken(); NextToken(); if( CurToken != T_ID ) // error return( 0 ); isfar16 = PragRecog( "far16" ); if( CurToken == T_ID ) { PragCurrAlias( Buffer ); NextToken(); } if( CurToken == T_RIGHT_PAREN ) NextToken(); if( isfar16 ) AuxInfo.flags |= AUX_FLAG_FAR16; CopyAuxInfo(); PragEnding(); return( 0 ); /* process no more! */ } else { // error AdvanceToken(); return( 0 ); // shut up the compiler } }
bool Parser::ParseBlendFactor(ngfx::RenderTargetBlendState& src) { std::string tokStr = (std::string)Cur().Str(); if (tokStr == "Off") { Consume(); src.blendEnable = false; } else if (IsBlendFactor(Cur().Str())) { if (!ParseBlendFactor(src.srcColor, src.destColor)) { return false; } if (LookAhead(Token::TOK_COMMA)) { // Alpha Consume(); if (!ParseBlendFactor(src.srcAlpha, src.destAlpha)) { return false; } } src.blendEnable = true; } else { SpawnError("Unexpected blend factor here", "See syntax on https://docs.unity3d.com/Manual/SL-Blend.html"); return false; } return true; }
/*ARGSUSED*/ static void NotifyThumb(Widget gw, XEvent *event, String *params, Cardinal *num_params) { ScrollbarWidget w = (ScrollbarWidget)gw; union { XtPointer xtp; float xtf; } xtpf; if (w->scrollbar.direction == 0) /* if no StartScroll */ return; if (LookAhead(gw, event)) return; /* thumbProc is not pretty, but is necessary for backwards compatibility on those architectures for which it work{s,ed}; the intent is to pass a (truncated) float by value. */ xtpf.xtf = w->scrollbar.top; XtCallCallbacks(gw, XtNthumbProc, xtpf.xtp); XtCallCallbacks(gw, XtNjumpProc, (XtPointer)&w->scrollbar.top); PaintThumb(w); }
PRBool nsCSSScanner::Next(nsCSSToken& aToken) { for (;;) { // Infinite loop so we can restart after comments. PRInt32 ch = Read(); if (ch < 0) { return PR_FALSE; } // UNICODE-RANGE if ((ch == 'u' || ch == 'U') && Peek() == '+') return ParseURange(ch, aToken); // IDENT if (StartsIdent(ch, Peek())) return ParseIdent(ch, aToken); // AT_KEYWORD if (ch == '@') { PRInt32 nextChar = Read(); if (nextChar >= 0) { PRInt32 followingChar = Peek(); Pushback(nextChar); if (StartsIdent(nextChar, followingChar)) return ParseAtKeyword(ch, aToken); } } // NUMBER or DIM if ((ch == '.') || (ch == '+') || (ch == '-')) { PRInt32 nextChar = Peek(); if (IsDigit(nextChar)) { return ParseNumber(ch, aToken); } else if (('.' == nextChar) && ('.' != ch)) { nextChar = Read(); PRInt32 followingChar = Peek(); Pushback(nextChar); if (IsDigit(followingChar)) return ParseNumber(ch, aToken); } } if (IsDigit(ch)) { return ParseNumber(ch, aToken); } // ID if (ch == '#') { return ParseRef(ch, aToken); } // STRING if ((ch == '"') || (ch == '\'')) { return ParseString(ch, aToken); } // WS if (IsWhitespace(ch)) { aToken.mType = eCSSToken_WhiteSpace; aToken.mIdent.Assign(PRUnichar(ch)); EatWhiteSpace(); return PR_TRUE; } if (ch == '/' && !IsSVGMode()) { PRInt32 nextChar = Peek(); if (nextChar == '*') { (void) Read(); #if 0 // If we change our storage data structures such that comments are // stored (for Editor), we should reenable this code, condition it // on being in editor mode, and apply glazou's patch from bug // 60290. aToken.mIdent.SetCapacity(2); aToken.mIdent.Assign(PRUnichar(ch)); aToken.mIdent.Append(PRUnichar(nextChar)); return ParseCComment(aToken); #endif if (!SkipCComment()) { return PR_FALSE; } continue; // start again at the beginning } } if (ch == '<') { // consume HTML comment tags if (LookAhead('!')) { if (LookAhead('-')) { if (LookAhead('-')) { aToken.mType = eCSSToken_HTMLComment; aToken.mIdent.AssignLiteral("<!--"); return PR_TRUE; } Pushback('-'); } Pushback('!'); } } if (ch == '-') { // check for HTML comment end if (LookAhead('-')) { if (LookAhead('>')) { aToken.mType = eCSSToken_HTMLComment; aToken.mIdent.AssignLiteral("-->"); return PR_TRUE; } Pushback('-'); } } // INCLUDES ("~=") and DASHMATCH ("|=") if (( ch == '|' ) || ( ch == '~' ) || ( ch == '^' ) || ( ch == '$' ) || ( ch == '*' )) { PRInt32 nextChar = Read(); if ( nextChar == '=' ) { if (ch == '~') { aToken.mType = eCSSToken_Includes; } else if (ch == '|') { aToken.mType = eCSSToken_Dashmatch; } else if (ch == '^') { aToken.mType = eCSSToken_Beginsmatch; } else if (ch == '$') { aToken.mType = eCSSToken_Endsmatch; } else if (ch == '*') { aToken.mType = eCSSToken_Containsmatch; } return PR_TRUE; } else if (nextChar >= 0) { Pushback(nextChar); } } aToken.mType = eCSSToken_Symbol; aToken.mSymbol = ch; return PR_TRUE; } }
PRBool nsCSSScanner::NextURL(nsresult& aErrorCode, nsCSSToken& aToken) { PRInt32 ch = Read(aErrorCode); if (ch < 0) { return PR_FALSE; } if (ch < 256) { PRUint8* lexTable = gLexTable; // STRING if ((ch == '"') || (ch == '\'')) { return ParseString(aErrorCode, ch, aToken); } // WS if ((lexTable[ch] & IS_WHITESPACE) != 0) { aToken.mType = eCSSToken_WhiteSpace; aToken.mIdent.Assign(PRUnichar(ch)); (void) EatWhiteSpace(aErrorCode); return PR_TRUE; } if (ch == '/') { PRInt32 nextChar = Peek(aErrorCode); if (nextChar == '*') { (void) Read(aErrorCode); #if 0 // If we change our storage data structures such that comments are // stored (for Editor), we should reenable this code, condition it // on being in editor mode, and apply glazou's patch from bug // 60290. aToken.mIdent.SetCapacity(2); aToken.mIdent.Assign(PRUnichar(ch)); aToken.mIdent.Append(PRUnichar(nextChar)); return ParseCComment(aErrorCode, aToken); #endif return SkipCComment(aErrorCode) && Next(aErrorCode, aToken); } } // Process a url lexical token. A CSS1 url token can contain // characters beyond identifier characters (e.g. '/', ':', etc.) // Because of this the normal rules for tokenizing the input don't // apply very well. To simplify the parser and relax some of the // requirements on the scanner we parse url's here. If we find a // malformed URL then we emit a token of type "InvalidURL" so that // the CSS1 parser can ignore the invalid input. We attempt to eat // the right amount of input data when an invalid URL is presented. aToken.mType = eCSSToken_InvalidURL; nsString& ident = aToken.mIdent; ident.SetLength(0); if (ch == ')') { Pushback(ch); // empty url spec; just get out of here aToken.mType = eCSSToken_URL; } else { // start of a non-quoted url Pushback(ch); PRBool ok = PR_TRUE; for (;;) { ch = Read(aErrorCode); if (ch < 0) break; if (ch == CSS_ESCAPE) { ParseAndAppendEscape(aErrorCode, ident); } else if ((ch == '"') || (ch == '\'') || (ch == '(')) { // This is an invalid URL spec ok = PR_FALSE; } else if ((256 > ch) && ((gLexTable[ch] & IS_WHITESPACE) != 0)) { // Whitespace is allowed at the end of the URL (void) EatWhiteSpace(aErrorCode); if (LookAhead(aErrorCode, ')')) { Pushback(')'); // leave the closing symbol // done! break; } // Whitespace is followed by something other than a // ")". This is an invalid url spec. ok = PR_FALSE; } else if (ch == ')') { Unread(); // All done break; } else { // A regular url character. ident.Append(PRUnichar(ch)); } } // If the result of the above scanning is ok then change the token // type to a useful one. if (ok) { aToken.mType = eCSSToken_URL; } } } return PR_TRUE; }
PRBool nsCSSScanner::Next(nsresult& aErrorCode, nsCSSToken& aToken) { PRInt32 ch = Read(aErrorCode); if (ch < 0) { return PR_FALSE; } PRUint8* lexTable = gLexTable; // IDENT if (StartsIdent(ch, Peek(aErrorCode), lexTable)) return ParseIdent(aErrorCode, ch, aToken); // From this point on, 0 <= ch < 256. // AT_KEYWORD if (ch == '@') { PRInt32 nextChar = Read(aErrorCode); PRInt32 followingChar = Peek(aErrorCode); Pushback(nextChar); if (StartsIdent(nextChar, followingChar, lexTable)) return ParseAtKeyword(aErrorCode, ch, aToken); } // NUMBER or DIM if ((ch == '.') || (ch == '+') || (ch == '-')) { PRInt32 nextChar = Peek(aErrorCode); if (CheckLexTable(nextChar, IS_DIGIT, lexTable)) { return ParseNumber(aErrorCode, ch, aToken); } else if (('.' == nextChar) && ('.' != ch)) { nextChar = Read(aErrorCode); PRInt32 followingChar = Peek(aErrorCode); Pushback(nextChar); if (CheckLexTable(followingChar, IS_DIGIT, lexTable)) return ParseNumber(aErrorCode, ch, aToken); } } if ((lexTable[ch] & IS_DIGIT) != 0) { return ParseNumber(aErrorCode, ch, aToken); } // ID if (ch == '#') { return ParseRef(aErrorCode, ch, aToken); } // STRING if ((ch == '"') || (ch == '\'')) { return ParseString(aErrorCode, ch, aToken); } // WS if ((lexTable[ch] & IS_WHITESPACE) != 0) { aToken.mType = eCSSToken_WhiteSpace; aToken.mIdent.Assign(PRUnichar(ch)); (void) EatWhiteSpace(aErrorCode); return PR_TRUE; } if (ch == '/') { PRInt32 nextChar = Peek(aErrorCode); if (nextChar == '*') { (void) Read(aErrorCode); #if 0 // If we change our storage data structures such that comments are // stored (for Editor), we should reenable this code, condition it // on being in editor mode, and apply glazou's patch from bug // 60290. aToken.mIdent.SetCapacity(2); aToken.mIdent.Assign(PRUnichar(ch)); aToken.mIdent.Append(PRUnichar(nextChar)); return ParseCComment(aErrorCode, aToken); #endif return SkipCComment(aErrorCode) && Next(aErrorCode, aToken); } } if (ch == '<') { // consume HTML comment tags if (LookAhead(aErrorCode, '!')) { if (LookAhead(aErrorCode, '-')) { if (LookAhead(aErrorCode, '-')) { aToken.mType = eCSSToken_HTMLComment; aToken.mIdent.AssignLiteral("<!--"); return PR_TRUE; } Pushback('-'); } Pushback('!'); } } if (ch == '-') { // check for HTML comment end if (LookAhead(aErrorCode, '-')) { if (LookAhead(aErrorCode, '>')) { aToken.mType = eCSSToken_HTMLComment; aToken.mIdent.AssignLiteral("-->"); return PR_TRUE; } Pushback('-'); } } // INCLUDES ("~=") and DASHMATCH ("|=") if (( ch == '|' ) || ( ch == '~' ) || ( ch == '^' ) || ( ch == '$' ) || ( ch == '*' )) { PRInt32 nextChar = Read(aErrorCode); if ( nextChar == '=' ) { if (ch == '~') { aToken.mType = eCSSToken_Includes; } else if (ch == '|') { aToken.mType = eCSSToken_Dashmatch; } else if (ch == '^') { aToken.mType = eCSSToken_Beginsmatch; } else if (ch == '$') { aToken.mType = eCSSToken_Endsmatch; } else if (ch == '*') { aToken.mType = eCSSToken_Containsmatch; } return PR_TRUE; } else { Pushback(nextChar); } } aToken.mType = eCSSToken_Symbol; aToken.mSymbol = ch; return PR_TRUE; }
int IoOldOoglLexer::LookAhead(const float expect) { if (mpNext == NULL) LookAhead(); return (mpNext == NULL || mpNext->mType != IoOldOoglToken::NUMBER)? 0 : mpNext->mFValue == expect; }
int IoOldOoglLexer::LookAhead(const char *expect) { char *string = LookAhead(); return (string == NULL)? 0 : strcmp(string, expect) == 0; }
int IoOldOoglLexer::LookAhead(const IoOldOoglToken::TokenType expect) { if (mpNext == NULL) LookAhead(); return (mpNext == NULL)? 0 : mpNext->mType == expect; }