Convert AppleWorks word processor to HTML, not plain text

This commit is contained in:
Eric Fischer 2012-12-28 22:32:11 -08:00
parent 6259464c13
commit bb4fbe70d6

111
awp.c
View File

@ -17,6 +17,9 @@ process (FILE *f, char *name)
unsigned char header[300]; unsigned char header[300];
unsigned char rec[2]; unsigned char rec[2];
printf("<html>\n");
printf("<pre>\n");
int bold = 0, under = 0, sub = 0, super = 0; int bold = 0, under = 0, sub = 0, super = 0;
if (fread (header, sizeof (unsigned char), 300, f) != 300) { if (fread (header, sizeof (unsigned char), 300, f) != 300) {
@ -56,40 +59,70 @@ process (FILE *f, char *name)
printf (" "); printf (" ");
for (i = 2; i < (line[1] & 0x7f) + 2; i++) { for (i = 2; i < (line[1] & 0x7f) + 2; i++) {
if (line[i] == 1) if (line[i] == 1 && bold == 0) {
bold = 1; printf("<b>");
else if (line[i] == 2) bold++;
bold = 0; } else if (line[i] == 2 && bold > 0) {
else if (line[i] == 3) printf("</b>");
super = 1; bold--;
else if (line[i] == 4) } else if (line[i] == 3 && super == 0) {
super = 0; printf("<sup>");
else if (line[i] == 5) super++;
sub = 1; } else if (line[i] == 4 && super > 0) {
else if (line[i] == 6) printf("</sup>");
sub = 0; super--;
else if (line[i] == 7) } else if (line[i] == 5 && sub == 0) {
under = 1; printf("<sub>");
else if (line[i] == 8) sub++;
under = 0; } else if (line[i] == 6 && sub > 0) {
else if (line[i] == 11) printf("</sub>");
printf (" "); /* sticky space */ sub--;
else if (line[i] == 0x16) } else if (line[i] == 7 && under == 0) {
printf (" "); /* tab */ printf("<u>");
else if (line[i] == 0x17) under++;
printf (" "); /* tab spacer */ } else if (line[i] == 8 && under > 0) {
else if (line[i] >= 32) { printf("</u>");
if (bold) under--;
printf ("%c\b", line[i]); } else if (line[i] == 11) {
if (under) printf ("&nbsp;"); /* sticky space */
printf ("_\b"); } else if (line[i] == 0x16) {
printf ("&nbsp;"); /* tab */
printf ("%c", line[i]); } else if (line[i] == 0x17) {
printf ("&nbsp;"); /* tab spacer */
} else if (line[i] >= 32) {
if (line[i] == '&') {
printf("&amp;");
} else if (line[i] == '<') {
printf("&lt;");
} else if (line[i] == '>') {
printf("&gt;");
} else {
printf ("%c", line[i]);
}
} }
} }
free (line); free (line);
printf ("\n"); printf ("\n");
if (line[1] & 0x80) {
while (bold > 0) {
printf("</b>");
bold--;
}
while (under > 0) {
printf("</u>");
under--;
}
while (super > 0) {
printf("</sup>");
super--;
}
while (sub > 0) {
printf("</sub>");
sub--;
}
}
} else if (rec[1] = 0xd0) { } else if (rec[1] = 0xd0) {
int i; int i;
@ -98,9 +131,29 @@ process (FILE *f, char *name)
printf ("\n"); printf ("\n");
while (bold > 0) {
printf("</b>");
bold--;
}
while (under > 0) {
printf("</u>");
under--;
}
while (super > 0) {
printf("</sup>");
super--;
}
while (sub > 0) {
printf("</sub>");
sub--;
}
bold = under = super = sub = 0; bold = under = super = sub = 0;
} }
} }
printf("</pre>");
printf("</html>");
} }
int int