#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif

#include "QFramework/TQStringUtils.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQCounter.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQPCA.h"
#include "QFramework/TQSample.h"
#include "QFramework/TQLink.h"
#include "QFramework/TQTable.h"

// #define _DEBUG_
#include "QFramework/TQLibrary.h"

#include "TObjString.h"
#include "TMath.h"
#include "TColor.h"
#include "TPrincipal.h"
#include "THStack.h"
#include "Varargs.h"
#include "TLegend.h"
#include "TInterpreter.h"
#include "TH1.h"
#include "TParameter.h"

#include "TPRegexp.h" //note: this is the more powerful regexp class in root, wrapping the perl regex parser! (not to be confused with TRegexp!)

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQStringUtils:
//
// The TQStringUtils namespace provides a set of static utility methods related to the inspection
// and manipulation of strings.
//
////////////////////////////////////////////////////////////////////////////////////////////////

const TString TQStringUtils::lowerLetters = "abcdefghijklmnopqrstuvwxyz";
const TString TQStringUtils::upperLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const TString TQStringUtils::emptyString = "";
const TString TQStringUtils::numerals = "0123456789";
const TString TQStringUtils::letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
const TString TQStringUtils::alphanum = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
const TString TQStringUtils::alphanumvar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$()";
const TString TQStringUtils::alphanumvarext = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$()_";
const TString TQStringUtils::defaultIDchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.";
const TString TQStringUtils::controlReturnCharacters = "mAC";
const TString TQStringUtils::blanks = " \t";
const TString TQStringUtils::blanksAll = " \t\n\r";


const TRegexp TQStringUtils::latexcmd = "\\\\[a-zA-Z]+[{ }$]?";
const TRegexp TQStringUtils::latexmath = "\\$.*\\$";
const TRegexp TQStringUtils::roottex = "#[a-zA-Z]+";
const TRegexp TQStringUtils::html = "<[a-zA-Z]+>.*</[a-zA-Z]+>";

//__________________________________________________________________________________|___________

std::vector<TString> TQStringUtils::getTagPlaceholders(TString in) {
  // get the list of all the placeholders $(xyz)
  std::vector<TString> out;
  TString dummy;
  
  while (!in.IsNull()) {

    /* read text up to control character '$' */
    TQStringUtils::readUpTo(in, dummy, "$");
    if (in.IsNull())
      continue;

    /* read control character */
    TString field;
    TQStringUtils::readToken(in, field, "$");

    /* read replacement definition block */
    TString def;
    int nDef = 0;
    if (in.BeginsWith("(")) {
      nDef = TQStringUtils::readBlock(in, def, "()[]{}", "''\"\"");
      if (nDef > 0)
        field.Append(TString::Format("(%s)", def.Data()));
    } else {
      nDef = TQStringUtils::readToken(in, def, getDefaultIDCharacters());
      if (nDef > 0)
        field.Append(def);
    }

    if (!def.IsNull()) {
      /* split definition: get key name */
      TString keyName;
      TQStringUtils::readUpTo(def, keyName, ",");
      out.push_back(keyName);
    }
  }

  return out;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getUniqueName(TDirectory * dir, TString proposal) {
  // Returns a string that does not exist as object name in TDirectory instance
  // <dir>. The string is constructed from input string <proposal> and if an object
  // with the same name is present in <dir> an increasing integer is appended
  // ("_iN") until the name is unique.
 
  // append increasing integer to <proposal> until name is unique
  TString name = proposal;
  int i = 2;
  while (dir && dir->FindObject(name.Data())) {
    name = TString::Format("%s_i%d", proposal.Data(), i++);
  }

  return name;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getDetails(const TObject * obj) {
  // return details on some TObject as a TString
  if (!obj) {
    return TString("<invalid pointer>");
  } else if (obj->InheritsFrom(TH1::Class())) {
    return TQHistogramUtils::getDetailsAsString((TH1*)obj,2);
  } else if (obj->InheritsFrom(TQCounter::Class())) {
    return ((TQCounter*)obj)->getAsString();
  } else if (obj->InheritsFrom(TPrincipal::Class())) {
    return TQHistogramUtils::getDetailsAsString((TPrincipal*)obj);
  } else if (obj->InheritsFrom(TQPCA::Class())) {
    return ((TQPCA*)obj)->getDetailsAsString();
  } else if (obj->InheritsFrom(TQSample::Class())) {
    TString generator = "<unknown generator>";
    TString process = "<unknown process>";
    TString simulation = "";
    TQSample * s = (TQSample*)obj;
    TString retval;
    //@tag:[.xps.generator,.xsp.simulation,.xsp.process] The contents of these sample tags are included in the return value of TQStringUtils::getDetails(...).
    if(s->getTagString(".xsp.generator", generator)){
      retval.Append(generator);
    }
    if(s->getTagString(".xsp.simulation", simulation)){
      if(!retval.IsNull()){
        retval.Append(" (");
        retval.Append(simulation);
        retval.Append(")");
      }
    }
    if(s->getTagString(".xsp.process", process)){
      if(!retval.IsNull())
        retval.Append(": ");
      retval.Append(process);
    }
    double norm = s->getNormalisation();
    if(norm != 1){
      if(!retval.IsNull())
        retval.Append(" - ");
      retval.Append("norm.=");
      if(norm > 0) retval.Append(TString::Format("%.6f",norm));
      else if(norm < 0) retval.Append(TQStringUtils::makeBoldRed(TString::Format("%.3f",norm)));
      else retval.Append(TQStringUtils::makeBoldYellow("0"));
    } 
    if(s->hasSubSamples()){
      if(!retval.IsNull()) retval.Append(" - ");
      retval.Append("multisample");
    }
    return retval;
  } else if (obj->InheritsFrom(TQValue::Class())) {
    return ((TQValue*)obj)->getString();
  } else if (obj->InheritsFrom(TParameter<double>::Class())) {
    return TString::Format("%g", ((TParameter<double>*)obj)->GetVal());
  } else if (obj->InheritsFrom(TCollection::Class())) {
    int nEntries = ((TCollection*)obj)->GetEntries();
    if (nEntries != 1) return TString::Format("%d entries", nEntries);
    else return "1 entry";
  } else if (obj->InheritsFrom(TQLink::Class())) {
    return TString("--> ") + ((TQLink*)obj)->getDestAsString();
  } else if (obj->InheritsFrom(TQTable::Class())) {
    return ((TQTable*)obj)->getDetails();
  } else if (obj->InheritsFrom(TPrincipal::Class())) {
    return TQHistogramUtils::getDetailsAsString((TPrincipal*)obj);
  } else if (obj->InheritsFrom(TGraph::Class())) {
    return TQHistogramUtils::getDetailsAsString((TGraph*)obj);
  } else if (obj->InheritsFrom(TLegend::Class())){
    TLegend* l = (TLegend*)obj;
    return TString::Format("%d entries (%d columns, %d rows)",(l->GetListOfPrimitives() ? l->GetListOfPrimitives()->GetEntries() : 0),l->GetNColumns(),l->GetNRows());
  } else if (obj->InheritsFrom(THStack::Class())){
    THStack* s = (THStack*)(obj);
    return s->GetStack() ? TString::Format("%d histograms",(s->GetStack()->GetEntries())) : "(empty)";
  } else if (obj->InheritsFrom(TQFolder::Class())){
    const TQFolder* f = dynamic_cast<const TQFolder*>(obj);
    int nObj = f->getNObjects();
    int nTag = f->getNTags();
    TString retval;
    if(nObj == 0) retval += "no objects";
    else if(nObj == 1) retval += "1 object";
    else retval += TString::Format("%d objects",nObj);
    retval += ", ";
    if(nTag == 0) retval += "no tags";
    else if(nTag == 1) retval += "1 tag";
    else retval += TString::Format("%d tags",nTag);
    return retval;
  } else {
    return TString::Format("<no details for class %s available>", obj->IsA()->GetName());
  }
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getStatusBar(int pos, int max, const TString& def) {
  // produce a "status bar" from some pos/max integer fraction
  // def is expected to have length 4 (default is "[> ]")
  // def[0] is a starting character (default: "[")
  // def[1] is a "done" character (default: ">")
  // def[2] is a "pending" character (default: " ")
  // def[3] is a terminating character (default: "]")

  if (def.Length() != 4) {
    return "";
  }

  TString bar;

  bar.Append(def[0]);

  for (int i = 1; i <= max; i++) {
    if (i <= pos) {
      bar.Append(def[1]);
    } else {
      bar.Append(def[2]);
    }
  }

  bar.Append(def[3]);

  return bar;
}


//__________________________________________________________________________________|___________

bool TQStringUtils::isValidIdentifier(const TString& identifier,
                                      const TString& characters, int minLength, int maxLength) {
  // check if the given string is a valid identifier, that is,
  // - contains only the allowed characters
  // - having a minimum length of minLength
  // - having a maximum length of maxLength

  const size_t len(identifier.Length());
  if (minLength >= 0 && len < (size_t)minLength) {
    // identifier too short
    return false;
  }

  if (maxLength >= 0 && len > (size_t)maxLength) {
    // identifier too long
    return false;
  }
  
  // search for invalid characters
  for (size_t i = 0; i < len; i++) {
    if (characters.Index(identifier[i]) == kNPOS) {
      // character in <identifier> not listed in <characters>
      return false;
    }
  }
  
  return true;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::getSIsuffix(int exponent, const TString& format){
  // retrieve the SI suffix corresponding to the given exponent
  // special formats include latex, html and unicode
  if(exponent > 0){
    if(exponent < 3) return "";
    if(exponent < 6) return "k";
    if(exponent < 9) return "M";
    if(exponent < 12) return "T";
    if(exponent < 15) return "P";
    if(exponent < 18) return "Z";
  } else {
    if(exponent > -3) return "";
    if(exponent > -6) return "m";
    if(exponent > -9){
      if(format == "latex"){
        return "\\mu";
      } else if(format=="html"){
        return "&mu;";
      } else if(format=="unicode"){
        return "ยต";
      } else {
        return "mu";
      }
    }
    if(exponent > -12) return "n";
    if(exponent > -15) return "p";
    if(exponent > -18) return "f";
    if(exponent > -21) return "a";
    if(exponent > -24) return "z";
    if(exponent > -27) return "y";
  }
  return "?";
}

//__________________________________________________________________________________|___________

bool TQStringUtils::isEmpty(const TString& str, bool allowBlanks) {
  // Returns true if the input string <str> is empty and false otherwise. If
  // <allowBlanks> is true the input string is considered empty even if it still
  // contains blanks (listed in TQStringUtils::getBlanks()).
 
  if (allowBlanks) {
    // ignoring blanks means number of blanks in string must be equal to total length
    return TQStringUtils::countLeading(str, TQStringUtils::getBlanks()) == str.Length();
  } else {
    return str.IsNull();
  }
}

//__________________________________________________________________________________|___________

bool TQStringUtils::equal(const TString& first, const TString& second){
  // returns true if the input strings are equal
  if (first.Length() != second.Length()) return false; //if strings have different length they can't be identical
  return (first.CompareTo(second) == 0);
}


bool TQStringUtils::requal(const TString& first, const TString& second){
  // returns true if the input strings are equal. 
  // This version starts the comparison from the end which can be faster for long
  // strings that are in any case expected to be largely identical at the beginning.
  if (first.Length() != second.Length()) return false; //if strings have different length they can't be identical
  return (TQStringUtils::compareTails(first,second) == first.Length()); //length of common tail must be the full string
}

//__________________________________________________________________________________|___________

TString TQStringUtils::makeValidIdentifier(const TString& identifier,
                                           const TString& characters, const TString& replacement) {
  // converts the given string into a valid identifier
  // all characters not contained in the set of allowed characters
  // are replaced by the given string

  /* the string to return */
  TString result;

  /* replace invalid characters by 'replacement' */
  int pos = -1;
  while (++pos < identifier.Length()) {
    if (characters.Index(identifier[pos]) != kNPOS)
      result.Append(identifier[pos]);
    else
      result.Append(replacement);
  }

  /* return result */
  return result;
}

//__________________________________________________________________________________|___________

bool TQStringUtils::getBoolFromString(const TString& boolString_, bool &isBool) {
  // converts any type of textual boolean expression into a bool
  // values like yes, no, ok, fail, true, false, etc. will be accepted
  // result will be returned, success is indicated by value written to second argument
  TString boolString = TQStringUtils::trim(boolString_);

  bool isTrue =
    (boolString.CompareTo("yes", TString::kIgnoreCase) == 0) ||
    (boolString.CompareTo("ok", TString::kIgnoreCase) == 0) ||
    (boolString.CompareTo("true", TString::kIgnoreCase) == 0) ||
    (TQStringUtils::isNumber(boolString) && boolString.Atof() != 0.);

  bool isFalse =
    (boolString.CompareTo("no", TString::kIgnoreCase) == 0) ||
    (boolString.CompareTo("fail", TString::kIgnoreCase) == 0) ||
    (boolString.CompareTo("false", TString::kIgnoreCase) == 0) ||
    (TQStringUtils::isNumber(boolString) && boolString.Atof() == 0.);

  if (isFalse && !isTrue) {
    /* bool in string is "false" */
    isBool = true;
    return false;
  } else if (!isFalse && isTrue) {
    /* bool in string is "true" */
    isBool = true;
    return true;
  } else {
    /* no bool in string found or
     * both "true" and "false" */
    isBool = false;
    return false;
  }
}

//__________________________________________________________________________________|___________

int TQStringUtils::interpret(const TString& str){
  // pass some string through the root interpreter
  bool errMsg = gInterpreter->IsErrorMessagesEnabled();
  gInterpreter->SetErrorMessages(false);
  int val = gROOT->ProcessLine(str);
  gInterpreter->SetErrorMessages(errMsg);
  return val;
}

//__________________________________________________________________________________|___________

int TQStringUtils::getColorFromString(TString colorString) {
  // converts ROOT color identifiers (kRed, kGreen, ...) 
  // and rgb hex codes (#xxxxxx) 
  // to the corresponding integer color identifier

  if ((colorString.Index('#') == 0) && (colorString.Length() == 7)) {
    // test for color string of the form "#xxxxxx"
    return TColor::GetColor(colorString);
  }
 
  colorString.Append(";");
  return TQStringUtils::interpret(colorString);
}


//__________________________________________________________________________________|___________

bool TQStringUtils::getBoolFromString(const TString& boolString) {
  // converts any type of textual boolean expression into a bool
  // values like yes, no, ok, fail, true, false, etc. will be accepted
  bool isBool = false;
  return getBoolFromString(boolString, isBool);
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getStringFromBool(bool boolValue) {
  // converts a boolean value to its corresponding string (true or false)
  if (boolValue)
    return "true";
  else
    return "false";
}


//__________________________________________________________________________________|___________

bool TQStringUtils::isDouble(TString str) {
  // Returns true if the input string <str> represents a double value or false
  // otherwise. Please note: for pure integer values this method returns false, e.g.
  // isDouble("4") will evaluate to false while isDouble("4.") and isDouble("4E0")
  // will evaluate to true.

  // remove leading and trailing blanks
  str = trim(str);

  // get the number of special characters
  TString dummy;
  int nSign = readToken(str, dummy, "+-");
  if(TQStringUtils::equal(str,"inf")) return true;
  int nNumPre = readToken(str, dummy, getNumerals());
  int nDots = readToken(str, dummy, ".");
  int nNumPost = readToken(str, dummy, getNumerals());
  int nExp = removeLeading(str, "eE");
  int nExpSign = readToken(str, dummy, "+-");
  int nNumExp = readToken(str, dummy, getNumerals());

  return str.IsNull() && nSign <= 1 && (nNumPre > 0 || nNumPost > 0) &&
    ((nDots == 1 && (nExp + nExpSign + nNumExp) == 0) ||
     (nExp == 1 && nExpSign <= 1 && nNumExp > 0 && nDots <= 1));
}


//__________________________________________________________________________________|___________

bool TQStringUtils::isInteger(TString str) {
  // Returns true if the input string <str> represents an integer value or false
  // otherwise. Please note: for integer values given in "double notation" false is
  // returned, e.g. isInteger("4.") and isInteger("4E0") will evaluate to false.
 
  // remove leading and trailing blanks
  str = trim(str);

  // get the number of special characters
  TString dummy;
  TString strExp;
  int nSign = readToken(str, dummy, "+-");
  int nNum = readToken(str, dummy, getNumerals());

  return str.IsNull() && nSign <= 1 && nNum > 0;
}


//__________________________________________________________________________________|___________

bool TQStringUtils::isNumber(const TString& str) {
  // Return true if input string <str> represents either a double or an integer
  // value. This method is equivalent to "isInteger(str) || isDouble(str)".
 
  return isInteger(str) || isDouble(str);
}


//__________________________________________________________________________________|___________

bool TQStringUtils::isBool(const TString& str) {
  // returns true if the given string is a valid boolean expression
  bool isBool = false;
  getBoolFromString(str, isBool);
  return isBool;
}


//__________________________________________________________________________________|___________

int TQStringUtils::getEditDistance(const TString& str1, const TString& str2) {
  // returns the number of edits required to convert str1 to str2
  int m = str1.Length();
  int n = str2.Length();
 
  // d[i, j] := d[i + (m + 1) * j]
  unsigned int * d = new unsigned int[(m + 1) * (n + 1)];
 
  for (int i = 0; i <= m; i++) {
    d[i] = i;
  }
  for (int j = 0; j <= n; j++) {
    d[(m + 1) * j] = j;
  }

  for (int j = 1; j <= n; j++) {
    for (int i = 1; i <= m; i++) {
      if (str1[i - 1] == str2[j - 1]) { 
        // no operation required
        d[i + (m + 1) * j] = d[(i - 1) + (m + 1) * (j - 1)]; 
      } else {
        // a deletion
        int del = d[(i - 1) + (m + 1) * j] + 1;
        // an insertion
        int ins = d[i + (m + 1) * (j - 1)] + 1;
        // a substitution
        int sub = d[(i - 1) + (m + 1) * (j - 1)] + 1;
 
        d[i + (m + 1) * j] = TMath::Min(del, TMath::Min(ins, sub));
      }
    }
  }
 
  // the final edit distance
  int dist = d[m + (m + 1) * n];

  // clean up
  delete [] d;

  return dist;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::getLongestCommonSubstring(const std::vector<TString>& fullStrings_, const TString& seed){
  // returns the longest string containing the seed which is a substring of all strings provided.
  // Please note that if seed appears multiple times in a string, only the first occurance is considered!
  
  std::vector<TString> fullStrings = fullStrings_;
  bool ok = true;
  size_t seedLength = seed.Length();
  TString str1,str2;
  int pos1,pos2;
  while (ok && fullStrings.size()>1) {
    str1 = fullStrings.back(); fullStrings.pop_back();
    str2 = fullStrings.back(); fullStrings.pop_back();
    
    pos1 = TQStringUtils::find(str1,seed,0);
    if (pos1==kNPOS) { //we need to find at least one occurance of the seed
      ERRORfunc("Cannot determine longest common substring with seed '%s': failed to find seed in string '%s'",seed.Data(),str1.Data());
      return TString("");
    }
    pos2 = TQStringUtils::find(str2,seed,0);
    if (pos2==kNPOS) { //we need to find at least one occurance of the seed
      ERRORfunc("Cannot determine longest common substring with seed '%s': failed to find seed in string '%s'",seed.Data(),str2.Data());
      return TString("");
    }
    size_t lenPre = TQStringUtils::compareTails( str1(0,pos1) , str2(0,pos2) );
    size_t lenPost = TQStringUtils::compareHeads( str1(pos1+seedLength,str1.Length()), str2(pos2+seedLength,str2.Length()) );
    TString common = str1(pos1-lenPre,lenPre+seedLength+lenPost);
    fullStrings.push_back(common); //re-queue the common string
    
  }
  
  if ( ok && fullStrings.size()>0 ) return fullStrings[0];
  return TString("");
}

TString TQStringUtils::removeDuplicateSubStrings(const TString& longString, int minLength) {
  // convenience wrapper in case the removed sequence is not of interest
  TString dummy;
  return TQStringUtils::removeDuplicateSubStrings(longString,dummy, minLength);
}

TString TQStringUtils::removeDuplicateSubStrings(const TString& longString_, TString& removedSequence, int minLength) {
  // checks for substrings of 'longString' which are at least 'minLength' 
  // characters long and (disjointly) occur multiple times in 'longString', 
  // removing all but the first occurence. The identified substring is
  // additionally stored in the 'removedSequence' parameter.
  // In case of ambiguities, i.e., a shorter but more frequently occuring substring
  // versus a longer but less frequently occuring substring, the more frequent
  // one is treated (given it is at least 'minLength' characters long)  
  
  //reset "removedSequence" (we should always indicate what we removed, so if nothing to be purged is found below we ensure to report an empty string)
  removedSequence = "";
  int maxOccurances = 0;
  TString longString = longString_;
  int pos = 0;
  int firstPos = 0;
  //first identify the substring to be purged
  
  while (pos<longString.Length()-2*minLength) { //no need to continue checking if there is no chance we'll encounter at least two occurances
    int thisLength = minLength;
    int theseOccurances = TQStringUtils::countText(longString(pos+minLength,longString.Length()-pos-minLength),longString(pos,minLength));
    if (theseOccurances > maxOccurances) {
      maxOccurances = theseOccurances;
      firstPos = pos; //store for later use (so we don't need to find it again)
      //note on the loop condition: technically, we should never have more matches than before
      while( theseOccurances >= maxOccurances ) { //abort if we expanded the substring length such that we have fewer matches
        ++thisLength;
        //check how many matches we get with the inreased substring length
        theseOccurances = TQStringUtils::countText(longString(pos+thisLength,longString.Length()-pos-thisLength),longString(pos,thisLength));
      }
      //since we increase the substring length even if the number of matches decreases for that length, we need to adjust for this offset (-> pre-decrement when obtaining the substring!). 
      //make a copy of the found substring
      removedSequence = TString(longString(pos,--thisLength)); //pre-decrement, see above!
    }
    //move on to the next position
    ++pos;
  }
  //now we have the most frequent substring which fulfills the requirements
  //so let's remove all but the first occurance:
  int toRemove = TQStringUtils::find(longString,removedSequence,firstPos+removedSequence.Length());
  
  if (toRemove == kNPOS) ERRORfunc("Logic error in string parsing detected!"); 
  while (toRemove != kNPOS) {
    longString.Remove(toRemove,removedSequence.Length());
    toRemove = TQStringUtils::find(longString,removedSequence,firstPos+removedSequence.Length());
    --maxOccurances; //a little consistency check
  }
  if (maxOccurances != 0) {
    ERRORfunc("Logic error in string parsing detected! %d occurances have not been removed",maxOccurances);
  }    
  return longString;
  
}

//__________________________________________________________________________________|___________

int TQStringUtils::testNumber(double number, TString test) {
  // Tests number <number> with simple condition <test> and returns 1 if the
  // condition is fulfilled and 0 otherwise. The syntax of <test> is expected
  // to be "<operator> <number>". Supported operators are "==", "!=", ">=", ">",
  // "<=", and "<". -1 is returned in case the condition could not be parsed.
  // Examples:
  //
  // - testNumber(5, "== 5.") returns 1
  // - testNumber(4, "> 5.") returns 0
  // - testNumber(5, ">> 1") returns -1
 
  // read operator
  TString op;
  TQStringUtils::removeLeadingBlanks(test);
  if (!TQStringUtils::readToken(test, op, "!=<>")) {
    // missing operator
    return -1;
  }
 
  // read number
  TString strNum;
  TQStringUtils::removeLeadingBlanks(test);
  if (!TQStringUtils::readToken(test, strNum, TQStringUtils::getNumerals() + "+-.")) {
    // missing number
    return -1;
  }
  if (!TQStringUtils::isNumber(strNum)) {
    // not a valid number
    return -1;
  }
  double myNum = strNum.Atof();

  // don't expect anything more in input string
  TQStringUtils::removeLeadingBlanks(test);
  if (!test.IsNull()) {
    return -1;
  }
 
  if (op.CompareTo("==") == 0) {
    return (number == myNum) ? 1 : 0;
  } else if (op.CompareTo("!=") == 0) {
    return (number != myNum) ? 1 : 0;
  } else if (op.CompareTo(">=") == 0) {
    return (number >= myNum) ? 1 : 0;
  } else if (op.CompareTo("<=") == 0) {
    return (number <= myNum) ? 1 : 0;
  } else if (op.CompareTo(">") == 0) {
    return (number > myNum) ? 1 : 0;
  } else if (op.CompareTo("<") == 0) {
    return (number < myNum) ? 1 : 0;
  } else {
    // unknown operator
    return -1;
  }
}


//__________________________________________________________________________________|___________

bool TQStringUtils::matchesFilter(const TString& text, TString filter,
                                  const TString& orSep, bool ignoreBlanks) {

  // match with logical OR?
  if (!orSep.IsNull()) {
    /* loop over individual filter */
    while (!filter.IsNull()) {
      TString thisFilter;
      readUpTo(filter, thisFilter, orSep);
      if (ignoreBlanks)
        thisFilter = trim(thisFilter);
      if (matchesFilter(text, thisFilter))
        return true;
      removeLeading(filter, orSep, 1);
    }
    return false;
  } else {
    return ((TQStringUtils::removeLeading(filter, "!", 1) > 0) != matches(text, filter));
  }
}


//__________________________________________________________________________________|___________

bool TQStringUtils::matches(const TString& text, const TString& pattern) {
  // Performs a string match between the input string <text> and the string pattern
  // <pattern> and returns true in case of a match and false otherwise. The string
  // pattern may use wildcards "?" (matching exactly one character) and "*"
  // (matching any string sequence).
  //
  // Examples:
  //
  // - matches("hello", "h?llo") returns true
  // - matches("hallo", "h?llo") returns true
  // - matches("hello", "h*") returns true
  // - matches("hello", "h*a") returns false
 
  if (text.Length() > 0 && pattern.Length() > 0) {
    // direct and "?" match ?
    if (text[0] == pattern[0] || pattern[0] == '?') {
      // TODO: avoid recursion
      return matches(text(1, text.Length()), pattern(1, pattern.Length()));
    }
    // "*" match ?
    if (pattern[0] == '*') {
      // eating leading "*" in pattern ...
      return matches(text, pattern(1, pattern.Length()))
        // ... or matching leading character in text ?
        || matches(text(1, text.Length()), pattern);
    }
    // no match
    return false;
  } else {
    // empty text and/or pattern
    return (text.Length() == 0 && (pattern.CompareTo('*') == 0 || pattern.Length() == 0));
  }
}


//__________________________________________________________________________________|___________
/*
  bool TQStringUtils::matchesExperimental(TString text, TString pattern, TList * wildcardMatches) {

  if (text.Length() > 0 && pattern.Length() > 0) {
  int i = 0;
  while (pattern.Length() > i && (text[i] == pattern[i] || pattern[i] == '?')) {
  if (wildcardMatches && pattern[i] == '?') {
  TString character = text[i];
  wildcardMatches->AddLast(new TObjString(character.Data()));
  }
  i++;
  }
  if (i > 0) {
  return matchesExperimental(text(i, text.Length()),
  pattern(i, pattern.Length()), wildcardMatches);
  } else if (pattern[0] == '*') {
  TList * subWildcardMatches = NULL;
  if (wildcardMatches) {
  subWildcardMatches = new TList();
  subWildcardMatches->SetOwner(true);
  }
  bool eatWildcard = matchesExperimental(text, pattern(1, pattern.Length()), subWildcardMatches);
  bool keepWildcard = false;
  if (!eatWildcard) {
  if (subWildcardMatches) {
  subWildcardMatches->Delete();
  }
  keepWildcard = matchesExperimental(text(1, text.Length()), pattern, subWildcardMatches);
  }
  if (eatWildcard || keepWildcard) {
  if (wildcardMatches) {
  wildcardMatches->AddAll(subWildcardMatches);
  }
  return true;
  } else {
  return false;
  }
  } else {
  return false;
  }
  } else {
  return (text.Length() == 0 && (pattern.CompareTo('*') == 0 || pattern.Length() == 0));
  }
  }
*/

//__________________________________________________________________________________|___________

bool TQStringUtils::hasWildcards(TString text) {
  // Returns true if the input string <text> contains wildcards "?" or "*" and
  // false otherwise.
 
  return text.Contains("*") || text.Contains("?");
}


//__________________________________________________________________________________|___________

int TQStringUtils::compare(const TString& a, const TString& b) {
  // Compares the two input strings <a> and <b> and returns 0 in case both strings
  // are identical. In case string <a> (<b>) is longer or "greater" than string <b>
  // (<a>) 1 (-1) is returned. A string is considered greater than another string
  // if the character code at the left most position with non-matching characters
  // is larger.
  //
  // Examples:
  // - compare("a", "a") returns 0
  // - compare("a", "b") returns -1
  // - compare("ab", "a") returns 1
  // - compare("a", "A") returns 1
 
  // the current character index
  int i = 0;

  // iterate over characters until a mismatch or the end of one string is found
  while (i < a.Length() && i < b.Length()) {
    if (a[i] > b[i]) {
      // string <a> is "greater than" string <b>
      return 1;
    } else if (a[i] < b[i]) {
      // string <b> is "greater than" string <a>
      return -1;
    }
    // move to next character
    i++;
  }

  // one string shorter than the other: test remaining string
  if (a.Length() > b.Length()) {
    // string <a> longer than string <b>
    return 1;
  } else if (a.Length() < b.Length()) {
    // string <b> longer than string <a>
    return -1;
  } else {
    // strings are equal
    return 0;
  }
}


//__________________________________________________________________________________|___________

int TQStringUtils::compareHeads(const TString& str1, const TString& str2) {
  // Compares the heads of the two input strings <str1> and <str2> and returns the
  // length of the longest common string sequence both strings begin with.
 
  // scan strings starting at the strings' heads
  int pos = 0;
  while (str1.Length() > pos && str2.Length() > pos && str1[pos] == str2[pos]) {
    // move current position one character to the right
    pos++;
  }

  return pos;
}


//__________________________________________________________________________________|___________

int TQStringUtils::compareTails(const TString& str1, const TString& str2) {
  // Compares the tails of the two input strings <str1> and <str2> and returns the
  // length of the longest common string sequence both strings end with.

  // scan strings starting at the strings' tails
  int pos = 0;
  while (str1.Length() > pos && str2.Length() > pos
         && str1[str1.Length() - pos - 1] == str2[str2.Length() - pos - 1]) {
    // move current position one character to the left
    pos++;
  }

  return pos;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getMaxCommonHead(TList * strings) {
  // Returns the longest common sequence of all strings (names of objects obtained
  // using GetName()) present in input list <strings>.
 
  if (!strings || strings->GetEntries() == 0) {
    // invalid input
    return "";
  }
 
  TString str;
  int min = -1;

  // iterate over strings in input list
  TQIterator itr(strings);
  while (itr.hasNext()) {
    TString name = itr.readNext()->GetName();
    if (min == -1) {
      // first string in list
      str = name;
      min = str.Length();
    } else {
      min = TMath::Min(min, compareHeads(str, name));
    }
  }

  // remove everything except maximal common sequence
  str = str(0, min);
  return str;
}


//__________________________________________________________________________________|___________

bool TQStringUtils::isEscaped (const TString& text, int pos, const TString& escChar) {
  // Counts the number of occurences of <escChar> in front of <pos> in <text>.
  // Returns true if the value is odd and false if it is even.
  if (pos > text.Length()) return false;
  int other = findLastNotOf(text,escChar,pos-1);  
  return (pos-other+1)%2; 
}



//__________________________________________________________________________________|___________

TString TQStringUtils::removeEscapes(const TString& text, const TString& escapes) {
  // Returns a string similar to the input string <text> but removing escape
  // characters. The list of characters to escape is given by the input string
  // <escapes>.
 
  // the string to return
  TString output;

  int i = -1;
  while (++i < text.Length()) {
    if (escapes.Index(text[i]) == kNPOS) {
      // non escapes character: keep it
      output.Append(text[i]);
    } else if (i + 1 < text.Length() && escapes.Index(text[i + 1]) != kNPOS) {
      // escaped escape character: keep the second
      output.Append(text[++i]);
    }
  }

  return output;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::insertEscapes(const TString& text, const TString& escapes) {
  // Returns a string similar to the input string <text> but inserting escape
  // characters where necessary. The list of characters to escape is given by the
  // input string <escapes> where the first character is used as the escape
  // character to be inserted in the text.
 
  // the string to return
  TString output;

  // iterate over every character in the input string
  int i = -1;
  while (++i < text.Length()) {
    // for escape characters an additional escape character is inserted
    if (escapes.Length() != 0 && escapes.Index(text[i]) != kNPOS) {
      output.Append(escapes[0]);
    }
    output.Append(text[i]);
  }

  return output;
}

//__________________________________________________________________________________|___________

int TQStringUtils::reduceToCommonPrefix(TString& prefix, const TString& other){
  // reduce the first of two strings to the their common prefix
  // return the length of this prefix
  size_t i=0; 
  size_t max = std::min(prefix.Length(),other.Length());
  while(i < max){
    if(prefix[i] == other[i]) i++;
    else break;
  }
  prefix.Remove(i);
  return i;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::concat(TString first, const TString& second) {
  // concatenate two strings
  first.Append(second);
  return first;
}



//__________________________________________________________________________________|___________

size_t TQStringUtils::length(const TString& s){
  return s.Length();
}

//__________________________________________________________________________________|___________

size_t TQStringUtils::length(const std::string& s){
  return s.size();
}  

//__________________________________________________________________________________|___________

TString TQStringUtils::concatNames(TCollection* c, const TString& sep, const TString& quote) {
  // concatenate the names of a vector of TObject-derived objects to a single string using the given separator    
  if(c->GetSize() < 1) return "<empty>"; 
  bool first = true;
  std::stringstream ss;    
  for(auto it:*c){
    if (!first) {
      ss << sep;
    } else {
      first = false;
    }
    if(!it)
      ss << "NULL";
    else {
      if(TQStringUtils::length(quote) == 2){
	ss << quote[0];
      }	
      ss << it->GetName();
      if(TQStringUtils::length(quote) == 2){
	ss << quote[1];
      }	
    }
    }
  return ss.str().c_str();
}  


//__________________________________________________________________________________|___________

TString TQStringUtils::getFirstToken(TString text, const TString& sep, bool /*trim*/, const TString& blocks, const TString& quotes) {
  //FIXME: parameter 'trim' is unused. This might lead to wrong expectations of users!
  // read and return first token in <text>
  TString token;
  TQStringUtils::readUpTo(text, token, sep, blocks, quotes);
  return token; 
}


//__________________________________________________________________________________|___________

TList * TQStringUtils::tokenize(
                                TString text, const TString& sep, bool trim, const TString& blocks, const TString& quotes) {
  // tokenize a string, return the result as a TList

  // the list to return
  TList * result = NULL;

  // split tokens
  TString token;
  bool stop = false;
  while (!stop) {
    // read up to next separator character
    int nRead = TQStringUtils::readUpTo(text, token, sep, blocks, quotes);
    // read separator character
    bool leadingSep = (TQStringUtils::removeLeading(text, sep, 1) > 0);
 
    if (nRead == 0 && !leadingSep) {
      // => thing has been read
      if (!text.IsNull() && result) {
        // invalid string input
        delete result;
        result = NULL;
      }
      stop = true;
      continue;
    } 
 
    if (!result) {
      // this is the first entry: create the list
      result = new TList();
      result->SetOwner(true);
    }
    if (trim) {
      // remove leading and trailing blanks
      token = TQStringUtils::trim(token);
    }
    result->Add(new TObjString(token.Data()));
    token.Clear();
 
    if (leadingSep && text.IsNull()) {
      result->Add(new TObjString());
    }
  }

  return result;
}


//__________________________________________________________________________________|___________

std::vector<TString> TQStringUtils::tokenizeVector(TString text, const TString& sep, bool trim, const TString& blocks, const TString& quotes) {
  
  TString origText = text;
  // the list to return
  std::vector<TString> result;
 
  /* split tokens */
  TString token;
  bool removedSep = false;
  while (TQStringUtils::readUpToText(text, token, sep, blocks, quotes) || !text.IsNull()) {//FIXME: This can easily lead to an infinite loop if readUpTo fails, e.g. due to an unexpected closing bracket/parenthesis!
    if (trim) {
      // remove leading and trailing blanks
      token = TQStringUtils::trim(token);
    }
    result.push_back(token);
    token.Clear();
    
    removedSep = TQStringUtils::removeLeading(text, sep);
    if (!removedSep && !text.IsNull()) {
      //we couldn't readUpTo the seperator and the remaining text is not null -> there must be a syntax error in the line to be parsed
      ERRORfunc("could not split text '%s' at delimiter '%s' (search starting from position %d) while respecting blocks '%s' and quotes '%s' - there seems to be a syntax error in the string, maybe a missing parenthesis?",origText.Data(), sep.Data(), origText.Length()-text.Length(), blocks.Data(), quotes.Data() );
      //return empty vector to signal the error to the calling code
      return std::vector<TString>();
    }
    // remove separator and add another empty entry to the
    // list if the input text ends with a separator
    if (removedSep && text.IsNull()) {
      result.push_back("");
    }
  }

  return result;
}


//__________________________________________________________________________________|___________

bool TQStringUtils::append(TString &text, const TString &appendix, const TString& sep) {
  // Appends input string <appendix> to string <text> adding the separator string
  // <sep> in case <text> is not an empty string before the operation.
 
  bool first = true;

  if (!text.IsNull()) {
    // add separator string
    text.Append(sep);
    first = false;
  }

  // add appendix
  text.Append(appendix);

  // return true if a separator string has been added and false otherwise
  return !first;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::rtrim(const TString& text, const TString& blanks) {
  // Returns <text> without trailing blanks.

  /* find start of trailing blanks */
  int end = text.Length() - 1;
  while (end >= 0 && blanks.Index(text[end]) != kNPOS)
    end--;
  
  /* return the "core" of the string (ex-
   * cluding leading and trailing blanks) */
  return text(0, end + 1);
}


//__________________________________________________________________________________|___________

TString TQStringUtils::trim(const TString& text, const TString& blanks) {
  // Returns <text> without leading and trailing blanks.

  /* find end of leading blanks */
  int start = 0;
  while (start < text.Length() && blanks.Index(text[start]) != kNPOS)
    start++;

  /* find start of trailing blanks */
  int end = text.Length() - 1;
  while (end >= 0 && blanks.Index(text[end]) != kNPOS)
    end--;

  /* return the "core" of the string (ex-
   * cluding leading and trailing blanks) */
  return text(start, end - start + 1);
}


//__________________________________________________________________________________|___________

TString TQStringUtils::repeat(const TString& text, int n, const TString& sep) {
  // Returns the concatenation of <n> times <text> separated by <sep>.
 
  // the string to return
  TString result;
 
  // concatenate the text n times
  for (int i = 0; i < n; i++) {
    result.Append(text);
    if (i < n - 1 && !sep.IsNull()) {
      // add the separator string between elements
      result.Append(sep);
    }
  }

  // return the result
  return result;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::repeatSpaces(int n) {
  // Returns a string with <n> spaces.
 
  return repeat(" ", n);
}


//__________________________________________________________________________________|___________

TString TQStringUtils::repeatTabs(int n) {
  // Returns a string with <n> tabs.
 
  return repeat("\t", n);
}


//__________________________________________________________________________________|___________

int TQStringUtils::getWidth(const TString& text) {
  // retrieve the with of some string in characters
  // NOTE: this width is not identical to the the string length, 
  // since some (unicode) characters and control sequences
  // require different amounts of characters in string length and on screen
  // NOTE: this function is still under developement 
  // and will not work for all symbols

  /* return characters (terminating control sequences) */
  TString returnChars = "mAC";

  /* the width of the text */
  int width = 0;

  /* scan the text and count characters excluding control sequences */
  bool escape = false;
  for (int pos = 0; pos < text.Length(); pos++) {
    if (escape) {
      if (returnChars.Index(text[pos]) != kNPOS)
        escape = false;
    } else {
      if (text[pos] == '\033')
        escape = true;
      else if(text[pos] > 0 || text[pos] == -61 || text[pos] == -62 || text[pos] == -30 || text[pos] == -50 || text[pos] == -54 || text[pos] == -49 || text[pos] == -31 || text[pos] == -53){
        width++;
      } 
    }
  }
 
  /* return the width */
  return width;
}

//__________________________________________________________________________________|___________

int TQStringUtils::getCharIndex(const TString& text, int index) {
  // return the index of a given character in a string
  // this takes into account control sequences and unicode characters
  // please see TQStringUtils::getWidth for details

  /* return characters (terminating control sequences) */
  TString returnChars = "mAC";
 
  /* the width of the text */
  int width = 0;
 
  /* scan the text and count characters excluding control sequences */
  bool escape = false;
  for (int pos = 0; pos < text.Length(); pos++) {
    if(width == index) return pos;
    if (escape) {
      if (returnChars.Index(text[pos]) != kNPOS)
        escape = false;
    } else {
      if (text[pos] == '\033')
        escape = true;
      else if(text[pos] > 0 || text[pos] == -61 || text[pos] == -62 || text[pos] == -30 || text[pos] == -50 || text[pos] == -54 || text[pos] == -49 || text[pos] == -31 || text[pos] == -53){
        width++;
      } 
    }
  }
 
  /* return the width */
  return kNPOS;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::fixedWidth(const TString& text, int width, const char* options) {
  // expand or shrink the given string to a given width, returning the result
  // alignment may be specified as "r", "c" or "l" as the last argument
  TString opts(options);
  return TQStringUtils::fixedWidth(text,width,opts);
}

//__________________________________________________________________________________|___________

TString TQStringUtils::fixedWidth(const char* text, int width, const char* options){
  // expand or shrink the given string to a given width, returning the result
  // alignment may be specified as "r", "c" or "l" as the last argument
  TString opts(options);
  TString newText(text);
  return TQStringUtils::fixedWidth(newText,width,opts);
}

//__________________________________________________________________________________|___________

TString TQStringUtils::fixedWidth(const char* text, int width, const TString& options){
  // expand or shrink the given string to a given width, returning the result
  // alignment may be specified as "r", "c" or "l" as the last argument
  TString newText(text);
  return TQStringUtils::fixedWidth(newText,width,options);
}

//__________________________________________________________________________________|___________


bool TQStringUtils::readCharacter(const TString& text, int& index, int& count){
  /* scan the text and count characters excluding control sequences */
  if (text[index] == '\033'){
    while(index < text.Length()){
      index++;
      if(TQStringUtils::controlReturnCharacters.Index(text[index]) != kNPOS){
        index++;
        return true;
      }
    }
    return false;
  }
  index++;
  count++;
  while(index < text.Length()){
    if(text[index] > 0 
       || ((-61 >= text[index]) && (text[index] >= -62)) 
       || ((-49 >= text[index]) && (text[index] >= -54)) 
       || ((-30 >= text[index]) && (text[index] >= -32)) ){
      return true;
    }
    index++;
  }
  return true;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::fixedWidth(const TString& text, int width, const TString& options) {
  // expand or shrink the given string to a given width, returning the result
  // alignment may be specified as "r", "c" or "l" as the last argument
  int lastidx = TQStringUtils::getCharIndex(text,width+1);
  if((lastidx < 1) || (lastidx >= text.Length())) lastidx = TQStringUtils::getCharIndex(text,width);
  else lastidx--;
 
  /* cut text if it is too long, TODO: handle control characters correctly */
  if ((lastidx >= width) && (lastidx < text.Length())) {
    std::stringstream s;
    bool showDots = options.Contains(".") && (width > 6);
    int reducedWidth = showDots ? (width-3) : width;
    int len = 0;
    int index = 0;
    int lastIndex = 0;
    int lastLen = 0;
    while(index < text.Length()){
      if(!TQStringUtils::readCharacter(text,index,len)) break;;
      if((len == lastLen) || (len < reducedWidth+1)) s << text(lastIndex,index-lastIndex);
      // std::cout << "len = " << len << ", index=" << index << ", lastLen= " << lastLen << ", lastIndex = " << lastIndex << ", substr='" << text(lastIndex,index-lastIndex) << "'" << std::endl;
      lastLen = len;
      lastIndex = index;
    }
    TString retval(s.str().c_str());
    if(showDots) retval.Append("...");
    return retval;
  } else {
    int actualWidth = TQStringUtils::getWidth(text);
    int nSpaces = std::max(width-actualWidth,0);
 
    if(options.Contains("r")){
      return TString::Format("%*s%s", nSpaces, "", text.Data());
    } else if(options.Contains("c")){
      return TString::Format("%*s%s%*s", (int)(0.5*(nSpaces+1)), "", text.Data(), (int)(0.5*(nSpaces)), "");
    } else {
      return TString::Format("%s%*s", text.Data(), nSpaces, "");
    }
  }
}

//__________________________________________________________________________________|___________

TString TQStringUtils::fixedWidth(const TString& text, int width, bool rightJustified) {
  // expand or shrink the given string to a given width, returning the result
  // returns right aligned text if rightJustified is true, otherwise left aligned
  return TQStringUtils::fixedWidth(text,width,rightJustified ? "r" : "l");
}

//__________________________________________________________________________________|___________

TString TQStringUtils::fixedWidth(const char* text, int width, bool rightJustified) {
  // expand or shrink the given string to a given width, returning the result
  // returns right aligned text if rightJustified is true, otherwise left aligned
  TString newText(text);
  return TQStringUtils::fixedWidth(newText,width,rightJustified ? "r" : "l");
}

//__________________________________________________________________________________|___________

TString TQStringUtils::maxLength(const TString& text, int maxLength, const TString& appendix) {
  // trim a string to a maximum length, including the appendix if shortened
  if (text.Length() > maxLength) {
    TString str = text(0, maxLength - appendix.Length());
    str.Append(appendix);
    return str;
  } else {
    return text;
  }
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getThousandsSeparators(int value, const TString& sep) {
  /* convert integer to string */
  return TQStringUtils::getThousandsSeparators(TString::Format("%d", value), sep);
}

//__________________________________________________________________________________|___________

TString TQStringUtils::getThousandsSeparators(TString text, const TString& sep) {
  /* compile result including thousands separators */
  TString result;
  while (text.Length() > 3) {
    result.Prepend(text(text.Length() - 3, 3));
    result.Prepend(sep);
    text.Remove((size_t)(text.Length() - 3), (size_t)3);
  }

  /* prepend remaining text */
  result.Prepend(text);

  /* return the result */
  return result;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getThousandsSeparators(Long64_t value, const TString& sep) {
  /* convert long to string */
  return TQStringUtils::getThousandsSeparators(TString::LLtoa(value,10), sep);
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getIndentationLines(int indent) {
  // creates indentation lines ("||||-") for tree-style console printing

  /* the indentation string */
  TString lines;

  /* deepest indentation */
  if (indent > 0)
    lines = "|-";

  /* other identation levels */
  lines.Prepend(repeat("| ", indent - 1));

  /* return the string */
  return lines;
}


//__________________________________________________________________________________|___________

TString TQStringUtils::formatSignificantDigits(double val, int nDigits) {
  // format a number to a string with the given number of significant digits

  TString retval;
  if (nDigits < 0) {
    retval = TString::Format("%.*f", -nDigits, val);
  } else if (nDigits > 0) {
    /* keep track of sign */
    double sign = 1.;
    if (val < 0.) {
      val = TMath::Abs(val);
      sign = -1.;
    }
 
    /* number of digits before decimal separator */
    int n = TMath::FloorNint(TMath::Log10(val)) + 1;

    /* if the n = 1 set n = 0*/
    if (n == 1)
      n = 0;
 
    /* cut off the number of digits after decimal separator */
    retval =  TString::Format("%.*f", TMath::Max(nDigits - n, 0), sign * val);

  } else {
    return retval = "";
  }
  if(retval.Contains(".")){
    if(TQStringUtils::removeTrailing(retval,"0") > 0){
      TQStringUtils::removeTrailing(retval,".");
    }
  }
  return retval;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::formatValueErrorPDG(double val, double err, int expval, const TString& format){
  // implementing the PDG rounding guidelines
  //   http://pdg.lbl.gov/2010/reviews/rpp2010-rev-rpp-intro.pdf

  if(err == 0){
    return TString::Format("%g",val);
  }
  
  int exponent = 0;
  double val_shifted = val;
  double err_shifted = err;
  while(err_shifted <= 100){
    val_shifted *= 10;
    err_shifted *= 10;
    exponent -=1;
  }
  while(err_shifted > 1000){
    val_shifted /= 10;
    err_shifted /= 10;
    exponent +=1;
  }
  int firstdigits(err_shifted);
  int ndigits = 0;
  double int_val,int_err;
  
  if(firstdigits <= 354){
    int_val = floor(0.5+0.1*val_shifted);
    int_err = floor(0.5+0.1*err_shifted);
    ndigits = 1;
    exponent += 1;
  } else if(firstdigits <= 949){
    int_val = floor(0.5+0.01*val_shifted);
    int_err = floor(0.5+0.01*err_shifted);
    ndigits = 1;
    exponent += 2;
  } else {
    int_val = floor(0.5+0.01*val_shifted);
    int_err = 10;
    ndigits = 2;
    exponent += 2;
  }
  
  double shift = pow(10,exponent-expval);
  ndigits = std::max(0,ndigits+expval-exponent-1);

  //  std::cout << int_val << " +/- " << int_err << " * 10e" << exponent << " " << ndigits << std::endl;
  
  double val_final = shift*int_val;
  double err_final = shift*int_err;
  
  std::stringstream ss;
  if(format == "latex") ss << "\\ensuremath{";
  if(expval != 0) ss << "(";
  ss << "%." << ndigits << "f";
  if(format == "latex") ss << " \\pm ";
  else if(format == "html") ss << "&pm;";
  else ss << " +/- ";
  ss << "%." << ndigits << "f";
  if(expval != 0){
    ss << ")";
    if(format == "latex") ss << " \\times 10^{" << expval << "}";
    else if(format == "html") ss << "&times; <superscript>" << expval << "</superscript>";
    else ss << "*10^" << expval;
  }
  if(format == "latex") ss << "}";
  return TString::Format(ss.str().c_str(),val_final,err_final);
}


//__________________________________________________________________________________|___________

TString TQStringUtils::formatValueError(double val, double err, const TString& format){
  // format a number and uncertainty to a string in the given format
  if(!TQUtils::isNum(err) || !TQUtils::isNum(val)){
    return TString::Format(format,val,err);
  }
  int nSigDigitsErr = std::min(ceil(-log10(err)),0.);
  int firstdigit = floor(err * pow(10,ceil(-log10(err))));
  if(firstdigit == 1){
    nSigDigitsErr++;
  }
  double nDiff = ceil(log10(val/err));
  double valRounded = TQUtils::roundAuto(val,nDiff+nSigDigitsErr);
  double errRounded = TQUtils::roundAuto(err,nSigDigitsErr);
  return TString::Format(format,valRounded,errRounded);
}


//__________________________________________________________________________________|___________

bool TQStringUtils::printDiffOfLists(TList * l1, TList * l2, bool ignoreMatches) {
  // Performs a 'diff' of the two input lists (instances of TList) <l1> and <l2>
  // based on the result of the Compare(...) methods on contained objects, prints
  // the result on std::cout, and returns true if both lists fully match or false
  // otherwise. The print-out is a list of all elements present in either of the two
  // lists with matching elements (elements with the same name and present in both
  // lists) being printed side-by-side. If <ignoreMatches> == true (default is false)
  // only elements present in one list are shown.

  // expect valid input lists
  if (!l1 || !l2) {
    return false;
  }

  // the number of entries in each list
  int n1 = 0;
  int n2 = 0;

  // sort the list
  if (l1) {
    n1 = l1->GetEntries();
    l1->Sort();
  }
  if (l2) {
    n2 = l2->GetEntries();
    l2->Sort();
  }

  // determine the maximum string length to print a pretty list
  int max1 = 0;
  int max2 = 0;
  TQIterator itr1(l1);
  while (itr1.hasNext()) {
    max1 = TMath::Max(max1, TString(itr1.readNext()->GetName()).Length());
  }
  TQIterator itr2(l2);
  while (itr2.hasNext()) {
    max2 = TMath::Max(max2, TString(itr2.readNext()->GetName()).Length());
  }

  // do both lists fully match?
  bool match = true;

  // print the headline
  TString headline = TString::Format("%-*s %-*s", max1, "List 1", max2, "List 2");
  std::cout << TQStringUtils::makeBoldWhite(headline).Data() << std::endl;
  std::cout << TQStringUtils::makeBoldWhite(
                                       TQStringUtils::repeat("=", headline.Length())).Data() << std::endl;

  // list indices
  int i1 = 0;
  int i2 = 0;

  // process the two lists by incrementing list indices in a synchronized way
  while (i1 < n1 || i2 < n2) {

    // get the two objects at the current list indices
    // (use NULL pointer in case a list has reached its end)
    TObject * obj1 = (i1 < n1) ? l1->At(i1) : NULL;
    TObject * obj2 = (i2 < n2) ? l2->At(i2) : NULL;

    // compare the two current objects
    int compare = -1;
    if (obj1 && obj2) {
      // Compare objects based on their Compare(...) method (usually compares names)
      compare = obj1->Compare(obj2);
      // go to next element in list 1 if list 2 is ahead or both are at same level
      i1 += (compare <= 0) ? 1 : 0;
      // go to next element in list 2 if list 1 is ahead or both are at same level
      i2 += (compare >= 0) ? 1 : 0;
    } else if (obj1) {
      // list 2 has reached its end
      compare = -1;
      i1++;
    } else if (obj2) {
      // list 1 has reached its end
      compare = 1;
      i2++;
    } else {
      // something went totally wrong since both objects are invalid
      return false;
    }

    if (compare < 0) {
      // element in list 1 not present in list 2
      match = false;
      std::cout << TString::Format("%-*s %-*s",
                              max1, obj1->GetName(), max2, "--").Data() << std::endl;
    } else if (compare > 0) {
      // element in list 2 not present in list 1
      match = false;
      std::cout << TString::Format("%-*s %-*s",
                              max1, "--", max2, obj2->GetName()).Data() << std::endl;
    } else if (!ignoreMatches) {
      // matching elements
      std::cout << TString::Format("%-*s %-*s",
                              max1, obj1->GetName(), max2, obj2->GetName()).Data() << std::endl;
    }
  }

  // return true if no mismatch was found and false otherwise
  return match;
}


//__________________________________________________________________________________|___________

int TQStringUtils::removeLeading(TString &text, TString characters, int nMax) {
  // Removes from the head of string <text> all characters listed in <characters>
  // (but not more than <nMax>) and returns the number of characters that have been
  // removed.

  // determine number of leading characters at head of <text> listed in <characters>
  int pos = countLeading(text, characters, nMax);
  if(pos < 1) return 0;

  // remove these characters
  text.Remove(0, pos);

  // return the number of characters removed
  return pos;
}


//__________________________________________________________________________________|___________

int TQStringUtils::removeTrailing(TString &text, TString characters, int nMax) {
  // Removes from the tail of string <text> all characters listed in <characters>
  // (but not more than <nMax>) and returns the number of characters that have been
  // removed.

  // determine number of leading characters at head of <text> listed in <characters>
  int nChar = countTrailing(text, characters, nMax);
  if(nChar < 1) return 0;

  // remove trailing characters
  text.Remove(text.Length() - nChar, text.Length());

  // return the number of characters removed
  return nChar;
}


//__________________________________________________________________________________|___________

bool TQStringUtils::removeLeadingText(TString &text, TString prefix) {
  // Removes one occurence of string sequence <prefix> from head of string <text>
  // if present and returns true in this case and false otherwise.
 
  if (text.BeginsWith(prefix)) {
    // remove sequence from head of string
    text.Remove(0, prefix.Length());
    return true;
  } else {
    // sequence not present at head of string
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQStringUtils::removeTrailingText(TString &text, TString appendix) {
  // Removes one occurence of string sequence <appendix> from tail of string <text>
  // if present and returns true in this case and false otherwise.

  if (text.EndsWith(appendix)) {
    // remove sequence from tail of string
    text.Remove(text.Length() - appendix.Length(), appendix.Length());
    return true;
  } else {
    // sequence not present at tail of string
    return false;
  }
}

//__________________________________________________________________________________|___________

int TQStringUtils::removeAll(TString &text, const TString& chars, TString::ECaseCompare comp, int max) {
  // Removes up to 'max' occurences of characters contained in chars from text
  // starting at the beginning of text. 'max' is ignored if it is negative.
  int pos = 0;
  int nMatches = 0;
  while (pos<text.Length() && (max<0 || nMatches<max) ) {
    if ( chars.Contains(text(pos), comp) ) { //the character in question is contained in the list of characters to be removed
      text.Remove(pos,1); //do not increment position as all subsequent characters are shifted due to the removal!
      ++nMatches;
    } else {
      ++pos;
    }
    
  }
  return nMatches;
}

//__________________________________________________________________________________|___________

int TQStringUtils::ensureTrailingText(TString &text, const TString& appendix) {
  // ensure that a string ends with a given character sequence
  int tmax = text.Length() -1;
  int amax = appendix.Length() -1;
  int pos = 0;
  while(pos <= amax && pos <= tmax){
    if(appendix[amax-pos] == text[tmax-pos])
      pos++;
    else {
      amax--;
      pos = 0;
    }
  }
  text.Append(appendix(pos,appendix.Length()));
  return appendix.Length()-pos;
}

//__________________________________________________________________________________|___________

int TQStringUtils::ensureLeadingText(TString &text, const TString& prefix) {
  // ensure that a string starts with a given character sequence
  int offset = 0;
  if(prefix.Length() > text.Length()) offset = prefix.Length() - text.Length();
  int pos = prefix.Length() -1;
  while(pos-offset >= 0 && offset < prefix.Length()){
    if(text[pos-offset] == prefix[pos]){
      pos--;
    } else {
      offset++;
      pos=prefix.Length() -1 ;
    }
  }
  text.Prepend(prefix(0,offset));
  return offset;
}


//__________________________________________________________________________________|___________

int TQStringUtils::removeLeadingBlanks(TString &text, int nMax) {
  // Removes leading blanks from head of string <text> (but not more than <nMax>)
  // and returns the number of blanks that have been removed. Characters are
  // recognized as blanks if listed in TQStringUtils::getBlanks().
 
  return TQStringUtils::removeLeading(text, TQStringUtils::getBlanks(), nMax);
}


//__________________________________________________________________________________|___________

int TQStringUtils::removeTrailingBlanks(TString &text, int nMax) {
  // Removes trailing blanks from tail of string <text> (but not more than <nMax>)
  // and returns the number of blanks that have been removed. Characters are
  // recognized as blanks if listed in TQStringUtils::getBlanks().

  return TQStringUtils::removeTrailing(text, TQStringUtils::getBlanks(), nMax);
}


//__________________________________________________________________________________|___________

int TQStringUtils::countLeading(const TString& text, const TString& characters, int nMax) {
  // Count and return the number of characters listed in <characters> at head of
  // string <text>.
 
  // scan head of string <text> for all occurences of characters listed in
  // <characters> and find position of first character not listed in <characters>
  int pos = 0;
  while (pos < text.Length() && characters.Index(text[pos]) != kNPOS
         && (nMax < 0 || pos < nMax)) {
    pos++;
  }

  return pos;
}

//__________________________________________________________________________________|___________

int TQStringUtils::countTrailing(const TString& text, const TString& characters, int nMax) {
  // Count and return the number of characters listed in <characters> at tail of
  // string <text>.

  // scan tail of string <text> for all occurences of characters listed in
  // <characters> and find position of last character not listed in <characters>
  int pos = text.Length() - 1;
  while (pos >= 0 && characters.Index(text[pos]) != kNPOS
         && (nMax < 0 || pos >= (text.Length() - nMax))) {
    pos--;
  }

  return text.Length() - 1 - pos;
}


//__________________________________________________________________________________|___________

int TQStringUtils::countText(const TString& haystack, const TString& needle) {
  // count the occurences of needle in haystack
  if(needle.Length() > haystack.Length() || needle.IsNull() || haystack.IsNull()) return 0;
  int num = 0;
  int hpos = 0;
  int npos = 0;
  while (hpos < haystack.Length()){
    if(needle[npos] == haystack[hpos]){
      if(npos+1 == needle.Length()){
        npos = 0;
        num++;
      } else {
        npos++;
      }
    } else {
      npos = 0; //reset needle position if the current character did not match
    }
    hpos++;
  }

  return num;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::cutUnit(TString &label) {
  // remove the unit "[...]" from some label
  // returns the unit

  /* use a std string to extract position of unit */
  std::string input = label.Data();
  std::size_t start = input.find_last_of("[");
  std::size_t end = input.find_last_of("]");
 
  if (start != std::string::npos && end != std::string::npos && end > start) {

    /* extract and remove the unit and it's appendix */
    TString unit = label(start + 1, end - start - 1);
    TString appendix = label(end + 1, label.Length());
    label.Remove(start, label.Length());

    /* compile label without unit */
    TQStringUtils::removeTrailingBlanks(label);
    label.Append(appendix);

    /* return the unit */
    return unit;
  } else {
    /* couldn't find a unit */
    return "";
  }
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getUnit(TString label) {
  // retrieve the unit "[...]" from some label
  return TQStringUtils::cutUnit(label);
}


//__________________________________________________________________________________|___________

TString TQStringUtils::getWithoutUnit(TString label) {
  // remove the unit "[...]" from some label
  // returns the result
  TQStringUtils::cutUnit(label);
  return label;
}


//__________________________________________________________________________________|___________

int TQStringUtils::readBlanks(TString & in) {
  // removes leading blanks from a string
  TString dummy;

  return readToken(in, dummy, getBlanks());
}


//__________________________________________________________________________________|___________

int TQStringUtils::readBlanksAndNewlines(TString & in) {
  // removes leading blanks and newlines from a string
  int dummy;
  return readBlanksAndNewlines(in, dummy);
}


//__________________________________________________________________________________|___________

int TQStringUtils::readBlanksAndNewlines(TString & in, int &nNewlines) {
  // removes leading blanks from a string, counting removed newlines
  TString dummy;
  int n = 0;
  bool done = false;
  while (!done) {
    dummy.Clear();
    n += readToken(in, dummy, getBlanks());
    int n2 = readToken(in, dummy, "\n");
    nNewlines += n2;
    n += n2;
    done = dummy.IsNull();
  }
  return n;
}


//__________________________________________________________________________________|___________

int TQStringUtils::readToken(TString & in, TString & out, const TString& characters, int nMax) {
  // Counts the number of leading characters at head of string <in> listed in
  // <characters>, moves the corresponding sequence from head of string <in> to
  // tail of string <out>, and returns the number of characters that have been
  // moved. If <nMax> is non-negative at most <nMax> characters are moved. 
 
  // determine number of leading characters at head of <in> listed in <characters>
  int pos = countLeading(in, characters, nMax);

  // move characters from input to output string
  out.Append(in(0, pos));
  in.Remove(0, pos);

  // return the number of characters read
  return pos;
}


//__________________________________________________________________________________|___________

int TQStringUtils::readTokenAndBlock(TString & in,
                                     TString & out, const TString& characters, const TString& blocks) {
  // read a token consisting of the given characters and a subsequent block

  // the number of characters read from string <in>
  int n = 0;

  bool stop = false;
  while (!stop) {
    // read token
    int nToken = readToken(in, out, characters);
    // read block
    int nBlock = readBlock(in, out, blocks, "", true);
    // keep track of the number of characters read
    n += nToken + nBlock;
    // stop if nothing to read is left
    stop = (nToken == 0 && nBlock == 0);
  }

  // return the number of characters read
  return n;
}


//__________________________________________________________________________________|___________

int TQStringUtils::readBlock(
                             TString & in,
                             TString & out,
                             const TString& blocks,
                             const TString& quotes,
                             bool keepEnclosed,
                             int ignoreUnexpectedClosingQuotes) {
  // read a parenthesis enclosed block from a string

  /* stop if no valid block or quote definition was given */
  if (blocks.Length() < 2 || (blocks.Length() % 2) != 0 || (quotes.Length() % 2) != 0)
    return 0;

  /* stop if input string is empty */
  if (in.Length() == 0)
    return 0;

  /* the stacks keeping track of inner blocks and qutoes */
  std::vector<int> * blockStack = new std::vector<int>();
  std::vector<int> * quoteStack = new std::vector<int>();

  /* the number of defined inner block types and quote types */
  int nSubBlocks = blocks.Length() / 2;
  int nQuoteTypes = quotes.Length() / 2;

  if (ignoreUnexpectedClosingQuotes < 0) {
    ignoreUnexpectedClosingQuotes = nQuoteTypes;
  }

  /* true if an error occured (closing
   * inner block with wasn't opened) */
  bool error = false;
  bool found = false;

  /* the position in <in> string */
  int pos = 0;

  do {

    /* >> closing quote */
    if (quoteStack->size() > 0) {
      if (in[pos] == quotes[quoteStack->back()]) {
        quoteStack->pop_back();
      }
      /* go to next character */
      continue;
    }
 
    /* >> opening quote? */
    found = false;
    for (int i = 0; i < (pos > 0 ? nQuoteTypes : 0) && !found && !error; i++) {
      /* block start character? */
      if (in[pos] == quotes[2*i]) {
        quoteStack->push_back(2*i + 1);
        /* go to next character */
        found = true;
        /* block end character? */
      } else if (i < ignoreUnexpectedClosingQuotes && in[pos] == quotes[2*i + 1]) {
        error = true;
      }
    }
    if (found || error)
      continue;

    /* >> closing inner block? */
    if (blockStack->size() > 0 && in[pos] == blocks[blockStack->back()]) {
      blockStack->pop_back();
      /* go to next character */
      continue;
    }

    /* >> opening inner block? */
    found = false;
    for (int i = 0; i < (pos > 0 ? nSubBlocks : 1) && !found && !error; i++) {
      /* block start character? */
      if (in[pos] == blocks[2*i]) {
        blockStack->push_back(2*i + 1);
        /* go to next character */
        found = true;
        /* block end character? */
      } else if (in[pos] == blocks[2*i + 1]) {
        error = true;
      }
    }

  } while (blockStack->size() > 0 && ++pos < in.Length() && !error);
 
  if (blockStack->size() > 0 || quoteStack->size() > 0 || error)
    pos = 0;

  /* delete the stacks */
  delete blockStack;
  delete quoteStack;

  if (pos > 0) {
    /* move the block contents from in
     * to out (excluding the brackets) */
    out.Append(in(keepEnclosed ? 0 : 1, pos - (keepEnclosed ? -1 : 1)));
    in.Remove(0, pos + 1);
    /* return the number of characters read */
    return pos + 1;
  } else {
    return 0;
  }
}


//__________________________________________________________________________________|___________

int TQStringUtils::readUpToText(TString & in, TString & out,
                                const TString& upTo, const TString& blocks, const TString& quotes, int ignoreUnexpectedClosingQuotes) {
  // read a string up to occurence of some other string

  if (upTo.IsNull()) {
    return readUpTo(in, out, upTo, blocks, quotes, ignoreUnexpectedClosingQuotes);
  }
 
  int N = 0;
  bool stop = false;
  while (!stop && !in.BeginsWith(upTo)) {
    int n = readToken(in, out, upTo[0], 1);
    n += readUpTo(in, out, upTo[0], blocks, quotes, ignoreUnexpectedClosingQuotes);
    N += n;
    stop = (n == 0);
  }
 
  return N;
}


//__________________________________________________________________________________|___________

int TQStringUtils::readUpTo(TString & in, TString & out,
                            const TString& upTo, const TString& blocks, const TString& quotes, int ignoreUnexpectedClosingQuotes) {
  // read a string up to occurence of the first of a set of characters

  /* stop if no valid block or quote definition was given */
  if ((blocks.Length() % 2) != 0 || (quotes.Length() % 2) != 0)
    return 0;

  /* stop if input string is empty */
  if (in.Length() == 0)
    return 0;

  /* the stacks keeping track of inner blocks and qutoes */
  std::vector<int> * blockStack = new std::vector<int>();
  std::vector<int> * quoteStack = new std::vector<int>();

  /* the number of defined inner block types and quote types */
  int nSubBlocks = blocks.Length() / 2;
  int nQuoteTypes = quotes.Length() / 2;

  if (ignoreUnexpectedClosingQuotes < 0) {
    ignoreUnexpectedClosingQuotes = nQuoteTypes;
  }

  /* true if an error occured (closing
   * inner block with wasn't opened) */
  bool error = false;
  bool found = false;

  /* the position in <in> string */
  int pos = 0;

  do {

    /* >> closing quote */
    if (quoteStack->size() > 0) {
      if (in[pos] == quotes[quoteStack->back()]) {
        quoteStack->pop_back();
      }
      /* go to next character */
      continue;
    }

    /* >> opening quote? */
    found = false;
    for (int i = 0; i < nQuoteTypes && !found && !error; i++) {
      /* opening quote character? */
      if (in[pos] == quotes[2*i]) {
        quoteStack->push_back(2*i + 1);
        /* go to next character */
        found = true;
        /* unexpected closing quote character? */
      } else if (i < ignoreUnexpectedClosingQuotes && in[pos] == quotes[2*i + 1]) {
        error = true;
      }
    }
    if (found || error)
      continue;

    /* >> closing inner block? */
    if (blockStack->size() > 0 && in[pos] == blocks[blockStack->back()]) {
      blockStack->pop_back();
      /* go to next character */
      continue;
    }

    /* >> opening inner block? */
    found = false;
    for (int i = 0; i < nSubBlocks && !found && !error; i++) {
      /* block start character? */
      if (in[pos] == blocks[2*i]) {
        blockStack->push_back(2*i + 1);
        /* go to next character */
        found = true;
        /* block end character? */
      } else if (in[pos] == blocks[2*i + 1]) {
        error = true;
      }
    }

  } while (!(blockStack->size() == 0 && quoteStack->size() == 0
             && upTo.Index(in[pos]) != kNPOS) && ++pos < in.Length() && !error);
 
  if (blockStack->size() > 0 || quoteStack->size() > 0 || error)
    pos = 0;

  /* delete the stacks */
  delete blockStack;
  delete quoteStack;

  if (pos > 0) {
    /* move the block contents from in
     * to out (excluding the brackets) */
    out.Append(in(0, pos));
    in.Remove(0, pos);
    /* return the number of characters read */
    return pos;
  } else {
    return 0;
  }
}


//__________________________________________________________________________________|___________

TString TQStringUtils::expand(TString in, const TString& characters, const TString& blocks, bool embrace) {

  /* the final expansion */
  TString out;

  while (!in.IsNull()) {

    /* extract one expansion token */
    TString token;
    readTokenAndBlock(in, token, characters, blocks);

    /* read the expansion prefix */
    TString prefix;
    readToken(token, prefix, characters);

    /* read the first expansion block */
    TString block;
    readBlock(token, block, blocks, "");

    /* read expansion suffix */
    TString suffix;
    readTokenAndBlock(token, suffix, characters, blocks);

    if (embrace)
      out.Append("(");

    if (block.Length() > 0) {
      /* expand the (sub)tokens */
      TString expBlock = expand(block, characters, blocks, embrace);

      /* loop over (sub)tokens in the expansion block */
      while (!expBlock.IsNull()) {
 
        /* extract (sub)token */
        TString subToken;
        readTokenAndBlock(expBlock, subToken, characters, blocks);
 
        /* the (sub)expansion suffix */
        TString subSuffix;
        readUpTo(expBlock, subSuffix, characters + blocks);
 
        out.Append(prefix);
        out.Append(subToken);
        out.Append(suffix);
        out.Append(subSuffix);
      }
    } else {
      out.Append(prefix);
      out.Append(suffix);
    }

    if (embrace)
      out.Append(")");

    /* the expansion suffix */
    suffix.Clear();
    readUpTo(in, suffix, characters + blocks);
    out.Append(suffix);
  }

  return out;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::replace(TString str, const TString& needle, const TString& newNeedle){
  str.ReplaceAll(needle,newNeedle);
  return str;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::replace(TString str, const char* needle, const TString& newNeedle){
  str.ReplaceAll(needle,newNeedle);
  return str;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::replace(TString str, const TString& needle, const char* newNeedle){
  str.ReplaceAll(needle,newNeedle);
  return str;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::replace(TString str, const char* needle, const char* newNeedle){
  str.ReplaceAll(needle,newNeedle);
  return str;
}

std::vector<TString> TQStringUtils::extractMatches(const TString& input, const TString& regexp){
  std::vector<TString> retVec;
  TPRegexp reg(regexp);  
  //TString's regexp matching is somewhat annoying (working from the TPRegexp side is even worse)
  //we can't obtain offset and substring at the same time (but need to use offset+1 to match the next part...)
  Ssiz_t nextPos = input.Index(reg);
  while (nextPos>=0) {
    retVec.push_back(TString( input(reg,nextPos) ));
    nextPos = input.Index(reg,nextPos+1); //find next occurence
  }
  return retVec;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::readPrefix(TString &in, const TString& delim, const TString& defaultPrefix) {
  // read a string up to the occurence of some delimiter

  /* find the delimiter (TODO: use TQStringUtils::readUpTo(...) instead */
  Ssiz_t pos = in.Index(delim);

  if (pos == kNPOS) {
    return defaultPrefix;
  } else {
    TString prefix = in(0, pos);
    in.Remove(0, pos + delim.Length());
    return prefix;
  }
}

//__________________________________________________________________________________|___________
 
bool TQStringUtils::writeTextToFile(TList * text, const TString& filename) {
  // Writes the lines of strings in list <text> (names of objects obtained using
  // GetName()) to external file <filename> or to std::cout in case <filename> is
  // an empty string and return true in case of success and false otherwise.
 
  // stop if text is invalid
  if (!text) {
    return false;
  }

  // open file
  std::ofstream * file = NULL;
  if (!filename.IsNull()) {
    file = new std::ofstream(filename.Data());
    if (file->fail()) {
      // failed to open/create file
      delete file;
      return false;
    }
  }

  // iterate over lines in text and write to file or std output
  TQIterator itr(text);
  while (itr.hasNext()) {
    TString str = itr.readNext()->GetName();
    if (file) {
      // write to external file
      *file << str.Data() << std::endl;
    } else {
      // write to std::cout
      std::cout << str.Data() << std::endl;
    }
  }

  if (file) {
    // close file
    file->close();
    delete file;
  }
 
  // apparently no error occured
  return true;
}

//__________________________________________________________________________________|___________
TString TQStringUtils::readFile(const TString& filename, const TString& blacklist, const TString& replace){
  // Read a text file to a single string, ignoring all blacklisted characters
  // if replacements are given, characters with odd indices are replaced by their successor
  std::ifstream in(filename.Data(), std::ios::in | std::ios::binary);
  std::stringstream s;
  if(replace.Length() % 2 == 1) return "";
  char c;
  bool lastWasSpace = true;
  while(in.get(c) && in.good()){
    size_t irep = replace.Index(c);
    if(irep < (size_t)replace.Length() && (irep % 2 == 0)){
      c = replace[irep+1];
    } 
    if(blacklist.Contains(c) || (c==' ' && lastWasSpace)) continue;
    lastWasSpace = (c == ' ');
    s << c;
  }
  return TString(s.str().c_str());
}

//__________________________________________________________________________________|___________
TString TQStringUtils::readSVGtoDataURI(const TString& filename){
  // read an SVG file, returning a data URI string
  TString content = TQStringUtils::trim(TQStringUtils::readFile(filename, "", "\"'\n \t "));
  content.Prepend("data:image/svg+xml;utf8,");
  return content;
}

//__________________________________________________________________________________|___________
std::vector<TString>* TQStringUtils::readFileLines(const TString& filename, size_t len, bool allowComments){
  // Read a text file, line by line, and return the contents as a std::vector
  std::vector<TString>* lines = new std::vector<TString>();
  if(readFileLines(lines,filename,len,allowComments) > 0){
    return lines;
  }
  delete lines;
  return NULL;
}

//__________________________________________________________________________________|___________
size_t TQStringUtils::readFileLines(std::vector<TString>* lines, const TString& filename, size_t len, bool allowComments){
  // Read a text file, line by line, and push the contents into a std::vector
  std::ifstream infilestream(filename.Data(), std::ios::in);
  if(!infilestream.is_open())
    return 0;
  char* tmp = (char*)malloc(len*sizeof(char));
  size_t linecount = 0;
  while (!infilestream.eof()){
    infilestream.getline(tmp, len);
    TString str(tmp);
    while(!infilestream.eof() && (!infilestream.good() || TQStringUtils::removeTrailing(str,"\\") == 1)){
      infilestream.clear();
      infilestream.getline(tmp, len);
      str.Append(tmp);
    }
    DEBUGfunc("reading line '%s'",str.Data());
    TString resstr;
    if(allowComments){
      TQStringUtils::readUpTo(str,resstr,'#');
      while(resstr.EndsWith("\\")){
        TQStringUtils::removeTrailing(resstr,"\\");
        TQStringUtils::readToken(str,resstr,"#");
        TQStringUtils::readUpTo(str,resstr,'#');
      }
      resstr = TQStringUtils::trim(resstr,TQStringUtils::getAllBlanks());
    } else {
      resstr = TQStringUtils::trim(str,TQStringUtils::getAllBlanks());
    }
    if(resstr.Length() > 0){
      lines->push_back(resstr);
      linecount++;
    }
  }
  free(tmp);
  infilestream.close();
  return linecount;
}

//__________________________________________________________________________________|___________
 
TList* TQStringUtils::readDefinitionFile(const TString& filename){
  // read a histogram definition file, returning a TList of TObjStrings with histogram definitions
  std::ifstream file(filename.Data());
  TList* list = new TList();
  list->SetOwner(true);
  if (file.is_open()) {
    /* read line by line */
    std::string stdline;
 
    TString definition;
    while (getline(file, stdline)) {
      TString line = TQStringUtils::trim(TString(stdline.c_str()));
      if (!line.BeginsWith("#") && !line.IsNull()) {
        definition.Append(line);
        if (TQStringUtils::removeTrailing(definition, ";") > 0) {
          /* add cut definition */
          list->Add(new TObjString(definition));
          definition.Clear();
        }
      }
    }
    file.close();
 
    if (!definition.IsNull()) ERRORfunc("missing terminating ';' in line '%d'!",definition.Data());
  } else {
    ERRORfunc("failed to load cut definitions from file '%s'!",filename.Data());
  }
  return list;
}

//______________________________________________________________________________________________

TString TQStringUtils::unquote(TString text, const TString& quotes) {
  // remove enclosing quotes from a string, returning the result
  TQStringUtils::unquoteInPlace(text,quotes);
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::quote (const TString& str, char q){
  // enclose a string in quotes, returning the result
  return q + str + q;
}

//______________________________________________________________________________________________

void TQStringUtils::unquoteInPlace(TString& text, const TString& quotes) {
  // remove enclosing quotes from a string, returning the result
  for(int i=0; i < quotes.Length(); ++i){
    const TString s(quotes(i,1));
    DEBUGfunc("stripping '%s'",s.Data());
    if(text.BeginsWith(s) && text.EndsWith(s)){
      text.Remove(0,1);
      text.Remove(text.Length() - 1, 1);
    }
  }
}

//______________________________________________________________________________________________

TString TQStringUtils::unblock(TString text, const TString& blocks) {
  // remove enclosing parenthesis from a string, returning the result
  for(int i=0; i < blocks.Length(); i+=2){
    if(text.BeginsWith(blocks(i,1)) && text.EndsWith(blocks(i+1,1).Data())){
      text.Remove(0, 1);
      text.Remove(text.Length() - 1, 1);
    }
  }
  return text;

}


//______________________________________________________________________________________________

TString TQStringUtils::minimize(TString text) {
  // compactify a string, removing all spaces
  text.ReplaceAll(" ","");
  text.ReplaceAll("\n","");
  text.ReplaceAll("\t","");
  text.ReplaceAll("\r","");
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::compactify(const TString& text) {
  // compactify a string, removing all double whitespaces
  TString retval = "";
  bool isSpace = true;
  for(size_t i=0; i<(size_t)text.Length(); i++){
    if(text[i] == ' ' || text[i] == '\t' || text[i] == '\n' || text[i] == '\r'){
      if(isSpace) continue;
      else retval += ' ';
      isSpace=true;
    } else {
      retval += text[i];
      isSpace=false;
    }
  }
  TQStringUtils::removeLeadingBlanks(retval);
  TQStringUtils::removeTrailingBlanks(retval);
  return retval;

}

//______________________________________________________________________________________________

bool TQStringUtils::hasUnquotedStrings(const TString& text, const TString& quotes){
  // returns true if the string contains unquoted string literals, false otherwise
  bool quoted = false;
  for(size_t i=0; i<(size_t)text.Length(); i++){
    if(quotes.Contains(text[i])){
      quoted = !quoted;
      continue;
    }
    if(!quoted && TQStringUtils::letters.Contains(text[i]))
      return true;
  }
  return false;
}

//______________________________________________________________________________________________

bool TQStringUtils::hasTFormulaParameters(const TString& text){
  DEBUGfunc("checking text %s",text.Data());
  if(!text.Contains("[")) return false;
  if(!text.Contains("]")) return false;
  size_t pos = TQStringUtils::find(text,"[");
  size_t close = TQStringUtils::findParenthesisMatch(text,pos,"[","]");
  if (/*close<0 ||*/ close > (size_t)(text.Length())) return false; //size_t is typically unsigned an in this case never <0. In case it is a singed value on some platforms it will end up being a huge number that is also larger than any reasonable text length.
  for (size_t i = pos+1; i<close; ++i){
    if (!numerals.Contains(text[i])){
      DEBUG("found that '%s' qualifies as having TFormula parameters",text.Data());
      return true;
    }
  }
  return false;
}

//______________________________________________________________________________________________

char TQStringUtils::hasStringSwitch(const TString& input){
  size_t pos = -1;
  while(true){
    pos = TQStringUtils::findFirstOf(input,"'\"",pos+1);
    if(/*pos >= 0 &&*/ pos < (size_t)(input.Length())){ //unsigned values (typical typedef for size_t on all used platforms) are always >=0. This otherwise causes annoying compiler warnings....
      size_t nextpos = TQStringUtils::findParenthesisMatch(input,pos,input[pos],input[pos]);
      if(/*nextpos < 0 ||*/ nextpos > (size_t)(input.Length())){ //same as above
        return input[pos];
      } else {
        pos = nextpos;
      }
    } else {
      return 0;
    }
  }
  return 0;
}

//______________________________________________________________________________________________

TString TQStringUtils::readTextFromFile(std::istream* input, const char* commentLine, const char* commentBlockOpen, const char* commentBlockClose){
  // read a data from the given stream, purging c-style comments
  input->seekg(0, std::ios::end);
  size_t length = (size_t) input->tellg();
  DEBUGfunc("allocating buffer of size %zu",length);
  input->seekg(0, std::ios::beg);
  char* buffer = (char *)malloc((length+1)*sizeof(char));
  input->read(buffer, length);
  buffer[length]='\0';
  std::string text = std::string(buffer);
  DEBUGfunc("freeing buffer");
  free(buffer);
  std::stringstream result;
  size_t pos=0;
  char isstr = 0;
  while(pos < text.size()){
    DEBUGfunc("entering iteration at %zu",pos);
    size_t nextposLine = text.find(commentLine, pos);
    size_t nextposBlock = text.find(commentBlockOpen, pos);
    size_t nextpos = std::min(nextposLine,nextposBlock);
    if(nextpos >= text.size()){
      result << text.substr(pos);
      break;
    } else {
      const std::string s(text.substr(pos, nextpos-pos));
      char stringswitch = hasStringSwitch(s.c_str());
      if(isstr==0) isstr = stringswitch;
      else if(stringswitch==isstr) isstr=0;
      result << s;
    }
    if(isstr!=0 || (nextpos > 0 && text[nextpos-1]=='\\')){
      result << text.substr(nextpos,1);
      pos = nextpos+1;
    } else {
      if(nextpos == nextposLine) pos = TQStringUtils::findFirstOf(text,"\n", nextpos);
      else if(nextpos == nextposBlock){
        result << TQStringUtils::repeat("\n",std::count(text.begin()+pos,text.begin()+nextpos,'\n'));
        pos = text.find(commentBlockClose, nextpos)+strlen(commentBlockClose);
      }
    } 
  }
  DEBUG("returning result");
  return result.str().c_str();
}

//______________________________________________________________________________________________

size_t TQStringUtils::findParenthesisMatch(const TString& str, size_t nextpos, const TString& paropen, const TString& parclose){
  // finds the nearest mathing closing parenthesis in a string from a given position assuming that the opening parenthesis is at the given position 
  size_t openbrace = 0;
  size_t closebrace = 0;
  size_t bracestack = 1;
  while((bracestack > 0) && (nextpos < (size_t)str.Length())){
    openbrace = TQStringUtils::find(str,paropen, nextpos+1);
    closebrace = TQStringUtils::find(str,parclose, nextpos+1);
    nextpos++;
    if(openbrace < closebrace){
      bracestack++;
      nextpos = openbrace;
    } else {
      bracestack--;
      nextpos = closebrace;
    }
  }
  return nextpos;
}

//______________________________________________________________________________________________

size_t TQStringUtils::rfindParenthesisMatch(const TString& str, size_t nextpos, const TString& paropen, const TString& parclose){
  // finds the nearest mathing (opening) parenthesis in a string from a given position assuming that the closing parenthesis is at the given position (backwards search)
  size_t openbrace = 0;
  size_t closebrace = 0;
  size_t bracestack = 1;
  while((bracestack > 0) && (nextpos < (size_t)str.Length())){
    openbrace = TQStringUtils::rfind(str,paropen, nextpos-1);
    closebrace = TQStringUtils::rfind(str,parclose, nextpos-1);
    // this line is correct and important!
    closebrace = std::min(closebrace, closebrace+1);
    // it helps to avoid overflows of 'closebrace' that lead to wrong return values!
    nextpos--;
    if(openbrace < closebrace){
      bracestack++;
      nextpos = closebrace;
    } else {
      bracestack--;
      nextpos = openbrace;
    }
  }
  return nextpos;
}

//______________________________________________________________________________________________

size_t TQStringUtils::findParenthesisMatch(const TString& str, size_t nextpos, char paropen, char parclose){
  // finds the nearest mathing closing parenthesis in a string from a given position assuming that the opening parenthesis is at the given position 
  return findParenthesisMatch(str, nextpos,chartostr(paropen),chartostr(parclose));
}

//______________________________________________________________________________________________

size_t TQStringUtils::rfindParenthesisMatch(const TString& str, size_t nextpos, char paropen, char parclose){
  // finds the nearest mathing (opening) parenthesis in a string from a given position assuming that the closing parenthesis is at the given position (backwards search)
  return rfindParenthesisMatch(str, nextpos,chartostr(paropen),chartostr(parclose));
}

//______________________________________________________________________________________________

size_t TQStringUtils::findFree(const TString& haystack, const TString& needle, const TString& paropen, const TString& parclose, size_t startpos){
  // finds the next "free" occurrence of needle in haystack. Note that this version checks for an exact match of the entire string paropen and parclose
  size_t needlepos = TQStringUtils::find(haystack,needle, startpos);
  size_t nextparopen = TQStringUtils::find(haystack,paropen, startpos);
  while(needlepos > nextparopen){
    startpos = findParenthesisMatch(haystack, nextparopen, paropen, parclose)+1;
    if (startpos == (size_t)(kNPOS+1)) return kNPOS;
    needlepos = TQStringUtils::find(haystack,needle, startpos);
    nextparopen = TQStringUtils::find(haystack,paropen, startpos);
  }
  return needlepos;
} 

//______________________________________________________________________________________________

size_t TQStringUtils::findFree(const TString& haystack, const TString& needle, const TString& parentheses, size_t startpos){
  // finds the next "free" occurrence of needle in haystack. This version assumes parentheses to be provides as "()[]{}", i.e. opening followed by closing parenthesis. Needle must be matched exactly.
  if (parentheses.Length()%2 != 0) {
    ERRORfunc("Number of parentheses is odd, returning kNPOS");
    return kNPOS;
    }
  TString paropen = "";
  TString parclose = "";
  for (int i=0;i<parentheses.Length(); ++i) {
    if (i%2 == 0) paropen += parentheses(i);
    else parclose += parentheses(i);
  }
  size_t needlepos = TQStringUtils::find(haystack,needle, startpos);
  size_t nextparopen = TQStringUtils::findFirstOf(haystack,paropen, startpos);
  while(needlepos > nextparopen){
    int whichPar = TQStringUtils::findFirstOf(paropen,haystack(nextparopen));
    startpos = findParenthesisMatch(haystack, nextparopen, paropen(whichPar), parclose(whichPar) )+1;
    if (startpos == (size_t)(kNPOS+1)) return kNPOS;
    needlepos = TQStringUtils::find(haystack,needle, startpos);
    nextparopen = TQStringUtils::findFirstOf(haystack,paropen, startpos);
  }
  
  return needlepos;
} 

//______________________________________________________________________________________________

size_t TQStringUtils::rfindFree(const TString& haystack, const TString& needle, const TString& parentheses, size_t startpos){
  // reverse-finds the next "free" occurrence of needle in haystack. This version assumes parentheses to be provides as "()[]{}", i.e. opening followed by closing parenthesis. Needle must be matched exactly.
  if (parentheses.Length()%2 != 0) {
    ERRORfunc("Number of parentheses is odd, returning kNPOS");
    return kNPOS;
    }
  TString paropen = "";
  TString parclose = "";
  for (int i=0;i<parentheses.Length(); ++i) {
    if (i%2 == 0) paropen += parentheses(i);
    else parclose += parentheses(i);
  }
  size_t needlepos = TQStringUtils::rfind(haystack,needle, startpos);
  size_t nextparclose = TQStringUtils::findLastOf(haystack,parclose, startpos);
  while(needlepos < nextparclose){
    int whichPar = TQStringUtils::findLastOf(parclose,haystack(nextparclose));
    startpos = rfindParenthesisMatch(haystack, nextparclose, paropen(whichPar), parclose(whichPar) )-1;
    if (startpos == (size_t)(kNPOS-1)) return kNPOS;
    needlepos = TQStringUtils::rfind(haystack,needle, startpos);
    nextparclose = TQStringUtils::findLastOf(haystack,parclose, startpos);
  }
  
  return needlepos;
}

//______________________________________________________________________________________________

size_t TQStringUtils::rfindFree(const TString& haystack, const TString& needle, const TString& paropen, const TString& parclose, size_t startpos){
  // reverse-finds the next "free" occurrence of needle in haystack. Note that this version checks for an exact match of the entire string paropen and parclose
  size_t needlepos = TQStringUtils::rfind(haystack,needle, startpos);
  size_t nextparclose = TQStringUtils::rfind(haystack,parclose, startpos);
  while(needlepos < nextparclose){
    startpos = rfindParenthesisMatch(haystack, nextparclose, paropen, parclose)-1;
    // this line is correct and important! 
    startpos = std::min(startpos+1, startpos-1); 
    // it helps to avoid overflows of 'startpos' that result in non-terminating function calls!
    needlepos = TQStringUtils::rfind(haystack,needle, startpos);
    nextparclose = TQStringUtils::rfind(haystack,parclose, startpos);
  }
  return needlepos;
} 

//______________________________________________________________________________________________

size_t TQStringUtils::findFreeOf(const TString& haystack, const TString& needles, const TString& paropen, const TString& parclose, size_t startpos){
  // finds the next "free" occurrence of any needle in haystack. Note that this version checks for an exact match of the entire string paropen and parclose
  size_t needlepos = TQStringUtils::findFirstOf(haystack,needles, startpos);
  size_t nextparopen = TQStringUtils::find(haystack,paropen, startpos);
  while(needlepos > nextparopen){
    startpos = findParenthesisMatch(haystack, nextparopen, paropen, parclose)+1;
    if (startpos == (size_t)(kNPOS+1)) return kNPOS;
    needlepos = TQStringUtils::findFirstOf(haystack,needles, startpos);
    nextparopen = TQStringUtils::find(haystack,paropen, startpos);
  }
  return needlepos;
} 

//______________________________________________________________________________________________

size_t TQStringUtils::rfindFreeOf(const TString& haystack, const TString& needles, const TString& paropen, const TString& parclose, size_t startpos){
  // reverse-finds the next "free" occurrence of any needle in haystack. Note that this version checks for an exact match of the entire string paropen and parclose
  size_t needlepos = TQStringUtils::findLastOf(haystack,needles, startpos);
  size_t nextparclose = TQStringUtils::rfind(haystack,parclose, startpos);
  while(needlepos < nextparclose){
    startpos = rfindParenthesisMatch(haystack, nextparclose, paropen, parclose);
    // this line is correct and important! 
    startpos = std::min(startpos+1, startpos-1); 
    // it helps to avoid overflows of 'startpos' that result in non-terminating function calls!
    needlepos = TQStringUtils::findLastOf(haystack,needles, startpos);
    nextparclose = TQStringUtils::rfind(haystack,parclose, startpos);
    // this line is correct and important! 
    nextparclose = std::min(nextparclose, nextparclose+1);
    // it helps to avoid overflows of 'nextparclose' that result wrong return values
  }
  return needlepos;
} 

//__________________________________________________________________________________|___________

int TQStringUtils::find(const TString& item, const std::vector<TString>& vec){
  // find the index of an item in a list, return -1 if not found
  for(size_t i=0; i<vec.size(); ++i){
    if(TQStringUtils::matches(item,vec[i])) return i;
  }
  return -1;
}

//______________________________________________________________________________________________

int TQStringUtils::find(const TString& haystack, const TString& needle, int pos){
  // finds the next occurrence of needle in haystack, starting at given position
  // if needle is found returns position of the first character of needle
  if(haystack.IsNull() || needle.IsNull() || pos > haystack.Length()) return kNPOS;
  if(pos < 0) pos = 0;
  size_t npos = 0;
  while(pos < haystack.Length()){
    if(haystack[pos] == needle[npos]){
      if(npos+1 == (size_t)needle.Length()){
        return pos+1-needle.Length(); //return the position of the first character of needle
      }
      npos++;
    } else {
      npos = 0;
    }
    pos++;
  }
  return kNPOS;
}

//______________________________________________________________________________________________

int TQStringUtils::rfind(const TString& haystack, const TString& needle, int pos){
  // finds the next occurrence of needle in haystack, starting backwards at given position
  if(haystack.IsNull() || needle.IsNull() || pos < 0) return kNPOS;
  if(pos > haystack.Length()) pos = haystack.Length() -1;
  size_t npos = needle.Length()-1;
  while(pos >= 0){
    if(haystack[pos] == needle[npos]){
      if(npos == 0){
        return pos;
      }
      npos--;
    } else {
      npos = needle.Length() -1;
    }
    pos--;
  }
  return kNPOS;
}

//______________________________________________________________________________________________

int TQStringUtils::findFirstOf(const TString& haystack, const TString& needle, int pos){
  // finds the next occurrence of any needle in haystack, starting at given position
  if(haystack.IsNull() || needle.IsNull() || pos > haystack.Length()) return kNPOS;
  if(pos < 0) pos = 0;
  while(pos < haystack.Length()){
    if(needle.Index(haystack[pos]) != kNPOS) return pos;
    pos++;
  }
  return kNPOS;
}

//______________________________________________________________________________________________

int TQStringUtils::findLastOf(const TString& haystack, const TString& needle, int pos){
  // finds the next occurrence of needle in haystack, starting backwards at given position
  if(haystack.IsNull() || needle.IsNull() || pos < 0) return kNPOS;
  if(pos > haystack.Length()) pos = haystack.Length() -1;
  while(pos >= 0){
    if(needle.Index(haystack[pos]) != kNPOS) return pos;
    pos--;
  }
  return kNPOS;
}

//______________________________________________________________________________________________

int TQStringUtils::rfindFirstOf(const TString& haystack, const TString& needle, int pos){
  // see TQStringUtils::findLastOf(const TString& haystack, const TString& needle, int pos)
  return findLastOf(haystack,needle,pos);
}

//______________________________________________________________________________________________

int TQStringUtils::findFirstNotOf(const TString& haystack, const TString& needle, int pos){
  // finds the next occurrence of anything else than needle in haystack, starting at given position
  if(haystack.IsNull() || needle.IsNull() || pos > haystack.Length()) return kNPOS;
  if(pos < 0) pos = 0;
  while(pos < haystack.Length()){
    if(needle.Index(haystack[pos]) == kNPOS) return pos;
    pos++;
  }
  return kNPOS;
}

//______________________________________________________________________________________________

int TQStringUtils::findLastNotOf(const TString& haystack, const TString& needle, int pos){
  // finds the next occurrence of anything else than needle in haystack, starting backwards at given position
  if(haystack.IsNull() || needle.IsNull() || pos < 0) return kNPOS;
  if(pos > haystack.Length()) pos = haystack.Length() -1;
  while(pos >= 0){
    if(needle.Index(haystack[pos]) == kNPOS) return pos;
    pos--;
  }
  return kNPOS;
}

//______________________________________________________________________________________________

int TQStringUtils::rfindFirstNotOf(const TString& haystack, const TString& needle, int pos){
  // see TQStringUtils::findLastNotOf(const TString& haystack, const TString& needle, int pos)
  return findLastNotOf(haystack,needle,pos);
}
//______________________________________________________________________________________________

std::vector<TString> TQStringUtils::split(const TString& str, const TString& del){
  // split a string at all occurrences of the delimiter and return a vector of results
  std::vector<TString> split;
  if(str.IsNull()) return split;
  TString substr;
  if(del.Length()>0){
    size_t oldpos = 0;
    size_t newpos = 0;
    while(newpos<(size_t)str.Length() && oldpos <= newpos){
      oldpos = newpos;
      newpos = TQStringUtils::find(str,del, oldpos);
      substr=str(oldpos, std::min((size_t)str.Length(),newpos)-oldpos);
      if(substr.Length()>0) split.push_back(substr);
      if(newpos < (size_t)str.Length()) newpos += del.Length();
    }
  }
  if(split.size() < 1) split.push_back(str);
  return split; 
}

//______________________________________________________________________________________________

std::vector<TString> TQStringUtils::split(const TString& str, const TString& del, const TString& paropen, const TString& parclose){
  // split a string into little chunks
  // This version of the stringsplit function accepts one delimiter
  // and respects parenthesis (e.g. does not split in a way that will break parenthesis matches)
  // Note that this method treats paropen and parclose at a potentially multi-character opening/
  // closing substring. To split using a variety of several different pairs of parentheses use
  // TQStringUtils::tokenizeVector ! 

  std::vector<TString> split;
  TString substr;
  if(del.Length()>0){
    size_t oldpos = 0;
    size_t newpos = 0;
    size_t nextparopen = str.Length();
    while(newpos<(size_t)str.Length() && oldpos <= (size_t)str.Length()){
      // find the next opening brace
      nextparopen = TQStringUtils::find(str,paropen, oldpos);
      // find the next occurance of the delimiter
      newpos = std::min((size_t)TQStringUtils::find(str,del, oldpos), (size_t)str.Length());
      // as long as there are opening braces before the delimiter
      while(nextparopen < newpos){
        // proceed to the corresponding closing brace
        nextparopen = findParenthesisMatch(str, nextparopen, paropen, parclose);
        // place the pointer behind that one
        newpos = std::max(newpos, nextparopen);
        // find the next breakpoint
        newpos = std::min(TQStringUtils::find(str,del, newpos), str.Length());
        // if there is any parenthesis left in the string, find the next opening one
        if(nextparopen < (size_t)str.Length()) nextparopen = TQStringUtils::find(str,paropen, nextparopen+1);
      }
      // extract the string
      substr=str(oldpos, std::min((size_t)str.Length(),newpos)-oldpos);
      // push it to the vector
      if(substr.Length()>0) split.push_back(substr);
      // and continue
      oldpos = newpos+del.Length();
    }
  }
  if(split.size() < 1) split.push_back(str);
  return split; 
}

//______________________________________________________________________________________________

TString TQStringUtils::merge(const std::vector<TString>& vecStr, const TString& del, int start, int stop){
  // The opposite method of split. Takes a vector of strings and combines it
  // to a single string.

  TString outputString = "";
  if (stop > (int) vecStr.size())
    stop = (int) vecStr.size();

  for (int i = start; i < stop; i++){
    if (i > 0)
      outputString.Append(del);
    outputString.Append(vecStr[i]);
  }
  return outputString;
}

//______________________________________________________________________________________________

TString TQStringUtils::findFormat(const TString& content){
  // make an elaborate guess of the formatting of some string
  // may return one of html,latex,roottex,unicode,ascii
  if(content.Contains(html)) return "html";
  if(content.Contains(roottex)) return "roottex";
  if(content.Contains(latexcmd) || content.Contains(latexmath)) return "latex";
  for(size_t i=0; i<(size_t)content.Length(); i++){
    if(content[i] < 0 /*|| content[i] > 128*/) return "unicode"; //the case of >128 is already excluded by range of the data type (prevent compilter warning)
  }
  return "ascii";
}

//______________________________________________________________________________________________

bool TQStringUtils::isASCII(TString content){
  // convert a string to plain ascii
  std::stringstream s;
  for(size_t i=0; i<(size_t)content.Length(); i++){
    if(!(content[i]>31 && content[i]<127)) return false;
  }
  return true;
}

//______________________________________________________________________________________________

TString TQStringUtils::makeASCII(const TString& content){
  // convert a string to plain ascii
  std::stringstream s;
  for(size_t i=0; i<(size_t)content.Length(); i++){
    if(content[i]>31 && content[i]<127) s << content[i];
  }
  return TString(s.str().c_str());
}


//______________________________________________________________________________________________

TString TQStringUtils::convertPlain2LaTeX(TString text){
  // convert plain text to LaTeX code
  // TODO: implement this function (currently, this is a DUMMY function)
  text.ReplaceAll("_","\\_");
  text.ReplaceAll("&","\\&");  
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertPlain2HTML(TString text){
  // convert plain text to HTML code
  // TODO: implement this function (currently, this is a DUMMY function)
  text.ReplaceAll("&","&amp;");  
  text.ReplaceAll("<","&lt;");
  text.ReplaceAll(">","&gt;");
  text.ReplaceAll("\"","&quot;");
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertLaTeX2Plain(TString text, bool unicode){
  // convert LaTeX symbols to plain text (ASCII or unicode)
  text.ReplaceAll("$","");
  text.ReplaceAll("\\pm",unicode ? "ยฑ" : "+/-");
  text.ReplaceAll("\\leq","<=");
  text.ReplaceAll("\\&","&");  
  text.ReplaceAll("\\geq",">=");
  text.ReplaceAll("\\cdot","*");
  text.ReplaceAll("\\to ",unicode ? "โ†’" : "->");
  text.ReplaceAll("\\rightarrow ",unicode ? "โ†’" : "->");
  text.ReplaceAll("\\to",unicode ? "โ†’" : "->");
  text.ReplaceAll("\\rightarrow",unicode ? "โ†’" : "->");
  text.ReplaceAll("\\ell","l");
  text.ReplaceAll("\\Alpha", unicode ? "ฮ‘" : "A"); text.ReplaceAll("\\alpha", unicode ? "ฮฑ" : "a"); 
  text.ReplaceAll("\\Beta", unicode ? "ฮ’" : "B"); text.ReplaceAll("\\beta", unicode ? "ฮฒ" : "b"); 
  text.ReplaceAll("\\Gamma", unicode ? "ฮ“" : "G"); text.ReplaceAll("\\gamma", unicode ? "ฮณ" : "y"); 
  text.ReplaceAll("\\Delta", unicode ? "ฮ”" : "D"); text.ReplaceAll("\\delta", unicode ? "ฮด" : "d"); 
  text.ReplaceAll("\\Epsilon",unicode ? "ฮ•" : "E"); text.ReplaceAll("\\epsilon",unicode ? "ฮต" : "e"); 
  text.ReplaceAll("\\Zeta", unicode ? "ฮ–" : "Z"); text.ReplaceAll("\\zeta", unicode ? "ฮถ" : "z");
  text.ReplaceAll("\\Eta", unicode ? "ฮ—" : "H"); text.ReplaceAll("\\eta", unicode ? "ฮท" : "n");
  text.ReplaceAll("\\Theta", unicode ? "ฮ˜" : "0"); text.ReplaceAll("\\theta", unicode ? "ฮธ" : "0"); 
  text.ReplaceAll("\\Iota", unicode ? "I" : "I"); text.ReplaceAll("\\iota", unicode ? "ฮน" : "i"); 
  text.ReplaceAll("\\Kappa", unicode ? "ฮš" : "K"); text.ReplaceAll("\\kappa", unicode ? "ฮบ" : "k");
  text.ReplaceAll("\\Lambda", unicode ? "ฮ›" : "L"); text.ReplaceAll("\\lambda", unicode ? "ฮป" : "l"); 
  text.ReplaceAll("\\Mu", unicode ? "M" : "M"); text.ReplaceAll("\\mu", unicode ? "ฮผ" : "m");
  text.ReplaceAll("\\Nu", unicode ? "ฮ" : "N"); text.ReplaceAll("\\nu", unicode ? "ฮฝ" : "v"); 
  text.ReplaceAll("\\Xi", unicode ? "ฮž" : "Xi"); text.ReplaceAll("\\xi", unicode ? "ฮพ" : "xi");
  text.ReplaceAll("\\Omicron",unicode ? "ฮŸ" : "O"); text.ReplaceAll("\\omicron",unicode ? "ฮฟ" : "o"); 
  text.ReplaceAll("\\Pi", unicode ? "ฮ " : "Pi"); text.ReplaceAll("\\pi", unicode ? "ฯ€" : "pi");
  text.ReplaceAll("\\Rho", unicode ? "ฮก" : "P"); text.ReplaceAll("\\rho", unicode ? "ฯ" : "rho");
  text.ReplaceAll("\\Sigma", unicode ? "ฮฃ" : "S"); text.ReplaceAll("\\sigma", unicode ? "ฯƒ" : "s");
  text.ReplaceAll("\\Tau", unicode ? "ฮค" : "Tau");text.ReplaceAll("\\tau", unicode ? "ฯ„" : "t");
  text.ReplaceAll("\\Upsilon",unicode ? "ฮฅ" : "U"); text.ReplaceAll("\\upsilon",unicode ? "ฯ…" : "u"); 
  text.ReplaceAll("\\Phi", unicode ? "ฮฆ" : "Phi");text.ReplaceAll("\\phi", unicode ? "ฯ†" : "phi");
  text.ReplaceAll("\\Chi", unicode ? "ฮง" : "Chi");text.ReplaceAll("\\chi", unicode ? "ฯ‡" : "chi");
  text.ReplaceAll("\\Psi", unicode ? "ฮจ" : "Psi");text.ReplaceAll("\\psi", unicode ? "ฯˆ" : "psi");
  text.ReplaceAll("\\Omega", unicode ? "ฮฉ" : "O"); text.ReplaceAll("\\omega", unicode ? "ฯ‰" : "w"); 
  TRegexp cmd("\\\\[a-zA-Z]+[ ]*");
  while(text.Contains(cmd)){
    TString seq = text(cmd);
    int pos = text.Index(cmd);
    int start = TQStringUtils::find(text,"{",pos+1);
    if(start < seq.Length() || start == kNPOS){
      text.Remove(pos,seq.Length());
    } else {
      int end = TQStringUtils::findParenthesisMatch(text,pos+seq.Length(),"{","}");
      if(end != kNPOS) text.Remove(end,1);
      text.Remove(pos,start-pos+1);
    }
  }
  TRegexp subScr("_{[^}]*}");
  while(text.Contains(subScr)){
    TString seq = text(subScr);
    int start = text.Index(seq);
    TString rep(seq);
    rep.Remove(rep.Length()-1,1);
    rep.Remove(0,2);
    text.Replace(start,seq.Length(), unicode ? TQStringUtils::makeUnicodeSubscript(rep) : ("_"+rep));
  }
  text.ReplaceAll("^","_");
  while(text.Contains(subScr)){
    TString seq = text(subScr);
    int start = text.Index(seq);
    TString rep(seq);
    rep.Remove(rep.Length()-1,1);
    rep.Remove(0,2);
    text.Replace(start,seq.Length(),unicode ? TQStringUtils::makeUnicodeSuperscript(rep) : ("^"+rep));
  }
  text.ReplaceAll("{}","");
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertLaTeX2HTML(TString text){
  // converts LaTeX formattet text to HTML code

  bool open = true;
  text.ReplaceAll("\\&","&amp;");  
  text.ReplaceAll("<","&lt;");
  text.ReplaceAll(">","&gt;");
  while(text.Contains("$")){
    int loc = text.Index("$");
    text.Replace(loc,1,open ? "<i>" : "</i>");
    open = !open;
  }
  text.ReplaceAll("\\Alpha", "&Alpha;" ); text.ReplaceAll("\\alpha" ,"&alpha;" ); 
  text.ReplaceAll("\\Beta", "&Beta;" ); text.ReplaceAll("\\beta" ,"&beta;" ); 
  text.ReplaceAll("\\Gamma", "&Gamma;" ); text.ReplaceAll("\\gamma" ,"&gamma;" ); 
  text.ReplaceAll("\\Delta", "&Delta;" ); text.ReplaceAll("\\delta" ,"&delta;" ); 
  text.ReplaceAll("\\Epsilon","&Epsilon;"); text.ReplaceAll("\\epsilon","&epsilon;" ); 
  text.ReplaceAll("\\Zeta", "&Zeta;" ); text.ReplaceAll("\\zeta" ,"&zeta;" );
  text.ReplaceAll("\\Eta", "&Eta;" ); text.ReplaceAll("\\eta" ,"&eta;" );
  text.ReplaceAll("\\Theta", "&Theta;" ); text.ReplaceAll("\\theta" ,"&theta;" ); 
  text.ReplaceAll("\\Iota", "&Iota;" ); text.ReplaceAll("\\iota" ,"&iota;" ); 
  text.ReplaceAll("\\Kappa", "&Kappa;" ); text.ReplaceAll("\\kappa" ,"&kappa;" );
  text.ReplaceAll("\\Lambda", "&Lambda;" ); text.ReplaceAll("\\lambda" ,"&lambda;" ); 
  text.ReplaceAll("\\Mu", "&Mu;" ); text.ReplaceAll("\\mu" ,"&mu;" );
  text.ReplaceAll("\\Nu", "&Nu;" ); text.ReplaceAll("\\nu" ,"&nu;" ); 
  text.ReplaceAll("\\Xi", "&Xi;" ); text.ReplaceAll("\\xi" ,"&xi;" );
  text.ReplaceAll("\\Omicron","&OmicronM"); text.ReplaceAll("\\omicron","&omicron;" ); 
  text.ReplaceAll("\\Pi", "&Pi;" ); text.ReplaceAll("\\pi" ,"&pi;" );
  text.ReplaceAll("\\Rho", "&Rho;" ); text.ReplaceAll("\\rho" ,"&rho;" );
  text.ReplaceAll("\\Sigma", "&Sigma;" ); text.ReplaceAll("\\sigma" ,"&sigma;" );
  text.ReplaceAll("\\Tau", "&Tau;" ); text.ReplaceAll("\\tau" ,"&tau;" );
  text.ReplaceAll("\\Upsilon","&Upsilon;"); text.ReplaceAll("\\upsilon","&upsilon;" ); 
  text.ReplaceAll("\\Phi", "&Phi;" ); text.ReplaceAll("\\phi" ,"&phi;" );
  text.ReplaceAll("\\Chi", "&Chi;" ); text.ReplaceAll("\\chi" ,"&chi;" );
  text.ReplaceAll("\\Psi", "&Psi;" ); text.ReplaceAll("\\psi" ,"&psi;" );
  text.ReplaceAll("\\Omega", "&Omega;" ); text.ReplaceAll("\\omega" ,"&omega;" ); 
  TRegexp cmd("[ \n\t]*\\\\[a-zA-Z]+[ \n\t]*");
  while(text.Contains(cmd)){
    TString seq = text(cmd);
    int seqlen = seq.Length();
    TString sequence = TQStringUtils::trim(seq);
    TQStringUtils::removeLeading(sequence,"\\");
    int pos = text.Index(cmd);
    if(text[pos+seqlen] != '{'){
      text.Remove(pos,seqlen);
      if(sequence == "itshape"){
        text.Insert(pos,"<i>");
        text.Append("</i>");
      }
      if(sequence == "bfseries"){
        text.Insert(pos,"<b>");
        text.Append("</b>");
      }
      if(sequence == "to" || sequence == "rightarrow") text.Insert(pos,"&rarr;");
      if(sequence == "leftarrow") text.Insert(pos,"&larr;");
      if(sequence == "geq" ) text.Insert(pos," &ge; ");
      if(sequence == "leq" ) text.Insert(pos," &le; ");
      if(sequence == "cdot") text.Insert(pos,"&sdot;");
      if(sequence == "pm" ) text.Insert(pos,"&plusmn;");
      if(sequence == "ell" ) text.Insert(pos,"&ell;");
    } else {
      seqlen++;
      int end = TQStringUtils::findParenthesisMatch(text,pos+seq.Length(),"{","}");
      if(sequence == "textit" || sequence == "ensuremath"){
        if(end != kNPOS) text.Replace(end,1,"</i>");
        else text.Append("</i>");
        text.Replace(pos,seqlen,"<i>");
      } else if(sequence == "textbf"){
        if(end != kNPOS) text.Replace(end,1,"</b>");
        else text.Append("</b>");
        text.Replace(pos,seqlen,"<b>");
      } else if(sequence == "mathrm"){
        if(end != kNPOS) text.Replace(end,1,"</span>");
        else text.Append("</span>");
        text.Replace(pos,seqlen,"<span style=\"font-style:normal;\">");
      } else if(sequence == "bar"){
        if(end != kNPOS) text.Replace(end,1,"</span>");
        else text.Append("</span>");
        text.Replace(pos,seqlen,"<span style=\"text-decoration: overline;\">");
      } else {
        if(end != kNPOS) text.Remove(end,1);
        text.Remove(pos,seqlen);
      }
    }
  }
  TRegexp subScr("_{[^}]*}");
  while(text.Contains(subScr)){
    TString seq = text(subScr);
    int start = text.Index(subScr);
    text.Replace(start+seq.Length()-1,1,"</sub>");
    text.Replace(start,2,"<sub>");
  }
  text.ReplaceAll("^","_");
  while(text.Contains(subScr)){
    TString seq = text(subScr);
    int start = text.Index(subScr);
    text.Replace(start+seq.Length()-1,1,"</sup>");
    text.Replace(start,2,"<sup>");
  }
  text.ReplaceAll("{}","");
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertHTML2Plain(TString text, bool /*unicode*/){
  // convert HTML code to plain text (ASCII or unicode)
  // TODO: implement this function (currently, this is a DUMMY function)
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertHTML2LaTeX(TString text){
  // convert HTML code to LaTeX
  // TODO: implement this function (currently, this is a DUMMY function)
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertROOTTeX2Plain(TString text, bool /*unicode*/){
  // convert ROOTTeX to plain text (ASCII or unicode)
  // TODO: implement this function (currently, this is a DUMMY function)
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertLaTeX2ROOTTeX(TString text){
  // convert ROOTTeX to plain text (ASCII or unicode)
  bool open = false;
  while(text.Contains("$")){
    int pos = text.First("$");
    if(!open) text.Replace(pos,1,"#it{");
    else text.Replace(pos,1,"}");
    open = !open;
  }
  text.ReplaceAll("^{*}","#kern[-0.2]{#lower[-0.2]{*}}");
  text.ReplaceAll("\\","#");
  text.ReplaceAll("#ell","l");
  text.ReplaceAll("{}","");
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertROOTTeX2LaTeX(TString text){
  // convert ROOTTeX to (real) LaTeX
  if(!text.Contains("$")){
    text.ReplaceAll("#sqrt{s}","$\\sqrt{s}$");
    text.ReplaceAll("^{-1}","${}^{-1}$");
  }
  text.ReplaceAll("#","\\");
  return text;
}

//______________________________________________________________________________________________

TString TQStringUtils::convertROOTTeX2HTML(TString text){
  // convert ROOTTeX to HTML code
  // TODO: implement this function (currently, this is a DUMMY function)
  text.ReplaceAll("#","\\");
  return convertLaTeX2HTML(text);
}

//______________________________________________________________________________________________

TString TQStringUtils::makeUppercase(TString s){
  // convert a string to uppercase
  s.ToUpper();
  return s;
}

//______________________________________________________________________________________________

TString TQStringUtils::makeLowercase(TString s){
  // convert a string to lowercase
  s.ToLower();
  return s;
}

//______________________________________________________________________________________________

TString TQStringUtils::makeUnicodeSuperscript(TString s){
  // replace all characters in the given string by their unicode superscript variants if possible
  s.ReplaceAll("0","โฐ");s.ReplaceAll("1","ยน");s.ReplaceAll("2","ยฒ");s.ReplaceAll("3","ยณ");s.ReplaceAll("4","โด");s.ReplaceAll("5","โต");s.ReplaceAll("6","โถ");s.ReplaceAll("7","โท");s.ReplaceAll("8","โธ");s.ReplaceAll("9","โน");s.ReplaceAll("+","โบ");s.ReplaceAll("-","โป");s.ReplaceAll("=","โผ");s.ReplaceAll("(","โฝ");s.ReplaceAll(")","โพ");s.ReplaceAll("a","แตƒ");s.ReplaceAll("b","แต‡");s.ReplaceAll("c","แถœ");s.ReplaceAll("d","แตˆ");s.ReplaceAll("e","แต‰");s.ReplaceAll("f","แถ ");s.ReplaceAll("g","แต");s.ReplaceAll("h","สฐ");s.ReplaceAll("i","โฑ");s.ReplaceAll("j","สฒ");s.ReplaceAll("k","แต");s.ReplaceAll("l","หก");s.ReplaceAll("m","แต");s.ReplaceAll("n","โฟ");s.ReplaceAll("o","แต’");s.ReplaceAll("p","แต–");s.ReplaceAll("r","สณ");s.ReplaceAll("s","หข");s.ReplaceAll("t","แต—");s.ReplaceAll("u","แต˜");s.ReplaceAll("v","แต›");s.ReplaceAll("w","สท");s.ReplaceAll("x","หฃ");s.ReplaceAll("y","สธ");s.ReplaceAll("z","แถป");s.ReplaceAll("A","แดฌ");s.ReplaceAll("B","แดฎ");s.ReplaceAll("D","แดฐ");s.ReplaceAll("E","แดฑ");s.ReplaceAll("G","แดณ");s.ReplaceAll("H","แดด");s.ReplaceAll("I","แดต");s.ReplaceAll("J","แดถ");s.ReplaceAll("K","แดท");s.ReplaceAll("L","แดธ");s.ReplaceAll("M","แดน");s.ReplaceAll("N","แดบ");s.ReplaceAll("O","แดผ");s.ReplaceAll("P","แดพ");s.ReplaceAll("R","แดฟ");s.ReplaceAll("T","แต€");s.ReplaceAll("U","แต");s.ReplaceAll("V","โฑฝ");s.ReplaceAll("W","แต‚");s.ReplaceAll("ฮฑ","แต…");s.ReplaceAll("ฮฒ","แต");s.ReplaceAll("ฮณ","แตž");s.ReplaceAll("ฮด","แตŸ");s.ReplaceAll("ฮต","แต‹");s.ReplaceAll("ฮธ","แถฟ");s.ReplaceAll("ฮน","แถฅ");s.ReplaceAll("ฮฆ","แถฒ");s.ReplaceAll("ฯ†","แต ");s.ReplaceAll("ฯ‡","แตก");return s;} 

//______________________________________________________________________________________________

TString TQStringUtils::makeUnicodeSubscript(TString s){
  // replace all characters in the given string by their unicode superscript variants if possible
  s.ReplaceAll("0","โ‚€");s.ReplaceAll("1","โ‚");s.ReplaceAll("2","โ‚‚");s.ReplaceAll("3","โ‚ƒ");s.ReplaceAll("4","โ‚„");s.ReplaceAll("5","โ‚…");s.ReplaceAll("6","โ‚†");s.ReplaceAll("7","โ‚‡");s.ReplaceAll("8","โ‚ˆ");s.ReplaceAll("9","โ‚‰");s.ReplaceAll("+","โ‚Š");s.ReplaceAll("-","โ‚‹");s.ReplaceAll("=","โ‚Œ");s.ReplaceAll("(","โ‚");s.ReplaceAll(")","โ‚Ž");s.ReplaceAll("a","โ‚");s.ReplaceAll("e","โ‚‘");s.ReplaceAll("h","โ‚•");s.ReplaceAll("i","แตข");s.ReplaceAll("j","โฑผ");s.ReplaceAll("k","โ‚–");s.ReplaceAll("l","โ‚—");s.ReplaceAll("m","โ‚˜");s.ReplaceAll("n","โ‚™");s.ReplaceAll("o","โ‚’");s.ReplaceAll("p","โ‚š");s.ReplaceAll("r","แตฃ");s.ReplaceAll("s","โ‚›");s.ReplaceAll("t","โ‚œ");s.ReplaceAll("u","แตค");s.ReplaceAll("v","แตฅ");s.ReplaceAll("x","โ‚“");s.ReplaceAll("ฮฒ","แตฆ");s.ReplaceAll("ฮณ","แตง");s.ReplaceAll("ฯ","แตจ");s.ReplaceAll("ฯ†","แตฉ");s.ReplaceAll("ฯ‡","แตช");return s;}

//______________________________________________________________________________________________

TString TQStringUtils::format(const char *va_(fmt), ...){
  // format a string - analog to TString::Format
  va_list ap;
  va_start(ap, va_(fmt));
  TString str(vaFormat(va_(fmt), ap));
  va_end(ap);
  return str;
}

//__________________________________________________________________________________|___________

TString TQStringUtils::concat(int n, ...){
  // concatenate arguments
  bool first = true;
  TString text;

  va_list ap;
  va_start(ap, va_(n));
 
  for (int i=1;i<n;i++){
    const char* val = va_arg(ap,const char*);
    if(!first) text.Append(",");
    text.Append(val);
    first=false;
  }
  va_end(ap);
 
  return text;
}

//______________________________________________________________________________________________

char* TQStringUtils::vaFormat(const char *fmt, va_list ap){
  // format a string - variadic variant of TString::Format
  // analog to (private) function TString::FormatImp
 
  Ssiz_t buflen = 20 + strlen(fmt); // pick a number, any strictly positive number
  char* buffer = (char*)malloc(buflen*sizeof(char));
 
  va_list sap;
  R__VA_COPY(sap, ap);
  bool done = false;

  int n, vc = 0;
  do {
    n = vsnprintf(buffer, buflen, fmt, ap);
    // old vsnprintf's return -1 if string is truncated new ones return
    // total number of characters that would have been written
    if (n == -1 || n >= buflen) {
      if (n == -1)
        buflen *= 2;
      else
        buflen = n+1;
      buffer = (char*)realloc(buffer,buflen*sizeof(char));
      va_end(ap);
      R__VA_COPY(ap, sap);
      vc = 1;
    } else {
      done = true;
    }
  } while(!done);
 
  va_end(sap);
  if (vc) va_end(ap);
 
  return buffer;
}


TString TQStringUtils::replaceEnclosed(TString haystack,TString needle,TString newNeedle, const TString& symbols){
  // replace all occurences of needle in haystack, as long as they are
  // enclosed in characters from the symbols
  int pos = 0;
  while(true){
    size_t newpos = TQStringUtils::find(haystack,needle,pos);
    if(newpos < (size_t)haystack.Length()){
      if( ( ( newpos == 0 || symbols.Contains(haystack(newpos-1,1))) )
         && ( (newpos==(size_t)haystack.Length()-1) ||
         symbols.Contains(haystack(newpos+needle.Length(),1)) ) ){ //4 ->needle.Length() ?
        haystack.Replace(newpos,needle.Length(),newNeedle);
        pos = newpos+newNeedle.Length(); //pos = newpos+newNeedle.Length() ? (otherwise infinite recursion possible)
      } else {
        pos = newpos+needle.Length();
      }
    } else {
      break;
    }
  }
  return haystack;
}
  
TString TQStringUtils::getColorDefStringLaTeX(const TString& name, int color){
  // retrieve a color definition string for LaTeX
  // of the form "\definecolor{<name>}{rgb}{<r>,<g>,<b>}"
  // for some predefined color enum
  TColor* c = gROOT->GetColor(color);
  return getColorDefStringLaTeX(name,c);
}


TString TQStringUtils::getColorDefStringLaTeX(const TString& name, TColor* color){
  // retrieve a color definition string for LaTeX
  // of the form "\definecolor{<name>}{rgb}{<r>,<g>,<b>}"
  // for some ROOT TColor 
  if(!color) return "";
  float r,g,b;
  color->GetRGB(r,g,b);
  return TString::Format("\\definecolor{%s}{rgb}{%f,%f,%f}",name.Data(),r,g,b);
}

TString TQStringUtils::padNumber(int num, int length){
  // pad an integer with leading zeros
  TString retval(TString::Format("%d",num));
  while(retval.Length() < length){
    retval.Prepend("0");
  }
  return retval;
}
 TQStringUtils.cxx:1
 TQStringUtils.cxx:2
 TQStringUtils.cxx:3
 TQStringUtils.cxx:4
 TQStringUtils.cxx:5
 TQStringUtils.cxx:6
 TQStringUtils.cxx:7
 TQStringUtils.cxx:8
 TQStringUtils.cxx:9
 TQStringUtils.cxx:10
 TQStringUtils.cxx:11
 TQStringUtils.cxx:12
 TQStringUtils.cxx:13
 TQStringUtils.cxx:14
 TQStringUtils.cxx:15
 TQStringUtils.cxx:16
 TQStringUtils.cxx:17
 TQStringUtils.cxx:18
 TQStringUtils.cxx:19
 TQStringUtils.cxx:20
 TQStringUtils.cxx:21
 TQStringUtils.cxx:22
 TQStringUtils.cxx:23
 TQStringUtils.cxx:24
 TQStringUtils.cxx:25
 TQStringUtils.cxx:26
 TQStringUtils.cxx:27
 TQStringUtils.cxx:28
 TQStringUtils.cxx:29
 TQStringUtils.cxx:30
 TQStringUtils.cxx:31
 TQStringUtils.cxx:32
 TQStringUtils.cxx:33
 TQStringUtils.cxx:34
 TQStringUtils.cxx:35
 TQStringUtils.cxx:36
 TQStringUtils.cxx:37
 TQStringUtils.cxx:38
 TQStringUtils.cxx:39
 TQStringUtils.cxx:40
 TQStringUtils.cxx:41
 TQStringUtils.cxx:42
 TQStringUtils.cxx:43
 TQStringUtils.cxx:44
 TQStringUtils.cxx:45
 TQStringUtils.cxx:46
 TQStringUtils.cxx:47
 TQStringUtils.cxx:48
 TQStringUtils.cxx:49
 TQStringUtils.cxx:50
 TQStringUtils.cxx:51
 TQStringUtils.cxx:52
 TQStringUtils.cxx:53
 TQStringUtils.cxx:54
 TQStringUtils.cxx:55
 TQStringUtils.cxx:56
 TQStringUtils.cxx:57
 TQStringUtils.cxx:58
 TQStringUtils.cxx:59
 TQStringUtils.cxx:60
 TQStringUtils.cxx:61
 TQStringUtils.cxx:62
 TQStringUtils.cxx:63
 TQStringUtils.cxx:64
 TQStringUtils.cxx:65
 TQStringUtils.cxx:66
 TQStringUtils.cxx:67
 TQStringUtils.cxx:68
 TQStringUtils.cxx:69
 TQStringUtils.cxx:70
 TQStringUtils.cxx:71
 TQStringUtils.cxx:72
 TQStringUtils.cxx:73
 TQStringUtils.cxx:74
 TQStringUtils.cxx:75
 TQStringUtils.cxx:76
 TQStringUtils.cxx:77
 TQStringUtils.cxx:78
 TQStringUtils.cxx:79
 TQStringUtils.cxx:80
 TQStringUtils.cxx:81
 TQStringUtils.cxx:82
 TQStringUtils.cxx:83
 TQStringUtils.cxx:84
 TQStringUtils.cxx:85
 TQStringUtils.cxx:86
 TQStringUtils.cxx:87
 TQStringUtils.cxx:88
 TQStringUtils.cxx:89
 TQStringUtils.cxx:90
 TQStringUtils.cxx:91
 TQStringUtils.cxx:92
 TQStringUtils.cxx:93
 TQStringUtils.cxx:94
 TQStringUtils.cxx:95
 TQStringUtils.cxx:96
 TQStringUtils.cxx:97
 TQStringUtils.cxx:98
 TQStringUtils.cxx:99
 TQStringUtils.cxx:100
 TQStringUtils.cxx:101
 TQStringUtils.cxx:102
 TQStringUtils.cxx:103
 TQStringUtils.cxx:104
 TQStringUtils.cxx:105
 TQStringUtils.cxx:106
 TQStringUtils.cxx:107
 TQStringUtils.cxx:108
 TQStringUtils.cxx:109
 TQStringUtils.cxx:110
 TQStringUtils.cxx:111
 TQStringUtils.cxx:112
 TQStringUtils.cxx:113
 TQStringUtils.cxx:114
 TQStringUtils.cxx:115
 TQStringUtils.cxx:116
 TQStringUtils.cxx:117
 TQStringUtils.cxx:118
 TQStringUtils.cxx:119
 TQStringUtils.cxx:120
 TQStringUtils.cxx:121
 TQStringUtils.cxx:122
 TQStringUtils.cxx:123
 TQStringUtils.cxx:124
 TQStringUtils.cxx:125
 TQStringUtils.cxx:126
 TQStringUtils.cxx:127
 TQStringUtils.cxx:128
 TQStringUtils.cxx:129
 TQStringUtils.cxx:130
 TQStringUtils.cxx:131
 TQStringUtils.cxx:132
 TQStringUtils.cxx:133
 TQStringUtils.cxx:134
 TQStringUtils.cxx:135
 TQStringUtils.cxx:136
 TQStringUtils.cxx:137
 TQStringUtils.cxx:138
 TQStringUtils.cxx:139
 TQStringUtils.cxx:140
 TQStringUtils.cxx:141
 TQStringUtils.cxx:142
 TQStringUtils.cxx:143
 TQStringUtils.cxx:144
 TQStringUtils.cxx:145
 TQStringUtils.cxx:146
 TQStringUtils.cxx:147
 TQStringUtils.cxx:148
 TQStringUtils.cxx:149
 TQStringUtils.cxx:150
 TQStringUtils.cxx:151
 TQStringUtils.cxx:152
 TQStringUtils.cxx:153
 TQStringUtils.cxx:154
 TQStringUtils.cxx:155
 TQStringUtils.cxx:156
 TQStringUtils.cxx:157
 TQStringUtils.cxx:158
 TQStringUtils.cxx:159
 TQStringUtils.cxx:160
 TQStringUtils.cxx:161
 TQStringUtils.cxx:162
 TQStringUtils.cxx:163
 TQStringUtils.cxx:164
 TQStringUtils.cxx:165
 TQStringUtils.cxx:166
 TQStringUtils.cxx:167
 TQStringUtils.cxx:168
 TQStringUtils.cxx:169
 TQStringUtils.cxx:170
 TQStringUtils.cxx:171
 TQStringUtils.cxx:172
 TQStringUtils.cxx:173
 TQStringUtils.cxx:174
 TQStringUtils.cxx:175
 TQStringUtils.cxx:176
 TQStringUtils.cxx:177
 TQStringUtils.cxx:178
 TQStringUtils.cxx:179
 TQStringUtils.cxx:180
 TQStringUtils.cxx:181
 TQStringUtils.cxx:182
 TQStringUtils.cxx:183
 TQStringUtils.cxx:184
 TQStringUtils.cxx:185
 TQStringUtils.cxx:186
 TQStringUtils.cxx:187
 TQStringUtils.cxx:188
 TQStringUtils.cxx:189
 TQStringUtils.cxx:190
 TQStringUtils.cxx:191
 TQStringUtils.cxx:192
 TQStringUtils.cxx:193
 TQStringUtils.cxx:194
 TQStringUtils.cxx:195
 TQStringUtils.cxx:196
 TQStringUtils.cxx:197
 TQStringUtils.cxx:198
 TQStringUtils.cxx:199
 TQStringUtils.cxx:200
 TQStringUtils.cxx:201
 TQStringUtils.cxx:202
 TQStringUtils.cxx:203
 TQStringUtils.cxx:204
 TQStringUtils.cxx:205
 TQStringUtils.cxx:206
 TQStringUtils.cxx:207
 TQStringUtils.cxx:208
 TQStringUtils.cxx:209
 TQStringUtils.cxx:210
 TQStringUtils.cxx:211
 TQStringUtils.cxx:212
 TQStringUtils.cxx:213
 TQStringUtils.cxx:214
 TQStringUtils.cxx:215
 TQStringUtils.cxx:216
 TQStringUtils.cxx:217
 TQStringUtils.cxx:218
 TQStringUtils.cxx:219
 TQStringUtils.cxx:220
 TQStringUtils.cxx:221
 TQStringUtils.cxx:222
 TQStringUtils.cxx:223
 TQStringUtils.cxx:224
 TQStringUtils.cxx:225
 TQStringUtils.cxx:226
 TQStringUtils.cxx:227
 TQStringUtils.cxx:228
 TQStringUtils.cxx:229
 TQStringUtils.cxx:230
 TQStringUtils.cxx:231
 TQStringUtils.cxx:232
 TQStringUtils.cxx:233
 TQStringUtils.cxx:234
 TQStringUtils.cxx:235
 TQStringUtils.cxx:236
 TQStringUtils.cxx:237
 TQStringUtils.cxx:238
 TQStringUtils.cxx:239
 TQStringUtils.cxx:240
 TQStringUtils.cxx:241
 TQStringUtils.cxx:242
 TQStringUtils.cxx:243
 TQStringUtils.cxx:244
 TQStringUtils.cxx:245
 TQStringUtils.cxx:246
 TQStringUtils.cxx:247
 TQStringUtils.cxx:248
 TQStringUtils.cxx:249
 TQStringUtils.cxx:250
 TQStringUtils.cxx:251
 TQStringUtils.cxx:252
 TQStringUtils.cxx:253
 TQStringUtils.cxx:254
 TQStringUtils.cxx:255
 TQStringUtils.cxx:256
 TQStringUtils.cxx:257
 TQStringUtils.cxx:258
 TQStringUtils.cxx:259
 TQStringUtils.cxx:260
 TQStringUtils.cxx:261
 TQStringUtils.cxx:262
 TQStringUtils.cxx:263
 TQStringUtils.cxx:264
 TQStringUtils.cxx:265
 TQStringUtils.cxx:266
 TQStringUtils.cxx:267
 TQStringUtils.cxx:268
 TQStringUtils.cxx:269
 TQStringUtils.cxx:270
 TQStringUtils.cxx:271
 TQStringUtils.cxx:272
 TQStringUtils.cxx:273
 TQStringUtils.cxx:274
 TQStringUtils.cxx:275
 TQStringUtils.cxx:276
 TQStringUtils.cxx:277
 TQStringUtils.cxx:278
 TQStringUtils.cxx:279
 TQStringUtils.cxx:280
 TQStringUtils.cxx:281
 TQStringUtils.cxx:282
 TQStringUtils.cxx:283
 TQStringUtils.cxx:284
 TQStringUtils.cxx:285
 TQStringUtils.cxx:286
 TQStringUtils.cxx:287
 TQStringUtils.cxx:288
 TQStringUtils.cxx:289
 TQStringUtils.cxx:290
 TQStringUtils.cxx:291
 TQStringUtils.cxx:292
 TQStringUtils.cxx:293
 TQStringUtils.cxx:294
 TQStringUtils.cxx:295
 TQStringUtils.cxx:296
 TQStringUtils.cxx:297
 TQStringUtils.cxx:298
 TQStringUtils.cxx:299
 TQStringUtils.cxx:300
 TQStringUtils.cxx:301
 TQStringUtils.cxx:302
 TQStringUtils.cxx:303
 TQStringUtils.cxx:304
 TQStringUtils.cxx:305
 TQStringUtils.cxx:306
 TQStringUtils.cxx:307
 TQStringUtils.cxx:308
 TQStringUtils.cxx:309
 TQStringUtils.cxx:310
 TQStringUtils.cxx:311
 TQStringUtils.cxx:312
 TQStringUtils.cxx:313
 TQStringUtils.cxx:314
 TQStringUtils.cxx:315
 TQStringUtils.cxx:316
 TQStringUtils.cxx:317
 TQStringUtils.cxx:318
 TQStringUtils.cxx:319
 TQStringUtils.cxx:320
 TQStringUtils.cxx:321
 TQStringUtils.cxx:322
 TQStringUtils.cxx:323
 TQStringUtils.cxx:324
 TQStringUtils.cxx:325
 TQStringUtils.cxx:326
 TQStringUtils.cxx:327
 TQStringUtils.cxx:328
 TQStringUtils.cxx:329
 TQStringUtils.cxx:330
 TQStringUtils.cxx:331
 TQStringUtils.cxx:332
 TQStringUtils.cxx:333
 TQStringUtils.cxx:334
 TQStringUtils.cxx:335
 TQStringUtils.cxx:336
 TQStringUtils.cxx:337
 TQStringUtils.cxx:338
 TQStringUtils.cxx:339
 TQStringUtils.cxx:340
 TQStringUtils.cxx:341
 TQStringUtils.cxx:342
 TQStringUtils.cxx:343
 TQStringUtils.cxx:344
 TQStringUtils.cxx:345
 TQStringUtils.cxx:346
 TQStringUtils.cxx:347
 TQStringUtils.cxx:348
 TQStringUtils.cxx:349
 TQStringUtils.cxx:350
 TQStringUtils.cxx:351
 TQStringUtils.cxx:352
 TQStringUtils.cxx:353
 TQStringUtils.cxx:354
 TQStringUtils.cxx:355
 TQStringUtils.cxx:356
 TQStringUtils.cxx:357
 TQStringUtils.cxx:358
 TQStringUtils.cxx:359
 TQStringUtils.cxx:360
 TQStringUtils.cxx:361
 TQStringUtils.cxx:362
 TQStringUtils.cxx:363
 TQStringUtils.cxx:364
 TQStringUtils.cxx:365
 TQStringUtils.cxx:366
 TQStringUtils.cxx:367
 TQStringUtils.cxx:368
 TQStringUtils.cxx:369
 TQStringUtils.cxx:370
 TQStringUtils.cxx:371
 TQStringUtils.cxx:372
 TQStringUtils.cxx:373
 TQStringUtils.cxx:374
 TQStringUtils.cxx:375
 TQStringUtils.cxx:376
 TQStringUtils.cxx:377
 TQStringUtils.cxx:378
 TQStringUtils.cxx:379
 TQStringUtils.cxx:380
 TQStringUtils.cxx:381
 TQStringUtils.cxx:382
 TQStringUtils.cxx:383
 TQStringUtils.cxx:384
 TQStringUtils.cxx:385
 TQStringUtils.cxx:386
 TQStringUtils.cxx:387
 TQStringUtils.cxx:388
 TQStringUtils.cxx:389
 TQStringUtils.cxx:390
 TQStringUtils.cxx:391
 TQStringUtils.cxx:392
 TQStringUtils.cxx:393
 TQStringUtils.cxx:394
 TQStringUtils.cxx:395
 TQStringUtils.cxx:396
 TQStringUtils.cxx:397
 TQStringUtils.cxx:398
 TQStringUtils.cxx:399
 TQStringUtils.cxx:400
 TQStringUtils.cxx:401
 TQStringUtils.cxx:402
 TQStringUtils.cxx:403
 TQStringUtils.cxx:404
 TQStringUtils.cxx:405
 TQStringUtils.cxx:406
 TQStringUtils.cxx:407
 TQStringUtils.cxx:408
 TQStringUtils.cxx:409
 TQStringUtils.cxx:410
 TQStringUtils.cxx:411
 TQStringUtils.cxx:412
 TQStringUtils.cxx:413
 TQStringUtils.cxx:414
 TQStringUtils.cxx:415
 TQStringUtils.cxx:416
 TQStringUtils.cxx:417
 TQStringUtils.cxx:418
 TQStringUtils.cxx:419
 TQStringUtils.cxx:420
 TQStringUtils.cxx:421
 TQStringUtils.cxx:422
 TQStringUtils.cxx:423
 TQStringUtils.cxx:424
 TQStringUtils.cxx:425
 TQStringUtils.cxx:426
 TQStringUtils.cxx:427
 TQStringUtils.cxx:428
 TQStringUtils.cxx:429
 TQStringUtils.cxx:430
 TQStringUtils.cxx:431
 TQStringUtils.cxx:432
 TQStringUtils.cxx:433
 TQStringUtils.cxx:434
 TQStringUtils.cxx:435
 TQStringUtils.cxx:436
 TQStringUtils.cxx:437
 TQStringUtils.cxx:438
 TQStringUtils.cxx:439
 TQStringUtils.cxx:440
 TQStringUtils.cxx:441
 TQStringUtils.cxx:442
 TQStringUtils.cxx:443
 TQStringUtils.cxx:444
 TQStringUtils.cxx:445
 TQStringUtils.cxx:446
 TQStringUtils.cxx:447
 TQStringUtils.cxx:448
 TQStringUtils.cxx:449
 TQStringUtils.cxx:450
 TQStringUtils.cxx:451
 TQStringUtils.cxx:452
 TQStringUtils.cxx:453
 TQStringUtils.cxx:454
 TQStringUtils.cxx:455
 TQStringUtils.cxx:456
 TQStringUtils.cxx:457
 TQStringUtils.cxx:458
 TQStringUtils.cxx:459
 TQStringUtils.cxx:460
 TQStringUtils.cxx:461
 TQStringUtils.cxx:462
 TQStringUtils.cxx:463
 TQStringUtils.cxx:464
 TQStringUtils.cxx:465
 TQStringUtils.cxx:466
 TQStringUtils.cxx:467
 TQStringUtils.cxx:468
 TQStringUtils.cxx:469
 TQStringUtils.cxx:470
 TQStringUtils.cxx:471
 TQStringUtils.cxx:472
 TQStringUtils.cxx:473
 TQStringUtils.cxx:474
 TQStringUtils.cxx:475
 TQStringUtils.cxx:476
 TQStringUtils.cxx:477
 TQStringUtils.cxx:478
 TQStringUtils.cxx:479
 TQStringUtils.cxx:480
 TQStringUtils.cxx:481
 TQStringUtils.cxx:482
 TQStringUtils.cxx:483
 TQStringUtils.cxx:484
 TQStringUtils.cxx:485
 TQStringUtils.cxx:486
 TQStringUtils.cxx:487
 TQStringUtils.cxx:488
 TQStringUtils.cxx:489
 TQStringUtils.cxx:490
 TQStringUtils.cxx:491
 TQStringUtils.cxx:492
 TQStringUtils.cxx:493
 TQStringUtils.cxx:494
 TQStringUtils.cxx:495
 TQStringUtils.cxx:496
 TQStringUtils.cxx:497
 TQStringUtils.cxx:498
 TQStringUtils.cxx:499
 TQStringUtils.cxx:500
 TQStringUtils.cxx:501
 TQStringUtils.cxx:502
 TQStringUtils.cxx:503
 TQStringUtils.cxx:504
 TQStringUtils.cxx:505
 TQStringUtils.cxx:506
 TQStringUtils.cxx:507
 TQStringUtils.cxx:508
 TQStringUtils.cxx:509
 TQStringUtils.cxx:510
 TQStringUtils.cxx:511
 TQStringUtils.cxx:512
 TQStringUtils.cxx:513
 TQStringUtils.cxx:514
 TQStringUtils.cxx:515
 TQStringUtils.cxx:516
 TQStringUtils.cxx:517
 TQStringUtils.cxx:518
 TQStringUtils.cxx:519
 TQStringUtils.cxx:520
 TQStringUtils.cxx:521
 TQStringUtils.cxx:522
 TQStringUtils.cxx:523
 TQStringUtils.cxx:524
 TQStringUtils.cxx:525
 TQStringUtils.cxx:526
 TQStringUtils.cxx:527
 TQStringUtils.cxx:528
 TQStringUtils.cxx:529
 TQStringUtils.cxx:530
 TQStringUtils.cxx:531
 TQStringUtils.cxx:532
 TQStringUtils.cxx:533
 TQStringUtils.cxx:534
 TQStringUtils.cxx:535
 TQStringUtils.cxx:536
 TQStringUtils.cxx:537
 TQStringUtils.cxx:538
 TQStringUtils.cxx:539
 TQStringUtils.cxx:540
 TQStringUtils.cxx:541
 TQStringUtils.cxx:542
 TQStringUtils.cxx:543
 TQStringUtils.cxx:544
 TQStringUtils.cxx:545
 TQStringUtils.cxx:546
 TQStringUtils.cxx:547
 TQStringUtils.cxx:548
 TQStringUtils.cxx:549
 TQStringUtils.cxx:550
 TQStringUtils.cxx:551
 TQStringUtils.cxx:552
 TQStringUtils.cxx:553
 TQStringUtils.cxx:554
 TQStringUtils.cxx:555
 TQStringUtils.cxx:556
 TQStringUtils.cxx:557
 TQStringUtils.cxx:558
 TQStringUtils.cxx:559
 TQStringUtils.cxx:560
 TQStringUtils.cxx:561
 TQStringUtils.cxx:562
 TQStringUtils.cxx:563
 TQStringUtils.cxx:564
 TQStringUtils.cxx:565
 TQStringUtils.cxx:566
 TQStringUtils.cxx:567
 TQStringUtils.cxx:568
 TQStringUtils.cxx:569
 TQStringUtils.cxx:570
 TQStringUtils.cxx:571
 TQStringUtils.cxx:572
 TQStringUtils.cxx:573
 TQStringUtils.cxx:574
 TQStringUtils.cxx:575
 TQStringUtils.cxx:576
 TQStringUtils.cxx:577
 TQStringUtils.cxx:578
 TQStringUtils.cxx:579
 TQStringUtils.cxx:580
 TQStringUtils.cxx:581
 TQStringUtils.cxx:582
 TQStringUtils.cxx:583
 TQStringUtils.cxx:584
 TQStringUtils.cxx:585
 TQStringUtils.cxx:586
 TQStringUtils.cxx:587
 TQStringUtils.cxx:588
 TQStringUtils.cxx:589
 TQStringUtils.cxx:590
 TQStringUtils.cxx:591
 TQStringUtils.cxx:592
 TQStringUtils.cxx:593
 TQStringUtils.cxx:594
 TQStringUtils.cxx:595
 TQStringUtils.cxx:596
 TQStringUtils.cxx:597
 TQStringUtils.cxx:598
 TQStringUtils.cxx:599
 TQStringUtils.cxx:600
 TQStringUtils.cxx:601
 TQStringUtils.cxx:602
 TQStringUtils.cxx:603
 TQStringUtils.cxx:604
 TQStringUtils.cxx:605
 TQStringUtils.cxx:606
 TQStringUtils.cxx:607
 TQStringUtils.cxx:608
 TQStringUtils.cxx:609
 TQStringUtils.cxx:610
 TQStringUtils.cxx:611
 TQStringUtils.cxx:612
 TQStringUtils.cxx:613
 TQStringUtils.cxx:614
 TQStringUtils.cxx:615
 TQStringUtils.cxx:616
 TQStringUtils.cxx:617
 TQStringUtils.cxx:618
 TQStringUtils.cxx:619
 TQStringUtils.cxx:620
 TQStringUtils.cxx:621
 TQStringUtils.cxx:622
 TQStringUtils.cxx:623
 TQStringUtils.cxx:624
 TQStringUtils.cxx:625
 TQStringUtils.cxx:626
 TQStringUtils.cxx:627
 TQStringUtils.cxx:628
 TQStringUtils.cxx:629
 TQStringUtils.cxx:630
 TQStringUtils.cxx:631
 TQStringUtils.cxx:632
 TQStringUtils.cxx:633
 TQStringUtils.cxx:634
 TQStringUtils.cxx:635
 TQStringUtils.cxx:636
 TQStringUtils.cxx:637
 TQStringUtils.cxx:638
 TQStringUtils.cxx:639
 TQStringUtils.cxx:640
 TQStringUtils.cxx:641
 TQStringUtils.cxx:642
 TQStringUtils.cxx:643
 TQStringUtils.cxx:644
 TQStringUtils.cxx:645
 TQStringUtils.cxx:646
 TQStringUtils.cxx:647
 TQStringUtils.cxx:648
 TQStringUtils.cxx:649
 TQStringUtils.cxx:650
 TQStringUtils.cxx:651
 TQStringUtils.cxx:652
 TQStringUtils.cxx:653
 TQStringUtils.cxx:654
 TQStringUtils.cxx:655
 TQStringUtils.cxx:656
 TQStringUtils.cxx:657
 TQStringUtils.cxx:658
 TQStringUtils.cxx:659
 TQStringUtils.cxx:660
 TQStringUtils.cxx:661
 TQStringUtils.cxx:662
 TQStringUtils.cxx:663
 TQStringUtils.cxx:664
 TQStringUtils.cxx:665
 TQStringUtils.cxx:666
 TQStringUtils.cxx:667
 TQStringUtils.cxx:668
 TQStringUtils.cxx:669
 TQStringUtils.cxx:670
 TQStringUtils.cxx:671
 TQStringUtils.cxx:672
 TQStringUtils.cxx:673
 TQStringUtils.cxx:674
 TQStringUtils.cxx:675
 TQStringUtils.cxx:676
 TQStringUtils.cxx:677
 TQStringUtils.cxx:678
 TQStringUtils.cxx:679
 TQStringUtils.cxx:680
 TQStringUtils.cxx:681
 TQStringUtils.cxx:682
 TQStringUtils.cxx:683
 TQStringUtils.cxx:684
 TQStringUtils.cxx:685
 TQStringUtils.cxx:686
 TQStringUtils.cxx:687
 TQStringUtils.cxx:688
 TQStringUtils.cxx:689
 TQStringUtils.cxx:690
 TQStringUtils.cxx:691
 TQStringUtils.cxx:692
 TQStringUtils.cxx:693
 TQStringUtils.cxx:694
 TQStringUtils.cxx:695
 TQStringUtils.cxx:696
 TQStringUtils.cxx:697
 TQStringUtils.cxx:698
 TQStringUtils.cxx:699
 TQStringUtils.cxx:700
 TQStringUtils.cxx:701
 TQStringUtils.cxx:702
 TQStringUtils.cxx:703
 TQStringUtils.cxx:704
 TQStringUtils.cxx:705
 TQStringUtils.cxx:706
 TQStringUtils.cxx:707
 TQStringUtils.cxx:708
 TQStringUtils.cxx:709
 TQStringUtils.cxx:710
 TQStringUtils.cxx:711
 TQStringUtils.cxx:712
 TQStringUtils.cxx:713
 TQStringUtils.cxx:714
 TQStringUtils.cxx:715
 TQStringUtils.cxx:716
 TQStringUtils.cxx:717
 TQStringUtils.cxx:718
 TQStringUtils.cxx:719
 TQStringUtils.cxx:720
 TQStringUtils.cxx:721
 TQStringUtils.cxx:722
 TQStringUtils.cxx:723
 TQStringUtils.cxx:724
 TQStringUtils.cxx:725
 TQStringUtils.cxx:726
 TQStringUtils.cxx:727
 TQStringUtils.cxx:728
 TQStringUtils.cxx:729
 TQStringUtils.cxx:730
 TQStringUtils.cxx:731
 TQStringUtils.cxx:732
 TQStringUtils.cxx:733
 TQStringUtils.cxx:734
 TQStringUtils.cxx:735
 TQStringUtils.cxx:736
 TQStringUtils.cxx:737
 TQStringUtils.cxx:738
 TQStringUtils.cxx:739
 TQStringUtils.cxx:740
 TQStringUtils.cxx:741
 TQStringUtils.cxx:742
 TQStringUtils.cxx:743
 TQStringUtils.cxx:744
 TQStringUtils.cxx:745
 TQStringUtils.cxx:746
 TQStringUtils.cxx:747
 TQStringUtils.cxx:748
 TQStringUtils.cxx:749
 TQStringUtils.cxx:750
 TQStringUtils.cxx:751
 TQStringUtils.cxx:752
 TQStringUtils.cxx:753
 TQStringUtils.cxx:754
 TQStringUtils.cxx:755
 TQStringUtils.cxx:756
 TQStringUtils.cxx:757
 TQStringUtils.cxx:758
 TQStringUtils.cxx:759
 TQStringUtils.cxx:760
 TQStringUtils.cxx:761
 TQStringUtils.cxx:762
 TQStringUtils.cxx:763
 TQStringUtils.cxx:764
 TQStringUtils.cxx:765
 TQStringUtils.cxx:766
 TQStringUtils.cxx:767
 TQStringUtils.cxx:768
 TQStringUtils.cxx:769
 TQStringUtils.cxx:770
 TQStringUtils.cxx:771
 TQStringUtils.cxx:772
 TQStringUtils.cxx:773
 TQStringUtils.cxx:774
 TQStringUtils.cxx:775
 TQStringUtils.cxx:776
 TQStringUtils.cxx:777
 TQStringUtils.cxx:778
 TQStringUtils.cxx:779
 TQStringUtils.cxx:780
 TQStringUtils.cxx:781
 TQStringUtils.cxx:782
 TQStringUtils.cxx:783
 TQStringUtils.cxx:784
 TQStringUtils.cxx:785
 TQStringUtils.cxx:786
 TQStringUtils.cxx:787
 TQStringUtils.cxx:788
 TQStringUtils.cxx:789
 TQStringUtils.cxx:790
 TQStringUtils.cxx:791
 TQStringUtils.cxx:792
 TQStringUtils.cxx:793
 TQStringUtils.cxx:794
 TQStringUtils.cxx:795
 TQStringUtils.cxx:796
 TQStringUtils.cxx:797
 TQStringUtils.cxx:798
 TQStringUtils.cxx:799
 TQStringUtils.cxx:800
 TQStringUtils.cxx:801
 TQStringUtils.cxx:802
 TQStringUtils.cxx:803
 TQStringUtils.cxx:804
 TQStringUtils.cxx:805
 TQStringUtils.cxx:806
 TQStringUtils.cxx:807
 TQStringUtils.cxx:808
 TQStringUtils.cxx:809
 TQStringUtils.cxx:810
 TQStringUtils.cxx:811
 TQStringUtils.cxx:812
 TQStringUtils.cxx:813
 TQStringUtils.cxx:814
 TQStringUtils.cxx:815
 TQStringUtils.cxx:816
 TQStringUtils.cxx:817
 TQStringUtils.cxx:818
 TQStringUtils.cxx:819
 TQStringUtils.cxx:820
 TQStringUtils.cxx:821
 TQStringUtils.cxx:822
 TQStringUtils.cxx:823
 TQStringUtils.cxx:824
 TQStringUtils.cxx:825
 TQStringUtils.cxx:826
 TQStringUtils.cxx:827
 TQStringUtils.cxx:828
 TQStringUtils.cxx:829
 TQStringUtils.cxx:830
 TQStringUtils.cxx:831
 TQStringUtils.cxx:832
 TQStringUtils.cxx:833
 TQStringUtils.cxx:834
 TQStringUtils.cxx:835
 TQStringUtils.cxx:836
 TQStringUtils.cxx:837
 TQStringUtils.cxx:838
 TQStringUtils.cxx:839
 TQStringUtils.cxx:840
 TQStringUtils.cxx:841
 TQStringUtils.cxx:842
 TQStringUtils.cxx:843
 TQStringUtils.cxx:844
 TQStringUtils.cxx:845
 TQStringUtils.cxx:846
 TQStringUtils.cxx:847
 TQStringUtils.cxx:848
 TQStringUtils.cxx:849
 TQStringUtils.cxx:850
 TQStringUtils.cxx:851
 TQStringUtils.cxx:852
 TQStringUtils.cxx:853
 TQStringUtils.cxx:854
 TQStringUtils.cxx:855
 TQStringUtils.cxx:856
 TQStringUtils.cxx:857
 TQStringUtils.cxx:858
 TQStringUtils.cxx:859
 TQStringUtils.cxx:860
 TQStringUtils.cxx:861
 TQStringUtils.cxx:862
 TQStringUtils.cxx:863
 TQStringUtils.cxx:864
 TQStringUtils.cxx:865
 TQStringUtils.cxx:866
 TQStringUtils.cxx:867
 TQStringUtils.cxx:868
 TQStringUtils.cxx:869
 TQStringUtils.cxx:870
 TQStringUtils.cxx:871
 TQStringUtils.cxx:872
 TQStringUtils.cxx:873
 TQStringUtils.cxx:874
 TQStringUtils.cxx:875
 TQStringUtils.cxx:876
 TQStringUtils.cxx:877
 TQStringUtils.cxx:878
 TQStringUtils.cxx:879
 TQStringUtils.cxx:880
 TQStringUtils.cxx:881
 TQStringUtils.cxx:882
 TQStringUtils.cxx:883
 TQStringUtils.cxx:884
 TQStringUtils.cxx:885
 TQStringUtils.cxx:886
 TQStringUtils.cxx:887
 TQStringUtils.cxx:888
 TQStringUtils.cxx:889
 TQStringUtils.cxx:890
 TQStringUtils.cxx:891
 TQStringUtils.cxx:892
 TQStringUtils.cxx:893
 TQStringUtils.cxx:894
 TQStringUtils.cxx:895
 TQStringUtils.cxx:896
 TQStringUtils.cxx:897
 TQStringUtils.cxx:898
 TQStringUtils.cxx:899
 TQStringUtils.cxx:900
 TQStringUtils.cxx:901
 TQStringUtils.cxx:902
 TQStringUtils.cxx:903
 TQStringUtils.cxx:904
 TQStringUtils.cxx:905
 TQStringUtils.cxx:906
 TQStringUtils.cxx:907
 TQStringUtils.cxx:908
 TQStringUtils.cxx:909
 TQStringUtils.cxx:910
 TQStringUtils.cxx:911
 TQStringUtils.cxx:912
 TQStringUtils.cxx:913
 TQStringUtils.cxx:914
 TQStringUtils.cxx:915
 TQStringUtils.cxx:916
 TQStringUtils.cxx:917
 TQStringUtils.cxx:918
 TQStringUtils.cxx:919
 TQStringUtils.cxx:920
 TQStringUtils.cxx:921
 TQStringUtils.cxx:922
 TQStringUtils.cxx:923
 TQStringUtils.cxx:924
 TQStringUtils.cxx:925
 TQStringUtils.cxx:926
 TQStringUtils.cxx:927
 TQStringUtils.cxx:928
 TQStringUtils.cxx:929
 TQStringUtils.cxx:930
 TQStringUtils.cxx:931
 TQStringUtils.cxx:932
 TQStringUtils.cxx:933
 TQStringUtils.cxx:934
 TQStringUtils.cxx:935
 TQStringUtils.cxx:936
 TQStringUtils.cxx:937
 TQStringUtils.cxx:938
 TQStringUtils.cxx:939
 TQStringUtils.cxx:940
 TQStringUtils.cxx:941
 TQStringUtils.cxx:942
 TQStringUtils.cxx:943
 TQStringUtils.cxx:944
 TQStringUtils.cxx:945
 TQStringUtils.cxx:946
 TQStringUtils.cxx:947
 TQStringUtils.cxx:948
 TQStringUtils.cxx:949
 TQStringUtils.cxx:950
 TQStringUtils.cxx:951
 TQStringUtils.cxx:952
 TQStringUtils.cxx:953
 TQStringUtils.cxx:954
 TQStringUtils.cxx:955
 TQStringUtils.cxx:956
 TQStringUtils.cxx:957
 TQStringUtils.cxx:958
 TQStringUtils.cxx:959
 TQStringUtils.cxx:960
 TQStringUtils.cxx:961
 TQStringUtils.cxx:962
 TQStringUtils.cxx:963
 TQStringUtils.cxx:964
 TQStringUtils.cxx:965
 TQStringUtils.cxx:966
 TQStringUtils.cxx:967
 TQStringUtils.cxx:968
 TQStringUtils.cxx:969
 TQStringUtils.cxx:970
 TQStringUtils.cxx:971
 TQStringUtils.cxx:972
 TQStringUtils.cxx:973
 TQStringUtils.cxx:974
 TQStringUtils.cxx:975
 TQStringUtils.cxx:976
 TQStringUtils.cxx:977
 TQStringUtils.cxx:978
 TQStringUtils.cxx:979
 TQStringUtils.cxx:980
 TQStringUtils.cxx:981
 TQStringUtils.cxx:982
 TQStringUtils.cxx:983
 TQStringUtils.cxx:984
 TQStringUtils.cxx:985
 TQStringUtils.cxx:986
 TQStringUtils.cxx:987
 TQStringUtils.cxx:988
 TQStringUtils.cxx:989
 TQStringUtils.cxx:990
 TQStringUtils.cxx:991
 TQStringUtils.cxx:992
 TQStringUtils.cxx:993
 TQStringUtils.cxx:994
 TQStringUtils.cxx:995
 TQStringUtils.cxx:996
 TQStringUtils.cxx:997
 TQStringUtils.cxx:998
 TQStringUtils.cxx:999
 TQStringUtils.cxx:1000
 TQStringUtils.cxx:1001
 TQStringUtils.cxx:1002
 TQStringUtils.cxx:1003
 TQStringUtils.cxx:1004
 TQStringUtils.cxx:1005
 TQStringUtils.cxx:1006
 TQStringUtils.cxx:1007
 TQStringUtils.cxx:1008
 TQStringUtils.cxx:1009
 TQStringUtils.cxx:1010
 TQStringUtils.cxx:1011
 TQStringUtils.cxx:1012
 TQStringUtils.cxx:1013
 TQStringUtils.cxx:1014
 TQStringUtils.cxx:1015
 TQStringUtils.cxx:1016
 TQStringUtils.cxx:1017
 TQStringUtils.cxx:1018
 TQStringUtils.cxx:1019
 TQStringUtils.cxx:1020
 TQStringUtils.cxx:1021
 TQStringUtils.cxx:1022
 TQStringUtils.cxx:1023
 TQStringUtils.cxx:1024
 TQStringUtils.cxx:1025
 TQStringUtils.cxx:1026
 TQStringUtils.cxx:1027
 TQStringUtils.cxx:1028
 TQStringUtils.cxx:1029
 TQStringUtils.cxx:1030
 TQStringUtils.cxx:1031
 TQStringUtils.cxx:1032
 TQStringUtils.cxx:1033
 TQStringUtils.cxx:1034
 TQStringUtils.cxx:1035
 TQStringUtils.cxx:1036
 TQStringUtils.cxx:1037
 TQStringUtils.cxx:1038
 TQStringUtils.cxx:1039
 TQStringUtils.cxx:1040
 TQStringUtils.cxx:1041
 TQStringUtils.cxx:1042
 TQStringUtils.cxx:1043
 TQStringUtils.cxx:1044
 TQStringUtils.cxx:1045
 TQStringUtils.cxx:1046
 TQStringUtils.cxx:1047
 TQStringUtils.cxx:1048
 TQStringUtils.cxx:1049
 TQStringUtils.cxx:1050
 TQStringUtils.cxx:1051
 TQStringUtils.cxx:1052
 TQStringUtils.cxx:1053
 TQStringUtils.cxx:1054
 TQStringUtils.cxx:1055
 TQStringUtils.cxx:1056
 TQStringUtils.cxx:1057
 TQStringUtils.cxx:1058
 TQStringUtils.cxx:1059
 TQStringUtils.cxx:1060
 TQStringUtils.cxx:1061
 TQStringUtils.cxx:1062
 TQStringUtils.cxx:1063
 TQStringUtils.cxx:1064
 TQStringUtils.cxx:1065
 TQStringUtils.cxx:1066
 TQStringUtils.cxx:1067
 TQStringUtils.cxx:1068
 TQStringUtils.cxx:1069
 TQStringUtils.cxx:1070
 TQStringUtils.cxx:1071
 TQStringUtils.cxx:1072
 TQStringUtils.cxx:1073
 TQStringUtils.cxx:1074
 TQStringUtils.cxx:1075
 TQStringUtils.cxx:1076
 TQStringUtils.cxx:1077
 TQStringUtils.cxx:1078
 TQStringUtils.cxx:1079
 TQStringUtils.cxx:1080
 TQStringUtils.cxx:1081
 TQStringUtils.cxx:1082
 TQStringUtils.cxx:1083
 TQStringUtils.cxx:1084
 TQStringUtils.cxx:1085
 TQStringUtils.cxx:1086
 TQStringUtils.cxx:1087
 TQStringUtils.cxx:1088
 TQStringUtils.cxx:1089
 TQStringUtils.cxx:1090
 TQStringUtils.cxx:1091
 TQStringUtils.cxx:1092
 TQStringUtils.cxx:1093
 TQStringUtils.cxx:1094
 TQStringUtils.cxx:1095
 TQStringUtils.cxx:1096
 TQStringUtils.cxx:1097
 TQStringUtils.cxx:1098
 TQStringUtils.cxx:1099
 TQStringUtils.cxx:1100
 TQStringUtils.cxx:1101
 TQStringUtils.cxx:1102
 TQStringUtils.cxx:1103
 TQStringUtils.cxx:1104
 TQStringUtils.cxx:1105
 TQStringUtils.cxx:1106
 TQStringUtils.cxx:1107
 TQStringUtils.cxx:1108
 TQStringUtils.cxx:1109
 TQStringUtils.cxx:1110
 TQStringUtils.cxx:1111
 TQStringUtils.cxx:1112
 TQStringUtils.cxx:1113
 TQStringUtils.cxx:1114
 TQStringUtils.cxx:1115
 TQStringUtils.cxx:1116
 TQStringUtils.cxx:1117
 TQStringUtils.cxx:1118
 TQStringUtils.cxx:1119
 TQStringUtils.cxx:1120
 TQStringUtils.cxx:1121
 TQStringUtils.cxx:1122
 TQStringUtils.cxx:1123
 TQStringUtils.cxx:1124
 TQStringUtils.cxx:1125
 TQStringUtils.cxx:1126
 TQStringUtils.cxx:1127
 TQStringUtils.cxx:1128
 TQStringUtils.cxx:1129
 TQStringUtils.cxx:1130
 TQStringUtils.cxx:1131
 TQStringUtils.cxx:1132
 TQStringUtils.cxx:1133
 TQStringUtils.cxx:1134
 TQStringUtils.cxx:1135
 TQStringUtils.cxx:1136
 TQStringUtils.cxx:1137
 TQStringUtils.cxx:1138
 TQStringUtils.cxx:1139
 TQStringUtils.cxx:1140
 TQStringUtils.cxx:1141
 TQStringUtils.cxx:1142
 TQStringUtils.cxx:1143
 TQStringUtils.cxx:1144
 TQStringUtils.cxx:1145
 TQStringUtils.cxx:1146
 TQStringUtils.cxx:1147
 TQStringUtils.cxx:1148
 TQStringUtils.cxx:1149
 TQStringUtils.cxx:1150
 TQStringUtils.cxx:1151
 TQStringUtils.cxx:1152
 TQStringUtils.cxx:1153
 TQStringUtils.cxx:1154
 TQStringUtils.cxx:1155
 TQStringUtils.cxx:1156
 TQStringUtils.cxx:1157
 TQStringUtils.cxx:1158
 TQStringUtils.cxx:1159
 TQStringUtils.cxx:1160
 TQStringUtils.cxx:1161
 TQStringUtils.cxx:1162
 TQStringUtils.cxx:1163
 TQStringUtils.cxx:1164
 TQStringUtils.cxx:1165
 TQStringUtils.cxx:1166
 TQStringUtils.cxx:1167
 TQStringUtils.cxx:1168
 TQStringUtils.cxx:1169
 TQStringUtils.cxx:1170
 TQStringUtils.cxx:1171
 TQStringUtils.cxx:1172
 TQStringUtils.cxx:1173
 TQStringUtils.cxx:1174
 TQStringUtils.cxx:1175
 TQStringUtils.cxx:1176
 TQStringUtils.cxx:1177
 TQStringUtils.cxx:1178
 TQStringUtils.cxx:1179
 TQStringUtils.cxx:1180
 TQStringUtils.cxx:1181
 TQStringUtils.cxx:1182
 TQStringUtils.cxx:1183
 TQStringUtils.cxx:1184
 TQStringUtils.cxx:1185
 TQStringUtils.cxx:1186
 TQStringUtils.cxx:1187
 TQStringUtils.cxx:1188
 TQStringUtils.cxx:1189
 TQStringUtils.cxx:1190
 TQStringUtils.cxx:1191
 TQStringUtils.cxx:1192
 TQStringUtils.cxx:1193
 TQStringUtils.cxx:1194
 TQStringUtils.cxx:1195
 TQStringUtils.cxx:1196
 TQStringUtils.cxx:1197
 TQStringUtils.cxx:1198
 TQStringUtils.cxx:1199
 TQStringUtils.cxx:1200
 TQStringUtils.cxx:1201
 TQStringUtils.cxx:1202
 TQStringUtils.cxx:1203
 TQStringUtils.cxx:1204
 TQStringUtils.cxx:1205
 TQStringUtils.cxx:1206
 TQStringUtils.cxx:1207
 TQStringUtils.cxx:1208
 TQStringUtils.cxx:1209
 TQStringUtils.cxx:1210
 TQStringUtils.cxx:1211
 TQStringUtils.cxx:1212
 TQStringUtils.cxx:1213
 TQStringUtils.cxx:1214
 TQStringUtils.cxx:1215
 TQStringUtils.cxx:1216
 TQStringUtils.cxx:1217
 TQStringUtils.cxx:1218
 TQStringUtils.cxx:1219
 TQStringUtils.cxx:1220
 TQStringUtils.cxx:1221
 TQStringUtils.cxx:1222
 TQStringUtils.cxx:1223
 TQStringUtils.cxx:1224
 TQStringUtils.cxx:1225
 TQStringUtils.cxx:1226
 TQStringUtils.cxx:1227
 TQStringUtils.cxx:1228
 TQStringUtils.cxx:1229
 TQStringUtils.cxx:1230
 TQStringUtils.cxx:1231
 TQStringUtils.cxx:1232
 TQStringUtils.cxx:1233
 TQStringUtils.cxx:1234
 TQStringUtils.cxx:1235
 TQStringUtils.cxx:1236
 TQStringUtils.cxx:1237
 TQStringUtils.cxx:1238
 TQStringUtils.cxx:1239
 TQStringUtils.cxx:1240
 TQStringUtils.cxx:1241
 TQStringUtils.cxx:1242
 TQStringUtils.cxx:1243
 TQStringUtils.cxx:1244
 TQStringUtils.cxx:1245
 TQStringUtils.cxx:1246
 TQStringUtils.cxx:1247
 TQStringUtils.cxx:1248
 TQStringUtils.cxx:1249
 TQStringUtils.cxx:1250
 TQStringUtils.cxx:1251
 TQStringUtils.cxx:1252
 TQStringUtils.cxx:1253
 TQStringUtils.cxx:1254
 TQStringUtils.cxx:1255
 TQStringUtils.cxx:1256
 TQStringUtils.cxx:1257
 TQStringUtils.cxx:1258
 TQStringUtils.cxx:1259
 TQStringUtils.cxx:1260
 TQStringUtils.cxx:1261
 TQStringUtils.cxx:1262
 TQStringUtils.cxx:1263
 TQStringUtils.cxx:1264
 TQStringUtils.cxx:1265
 TQStringUtils.cxx:1266
 TQStringUtils.cxx:1267
 TQStringUtils.cxx:1268
 TQStringUtils.cxx:1269
 TQStringUtils.cxx:1270
 TQStringUtils.cxx:1271
 TQStringUtils.cxx:1272
 TQStringUtils.cxx:1273
 TQStringUtils.cxx:1274
 TQStringUtils.cxx:1275
 TQStringUtils.cxx:1276
 TQStringUtils.cxx:1277
 TQStringUtils.cxx:1278
 TQStringUtils.cxx:1279
 TQStringUtils.cxx:1280
 TQStringUtils.cxx:1281
 TQStringUtils.cxx:1282
 TQStringUtils.cxx:1283
 TQStringUtils.cxx:1284
 TQStringUtils.cxx:1285
 TQStringUtils.cxx:1286
 TQStringUtils.cxx:1287
 TQStringUtils.cxx:1288
 TQStringUtils.cxx:1289
 TQStringUtils.cxx:1290
 TQStringUtils.cxx:1291
 TQStringUtils.cxx:1292
 TQStringUtils.cxx:1293
 TQStringUtils.cxx:1294
 TQStringUtils.cxx:1295
 TQStringUtils.cxx:1296
 TQStringUtils.cxx:1297
 TQStringUtils.cxx:1298
 TQStringUtils.cxx:1299
 TQStringUtils.cxx:1300
 TQStringUtils.cxx:1301
 TQStringUtils.cxx:1302
 TQStringUtils.cxx:1303
 TQStringUtils.cxx:1304
 TQStringUtils.cxx:1305
 TQStringUtils.cxx:1306
 TQStringUtils.cxx:1307
 TQStringUtils.cxx:1308
 TQStringUtils.cxx:1309
 TQStringUtils.cxx:1310
 TQStringUtils.cxx:1311
 TQStringUtils.cxx:1312
 TQStringUtils.cxx:1313
 TQStringUtils.cxx:1314
 TQStringUtils.cxx:1315
 TQStringUtils.cxx:1316
 TQStringUtils.cxx:1317
 TQStringUtils.cxx:1318
 TQStringUtils.cxx:1319
 TQStringUtils.cxx:1320
 TQStringUtils.cxx:1321
 TQStringUtils.cxx:1322
 TQStringUtils.cxx:1323
 TQStringUtils.cxx:1324
 TQStringUtils.cxx:1325
 TQStringUtils.cxx:1326
 TQStringUtils.cxx:1327
 TQStringUtils.cxx:1328
 TQStringUtils.cxx:1329
 TQStringUtils.cxx:1330
 TQStringUtils.cxx:1331
 TQStringUtils.cxx:1332
 TQStringUtils.cxx:1333
 TQStringUtils.cxx:1334
 TQStringUtils.cxx:1335
 TQStringUtils.cxx:1336
 TQStringUtils.cxx:1337
 TQStringUtils.cxx:1338
 TQStringUtils.cxx:1339
 TQStringUtils.cxx:1340
 TQStringUtils.cxx:1341
 TQStringUtils.cxx:1342
 TQStringUtils.cxx:1343
 TQStringUtils.cxx:1344
 TQStringUtils.cxx:1345
 TQStringUtils.cxx:1346
 TQStringUtils.cxx:1347
 TQStringUtils.cxx:1348
 TQStringUtils.cxx:1349
 TQStringUtils.cxx:1350
 TQStringUtils.cxx:1351
 TQStringUtils.cxx:1352
 TQStringUtils.cxx:1353
 TQStringUtils.cxx:1354
 TQStringUtils.cxx:1355
 TQStringUtils.cxx:1356
 TQStringUtils.cxx:1357
 TQStringUtils.cxx:1358
 TQStringUtils.cxx:1359
 TQStringUtils.cxx:1360
 TQStringUtils.cxx:1361
 TQStringUtils.cxx:1362
 TQStringUtils.cxx:1363
 TQStringUtils.cxx:1364
 TQStringUtils.cxx:1365
 TQStringUtils.cxx:1366
 TQStringUtils.cxx:1367
 TQStringUtils.cxx:1368
 TQStringUtils.cxx:1369
 TQStringUtils.cxx:1370
 TQStringUtils.cxx:1371
 TQStringUtils.cxx:1372
 TQStringUtils.cxx:1373
 TQStringUtils.cxx:1374
 TQStringUtils.cxx:1375
 TQStringUtils.cxx:1376
 TQStringUtils.cxx:1377
 TQStringUtils.cxx:1378
 TQStringUtils.cxx:1379
 TQStringUtils.cxx:1380
 TQStringUtils.cxx:1381
 TQStringUtils.cxx:1382
 TQStringUtils.cxx:1383
 TQStringUtils.cxx:1384
 TQStringUtils.cxx:1385
 TQStringUtils.cxx:1386
 TQStringUtils.cxx:1387
 TQStringUtils.cxx:1388
 TQStringUtils.cxx:1389
 TQStringUtils.cxx:1390
 TQStringUtils.cxx:1391
 TQStringUtils.cxx:1392
 TQStringUtils.cxx:1393
 TQStringUtils.cxx:1394
 TQStringUtils.cxx:1395
 TQStringUtils.cxx:1396
 TQStringUtils.cxx:1397
 TQStringUtils.cxx:1398
 TQStringUtils.cxx:1399
 TQStringUtils.cxx:1400
 TQStringUtils.cxx:1401
 TQStringUtils.cxx:1402
 TQStringUtils.cxx:1403
 TQStringUtils.cxx:1404
 TQStringUtils.cxx:1405
 TQStringUtils.cxx:1406
 TQStringUtils.cxx:1407
 TQStringUtils.cxx:1408
 TQStringUtils.cxx:1409
 TQStringUtils.cxx:1410
 TQStringUtils.cxx:1411
 TQStringUtils.cxx:1412
 TQStringUtils.cxx:1413
 TQStringUtils.cxx:1414
 TQStringUtils.cxx:1415
 TQStringUtils.cxx:1416
 TQStringUtils.cxx:1417
 TQStringUtils.cxx:1418
 TQStringUtils.cxx:1419
 TQStringUtils.cxx:1420
 TQStringUtils.cxx:1421
 TQStringUtils.cxx:1422
 TQStringUtils.cxx:1423
 TQStringUtils.cxx:1424
 TQStringUtils.cxx:1425
 TQStringUtils.cxx:1426
 TQStringUtils.cxx:1427
 TQStringUtils.cxx:1428
 TQStringUtils.cxx:1429
 TQStringUtils.cxx:1430
 TQStringUtils.cxx:1431
 TQStringUtils.cxx:1432
 TQStringUtils.cxx:1433
 TQStringUtils.cxx:1434
 TQStringUtils.cxx:1435
 TQStringUtils.cxx:1436
 TQStringUtils.cxx:1437
 TQStringUtils.cxx:1438
 TQStringUtils.cxx:1439
 TQStringUtils.cxx:1440
 TQStringUtils.cxx:1441
 TQStringUtils.cxx:1442
 TQStringUtils.cxx:1443
 TQStringUtils.cxx:1444
 TQStringUtils.cxx:1445
 TQStringUtils.cxx:1446
 TQStringUtils.cxx:1447
 TQStringUtils.cxx:1448
 TQStringUtils.cxx:1449
 TQStringUtils.cxx:1450
 TQStringUtils.cxx:1451
 TQStringUtils.cxx:1452
 TQStringUtils.cxx:1453
 TQStringUtils.cxx:1454
 TQStringUtils.cxx:1455
 TQStringUtils.cxx:1456
 TQStringUtils.cxx:1457
 TQStringUtils.cxx:1458
 TQStringUtils.cxx:1459
 TQStringUtils.cxx:1460
 TQStringUtils.cxx:1461
 TQStringUtils.cxx:1462
 TQStringUtils.cxx:1463
 TQStringUtils.cxx:1464
 TQStringUtils.cxx:1465
 TQStringUtils.cxx:1466
 TQStringUtils.cxx:1467
 TQStringUtils.cxx:1468
 TQStringUtils.cxx:1469
 TQStringUtils.cxx:1470
 TQStringUtils.cxx:1471
 TQStringUtils.cxx:1472
 TQStringUtils.cxx:1473
 TQStringUtils.cxx:1474
 TQStringUtils.cxx:1475
 TQStringUtils.cxx:1476
 TQStringUtils.cxx:1477
 TQStringUtils.cxx:1478
 TQStringUtils.cxx:1479
 TQStringUtils.cxx:1480
 TQStringUtils.cxx:1481
 TQStringUtils.cxx:1482
 TQStringUtils.cxx:1483
 TQStringUtils.cxx:1484
 TQStringUtils.cxx:1485
 TQStringUtils.cxx:1486
 TQStringUtils.cxx:1487
 TQStringUtils.cxx:1488
 TQStringUtils.cxx:1489
 TQStringUtils.cxx:1490
 TQStringUtils.cxx:1491
 TQStringUtils.cxx:1492
 TQStringUtils.cxx:1493
 TQStringUtils.cxx:1494
 TQStringUtils.cxx:1495
 TQStringUtils.cxx:1496
 TQStringUtils.cxx:1497
 TQStringUtils.cxx:1498
 TQStringUtils.cxx:1499
 TQStringUtils.cxx:1500
 TQStringUtils.cxx:1501
 TQStringUtils.cxx:1502
 TQStringUtils.cxx:1503
 TQStringUtils.cxx:1504
 TQStringUtils.cxx:1505
 TQStringUtils.cxx:1506
 TQStringUtils.cxx:1507
 TQStringUtils.cxx:1508
 TQStringUtils.cxx:1509
 TQStringUtils.cxx:1510
 TQStringUtils.cxx:1511
 TQStringUtils.cxx:1512
 TQStringUtils.cxx:1513
 TQStringUtils.cxx:1514
 TQStringUtils.cxx:1515
 TQStringUtils.cxx:1516
 TQStringUtils.cxx:1517
 TQStringUtils.cxx:1518
 TQStringUtils.cxx:1519
 TQStringUtils.cxx:1520
 TQStringUtils.cxx:1521
 TQStringUtils.cxx:1522
 TQStringUtils.cxx:1523
 TQStringUtils.cxx:1524
 TQStringUtils.cxx:1525
 TQStringUtils.cxx:1526
 TQStringUtils.cxx:1527
 TQStringUtils.cxx:1528
 TQStringUtils.cxx:1529
 TQStringUtils.cxx:1530
 TQStringUtils.cxx:1531
 TQStringUtils.cxx:1532
 TQStringUtils.cxx:1533
 TQStringUtils.cxx:1534
 TQStringUtils.cxx:1535
 TQStringUtils.cxx:1536
 TQStringUtils.cxx:1537
 TQStringUtils.cxx:1538
 TQStringUtils.cxx:1539
 TQStringUtils.cxx:1540
 TQStringUtils.cxx:1541
 TQStringUtils.cxx:1542
 TQStringUtils.cxx:1543
 TQStringUtils.cxx:1544
 TQStringUtils.cxx:1545
 TQStringUtils.cxx:1546
 TQStringUtils.cxx:1547
 TQStringUtils.cxx:1548
 TQStringUtils.cxx:1549
 TQStringUtils.cxx:1550
 TQStringUtils.cxx:1551
 TQStringUtils.cxx:1552
 TQStringUtils.cxx:1553
 TQStringUtils.cxx:1554
 TQStringUtils.cxx:1555
 TQStringUtils.cxx:1556
 TQStringUtils.cxx:1557
 TQStringUtils.cxx:1558
 TQStringUtils.cxx:1559
 TQStringUtils.cxx:1560
 TQStringUtils.cxx:1561
 TQStringUtils.cxx:1562
 TQStringUtils.cxx:1563
 TQStringUtils.cxx:1564
 TQStringUtils.cxx:1565
 TQStringUtils.cxx:1566
 TQStringUtils.cxx:1567
 TQStringUtils.cxx:1568
 TQStringUtils.cxx:1569
 TQStringUtils.cxx:1570
 TQStringUtils.cxx:1571
 TQStringUtils.cxx:1572
 TQStringUtils.cxx:1573
 TQStringUtils.cxx:1574
 TQStringUtils.cxx:1575
 TQStringUtils.cxx:1576
 TQStringUtils.cxx:1577
 TQStringUtils.cxx:1578
 TQStringUtils.cxx:1579
 TQStringUtils.cxx:1580
 TQStringUtils.cxx:1581
 TQStringUtils.cxx:1582
 TQStringUtils.cxx:1583
 TQStringUtils.cxx:1584
 TQStringUtils.cxx:1585
 TQStringUtils.cxx:1586
 TQStringUtils.cxx:1587
 TQStringUtils.cxx:1588
 TQStringUtils.cxx:1589
 TQStringUtils.cxx:1590
 TQStringUtils.cxx:1591
 TQStringUtils.cxx:1592
 TQStringUtils.cxx:1593
 TQStringUtils.cxx:1594
 TQStringUtils.cxx:1595
 TQStringUtils.cxx:1596
 TQStringUtils.cxx:1597
 TQStringUtils.cxx:1598
 TQStringUtils.cxx:1599
 TQStringUtils.cxx:1600
 TQStringUtils.cxx:1601
 TQStringUtils.cxx:1602
 TQStringUtils.cxx:1603
 TQStringUtils.cxx:1604
 TQStringUtils.cxx:1605
 TQStringUtils.cxx:1606
 TQStringUtils.cxx:1607
 TQStringUtils.cxx:1608
 TQStringUtils.cxx:1609
 TQStringUtils.cxx:1610
 TQStringUtils.cxx:1611
 TQStringUtils.cxx:1612
 TQStringUtils.cxx:1613
 TQStringUtils.cxx:1614
 TQStringUtils.cxx:1615
 TQStringUtils.cxx:1616
 TQStringUtils.cxx:1617
 TQStringUtils.cxx:1618
 TQStringUtils.cxx:1619
 TQStringUtils.cxx:1620
 TQStringUtils.cxx:1621
 TQStringUtils.cxx:1622
 TQStringUtils.cxx:1623
 TQStringUtils.cxx:1624
 TQStringUtils.cxx:1625
 TQStringUtils.cxx:1626
 TQStringUtils.cxx:1627
 TQStringUtils.cxx:1628
 TQStringUtils.cxx:1629
 TQStringUtils.cxx:1630
 TQStringUtils.cxx:1631
 TQStringUtils.cxx:1632
 TQStringUtils.cxx:1633
 TQStringUtils.cxx:1634
 TQStringUtils.cxx:1635
 TQStringUtils.cxx:1636
 TQStringUtils.cxx:1637
 TQStringUtils.cxx:1638
 TQStringUtils.cxx:1639
 TQStringUtils.cxx:1640
 TQStringUtils.cxx:1641
 TQStringUtils.cxx:1642
 TQStringUtils.cxx:1643
 TQStringUtils.cxx:1644
 TQStringUtils.cxx:1645
 TQStringUtils.cxx:1646
 TQStringUtils.cxx:1647
 TQStringUtils.cxx:1648
 TQStringUtils.cxx:1649
 TQStringUtils.cxx:1650
 TQStringUtils.cxx:1651
 TQStringUtils.cxx:1652
 TQStringUtils.cxx:1653
 TQStringUtils.cxx:1654
 TQStringUtils.cxx:1655
 TQStringUtils.cxx:1656
 TQStringUtils.cxx:1657
 TQStringUtils.cxx:1658
 TQStringUtils.cxx:1659
 TQStringUtils.cxx:1660
 TQStringUtils.cxx:1661
 TQStringUtils.cxx:1662
 TQStringUtils.cxx:1663
 TQStringUtils.cxx:1664
 TQStringUtils.cxx:1665
 TQStringUtils.cxx:1666
 TQStringUtils.cxx:1667
 TQStringUtils.cxx:1668
 TQStringUtils.cxx:1669
 TQStringUtils.cxx:1670
 TQStringUtils.cxx:1671
 TQStringUtils.cxx:1672
 TQStringUtils.cxx:1673
 TQStringUtils.cxx:1674
 TQStringUtils.cxx:1675
 TQStringUtils.cxx:1676
 TQStringUtils.cxx:1677
 TQStringUtils.cxx:1678
 TQStringUtils.cxx:1679
 TQStringUtils.cxx:1680
 TQStringUtils.cxx:1681
 TQStringUtils.cxx:1682
 TQStringUtils.cxx:1683
 TQStringUtils.cxx:1684
 TQStringUtils.cxx:1685
 TQStringUtils.cxx:1686
 TQStringUtils.cxx:1687
 TQStringUtils.cxx:1688
 TQStringUtils.cxx:1689
 TQStringUtils.cxx:1690
 TQStringUtils.cxx:1691
 TQStringUtils.cxx:1692
 TQStringUtils.cxx:1693
 TQStringUtils.cxx:1694
 TQStringUtils.cxx:1695
 TQStringUtils.cxx:1696
 TQStringUtils.cxx:1697
 TQStringUtils.cxx:1698
 TQStringUtils.cxx:1699
 TQStringUtils.cxx:1700
 TQStringUtils.cxx:1701
 TQStringUtils.cxx:1702
 TQStringUtils.cxx:1703
 TQStringUtils.cxx:1704
 TQStringUtils.cxx:1705
 TQStringUtils.cxx:1706
 TQStringUtils.cxx:1707
 TQStringUtils.cxx:1708
 TQStringUtils.cxx:1709
 TQStringUtils.cxx:1710
 TQStringUtils.cxx:1711
 TQStringUtils.cxx:1712
 TQStringUtils.cxx:1713
 TQStringUtils.cxx:1714
 TQStringUtils.cxx:1715
 TQStringUtils.cxx:1716
 TQStringUtils.cxx:1717
 TQStringUtils.cxx:1718
 TQStringUtils.cxx:1719
 TQStringUtils.cxx:1720
 TQStringUtils.cxx:1721
 TQStringUtils.cxx:1722
 TQStringUtils.cxx:1723
 TQStringUtils.cxx:1724
 TQStringUtils.cxx:1725
 TQStringUtils.cxx:1726
 TQStringUtils.cxx:1727
 TQStringUtils.cxx:1728
 TQStringUtils.cxx:1729
 TQStringUtils.cxx:1730
 TQStringUtils.cxx:1731
 TQStringUtils.cxx:1732
 TQStringUtils.cxx:1733
 TQStringUtils.cxx:1734
 TQStringUtils.cxx:1735
 TQStringUtils.cxx:1736
 TQStringUtils.cxx:1737
 TQStringUtils.cxx:1738
 TQStringUtils.cxx:1739
 TQStringUtils.cxx:1740
 TQStringUtils.cxx:1741
 TQStringUtils.cxx:1742
 TQStringUtils.cxx:1743
 TQStringUtils.cxx:1744
 TQStringUtils.cxx:1745
 TQStringUtils.cxx:1746
 TQStringUtils.cxx:1747
 TQStringUtils.cxx:1748
 TQStringUtils.cxx:1749
 TQStringUtils.cxx:1750
 TQStringUtils.cxx:1751
 TQStringUtils.cxx:1752
 TQStringUtils.cxx:1753
 TQStringUtils.cxx:1754
 TQStringUtils.cxx:1755
 TQStringUtils.cxx:1756
 TQStringUtils.cxx:1757
 TQStringUtils.cxx:1758
 TQStringUtils.cxx:1759
 TQStringUtils.cxx:1760
 TQStringUtils.cxx:1761
 TQStringUtils.cxx:1762
 TQStringUtils.cxx:1763
 TQStringUtils.cxx:1764
 TQStringUtils.cxx:1765
 TQStringUtils.cxx:1766
 TQStringUtils.cxx:1767
 TQStringUtils.cxx:1768
 TQStringUtils.cxx:1769
 TQStringUtils.cxx:1770
 TQStringUtils.cxx:1771
 TQStringUtils.cxx:1772
 TQStringUtils.cxx:1773
 TQStringUtils.cxx:1774
 TQStringUtils.cxx:1775
 TQStringUtils.cxx:1776
 TQStringUtils.cxx:1777
 TQStringUtils.cxx:1778
 TQStringUtils.cxx:1779
 TQStringUtils.cxx:1780
 TQStringUtils.cxx:1781
 TQStringUtils.cxx:1782
 TQStringUtils.cxx:1783
 TQStringUtils.cxx:1784
 TQStringUtils.cxx:1785
 TQStringUtils.cxx:1786
 TQStringUtils.cxx:1787
 TQStringUtils.cxx:1788
 TQStringUtils.cxx:1789
 TQStringUtils.cxx:1790
 TQStringUtils.cxx:1791
 TQStringUtils.cxx:1792
 TQStringUtils.cxx:1793
 TQStringUtils.cxx:1794
 TQStringUtils.cxx:1795
 TQStringUtils.cxx:1796
 TQStringUtils.cxx:1797
 TQStringUtils.cxx:1798
 TQStringUtils.cxx:1799
 TQStringUtils.cxx:1800
 TQStringUtils.cxx:1801
 TQStringUtils.cxx:1802
 TQStringUtils.cxx:1803
 TQStringUtils.cxx:1804
 TQStringUtils.cxx:1805
 TQStringUtils.cxx:1806
 TQStringUtils.cxx:1807
 TQStringUtils.cxx:1808
 TQStringUtils.cxx:1809
 TQStringUtils.cxx:1810
 TQStringUtils.cxx:1811
 TQStringUtils.cxx:1812
 TQStringUtils.cxx:1813
 TQStringUtils.cxx:1814
 TQStringUtils.cxx:1815
 TQStringUtils.cxx:1816
 TQStringUtils.cxx:1817
 TQStringUtils.cxx:1818
 TQStringUtils.cxx:1819
 TQStringUtils.cxx:1820
 TQStringUtils.cxx:1821
 TQStringUtils.cxx:1822
 TQStringUtils.cxx:1823
 TQStringUtils.cxx:1824
 TQStringUtils.cxx:1825
 TQStringUtils.cxx:1826
 TQStringUtils.cxx:1827
 TQStringUtils.cxx:1828
 TQStringUtils.cxx:1829
 TQStringUtils.cxx:1830
 TQStringUtils.cxx:1831
 TQStringUtils.cxx:1832
 TQStringUtils.cxx:1833
 TQStringUtils.cxx:1834
 TQStringUtils.cxx:1835
 TQStringUtils.cxx:1836
 TQStringUtils.cxx:1837
 TQStringUtils.cxx:1838
 TQStringUtils.cxx:1839
 TQStringUtils.cxx:1840
 TQStringUtils.cxx:1841
 TQStringUtils.cxx:1842
 TQStringUtils.cxx:1843
 TQStringUtils.cxx:1844
 TQStringUtils.cxx:1845
 TQStringUtils.cxx:1846
 TQStringUtils.cxx:1847
 TQStringUtils.cxx:1848
 TQStringUtils.cxx:1849
 TQStringUtils.cxx:1850
 TQStringUtils.cxx:1851
 TQStringUtils.cxx:1852
 TQStringUtils.cxx:1853
 TQStringUtils.cxx:1854
 TQStringUtils.cxx:1855
 TQStringUtils.cxx:1856
 TQStringUtils.cxx:1857
 TQStringUtils.cxx:1858
 TQStringUtils.cxx:1859
 TQStringUtils.cxx:1860
 TQStringUtils.cxx:1861
 TQStringUtils.cxx:1862
 TQStringUtils.cxx:1863
 TQStringUtils.cxx:1864
 TQStringUtils.cxx:1865
 TQStringUtils.cxx:1866
 TQStringUtils.cxx:1867
 TQStringUtils.cxx:1868
 TQStringUtils.cxx:1869
 TQStringUtils.cxx:1870
 TQStringUtils.cxx:1871
 TQStringUtils.cxx:1872
 TQStringUtils.cxx:1873
 TQStringUtils.cxx:1874
 TQStringUtils.cxx:1875
 TQStringUtils.cxx:1876
 TQStringUtils.cxx:1877
 TQStringUtils.cxx:1878
 TQStringUtils.cxx:1879
 TQStringUtils.cxx:1880
 TQStringUtils.cxx:1881
 TQStringUtils.cxx:1882
 TQStringUtils.cxx:1883
 TQStringUtils.cxx:1884
 TQStringUtils.cxx:1885
 TQStringUtils.cxx:1886
 TQStringUtils.cxx:1887
 TQStringUtils.cxx:1888
 TQStringUtils.cxx:1889
 TQStringUtils.cxx:1890
 TQStringUtils.cxx:1891
 TQStringUtils.cxx:1892
 TQStringUtils.cxx:1893
 TQStringUtils.cxx:1894
 TQStringUtils.cxx:1895
 TQStringUtils.cxx:1896
 TQStringUtils.cxx:1897
 TQStringUtils.cxx:1898
 TQStringUtils.cxx:1899
 TQStringUtils.cxx:1900
 TQStringUtils.cxx:1901
 TQStringUtils.cxx:1902
 TQStringUtils.cxx:1903
 TQStringUtils.cxx:1904
 TQStringUtils.cxx:1905
 TQStringUtils.cxx:1906
 TQStringUtils.cxx:1907
 TQStringUtils.cxx:1908
 TQStringUtils.cxx:1909
 TQStringUtils.cxx:1910
 TQStringUtils.cxx:1911
 TQStringUtils.cxx:1912
 TQStringUtils.cxx:1913
 TQStringUtils.cxx:1914
 TQStringUtils.cxx:1915
 TQStringUtils.cxx:1916
 TQStringUtils.cxx:1917
 TQStringUtils.cxx:1918
 TQStringUtils.cxx:1919
 TQStringUtils.cxx:1920
 TQStringUtils.cxx:1921
 TQStringUtils.cxx:1922
 TQStringUtils.cxx:1923
 TQStringUtils.cxx:1924
 TQStringUtils.cxx:1925
 TQStringUtils.cxx:1926
 TQStringUtils.cxx:1927
 TQStringUtils.cxx:1928
 TQStringUtils.cxx:1929
 TQStringUtils.cxx:1930
 TQStringUtils.cxx:1931
 TQStringUtils.cxx:1932
 TQStringUtils.cxx:1933
 TQStringUtils.cxx:1934
 TQStringUtils.cxx:1935
 TQStringUtils.cxx:1936
 TQStringUtils.cxx:1937
 TQStringUtils.cxx:1938
 TQStringUtils.cxx:1939
 TQStringUtils.cxx:1940
 TQStringUtils.cxx:1941
 TQStringUtils.cxx:1942
 TQStringUtils.cxx:1943
 TQStringUtils.cxx:1944
 TQStringUtils.cxx:1945
 TQStringUtils.cxx:1946
 TQStringUtils.cxx:1947
 TQStringUtils.cxx:1948
 TQStringUtils.cxx:1949
 TQStringUtils.cxx:1950
 TQStringUtils.cxx:1951
 TQStringUtils.cxx:1952
 TQStringUtils.cxx:1953
 TQStringUtils.cxx:1954
 TQStringUtils.cxx:1955
 TQStringUtils.cxx:1956
 TQStringUtils.cxx:1957
 TQStringUtils.cxx:1958
 TQStringUtils.cxx:1959
 TQStringUtils.cxx:1960
 TQStringUtils.cxx:1961
 TQStringUtils.cxx:1962
 TQStringUtils.cxx:1963
 TQStringUtils.cxx:1964
 TQStringUtils.cxx:1965
 TQStringUtils.cxx:1966
 TQStringUtils.cxx:1967
 TQStringUtils.cxx:1968
 TQStringUtils.cxx:1969
 TQStringUtils.cxx:1970
 TQStringUtils.cxx:1971
 TQStringUtils.cxx:1972
 TQStringUtils.cxx:1973
 TQStringUtils.cxx:1974
 TQStringUtils.cxx:1975
 TQStringUtils.cxx:1976
 TQStringUtils.cxx:1977
 TQStringUtils.cxx:1978
 TQStringUtils.cxx:1979
 TQStringUtils.cxx:1980
 TQStringUtils.cxx:1981
 TQStringUtils.cxx:1982
 TQStringUtils.cxx:1983
 TQStringUtils.cxx:1984
 TQStringUtils.cxx:1985
 TQStringUtils.cxx:1986
 TQStringUtils.cxx:1987
 TQStringUtils.cxx:1988
 TQStringUtils.cxx:1989
 TQStringUtils.cxx:1990
 TQStringUtils.cxx:1991
 TQStringUtils.cxx:1992
 TQStringUtils.cxx:1993
 TQStringUtils.cxx:1994
 TQStringUtils.cxx:1995
 TQStringUtils.cxx:1996
 TQStringUtils.cxx:1997
 TQStringUtils.cxx:1998
 TQStringUtils.cxx:1999
 TQStringUtils.cxx:2000
 TQStringUtils.cxx:2001
 TQStringUtils.cxx:2002
 TQStringUtils.cxx:2003
 TQStringUtils.cxx:2004
 TQStringUtils.cxx:2005
 TQStringUtils.cxx:2006
 TQStringUtils.cxx:2007
 TQStringUtils.cxx:2008
 TQStringUtils.cxx:2009
 TQStringUtils.cxx:2010
 TQStringUtils.cxx:2011
 TQStringUtils.cxx:2012
 TQStringUtils.cxx:2013
 TQStringUtils.cxx:2014
 TQStringUtils.cxx:2015
 TQStringUtils.cxx:2016
 TQStringUtils.cxx:2017
 TQStringUtils.cxx:2018
 TQStringUtils.cxx:2019
 TQStringUtils.cxx:2020
 TQStringUtils.cxx:2021
 TQStringUtils.cxx:2022
 TQStringUtils.cxx:2023
 TQStringUtils.cxx:2024
 TQStringUtils.cxx:2025
 TQStringUtils.cxx:2026
 TQStringUtils.cxx:2027
 TQStringUtils.cxx:2028
 TQStringUtils.cxx:2029
 TQStringUtils.cxx:2030
 TQStringUtils.cxx:2031
 TQStringUtils.cxx:2032
 TQStringUtils.cxx:2033
 TQStringUtils.cxx:2034
 TQStringUtils.cxx:2035
 TQStringUtils.cxx:2036
 TQStringUtils.cxx:2037
 TQStringUtils.cxx:2038
 TQStringUtils.cxx:2039
 TQStringUtils.cxx:2040
 TQStringUtils.cxx:2041
 TQStringUtils.cxx:2042
 TQStringUtils.cxx:2043
 TQStringUtils.cxx:2044
 TQStringUtils.cxx:2045
 TQStringUtils.cxx:2046
 TQStringUtils.cxx:2047
 TQStringUtils.cxx:2048
 TQStringUtils.cxx:2049
 TQStringUtils.cxx:2050
 TQStringUtils.cxx:2051
 TQStringUtils.cxx:2052
 TQStringUtils.cxx:2053
 TQStringUtils.cxx:2054
 TQStringUtils.cxx:2055
 TQStringUtils.cxx:2056
 TQStringUtils.cxx:2057
 TQStringUtils.cxx:2058
 TQStringUtils.cxx:2059
 TQStringUtils.cxx:2060
 TQStringUtils.cxx:2061
 TQStringUtils.cxx:2062
 TQStringUtils.cxx:2063
 TQStringUtils.cxx:2064
 TQStringUtils.cxx:2065
 TQStringUtils.cxx:2066
 TQStringUtils.cxx:2067
 TQStringUtils.cxx:2068
 TQStringUtils.cxx:2069
 TQStringUtils.cxx:2070
 TQStringUtils.cxx:2071
 TQStringUtils.cxx:2072
 TQStringUtils.cxx:2073
 TQStringUtils.cxx:2074
 TQStringUtils.cxx:2075
 TQStringUtils.cxx:2076
 TQStringUtils.cxx:2077
 TQStringUtils.cxx:2078
 TQStringUtils.cxx:2079
 TQStringUtils.cxx:2080
 TQStringUtils.cxx:2081
 TQStringUtils.cxx:2082
 TQStringUtils.cxx:2083
 TQStringUtils.cxx:2084
 TQStringUtils.cxx:2085
 TQStringUtils.cxx:2086
 TQStringUtils.cxx:2087
 TQStringUtils.cxx:2088
 TQStringUtils.cxx:2089
 TQStringUtils.cxx:2090
 TQStringUtils.cxx:2091
 TQStringUtils.cxx:2092
 TQStringUtils.cxx:2093
 TQStringUtils.cxx:2094
 TQStringUtils.cxx:2095
 TQStringUtils.cxx:2096
 TQStringUtils.cxx:2097
 TQStringUtils.cxx:2098
 TQStringUtils.cxx:2099
 TQStringUtils.cxx:2100
 TQStringUtils.cxx:2101
 TQStringUtils.cxx:2102
 TQStringUtils.cxx:2103
 TQStringUtils.cxx:2104
 TQStringUtils.cxx:2105
 TQStringUtils.cxx:2106
 TQStringUtils.cxx:2107
 TQStringUtils.cxx:2108
 TQStringUtils.cxx:2109
 TQStringUtils.cxx:2110
 TQStringUtils.cxx:2111
 TQStringUtils.cxx:2112
 TQStringUtils.cxx:2113
 TQStringUtils.cxx:2114
 TQStringUtils.cxx:2115
 TQStringUtils.cxx:2116
 TQStringUtils.cxx:2117
 TQStringUtils.cxx:2118
 TQStringUtils.cxx:2119
 TQStringUtils.cxx:2120
 TQStringUtils.cxx:2121
 TQStringUtils.cxx:2122
 TQStringUtils.cxx:2123
 TQStringUtils.cxx:2124
 TQStringUtils.cxx:2125
 TQStringUtils.cxx:2126
 TQStringUtils.cxx:2127
 TQStringUtils.cxx:2128
 TQStringUtils.cxx:2129
 TQStringUtils.cxx:2130
 TQStringUtils.cxx:2131
 TQStringUtils.cxx:2132
 TQStringUtils.cxx:2133
 TQStringUtils.cxx:2134
 TQStringUtils.cxx:2135
 TQStringUtils.cxx:2136
 TQStringUtils.cxx:2137
 TQStringUtils.cxx:2138
 TQStringUtils.cxx:2139
 TQStringUtils.cxx:2140
 TQStringUtils.cxx:2141
 TQStringUtils.cxx:2142
 TQStringUtils.cxx:2143
 TQStringUtils.cxx:2144
 TQStringUtils.cxx:2145
 TQStringUtils.cxx:2146
 TQStringUtils.cxx:2147
 TQStringUtils.cxx:2148
 TQStringUtils.cxx:2149
 TQStringUtils.cxx:2150
 TQStringUtils.cxx:2151
 TQStringUtils.cxx:2152
 TQStringUtils.cxx:2153
 TQStringUtils.cxx:2154
 TQStringUtils.cxx:2155
 TQStringUtils.cxx:2156
 TQStringUtils.cxx:2157
 TQStringUtils.cxx:2158
 TQStringUtils.cxx:2159
 TQStringUtils.cxx:2160
 TQStringUtils.cxx:2161
 TQStringUtils.cxx:2162
 TQStringUtils.cxx:2163
 TQStringUtils.cxx:2164
 TQStringUtils.cxx:2165
 TQStringUtils.cxx:2166
 TQStringUtils.cxx:2167
 TQStringUtils.cxx:2168
 TQStringUtils.cxx:2169
 TQStringUtils.cxx:2170
 TQStringUtils.cxx:2171
 TQStringUtils.cxx:2172
 TQStringUtils.cxx:2173
 TQStringUtils.cxx:2174
 TQStringUtils.cxx:2175
 TQStringUtils.cxx:2176
 TQStringUtils.cxx:2177
 TQStringUtils.cxx:2178
 TQStringUtils.cxx:2179
 TQStringUtils.cxx:2180
 TQStringUtils.cxx:2181
 TQStringUtils.cxx:2182
 TQStringUtils.cxx:2183
 TQStringUtils.cxx:2184
 TQStringUtils.cxx:2185
 TQStringUtils.cxx:2186
 TQStringUtils.cxx:2187
 TQStringUtils.cxx:2188
 TQStringUtils.cxx:2189
 TQStringUtils.cxx:2190
 TQStringUtils.cxx:2191
 TQStringUtils.cxx:2192
 TQStringUtils.cxx:2193
 TQStringUtils.cxx:2194
 TQStringUtils.cxx:2195
 TQStringUtils.cxx:2196
 TQStringUtils.cxx:2197
 TQStringUtils.cxx:2198
 TQStringUtils.cxx:2199
 TQStringUtils.cxx:2200
 TQStringUtils.cxx:2201
 TQStringUtils.cxx:2202
 TQStringUtils.cxx:2203
 TQStringUtils.cxx:2204
 TQStringUtils.cxx:2205
 TQStringUtils.cxx:2206
 TQStringUtils.cxx:2207
 TQStringUtils.cxx:2208
 TQStringUtils.cxx:2209
 TQStringUtils.cxx:2210
 TQStringUtils.cxx:2211
 TQStringUtils.cxx:2212
 TQStringUtils.cxx:2213
 TQStringUtils.cxx:2214
 TQStringUtils.cxx:2215
 TQStringUtils.cxx:2216
 TQStringUtils.cxx:2217
 TQStringUtils.cxx:2218
 TQStringUtils.cxx:2219
 TQStringUtils.cxx:2220
 TQStringUtils.cxx:2221
 TQStringUtils.cxx:2222
 TQStringUtils.cxx:2223
 TQStringUtils.cxx:2224
 TQStringUtils.cxx:2225
 TQStringUtils.cxx:2226
 TQStringUtils.cxx:2227
 TQStringUtils.cxx:2228
 TQStringUtils.cxx:2229
 TQStringUtils.cxx:2230
 TQStringUtils.cxx:2231
 TQStringUtils.cxx:2232
 TQStringUtils.cxx:2233
 TQStringUtils.cxx:2234
 TQStringUtils.cxx:2235
 TQStringUtils.cxx:2236
 TQStringUtils.cxx:2237
 TQStringUtils.cxx:2238
 TQStringUtils.cxx:2239
 TQStringUtils.cxx:2240
 TQStringUtils.cxx:2241
 TQStringUtils.cxx:2242
 TQStringUtils.cxx:2243
 TQStringUtils.cxx:2244
 TQStringUtils.cxx:2245
 TQStringUtils.cxx:2246
 TQStringUtils.cxx:2247
 TQStringUtils.cxx:2248
 TQStringUtils.cxx:2249
 TQStringUtils.cxx:2250
 TQStringUtils.cxx:2251
 TQStringUtils.cxx:2252
 TQStringUtils.cxx:2253
 TQStringUtils.cxx:2254
 TQStringUtils.cxx:2255
 TQStringUtils.cxx:2256
 TQStringUtils.cxx:2257
 TQStringUtils.cxx:2258
 TQStringUtils.cxx:2259
 TQStringUtils.cxx:2260
 TQStringUtils.cxx:2261
 TQStringUtils.cxx:2262
 TQStringUtils.cxx:2263
 TQStringUtils.cxx:2264
 TQStringUtils.cxx:2265
 TQStringUtils.cxx:2266
 TQStringUtils.cxx:2267
 TQStringUtils.cxx:2268
 TQStringUtils.cxx:2269
 TQStringUtils.cxx:2270
 TQStringUtils.cxx:2271
 TQStringUtils.cxx:2272
 TQStringUtils.cxx:2273
 TQStringUtils.cxx:2274
 TQStringUtils.cxx:2275
 TQStringUtils.cxx:2276
 TQStringUtils.cxx:2277
 TQStringUtils.cxx:2278
 TQStringUtils.cxx:2279
 TQStringUtils.cxx:2280
 TQStringUtils.cxx:2281
 TQStringUtils.cxx:2282
 TQStringUtils.cxx:2283
 TQStringUtils.cxx:2284
 TQStringUtils.cxx:2285
 TQStringUtils.cxx:2286
 TQStringUtils.cxx:2287
 TQStringUtils.cxx:2288
 TQStringUtils.cxx:2289
 TQStringUtils.cxx:2290
 TQStringUtils.cxx:2291
 TQStringUtils.cxx:2292
 TQStringUtils.cxx:2293
 TQStringUtils.cxx:2294
 TQStringUtils.cxx:2295
 TQStringUtils.cxx:2296
 TQStringUtils.cxx:2297
 TQStringUtils.cxx:2298
 TQStringUtils.cxx:2299
 TQStringUtils.cxx:2300
 TQStringUtils.cxx:2301
 TQStringUtils.cxx:2302
 TQStringUtils.cxx:2303
 TQStringUtils.cxx:2304
 TQStringUtils.cxx:2305
 TQStringUtils.cxx:2306
 TQStringUtils.cxx:2307
 TQStringUtils.cxx:2308
 TQStringUtils.cxx:2309
 TQStringUtils.cxx:2310
 TQStringUtils.cxx:2311
 TQStringUtils.cxx:2312
 TQStringUtils.cxx:2313
 TQStringUtils.cxx:2314
 TQStringUtils.cxx:2315
 TQStringUtils.cxx:2316
 TQStringUtils.cxx:2317
 TQStringUtils.cxx:2318
 TQStringUtils.cxx:2319
 TQStringUtils.cxx:2320
 TQStringUtils.cxx:2321
 TQStringUtils.cxx:2322
 TQStringUtils.cxx:2323
 TQStringUtils.cxx:2324
 TQStringUtils.cxx:2325
 TQStringUtils.cxx:2326
 TQStringUtils.cxx:2327
 TQStringUtils.cxx:2328
 TQStringUtils.cxx:2329
 TQStringUtils.cxx:2330
 TQStringUtils.cxx:2331
 TQStringUtils.cxx:2332
 TQStringUtils.cxx:2333
 TQStringUtils.cxx:2334
 TQStringUtils.cxx:2335
 TQStringUtils.cxx:2336
 TQStringUtils.cxx:2337
 TQStringUtils.cxx:2338
 TQStringUtils.cxx:2339
 TQStringUtils.cxx:2340
 TQStringUtils.cxx:2341
 TQStringUtils.cxx:2342
 TQStringUtils.cxx:2343
 TQStringUtils.cxx:2344
 TQStringUtils.cxx:2345
 TQStringUtils.cxx:2346
 TQStringUtils.cxx:2347
 TQStringUtils.cxx:2348
 TQStringUtils.cxx:2349
 TQStringUtils.cxx:2350
 TQStringUtils.cxx:2351
 TQStringUtils.cxx:2352
 TQStringUtils.cxx:2353
 TQStringUtils.cxx:2354
 TQStringUtils.cxx:2355
 TQStringUtils.cxx:2356
 TQStringUtils.cxx:2357
 TQStringUtils.cxx:2358
 TQStringUtils.cxx:2359
 TQStringUtils.cxx:2360
 TQStringUtils.cxx:2361
 TQStringUtils.cxx:2362
 TQStringUtils.cxx:2363
 TQStringUtils.cxx:2364
 TQStringUtils.cxx:2365
 TQStringUtils.cxx:2366
 TQStringUtils.cxx:2367
 TQStringUtils.cxx:2368
 TQStringUtils.cxx:2369
 TQStringUtils.cxx:2370
 TQStringUtils.cxx:2371
 TQStringUtils.cxx:2372
 TQStringUtils.cxx:2373
 TQStringUtils.cxx:2374
 TQStringUtils.cxx:2375
 TQStringUtils.cxx:2376
 TQStringUtils.cxx:2377
 TQStringUtils.cxx:2378
 TQStringUtils.cxx:2379
 TQStringUtils.cxx:2380
 TQStringUtils.cxx:2381
 TQStringUtils.cxx:2382
 TQStringUtils.cxx:2383
 TQStringUtils.cxx:2384
 TQStringUtils.cxx:2385
 TQStringUtils.cxx:2386
 TQStringUtils.cxx:2387
 TQStringUtils.cxx:2388
 TQStringUtils.cxx:2389
 TQStringUtils.cxx:2390
 TQStringUtils.cxx:2391
 TQStringUtils.cxx:2392
 TQStringUtils.cxx:2393
 TQStringUtils.cxx:2394
 TQStringUtils.cxx:2395
 TQStringUtils.cxx:2396
 TQStringUtils.cxx:2397
 TQStringUtils.cxx:2398
 TQStringUtils.cxx:2399
 TQStringUtils.cxx:2400
 TQStringUtils.cxx:2401
 TQStringUtils.cxx:2402
 TQStringUtils.cxx:2403
 TQStringUtils.cxx:2404
 TQStringUtils.cxx:2405
 TQStringUtils.cxx:2406
 TQStringUtils.cxx:2407
 TQStringUtils.cxx:2408
 TQStringUtils.cxx:2409
 TQStringUtils.cxx:2410
 TQStringUtils.cxx:2411
 TQStringUtils.cxx:2412
 TQStringUtils.cxx:2413
 TQStringUtils.cxx:2414
 TQStringUtils.cxx:2415
 TQStringUtils.cxx:2416
 TQStringUtils.cxx:2417
 TQStringUtils.cxx:2418
 TQStringUtils.cxx:2419
 TQStringUtils.cxx:2420
 TQStringUtils.cxx:2421
 TQStringUtils.cxx:2422
 TQStringUtils.cxx:2423
 TQStringUtils.cxx:2424
 TQStringUtils.cxx:2425
 TQStringUtils.cxx:2426
 TQStringUtils.cxx:2427
 TQStringUtils.cxx:2428
 TQStringUtils.cxx:2429
 TQStringUtils.cxx:2430
 TQStringUtils.cxx:2431
 TQStringUtils.cxx:2432
 TQStringUtils.cxx:2433
 TQStringUtils.cxx:2434
 TQStringUtils.cxx:2435
 TQStringUtils.cxx:2436
 TQStringUtils.cxx:2437
 TQStringUtils.cxx:2438
 TQStringUtils.cxx:2439
 TQStringUtils.cxx:2440
 TQStringUtils.cxx:2441
 TQStringUtils.cxx:2442
 TQStringUtils.cxx:2443
 TQStringUtils.cxx:2444
 TQStringUtils.cxx:2445
 TQStringUtils.cxx:2446
 TQStringUtils.cxx:2447
 TQStringUtils.cxx:2448
 TQStringUtils.cxx:2449
 TQStringUtils.cxx:2450
 TQStringUtils.cxx:2451
 TQStringUtils.cxx:2452
 TQStringUtils.cxx:2453
 TQStringUtils.cxx:2454
 TQStringUtils.cxx:2455
 TQStringUtils.cxx:2456
 TQStringUtils.cxx:2457
 TQStringUtils.cxx:2458
 TQStringUtils.cxx:2459
 TQStringUtils.cxx:2460
 TQStringUtils.cxx:2461
 TQStringUtils.cxx:2462
 TQStringUtils.cxx:2463
 TQStringUtils.cxx:2464
 TQStringUtils.cxx:2465
 TQStringUtils.cxx:2466
 TQStringUtils.cxx:2467
 TQStringUtils.cxx:2468
 TQStringUtils.cxx:2469
 TQStringUtils.cxx:2470
 TQStringUtils.cxx:2471
 TQStringUtils.cxx:2472
 TQStringUtils.cxx:2473
 TQStringUtils.cxx:2474
 TQStringUtils.cxx:2475
 TQStringUtils.cxx:2476
 TQStringUtils.cxx:2477
 TQStringUtils.cxx:2478
 TQStringUtils.cxx:2479
 TQStringUtils.cxx:2480
 TQStringUtils.cxx:2481
 TQStringUtils.cxx:2482
 TQStringUtils.cxx:2483
 TQStringUtils.cxx:2484
 TQStringUtils.cxx:2485
 TQStringUtils.cxx:2486
 TQStringUtils.cxx:2487
 TQStringUtils.cxx:2488
 TQStringUtils.cxx:2489
 TQStringUtils.cxx:2490
 TQStringUtils.cxx:2491
 TQStringUtils.cxx:2492
 TQStringUtils.cxx:2493
 TQStringUtils.cxx:2494
 TQStringUtils.cxx:2495
 TQStringUtils.cxx:2496
 TQStringUtils.cxx:2497
 TQStringUtils.cxx:2498
 TQStringUtils.cxx:2499
 TQStringUtils.cxx:2500
 TQStringUtils.cxx:2501
 TQStringUtils.cxx:2502
 TQStringUtils.cxx:2503
 TQStringUtils.cxx:2504
 TQStringUtils.cxx:2505
 TQStringUtils.cxx:2506
 TQStringUtils.cxx:2507
 TQStringUtils.cxx:2508
 TQStringUtils.cxx:2509
 TQStringUtils.cxx:2510
 TQStringUtils.cxx:2511
 TQStringUtils.cxx:2512
 TQStringUtils.cxx:2513
 TQStringUtils.cxx:2514
 TQStringUtils.cxx:2515
 TQStringUtils.cxx:2516
 TQStringUtils.cxx:2517
 TQStringUtils.cxx:2518
 TQStringUtils.cxx:2519
 TQStringUtils.cxx:2520
 TQStringUtils.cxx:2521
 TQStringUtils.cxx:2522
 TQStringUtils.cxx:2523
 TQStringUtils.cxx:2524
 TQStringUtils.cxx:2525
 TQStringUtils.cxx:2526
 TQStringUtils.cxx:2527
 TQStringUtils.cxx:2528
 TQStringUtils.cxx:2529
 TQStringUtils.cxx:2530
 TQStringUtils.cxx:2531
 TQStringUtils.cxx:2532
 TQStringUtils.cxx:2533
 TQStringUtils.cxx:2534
 TQStringUtils.cxx:2535
 TQStringUtils.cxx:2536
 TQStringUtils.cxx:2537
 TQStringUtils.cxx:2538
 TQStringUtils.cxx:2539
 TQStringUtils.cxx:2540
 TQStringUtils.cxx:2541
 TQStringUtils.cxx:2542
 TQStringUtils.cxx:2543
 TQStringUtils.cxx:2544
 TQStringUtils.cxx:2545
 TQStringUtils.cxx:2546
 TQStringUtils.cxx:2547
 TQStringUtils.cxx:2548
 TQStringUtils.cxx:2549
 TQStringUtils.cxx:2550
 TQStringUtils.cxx:2551
 TQStringUtils.cxx:2552
 TQStringUtils.cxx:2553
 TQStringUtils.cxx:2554
 TQStringUtils.cxx:2555
 TQStringUtils.cxx:2556
 TQStringUtils.cxx:2557
 TQStringUtils.cxx:2558
 TQStringUtils.cxx:2559
 TQStringUtils.cxx:2560
 TQStringUtils.cxx:2561
 TQStringUtils.cxx:2562
 TQStringUtils.cxx:2563
 TQStringUtils.cxx:2564
 TQStringUtils.cxx:2565
 TQStringUtils.cxx:2566
 TQStringUtils.cxx:2567
 TQStringUtils.cxx:2568
 TQStringUtils.cxx:2569
 TQStringUtils.cxx:2570
 TQStringUtils.cxx:2571
 TQStringUtils.cxx:2572
 TQStringUtils.cxx:2573
 TQStringUtils.cxx:2574
 TQStringUtils.cxx:2575
 TQStringUtils.cxx:2576
 TQStringUtils.cxx:2577
 TQStringUtils.cxx:2578
 TQStringUtils.cxx:2579
 TQStringUtils.cxx:2580
 TQStringUtils.cxx:2581
 TQStringUtils.cxx:2582
 TQStringUtils.cxx:2583
 TQStringUtils.cxx:2584
 TQStringUtils.cxx:2585
 TQStringUtils.cxx:2586
 TQStringUtils.cxx:2587
 TQStringUtils.cxx:2588
 TQStringUtils.cxx:2589
 TQStringUtils.cxx:2590
 TQStringUtils.cxx:2591
 TQStringUtils.cxx:2592
 TQStringUtils.cxx:2593
 TQStringUtils.cxx:2594
 TQStringUtils.cxx:2595
 TQStringUtils.cxx:2596
 TQStringUtils.cxx:2597
 TQStringUtils.cxx:2598
 TQStringUtils.cxx:2599
 TQStringUtils.cxx:2600
 TQStringUtils.cxx:2601
 TQStringUtils.cxx:2602
 TQStringUtils.cxx:2603
 TQStringUtils.cxx:2604
 TQStringUtils.cxx:2605
 TQStringUtils.cxx:2606
 TQStringUtils.cxx:2607
 TQStringUtils.cxx:2608
 TQStringUtils.cxx:2609
 TQStringUtils.cxx:2610
 TQStringUtils.cxx:2611
 TQStringUtils.cxx:2612
 TQStringUtils.cxx:2613
 TQStringUtils.cxx:2614
 TQStringUtils.cxx:2615
 TQStringUtils.cxx:2616
 TQStringUtils.cxx:2617
 TQStringUtils.cxx:2618
 TQStringUtils.cxx:2619
 TQStringUtils.cxx:2620
 TQStringUtils.cxx:2621
 TQStringUtils.cxx:2622
 TQStringUtils.cxx:2623
 TQStringUtils.cxx:2624
 TQStringUtils.cxx:2625
 TQStringUtils.cxx:2626
 TQStringUtils.cxx:2627
 TQStringUtils.cxx:2628
 TQStringUtils.cxx:2629
 TQStringUtils.cxx:2630
 TQStringUtils.cxx:2631
 TQStringUtils.cxx:2632
 TQStringUtils.cxx:2633
 TQStringUtils.cxx:2634
 TQStringUtils.cxx:2635
 TQStringUtils.cxx:2636
 TQStringUtils.cxx:2637
 TQStringUtils.cxx:2638
 TQStringUtils.cxx:2639
 TQStringUtils.cxx:2640
 TQStringUtils.cxx:2641
 TQStringUtils.cxx:2642
 TQStringUtils.cxx:2643
 TQStringUtils.cxx:2644
 TQStringUtils.cxx:2645
 TQStringUtils.cxx:2646
 TQStringUtils.cxx:2647
 TQStringUtils.cxx:2648
 TQStringUtils.cxx:2649
 TQStringUtils.cxx:2650
 TQStringUtils.cxx:2651
 TQStringUtils.cxx:2652
 TQStringUtils.cxx:2653
 TQStringUtils.cxx:2654
 TQStringUtils.cxx:2655
 TQStringUtils.cxx:2656
 TQStringUtils.cxx:2657
 TQStringUtils.cxx:2658
 TQStringUtils.cxx:2659
 TQStringUtils.cxx:2660
 TQStringUtils.cxx:2661
 TQStringUtils.cxx:2662
 TQStringUtils.cxx:2663
 TQStringUtils.cxx:2664
 TQStringUtils.cxx:2665
 TQStringUtils.cxx:2666
 TQStringUtils.cxx:2667
 TQStringUtils.cxx:2668
 TQStringUtils.cxx:2669
 TQStringUtils.cxx:2670
 TQStringUtils.cxx:2671
 TQStringUtils.cxx:2672
 TQStringUtils.cxx:2673
 TQStringUtils.cxx:2674
 TQStringUtils.cxx:2675
 TQStringUtils.cxx:2676
 TQStringUtils.cxx:2677
 TQStringUtils.cxx:2678
 TQStringUtils.cxx:2679
 TQStringUtils.cxx:2680
 TQStringUtils.cxx:2681
 TQStringUtils.cxx:2682
 TQStringUtils.cxx:2683
 TQStringUtils.cxx:2684
 TQStringUtils.cxx:2685
 TQStringUtils.cxx:2686
 TQStringUtils.cxx:2687
 TQStringUtils.cxx:2688
 TQStringUtils.cxx:2689
 TQStringUtils.cxx:2690
 TQStringUtils.cxx:2691
 TQStringUtils.cxx:2692
 TQStringUtils.cxx:2693
 TQStringUtils.cxx:2694
 TQStringUtils.cxx:2695
 TQStringUtils.cxx:2696
 TQStringUtils.cxx:2697
 TQStringUtils.cxx:2698
 TQStringUtils.cxx:2699
 TQStringUtils.cxx:2700
 TQStringUtils.cxx:2701
 TQStringUtils.cxx:2702
 TQStringUtils.cxx:2703
 TQStringUtils.cxx:2704
 TQStringUtils.cxx:2705
 TQStringUtils.cxx:2706
 TQStringUtils.cxx:2707
 TQStringUtils.cxx:2708
 TQStringUtils.cxx:2709
 TQStringUtils.cxx:2710
 TQStringUtils.cxx:2711
 TQStringUtils.cxx:2712
 TQStringUtils.cxx:2713
 TQStringUtils.cxx:2714
 TQStringUtils.cxx:2715
 TQStringUtils.cxx:2716
 TQStringUtils.cxx:2717
 TQStringUtils.cxx:2718
 TQStringUtils.cxx:2719
 TQStringUtils.cxx:2720
 TQStringUtils.cxx:2721
 TQStringUtils.cxx:2722
 TQStringUtils.cxx:2723
 TQStringUtils.cxx:2724
 TQStringUtils.cxx:2725
 TQStringUtils.cxx:2726
 TQStringUtils.cxx:2727
 TQStringUtils.cxx:2728
 TQStringUtils.cxx:2729
 TQStringUtils.cxx:2730
 TQStringUtils.cxx:2731
 TQStringUtils.cxx:2732
 TQStringUtils.cxx:2733
 TQStringUtils.cxx:2734
 TQStringUtils.cxx:2735
 TQStringUtils.cxx:2736
 TQStringUtils.cxx:2737
 TQStringUtils.cxx:2738
 TQStringUtils.cxx:2739
 TQStringUtils.cxx:2740
 TQStringUtils.cxx:2741
 TQStringUtils.cxx:2742
 TQStringUtils.cxx:2743
 TQStringUtils.cxx:2744
 TQStringUtils.cxx:2745
 TQStringUtils.cxx:2746
 TQStringUtils.cxx:2747
 TQStringUtils.cxx:2748
 TQStringUtils.cxx:2749
 TQStringUtils.cxx:2750
 TQStringUtils.cxx:2751
 TQStringUtils.cxx:2752
 TQStringUtils.cxx:2753
 TQStringUtils.cxx:2754
 TQStringUtils.cxx:2755
 TQStringUtils.cxx:2756
 TQStringUtils.cxx:2757
 TQStringUtils.cxx:2758
 TQStringUtils.cxx:2759
 TQStringUtils.cxx:2760
 TQStringUtils.cxx:2761
 TQStringUtils.cxx:2762
 TQStringUtils.cxx:2763
 TQStringUtils.cxx:2764
 TQStringUtils.cxx:2765
 TQStringUtils.cxx:2766
 TQStringUtils.cxx:2767
 TQStringUtils.cxx:2768
 TQStringUtils.cxx:2769
 TQStringUtils.cxx:2770
 TQStringUtils.cxx:2771
 TQStringUtils.cxx:2772
 TQStringUtils.cxx:2773
 TQStringUtils.cxx:2774
 TQStringUtils.cxx:2775
 TQStringUtils.cxx:2776
 TQStringUtils.cxx:2777
 TQStringUtils.cxx:2778
 TQStringUtils.cxx:2779
 TQStringUtils.cxx:2780
 TQStringUtils.cxx:2781
 TQStringUtils.cxx:2782
 TQStringUtils.cxx:2783
 TQStringUtils.cxx:2784
 TQStringUtils.cxx:2785
 TQStringUtils.cxx:2786
 TQStringUtils.cxx:2787
 TQStringUtils.cxx:2788
 TQStringUtils.cxx:2789
 TQStringUtils.cxx:2790
 TQStringUtils.cxx:2791
 TQStringUtils.cxx:2792
 TQStringUtils.cxx:2793
 TQStringUtils.cxx:2794
 TQStringUtils.cxx:2795
 TQStringUtils.cxx:2796
 TQStringUtils.cxx:2797
 TQStringUtils.cxx:2798
 TQStringUtils.cxx:2799
 TQStringUtils.cxx:2800
 TQStringUtils.cxx:2801
 TQStringUtils.cxx:2802
 TQStringUtils.cxx:2803
 TQStringUtils.cxx:2804
 TQStringUtils.cxx:2805
 TQStringUtils.cxx:2806
 TQStringUtils.cxx:2807
 TQStringUtils.cxx:2808
 TQStringUtils.cxx:2809
 TQStringUtils.cxx:2810
 TQStringUtils.cxx:2811
 TQStringUtils.cxx:2812
 TQStringUtils.cxx:2813
 TQStringUtils.cxx:2814
 TQStringUtils.cxx:2815
 TQStringUtils.cxx:2816
 TQStringUtils.cxx:2817
 TQStringUtils.cxx:2818
 TQStringUtils.cxx:2819
 TQStringUtils.cxx:2820
 TQStringUtils.cxx:2821
 TQStringUtils.cxx:2822
 TQStringUtils.cxx:2823
 TQStringUtils.cxx:2824
 TQStringUtils.cxx:2825
 TQStringUtils.cxx:2826
 TQStringUtils.cxx:2827
 TQStringUtils.cxx:2828
 TQStringUtils.cxx:2829
 TQStringUtils.cxx:2830
 TQStringUtils.cxx:2831
 TQStringUtils.cxx:2832
 TQStringUtils.cxx:2833
 TQStringUtils.cxx:2834
 TQStringUtils.cxx:2835
 TQStringUtils.cxx:2836
 TQStringUtils.cxx:2837
 TQStringUtils.cxx:2838
 TQStringUtils.cxx:2839
 TQStringUtils.cxx:2840
 TQStringUtils.cxx:2841
 TQStringUtils.cxx:2842
 TQStringUtils.cxx:2843
 TQStringUtils.cxx:2844
 TQStringUtils.cxx:2845
 TQStringUtils.cxx:2846
 TQStringUtils.cxx:2847
 TQStringUtils.cxx:2848
 TQStringUtils.cxx:2849
 TQStringUtils.cxx:2850
 TQStringUtils.cxx:2851
 TQStringUtils.cxx:2852
 TQStringUtils.cxx:2853
 TQStringUtils.cxx:2854
 TQStringUtils.cxx:2855
 TQStringUtils.cxx:2856
 TQStringUtils.cxx:2857
 TQStringUtils.cxx:2858
 TQStringUtils.cxx:2859
 TQStringUtils.cxx:2860
 TQStringUtils.cxx:2861
 TQStringUtils.cxx:2862
 TQStringUtils.cxx:2863
 TQStringUtils.cxx:2864
 TQStringUtils.cxx:2865
 TQStringUtils.cxx:2866
 TQStringUtils.cxx:2867
 TQStringUtils.cxx:2868
 TQStringUtils.cxx:2869
 TQStringUtils.cxx:2870
 TQStringUtils.cxx:2871
 TQStringUtils.cxx:2872
 TQStringUtils.cxx:2873
 TQStringUtils.cxx:2874
 TQStringUtils.cxx:2875
 TQStringUtils.cxx:2876
 TQStringUtils.cxx:2877
 TQStringUtils.cxx:2878
 TQStringUtils.cxx:2879
 TQStringUtils.cxx:2880
 TQStringUtils.cxx:2881
 TQStringUtils.cxx:2882
 TQStringUtils.cxx:2883
 TQStringUtils.cxx:2884
 TQStringUtils.cxx:2885
 TQStringUtils.cxx:2886
 TQStringUtils.cxx:2887
 TQStringUtils.cxx:2888
 TQStringUtils.cxx:2889
 TQStringUtils.cxx:2890
 TQStringUtils.cxx:2891
 TQStringUtils.cxx:2892
 TQStringUtils.cxx:2893
 TQStringUtils.cxx:2894
 TQStringUtils.cxx:2895
 TQStringUtils.cxx:2896
 TQStringUtils.cxx:2897
 TQStringUtils.cxx:2898
 TQStringUtils.cxx:2899
 TQStringUtils.cxx:2900
 TQStringUtils.cxx:2901
 TQStringUtils.cxx:2902
 TQStringUtils.cxx:2903
 TQStringUtils.cxx:2904
 TQStringUtils.cxx:2905
 TQStringUtils.cxx:2906
 TQStringUtils.cxx:2907
 TQStringUtils.cxx:2908
 TQStringUtils.cxx:2909
 TQStringUtils.cxx:2910
 TQStringUtils.cxx:2911
 TQStringUtils.cxx:2912
 TQStringUtils.cxx:2913
 TQStringUtils.cxx:2914
 TQStringUtils.cxx:2915
 TQStringUtils.cxx:2916
 TQStringUtils.cxx:2917
 TQStringUtils.cxx:2918
 TQStringUtils.cxx:2919
 TQStringUtils.cxx:2920
 TQStringUtils.cxx:2921
 TQStringUtils.cxx:2922
 TQStringUtils.cxx:2923
 TQStringUtils.cxx:2924
 TQStringUtils.cxx:2925
 TQStringUtils.cxx:2926
 TQStringUtils.cxx:2927
 TQStringUtils.cxx:2928
 TQStringUtils.cxx:2929
 TQStringUtils.cxx:2930
 TQStringUtils.cxx:2931
 TQStringUtils.cxx:2932
 TQStringUtils.cxx:2933
 TQStringUtils.cxx:2934
 TQStringUtils.cxx:2935
 TQStringUtils.cxx:2936
 TQStringUtils.cxx:2937
 TQStringUtils.cxx:2938
 TQStringUtils.cxx:2939
 TQStringUtils.cxx:2940
 TQStringUtils.cxx:2941
 TQStringUtils.cxx:2942
 TQStringUtils.cxx:2943
 TQStringUtils.cxx:2944
 TQStringUtils.cxx:2945
 TQStringUtils.cxx:2946
 TQStringUtils.cxx:2947
 TQStringUtils.cxx:2948
 TQStringUtils.cxx:2949
 TQStringUtils.cxx:2950
 TQStringUtils.cxx:2951
 TQStringUtils.cxx:2952
 TQStringUtils.cxx:2953
 TQStringUtils.cxx:2954
 TQStringUtils.cxx:2955
 TQStringUtils.cxx:2956
 TQStringUtils.cxx:2957
 TQStringUtils.cxx:2958
 TQStringUtils.cxx:2959
 TQStringUtils.cxx:2960
 TQStringUtils.cxx:2961
 TQStringUtils.cxx:2962
 TQStringUtils.cxx:2963
 TQStringUtils.cxx:2964
 TQStringUtils.cxx:2965
 TQStringUtils.cxx:2966
 TQStringUtils.cxx:2967
 TQStringUtils.cxx:2968
 TQStringUtils.cxx:2969
 TQStringUtils.cxx:2970
 TQStringUtils.cxx:2971
 TQStringUtils.cxx:2972
 TQStringUtils.cxx:2973
 TQStringUtils.cxx:2974
 TQStringUtils.cxx:2975
 TQStringUtils.cxx:2976
 TQStringUtils.cxx:2977
 TQStringUtils.cxx:2978
 TQStringUtils.cxx:2979
 TQStringUtils.cxx:2980
 TQStringUtils.cxx:2981
 TQStringUtils.cxx:2982
 TQStringUtils.cxx:2983
 TQStringUtils.cxx:2984
 TQStringUtils.cxx:2985
 TQStringUtils.cxx:2986
 TQStringUtils.cxx:2987
 TQStringUtils.cxx:2988
 TQStringUtils.cxx:2989
 TQStringUtils.cxx:2990
 TQStringUtils.cxx:2991
 TQStringUtils.cxx:2992
 TQStringUtils.cxx:2993
 TQStringUtils.cxx:2994
 TQStringUtils.cxx:2995
 TQStringUtils.cxx:2996
 TQStringUtils.cxx:2997
 TQStringUtils.cxx:2998
 TQStringUtils.cxx:2999
 TQStringUtils.cxx:3000
 TQStringUtils.cxx:3001
 TQStringUtils.cxx:3002
 TQStringUtils.cxx:3003
 TQStringUtils.cxx:3004
 TQStringUtils.cxx:3005
 TQStringUtils.cxx:3006
 TQStringUtils.cxx:3007
 TQStringUtils.cxx:3008
 TQStringUtils.cxx:3009
 TQStringUtils.cxx:3010
 TQStringUtils.cxx:3011
 TQStringUtils.cxx:3012
 TQStringUtils.cxx:3013
 TQStringUtils.cxx:3014
 TQStringUtils.cxx:3015
 TQStringUtils.cxx:3016
 TQStringUtils.cxx:3017
 TQStringUtils.cxx:3018
 TQStringUtils.cxx:3019
 TQStringUtils.cxx:3020
 TQStringUtils.cxx:3021
 TQStringUtils.cxx:3022
 TQStringUtils.cxx:3023
 TQStringUtils.cxx:3024
 TQStringUtils.cxx:3025
 TQStringUtils.cxx:3026
 TQStringUtils.cxx:3027
 TQStringUtils.cxx:3028
 TQStringUtils.cxx:3029
 TQStringUtils.cxx:3030
 TQStringUtils.cxx:3031
 TQStringUtils.cxx:3032
 TQStringUtils.cxx:3033
 TQStringUtils.cxx:3034
 TQStringUtils.cxx:3035
 TQStringUtils.cxx:3036
 TQStringUtils.cxx:3037
 TQStringUtils.cxx:3038
 TQStringUtils.cxx:3039
 TQStringUtils.cxx:3040
 TQStringUtils.cxx:3041
 TQStringUtils.cxx:3042
 TQStringUtils.cxx:3043
 TQStringUtils.cxx:3044
 TQStringUtils.cxx:3045
 TQStringUtils.cxx:3046
 TQStringUtils.cxx:3047
 TQStringUtils.cxx:3048
 TQStringUtils.cxx:3049
 TQStringUtils.cxx:3050
 TQStringUtils.cxx:3051
 TQStringUtils.cxx:3052
 TQStringUtils.cxx:3053
 TQStringUtils.cxx:3054
 TQStringUtils.cxx:3055
 TQStringUtils.cxx:3056
 TQStringUtils.cxx:3057
 TQStringUtils.cxx:3058
 TQStringUtils.cxx:3059
 TQStringUtils.cxx:3060
 TQStringUtils.cxx:3061
 TQStringUtils.cxx:3062
 TQStringUtils.cxx:3063
 TQStringUtils.cxx:3064
 TQStringUtils.cxx:3065
 TQStringUtils.cxx:3066
 TQStringUtils.cxx:3067
 TQStringUtils.cxx:3068
 TQStringUtils.cxx:3069
 TQStringUtils.cxx:3070
 TQStringUtils.cxx:3071
 TQStringUtils.cxx:3072
 TQStringUtils.cxx:3073
 TQStringUtils.cxx:3074
 TQStringUtils.cxx:3075
 TQStringUtils.cxx:3076
 TQStringUtils.cxx:3077
 TQStringUtils.cxx:3078
 TQStringUtils.cxx:3079
 TQStringUtils.cxx:3080
 TQStringUtils.cxx:3081
 TQStringUtils.cxx:3082
 TQStringUtils.cxx:3083
 TQStringUtils.cxx:3084
 TQStringUtils.cxx:3085
 TQStringUtils.cxx:3086
 TQStringUtils.cxx:3087
 TQStringUtils.cxx:3088
 TQStringUtils.cxx:3089
 TQStringUtils.cxx:3090
 TQStringUtils.cxx:3091
 TQStringUtils.cxx:3092
 TQStringUtils.cxx:3093
 TQStringUtils.cxx:3094
 TQStringUtils.cxx:3095
 TQStringUtils.cxx:3096
 TQStringUtils.cxx:3097
 TQStringUtils.cxx:3098
 TQStringUtils.cxx:3099
 TQStringUtils.cxx:3100
 TQStringUtils.cxx:3101
 TQStringUtils.cxx:3102
 TQStringUtils.cxx:3103
 TQStringUtils.cxx:3104
 TQStringUtils.cxx:3105
 TQStringUtils.cxx:3106
 TQStringUtils.cxx:3107
 TQStringUtils.cxx:3108
 TQStringUtils.cxx:3109
 TQStringUtils.cxx:3110
 TQStringUtils.cxx:3111
 TQStringUtils.cxx:3112
 TQStringUtils.cxx:3113
 TQStringUtils.cxx:3114
 TQStringUtils.cxx:3115
 TQStringUtils.cxx:3116
 TQStringUtils.cxx:3117
 TQStringUtils.cxx:3118
 TQStringUtils.cxx:3119
 TQStringUtils.cxx:3120
 TQStringUtils.cxx:3121
 TQStringUtils.cxx:3122
 TQStringUtils.cxx:3123
 TQStringUtils.cxx:3124
 TQStringUtils.cxx:3125
 TQStringUtils.cxx:3126
 TQStringUtils.cxx:3127
 TQStringUtils.cxx:3128
 TQStringUtils.cxx:3129
 TQStringUtils.cxx:3130
 TQStringUtils.cxx:3131
 TQStringUtils.cxx:3132
 TQStringUtils.cxx:3133
 TQStringUtils.cxx:3134
 TQStringUtils.cxx:3135
 TQStringUtils.cxx:3136
 TQStringUtils.cxx:3137
 TQStringUtils.cxx:3138
 TQStringUtils.cxx:3139
 TQStringUtils.cxx:3140
 TQStringUtils.cxx:3141
 TQStringUtils.cxx:3142
 TQStringUtils.cxx:3143
 TQStringUtils.cxx:3144
 TQStringUtils.cxx:3145
 TQStringUtils.cxx:3146
 TQStringUtils.cxx:3147
 TQStringUtils.cxx:3148
 TQStringUtils.cxx:3149
 TQStringUtils.cxx:3150
 TQStringUtils.cxx:3151
 TQStringUtils.cxx:3152
 TQStringUtils.cxx:3153
 TQStringUtils.cxx:3154
 TQStringUtils.cxx:3155
 TQStringUtils.cxx:3156
 TQStringUtils.cxx:3157
 TQStringUtils.cxx:3158
 TQStringUtils.cxx:3159
 TQStringUtils.cxx:3160
 TQStringUtils.cxx:3161
 TQStringUtils.cxx:3162
 TQStringUtils.cxx:3163
 TQStringUtils.cxx:3164
 TQStringUtils.cxx:3165
 TQStringUtils.cxx:3166
 TQStringUtils.cxx:3167
 TQStringUtils.cxx:3168
 TQStringUtils.cxx:3169
 TQStringUtils.cxx:3170
 TQStringUtils.cxx:3171
 TQStringUtils.cxx:3172
 TQStringUtils.cxx:3173
 TQStringUtils.cxx:3174
 TQStringUtils.cxx:3175
 TQStringUtils.cxx:3176
 TQStringUtils.cxx:3177
 TQStringUtils.cxx:3178
 TQStringUtils.cxx:3179
 TQStringUtils.cxx:3180
 TQStringUtils.cxx:3181
 TQStringUtils.cxx:3182
 TQStringUtils.cxx:3183
 TQStringUtils.cxx:3184
 TQStringUtils.cxx:3185
 TQStringUtils.cxx:3186
 TQStringUtils.cxx:3187
 TQStringUtils.cxx:3188
 TQStringUtils.cxx:3189
 TQStringUtils.cxx:3190
 TQStringUtils.cxx:3191
 TQStringUtils.cxx:3192
 TQStringUtils.cxx:3193
 TQStringUtils.cxx:3194
 TQStringUtils.cxx:3195
 TQStringUtils.cxx:3196
 TQStringUtils.cxx:3197
 TQStringUtils.cxx:3198
 TQStringUtils.cxx:3199
 TQStringUtils.cxx:3200
 TQStringUtils.cxx:3201
 TQStringUtils.cxx:3202
 TQStringUtils.cxx:3203
 TQStringUtils.cxx:3204
 TQStringUtils.cxx:3205
 TQStringUtils.cxx:3206
 TQStringUtils.cxx:3207
 TQStringUtils.cxx:3208
 TQStringUtils.cxx:3209
 TQStringUtils.cxx:3210
 TQStringUtils.cxx:3211
 TQStringUtils.cxx:3212
 TQStringUtils.cxx:3213
 TQStringUtils.cxx:3214
 TQStringUtils.cxx:3215
 TQStringUtils.cxx:3216
 TQStringUtils.cxx:3217
 TQStringUtils.cxx:3218
 TQStringUtils.cxx:3219
 TQStringUtils.cxx:3220
 TQStringUtils.cxx:3221
 TQStringUtils.cxx:3222
 TQStringUtils.cxx:3223
 TQStringUtils.cxx:3224
 TQStringUtils.cxx:3225
 TQStringUtils.cxx:3226
 TQStringUtils.cxx:3227
 TQStringUtils.cxx:3228
 TQStringUtils.cxx:3229
 TQStringUtils.cxx:3230
 TQStringUtils.cxx:3231
 TQStringUtils.cxx:3232
 TQStringUtils.cxx:3233
 TQStringUtils.cxx:3234
 TQStringUtils.cxx:3235
 TQStringUtils.cxx:3236
 TQStringUtils.cxx:3237
 TQStringUtils.cxx:3238
 TQStringUtils.cxx:3239
 TQStringUtils.cxx:3240
 TQStringUtils.cxx:3241
 TQStringUtils.cxx:3242
 TQStringUtils.cxx:3243
 TQStringUtils.cxx:3244
 TQStringUtils.cxx:3245
 TQStringUtils.cxx:3246
 TQStringUtils.cxx:3247
 TQStringUtils.cxx:3248
 TQStringUtils.cxx:3249
 TQStringUtils.cxx:3250
 TQStringUtils.cxx:3251
 TQStringUtils.cxx:3252
 TQStringUtils.cxx:3253
 TQStringUtils.cxx:3254
 TQStringUtils.cxx:3255
 TQStringUtils.cxx:3256
 TQStringUtils.cxx:3257
 TQStringUtils.cxx:3258
 TQStringUtils.cxx:3259
 TQStringUtils.cxx:3260
 TQStringUtils.cxx:3261
 TQStringUtils.cxx:3262
 TQStringUtils.cxx:3263
 TQStringUtils.cxx:3264
 TQStringUtils.cxx:3265
 TQStringUtils.cxx:3266
 TQStringUtils.cxx:3267
 TQStringUtils.cxx:3268
 TQStringUtils.cxx:3269
 TQStringUtils.cxx:3270
 TQStringUtils.cxx:3271
 TQStringUtils.cxx:3272
 TQStringUtils.cxx:3273
 TQStringUtils.cxx:3274
 TQStringUtils.cxx:3275
 TQStringUtils.cxx:3276
 TQStringUtils.cxx:3277
 TQStringUtils.cxx:3278
 TQStringUtils.cxx:3279
 TQStringUtils.cxx:3280
 TQStringUtils.cxx:3281
 TQStringUtils.cxx:3282
 TQStringUtils.cxx:3283
 TQStringUtils.cxx:3284
 TQStringUtils.cxx:3285
 TQStringUtils.cxx:3286
 TQStringUtils.cxx:3287
 TQStringUtils.cxx:3288
 TQStringUtils.cxx:3289
 TQStringUtils.cxx:3290
 TQStringUtils.cxx:3291
 TQStringUtils.cxx:3292
 TQStringUtils.cxx:3293
 TQStringUtils.cxx:3294
 TQStringUtils.cxx:3295
 TQStringUtils.cxx:3296
 TQStringUtils.cxx:3297
 TQStringUtils.cxx:3298
 TQStringUtils.cxx:3299
 TQStringUtils.cxx:3300
 TQStringUtils.cxx:3301
 TQStringUtils.cxx:3302
 TQStringUtils.cxx:3303
 TQStringUtils.cxx:3304
 TQStringUtils.cxx:3305
 TQStringUtils.cxx:3306
 TQStringUtils.cxx:3307
 TQStringUtils.cxx:3308
 TQStringUtils.cxx:3309
 TQStringUtils.cxx:3310
 TQStringUtils.cxx:3311
 TQStringUtils.cxx:3312
 TQStringUtils.cxx:3313
 TQStringUtils.cxx:3314
 TQStringUtils.cxx:3315
 TQStringUtils.cxx:3316
 TQStringUtils.cxx:3317
 TQStringUtils.cxx:3318
 TQStringUtils.cxx:3319
 TQStringUtils.cxx:3320
 TQStringUtils.cxx:3321
 TQStringUtils.cxx:3322
 TQStringUtils.cxx:3323
 TQStringUtils.cxx:3324
 TQStringUtils.cxx:3325
 TQStringUtils.cxx:3326
 TQStringUtils.cxx:3327
 TQStringUtils.cxx:3328
 TQStringUtils.cxx:3329
 TQStringUtils.cxx:3330
 TQStringUtils.cxx:3331
 TQStringUtils.cxx:3332
 TQStringUtils.cxx:3333
 TQStringUtils.cxx:3334
 TQStringUtils.cxx:3335
 TQStringUtils.cxx:3336
 TQStringUtils.cxx:3337
 TQStringUtils.cxx:3338
 TQStringUtils.cxx:3339
 TQStringUtils.cxx:3340
 TQStringUtils.cxx:3341
 TQStringUtils.cxx:3342
 TQStringUtils.cxx:3343
 TQStringUtils.cxx:3344
 TQStringUtils.cxx:3345
 TQStringUtils.cxx:3346
 TQStringUtils.cxx:3347
 TQStringUtils.cxx:3348
 TQStringUtils.cxx:3349
 TQStringUtils.cxx:3350
 TQStringUtils.cxx:3351
 TQStringUtils.cxx:3352
 TQStringUtils.cxx:3353
 TQStringUtils.cxx:3354
 TQStringUtils.cxx:3355
 TQStringUtils.cxx:3356
 TQStringUtils.cxx:3357
 TQStringUtils.cxx:3358
 TQStringUtils.cxx:3359
 TQStringUtils.cxx:3360
 TQStringUtils.cxx:3361
 TQStringUtils.cxx:3362
 TQStringUtils.cxx:3363
 TQStringUtils.cxx:3364
 TQStringUtils.cxx:3365
 TQStringUtils.cxx:3366
 TQStringUtils.cxx:3367
 TQStringUtils.cxx:3368
 TQStringUtils.cxx:3369
 TQStringUtils.cxx:3370
 TQStringUtils.cxx:3371
 TQStringUtils.cxx:3372
 TQStringUtils.cxx:3373
 TQStringUtils.cxx:3374
 TQStringUtils.cxx:3375
 TQStringUtils.cxx:3376
 TQStringUtils.cxx:3377
 TQStringUtils.cxx:3378
 TQStringUtils.cxx:3379
 TQStringUtils.cxx:3380
 TQStringUtils.cxx:3381
 TQStringUtils.cxx:3382
 TQStringUtils.cxx:3383
 TQStringUtils.cxx:3384
 TQStringUtils.cxx:3385
 TQStringUtils.cxx:3386
 TQStringUtils.cxx:3387
 TQStringUtils.cxx:3388
 TQStringUtils.cxx:3389
 TQStringUtils.cxx:3390
 TQStringUtils.cxx:3391
 TQStringUtils.cxx:3392
 TQStringUtils.cxx:3393
 TQStringUtils.cxx:3394
 TQStringUtils.cxx:3395
 TQStringUtils.cxx:3396
 TQStringUtils.cxx:3397
 TQStringUtils.cxx:3398
 TQStringUtils.cxx:3399
 TQStringUtils.cxx:3400
 TQStringUtils.cxx:3401
 TQStringUtils.cxx:3402
 TQStringUtils.cxx:3403
 TQStringUtils.cxx:3404
 TQStringUtils.cxx:3405
 TQStringUtils.cxx:3406
 TQStringUtils.cxx:3407
 TQStringUtils.cxx:3408
 TQStringUtils.cxx:3409
 TQStringUtils.cxx:3410
 TQStringUtils.cxx:3411
 TQStringUtils.cxx:3412
 TQStringUtils.cxx:3413
 TQStringUtils.cxx:3414
 TQStringUtils.cxx:3415
 TQStringUtils.cxx:3416
 TQStringUtils.cxx:3417
 TQStringUtils.cxx:3418
 TQStringUtils.cxx:3419
 TQStringUtils.cxx:3420
 TQStringUtils.cxx:3421
 TQStringUtils.cxx:3422
 TQStringUtils.cxx:3423
 TQStringUtils.cxx:3424
 TQStringUtils.cxx:3425
 TQStringUtils.cxx:3426
 TQStringUtils.cxx:3427
 TQStringUtils.cxx:3428
 TQStringUtils.cxx:3429
 TQStringUtils.cxx:3430
 TQStringUtils.cxx:3431
 TQStringUtils.cxx:3432
 TQStringUtils.cxx:3433
 TQStringUtils.cxx:3434
 TQStringUtils.cxx:3435
 TQStringUtils.cxx:3436
 TQStringUtils.cxx:3437
 TQStringUtils.cxx:3438
 TQStringUtils.cxx:3439
 TQStringUtils.cxx:3440
 TQStringUtils.cxx:3441
 TQStringUtils.cxx:3442
 TQStringUtils.cxx:3443
 TQStringUtils.cxx:3444
 TQStringUtils.cxx:3445
 TQStringUtils.cxx:3446
 TQStringUtils.cxx:3447
 TQStringUtils.cxx:3448
 TQStringUtils.cxx:3449
 TQStringUtils.cxx:3450
 TQStringUtils.cxx:3451
 TQStringUtils.cxx:3452
 TQStringUtils.cxx:3453
 TQStringUtils.cxx:3454
 TQStringUtils.cxx:3455
 TQStringUtils.cxx:3456
 TQStringUtils.cxx:3457
 TQStringUtils.cxx:3458
 TQStringUtils.cxx:3459
 TQStringUtils.cxx:3460
 TQStringUtils.cxx:3461
 TQStringUtils.cxx:3462
 TQStringUtils.cxx:3463
 TQStringUtils.cxx:3464
 TQStringUtils.cxx:3465
 TQStringUtils.cxx:3466
 TQStringUtils.cxx:3467
 TQStringUtils.cxx:3468
 TQStringUtils.cxx:3469
 TQStringUtils.cxx:3470
 TQStringUtils.cxx:3471
 TQStringUtils.cxx:3472
 TQStringUtils.cxx:3473
 TQStringUtils.cxx:3474
 TQStringUtils.cxx:3475
 TQStringUtils.cxx:3476
 TQStringUtils.cxx:3477
 TQStringUtils.cxx:3478
 TQStringUtils.cxx:3479
 TQStringUtils.cxx:3480
 TQStringUtils.cxx:3481
 TQStringUtils.cxx:3482
 TQStringUtils.cxx:3483
 TQStringUtils.cxx:3484
 TQStringUtils.cxx:3485
 TQStringUtils.cxx:3486
 TQStringUtils.cxx:3487
 TQStringUtils.cxx:3488
 TQStringUtils.cxx:3489
 TQStringUtils.cxx:3490
 TQStringUtils.cxx:3491
 TQStringUtils.cxx:3492
 TQStringUtils.cxx:3493
 TQStringUtils.cxx:3494
 TQStringUtils.cxx:3495
 TQStringUtils.cxx:3496
 TQStringUtils.cxx:3497
 TQStringUtils.cxx:3498
 TQStringUtils.cxx:3499
 TQStringUtils.cxx:3500
 TQStringUtils.cxx:3501
 TQStringUtils.cxx:3502
 TQStringUtils.cxx:3503
 TQStringUtils.cxx:3504
 TQStringUtils.cxx:3505
 TQStringUtils.cxx:3506
 TQStringUtils.cxx:3507
 TQStringUtils.cxx:3508
 TQStringUtils.cxx:3509
 TQStringUtils.cxx:3510
 TQStringUtils.cxx:3511
 TQStringUtils.cxx:3512
 TQStringUtils.cxx:3513
 TQStringUtils.cxx:3514
 TQStringUtils.cxx:3515
 TQStringUtils.cxx:3516
 TQStringUtils.cxx:3517
 TQStringUtils.cxx:3518
 TQStringUtils.cxx:3519
 TQStringUtils.cxx:3520
 TQStringUtils.cxx:3521
 TQStringUtils.cxx:3522
 TQStringUtils.cxx:3523
 TQStringUtils.cxx:3524
 TQStringUtils.cxx:3525
 TQStringUtils.cxx:3526
 TQStringUtils.cxx:3527
 TQStringUtils.cxx:3528
 TQStringUtils.cxx:3529
 TQStringUtils.cxx:3530
 TQStringUtils.cxx:3531
 TQStringUtils.cxx:3532
 TQStringUtils.cxx:3533
 TQStringUtils.cxx:3534
 TQStringUtils.cxx:3535
 TQStringUtils.cxx:3536
 TQStringUtils.cxx:3537
 TQStringUtils.cxx:3538
 TQStringUtils.cxx:3539
 TQStringUtils.cxx:3540
 TQStringUtils.cxx:3541
 TQStringUtils.cxx:3542
 TQStringUtils.cxx:3543
 TQStringUtils.cxx:3544
 TQStringUtils.cxx:3545
 TQStringUtils.cxx:3546
 TQStringUtils.cxx:3547
 TQStringUtils.cxx:3548
 TQStringUtils.cxx:3549
 TQStringUtils.cxx:3550
 TQStringUtils.cxx:3551
 TQStringUtils.cxx:3552
 TQStringUtils.cxx:3553
 TQStringUtils.cxx:3554
 TQStringUtils.cxx:3555
 TQStringUtils.cxx:3556
 TQStringUtils.cxx:3557
 TQStringUtils.cxx:3558
 TQStringUtils.cxx:3559
 TQStringUtils.cxx:3560
 TQStringUtils.cxx:3561
 TQStringUtils.cxx:3562
 TQStringUtils.cxx:3563
 TQStringUtils.cxx:3564
 TQStringUtils.cxx:3565
 TQStringUtils.cxx:3566
 TQStringUtils.cxx:3567
 TQStringUtils.cxx:3568
 TQStringUtils.cxx:3569
 TQStringUtils.cxx:3570
 TQStringUtils.cxx:3571
 TQStringUtils.cxx:3572
 TQStringUtils.cxx:3573
 TQStringUtils.cxx:3574
 TQStringUtils.cxx:3575
 TQStringUtils.cxx:3576
 TQStringUtils.cxx:3577
 TQStringUtils.cxx:3578
 TQStringUtils.cxx:3579
 TQStringUtils.cxx:3580
 TQStringUtils.cxx:3581
 TQStringUtils.cxx:3582
 TQStringUtils.cxx:3583
 TQStringUtils.cxx:3584
 TQStringUtils.cxx:3585
 TQStringUtils.cxx:3586
 TQStringUtils.cxx:3587
 TQStringUtils.cxx:3588
 TQStringUtils.cxx:3589
 TQStringUtils.cxx:3590
 TQStringUtils.cxx:3591
 TQStringUtils.cxx:3592
 TQStringUtils.cxx:3593
 TQStringUtils.cxx:3594
 TQStringUtils.cxx:3595
 TQStringUtils.cxx:3596
 TQStringUtils.cxx:3597
 TQStringUtils.cxx:3598
 TQStringUtils.cxx:3599
 TQStringUtils.cxx:3600
 TQStringUtils.cxx:3601
 TQStringUtils.cxx:3602
 TQStringUtils.cxx:3603
 TQStringUtils.cxx:3604
 TQStringUtils.cxx:3605
 TQStringUtils.cxx:3606
 TQStringUtils.cxx:3607
 TQStringUtils.cxx:3608
 TQStringUtils.cxx:3609
 TQStringUtils.cxx:3610
 TQStringUtils.cxx:3611
 TQStringUtils.cxx:3612
 TQStringUtils.cxx:3613
 TQStringUtils.cxx:3614
 TQStringUtils.cxx:3615
 TQStringUtils.cxx:3616
 TQStringUtils.cxx:3617
 TQStringUtils.cxx:3618
 TQStringUtils.cxx:3619
 TQStringUtils.cxx:3620
 TQStringUtils.cxx:3621
 TQStringUtils.cxx:3622
 TQStringUtils.cxx:3623
 TQStringUtils.cxx:3624
 TQStringUtils.cxx:3625
 TQStringUtils.cxx:3626
 TQStringUtils.cxx:3627
 TQStringUtils.cxx:3628
 TQStringUtils.cxx:3629
 TQStringUtils.cxx:3630
 TQStringUtils.cxx:3631
 TQStringUtils.cxx:3632
 TQStringUtils.cxx:3633
 TQStringUtils.cxx:3634
 TQStringUtils.cxx:3635
 TQStringUtils.cxx:3636
 TQStringUtils.cxx:3637