[PATCH] Partial fix for Bug 30711

Brennan T Vincent brennanv at email.arizona.edu
Tue Apr 10 11:38:29 PDT 2012


Miklos and Michael,

I apologize for confusing you, Miklos; I was intending to ask for
comments on partially-completed work, not submitting a final product
to be pushed to the tree. Should I have given my e-mail a different
subject to indicate that? I'm still getting used to the conventions
and culture of this list :). You can revert the patch if you want; on
the other hand, it's probably not hurting anything to leave it there
for now while I work on something more complete, so it's up to you
what to do.

Thanks for the comments, Michael; I will take them into account and
hopefully have a finished patch sometime by the end of this week, if
my commitments with school permit.

> if you fix these problems then i'll push the patch :)

As I discussed above, Miklos seems already to have pushed it, but I
won't be offended if someone reverts it :)

Cheers,
Brennan

On Tue, Apr 10, 2012 at 6:24 AM, Michael Stahl <mstahl at redhat.com> wrote:
> On 08/04/12 23:47, Brennan T Vincent wrote:
>> Hi,
>>
>> I have modified the patch somewhat; please take a look at this new version.
>>
>> On Sat, Apr 7, 2012 at 2:32 AM, Brennan T Vincent
>> <brennanv at email.arizona.edu> wrote:
>>> Hi,
>>>
>>> Attached is a patch partially fixing Bug 30711. When the user has not
>>> chosen to use OpenDocument format with extensions, text input fields
>>> are now exported in a format OOo understands.
>
> hi Brennan,
>
> first, thanks for working on this bug.
>
> hmmm... at first i wasn't sure if exporting as bookmark is the right
> approach, but the other alternative is to export as an ODF text field,
> and this doesn't permit having formatting in the field, and also the
> fieldmarks may cross paragraph breaks, which is not supported at all in
> ODF text fields, so bookmark indeed looks like the best fall-back.
>
> now for some specific nit-picking:
>
> in the git commit message, please refer to freedesktop.org bugs as
> fdo#30711 because that enables automatic bugzilla notifications.
>
>> +                            const Any aValue = xParameters->getByName("Name");
>> +                            const Type aValueType = aValue.getValueType();
>> +                            if (aValueType == ::getCppuType((OUString*)0))
>> +                            {
>> +                                OUString sValue;
>> +                                aValue >>= sValue;
>> +                                GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_NAME, sValue);
>> +                            }
>
> this could be simpler: the operator>>= returns a boolean to indicate
> success, so this is equivalent:
>
> const Any aValue = ...
> OUString sValue;
> if (aVaule >>= sValue)
> {
>   // use sValue
> }
>
>> +                        GetExport().StartElement(XML_NAMESPACE_TEXT, XML_BOOKMARK_START, sal_False);
>> +                        GetExport().EndElement(XML_NAMESPACE_TEXT, XML_BOOKMARK_START, sal_False);
>
> (and others) could also be simpler and less error prone: there is a
> class that can be put on the stack and which starts the element in its
> ctor and ends it in its dtor:
>
>>     SvXMLElementExport aElem( GetExport(), !bAutoStyles,
>>         XML_NAMESPACE_TEXT, XML_BOOKMARK_START, sal_False, sal_False );
>
> also, i think the way you wrote it is even wrong, because there is a
> non-obvious parameter here that has to be taken into account: bAutoStyles.
>
> the ODF export actually iterates over all content twice, once with
> bAutoStyles=true, to export the hard formatting attributes as automatic
> styles, and second with bAutoStyles=false, to export the actual content.
>  so the StartElement/EndElement must not be executed if bAutoStyles is
> true (it may actually happen to work currently because the Writer is the
> only application where the auto style pass is optimized away in some
> cases because Writer can do auto styles itself, but it's still wrong).
> passing the second boolean parameter to SvXMLElementExport ensures this.
>

>
>> +                if (openFieldMark == TEXT)
>> +                {
>> +                    GetExport().StartElement( XML_NAMESPACE_TEXT, XML_TEXT_INPUT, sal_False );
>> +                }
>>                  exportText( aText, rPrevCharIsSpace );
>> +                if (openFieldMark == TEXT)
>> +                {
>> +                    GetExport().EndElement( XML_NAMESPACE_TEXT, XML_TEXT_INPUT, sal_False );
>> +                }
>> +                openFieldMark = NONE;
>
> this will cause the first (and only the first) span contained in the
> fieldmark to be an ODF input field; i'm not really sure if that is a
> good idea or not because it only works in the simplest case (but
> generally field marks may contain multiple paragraphs...).
>
> regards,
>  michael
>
> _______________________________________________
> LibreOffice mailing list
> LibreOffice at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/libreoffice


More information about the LibreOffice mailing list