Advertisement
sakuya-inu-izayoi

QSed

Oct 5th, 2015
619
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.81 KB | None | 0 0
  1.     if(msg.startsWith("s/"))
  2.     {
  3.         qDebug() << this << "[SED]";
  4.  
  5.         // Regexp!
  6.         QString buff = msg;
  7.         QStringList args; args << "" << "" << "";
  8.         int mode = -1;
  9.         while(mode < 3 && buff.size())
  10.         {
  11.             if(buff.startsWith("\\/"))
  12.             {
  13.                 if(mode >= 0)
  14.                 {
  15.                     args[mode].append("/");
  16.                 }
  17.                 buff.remove(0,2);
  18.             }
  19.             else if(buff.startsWith("/"))
  20.             {
  21.                 mode ++;
  22.                 buff.remove(0,1);
  23.             }
  24.             else
  25.             {
  26.                 if(mode >= 0)
  27.                 {
  28.                     args[mode].append(buff.left(1));
  29.                 }
  30.                 buff.remove(0,1);
  31.             }
  32.         }
  33.  
  34.         qDebug() << "[Sed] Args:" << args;
  35.  
  36.         QList<Message> log = m_history[target];
  37.  
  38.         QRegularExpression re(args[0]);
  39.  
  40.         int counter = 50;
  41.         bool hasmatch = false;
  42.         while(!hasmatch && log.size() && counter --)
  43.         {
  44.             Message subject = log.takeLast();
  45.  
  46.             QString history_msg = subject.getMsg();
  47.             QString history_nick = subject.getNick()->name();
  48.             if(args[2].contains("g"))
  49.             {
  50.                 QRegularExpressionMatchIterator it = re.globalMatch(history_msg);
  51.  
  52.                 int offset = 0;
  53.                 while(it.hasNext())
  54.                 {
  55.                     hasmatch = true;
  56.                     QString rplc = args[1];
  57.  
  58.                     QRegularExpressionMatch ma = it.next();
  59.  
  60.                     for(int II = ma.lastCapturedIndex(); II >= 0; II --)
  61.                     {
  62.                         QString m = ma.captured(II);
  63.                         rplc.replace(QString("\\%1").arg(II),m);
  64.                     }
  65.  
  66.                     history_msg.replace(ma.capturedStart()+offset,ma.capturedLength(),rplc);
  67.  
  68.                     offset += rplc.length() - ma.capturedLength();
  69.                 }
  70.             }
  71.             else
  72.             {
  73.                 QRegularExpressionMatch ma = re.match(history_msg);
  74.  
  75.                 QString rplc = args[1];
  76.  
  77.                 if((hasmatch = ma.hasMatch()))
  78.                 {
  79.                     for(int II = ma.lastCapturedIndex(); II >= 0; II --)
  80.                     {
  81.                         QString m = ma.captured(II);
  82.                         rplc.replace(QString("\\%1").arg(II),m);
  83.                     }
  84.  
  85.                     history_msg.replace(ma.capturedStart(),ma.capturedLength(),rplc);
  86.                 }
  87.             }
  88.  
  89.             if(hasmatch)
  90.             {
  91.                 say(target,QString("<%1> %2").arg(history_nick,history_msg));
  92.                 m_history[target] << Message(subject.getNick(),history_msg);
  93.             }
  94.         }
  95.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement