core; reader_read_string: Support escaped characters.
* src/reader.c (reader_read_string): Support escaped characters.
This commit is contained in:
parent
cf1704f5b3
commit
3f943c8cfa
|
@ -523,15 +523,20 @@ error (SCM key, SCM x)
|
|||
}
|
||||
|
||||
SCM
|
||||
cstring_to_list (char const* s)
|
||||
string_to_list (char const* s, int i)
|
||||
{
|
||||
SCM p = cell_nil;
|
||||
int i = strlen (s);
|
||||
while (i--)
|
||||
p = cons (MAKE_CHAR (s[i]), p);
|
||||
return p;
|
||||
}
|
||||
|
||||
SCM
|
||||
cstring_to_list (char const* s)
|
||||
{
|
||||
return string_to_list (s, strlen (s));
|
||||
}
|
||||
|
||||
// extra lib
|
||||
SCM
|
||||
assert_defined (SCM x, SCM e) ///((internal))
|
||||
|
|
44
src/reader.c
44
src/reader.c
|
@ -369,7 +369,7 @@ reader_read_string ()
|
|||
if (c == '"' || i > 1022)
|
||||
{
|
||||
buf[i] = 0;
|
||||
lst = append2 (lst, cstring_to_list (buf));
|
||||
lst = append2 (lst, string_to_list (buf, i));
|
||||
i = 0;
|
||||
if (c == '"')
|
||||
break;
|
||||
|
@ -379,16 +379,54 @@ reader_read_string ()
|
|||
int p = peekchar ();
|
||||
if (p == '\\' || p == '"')
|
||||
buf[i++] = getchar ();
|
||||
else if (p == 'n')
|
||||
else if (p == '0')
|
||||
{
|
||||
getchar ();
|
||||
buf[i++] = '\n';
|
||||
buf[i++] = '\0';
|
||||
}
|
||||
else if (p == 'a')
|
||||
{
|
||||
getchar ();
|
||||
buf[i++] = '\a';
|
||||
}
|
||||
else if (p == 'b')
|
||||
{
|
||||
getchar ();
|
||||
buf[i++] = '\b';
|
||||
}
|
||||
else if (p == 't')
|
||||
{
|
||||
getchar ();
|
||||
buf[i++] = '\t';
|
||||
}
|
||||
else if (p == 'n')
|
||||
{
|
||||
getchar ();
|
||||
buf[i++] = '\n';
|
||||
}
|
||||
else if (p == 'v')
|
||||
{
|
||||
getchar ();
|
||||
buf[i++] = '\v';
|
||||
}
|
||||
else if (p == 'f')
|
||||
{
|
||||
getchar ();
|
||||
buf[i++] = '\f';
|
||||
}
|
||||
else if (p == 'r')
|
||||
{
|
||||
getchar ();
|
||||
//Nyacc bug
|
||||
//buf[i++] = '\r';
|
||||
buf[i++] = 13;
|
||||
}
|
||||
else if (p == 'e')
|
||||
{
|
||||
getchar ();
|
||||
//buf[i++] = '\e';
|
||||
buf[i++] = 27;
|
||||
}
|
||||
}
|
||||
#if 0 // !__MESC__
|
||||
else if (c == EOF)
|
||||
|
|
Loading…
Reference in a new issue