trans += t + "\n";
}
+
trans=QString("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") + QString("\n <ar>")
+ trans + QString("\n </ar>");
- qDebug()<<trans;
+ //qDebug()<<"\n\n\n\n\n\n\n\n\n before"<<trans;
+ trans=checkTranslation(trans);
+ //qDebug()<<"\n\n after"<<trans;
trans=XslConversion(trans);
QString head = "<html><head>";
return result;
}
+QString TranslationWidget::checkTranslation(QString trans){
+ /*check all "&"*/
+ int pos=0;
+ int pos2;
+ while(pos!=-1){
+ pos=trans.indexOf("&",pos+1);
+ pos2=trans.indexOf("amp;",pos);
+ if(pos!=-1 && pos2!=-1 && pos+1==pos2)
+ continue;
+ pos2=trans.indexOf("gt;",pos);
+ if(pos!=-1 && pos2!=-1 && pos+1==pos2)
+ continue;
+ pos2=trans.indexOf("lt;",pos);
+ if(pos!=-1 && pos2!=-1 && pos+1==pos2)
+ continue;
+ pos2=trans.indexOf("apos;",pos);
+ if(pos!=-1 && pos2!=-1 && pos+1==pos2)
+ continue;
+ pos2=trans.indexOf("quot;",pos);
+ if(pos!=-1 && pos2!=-1 && pos+1==pos2)
+ continue;
+ if(pos!=-1)
+ trans.insert(pos+1,"amp;");
+ if(pos>40)
+ while(1);
+ }
+
+ /*check all "<" and ">" */
+ pos=0;
+ int count=0;
+ while(pos!=-1){
+ pos=trans.indexOf("<",pos+1);
+ pos2=trans.indexOf(">",pos+1);
+ if(pos!=-1 && pos2!=-1){
+ if(trans.at(pos2-1)!='/' && trans.at(pos+1)!='/')
+ count++;
+ if(trans.at(pos+1)=='/')
+ count--;
+ }
+ /* else if(pos==-1 && pos2!=-1){
+ qDebug()<<"pos=-1";
+ trans.remove(pos2,1);
+ }
+ else if(pos2==-1 && pos!=-1){
+ qDebug()<<"pos2=-1";
+ trans.remove(pos,1);
+ }
+ else {
+ qDebug()<<"pos i pos2 = -1";
+ break;
+ }
+ qDebug()<<"count"<<count;
+*/
+ }
+
+ /*check all """ and "'" */
+ pos=0;
+ count=0;
+ while(pos<trans.size()){
+ if(trans.at(pos)=='<')
+ count++;
+ else if(trans.at(pos)=='>')
+ count--;
+ else if(trans.at(pos)=='\"' && count==0)
+ trans.replace(pos,1,""");
+ else if(trans.at(pos)=='\'' && count==0)
+ trans.replace(pos,1,"'");
+ pos++;
+ }
+ return trans;
+}
#ifdef Q_WS_MAEMO_5
void TranslationWidget::initButtons() {
QByteArray StarDictPlugin::read(QByteArray::iterator it,
QByteArray::iterator end, int bytes) {
QByteArray ret;
- if(bytes == 0 && it != end)
- while(*it != '\0')
+
+ if(bytes == 0 && it != end){
+ while(*it != '\0' && it != end)
ret.append(*it++);
+ if(it == end) qDebug()<<"end";
+ else qDebug()<<"000";
+ }
else
for(int i = 0; i < bytes && it != end; i++)
ret.append(*it++);
QString StarDictPlugin::interpret(QByteArray::iterator it,
QByteArray::iterator end, QChar mode,QString key, bool last) {
QString result;
- if(mode == 'm')
+ if(mode == 'm'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'l')
+ }
+ else if(mode == 'l'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
+ }
else if(mode == 'g'){
result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
}
- else if(mode == 't')
+ else if(mode == 't'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
+ }
else if(mode == 'x'){
result += QString::fromUtf8(read(it++, end));
result.replace("</k>","</key><t>");
result.remove(pos,4);
result+="</t>";
}
- else if(mode == 'y')
+ else if(mode == 'y') {
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'k')
+ }
+ else if(mode == 'k'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'w')
+ }
+ else if(mode == 'w'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'h')
+ }
+ else if(mode == 'h'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
- else if(mode == 'r')
+ }
+ else if(mode == 'r'){
+ result += "<key>" + key + "</key>";
result += QString::fromUtf8(read(it++, end));
-
+ }
else if(mode == 'W') {
+ result += "<key>" + key + "</key>";
if(!last) {
QByteArray tmp ;
tmp.append(*(it++));
} else
result += read(it++, end);
} else if(mode == 'P') {
+ result += "<key>" + key + "</key>";
if(!last) {
QByteArray tmp ;
tmp.append(*(it++));
return result;
}
-
QString StarDictPlugin::format(QByteArray raw, QString mode,QString key) {
QString result;
if(mode == "") {
QString StarDictPlugin::search(QString key, qint64 offset, qint32 len) {
- if(!dictReader)
- return "";
- QByteArray raw = dictReader->readString(offset, len);
+ QString dictPath = settings()->value("dictFileName");
+ StarDictReader *reader = StarDictReaderFactory::createReader(dictPath);
+
+ QByteArray raw = reader->readString(offset, len);
qDebug()<<"mod"<<settings()->value("sametypesequence");
- return format(raw, settings()->value("sametypesequence"),key);
+ QString result= format(raw, settings()->value("sametypesequence"),key);
+ delete reader;
+ return result;
}
disconnect(plugin, SIGNAL(notify(Notify::NotifyType,QString)),
this, SIGNAL(notify(Notify::NotifyType,QString)));
plugin->getDictionaryInfo();
- plugin->dictReader = StarDictReaderFactory::
- createReader(settings->value("dictFileName"));
return plugin;
}
else {
}
_name = settings()->value("bookname");
-
return true;
}