Switch to side-by-side view

--- a
+++ b/src/utils/mimeparse.cpp
@@ -0,0 +1,100 @@
+#ifndef lint
+static char rcsid[] = "@(#$Id: mimeparse.cpp,v 1.1 2005-01-26 11:45:55 dockes Exp $ (C) 2004 J.F.Dockes";
+#endif
+
+#ifndef TEST_MIMEPARSE
+
+#include <string>
+#include <ctype.h>
+#include <stdio.h>
+
+#include "mimeparse.h"
+
+using namespace std;
+#define WHITE " \t\n"
+
+static void stripw_lc(string &in)
+{
+    // fprintf(stderr, "In: '%s'\n", in.c_str());
+    string::size_type pos, pos1;
+    pos = in.find_first_not_of(WHITE);
+    if (pos == string::npos) {
+	// All white
+	in = "";
+	return;
+    }
+    in.replace(0, pos, "");
+    pos1 = in.find_last_not_of(WHITE); 
+    if (pos1 != in.length() -1)
+	in  = in.replace(pos1+1, string::npos, "");
+    string::iterator i;
+    for (i = in.begin(); i != in.end(); i++)
+	*i = tolower(*i);
+}
+
+MimeHeaderValue parseMimeHeaderValue(const string &ein)
+{
+    string in = ein;
+    MimeHeaderValue out;
+    string::size_type pos, pos1;
+
+    pos = in.find_first_not_of(WHITE);
+    if (pos == string::npos)
+	return out;
+    in = in.substr(pos, string::npos);
+    if ((pos = in.find_first_of(";")) == string::npos) {
+	out.value = in;
+	return out;
+    } 
+    out.value = in.substr(0, pos);
+    stripw_lc(out.value);
+    in = in.substr(pos+1, string::npos);
+    for (;;) {
+	// Skip whitespace
+	if ((pos = in.find_first_not_of(WHITE)) == string::npos)
+	    return out;
+	in = in.substr(pos, string::npos);
+
+	if ((pos = in.find_first_of("=")) == string::npos)
+	    return out;
+	string pname = in.substr(0, pos);
+	stripw_lc(pname);
+	in = in.substr(pos+1, string::npos);
+
+	pos = in.find_first_of(";");
+	string pvalue = in.substr(0, pos);
+	stripw_lc(pvalue);
+	out.params[pname] = pvalue;
+	if (pos == string::npos)
+	    return out;
+	in = in.substr(pos+1, string::npos);
+    }
+
+    return out;
+
+}
+
+#else 
+
+#include <string>
+#include "mimeparse.h"
+using namespace std;
+int
+main(int argc, const char **argv)
+{
+
+    MimeHeaderValue parsed;
+
+    //    const char *tr = "text/html; charset=utf-8; otherparam=garb";
+    const char *tr = "text/html;charset = UTF-8 ; otherparam=garb;";
+
+    parsed = parseMimeHeaderValue(tr);
+    
+    printf("'%s' \n", parsed.value.c_str());
+    map<string, string>::iterator it;
+    for (it = parsed.params.begin();it != parsed.params.end();it++) {
+	printf("  '%s' = '%s'\n", it->first.c_str(), it->second.c_str());
+    }
+}
+
+#endif // TEST_MIMEPARSE