[Kmymoney-devel] KMyMoney: proposal to replace hard coded utf-8 in KReportsView::KReportTab
Alvaro Soliverez
asoliverez at gmail.com
Mon Mar 29 21:31:27 CEST 2010
On Mon, Mar 29, 2010 at 3:52 PM, Bernd Gonsior <bgo at freeplexx.de> wrote:
>> Hello Bernd,
>> besides the html encoding, is there another fix or feature included in
>> your patches?
>> The encoding is already fixed in SVN, and your patch includes a
>> refactoring which is nice, but makes it harder to spot any other
>> changes in there.
>>
>> Regards,
>> Alvaro
>
> There is no other fix or feature in the patch. But there is a problem:
> Originally 'utf-8' was hard coded __twice__.
>
> As far as i can see svn revision r1107848 replaces only one of them. Currently
> (svn revision 1108741) there is still a hard coded 'utf-8' in
> kmymoney/views/kreportsview.cpp, line 147:
>
> QRegExp exp("(.*)(<link.*css\" href=)\"(.*)\">(<meta.*utf-8\" />)(.*)");
> QString table = createTable();
> if (exp.indexIn(table) != -1 && includeCSS) {
>
> This code causes 2 problems:
>
> 1. in the current state the execution of the regexp 'exp.indexIn(table)' takes
> a very long time when the html generated by 'createTable()' does NOT contain
> 'utf-8' but - as it is in my case - 'ISO-8859-1'. It took 119 seconds (yes - 2
> minutes!) with 100% CPU on a Phenom II 3 GHz for a simple 2 pages html-report
>
> Obviously this regexp was used to split the html-string generated by
> 'createTable()' in a way, that the css which was included as link to a file
> could be replaced with inline-css, if necessary.
>
> 2. minor problem:
> I do not know how the compiler optimizes the logical AND in
> 'exp.indexIn(table) != -1 && includeCSS'. If the compiler simply works
> left-to-right, the expensive regexp will be evaluated always.
>
> When first grepping the source for 'utf-8' it looked like a simple problem,
> but it emerged a developing story as mentioned above. That's why i thought
> replacing that implicit regexp with explicit declared methods could help.
>
> The changes compared to the original state before svn revision r1107848 at a
> glance:
>
> - all changes occured in KReportsView::KReportTab only
> - 1 method signature was changed:
> - createTable(const QString& links, bool includeCSS)
> (the method has a new parameter 'includeCSS' with default value 'false')
> - 2 method bodies were changed:
> - saveAs
> - createTable
> - 3 new methods were introduced:
> - cssFileNameGet
> - htmlHeaderGet
> - htmlFooterGet
>
> HTH
> Bernd
>
Ok. I'll fix the other encoding. I didn't spot that one.
Now, for a more permanent fix of this issue, I'd like to move the
whole HTML generation code to a separate class. That would move a lot
of code which doesn't really belong to the view out of the main class.
Would you like to take on that?
Regards,
Alvaro
More information about the KMyMoney-devel
mailing list