00001
00002
00003
00004 #include "common.h"
00005 #include "hash.h"
00006 #include "xmlEscape.h"
00007
00008 struct hash *xmlEscapeSymHash()
00009
00010 {
00011 struct hash *symHash = newHash(6);
00012 hashAdd(symHash, "lt", "<");
00013 hashAdd(symHash, "gt", ">");
00014 hashAdd(symHash, "amp", "&");
00015 hashAdd(symHash, "apos", "'");
00016 hashAdd(symHash, "quot", "\"");
00017 return symHash;
00018 }
00019
00020 void xmlEscapeBytesToFile(unsigned char *buffer, int len, FILE *f)
00021
00022 {
00023 unsigned char c;
00024 int i;
00025 for (i=0; i<len; ++i)
00026 {
00027 c = buffer[i];
00028 if (isalnum(c))
00029 fputc(c, f);
00030 else
00031 {
00032 switch (c)
00033 {
00034 case '&':
00035 fputs("&", f);
00036 break;
00037 case '\'':
00038 fputs("'", f);
00039 break;
00040 case '"':
00041 fputs(""", f);
00042 break;
00043 case '<':
00044 fputs("<", f);
00045 break;
00046 case '>':
00047 fputs(">", f);
00048 break;
00049 case ' ':
00050 case '-':
00051 case '\t':
00052 case '\n':
00053 case ',':
00054 case '.':
00055 case ';':
00056 case ':':
00057 case '(':
00058 case ')':
00059 case '[':
00060 case ']':
00061 case '#':
00062 case '/':
00063 fputc(c, f);
00064 break;
00065 default:
00066 fprintf(f, "&#%d;", c);
00067 break;
00068 }
00069 }
00070 }
00071 }
00072
00073 void xmlEscapeStringToFile(char *s, FILE *f)
00074
00075 {
00076 int len = strlen(s);
00077 xmlEscapeBytesToFile((unsigned char *)s, len, f);
00078 }