Sonnet
parseucd.cpp
Go to the documentation of this file.00001
00022 #include <QtCore/QDebug>
00023 #include <QtCore/QFile>
00024 #include <QtCore/QHash>
00025 #include <QtCore/QRegExp>
00026 #include <QtCore/QString>
00027 #include <QtCore/QStringList>
00028 #include <QtCore/QTextStream>
00029
00030 int main()
00031 {
00032 QString str;
00033 QTextStream in(stdin);
00034
00035 QFile sout;
00036 sout.open(stdout, QIODevice::WriteOnly);
00037 QDataStream out(&sout);
00038
00039 bool ok,ok2;
00040 QHash<quint32,quint8> data;
00041 QHash<qint8,QString> catalog;
00042
00043 while ( ok )
00044 {
00045 QString line = in.readLine();
00046 ok = !in.atEnd();
00047
00048 if ( line.isEmpty() || line.startsWith('#') )
00049 continue;
00050
00051 QRegExp rx(";");
00052 int split = rx.indexIn(line);
00053
00054 QString catagoryString = line.right( line.size() - split - 1 ).simplified();
00055
00056 qint8 catagory = catalog.key(catagoryString);
00057 if(!catagory)
00058 {
00059 catalog[ catagory = catalog.size()+1 ] = catagoryString;
00060 }
00061
00062 QString codes = line.left( split ).simplified();
00063 QStringList codeList = codes.split ( ".." );
00064
00065 quint32 start = codeList.at(0).toInt(&ok2, 16);
00066 quint32 end = (codeList.size() == 2) ? codeList.at(1).toInt(&ok2, 16) : start;
00067 for (quint32 code = start; code<=end; ++code)
00068 {
00069 data.insert( code, catagory );
00070 qDebug() << "[" << catagory << "] " << code;
00071 }
00072 }
00073
00074 out << catalog << data;
00075 }