示例#1
0
文件: convert.cpp 项目: KDE/kile
QString ConvertASCIIToEnc::getSequence(int &i)
{
	QString seq = nextSequence(i);
	static QRegExp reBraces("\\{([a-zA-Z]?)\\}");

	if(isModifier(seq)) {
		KILE_DEBUG_MAIN << "\tisModifier true : " << seq;
		if(seq[seq.length() - 1].isLetter()) {
			seq += ' ';
		}

		while(m_io->currentLine()[i].isSpace()) {
			++i;
		}

		if(m_io->currentLine().mid(i, 2) == "{}") {
			i = i + 2;
		}

		if(m_io->currentLine()[i] == '\\') {
			seq += nextSequence(i);
		}
		else {
			if(reBraces.exactMatch(m_io->currentLine().mid(i, 3))) {
				KILE_DEBUG_MAIN << "\tbraces detected";
				i = i + 3;
				seq += reBraces.cap(1);
			}
			else {
				QChar nextChar = m_io->currentLine()[i++];
				if(!nextChar.isSpace()) {
					seq += (QString)nextChar;
				}
			}
		}
	}
	else if(m_map->canEncode(seq)) {
		if(m_io->currentLine().mid(i, 2) == "{}") {
			i = i + 2;
		}
		else if(m_io->currentLine()[i].isSpace()) {
			++i;
		}
	}

	return seq;
}
示例#2
0
	void Player::startPlaySequence(){
		while(nowSequenceNumber<sequenceNumber-1){
			nextSequence();
			int key = waitKey(waitKeyNumber);
			if(key=='d')
				break;
			else if(key=='[')
				waitKeyNumber *= 2;
			else if(key==']')
				waitKeyNumber /= 2;
			
		}
		return;
	}
示例#3
0
// @dist is indexed by Node::tag, returns -1 if no path found
int
Graph::findLightestPathWeight(Node *a, Node *b, const std::vector<int> &weight)
{
   std::vector<int> path(weight.size(), std::numeric_limits<int>::max());
   std::list<Node *> nodeList;
   const int seq = nextSequence();

   path[a->tag] = 0;
   for (Node *c = a; c && c != b;) {
      const int p = path[c->tag] + weight[c->tag];
      for (EdgeIterator ei = c->outgoing(); !ei.end(); ei.next()) {
         Node *t = ei.getNode();
         if (t->getSequence() < seq) {
            if (path[t->tag] == std::numeric_limits<int>::max())
               nodeList.push_front(t);
            if (p < path[t->tag])
               path[t->tag] = p;
         }
      }
      c->visit(seq);
      Node *next = NULL;
      for (std::list<Node *>::iterator n = nodeList.begin();
           n != nodeList.end(); ++n) {
         if (!next || path[(*n)->tag] < path[next->tag])
            next = *n;
         if ((*n) == c) {
            // erase visited
            n = nodeList.erase(n);
            --n;
         }
      }
      c = next;
   }
   if (path[b->tag] == std::numeric_limits<int>::max())
      return -1;
   return path[b->tag];
}