Browse Source

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

This resolves Bug 269
tags/r14.0.0
Timothy Pearson 7 years ago
parent
commit
b4a23465b6
3 changed files with 34 additions and 14 deletions
  1. +29
    -10
      tdeio/tdeio/global.cpp
  2. +3
    -3
      tdeio/tdeio/global.h
  3. +2
    -1
      tdeioslave/file/file.cc

+ 29
- 10
tdeio/tdeio/global.cpp View File

@@ -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;


+ 3
- 3
tdeio/tdeio/global.h View File

@@ -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;


+ 2
- 1
tdeioslave/file/file.cc View File

@@ -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() );


Loading…
Cancel
Save