void ZLTextTeXHyphenator::load(const std::string &language) {
	if (language == myLanguage) {
		return;
	}
	myLanguage = language;
	
	unload();

	ZLTextHyphenationReader(this).readDocument(PatternZip() + ":" + language + POSTFIX);
	
	std::sort(myPatternTable.begin(), myPatternTable.end(), ZLTextTeXPatternComparator());
}
Exemplo n.º 2
0
	bool firstIsShorter = p1->myLength < p2->myLength;
	int minLength = firstIsShorter ? p1->myLength : p2->myLength;
	const ZLUnicodeUtil::Ucs4Char *symbols1 = p1->mySymbols;
	const ZLUnicodeUtil::Ucs4Char *symbols2 = p2->mySymbols;
	for (int i = 0; i < minLength; ++i) {
		if (symbols1[i] < symbols2[i]) {
			return true;
		} else if (symbols1[i] > symbols2[i]) {
			return false;
		}
	}
	return firstIsShorter;
}

static std::vector<unsigned char> values;
static ZLTextTeXPatternComparator comparator = ZLTextTeXPatternComparator();

void ZLTextTeXHyphenator::hyphenate(ZLUnicodeUtil::Ucs4String &ucs4String, std::vector<unsigned char> &mask, int length) const {
	if (myPatternTable.empty()) {
		for (int i = 0; i < length - 1; ++i) {
			mask[i] = false;
		}
		return;
	}
	
	values.assign(length + 1, 0);
	
	for (int j = 0; j < length - 2; ++j) {
		ZLTextTeXHyphenator::PatternIterator dictionaryPattern = myPatternTable.begin();
		for (int k = 1; k <= length - j; ++k) {
			ZLTextTeXHyphenationPattern pattern(&ucs4String[j], k);