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
|
SCM
|
||||||
cstring_to_list (char const* s)
|
string_to_list (char const* s, int i)
|
||||||
{
|
{
|
||||||
SCM p = cell_nil;
|
SCM p = cell_nil;
|
||||||
int i = strlen (s);
|
|
||||||
while (i--)
|
while (i--)
|
||||||
p = cons (MAKE_CHAR (s[i]), p);
|
p = cons (MAKE_CHAR (s[i]), p);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SCM
|
||||||
|
cstring_to_list (char const* s)
|
||||||
|
{
|
||||||
|
return string_to_list (s, strlen (s));
|
||||||
|
}
|
||||||
|
|
||||||
// extra lib
|
// extra lib
|
||||||
SCM
|
SCM
|
||||||
assert_defined (SCM x, SCM e) ///((internal))
|
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)
|
if (c == '"' || i > 1022)
|
||||||
{
|
{
|
||||||
buf[i] = 0;
|
buf[i] = 0;
|
||||||
lst = append2 (lst, cstring_to_list (buf));
|
lst = append2 (lst, string_to_list (buf, i));
|
||||||
i = 0;
|
i = 0;
|
||||||
if (c == '"')
|
if (c == '"')
|
||||||
break;
|
break;
|
||||||
|
@ -379,16 +379,54 @@ reader_read_string ()
|
||||||
int p = peekchar ();
|
int p = peekchar ();
|
||||||
if (p == '\\' || p == '"')
|
if (p == '\\' || p == '"')
|
||||||
buf[i++] = getchar ();
|
buf[i++] = getchar ();
|
||||||
else if (p == 'n')
|
else if (p == '0')
|
||||||
{
|
{
|
||||||
getchar ();
|
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')
|
else if (p == 't')
|
||||||
{
|
{
|
||||||
getchar ();
|
getchar ();
|
||||||
buf[i++] = '\t';
|
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__
|
#if 0 // !__MESC__
|
||||||
else if (c == EOF)
|
else if (c == EOF)
|
||||||
|
|
Loading…
Reference in New Issue