DisplayString::DisplayString(const QString & raw) { _disp = Qt::escape(raw); // Match any CSPM open or close bracket. This is a little unclear here because // of all the backslashes, but matches (, [, [|, [[, [+, /+, { and their respective // closing brackets. |> also counts as a closing bracket ("[|a|>" is CSPM for // exception on events a). [> is also matched, and is a special case: neither // opening nor closing. QRegExp brackets( "(\\(|\\[>|\\[[\\[|+]?|/\\+|\\{|\\}|\\+\\\\|[\\]|+]?\\]|\\)|\\|>)"); QStringList open; open << "(" << "[" << "{" << "[[" << "[|" << "[+" << "/+"; QString span("<span class=\"brac%1\">%2</span>"); int i = 0; int level = 0; while ((i = brackets.indexIn(_disp, i)) != -1) { QString m = brackets.capturedTexts()[0]; bool isOpen = open.contains(m); if (!isOpen && m != "[>") level--; _disp.replace(i, brackets.matchedLength(), span.arg(QString::number(level % 6), m)); i += 27 + brackets.matchedLength(); // Length of QString span after args are replaced. if (isOpen) level++; } _disp.prepend(stylesheet); }
int main(int argc, char* argv[]) { if ( argc > 1) { std::string brackets( argv[1] ); if ( checkBrackets(brackets) ) { std::cout << "Check passed" << std::endl; } else { std::cout << "Check failed" << std::endl; } } return 0; }
// File Methods bool IniReader::readFromFile(const std::string &filename) { std::string line; std::ifstream file(filename); std::regex brackets("\\[.*\\]"); std::string currentSection; if(file) { while(std::getline(file, line)) { if(std::regex_match(line, brackets)) { currentSection = line.substr(1, line.size()-2); } else if(!currentSection.empty()) { std::vector<std::string> result = splitLine(line, '='); if(result.size() == 2) { iniContainer[currentSection][result[0]] = result[1]; } else { // invalid entry } } else { // ini doesn't start with a section } } file.close(); return true; } else { // file doesn't exist return false; } }
Intervall parse(string input){ Intervall result = Intervall(NAN); //string term((inputIntervall->text()).toStdString()); string term=clearString(input);//Leerzeichen in term löschen if(term!=""){ if(validChars(term)==false){//Überprüfung, ob term ungültige Zeichen enthält errorWindow("Nonvalid character!"); return Intervall(NAN); }else if(brackets(term)==false){//Überprüfung, ob die Anzahl von "(" mit ")" in term übereinstimmt errorWindow("Can't match delimiters!"); return Intervall(NAN); }else if(intervalBrackets(term)==false){//Überprüfung, ob die Anzahl von "[" mit "]" in term übereinstimmt errorWindow("Can't match interval delimiters!"); return Intervall(NAN); }else { result=parseTermOfIntervals(term);//term parsen -> result } } return result; }
int Funktion::parseFunction(string func){ string::iterator it; func = clearString(func); func = multiplicationSign(func); if(func=="") return 0; if(brackets(func)==false){ return 1; } if(Funktion::validChars(func)==false){ return 2; } int brackets = 0; for(int i=0;i<2;i++){ for(it=func.end();it>=func.begin();it--){ if(*it=='(') brackets--; if(*it==')') brackets++; if(*it==binaryFunction[i].at(0) && brackets==0 && *(it-1)!='/' && *(it-1)!='*' && *(it-1)!='-' && *(it-1)!='+'){ Funktion a; Funktion b; if(it==func.begin()){ string funca(it+1,func.end()); int retVal = a.parseFunction(funca); if(retVal==0){ function->insert(function,i,""); function->insertTree(function->right,a.getFunction()); } return retVal; } else if(it==func.end()){ return 3; } else{ string funca(func.begin(),it); string funcb(it+1,func.end()); int retVal1 = a.parseFunction(funca); int retVal2 = b.parseFunction(funcb); if(retVal1==0 && retVal2==0){ function->insert(function,i,""); function->insertTree(function->left,a.getFunction()); function->insertTree(function->right,b.getFunction()); return 0; } if(retVal1==0) return retVal2; if(retVal2==0) return retVal1; return -1; } } } } for(int i=2;i<sizeof(binaryFunction)/sizeof(binaryFunction[0]);i++){ for(it=func.end();it>=func.begin();it--){ if(*it=='(') brackets--; if(*it==')') brackets++; if(*it==binaryFunction[i].at(0) && brackets==0){ Funktion a; Funktion b; if(it==func.begin()){ return 3; } else if(it==func.end()){ return 3; } else{ string funca(func.begin(),it); string funcb(it+1,func.end()); int retVal1 = a.parseFunction(funca); int retVal2 = b.parseFunction(funcb); if(retVal1==0 && retVal2==0){ function->insert(function,i,""); function->insertTree(function->left,a.getFunction()); function->insertTree(function->right,b.getFunction()); return 0; } if(retVal1==0) return retVal2; if(retVal2==0) return retVal1; return -1; } } } } it = func.begin(); for(int i=0;i<sizeof(unaryFunction)/sizeof(unaryFunction[0]);i++){ if(string(it,it+unaryFunction[i].length())==unaryFunction[i] && brackets==0){ Funktion a; string funca(func,unaryFunction[i].length()); int retVal = a.parseFunction(funca); if(retVal==0){ function->insert(function,i+sizeof(binaryFunction)/sizeof(binaryFunction[0]),""); function->insertTree(function->left,a.getFunction()); } return retVal; } } if(*it=='('){ Funktion a; string funca(func.begin()+1,func.end()-1); int retVal = a.parseFunction(funca); if(retVal==0) function->insertTree(function,a.getFunction()); return retVal; } if(*it=='x'){ function->insert(function,-4,"x"); return 0; } function->insert(function,-3,func); return 0; }