projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
parse-xml: Add ability to limit versions dumped.
[pspp]
/
dump.c
diff --git
a/dump.c
b/dump.c
index be5139c6045a5eb2620242d9b2ca4212243e724d..a52cafddf0d414cb06ddd8464c9795949b91e2d9 100644
(file)
--- a/
dump.c
+++ b/
dump.c
@@
-265,22
+265,25
@@
hex_dump(int ofs, int n)
}
static void
}
static void
-dump_style(
void
)
+dump_style(
FILE *stream
)
{
match_byte(1);
match_byte(0);
match_byte(0);
match_byte(0);
match_byte_assert(1);
{
match_byte(1);
match_byte(0);
match_byte(0);
match_byte(0);
match_byte_assert(1);
- get_string(); /* foreground */
- get_string(); /* background */
- get_string(); /* font */
+ char *fg = get_string(); /* foreground */
+ char *bg = get_string(); /* background */
+ char *font = get_string(); /* font */
+ int size = data[pos];
if (!match_byte(14))
match_byte_assert(12); /* size? */
if (!match_byte(14))
match_byte_assert(12); /* size? */
+ fprintf(stream, " fgcolor=\"%s\" bgcolor=\"%s\" font=\"%s\" size=\"%d\"",
+ fg, bg, font, size);
}
static char *
}
static char *
-dump_nested_string(
void
)
+dump_nested_string(
FILE *stream
)
{
char *s = NULL;
{
char *s = NULL;
@@
-288,8
+291,10
@@
dump_nested_string(void)
match_byte_assert (0);
int outer_end = get_end();
s = dump_counted_string();
match_byte_assert (0);
int outer_end = get_end();
s = dump_counted_string();
+ if (s)
+ fprintf(stream, " \"%s\"", s);
if (match_byte(0x31))
if (match_byte(0x31))
- dump_style();
+ dump_style(
stream
);
else
match_byte_assert(0x58);
match_byte_assert(0x58);
else
match_byte_assert(0x58);
match_byte_assert(0x58);
@@
-303,20
+308,23
@@
dump_nested_string(void)
}
static void
}
static void
-dump_
optional_value
(FILE *stream)
+dump_
value_modifier
(FILE *stream)
{
if (match_byte (0x31))
{
if (match_u32 (0))
{
{
if (match_byte (0x31))
{
if (match_u32 (0))
{
+ fprintf(stream, "<special0");
if (match_u32 (1))
{
/* Corpus frequencies:
124 "a"
12 "b"
8 "a, b"
if (match_u32 (1))
{
/* Corpus frequencies:
124 "a"
12 "b"
8 "a, b"
+
+ The given text is appended to the cell in a subscript font.
*/
*/
-
get_string(
);
+
fprintf(stream, " subscript=\"%s\"", get_string()
);
}
else
match_u32_assert (0);
}
else
match_u32_assert (0);
@@
-334,6
+342,7
@@
dump_optional_value(FILE *stream)
match_u32_assert(10);
match_byte(0);
match_byte(0);
match_u32_assert(10);
match_byte(0);
match_byte(0);
+ fprintf(stream, "/>\n");
return;
}
return;
}
@@
-341,10
+350,12
@@
dump_optional_value(FILE *stream)
/* This counted-string appears to be a template string,
e.g. "Design\: [:^1:]1 Within Subjects Design\: [:^1:]2". */
/* This counted-string appears to be a template string,
e.g. "Design\: [:^1:]1 Within Subjects Design\: [:^1:]2". */
- dump_counted_string();
+ char *template = dump_counted_string();
+ if (template)
+ fprintf(stream, " template=\"%s\"", template);
if (match_byte(0x31))
if (match_byte(0x31))
- dump_style();
+ dump_style(
stream
);
else
match_byte_assert(0x58);
if (match_byte(0x31))
else
match_byte_assert(0x58);
if (match_byte(0x31))
@@
-372,32
+383,36
@@
dump_optional_value(FILE *stream)
fprintf(stderr, "outer end discrepancy\n");
exit(1);
}
fprintf(stderr, "outer end discrepancy\n");
exit(1);
}
+ fprintf(stream, "/>\n");
}
else if (match_u32 (1))
{
}
else if (match_u32 (1))
{
- fprintf(stream, "(footnote %d) ", get_u32());
- dump_nested_string();
+ fprintf(stream, "<footnote-ref index=%d", get_u32());
+ dump_nested_string(stream);
+ fprintf(stream, "/>\n");
}
else if (match_u32 (2))
{
}
else if (match_u32 (2))
{
- fprintf(stream, "
(special 2)"
);
+ fprintf(stream, "
<special2 %d %d", data[pos], data[pos + 2]
);
if (!match_byte(0) && !match_byte(1))
match_byte_assert(2);
match_byte_assert(0);
if (!match_u32 (2) && !match_u32(1))
match_u32_assert(3);
if (!match_byte(0) && !match_byte(1))
match_byte_assert(2);
match_byte_assert(0);
if (!match_u32 (2) && !match_u32(1))
match_u32_assert(3);
- dump_nested_string();
+ dump_nested_string(stream);
+ fprintf(stream, "/>\n");
}
else
{
}
else
{
+ fprintf(stream, "<special3");
match_u32_assert(3);
match_u32_assert(3);
- fprintf(stream, "(special 3)");
match_byte_assert(0);
match_byte_assert(0);
match_byte_assert(1);
match_byte_assert(0);
match_u32_assert(2);
match_byte_assert(0);
match_byte_assert(0);
match_byte_assert(1);
match_byte_assert(0);
match_u32_assert(2);
- dump_nested_string(); /* Our corpus doesn't contain any examples with strings though. */
+ dump_nested_string(stream); /* Our corpus doesn't contain any examples with strings though. */
+ fprintf(stream, "/>\n");
}
}
else
}
}
else
@@
-468,7
+483,7
@@
dump_value(FILE *stream, int level)
unsigned int format;
double value;
unsigned int format;
double value;
- dump_
optional_value
(stream);
+ dump_
value_modifier
(stream);
format = get_u32 ();
value = get_double ();
fprintf (stream, "<number value=\"%.*g\" format=\"%s%d.%d\"/>\n",
format = get_u32 ();
value = get_double ();
fprintf (stream, "<number value=\"%.*g\" format=\"%s%d.%d\"/>\n",
@@
-480,7
+495,7
@@
dump_value(FILE *stream, int level)
char *var, *vallab;
double value;
char *var, *vallab;
double value;
- dump_
optional_value
(stream);
+ dump_
value_modifier
(stream);
format = get_u32 ();
value = get_double ();
var = get_string ();
format = get_u32 ();
value = get_double ();
var = get_string ();
@@
-490,7
+505,7
@@
dump_value(FILE *stream, int level)
if (var[0])
fprintf (stream, " variable=\"%s\"", var);
if (vallab[0])
if (var[0])
fprintf (stream, " variable=\"%s\"", var);
if (vallab[0])
- fprintf (stream, " label=\"%s\"
/>\n
", vallab);
+ fprintf (stream, " label=\"%s\"", vallab);
fprintf (stream, "/>\n");
if (!match_byte (1) && !match_byte(2))
match_byte_assert (3);
fprintf (stream, "/>\n");
if (!match_byte (1) && !match_byte(2))
match_byte_assert (3);
@@
-498,7
+513,7
@@
dump_value(FILE *stream, int level)
else if (match_byte (3))
{
char *text = get_string();
else if (match_byte (3))
{
char *text = get_string();
- dump_
optional_value
(stream);
+ dump_
value_modifier
(stream);
char *identifier = get_string();
char *text_eng = get_string();
fprintf (stream, "<string c=\"%s\"", text_eng);
char *identifier = get_string();
char *text_eng = get_string();
fprintf (stream, "<string c=\"%s\"", text_eng);
@@
-515,7
+530,7
@@
dump_value(FILE *stream, int level)
unsigned int format;
char *var, *vallab, *value;
unsigned int format;
char *var, *vallab, *value;
- dump_
optional_value
(stream);
+ dump_
value_modifier
(stream);
format = get_u32 ();
vallab = get_string ();
var = get_string ();
format = get_u32 ();
vallab = get_string ();
var = get_string ();
@@
-532,7
+547,7
@@
dump_value(FILE *stream, int level)
}
else if (match_byte (5))
{
}
else if (match_byte (5))
{
- dump_
optional_value
(stream);
+ dump_
value_modifier
(stream);
char *name = get_string ();
char *label = get_string ();
fprintf (stream, "<variable name=\"%s\"", name);
char *name = get_string ();
char *label = get_string ();
fprintf (stream, "<variable name=\"%s\"", name);
@@
-544,7
+559,7
@@
dump_value(FILE *stream, int level)
}
else
{
}
else
{
- dump_
optional_value
(stream);
+ dump_
value_modifier
(stream);
char *base = get_string();
int x = get_u32();
char *base = get_string();
int x = get_u32();
@@
-1130,7
+1145,7
@@
main(int argc, char *argv[])
/* This might be a version number of some kind, because value 1 seems
to only appear in an SPV file that also required its own weird
/* This might be a version number of some kind, because value 1 seems
to only appear in an SPV file that also required its own weird
- special cases in dump_
optional_value
(). */
+ special cases in dump_
value_modifier
(). */
version = get_u32();
pos -= 4;
if (!match_u32(1))
version = get_u32();
pos -= 4;
if (!match_u32(1))