4 getTok(const char **pp)
6 enum { inAtom, inString, init, inComment };
8 const char *tokStart = 0;
23 if (state != inString)
29 else if (state != inString)
70 /* key must be lowercase ASCII */
73 matchkey(const char *start, const char *end, const char *key)
77 for (; start != end; start++, key++)
78 if (*start != *key && *start != 'A' + (*key - 'a'))
84 getXMLCharset(const char *buf, char *charset)
91 if (matchkey(p, next, "text"))
92 strcpy(charset, "us-ascii");
93 else if (!matchkey(p, next, "application"))
99 if (matchkey(p, next, "xml"))
105 if (matchkey(p, next, "charset")) {
107 if (p && *p == '=') {
112 while (++p != next - 1) {
115 if (s == charset + CHARSET_MAX - 1) {
124 if (next - p > CHARSET_MAX - 1)
141 main(int argc, char **argv)
143 char buf[CHARSET_MAX];
144 getXMLCharset(argv[1], buf);
145 printf("charset = \"%s\"\n", buf);