[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    Re: extragear/multimedia/amarok/src/dialogs
From:       "Seb Ruiz" <ruiz () kde ! org>
Date:       2009-01-10 1:23:20
Message-ID: 60ebdd0b0901091723g61c5466fmf046bada5ab865b9 () mail ! gmail ! com
[Download RAW message or body]

2009/1/10 Teo Mrnjavac <teo.mrnjavac@gmail.com>:
> SVN commit 908597 by mrnjavac:
> 
> Rewrite of the case conversion code in TagGuesser and fix for an infinite loop bug.
> Thanks Nicos Gollan for the patch.
> BUG: 180164

Style please! Teo, please don't accept patches unless they conform to
Amarok's hacking convention!

> 
> 
> M  +51 -29    TagGuesser.cpp
> M  +2 -0      TagGuesser.h
> 
> 
> --- trunk/extragear/multimedia/amarok/src/dialogs/TagGuesser.cpp #908596:908597
> @@ -318,6 +318,55 @@
> }
> }
> 
> +QString TagGuesser::toTitleCase(const QString &s) {
> +    if(s.isEmpty()) {
> +        return s;
> +    }
> +
> +    QString result = s;
> +    debug() << "Original string: \"" << s << "\"" << endl;
> +
> +    QRegExp wordRegExp("\\b(\\w+)\\b");
> +    int i = wordRegExp.indexIn(result);
> +    QString match = wordRegExp.cap(1);
> +
> +    // "small words" that ought not be capitalized. This is English only.
> +    // a an and as at but by en for if in of on or the to v[.]? via vs[.]?
> +    QRegExp littleWordRegExp( "\\b(a|an|as|at|by|for|if|and|of|or|to|the|in)\\b" \
> ); +    while(i > -1) {
> +        debug() << "  Title case i=" << i << "; remaining: \"" << result.mid(i) << \
> "\"" << endl; +
> +        if(match == match.toLower() && !littleWordRegExp.exactMatch(match)) {
> +            result[i] = result[i].toUpper();
> +        } else {
> +            debug() << "  partial will not be capitalized: \"" << match << "\"" << \
> endl; +        }
> +
> +        i = wordRegExp.indexIn(result, i+match.length());
> +        match = wordRegExp.cap(1);
> +    }
> +
> +    return result;
> +}
> +
> +
> +QString TagGuesser::toCapitalizedCase(const QString &s) {
> +    if(s.isEmpty()) {
> +        return s;
> +    }
> +
> +    QString result = s;
> +    QRegExp wordRegExp( "\\b(\\w+)\\b" );
> +    int i = wordRegExp.indexIn(result);
> +    int ml = wordRegExp.cap(1).length();
> +    while(i > -1) {
> +        result[i] = result[i].toUpper();
> +        i = wordRegExp.indexIn(result, i+ml);
> +        ml = wordRegExp.cap(1).length();
> +    }
> +    return result;
> +}
> +
> QString TagGuesser::capitalizeWords( const QString &s, const int &caseOptions )
> {
> if( s.isEmpty() )
> @@ -341,39 +390,12 @@
> else if( caseOptions == 3 )
> {
> debug() << "UPPER/LOWER CASE OPTIONS: 3 - First letter of every word uppercase";
> -        QString result = s;
> -        result[ 0 ] = result[ 0 ].toUpper();
> -
> -        const QRegExp wordRegExp( "\\s\\w" );
> -        int i = result.indexOf( wordRegExp );
> -        while ( i > -1 ) {
> -            result[ i + 1 ] = result[ i + 1 ].toUpper();
> -            i = result.indexOf( wordRegExp, ++i );
> -        }
> -        return result;
> +        return toCapitalizedCase(s);
> }
> else if( caseOptions == 4 )
> {
> debug() << "UPPER/LOWER CASE OPTIONS: 4 - Title case.";
> -        QString result = s;
> -        result[ 0 ] = result[ 0 ].toUpper();
> -
> -        const QRegExp wordRegExp( "\\s\\w" );
> -        int i = result.indexOf( wordRegExp );
> -        const QRegExp littleWordRegExp( \
> "(a|an|as|at|by|for|if|and|of|or|to|the|in)" ); //a an and as at but by en for if \
>                 in of on or the to v[.]? via vs[.]?
> -        while ( i > -1 ) {
> -            if( result.mid( i + 1, 20).section( " ", 0, 0 ) == result.mid( i + 1, \
> 20).section( " ", 0, 0 ).toLower() )        //if the word has some capitalization \
> we suppose it's capitalized correctly. This solves issues with proper nouns and \
>                 acronyms
> -            {
> -                if( !result.mid( i + 1, 20).section( " ", 0, 0 ).contains( \
>                 littleWordRegExp ) )
> -                {
> -                    result[ i + 1 ] = result[ i + 1 ].toUpper();
> -                    i = result.indexOf( wordRegExp, ++i );
> -                }
> -                else    //we have a little word
> -                    i = result.indexOf( wordRegExp, ++i );
> -            }
> -        }
> -        return result;
> +        return toTitleCase(s);
> }
> else
> {
> --- trunk/extragear/multimedia/amarok/src/dialogs/TagGuesser.h #908596:908597
> @@ -98,6 +98,8 @@
> 
> private:
> void loadSchemes();
> +        static QString toTitleCase(const QString& s);
> +        static QString toCapitalizedCase(const QString& s);
> QString capitalizeWords( const QString &s, const int &caseOptions );
> 
> FileNameScheme::List m_schemes;
> 



-- 
Seb Ruiz

http://www.sebruiz.net/
http://amarok.kde.org/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic