void parameterlist(void){ parameter(); if(lookahead == ','){ match(','); parameterlist(); } }
QList<LibraryElementInfo> SGLMathLib::libraryMembersInfo() const { QString code = libCode(); QList<LibraryElementInfo> res; int index = 0; QRegExp parameter("\\w*"); QRegExp parameterlist(parameter.pattern() + "(\\s*,\\s*" + parameter.pattern() + ")*"); QRegExp namespacelist(parameter.pattern() + "(\\s*\\.\\s*" + parameter.pattern() + ")*\\$?"); QRegExp help("/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*+/"); QRegExp exp("(" + help.pattern() + ")?" + "\\s*" + namespacelist.pattern() + "\\s*=\\s*function\\s*\\(" + parameterlist.pattern() + "\\)"); int ii = 0; do { index = code.indexOf(exp,index) + exp.matchedLength(); if (index >= 0) { QString fun = exp.cap(); LibraryElementInfo mi; int helpind = fun.indexOf(help); if (helpind >= 0) { mi.help = help.cap(); mi.help.remove(QRegExp("\\*\\s+\\n")); fun.remove(help.cap()); } fun.remove(QRegExp("\\s*")).remove("=").remove("function"); mi.completename = fun; res << mi; ++ii; } }while(index >= 0); return res; }
QRegExp MLScriptLanguage::joinedWordExpression() const { //*\\*/(\\(\\w*\\))? QRegExp parameter("(\\w*|\\d*(\\.\\d+)*)"); QRegExp parameterlist(parameter.pattern() + "(\\s*,\\s*" + parameter.pattern() + ")*"); QRegExp name("([a-z]|[A-Z])+\\w*(\\(" + parameterlist.pattern() + "\\))?"); QString st(name.pattern() + "(\\s*" + wordsjoiner.pattern() +"\\s*|\\s*" + wordsjoiner.pattern() +"\\s*" + name.pattern() + ")*"); return QRegExp(st); }
int Scenario::loadMapBuf(string mapn) { mapname=mapn; ifstream mapfile; string tmpline; string loadfile=config.datadir+mapname; mapfile.open(loadfile.c_str()); if (mapfile) { cout << "Loading new map: " << loadfile << endl; } else { cout << "Map loading failed: " << loadfile << " not found!\n"; return 2; } mapbuf.clear(); /* We parse the parameters to add a name if it was missing This whole file reading looks much more complicated because of this (otherwise there would only be mapbuf.push_back(tmpline) */ string cname; Uint16 x,y; ParameterMap parameters; bool header=true; std::map<string,Uint16> namecount; while (getline(mapfile,tmpline)) { if (header) { mapbuf.push_back(tmpline); std::istringstream tmpstream(tmpline); tmpstream >> cname; if (cname[0]=='#') { if (cname=="#ENDHEADER") header=false; continue; } } else { cname.erase(); x=y=0; std::istringstream tmpstream(tmpline); tmpstream >> cname >> x >> y; if (cname.empty() || cname[0]=='#') { mapbuf.push_back(tmpline); continue; } else { namecount[cname]++; } string parameterlist((istreambuf_iterator<char>(tmpstream)), istreambuf_iterator<char>()); parameters=getParameters(parameterlist); if (!hasParam(parameters,"name")) { if (parameters.empty()) tmpline+=" name="+cname+itos(namecount[cname]); else tmpline+=", name="+cname+itos(namecount[cname]); } mapbuf.push_back(tmpline); } }
void parameters(void){ if(lookahead == VOID) match(VOID); else parameterlist(); }