static void declare( TidyDocImpl* doc, TidyTagImpl* tags, ctmbstr name, uint versions, uint model, Parser *parser, CheckAttribs *chkattrs ) { if ( name ) { Dict* np = (Dict*) lookup( doc, tags, name ); if ( np == NULL ) { np = NewDict( doc, name ); np->next = tags->declared_tag_list; tags->declared_tag_list = np; } /* Make sure we are not over-writing predefined tags */ if ( np->id == TidyTag_UNKNOWN ) { np->versions = versions; np->model |= model; np->parser = parser; np->chkattrs = chkattrs; np->attrvers = NULL; } } }
void Hyphenator::slotHyphenateWord(PageItem* it, const QString& text, int firstC) { if ((!m_usable))//FIXME:av || (!ScMW->Sprachen.contains(it->Language))) return; const char *word; char *buffer; const int BORDER = 2; QByteArray te; //uint maxC = it->itemText.length() - 1; QString found = text; if (found.contains(SpecialChars::SHYPHEN)) return; // else if (findException(found, &buffer) it->itemText.hyphenateWord(firstC, found.length(), buffer); else if (signed(found.length()) >= MinWordLen) { 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) return; char ** rep = NULL; int * pos = NULL; int * cut = NULL; if (!hnj_hyphen_hyphenate2(m_hdict, word, wordlen, buffer, NULL, &rep, &pos, &cut)) { //uint i = 0; buffer[wordlen] = '\0'; it->itemText.hyphenateWord(firstC, found.length(), buffer); } 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; } }
void TY_(InitTags)( TidyDocImpl* doc ) { Dict* xml; TidyTagImpl* tags = &doc->tags; TidyClearMemory( tags, sizeof(TidyTagImpl) ); /* create dummy entry for all xml tags */ xml = NewDict( doc, NULL ); xml->versions = VERS_XML; xml->model = CM_BLOCK; xml->parser = 0; xml->chkattrs = 0; xml->attrvers = NULL; tags->xml_tags = xml; }
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(); }