Beispiel #1
0
void CGUIIncludes::ResolveIncludes(TiXmlElement *node, std::map<INFO::InfoPtr, bool>* xmlIncludeConditions /* = NULL */)
{
  if (!node)
    return;
  ResolveIncludesForNode(node, xmlIncludeConditions);

  TiXmlElement *child = node->FirstChildElement();
  while (child)
  {
    ResolveIncludes(child, xmlIncludeConditions);
    child = child->NextSiblingElement();
  }
}
Beispiel #2
0
void CGUIIncludes::Resolve(TiXmlElement *node, std::map<INFO::InfoPtr, bool>* xmlIncludeConditions /* = NULL */)
{
  if (!node)
    return;

  SetDefaults(node);
  ResolveConstants(node);
  ResolveExpressions(node);
  ResolveIncludes(node, xmlIncludeConditions);

  TiXmlElement *child = node->FirstChildElement();
  while (child)
  {
    // recursive call
    Resolve(child, xmlIncludeConditions);
    child = child->NextSiblingElement();
  }
}
Beispiel #3
0
void C4AulScriptEngine::Link(C4DefList *rDefs) {
#ifdef C4ENGINE

  try {
    // resolve appends
    ResolveAppends(rDefs);

    // resolve includes
    ResolveIncludes(rDefs);

    // parse script funcs descs
    ParseDescs();

    // parse the scripts to byte code
    Parse();

    // engine is always parsed (for global funcs)
    State = ASS_PARSED;

    // get common funcs
    AfterLink();

    // non-strict scripts?
    if (nonStrictCnt) {
      // warn!
      // find first non-#strict script
      C4AulScript *pNonStrictScr = FindFirstNonStrictScript();
      if (pNonStrictScr)
        pNonStrictScr->Warn("using non-#strict syntax!", NULL);
      else {
        Warn("non-#strict script detected, but def is lost", NULL);
        Warn(
            "please contact [email protected] for further "
            "instructions",
            NULL);
      }
      Warn(FormatString("%d script%s use non-#strict syntax!", nonStrictCnt,
                        (nonStrictCnt != 1 ? "s" : "")).getData(),
           NULL);
    }

    // update material pointers
    Game.Material.UpdateScriptPointers();

    // display state
    sprintf(OSTR,
            "C4AulScriptEngine linked - %d line%s, %d warning%s, %d error%s",
            lineCnt, (lineCnt != 1 ? "s" : ""), warnCnt,
            (warnCnt != 1 ? "s" : ""), errCnt, (errCnt != 1 ? "s" : ""));
    Log(OSTR);

    // reset counters
    warnCnt = errCnt = nonStrictCnt = lineCnt = 0;
  } catch (C4AulError *err) {
    // error??! show it!
    err->show();
    delete err;
  }

#endif
}