Make it so .sm files can contain \-escaped characters. Also, make the

writer for .dwi files replace control characters with dwi-safe characters.
Other file formats are unaffected.
This commit is contained in:
John Bauer
2006-12-01 22:15:26 +00:00
parent 3637f83f69
commit 7ebfd65a9b
11 changed files with 151 additions and 76 deletions
+49
View File
@@ -559,6 +559,55 @@ RString join( const RString &sDelimitor, vector<RString>::const_iterator begin,
return sRet;
}
RString SmEscape( const RString &sUnescaped )
{
return SmEscape( sUnescaped.c_str(), sUnescaped.size() );
}
RString SmEscape( const char *cUnescaped, int len )
{
RString answer = "";
for( int i = 0; i < len; ++i )
{
if( cUnescaped[i] == '=' || cUnescaped[i] == '\\' || cUnescaped[i] == ':' ||
cUnescaped[i] == '[' || cUnescaped[i] == ']' || cUnescaped[i] == ';' ||
cUnescaped[i] == '#' || cUnescaped[i] == '\r' || cUnescaped[i] == '\n' ||
cUnescaped[i] == ',' )
answer += "\\";
answer += cUnescaped[i];
}
return answer;
}
RString DwiEscape( const RString &sUnescaped )
{
return DwiEscape( sUnescaped.c_str(), sUnescaped.size() );
}
RString DwiEscape( const char *cUnescaped, int len )
{
RString answer = "";
for( int i = 0; i < len; ++i )
{
switch( cUnescaped[i] )
{
case '=': answer += '-'; break;
case '\\':
case ':':
case '[':
case ']':
case ';': answer += 'I'; break;
case '#':
case '\r':
case '\n':
case ',': answer += ' '; break;
default: answer += cUnescaped[i];
}
}
return answer;
}
template <class S>
static int DelimitorLength( const S &Delimitor )
{