Unescape two successive single quote characters inside Smalltalk

literal string tokens.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/steptalk/trunk@36235 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Wolfgang Lux 2013-03-02 16:09:07 +00:00
parent 303e860924
commit e180a533b2
2 changed files with 21 additions and 13 deletions

View file

@ -1,3 +1,8 @@
2013-03-02 Wolfgang Lux <wolfgang.lux@gmail.com>
* STSourceReader.m (_STNormalizeStringToken): Unescape two successive
single quote characters inside literal string tokens.
2013-02-08 Wolfgang Lux <wolfgang.lux@gmail.com>
* STBlock.h (value:,value:value:,value:value:value:,valueWithArguments:):

View file

@ -79,29 +79,32 @@ static NSString *_STNormalizeStringToken(NSString *token)
unichar c;
unsigned int len = [token length];
for(i = 0;i < len; i++)
for (i = 0; i < len; i++)
{
c = [token characterAtIndex:i];
if(c == '\\')
if (c == '\\')
{
i++;
c = [token characterAtIndex:i];
switch(c)
switch (c)
{
case 'a': [string appendCharacter:'\a']; break;
case 'b': [string appendCharacter:'\b']; break;
case 'e': [string appendCharacter:'\e']; break;
case 'n': [string appendCharacter:'\n']; break;
case 'r': [string appendCharacter:'\r']; break;
case 't': [string appendCharacter:'\t']; break;
case 'v': [string appendCharacter:'\v']; break;
default:[string appendCharacter:c]; break;
case 'a': c = '\a'; break;
case 'b': c = '\b'; break;
case 'e': c = '\e'; break;
case 'n': c = '\n'; break;
case 'r': c = '\r'; break;
case 't': c = '\t'; break;
case 'v': c = '\v'; break;
default:; break;
}
}
else
else if (c == '\'')
{
[string appendCharacter:c];
i++;
NSCAssert(i < len && [token characterAtIndex:i] == '\'',
@"Unescaped quote character in string token");
}
[string appendCharacter:c];
}
return string;