// encases the message string in a ascii box that will perfectly fit the string "message" void welcome() { string message = "message"; int x = 2 + message.size(); int y = x - 2; string box(x, '*'); string side(1, '|'); string whiteSpace(y, ' '); cout << box << endl << side << whiteSpace << side << endl << side << message << side << endl << side << whiteSpace << side << endl << box << endl; }
tree *readNewickString (char *str, int numLeaves) { tree *T; node *centerNode; int i = 0; int j = 0; int inputLength; int uCount = 0; int parCount = 0; char rootLabel[MAX_LABEL_LENGTH]; nodeCount = edgeCount = 0; T = newTree(); if ('(' != str[0]) { Rprintf("Error reading generated tree - does not start with '('.\n"); exit(0); } inputLength = strlen (str)+1; for(i = 0; i < inputLength; i++) { if ('(' == str[i]) parCount++; else if (')' == str[i]) parCount--; if (parCount > 0) ; else if (0 == parCount) { i++; /* if(';' == str[i]) sprintf(rootLabel,"URoot"); else {*/ while(';' != str[i]) if (!(whiteSpace (str[i++]))) rootLabel[j++] = str[i-1]; /*be careful here */ rootLabel[j] = '\0'; // } i = inputLength; } else if (parCount < 0) { Rprintf("Error reading generated tree. Too many right parentheses.\n"); exit(0); } } centerNode = decodeNewickSubtree (str, T, &uCount); snprintf (centerNode->label, MAX_LABEL_LENGTH, rootLabel); T->root = centerNode; return (T); }
Set<WebPage*> SearchEngine::processSingle(const std::string inStr, const std::string line) { Set<WebPage*> word; //Check if valid input if(whiteSpace(line)) { // Get corresponding set if it exists try { word = queries.at(inStr); } // If not, generate it catch(std::exception &e) { word = generateQuery(inStr); queries.insert(std::pair<std::string,Set<WebPage*> >(inStr,word)); } } return word; }
void Hyphenator::slotHyphenate(PageItem* it) { if ((!m_usable) || !(it->asTextFrame()) || (it->itemText.length() == 0)) return; m_doc->DoDrawing = false; const char *word; char *buffer; const int BORDER = 2; QString text = ""; QString buf; QByteArray te; int startC = 0; if (it->itemText.lengthOfSelection() > 0) { startC = it->itemText.startOfSelection(); text = it->itemText.text(startC, it->itemText.lengthOfSelection()); } else { text = it->itemText.text(0, it->itemText.length()); } int firstC = 0; int lastC = 0; int Ccount = 0; QString found = ""; QString found2 = ""; rememberedWords.clear(); //uint maxC = it->itemText.length() - 1; qApp->setOverrideCursor(QCursor(Qt::WaitCursor)); QRegExp wordBoundary("\\w"); QRegExp whiteSpace("\\s|\\W|\\d|\\n|\\r|\\t"); while ((firstC+Ccount < signed(text.length())) && (firstC != -1) && (lastC < signed(text.length()))) { firstC = text.indexOf(wordBoundary, firstC+Ccount); if (firstC < 0) break; if (firstC > 0 && text.at(firstC-1) == SpecialChars::SHYPHEN) { Ccount = 1; continue; } lastC = text.indexOf(whiteSpace, firstC); if (lastC < 0) lastC = signed(text.length()); Ccount = lastC - firstC; if (lastC < signed(text.length()) && text.at(lastC) == SpecialChars::SHYPHEN) { ++Ccount; continue; } if (Ccount > MinWordLen-1) { found = text.mid(firstC, Ccount).toLower(); found2 = text.mid(firstC, Ccount); if (found.contains(SpecialChars::SHYPHEN)) break; NewDict(it->itemText.charStyle(firstC).language()); te = m_codec->fromUnicode( found ); word = te.data(); int wordlen = strlen(word); buffer = static_cast<char*>(malloc(wordlen+BORDER+3)); if (buffer == NULL) break; char ** rep = NULL; int * pos = NULL; int * cut = NULL; if (!hnj_hyphen_hyphenate2(m_hdict, word, wordlen, buffer, NULL, &rep, &pos, &cut)) { int i = 0; buffer[wordlen] = '\0'; bool hasHyphen = false; for (i = 1; i < found.length()-1; ++i) { if(buffer[i] & 1) { hasHyphen = true; break; } } QString outs = ""; QString input = ""; outs += found2[0]; for (i = 1; i < found.length()-1; ++i) { outs += found2[i]; if(buffer[i] & 1) outs += "-"; } outs += found2.right(1); input = outs; if (!ignoredWords.contains(found2)) { if (!hasHyphen) it->itemText.hyphenateWord(startC + firstC, found.length(), NULL); else if (Automatic) { if (specialWords.contains(found2)) { outs = specialWords.value(found2); uint ii = 1; for (i = 1; i < outs.length()-1; ++i) { QChar cht = outs[i]; if (cht == '-') buffer[ii-1] = 1; else { buffer[ii] = 0; ++ii; } } } it->itemText.hyphenateWord(startC + firstC, found.length(), buffer); } else { if (specialWords.contains(found2)) { outs = specialWords.value(found2); uint ii = 1; for (i = 1; i < outs.length()-1; ++i) { QChar cht = outs[i]; if (cht == '-') buffer[ii-1] = 1; else { buffer[ii] = 0; ++ii; } } } if (rememberedWords.contains(input)) { outs = rememberedWords.value(input); uint ii = 1; for (i = 1; i < outs.length()-1; ++i) { QChar cht = outs[i]; if (cht == '-') buffer[ii-1] = 1; else { buffer[ii] = 0; ++ii; } } it->itemText.hyphenateWord(firstC, found.length(), buffer); } else { qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor)); PrefsContext* prefs = PrefsManager::instance()->prefsFile->getContext("hyhpen_options"); int xpos = prefs->getInt("Xposition", -9999); int ypos = prefs->getInt("Yposition", -9999); HyAsk *dia = new HyAsk((QWidget*)parent(), outs); if ((xpos != -9999) && (ypos != -9999)) dia->move(xpos, ypos); qApp->processEvents(); if (dia->exec()) { outs = dia->Wort->text(); uint ii = 1; for (i = 1; i < outs.length()-1; ++i) { QChar cht = outs[i]; if (cht == '-') buffer[ii-1] = 1; else { buffer[ii] = 0; ++ii; } } if (!rememberedWords.contains(input)) rememberedWords.insert(input, outs); if (dia->addToIgnoreList->isChecked()) { if (!ignoredWords.contains(found2)) ignoredWords.insert(found2); } if (dia->addToExceptionList->isChecked()) { if (!specialWords.contains(found2)) specialWords.insert(found2, outs); } it->itemText.hyphenateWord(firstC, found.length(), buffer); } else { free(buffer); buffer = NULL; prefs->set("Xposition", dia->xpos); prefs->set("Yposition", dia->ypos); delete dia; break; } prefs->set("Xposition", dia->xpos); prefs->set("Yposition", dia->ypos); delete dia; qApp->changeOverrideCursor(QCursor(Qt::WaitCursor)); } } } } free(buffer); if (rep) { for (int i = 0; i < wordlen - 1; ++i) if (rep[i]) free(rep[i]); free(rep); } if (pos) free(pos); if (cut) free(cut); buffer = NULL; rep = NULL; pos = NULL; cut = NULL; } if (Ccount == 0) Ccount++; } qApp->restoreOverrideCursor(); m_doc->DoDrawing = true; rememberedWords.clear(); }
node *decodeNewickSubtree(char *treeString, tree *T, int *uCount) { node *thisNode; node *centerNode; double thisWeight; edge *thisEdge; // char label[MAX_LABEL_LENGTH]; char stringWeight[MAX_LABEL_LENGTH]; int state; int i = 0; int j; int left,right; int parcount; // snprintf(label,14,"Default_Label\0"); left = right = 0; parcount = 0; state = ReadOpenParenthesis; if('(' == treeString[0]) parcount++; //centerNode = makeNode(label,NULL,nodeCount++); centerNode = makeNode("",NULL,nodeCount++); T->size++; while(parcount > 0) { while(whiteSpace(treeString[i])) i++; switch(state) { case(ReadOpenParenthesis): if('(' != treeString[0]) { Rprintf("Error reading subtree.\n"); exit(0); } i++; state = ReadSubTree; break; case(ReadSubTree): if('(' == treeString[i]) /*if treeString[i] is a left parenthesis, we scan down the string until we find its partner. the relative number of '('s vs. ')'s is counted by the variable parcount*/ { left = i++; parcount++; while(parcount > 1) { while (('(' != treeString[i]) && (')' != treeString[i])) i++; /*skip over characters which are not parentheses*/ if('(' == treeString[i]) parcount++; else if (')' == treeString[i]) parcount--; i++; } /*end while */ right = i; /*at this point, the subtree string goes from treeString[left] to treeString[right - 1]*/ thisNode = decodeNewickSubtree(treeString + left,T,uCount); /*note that this step will put thisNode in T*/ i = right; /*having created the node for the subtree, we move to assigning the label for the new node. treeString[right] will be the start of this label */ } /* end if ('(' == treeString[i]) condition */ else { //thisNode = makeNode(label,NULL,nodeCount++); thisNode = makeNode("",NULL,nodeCount++); T->size++; } state = ReadLabel; break; case(ReadLabel): left = i; /*recall "left" is the left marker for the substring, "right" the right*/ if (':' == treeString[i]) /*this means an internal node?*/ { //sprintf(thisNode->label,"I%d",(*uCount)++); //snprintf(thisNode->label,MAX_LABEL_LENGTH,"I%d",(*uCount)++); (*uCount)++; right = i; } else { while((':' != treeString[i]) && (',' != treeString[i]) && (')' != treeString[i])) i++; right = i; j = 0; for(i = left; i < right;i++) if(!(whiteSpace(treeString[i]))) thisNode->label[j++] = treeString[i]; thisNode->label[j] = '\0'; } if(':' == treeString[right]) state = ReadWeight; else { state = AddEdge; thisWeight = 0.0; } i = right + 1; break; case(ReadWeight): left = i; while ((',' != treeString[i]) && (')' != treeString[i])) i++; right = i; j = 0; for(i = left; i < right; i++) stringWeight[j++] = treeString[i]; stringWeight[j] = '\0'; thisWeight = atof(stringWeight); state=AddEdge; break; case(AddEdge): //thisEdge = makeEdge(label,centerNode,thisNode,thisWeight); thisEdge = makeEdge("",centerNode,thisNode,thisWeight); thisNode->parentEdge = thisEdge; if (NULL == centerNode->leftEdge) centerNode->leftEdge = thisEdge; else if (NULL == centerNode->rightEdge) centerNode->rightEdge = thisEdge; else if (NULL == centerNode->middleEdge) centerNode->middleEdge = thisEdge; else { Rprintf("Error: node %s has too many (>3) children.\n",centerNode->label); exit(0); } //sprintf(thisEdge->label,"E%d",edgeCount++); //snprintf(thisEdge->label,MAX_LABEL_LENGTH,"E%d",edgeCount++); edgeCount++; i = right + 1; if (',' == treeString[right]) state = ReadSubTree; else parcount--; break; } } return(centerNode); }
tree *loadNewickTree(FILE *ifile, int numLeaves) { // char label[] = "EmptyEdge"; tree *T; node *centerNode; int i = 0; int j = 0; int inputLength; int uCount = 0; int parCount = 0; char c; int Comment; char *nextString; char rootLabel[MAX_LABEL_LENGTH]; nodeCount = edgeCount = 0; T = newTree(); nextString = (char *) malloc(numLeaves*INPUT_SIZE*sizeof(char)); if (NULL == nextString) nextString = (char *) malloc(MAX_INPUT_SIZE*sizeof(char)); Comment = 0; while(1 == fscanf(ifile,"%c",&c)) { if('[' == c) Comment = 1; else if (']' == c) Comment = 0; else if (!(Comment)) { if(whiteSpace(c)) { if (i > 0) nextString[i++] = ' '; } else /*note that this else goes with if(whiteSpace(c))*/ nextString[i++] = c; if (';' == c) break; } } if ('(' != nextString[0]) { fprintf(stderr,"Error reading input file - does not start with '('.\n"); exit(EXIT_FAILURE); } inputLength = i; for(i = 0; i < inputLength;i++) { if ('(' == nextString[i]) parCount++; else if (')' == nextString[i]) parCount--; if (parCount > 0) ; else if (0 == parCount) { i++; /* if(';' == nextString[i]) sprintf(rootLabel,"URoot"); else {*/ while(';' != nextString[i]) if(!(whiteSpace(nextString[i++]))) rootLabel[j++] = nextString[i-1]; /*be careful here */ rootLabel[j] = '\0'; // } i = inputLength; } else if (parCount < 0) { fprintf(stderr,"Error reading tree input file. Too many right parentheses.\n"); exit(EXIT_FAILURE); } } centerNode = decodeNewickSubtree(nextString,T,&uCount); snprintf(centerNode->label, MAX_LABEL_LENGTH, rootLabel); T->root = centerNode; free(nextString); return(T); }