mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-23 16:04:06 +00:00
opt: simplify Folding::apply
Some checks are pending
SonarCloud / Build and analyze (push) Waiting to run
Some checks are pending
SonarCloud / Build and analyze (push) Waiting to run
This commit is contained in:
parent
20fcea33e1
commit
fbec70e41a
|
@ -20,41 +20,23 @@ bool isCombiningMark( wchar ch )
|
|||
|
||||
wstring apply( wstring const & in, bool preserveWildcards )
|
||||
{
|
||||
//remove space and accent;
|
||||
auto withPunc = QString::fromStdU32String( in )
|
||||
.normalized( QString::NormalizationForm_KD )
|
||||
.remove( RX::markSpace )
|
||||
.toStdU32String();
|
||||
|
||||
//First, strip diacritics and apply ws/punctuation removal
|
||||
wstring withoutDiacritics;
|
||||
|
||||
withoutDiacritics.reserve( withPunc.size() );
|
||||
|
||||
|
||||
for ( auto const & ch : withPunc ) {
|
||||
|
||||
if ( !isPunct( ch )
|
||||
|| ( preserveWildcards && ( ch == '\\' || ch == '?' || ch == '*' || ch == '[' || ch == ']' ) ) ) {
|
||||
withoutDiacritics.push_back( ch );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Now, fold the case
|
||||
|
||||
wstring caseFolded;
|
||||
|
||||
caseFolded.reserve( withoutDiacritics.size() * foldCaseMaxOut );
|
||||
|
||||
wchar const * nextChar = withoutDiacritics.data();
|
||||
|
||||
// remove diacritics (normalization), white space, punt,
|
||||
auto temp = QString::fromStdU32String( in )
|
||||
.normalized( QString::NormalizationForm_KD )
|
||||
.remove( RX::markSpace )
|
||||
.removeIf( [ preserveWildcards ]( const QChar & ch ) -> bool {
|
||||
return ch.isPunct()
|
||||
&& !( preserveWildcards && ( ch == '\\' || ch == '?' || ch == '*' || ch == '[' || ch == ']' ) );
|
||||
} )
|
||||
.toStdU32String();
|
||||
// case folding
|
||||
std::u32string caseFolded;
|
||||
caseFolded.reserve( temp.size() );
|
||||
wchar buf[ foldCaseMaxOut ];
|
||||
|
||||
for ( size_t left = withoutDiacritics.size(); left--; ) {
|
||||
caseFolded.append( buf, foldCase( *nextChar++, buf ) );
|
||||
for ( const char32_t ch : temp ) {
|
||||
auto n = foldCase( ch, buf );
|
||||
caseFolded.append( buf, n );
|
||||
}
|
||||
|
||||
return caseFolded;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue