Use standard unicode forward slash representation if available instead of nonstandard HTML encoding

This resolves Bug 269
(cherry picked from commit b4a23465b6)
v3.5.13-sru
Timothy Pearson 12 years ago committed by Slávek Banko
parent 02454576e0
commit 998d8f4e7a

@ -165,41 +165,60 @@ KIO_EXPORT TQString KIO::itemsSummaryString(uint items, uint files, uint dirs, K
KIO_EXPORT TQString KIO::encodeFileName( const TQString & _str ) KIO_EXPORT TQString KIO::encodeFileName( const TQString & _str )
{ {
TQString str( _str ); TQString str( _str );
bool unicode_supported = (TQString::fromLocal8Bit(TQString(TQChar((uint)0x2215)).local8Bit())[0].unicode() != 0x3f);
int i = 0; int i = 0;
while ( ( i = str.find( "%", i ) ) != -1 ) while ( ( i = str.find( "%", i ) ) != -1 ) {
{
str.replace( i, 1, "%%"); str.replace( i, 1, "%%");
i += 2; i += 2;
} }
while ( ( i = str.find( "/" ) ) != -1 ) while ( ( i = str.find( "/" ) ) != -1 ) {
str.replace( i, 1, "%2f"); if (unicode_supported) {
// Use U+2215 (DIVISION SLASH) to represent the forward slash
// While U+2044 (FRACTION SLASH) is a tempting replacement, it can indicate to
// rendering engines that a combined fraction character should be displayed
str.replace( i, 1, TQChar((uint)0x2215));
}
else {
// Unicode does not appear to be supported on this system!
// Fall back to older encoding method...
str.replace( i, 1, "%2f");
}
str.replace( i, 1, TQChar((uint)0x2215));
}
return str; return str;
} }
KIO_EXPORT TQString KIO::decodeFileName( const TQString & _str ) KIO_EXPORT TQString KIO::decodeFileName( const TQString & _str )
{ {
TQString str; TQString str;
bool unicode_supported = (TQString::fromLocal8Bit(TQString(TQChar((uint)0x2215)).local8Bit())[0].unicode() != 0x3f);
unsigned int i = 0; unsigned int i = 0;
for ( ; i < _str.length() ; ++i ) for ( ; i < _str.length() ; ++i ) {
{ if ( _str[i]=='%' ) {
if ( _str[i]=='%' )
{
if ( _str[i+1]=='%' ) // %% -> % if ( _str[i+1]=='%' ) // %% -> %
{ {
str.append('%'); str.append('%');
++i; ++i;
} }
else if ( _str[i+1]=='2' && (i+2<_str.length()) && _str[i+2].lower()=='f' ) // %2f -> / else if ((!unicode_supported) && ( _str[i+1]=='2' && (i+2<_str.length()) && _str[i+2].lower()=='f' )) // %2f -> /
{ {
str.append('/'); str.append('/');
i += 2; i += 2;
} }
else else
{
str.append('%'); str.append('%');
} else }
}
else if ( _str[i] == TQChar((uint)0x2215) ) {
str.append('/');
}
else {
str.append(_str[i]); str.append(_str[i]);
}
} }
return str; return str;

@ -118,7 +118,7 @@ namespace KIO
/** /**
* Encodes (from the text displayed to the real filename) * Encodes (from the text displayed to the real filename)
* This translates % into %% and / into %2f * This translates % into %% and / into (U+2215, DIVISION SLASH)
* Used by KIO::link, for instance. * Used by KIO::link, for instance.
* @param str the file name to encode * @param str the file name to encode
* @return the encoded file name * @return the encoded file name
@ -126,7 +126,7 @@ namespace KIO
KIO_EXPORT TQString encodeFileName( const TQString & str ); KIO_EXPORT TQString encodeFileName( const TQString & str );
/** /**
* Decodes (from the filename to the text displayed) * Decodes (from the filename to the text displayed)
* This translates %2[fF] into / and %% into % * This translates %2[fF] into /, %% into %, and (U+2215, DIVISION SLASH) into /
* @param str the file name to decode * @param str the file name to decode
* @return the decoded file name * @return the decoded file name
*/ */
@ -501,7 +501,7 @@ public:
}; };
/** /**
* An entry is the list of atoms containing all the informations for a file or URL * An entry is the list of atoms containing all the information for a file or URL
*/ */
typedef TQValueList<UDSAtom> UDSEntry; typedef TQValueList<UDSAtom> UDSEntry;
typedef TQValueList<UDSEntry> UDSEntryList; typedef TQValueList<UDSEntry> UDSEntryList;

@ -1222,8 +1222,9 @@ void FileProtocol::listDir( const KURL& url)
// files where TQFile::encodeName(TQFile::decodeName(a)) != a. // files where TQFile::encodeName(TQFile::decodeName(a)) != a.
TQStrList entryNames; TQStrList entryNames;
while ( ( ep = KDE_readdir( dp ) ) != 0L ) while ( ( ep = KDE_readdir( dp ) ) != 0L ) {
entryNames.append( ep->d_name ); entryNames.append( ep->d_name );
}
closedir( dp ); closedir( dp );
totalSize( entryNames.count() ); totalSize( entryNames.count() );

Loading…
Cancel
Save