improve printing of quoted objects
This commit is contained in:
parent
c2e29efbc7
commit
5ada26eab3
62
C/write.c
62
C/write.c
@ -167,31 +167,6 @@ wrputn(Int n, struct write_globs *wglb) /* writes an integer */
|
|||||||
|
|
||||||
#define wrputs(s, stream) Sfputs(s, stream)
|
#define wrputs(s, stream) Sfputs(s, stream)
|
||||||
|
|
||||||
static void
|
|
||||||
wrpututf8(const char *s, struct write_globs *wglb) /* writes an integer */
|
|
||||||
|
|
||||||
{
|
|
||||||
IOSTREAM *stream = wglb->stream;
|
|
||||||
|
|
||||||
|
|
||||||
int chr;
|
|
||||||
char *ptr = (char *)s;
|
|
||||||
|
|
||||||
if (wglb->Write_strings)
|
|
||||||
wrputc('`', stream);
|
|
||||||
else
|
|
||||||
wrputc('"', stream);
|
|
||||||
do {
|
|
||||||
ptr = utf8_get_char(ptr, &chr);
|
|
||||||
if (chr == '\0') break;
|
|
||||||
wrputc(chr, stream);
|
|
||||||
} while (TRUE);
|
|
||||||
if (wglb->Write_strings)
|
|
||||||
wrputc('`', stream);
|
|
||||||
else
|
|
||||||
wrputc('"', stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
wrputws(wchar_t *s, wrf stream) /* writes a string */
|
wrputws(wchar_t *s, wrf stream) /* writes a string */
|
||||||
@ -497,7 +472,7 @@ AtomIsSymbols(unsigned char *s) /* Is this atom just formed by symbols ? */
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
write_quoted(int ch, int quote, wrf stream)
|
write_quoted(wchar_t ch, wchar_t quote, wrf stream)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
if (!(Yap_GetModuleEntry(CurrentModule)->flags & M_CHARESCAPE)) {
|
if (!(Yap_GetModuleEntry(CurrentModule)->flags & M_CHARESCAPE)) {
|
||||||
@ -511,7 +486,16 @@ write_quoted(int ch, int quote, wrf stream)
|
|||||||
} else {
|
} else {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case '\\':
|
case '\\':
|
||||||
|
wrputc('\\', stream);
|
||||||
|
wrputc('\\', stream);
|
||||||
|
break;
|
||||||
case '\'':
|
case '\'':
|
||||||
|
if (ch == quote)
|
||||||
|
wrputc('\\', stream);
|
||||||
|
wrputc(ch, stream);
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
if (ch == quote)
|
||||||
wrputc('\\', stream);
|
wrputc('\\', stream);
|
||||||
wrputc(ch, stream);
|
wrputc(ch, stream);
|
||||||
break;
|
break;
|
||||||
@ -559,6 +543,28 @@ write_quoted(int ch, int quote, wrf stream)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
write_string(const char *s, struct write_globs *wglb) /* writes an integer */
|
||||||
|
{
|
||||||
|
IOSTREAM *stream = wglb->stream;
|
||||||
|
int chr;
|
||||||
|
char *ptr = (char *)s;
|
||||||
|
|
||||||
|
if (wglb->Write_strings)
|
||||||
|
wrputc('`', stream);
|
||||||
|
else
|
||||||
|
wrputc('"', stream);
|
||||||
|
do {
|
||||||
|
ptr = utf8_get_char(ptr, &chr);
|
||||||
|
if (chr == '\0') break;
|
||||||
|
write_quoted(chr, '"', stream);
|
||||||
|
} while (TRUE);
|
||||||
|
if (wglb->Write_strings)
|
||||||
|
wrputc('`', stream);
|
||||||
|
else
|
||||||
|
wrputc('"', stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* writes an atom */
|
/* writes an atom */
|
||||||
static void
|
static void
|
||||||
@ -645,7 +651,7 @@ putString(Term string, struct write_globs *wglb)
|
|||||||
wrf stream = wglb->stream;
|
wrf stream = wglb->stream;
|
||||||
wrputc('"', stream);
|
wrputc('"', stream);
|
||||||
while (string != TermNil) {
|
while (string != TermNil) {
|
||||||
int ch = IntOfTerm(HeadOfTerm(string));
|
wchar_t ch = IntOfTerm(HeadOfTerm(string));
|
||||||
write_quoted(ch, '"', stream);
|
write_quoted(ch, '"', stream);
|
||||||
string = TailOfTerm(string);
|
string = TailOfTerm(string);
|
||||||
}
|
}
|
||||||
@ -927,7 +933,7 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, str
|
|||||||
wrputf(FloatOfTerm(t),wglb);
|
wrputf(FloatOfTerm(t),wglb);
|
||||||
return;
|
return;
|
||||||
case (CELL)FunctorString:
|
case (CELL)FunctorString:
|
||||||
wrpututf8(StringOfTerm(t),wglb);
|
write_string(StringOfTerm(t),wglb);
|
||||||
return;
|
return;
|
||||||
case (CELL)FunctorAttVar:
|
case (CELL)FunctorAttVar:
|
||||||
write_var(RepAppl(t)+1, wglb, &nrwt);
|
write_var(RepAppl(t)+1, wglb, &nrwt);
|
||||||
|
Reference in New Issue
Block a user