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

This resolves Bug 269
pull/16/head
Timothy Pearson 11 лет назад
Родитель ecaf622512
Сommit b4a23465b6

@ -165,41 +165,60 @@ TDEIO_EXPORT TQString TDEIO::itemsSummaryString(uint items, uint files, uint dir
TDEIO_EXPORT TQString TDEIO::encodeFileName( const TQString & _str )
{
TQString str( _str );
bool unicode_supported = (TQString::fromLocal8Bit(TQString(TQChar((uint)0x2215)).local8Bit())[0].unicode() != 0x3f);
int i = 0;
while ( ( i = str.find( "%", i ) ) != -1 )
{
while ( ( i = str.find( "%", i ) ) != -1 ) {
str.replace( i, 1, "%%");
i += 2;
}
while ( ( i = str.find( "/" ) ) != -1 )
str.replace( i, 1, "%2f");
while ( ( i = str.find( "/" ) ) != -1 ) {
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;
}
TDEIO_EXPORT TQString TDEIO::decodeFileName( const TQString & _str )
{
TQString str;
bool unicode_supported = (TQString::fromLocal8Bit(TQString(TQChar((uint)0x2215)).local8Bit())[0].unicode() != 0x3f);
unsigned int i = 0;
for ( ; i < _str.length() ; ++i )
{
if ( _str[i]=='%' )
{
for ( ; i < _str.length() ; ++i ) {
if ( _str[i]=='%' ) {
if ( _str[i+1]=='%' ) // %% -> %
{
str.append('%');
++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('/');
i += 2;
}
else
{
str.append('%');
} else
}
}
else if ( _str[i] == TQChar((uint)0x2215) ) {
str.append('/');
}
else {
str.append(_str[i]);
}
}
return str;

@ -118,7 +118,7 @@ namespace TDEIO
/**
* 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 TDEIO::link, for instance.
* @param str the file name to encode
* @return the encoded file name
@ -126,7 +126,7 @@ namespace TDEIO
TDEIO_EXPORT TQString encodeFileName( const TQString & str );
/**
* 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
* @return the decoded file name
*/
@ -502,7 +502,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<UDSEntry> UDSEntryList;

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

Загрузка…
Отмена
Сохранить