1.1 --- a/noteobj.cpp Wed Mar 15 13:53:53 2006 +0000
1.2 +++ b/noteobj.cpp Tue Jul 17 11:19:51 2007 +0000
1.3 @@ -48,32 +48,36 @@
1.4 {
1.5 QString r=note;
1.6
1.7 + // Remove all <style...> ...</style>
1.8 + QRegExp rx ("<style.*>.*</style>");
1.9 + rx.setMinimal(true);
1.10 + r.replace (rx,"");
1.11 +
1.12 // convert all "<br*>" to "\n"
1.13 - QRegExp re("<br.*>");
1.14 - re.setMinimal(true);
1.15 - r.replace (re,"\n");
1.16 + rx.setPattern ("<br.*>");
1.17 + r.replace (rx,"\n");
1.18
1.19 // convert all "</p>" to "\n"
1.20 - re.setPattern ("</p>");
1.21 - r.replace (re,"\n");
1.22 + rx.setPattern ("</p>");
1.23 + r.replace (rx,"\n");
1.24
1.25 // remove all remaining tags
1.26 - re.setPattern ("<.*>");
1.27 - r.replace (re,"");
1.28 + rx.setPattern ("<.*>");
1.29 + r.replace (rx,"");
1.30
1.31 // If string starts with \n now, remove it.
1.32 // It would be wrong in an OOo export for example
1.33 while (r.at(0)=='\n') r.remove (0,1);
1.34
1.35 // convert "&", "<" and ">"
1.36 - re.setPattern (">");
1.37 - r.replace (re,">");
1.38 - re.setPattern ("<");
1.39 - r.replace (re,"<");
1.40 - re.setPattern ("&");
1.41 - r.replace (re,"&");
1.42 - re.setPattern (""");
1.43 - r.replace (re,"\"");
1.44 + rx.setPattern (">");
1.45 + r.replace (rx,">");
1.46 + rx.setPattern ("<");
1.47 + r.replace (rx,"<");
1.48 + rx.setPattern ("&");
1.49 + r.replace (rx,"&");
1.50 + rx.setPattern (""");
1.51 + r.replace (rx,"\"");
1.52
1.53 return r;
1.54 }
1.55 @@ -148,14 +152,38 @@
1.56 // QTextEdit may generate fontnames with unquoted &, like
1.57 // in "Lucida B&H". This is invalid in XML and thus would crash
1.58 // the XML parser
1.59 - uint pos=0;
1.60 +
1.61 + // More invalid XML is generated with bullet lists:
1.62 + // There are 2 <style> tags in one <li>, so we merge them here
1.63 + int pos=0;
1.64 bool inbracket=false;
1.65 + int begin_bracket;
1.66 bool inquot=false;
1.67 QString n=note;
1.68 while (pos<n.length())
1.69 {
1.70 - if (n.mid(pos,1)=="<") inbracket=true;
1.71 - if (n.mid(pos,1)==">") inbracket=false;
1.72 + if (n.mid(pos,1)=="<")
1.73 + {
1.74 + inbracket=true;
1.75 + begin_bracket=pos;
1.76 + }
1.77 + if (n.mid(pos,1)==">")
1.78 + {
1.79 + inbracket=false;
1.80 + QString s=n.mid(begin_bracket,pos-begin_bracket+1);
1.81 + int sl=s.length();
1.82 + if (s.count("style=\"")>1)
1.83 + {
1.84 + cout << "note: s="<<s.ascii()<<endl;
1.85 + QRegExp rx("style=\\s*\"(.*)\"\\s*style=\\s*\"(.*)\"");
1.86 + rx.setMinimal (true);
1.87 + s.replace(rx,"style=\"\\1 \\2\"");
1.88 + cout << " new: "<<s.ascii()<<endl;
1.89 + n.replace (begin_bracket,sl,s);
1.90 + cout << "pos="<<pos<<" bb="<<begin_bracket<<" s1l="<<sl<<" s2l="<<s.length()<<endl<<endl;
1.91 + pos=pos-(sl-s.length());
1.92 + }
1.93 + }
1.94 if (n.mid(pos,1)=="\"" && inbracket)
1.95 {
1.96 if (!inquot)