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 }
KDE 4.6 API Reference