void ParserThread::ParseUsing()
{
    ConsumeToken();
    Token * peek = PeekToken();
    if(peek->type_id() == TKN_NAMESPACE)
    {
        //Handleing using space directive
        ConsumeToken(); //consume "namespace"
        // simply handling mode: using namespace AAA
        peek = PeekToken();
        if (peek->type_id() == TKN_IDENTIFIER)
        {
            ParseFullIdentifer();
            DoAddToken(tkUsingNamespace,*peek);
        }

        else
            SkipStatementBlock();

    }
    else if(peek->type_id() == TKN_IDENTIFIER)
    {
        SkipStatementBlock();
    }
}
void
nsXFormsXPathParser::NodeType()
{
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
  switch (t) {
  case nsXFormsXPathScanner::COMMENT:
    PopToken();
    PopToken();
    PopToken();
    break;
  case nsXFormsXPathScanner::TEXT:
    PopToken();
    PopToken();
    PopToken();
    break;
  case nsXFormsXPathScanner::PI:
    PopToken();
    if ((t = PeekToken()) == nsXFormsXPathScanner::LPARAN) {
      PopToken();
      PopToken();
      PopToken();
    }
    break;

  case nsXFormsXPathScanner::NODE:
    PopToken();
    PopToken();
    PopToken();
    break;

  default:
    XPathCompilerException("Not a valid NodeType", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
  }
}
bool ParserThread::ParseScopeQueue(ScopeQueue& scopeQueue)
{
    Token * currentToken = ConsumeToken();
    assert(currentToken->type_id() == TKN_IDENTIFIER);

    ScopeBlock scope;
    scope.name = *currentToken;// add the name
    ParseArgumentList(scope.templateArgumentList);
    scopeQueue.push_back(scope);

    while(PeekToken()->type_id()==TKN_DOUBLE_COLON && PeekToken(2)->type_id()==TKN_IDENTIFIER)
    {
            //scope.name.Clear(); should reset the Token
            scope.templateArgumentList.clear();
            //Read the Argument list
            // fill the *it.templateArgumentList
            // if the fill function return false, which, we should skip to ; or }
            ConsumeToken(); //consume ::
            currentToken = ConsumeToken(); // get id
            scope.name = *currentToken;// add the name
            bool parseResult = ParseArgumentList(scope.templateArgumentList);
            if (!parseResult) // this means we have the format A<......;, this is not a template
            {
                m_Context.EndStatement();
                return false;
            }
            scopeQueue.push_back(scope);
    }
    return true;

}
void ParserThread::HandleNamespace()
{
    ConsumeToken();
    Token *pk = PeekToken();
    Token name;
    if(pk->type_id()==TKN_IDENTIFIER)
    {
        name = *pk;
        ConsumeToken();
    }
    else
    {
        //un-named namespace
    }

    pk = PeekToken();
    if(pk->type_id()==TKN_L_BRACE)
    {
        ConsumeToken();
        Symbol * sym = DoAddToken(tkNamespace,name);
        PushContext();
        m_Context.parentToken = sym;
        DoParse();
        PopContext();
        TRACE("end of namespace\n");
    }

}
void ParserThread::HandleFunction()
{
    //TRACE("HandleFunction() : %s %s()",m_Context.type.back().name.get_text().c_str(),name.c_str());

    // should always at the ( , so we firstly read the parentheses
    if(m_Context.nameQueue.size()==0)
    {
        m_Context.nameQueue = m_Context.typeQueue;
        m_Context.typeQueue.clear();
    }
    Symbol * sym = DoAddToken(tkFunction, m_Context.nameQueue.back().name);

    ArgumentList args;
    ReadFunctionArguments(args);

    Token * peek = PeekToken();

    if(peek->type_id() == TKN_CONST)
        ConsumeToken();

    // skip the member initialization list
    if(PeekToken()->type_id() == TKN_COLON)
    {
        ConsumeToken();
        while(true)
        {
            if(PeekToken()->type_id()!=TKN_L_BRACE)
                ConsumeToken();
            else
                break;
        }
    }



    peek = PeekToken();
    if (peek->type_id() == TKN_L_BRACE)   // function definition
    {
        TRACE("Function definition");

        //SkipBrace();
        ConsumeToken();
        //Symbol * sym = DoAddToken(tkFunction, m_Context.nameQueue.back().name);
        PushContext();
        m_Context.parentToken = sym;
        DoParse();
        PopContext();

    }
    else if (peek->type_id() == TKN_SEMICOLON)
    {
        TRACE("Function declaration");
        //DoAddToken(tkFunction, m_Context.nameQueue.back().name);
        //newToken->m_Args = args;
        ConsumeToken();
    }
    m_Context.EndStatement();
}
void
nsXFormsXPathParser::AbsoluteLocationPath()
{
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
  nsXFormsXPathScanner::XPATHTOKEN r;
  switch (t) {
  case nsXFormsXPathScanner::SLASH:
    PopToken();
    r = PeekToken();
    switch (r) {
    case nsXFormsXPathScanner::ANCESTOR:
    case nsXFormsXPathScanner::ANCESTOR_OR_SELF:
    case nsXFormsXPathScanner::ATTRIBUTE:
    case nsXFormsXPathScanner::CHILD:
    case nsXFormsXPathScanner::DESCENDANT:
    case nsXFormsXPathScanner::DESCENDANT_OR_SELF:
    case nsXFormsXPathScanner::FOLLOWING:
    case nsXFormsXPathScanner::FOLLOWING_SIBLING:
    case nsXFormsXPathScanner::NAMESPACE:
    case nsXFormsXPathScanner::PARENT:
    case nsXFormsXPathScanner::PRECEDING:
    case nsXFormsXPathScanner::PRECEDING_SIBLING:
    case nsXFormsXPathScanner::SELF:
    case nsXFormsXPathScanner::AT:
    case nsXFormsXPathScanner::STAR:
    case nsXFormsXPathScanner::NCNAME:
    case nsXFormsXPathScanner::QNAME:
    case nsXFormsXPathScanner::COMMENT:
    case nsXFormsXPathScanner::TEXT:
    case nsXFormsXPathScanner::PI:
    case nsXFormsXPathScanner::NODE:
    case nsXFormsXPathScanner::DOT:
    case nsXFormsXPathScanner::DOTDOT:
      RelativeLocationPath();
      break;
      
    default:
      break;
    }
    break;

  case nsXFormsXPathScanner::SLASHSLASH:
    PopToken();
    if (DoRelative()) {
      RelativeLocationPath();
    }
    break;

  default:
    XPathCompilerException("Not an absolute location path", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
  }
}
bool ParserThread::ParseArgumentList(ArgumentList &argumentList)
{
    // do nothing on the argumentList, just do the loop
    if(PeekToken()->type_id() != TKN_LESS)
       return true;

    // shoud be a (xxxx) or <xxxxx>
    Token * tk = ConsumeToken();

    TRACE("ParserThread::ParseArgumentList() Enter...");
    int level = 1;
    argumentList.clear();
    argumentList.push_back(*tk); // push <while(true)


    while(true)
    {

        tk = PeekToken();//

        if(tk->type_id() == TKN_LESS)
        {
            ConsumeToken();
            argumentList.push_back(*tk);
            level++;

        }
        else if (tk->type_id() == TKN_GREATER)
        {
            level--;
            ConsumeToken();
            argumentList.push_back(*tk);
            if(level <= 0)
                break;
        }
        else if(tk->type_id()==TKN_SEMICOLON || tk->type_id()==TKN_R_BRACE)
        {
            m_Context.EndStatement();
            return false;
        }
        else
        {
            //std::cout<<*tk<<std::endl;
            argumentList.push_back(*tk);
            ConsumeToken();
        }
    }

    //cout<<"currentToken"<<*(CurrentToken())<<endl;
    TRACE("ParserThread::ParseArgumentList() Leave...");
    return true;
}
void
nsXFormsXPathParser::PathExpr()
{
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
  switch (t) {
  case nsXFormsXPathScanner::ANCESTOR:
  case nsXFormsXPathScanner::ANCESTOR_OR_SELF:
  case nsXFormsXPathScanner::ATTRIBUTE:
  case nsXFormsXPathScanner::CHILD:
  case nsXFormsXPathScanner::DESCENDANT:
  case nsXFormsXPathScanner::DESCENDANT_OR_SELF:
  case nsXFormsXPathScanner::FOLLOWING:
  case nsXFormsXPathScanner::FOLLOWING_SIBLING:
  case nsXFormsXPathScanner::NAMESPACE:
  case nsXFormsXPathScanner::PARENT:
  case nsXFormsXPathScanner::PRECEDING:
  case nsXFormsXPathScanner::PRECEDING_SIBLING:
  case nsXFormsXPathScanner::SELF:
  case nsXFormsXPathScanner::AT:
  case nsXFormsXPathScanner::STAR:
  case nsXFormsXPathScanner::NCNAME:
  case nsXFormsXPathScanner::QNAME:
  case nsXFormsXPathScanner::COMMENT:
  case nsXFormsXPathScanner::TEXT:
  case nsXFormsXPathScanner::PI:
  case nsXFormsXPathScanner::NODE:
  case nsXFormsXPathScanner::DOT:
  case nsXFormsXPathScanner::DOTDOT:
  case nsXFormsXPathScanner::SLASH:
  case nsXFormsXPathScanner::SLASHSLASH:
    LocationPath();
    break;
    
  default:
    PushContext();
    FilterExpr();
    t = PeekToken();
    if (t == nsXFormsXPathScanner::SLASH || t == nsXFormsXPathScanner::SLASHSLASH) {
      PopToken();

      if (DoRelative()) {
        RelativeLocationPath();
      } else {
        XPathCompilerException("After / in a filter expression it is required to have a relative path expression",
                               EmptyString());
      }

    }
    PopContext();
  }
}
void
nsXFormsXPathParser::RelationalExpression()
{
  AdditiveExpression();
  PRBool con = PR_TRUE;
  while (con) {
    nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
    switch (t) {
    case nsXFormsXPathScanner::LESS:
      PopToken();
      AdditiveExpression();
      break;

    case nsXFormsXPathScanner::LEQUAL:
      PopToken();
      AdditiveExpression();
      break;

    case nsXFormsXPathScanner::GREATER:
      PopToken();
      AdditiveExpression();
      break;

    case nsXFormsXPathScanner::GEQUAL:
      PopToken();
      AdditiveExpression();
      break;
      
    default:
      con = PR_FALSE;
    }
  }
}
Esempio n. 10
0
void ParserThread::HandleEnum()
{
    // enums have the following rough definition:
    // enum [xxx] { type1 name1 [= 1][, [type2 name2 [= 2]]] };

    ConsumeToken();
    Token * tk = ConsumeToken();    // the token after "enum"
    //Token * newToken = 0;
    if (tk->type_id() == TKN_IDENTIFIER)           // enum XXX
    {
        Token *pk = PeekToken();
        if(pk->type_id() == TKN_L_BRACE )  //enum XXX {
        {
            // Do Add Token of enum
            TRACE("find enum %s at line(%d)",tk->get_text().c_str(),tk->line_number());
            DoAddToken(tkEnum, *tk);
            //newToken->m_ImplLineStart = pk->line_number();
            ConsumeToken();                     //consume {
            PushContext();
            ReadEnumList();
            PopContext();
        }
        else
        {
            SkipStatementBlock();          //something wrong
            return;
        }
    }
    else if (tk->type_id()== TKN_L_BRACE) //  enum {
    {
        // // Do Add Token of enum
        TRACE("find unnamed enum at line(%d)",tk->line_number());
        DoAddToken(tkEnum, *tk);
        ConsumeToken();                    //consume {
        PushContext();
        ReadEnumList();
        PopContext();
    }

    // Token's implement End line information added
    tk = ConsumeToken();
    //we are now after the }

    // if we find a ;, good, end of definition of enum
    // if we find an id, then this is something like enum XXX{...} A,B;
    // A,B were the instant of the enum

    tk = ConsumeToken();
    if(tk->type_id() == TKN_IDENTIFIER)
    {
        //Add variables list
        return;
    }
    else if(tk->type_id() == TKN_SEMICOLON)
    {
        //OK, end of enum definition
        return;
    }

}
Esempio n. 11
0
void CMD_Send_ConfigInfo(F_CMD_ARGS)
{
	struct moduleInfoList *t;
	/* matching criteria for module cmds */
	char *match;
	/* get length once for efficiency */
	int match_len = 0;
	fmodule *mod = exc->m.module;

	send_desktop_geometry(mod);
	/* send ImagePath and ColorLimit first */
	send_image_path(mod);
	send_color_limit(mod);
	send_xinerama_state(mod);
	send_colorsets(mod);
	send_click_time(mod);
	send_move_threshold(mod);
	match = PeekToken(action, &action);
	if (match)
	{
		match_len = strlen(match);
	}
	for (t = modlistroot; t != NULL; t = t->next)
	{
		SendConfigToModule(mod, t, match, match_len);
	}
	send_desktop_names(mod);
	send_ignore_modifiers(mod);
	SendPacket(
		mod, M_END_CONFIG_INFO, (long)0, (long)0, (long)0, (long)0,
		(long)0, (long)0, (long)0, (long)0);

	return;
}
Esempio n. 12
0
bool Tokenizer::ReplaceBufferForReparse(const wxString& target, bool updatePeekToken)
{
    if (target.IsEmpty())
        return false;

    if (m_IsReplaceParsing && ++m_RepeatReplaceCount > s_MaxRepeatReplaceCount)
    {
        m_TokenIndex = m_BufferLen - m_FirstRemainingLength;
        m_PeekAvailable = false;
        SkipToEOL(false);
        return false;
    }

    // Keep all in one line
    wxString buffer(target);
    for (size_t i = 0; i < buffer.Len(); ++i)
    {
        switch ((wxChar)buffer.GetChar(i))
        {
        case _T('\\'):
        case _T('\r'):
        case _T('\n'):
            buffer.SetChar(i, _T(' '));
        }
    }

    // Increase memory
    const size_t bufferLen = buffer.Len();
    if (m_TokenIndex < bufferLen)
    {
        const size_t diffLen = bufferLen - m_TokenIndex;
        m_Buffer.insert(0, wxString(_T(' '), diffLen));
        m_BufferLen += diffLen;
        m_TokenIndex += diffLen;
    }

    // Set replace parsing state, and save first replace token index
    if (!m_IsReplaceParsing)
    {
        m_FirstRemainingLength = m_BufferLen - m_TokenIndex;
        m_IsReplaceParsing = true;
    }

    // Replacement back
    wxChar* p = const_cast<wxChar*>((const wxChar*)m_Buffer) + m_TokenIndex - bufferLen;
    TRACE(_T("ReplacetargetForReparse() : <FROM>%s<TO>%s"), wxString(p, bufferLen).wx_str(), buffer.wx_str());
    memcpy(p, (const wxChar*)target, bufferLen * sizeof(wxChar));

    // Fix token index
    m_TokenIndex -= bufferLen;

    // Update the peek token
    if (m_PeekAvailable && updatePeekToken)
    {
        m_PeekAvailable = false;
        PeekToken();
    }

    return true;
}
Esempio n. 13
0
void CMD_AddToMenu(F_CMD_ARGS)
{
	MenuRoot *mr;
	MenuRoot *mrPrior;
	char *token, *rest,*item;

	token = PeekToken(action, &rest);
	if (!token)
	{
		return;
	}
	mr = menus_find_menu(token);
	if (mr && MR_MAPPED_COPIES(mr) != 0)
	{
		fvwm_msg(ERR,"add_item_to_menu", "menu %s is in use", token);
		return;
	}
	mr = FollowMenuContinuations(menus_find_menu(token), &mrPrior);
	if (mr == NULL)
	{
		mr = NewMenuRoot(token);
	}

	/* Set + state to last menu */
	set_last_added_item(ADDED_MENU, mr);

	rest = GetNextToken(rest, &item);
	AddToMenu(mr, item, rest, True /* pixmap scan */, True, False);
	if (item)
	{
		free(item);
	}

	return;
}
void
nsXFormsXPathParser::AdditiveExpression()
{
  PRBool con = PR_TRUE;

  MultiplicationExpr();

  while (con) {
    nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
    switch (t) {
    case nsXFormsXPathScanner::PLUS:
      PopToken();
      MultiplicationExpr();
      break;

    case nsXFormsXPathScanner::MINUS:
      PopToken();
      MultiplicationExpr();
      break;

    default:
      con = PR_FALSE;
    }
  }
}
Esempio n. 15
0
void ParserThread::HandleTypedef()
{
    ConsumeToken();

    TRACE("Typedef find");
    //find the token before semicolon
    Token * cur;
    Token * peek;
    while(true)
    {

        peek = PeekToken();
        if(peek->type_id() == TKN_SEMICOLON)
        {
            ConsumeToken();
            break;
        }
        else
            cur  = ConsumeToken();

    }

    DoAddToken(tkTypedef,*cur);
    //SkipStatementBlock();
}
void
nsXFormsXPathParser::AxisSpecifier()
{
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
  switch (t) {
  case nsXFormsXPathScanner::ANCESTOR:
  case nsXFormsXPathScanner::ANCESTOR_OR_SELF:
  case nsXFormsXPathScanner::ATTRIBUTE:
  case nsXFormsXPathScanner::CHILD:
  case nsXFormsXPathScanner::DESCENDANT:
  case nsXFormsXPathScanner::DESCENDANT_OR_SELF:
  case nsXFormsXPathScanner::FOLLOWING:
  case nsXFormsXPathScanner::FOLLOWING_SIBLING:
  case nsXFormsXPathScanner::NAMESPACE:
  case nsXFormsXPathScanner::PARENT:
  case nsXFormsXPathScanner::PRECEDING:
  case nsXFormsXPathScanner::PRECEDING_SIBLING:
  case nsXFormsXPathScanner::SELF:
    PopToken();
  case nsXFormsXPathScanner::AT:
    PopToken();
    break;
    
  default:
    XPathCompilerException("Not a axis specifier", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
    break;
  }
}
Esempio n. 17
0
void ParserThread::HandleForWhile()
{
    SymbolKind id;
    Token * tok = ConsumeToken(); //eat for or while key word
    id = (tok->type_id()==TKN_FOR)? tkFor:tkWhile;
    Symbol * sym = DoAddToken(id,*tok);
    ConsumeToken(); //eat the left parenthesis
    PushContext();  //save the old context
    m_Context.parentToken=sym;
    DoParse();      // do a parse, and should returned on an unbalanced right parenthesis
    PopContext();   // restore the old context

    tok = PeekToken();
    if(tok->type_id()==TKN_L_BRACE)
    {
        ConsumeToken(); //eat {
        PushContext();  //save the old context
        m_Context.parentToken=sym;
        DoParse();      // do a parse, and should returned on an unbalanced right brace
        PopContext();   // restore the old context
    }
    else
        SkipStatementBlock();

}
Esempio n. 18
0
void CMD_ChangeMenuStyle(F_CMD_ARGS)
{
	char *name = NULL;
	char *menuname = NULL;
	MenuStyle *ms = NULL;
	MenuRoot *mr = NULL;

	name = PeekToken(action, &action);
	if (name == NULL)
	{
		fvwm_msg(ERR,"ChangeMenuStyle",
			 "needs at least two parameters");
		return;
	}

	ms = menustyle_find(name);
	if (ms == NULL)
	{
		fvwm_msg(ERR,"ChangeMenuStyle", "cannot find style %s", name);
		return;
	}

	menuname = PeekToken(action, &action);
	while (menuname && *menuname)
	{
		mr = menus_find_menu(menuname);
		if (mr == NULL)
		{
			fvwm_msg(ERR, "ChangeMenuStyle", "cannot find menu %s",
				 menuname);
			break;
		}
		if (MR_MAPPED_COPIES(mr) != 0)
		{
			fvwm_msg(ERR, "ChangeMenuStyle", "menu %s is in use",
				 menuname);
		}
		else
		{
			MR_STYLE(mr) = ms;
			MR_IS_UPDATED(mr) = 1;
		}
		menuname = PeekToken(action, &action);
	}

	return;
}
void
nsXFormsXPathParser::UnionExpr()
{
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
  switch (t) {
  case nsXFormsXPathScanner::ANCESTOR:
  case nsXFormsXPathScanner::ANCESTOR_OR_SELF:
  case nsXFormsXPathScanner::ATTRIBUTE:
  case nsXFormsXPathScanner::CHILD:
  case nsXFormsXPathScanner::DESCENDANT:
  case nsXFormsXPathScanner::DESCENDANT_OR_SELF:
  case nsXFormsXPathScanner::FOLLOWING:
  case nsXFormsXPathScanner::FOLLOWING_SIBLING:
  case nsXFormsXPathScanner::NAMESPACE:
  case nsXFormsXPathScanner::PARENT:
  case nsXFormsXPathScanner::PRECEDING:
  case nsXFormsXPathScanner::PRECEDING_SIBLING:
  case nsXFormsXPathScanner::SELF:
  case nsXFormsXPathScanner::AT:
  case nsXFormsXPathScanner::STAR:
  case nsXFormsXPathScanner::NCNAME:
  case nsXFormsXPathScanner::QNAME:
  case nsXFormsXPathScanner::COMMENT:
  case nsXFormsXPathScanner::TEXT:
  case nsXFormsXPathScanner::PI:
  case nsXFormsXPathScanner::NODE:
  case nsXFormsXPathScanner::DOT:
  case nsXFormsXPathScanner::DOTDOT:
  case nsXFormsXPathScanner::SLASH:
  case nsXFormsXPathScanner::SLASHSLASH:
  case nsXFormsXPathScanner::VARIABLE:
  case nsXFormsXPathScanner::LPARAN:
  case nsXFormsXPathScanner::LITERAL:
  case nsXFormsXPathScanner::NUMBER:
  case nsXFormsXPathScanner::FUNCTIONNAME:
    PathExpr();
    t = PeekToken();
    if (t == nsXFormsXPathScanner::UNION) {
      PopToken();
      UnionExpr();
    }
    break;
    
  default:
    XPathCompilerException("Unexpected union token", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
  }
}
Esempio n. 20
0
static void
ParseBlock (struct LValueArray *lvalues, int amount)
{
  int token, i, found;

  for (;;)
    {
      SkipWhiteSpace (TRUE);
      token = PeekToken ();

      found = FALSE;
      for (i = 0; i < amount; i++)
	{
	  if (lvalues[i].token == token)
	    {
	      found = TRUE;
	      break;
	    }
	}
      if (!found)
	return;

      GetNextToken ();
      SkipWhiteSpace (FALSE);

      token = GetNextToken ();
      if (token == TknNONE)
	ShowParserError ();
      if ((token == TknRETURN) || (token == TknDONE))
	continue;

      if (token == TknASSIGN)
	{
	  SkipWhiteSpace (FALSE);
	  token = PeekToken ();

	  if ((token != TknRETURN) && (token != TknDONE))
	    lvalues[i].func (GetNextToken ());
	}
      else
	lvalues[i].func (token);

      SkipWhiteSpace (FALSE);
      if (((token = GetNextToken ()) != TknRETURN) && (token != TknDONE))
	ShowParserError ();
    }
}
void
nsXFormsXPathParser::Step()
{
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
  switch (t) {
  case nsXFormsXPathScanner::ANCESTOR:
  case nsXFormsXPathScanner::ANCESTOR_OR_SELF:
  case nsXFormsXPathScanner::ATTRIBUTE:
  case nsXFormsXPathScanner::CHILD:
  case nsXFormsXPathScanner::DESCENDANT:
  case nsXFormsXPathScanner::DESCENDANT_OR_SELF:
  case nsXFormsXPathScanner::FOLLOWING:
  case nsXFormsXPathScanner::FOLLOWING_SIBLING:
  case nsXFormsXPathScanner::NAMESPACE:
  case nsXFormsXPathScanner::PARENT:
  case nsXFormsXPathScanner::PRECEDING:
  case nsXFormsXPathScanner::PRECEDING_SIBLING:
  case nsXFormsXPathScanner::SELF:
  case nsXFormsXPathScanner::AT:
    AxisSpecifier();
    break;

  default:
    break;
  }
  
  t = PeekToken();
  switch (t) {
  case nsXFormsXPathScanner::STAR:
  case nsXFormsXPathScanner::NCNAME:
  case nsXFormsXPathScanner::QNAME:
  case nsXFormsXPathScanner::COMMENT:
  case nsXFormsXPathScanner::TEXT:
  case nsXFormsXPathScanner::PI:
  case nsXFormsXPathScanner::NODE:
    NodeTest();
    break;
    
  default:
    XPathCompilerException("Expected a NodeTest expression", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
  }
  
  t = PeekToken();
  if (t == nsXFormsXPathScanner::LBRACK) {
    Predicate(); // set the predicates
  }
}
Esempio n. 22
0
/**************************************************************************
 *
 * Moves focus to specified window
 *
 *************************************************************************/
void FocusOn(FvwmWindow *t, Bool FocusByMouse, char *action)
{
  int dx,dy;
  int cx,cy;
  Bool do_not_warp;

  if (t == NULL || HAS_NEVER_FOCUS(t))
  {
    UngrabEm(GRAB_NORMAL);
    if (t)
    {
      /* give the window a chance to take the focus itself */
      MoveFocus(t->w, t, FocusByMouse, 1, 0);
    }
    return;
  }

  if (!(do_not_warp = StrEquals(PeekToken(action, NULL), "NoWarp")))
  {
    if (t->Desk != Scr.CurrentDesk)
    {
      goto_desk(t->Desk);
    }

    if (IS_ICONIFIED(t))
    {
      cx = t->icon_xl_loc + t->icon_g.width/2;
      cy = t->icon_g.y + t->icon_p_height + ICON_HEIGHT(t) / 2;
    }
    else
    {
      cx = t->frame_g.x + t->frame_g.width/2;
      cy = t->frame_g.y + t->frame_g.height/2;
    }
    dx = (cx + Scr.Vx)/Scr.MyDisplayWidth*Scr.MyDisplayWidth;
    dy = (cy +Scr.Vy)/Scr.MyDisplayHeight*Scr.MyDisplayHeight;
    MoveViewport(dx,dy,True);

    /* If the window is still not visible, make it visible! */
    if (((t->frame_g.x + t->frame_g.height)< 0)||
	(t->frame_g.y + t->frame_g.width < 0)||
	(t->frame_g.x >Scr.MyDisplayWidth)||(t->frame_g.y>Scr.MyDisplayHeight))
    {
      SetupFrame(t, 0, 0, t->frame_g.width, t->frame_g.height, False);
      if (HAS_MOUSE_FOCUS(t) || HAS_SLOPPY_FOCUS(t))
      {
	XWarpPointer(dpy, None, Scr.Root, 0, 0, 0, 0, 2,2);
      }
    }
  }

  UngrabEm(GRAB_NORMAL);
  if (t->Desk == Scr.CurrentDesk)
  {
    MoveFocus(t->w, t, FocusByMouse, do_not_warp, 0);
  }

  return;
}
void
nsXFormsXPathParser::FilterExpr()
{
  PrimaryExpr();
  if (PeekToken() == nsXFormsXPathScanner::LBRACK) {
    Predicate();
  }
}
Esempio n. 24
0
bool rc2wxr::ReadOrs(wxString & w)
{
    wxString tok = PeekToken();
    if (tok.IsNumber())
        return false;
    w=GetToken();
    return true;
}
void
nsXFormsXPathParser::OrExpr()
{
  AndExpr();
  if (PeekToken() == nsXFormsXPathScanner::OR) {
    PopToken();
    OrExpr();
  }
}
void
nsXFormsXPathParser::AndExpr()
{
  EqualityExpr();
  if (PeekToken() == nsXFormsXPathScanner::AND) {
    PopToken();
    AndExpr();
  }
}
Esempio n. 27
0
Token	ScannerSub::GetToken(void){
	if(bPeeked){
		bPeeked = false;
		return token;
	}
	Token e = PeekToken();
	bPeeked = false;
	return e;
}
Esempio n. 28
0
static signed int expand_args_extended(
	char *input, char *argument_string, char *output)
{
	int rc;
	int lower;
	int upper;
	int i;
	size_t len;

	rc = __eae_parse_range(input, &lower, &upper);
	if (rc == -1)
	{
		return -1;
	}
	/* Skip to the start of the requested argument range */
	if (lower > 0)
	{
		argument_string = SkipNTokens(argument_string, lower);
	}
	if (!argument_string)
	{
		/* replace with empty string */
		return 0;
	}
	/* TODO: optimise handling of $[0] to $[9] which have already been
	 * parsed */
	for (i = lower, len = 0; i <= upper; i++)
	{
		char *token;
		size_t tlen;

		token = PeekToken(argument_string, &argument_string);
		if (token == NULL)
		{
			break;
		}
		/* copy the token */
		if (i > lower)
		{
			if (output != NULL)
			{
				*output = ' ';
				output++;
			}
			len++;
		}
		tlen = strlen(token);
		if (output != NULL && tlen > 0)
		{
			memcpy(output, token, tlen);
			output += tlen;
		}
		len += tlen;
	}

	return (int)len;
}
void
nsXFormsXPathParser::FunctionCall()
{
  nsDependentSubstring fname = Substring(mScanner.Expression(),
                                         mScanner.Offset() + 1,
                                         mScanner.Length());
  if (!mUsesDynamicFunc && fname.Equals(NS_LITERAL_STRING("now"))) {
    mUsesDynamicFunc = PR_TRUE;
  }

  PopToken();
  PopToken();
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();

  PRBool con = t == nsXFormsXPathScanner::RPARAN ? PR_FALSE : PR_TRUE;
  while (con) {
    if (t == nsXFormsXPathScanner::XPATHEOF) {
      XPathCompilerException("Expected ) got EOF",
                             mScanner.Expression(),
                             mScanner.Offset(),
                             mScanner.Length());
    }
    nsXFormsXPathNode* c = JustContext();
    Expr();
    if (fname.Equals(NS_LITERAL_STRING("index"))) {
      c->mIsIndex = PR_TRUE;
    }
    PushContext(c);

    t = PeekToken();
    con = (t == nsXFormsXPathScanner::COMMA);
    if (con) {
      PopToken(); // Another Argument
    }
  }

  if (t != nsXFormsXPathScanner::RPARAN) {
    XPathCompilerException("Expected )", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
  }

  PopToken();
}
void
nsXFormsXPathParser::PrimaryExpr()
{
  nsXFormsXPathScanner::XPATHTOKEN t = PeekToken();
  switch (t) {
  case nsXFormsXPathScanner::VARIABLE:
    PopToken();
    break;
    
  case nsXFormsXPathScanner::LPARAN: {
      PopToken();
      nsXFormsXPathNode* c = JustContext();
      Expr();
      PushContext(c);
      if (PeekToken() == nsXFormsXPathScanner::RPARAN) {
        PopToken(); 
      } else {
        XPathCompilerException("Expected )", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
      }
    }
    break;
    
  case nsXFormsXPathScanner::LITERAL:
    mHead->mLiteral = PR_TRUE;
    PopToken();
    break;
    
  case nsXFormsXPathScanner::NUMBER:
    mHead->mLiteral = PR_TRUE;
    PopToken();
    break;
    
  case nsXFormsXPathScanner::FUNCTIONNAME:
    FunctionCall();
    break;
    
  default:
    XPathCompilerException("Not a primary expression", mScanner.Expression(), mScanner.Offset(), mScanner.Length());
  }
}