LCOV - code coverage report
Current view: top level - xmloff/source/text - txtfldi.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 638 1633 39.1 %
Date: 2015-06-13 12:38:46 Functions: 68 352 19.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : /** @#file
      22             :  *
      23             :  *  Import of all text fields except those from txtvfldi.cxx
      24             :  *  (variable related text fields and database display fields)
      25             :  */
      26             : #include "txtfldi.hxx"
      27             : #include "txtvfldi.hxx"
      28             : #include <xmloff/xmlimp.hxx>
      29             : #include <xmloff/xmlnumi.hxx>
      30             : #include <xmloff/txtimp.hxx>
      31             : #include <xmloff/xmlnmspe.hxx>
      32             : #include <xmloff/nmspmap.hxx>
      33             : #include <xmloff/xmltoken.hxx>
      34             : #include <xmloff/xmluconv.hxx>
      35             : #include <xmloff/xmlement.hxx>
      36             : #include "XMLStringBufferImportContext.hxx"
      37             : #include <xmloff/XMLEventsImportContext.hxx>
      38             : #include <com/sun/star/xml/sax/XAttributeList.hpp>
      39             : #include <com/sun/star/text/UserDataPart.hpp>
      40             : #include <com/sun/star/style/NumberingType.hpp>
      41             : #include <com/sun/star/text/PlaceholderType.hpp>
      42             : #include <com/sun/star/text/ReferenceFieldPart.hpp>
      43             : #include <com/sun/star/text/ReferenceFieldSource.hpp>
      44             : #include <com/sun/star/text/XTextField.hpp>
      45             : #include <com/sun/star/text/XTextContent.hpp>
      46             : #include <com/sun/star/beans/XPropertySet.hpp>
      47             : #include <com/sun/star/beans/XPropertySetInfo.hpp>
      48             : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
      49             : #include <com/sun/star/text/XTextFieldsSupplier.hpp>
      50             : #include <com/sun/star/text/XDependentTextField.hpp>
      51             : #include <com/sun/star/text/SetVariableType.hpp>
      52             : #include <com/sun/star/text/FilenameDisplayFormat.hpp>
      53             : #include <com/sun/star/text/ChapterFormat.hpp>
      54             : #include <com/sun/star/text/TemplateDisplayFormat.hpp>
      55             : #include <com/sun/star/beans/PropertyValue.hpp>
      56             : #include <com/sun/star/text/BibliographyDataType.hpp>
      57             : #include <com/sun/star/text/BibliographyDataField.hpp>
      58             : #include <com/sun/star/util/XUpdatable.hpp>
      59             : #include <com/sun/star/sdb/CommandType.hpp>
      60             : 
      61             : #include <sax/tools/converter.hxx>
      62             : 
      63             : #include <rtl/ustring.hxx>
      64             : #include <rtl/ustrbuf.hxx>
      65             : #include <rtl/math.hxx>
      66             : #include <tools/debug.hxx>
      67             : #include <osl/diagnose.h>
      68             : 
      69             : 
      70             : 
      71             : using namespace ::com::sun::star;
      72             : using namespace ::com::sun::star::uno;
      73             : using namespace ::com::sun::star::text;
      74             : using namespace ::com::sun::star::lang;
      75             : using namespace ::com::sun::star::beans;
      76             : using namespace ::com::sun::star::document;
      77             : using namespace ::com::sun::star::util;
      78             : using namespace ::com::sun::star::xml::sax;
      79             : using namespace ::xmloff::token;
      80             : 
      81             : 
      82             : 
      83             : // SO API string constants
      84             : 
      85             : 
      86             : // service prefix and service anems
      87             : const sal_Char sAPI_textfield_prefix[]  = "com.sun.star.text.TextField.";
      88             : const sal_Char sAPI_fieldmaster_prefix[] = "com.sun.star.text.FieldMaster.";
      89             : const sal_Char sAPI_presentation_prefix[] = "com.sun.star.presentation.TextField.";
      90             : 
      91             : const sal_Char sAPI_extended_user[]             = "ExtendedUser";
      92             : const sal_Char sAPI_user_data_type[]            = "UserDataType";
      93             : const sal_Char sAPI_jump_edit[]                 = "JumpEdit";
      94             : const sal_Char sAPI_date_time[]                 = "DateTime";
      95             : const sal_Char sAPI_page_number[]               = "PageNumber";
      96             : const sal_Char sAPI_database_next[]             = "DatabaseNextSet";
      97             : const sal_Char sAPI_database_select[]           = "DatabaseNumberOfSet";
      98             : const sal_Char sAPI_database_number[]           = "DatabaseSetNumber";
      99             : const sal_Char sAPI_database_name[]             = "DatabaseName";
     100             : const sal_Char sAPI_docinfo_change_author[]     = "DocInfo.ChangeAuthor";
     101             : const sal_Char sAPI_docinfo_change_date_time[]  = "DocInfo.ChangeDateTime";
     102             : const sal_Char sAPI_docinfo_edit_time[]         = "DocInfo.EditTime";
     103             : const sal_Char sAPI_docinfo_description[]       = "DocInfo.Description";
     104             : const sal_Char sAPI_docinfo_create_author[]     = "DocInfo.CreateAuthor";
     105             : const sal_Char sAPI_docinfo_create_date_time[]  = "DocInfo.CreateDateTime";
     106             : const sal_Char sAPI_docinfo_custom[]            = "DocInfo.Custom";
     107             : const sal_Char sAPI_docinfo_print_author[]      = "DocInfo.PrintAuthor";
     108             : const sal_Char sAPI_docinfo_print_date_time[]   = "DocInfo.PrintDateTime";
     109             : const sal_Char sAPI_docinfo_keywords[]          = "DocInfo.KeyWords";
     110             : const sal_Char sAPI_docinfo_subject[]           = "DocInfo.Subject";
     111             : const sal_Char sAPI_docinfo_title[]             = "DocInfo.Title";
     112             : const sal_Char sAPI_docinfo_revision[]          = "DocInfo.Revision";
     113             : const sal_Char sAPI_hidden_paragraph[]          = "HiddenParagraph";
     114             : const sal_Char sAPI_hidden_text[]               = "HiddenText";
     115             : const sal_Char sAPI_conditional_text[]          = "ConditionalText";
     116             : const sal_Char sAPI_file_name[]                 = "FileName";
     117             : const sal_Char sAPI_chapter[]                   = "Chapter";
     118             : const sal_Char sAPI_template_name[]             = "TemplateName";
     119             : const sal_Char sAPI_page_count[]                = "PageCount";
     120             : const sal_Char sAPI_paragraph_count[]           = "ParagraphCount";
     121             : const sal_Char sAPI_word_count[]                = "WordCount";
     122             : const sal_Char sAPI_character_count[]           = "CharacterCount";
     123             : const sal_Char sAPI_table_count[]               = "TableCount";
     124             : const sal_Char sAPI_graphic_object_count[]      = "GraphicObjectCount";
     125             : const sal_Char sAPI_embedded_object_count[]     = "EmbeddedObjectCount";
     126             : const sal_Char sAPI_reference_page_set[]        = "ReferencePageSet";
     127             : const sal_Char sAPI_reference_page_get[]        = "ReferencePageGet";
     128             : const sal_Char sAPI_macro[]                     = "Macro";
     129             : const sal_Char sAPI_dde[]                       = "DDE";
     130             : const sal_Char sAPI_get_reference[]             = "GetReference";
     131             : const sal_Char sAPI_sheet_name[]                = "SheetName";
     132             : const sal_Char sAPI_pagename[]                  = "PageName";
     133             : const sal_Char sAPI_url[]                       = "URL";
     134             : const sal_Char sAPI_bibliography[]              = "Bibliography";
     135             : const sal_Char sAPI_annotation[]                = "Annotation";
     136             : const sal_Char sAPI_script[]                    = "Script";
     137             : const sal_Char sAPI_measure[]                   = "Measure";
     138             : const sal_Char sAPI_drop_down[]                 = "DropDown";
     139             : const sal_Char sAPI_header[]                    = "Header";
     140             : const sal_Char sAPI_footer[]                    = "Footer";
     141             : const sal_Char sAPI_datetime[]                  = "DateTime";
     142             : 
     143             : // property names
     144             : const sal_Char sAPI_is_fixed[]          = "IsFixed";
     145             : const sal_Char sAPI_content[]           = "Content";
     146             : const sal_Char sAPI_author[]            = "Author";
     147             : const sal_Char sAPI_initials[]          = "Initials";
     148             : const sal_Char sAPI_full_name[]         = "FullName";
     149             : const sal_Char sAPI_place_holder_type[] = "PlaceHolderType";
     150             : const sal_Char sAPI_place_holder[]      = "PlaceHolder";
     151             : const sal_Char sAPI_hint[]              = "Hint";
     152             : const sal_Char sAPI_name[]              = "Name";
     153             : const sal_Char sAPI_sub_type[]          = "SubType";
     154             : const sal_Char sAPI_date_time_value[]   = "DateTimeValue";
     155             : const sal_Char sAPI_number_format[]     = "NumberFormat";
     156             : const sal_Char sAPI_user_text[]         = "UserText";
     157             : const sal_Char sAPI_numbering_type[]    = "NumberingType";
     158             : const sal_Char sAPI_offset[]            = "Offset";
     159             : const sal_Char sAPI_data_base_name[]    = "DataBaseName";
     160             : const sal_Char sAPI_data_base_u_r_l[]   = "DataBaseURL";
     161             : const sal_Char sAPI_data_table_name[]   = "DataTableName";
     162             : const sal_Char sAPI_condition[]         = "Condition";
     163             : const sal_Char sAPI_set_number[]        = "SetNumber";
     164             : const sal_Char sAPI_true_content[]      = "TrueContent";
     165             : const sal_Char sAPI_false_content[]     = "FalseContent";
     166             : const sal_Char sAPI_revision[]          = "Revision";
     167             : const sal_Char sAPI_file_format[]       = "FileFormat";
     168             : const sal_Char sAPI_chapter_format[]    = "ChapterFormat";
     169             : const sal_Char sAPI_level[]             = "Level";
     170             : const sal_Char sAPI_is_date[]           = "IsDate";
     171             : const sal_Char sAPI_adjust[]            = "Adjust";
     172             : const sal_Char sAPI_on[]                = "On";
     173             : const sal_Char sAPI_is_automatic_update[] = "IsAutomaticUpdate";
     174             : const sal_Char sAPI_source_name[]       = "SourceName";
     175             : const sal_Char sAPI_current_presentation[] = "CurrentPresentation";
     176             : const sal_Char sAPI_reference_field_part[] = "ReferenceFieldPart";
     177             : const sal_Char sAPI_reference_field_source[] = "ReferenceFieldSource";
     178             : const sal_Char sAPI_dde_command_type[]  = "DDECommandType";
     179             : const sal_Char sAPI_dde_command_file[]  = "DDECommandFile";
     180             : const sal_Char sAPI_dde_command_element[] = "DDECommandElement";
     181             : // sAPI_url: also used as service name
     182             : const sal_Char sAPI_target_frame[]      = "TargetFrame";
     183             : const sal_Char sAPI_representation[]    = "Representation";
     184             : const sal_Char sAPI_url_content[]       = "URLContent";
     185             : const sal_Char sAPI_script_type[]       = "ScriptType";
     186             : const sal_Char sAPI_is_hidden[]         = "IsHidden";
     187             : const sal_Char sAPI_is_condition_true[] = "IsConditionTrue";
     188             : const sal_Char sAPI_data_command_type[] = "DataCommandType";
     189             : const sal_Char sAPI_is_fixed_language[] = "IsFixedLanguage";
     190             : const sal_Char sAPI_is_visible[]        = "IsVisible";
     191             : const sal_Char sAPI_TextRange[]         = "TextRange";
     192             : 
     193             : const sal_Char sAPI_true[] = "TRUE";
     194             : 
     195             : 
     196           0 : TYPEINIT1( XMLTextFieldImportContext, SvXMLImportContext);
     197             : 
     198        2158 : XMLTextFieldImportContext::XMLTextFieldImportContext(
     199             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
     200             :     const sal_Char* pService,
     201             :     sal_uInt16 nPrefix, const OUString& rElementName)
     202             : :   SvXMLImportContext( rImport, nPrefix, rElementName )
     203             : ,   rTextImportHelper(rHlp)
     204             : ,   sServicePrefix(sAPI_textfield_prefix)
     205        2158 : ,   bValid(false)
     206             : {
     207             :     DBG_ASSERT(NULL != pService, "Need service name!");
     208        2158 :     sServiceName = OUString::createFromAscii(pService);
     209        2158 : }
     210             : 
     211        2158 : void XMLTextFieldImportContext::StartElement(
     212             :     const Reference<XAttributeList> & xAttrList)
     213             : {
     214             :     // process attributes
     215        2158 :     sal_Int16 nLength = xAttrList->getLength();
     216        3296 :     for(sal_Int16 i=0; i<nLength; i++) {
     217             : 
     218        1138 :         OUString sLocalName;
     219        1138 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
     220        2276 :             GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
     221             : 
     222        1138 :         ProcessAttribute(rTextImportHelper.GetTextFieldAttrTokenMap().
     223        2276 :                              Get(nPrefix, sLocalName),
     224        2276 :                          xAttrList->getValueByIndex(i) );
     225        1138 :     }
     226        2158 : }
     227             : 
     228        2158 : XMLTextFieldImportContext::~XMLTextFieldImportContext() {
     229        2158 : }
     230             : 
     231         170 : OUString XMLTextFieldImportContext::GetContent()
     232             : {
     233         170 :     if (sContent.isEmpty())
     234             :     {
     235         148 :         sContent = sContentBuffer.makeStringAndClear();
     236             :     }
     237             : 
     238         170 :     return sContent;
     239             : }
     240             : 
     241        2023 : void XMLTextFieldImportContext::EndElement()
     242             : {
     243             :     DBG_ASSERT(!GetServiceName().isEmpty(), "no service name for element!");
     244        2023 :     if (bValid)
     245             :     {
     246             : 
     247             :         // create field/Service
     248        2023 :         Reference<XPropertySet> xPropSet;
     249        2023 :         if (CreateField(xPropSet, sServicePrefix + GetServiceName()))
     250             :         {
     251             :             // set field properties
     252        2023 :             PrepareField(xPropSet);
     253             : 
     254             :             // attach field to document
     255        2023 :             Reference<XTextContent> xTextContent(xPropSet, UNO_QUERY);
     256             : 
     257             :             // workaround for #80606#
     258             :             try
     259             :             {
     260        2023 :                 rTextImportHelper.InsertTextContent(xTextContent);
     261             :             }
     262           0 :             catch (const lang::IllegalArgumentException&)
     263             :             {
     264             :                 // ignore
     265             :             }
     266        4046 :             return;
     267           0 :         }
     268             :     }
     269             : 
     270             :     // in case of error: write element content
     271           0 :     rTextImportHelper.InsertString(GetContent());
     272             : }
     273             : 
     274        2409 : void XMLTextFieldImportContext::Characters(const OUString& rContent)
     275             : {
     276        2409 :     sContentBuffer.append(rContent);
     277        2409 : }
     278             : 
     279        2209 : bool XMLTextFieldImportContext::CreateField(
     280             :     Reference<XPropertySet> & xField,
     281             :     const OUString& rServiceName)
     282             : {
     283             :     // instantiate new XTextField:
     284             :     // ask import for model, model is factory, ask factory to create service
     285             : 
     286        2209 :     Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),UNO_QUERY);
     287        2209 :     if( xFactory.is() )
     288             :     {
     289        2209 :         Reference<XInterface> xIfc = xFactory->createInstance(rServiceName);
     290        2209 :         if( xIfc.is() )
     291             :         {
     292        2209 :             Reference<XPropertySet> xTmp( xIfc, UNO_QUERY );
     293             : 
     294        2209 :             xField = xTmp;
     295             :         } else {
     296           0 :             return false;   // can't create instance
     297        2209 :         }
     298             :     } else {
     299           0 :         return false;   // can't get MultiServiceFactory
     300             :     }
     301             : 
     302        2209 :     return true;
     303             : }
     304             : 
     305             : /// create the appropriate field context from
     306             : XMLTextFieldImportContext*
     307        2250 : XMLTextFieldImportContext::CreateTextFieldImportContext(
     308             :     SvXMLImport& rImport,
     309             :     XMLTextImportHelper& rHlp,
     310             :     sal_uInt16 nPrefix,
     311             :     const OUString& rName,
     312             :     sal_uInt16 nToken)
     313             : {
     314        2250 :     XMLTextFieldImportContext* pContext = NULL;
     315             : 
     316        2250 :     switch (nToken)
     317             :     {
     318             :         case XML_TOK_TEXT_SENDER_FIRSTNAME:
     319             :         case XML_TOK_TEXT_SENDER_LASTNAME:
     320             :         case XML_TOK_TEXT_SENDER_INITIALS:
     321             :         case XML_TOK_TEXT_SENDER_TITLE:
     322             :         case XML_TOK_TEXT_SENDER_POSITION:
     323             :         case XML_TOK_TEXT_SENDER_EMAIL:
     324             :         case XML_TOK_TEXT_SENDER_PHONE_PRIVATE:
     325             :         case XML_TOK_TEXT_SENDER_FAX:
     326             :         case XML_TOK_TEXT_SENDER_COMPANY:
     327             :         case XML_TOK_TEXT_SENDER_PHONE_WORK:
     328             :         case XML_TOK_TEXT_SENDER_STREET:
     329             :         case XML_TOK_TEXT_SENDER_CITY:
     330             :         case XML_TOK_TEXT_SENDER_POSTAL_CODE:
     331             :         case XML_TOK_TEXT_SENDER_COUNTRY:
     332             :         case XML_TOK_TEXT_SENDER_STATE_OR_PROVINCE:
     333             :             pContext =
     334             :                 new XMLSenderFieldImportContext( rImport, rHlp,
     335           6 :                                                  nPrefix, rName, nToken );
     336           6 :             break;
     337             : 
     338             :         case XML_TOK_TEXT_AUTHOR_NAME:
     339             :         case XML_TOK_TEXT_AUTHOR_INITIALS:
     340             :             pContext =
     341             :                 new XMLAuthorFieldImportContext( rImport, rHlp,
     342           1 :                                                  nPrefix, rName, nToken );
     343           1 :             break;
     344             : 
     345             :         case XML_TOK_TEXT_PLACEHOLDER:
     346             :             pContext =
     347             :                 new XMLPlaceholderFieldImportContext( rImport, rHlp,
     348          34 :                                                       nPrefix, rName);
     349          34 :             break;
     350             :         case XML_TOK_TEXT_SEQUENCE:
     351             :             pContext =
     352             :                 new XMLSequenceFieldImportContext( rImport, rHlp,
     353           7 :                                                    nPrefix, rName );
     354           7 :             break;
     355             :         case XML_TOK_TEXT_TEXT_INPUT:
     356             :             pContext =
     357             :                 new XMLTextInputFieldImportContext( rImport, rHlp,
     358           9 :                                                     nPrefix, rName );
     359           9 :             break;
     360             :         case XML_TOK_TEXT_EXPRESSION:
     361             :             pContext =
     362             :                 new XMLExpressionFieldImportContext( rImport, rHlp,
     363           0 :                                                      nPrefix, rName );
     364           0 :             break;
     365             :         case XML_TOK_TEXT_VARIABLE_SET:
     366             :             pContext =
     367             :                 new XMLVariableSetFieldImportContext( rImport, rHlp,
     368           3 :                                                       nPrefix, rName );
     369           3 :             break;
     370             :         case XML_TOK_TEXT_VARIABLE_INPUT:
     371             :             pContext =
     372             :                 new XMLVariableInputFieldImportContext( rImport, rHlp,
     373           0 :                                                         nPrefix, rName );
     374           0 :             break;
     375             :         case XML_TOK_TEXT_VARIABLE_GET:
     376             :             pContext =
     377             :                 new XMLVariableGetFieldImportContext( rImport, rHlp,
     378           0 :                                                       nPrefix, rName );
     379           0 :             break;
     380             :         case XML_TOK_TEXT_USER_FIELD_GET:
     381             :             pContext = new XMLUserFieldImportContext( rImport, rHlp,
     382           0 :                                                       nPrefix, rName );
     383           0 :             break;
     384             :         case XML_TOK_TEXT_USER_FIELD_INPUT:
     385             :             pContext = new XMLUserFieldInputImportContext( rImport, rHlp,
     386           3 :                                                            nPrefix, rName );
     387           3 :             break;
     388             :         case XML_TOK_TEXT_TIME:
     389             :             pContext = new XMLTimeFieldImportContext( rImport, rHlp,
     390         168 :                                                       nPrefix, rName );
     391         168 :             break;
     392             :         case XML_TOK_TEXT_PAGE_CONTINUATION_STRING:
     393             :         case XML_TOK_TEXT_PAGE_CONTINUATION:
     394             :             pContext = new XMLPageContinuationImportContext( rImport, rHlp,
     395           0 :                                                              nPrefix, rName );
     396           0 :             break;
     397             : 
     398             :         case XML_TOK_TEXT_PAGE_NUMBER:
     399             :             pContext = new XMLPageNumberImportContext( rImport, rHlp,
     400         529 :                                                        nPrefix, rName );
     401         529 :             break;
     402             : 
     403             :         case XML_TOK_TEXT_DATE:
     404             :             pContext = new XMLDateFieldImportContext( rImport, rHlp,
     405         182 :                                                       nPrefix, rName );
     406         182 :             break;
     407             : 
     408             :         case XML_TOK_TEXT_DATABASE_NAME:
     409             :             pContext = new XMLDatabaseNameImportContext( rImport, rHlp,
     410           0 :                                                          nPrefix, rName );
     411           0 :             break;
     412             :         case XML_TOK_TEXT_DATABASE_NEXT:
     413             :             pContext = new XMLDatabaseNextImportContext( rImport, rHlp,
     414           0 :                                                          nPrefix, rName );
     415           0 :             break;
     416             :         case XML_TOK_TEXT_DATABASE_SELECT:
     417             :             pContext = new XMLDatabaseSelectImportContext( rImport, rHlp,
     418           0 :                                                            nPrefix, rName );
     419           0 :             break;
     420             :         case XML_TOK_TEXT_DATABASE_ROW_NUMBER:
     421             :             pContext = new XMLDatabaseNumberImportContext( rImport, rHlp,
     422           0 :                                                            nPrefix, rName );
     423           0 :             break;
     424             :         case XML_TOK_TEXT_DATABASE_DISPLAY:
     425             :             pContext = new XMLDatabaseDisplayImportContext( rImport, rHlp,
     426          69 :                                                             nPrefix, rName );
     427          69 :             break;
     428             :         case XML_TOK_TEXT_CONDITIONAL_TEXT:
     429             :             pContext = new XMLConditionalTextImportContext( rImport, rHlp,
     430           0 :                                                             nPrefix, rName );
     431           0 :             break;
     432             :         case XML_TOK_TEXT_HIDDEN_TEXT:
     433             :             pContext = new XMLHiddenTextImportContext( rImport, rHlp,
     434           0 :                                                        nPrefix, rName );
     435           0 :             break;
     436             :         case XML_TOK_TEXT_HIDDEN_PARAGRAPH:
     437             :             pContext = new XMLHiddenParagraphImportContext( rImport, rHlp,
     438           0 :                                                             nPrefix, rName );
     439           0 :             break;
     440             :         case XML_TOK_TEXT_DOCUMENT_DESCRIPTION:
     441             :         case XML_TOK_TEXT_DOCUMENT_TITLE:
     442             :         case XML_TOK_TEXT_DOCUMENT_SUBJECT:
     443             :         case XML_TOK_TEXT_DOCUMENT_KEYWORDS:
     444             :             pContext = new XMLSimpleDocInfoImportContext( rImport, rHlp,
     445             :                                                           nPrefix, rName,
     446             :                                                           nToken, true,
     447         190 :                                                           false );
     448         190 :             break;
     449             :         case XML_TOK_TEXT_DOCUMENT_CREATION_AUTHOR:
     450             :         case XML_TOK_TEXT_DOCUMENT_PRINT_AUTHOR:
     451             :         case XML_TOK_TEXT_DOCUMENT_SAVE_AUTHOR:
     452             :             pContext = new XMLSimpleDocInfoImportContext( rImport, rHlp,
     453             :                                                           nPrefix, rName,
     454             :                                                           nToken, false,
     455           0 :                                                           true );
     456           0 :             break;
     457             : 
     458             :         case XML_TOK_TEXT_DOCUMENT_CREATION_DATE:
     459             :         case XML_TOK_TEXT_DOCUMENT_CREATION_TIME:
     460             :         case XML_TOK_TEXT_DOCUMENT_PRINT_DATE:
     461             :         case XML_TOK_TEXT_DOCUMENT_PRINT_TIME:
     462             :         case XML_TOK_TEXT_DOCUMENT_SAVE_DATE:
     463             :         case XML_TOK_TEXT_DOCUMENT_SAVE_TIME:
     464             :         case XML_TOK_TEXT_DOCUMENT_EDIT_DURATION:
     465             :             pContext = new XMLDateTimeDocInfoImportContext( rImport, rHlp,
     466             :                                                             nPrefix, rName,
     467           2 :                                                             nToken );
     468           2 :             break;
     469             : 
     470             :         case XML_TOK_TEXT_DOCUMENT_REVISION:
     471             :             pContext = new XMLRevisionDocInfoImportContext( rImport, rHlp,
     472             :                                                             nPrefix, rName,
     473           0 :                                                             nToken );
     474           0 :             break;
     475             : 
     476             :         case XML_TOK_TEXT_DOCUMENT_USER_DEFINED:
     477             :             pContext = new XMLUserDocInfoImportContext( rImport, rHlp,
     478             :                                                         nPrefix, rName,
     479           0 :                                                         nToken );
     480           0 :             break;
     481             : 
     482             :         case XML_TOK_TEXT_FILENAME:
     483             :             pContext = new XMLFileNameImportContext( rImport, rHlp,
     484           4 :                                                      nPrefix, rName );
     485           4 :             break;
     486             : 
     487             :         case XML_TOK_TEXT_CHAPTER:
     488             :             pContext = new XMLChapterImportContext( rImport, rHlp,
     489          12 :                                                     nPrefix, rName );
     490          12 :             break;
     491             : 
     492             :         case XML_TOK_TEXT_TEMPLATENAME:
     493             :             pContext = new XMLTemplateNameImportContext( rImport, rHlp,
     494           0 :                                                          nPrefix, rName );
     495           0 :             break;
     496             : 
     497             :         case XML_TOK_TEXT_WORD_COUNT:
     498             :         case XML_TOK_TEXT_PARAGRAPH_COUNT:
     499             :         case XML_TOK_TEXT_TABLE_COUNT:
     500             :         case XML_TOK_TEXT_CHARACTER_COUNT:
     501             :         case XML_TOK_TEXT_IMAGE_COUNT:
     502             :         case XML_TOK_TEXT_OBJECT_COUNT:
     503             :         case XML_TOK_TEXT_PAGE_COUNT:
     504             :             pContext = new XMLCountFieldImportContext( rImport, rHlp,
     505         184 :                                                        nPrefix, rName, nToken);
     506         184 :             break;
     507             : 
     508             :         case XML_TOK_TEXT_GET_PAGE_VAR:
     509             :             pContext = new XMLPageVarGetFieldImportContext( rImport, rHlp,
     510           0 :                                                             nPrefix, rName );
     511           0 :             break;
     512             : 
     513             :         case XML_TOK_TEXT_SET_PAGE_VAR:
     514             :             pContext = new XMLPageVarSetFieldImportContext( rImport, rHlp,
     515           0 :                                                             nPrefix, rName );
     516           0 :             break;
     517             : 
     518             :         case XML_TOK_TEXT_MACRO:
     519             :             pContext = new XMLMacroFieldImportContext( rImport, rHlp,
     520           0 :                                                        nPrefix, rName );
     521           0 :             break;
     522             : 
     523             :         case XML_TOK_TEXT_DDE:
     524             :             pContext = new XMLDdeFieldImportContext( rImport, rHlp,
     525           0 :                                                      nPrefix, rName );
     526           0 :             break;
     527             : 
     528             :         case XML_TOK_TEXT_REFERENCE_REF:
     529             :         case XML_TOK_TEXT_BOOKMARK_REF:
     530             :         case XML_TOK_TEXT_NOTE_REF:
     531             :         case XML_TOK_TEXT_SEQUENCE_REF:
     532             :             pContext = new XMLReferenceFieldImportContext( rImport, rHlp,
     533             :                                                            nToken,
     534          18 :                                                            nPrefix, rName );
     535          18 :             break;
     536             : 
     537             :         case XML_TOK_TEXT_SHEET_NAME:
     538             :             pContext = new XMLSheetNameImportContext( rImport, rHlp,
     539         352 :                                                       nPrefix, rName );
     540         352 :             break;
     541             : 
     542             :         case XML_TOK_TEXT_PAGE_NAME:
     543             :             pContext = new XMLPageNameFieldImportContext( rImport, rHlp,
     544           0 :                                                           nPrefix, rName );
     545           0 :             break;
     546             : 
     547             :         case XML_TOK_TEXT_BIBLIOGRAPHY_MARK:
     548             :             pContext = new XMLBibliographyFieldImportContext( rImport, rHlp,
     549           0 :                                                               nPrefix, rName );
     550           0 :             break;
     551             : 
     552             :         case XML_TOK_TEXT_ANNOTATION:
     553             :         case XML_TOK_TEXT_ANNOTATION_END:
     554             :             pContext = new XMLAnnotationImportContext( rImport, rHlp,
     555             :                                                        nToken,
     556          56 :                                                        nPrefix, rName);
     557          56 :             break;
     558             : 
     559             :         case XML_TOK_TEXT_SCRIPT:
     560             :             pContext = new XMLScriptImportContext( rImport, rHlp,
     561           0 :                                                    nPrefix, rName);
     562           0 :             break;
     563             : 
     564             :         case XML_TOK_TEXT_MEASURE:
     565             :             pContext = new XMLMeasureFieldImportContext( rImport, rHlp,
     566           5 :                                                          nPrefix, rName );
     567           5 :             break;
     568             : 
     569             :         case XML_TOK_TEXT_TABLE_FORMULA:
     570             :             pContext = new XMLTableFormulaImportContext( rImport, rHlp,
     571           0 :                                                          nPrefix, rName );
     572           0 :             break;
     573             :         case XML_TOK_TEXT_DROP_DOWN:
     574             :             pContext = new XMLDropDownFieldImportContext( rImport, rHlp,
     575           0 :                                                           nPrefix, rName );
     576           0 :             break;
     577             :         case XML_TOK_DRAW_HEADER:
     578             :             pContext = new XMLHeaderFieldImportContext( rImport, rHlp,
     579          83 :                                                           nPrefix, rName );
     580          83 :             break;
     581             :         case XML_TOK_DRAW_FOOTER:
     582             :             pContext = new XMLFooterFieldImportContext( rImport, rHlp,
     583         120 :                                                           nPrefix, rName );
     584         120 :             break;
     585             :         case XML_TOK_DRAW_DATE_TIME:
     586             :             pContext = new XMLDateTimeFieldImportContext( rImport, rHlp,
     587         120 :                                                           nPrefix, rName );
     588         120 :             break;
     589             : 
     590             :         default:
     591             :             // ignore! May not even be a textfield.
     592             :             // (Reminder: This method is called inside default:-branch)
     593          93 :             pContext = NULL;
     594          93 :             break;
     595             :     }
     596             : 
     597        2250 :     return pContext;
     598             : }
     599             : 
     600             : 
     601           0 : void XMLTextFieldImportContext::ForceUpdate(
     602             :     const Reference<XPropertySet> & rPropertySet)
     603             : {
     604             :     // force update
     605           0 :     Reference<XUpdatable> xUpdate(rPropertySet, UNO_QUERY);
     606           0 :     if (xUpdate.is())
     607             :     {
     608           0 :         xUpdate->update();
     609             :     }
     610             :     else
     611             :     {
     612             :         OSL_FAIL("Expected XUpdatable support!");
     613           0 :     }
     614           0 : }
     615             : 
     616             : 
     617             : 
     618             : 
     619             : // XMLSenderFieldImportContext
     620             : 
     621             : 
     622           0 : TYPEINIT1( XMLSenderFieldImportContext, XMLTextFieldImportContext);
     623             : 
     624           7 : XMLSenderFieldImportContext::XMLSenderFieldImportContext(
     625             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
     626             :     sal_uInt16 nPrfx, const OUString& sLocalName,
     627             :     sal_uInt16 nToken)
     628             :     : XMLTextFieldImportContext(rImport, rHlp, sAPI_extended_user,nPrfx, sLocalName)
     629             :     , nSubType(0)
     630             :     , sPropertyFixed(sAPI_is_fixed)
     631             :     , sPropertyFieldSubType(sAPI_user_data_type)
     632             :     , sPropertyContent(sAPI_content)
     633             :     , bFixed(true)
     634           7 :     , nElementToken(nToken)
     635             : {
     636           7 : }
     637             : 
     638           6 : void XMLSenderFieldImportContext::StartElement(
     639             :     const Reference<XAttributeList> & xAttrList)
     640             : {
     641           6 :     bValid = true;
     642           6 :     switch (nElementToken) {
     643             :     case XML_TOK_TEXT_SENDER_FIRSTNAME:
     644           0 :         nSubType = UserDataPart::FIRSTNAME;
     645           0 :         break;
     646             :     case XML_TOK_TEXT_SENDER_LASTNAME:
     647           0 :         nSubType = UserDataPart::NAME;
     648           0 :         break;
     649             :     case XML_TOK_TEXT_SENDER_INITIALS:
     650           0 :         nSubType = UserDataPart::SHORTCUT;
     651           0 :         break;
     652             :     case XML_TOK_TEXT_SENDER_TITLE:
     653           0 :         nSubType = UserDataPart::TITLE;
     654           0 :         break;
     655             :     case XML_TOK_TEXT_SENDER_POSITION:
     656           0 :         nSubType = UserDataPart::POSITION;
     657           0 :         break;
     658             :     case XML_TOK_TEXT_SENDER_EMAIL:
     659           1 :         nSubType = UserDataPart::EMAIL;
     660           1 :         break;
     661             :     case XML_TOK_TEXT_SENDER_PHONE_PRIVATE:
     662           1 :         nSubType = UserDataPart::PHONE_PRIVATE;
     663           1 :         break;
     664             :     case XML_TOK_TEXT_SENDER_FAX:
     665           0 :         nSubType = UserDataPart::FAX;
     666           0 :         break;
     667             :     case XML_TOK_TEXT_SENDER_COMPANY:
     668           0 :         nSubType = UserDataPart::COMPANY;
     669           0 :         break;
     670             :     case XML_TOK_TEXT_SENDER_PHONE_WORK:
     671           0 :         nSubType = UserDataPart::PHONE_COMPANY;
     672           0 :         break;
     673             :     case XML_TOK_TEXT_SENDER_STREET:
     674           1 :         nSubType = UserDataPart::STREET;
     675           1 :         break;
     676             :     case XML_TOK_TEXT_SENDER_CITY:
     677           1 :         nSubType = UserDataPart::CITY;
     678           1 :         break;
     679             :     case XML_TOK_TEXT_SENDER_POSTAL_CODE:
     680           1 :         nSubType = UserDataPart::ZIP;
     681           1 :         break;
     682             :     case XML_TOK_TEXT_SENDER_COUNTRY:
     683           0 :         nSubType = UserDataPart::COUNTRY;
     684           0 :         break;
     685             :     case XML_TOK_TEXT_SENDER_STATE_OR_PROVINCE:
     686           1 :         nSubType = UserDataPart::STATE;
     687           1 :         break;
     688             :     default:
     689           0 :         bValid = false;
     690           0 :         break;
     691             :     }
     692             : 
     693             :     // process Attributes
     694           6 :     XMLTextFieldImportContext::StartElement(xAttrList);
     695           6 : }
     696             : 
     697           7 : void XMLSenderFieldImportContext::ProcessAttribute(
     698             :     sal_uInt16 nAttrToken,
     699             :     const OUString& sAttrValue)
     700             : {
     701           7 :     if (XML_TOK_TEXTFIELD_FIXED == nAttrToken) {
     702             : 
     703             :         // set bVal
     704           7 :         bool bVal(false);
     705           7 :         bool const bRet = ::sax::Converter::convertBool(bVal, sAttrValue);
     706             : 
     707             :         // set bFixed if successful
     708           7 :         if (bRet) {
     709           7 :             bFixed = bVal;
     710             :         }
     711             :     }
     712           7 : }
     713             : 
     714           6 : void XMLSenderFieldImportContext::PrepareField(
     715             :     const Reference<XPropertySet> & rPropSet)
     716             : {
     717             :     // set members
     718           6 :     Any aAny;
     719           6 :     aAny <<= nSubType;
     720           6 :     rPropSet->setPropertyValue(sPropertyFieldSubType, aAny);
     721             : 
     722             :     // set fixed
     723           6 :     aAny.setValue( &bFixed, cppu::UnoType<bool>::get() );
     724           6 :     rPropSet->setPropertyValue(sPropertyFixed, aAny);
     725             : 
     726             :     // set content if fixed
     727           6 :     if (bFixed)
     728             :     {
     729             :         // in organizer or styles-only mode: force update
     730           0 :         if (GetImport().GetTextImport()->IsOrganizerMode() ||
     731           0 :             GetImport().GetTextImport()->IsStylesOnlyMode()   )
     732             :         {
     733           0 :             ForceUpdate(rPropSet);
     734             :         }
     735             :         else
     736             :         {
     737           0 :             aAny <<= GetContent();
     738           0 :             rPropSet->setPropertyValue(sPropertyContent, aAny);
     739             :         }
     740           6 :     }
     741           6 : }
     742             : 
     743             : 
     744             : 
     745             : 
     746             : // XMLAuthorFieldImportContext
     747             : 
     748             : 
     749           0 : TYPEINIT1( XMLAuthorFieldImportContext, XMLSenderFieldImportContext);
     750             : 
     751           1 : XMLAuthorFieldImportContext::XMLAuthorFieldImportContext(
     752             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
     753             :     sal_uInt16 nPrfx, const OUString& sLocalName,
     754             :     sal_uInt16 nToken)
     755             : :   XMLSenderFieldImportContext(rImport, rHlp, nPrfx, sLocalName, nToken)
     756             : ,   bAuthorFullName(true)
     757             : ,   sServiceAuthor(sAPI_author)
     758             : ,   sPropertyAuthorFullName(sAPI_full_name)
     759             : ,   sPropertyFixed(sAPI_is_fixed)
     760           1 : ,   sPropertyContent(sAPI_content)
     761             : {
     762             :     // overwrite service name from XMLSenderFieldImportContext
     763           1 :     SetServiceName(sServiceAuthor);
     764           1 : }
     765             : 
     766           1 : void XMLAuthorFieldImportContext::StartElement(
     767             :     const Reference<XAttributeList> & xAttrList) {
     768             : 
     769           1 :     bAuthorFullName = (XML_TOK_TEXT_AUTHOR_INITIALS != nElementToken);
     770           1 :     bValid = true;
     771             : 
     772             :     // process Attributes
     773           1 :     XMLTextFieldImportContext::StartElement(xAttrList);
     774           1 : }
     775             : 
     776           1 : void XMLAuthorFieldImportContext::PrepareField(
     777             :     const Reference<XPropertySet> & rPropSet)
     778             : {
     779             :     // set members
     780           1 :     Any aAny;
     781           1 :     aAny.setValue( &bAuthorFullName, cppu::UnoType<bool>::get() );
     782           1 :     rPropSet->setPropertyValue(sPropertyAuthorFullName, aAny);
     783             : 
     784           1 :     aAny.setValue( &bFixed, cppu::UnoType<bool>::get() );
     785           1 :     rPropSet->setPropertyValue(sPropertyFixed, aAny);
     786             : 
     787             :     // set content if fixed
     788           1 :     if (bFixed)
     789             :     {
     790             :         // organizer or styles-only mode: force update
     791           0 :         if (GetImport().GetTextImport()->IsOrganizerMode() ||
     792           0 :             GetImport().GetTextImport()->IsStylesOnlyMode()   )
     793             :         {
     794           0 :             ForceUpdate(rPropSet);
     795             :         }
     796             :         else
     797             :         {
     798           0 :             aAny <<= GetContent();
     799           0 :             rPropSet->setPropertyValue(sPropertyContent, aAny);
     800             :         }
     801           1 :     }
     802           1 : }
     803             : 
     804             : 
     805             : 
     806             : // page continuation string
     807             : 
     808             : 
     809           0 : TYPEINIT1( XMLPageContinuationImportContext, XMLTextFieldImportContext );
     810             : 
     811             : static SvXMLEnumMapEntry const lcl_aSelectPageAttrMap[] =
     812             : {
     813             :     { XML_PREVIOUS,     PageNumberType_PREV },
     814             :     { XML_CURRENT,      PageNumberType_CURRENT },
     815             :     { XML_NEXT,         PageNumberType_NEXT },
     816             :     { XML_TOKEN_INVALID, 0 },
     817             : };
     818             : 
     819           0 : XMLPageContinuationImportContext::XMLPageContinuationImportContext(
     820             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
     821             :     const OUString& sLocalName)
     822             : :   XMLTextFieldImportContext(rImport, rHlp, sAPI_page_number, nPrfx, sLocalName)
     823             : ,   sPropertySubType(sAPI_sub_type)
     824             : ,   sPropertyUserText(sAPI_user_text)
     825             : ,   sPropertyNumberingType(sAPI_numbering_type)
     826             : ,   eSelectPage(PageNumberType_CURRENT)
     827           0 : ,   sStringOK(false)
     828             : {
     829           0 :     bValid = true;
     830           0 : }
     831             : 
     832           0 : void XMLPageContinuationImportContext::ProcessAttribute(
     833             :     sal_uInt16 nAttrToken, const OUString& sAttrValue )
     834             : {
     835           0 :     switch(nAttrToken)
     836             :     {
     837             :         case XML_TOK_TEXTFIELD_SELECT_PAGE:
     838             :         {
     839             :             sal_uInt16 nTmp;
     840           0 :             if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
     841           0 :                                                 lcl_aSelectPageAttrMap)
     842           0 :                 && (PageNumberType_CURRENT != nTmp) )
     843             :             {
     844           0 :                 eSelectPage = (PageNumberType)nTmp;
     845             :             }
     846           0 :             break;
     847             :         }
     848             :         case XML_TOK_TEXTFIELD_STRING_VALUE:
     849           0 :             sString = sAttrValue;
     850           0 :             sStringOK = true;
     851           0 :             break;
     852             :     }
     853           0 : }
     854             : 
     855           0 : void XMLPageContinuationImportContext::PrepareField(
     856             :     const Reference<XPropertySet> & xPropertySet)
     857             : {
     858           0 :     Any aAny;
     859             : 
     860           0 :     aAny <<= eSelectPage;
     861           0 :     xPropertySet->setPropertyValue(sPropertySubType, aAny);
     862             : 
     863           0 :     aAny <<= (sStringOK ? sString : GetContent());
     864           0 :     xPropertySet->setPropertyValue(sPropertyUserText, aAny);
     865             : 
     866           0 :     aAny <<= style::NumberingType::CHAR_SPECIAL;
     867           0 :     xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
     868           0 : }
     869             : 
     870             : 
     871             : 
     872             : 
     873             : // page number field
     874             : 
     875             : 
     876           0 : TYPEINIT1( XMLPageNumberImportContext, XMLTextFieldImportContext );
     877             : 
     878         529 : XMLPageNumberImportContext::XMLPageNumberImportContext(
     879             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
     880             :     const OUString& sLocalName)
     881             : :   XMLTextFieldImportContext(rImport, rHlp, sAPI_page_number, nPrfx, sLocalName)
     882             : ,   sPropertySubType(sAPI_sub_type)
     883             : ,   sPropertyNumberingType(sAPI_numbering_type)
     884             : ,   sPropertyOffset(sAPI_offset)
     885         529 : ,   sNumberSync(GetXMLToken(XML_FALSE))
     886             : ,   nPageAdjust(0)
     887             : ,   eSelectPage(PageNumberType_CURRENT)
     888        1058 : ,   sNumberFormatOK(false)
     889             : {
     890         529 :     bValid = true;
     891         529 : }
     892             : 
     893          78 : void XMLPageNumberImportContext::ProcessAttribute(
     894             :     sal_uInt16 nAttrToken,
     895             :     const OUString& sAttrValue )
     896             : {
     897          78 :     switch (nAttrToken)
     898             :     {
     899             :         case XML_TOK_TEXTFIELD_NUM_FORMAT:
     900          17 :             sNumberFormat = sAttrValue;
     901          17 :             sNumberFormatOK = true;
     902          17 :             break;
     903             :         case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
     904           0 :             sNumberSync = sAttrValue;
     905           0 :             break;
     906             :         case XML_TOK_TEXTFIELD_SELECT_PAGE:
     907             :         {
     908             :             sal_uInt16 nTmp;
     909          61 :             if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
     910             :                                                 lcl_aSelectPageAttrMap))
     911             :             {
     912          61 :                 eSelectPage = (PageNumberType)nTmp;
     913             :             }
     914          61 :             break;
     915             :         }
     916             :         case XML_TOK_TEXTFIELD_PAGE_ADJUST:
     917             :         {
     918             :             sal_Int32 nTmp;
     919           0 :             if (::sax::Converter::convertNumber(nTmp, sAttrValue))
     920             :             {
     921           0 :                 nPageAdjust = (sal_Int16)nTmp;
     922             :             }
     923           0 :             break;
     924             :         }
     925             :     }
     926          78 : }
     927             : 
     928         529 : void XMLPageNumberImportContext::PrepareField(
     929             :         const Reference<XPropertySet> & xPropertySet)
     930             : {
     931         529 :     Any aAny;
     932             : 
     933             :     // all properties are optional
     934             :     Reference<XPropertySetInfo> xPropertySetInfo(
     935        1058 :         xPropertySet->getPropertySetInfo());
     936             : 
     937         529 :     if (xPropertySetInfo->hasPropertyByName(sPropertyNumberingType))
     938             :     {
     939             :         sal_Int16 nNumType;
     940          61 :         if( sNumberFormatOK )
     941             :         {
     942          17 :             nNumType= style::NumberingType::ARABIC;
     943          17 :             GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
     944             :                                                     sNumberFormat,
     945          34 :                                                     sNumberSync );
     946             :         }
     947             :         else
     948          44 :             nNumType = style::NumberingType::PAGE_DESCRIPTOR;
     949             : 
     950          61 :         aAny <<= nNumType;
     951          61 :         xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
     952             :     }
     953             : 
     954         529 :     if (xPropertySetInfo->hasPropertyByName(sPropertyOffset))
     955             :     {
     956             :         // adjust offset
     957          61 :         switch (eSelectPage)
     958             :         {
     959             :             case PageNumberType_PREV:
     960           0 :                 nPageAdjust--;
     961           0 :                 break;
     962             :             case PageNumberType_CURRENT:
     963          61 :                 break;
     964             :             case PageNumberType_NEXT:
     965           0 :                 nPageAdjust++;
     966           0 :                 break;
     967             :             default:
     968             :                 SAL_WARN("xmloff.text", "unknown page number type");
     969             :         }
     970          61 :         aAny <<= nPageAdjust;
     971          61 :         xPropertySet->setPropertyValue(sPropertyOffset, aAny);
     972             :     }
     973             : 
     974         529 :     if (xPropertySetInfo->hasPropertyByName(sPropertySubType))
     975             :     {
     976          61 :         aAny <<= eSelectPage;
     977          61 :         xPropertySet->setPropertyValue(sPropertySubType, aAny);
     978         529 :     }
     979         529 : }
     980             : 
     981             : 
     982             : 
     983             : 
     984             : // Placeholder
     985             : 
     986             : 
     987           0 : TYPEINIT1( XMLPlaceholderFieldImportContext, XMLTextFieldImportContext);
     988             : 
     989          34 : XMLPlaceholderFieldImportContext::XMLPlaceholderFieldImportContext(
     990             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
     991             :     sal_uInt16 nPrfx, const OUString& sLocalName)
     992             : :   XMLTextFieldImportContext(rImport, rHlp, sAPI_jump_edit,nPrfx, sLocalName)
     993             : ,   sPropertyPlaceholderType(sAPI_place_holder_type)
     994             : ,   sPropertyPlaceholder(sAPI_place_holder)
     995             : ,   sPropertyHint(sAPI_hint)
     996          34 : ,   nPlaceholderType(PlaceholderType::TEXT)
     997             : {
     998          34 : }
     999             : 
    1000             : /// process attribute values
    1001          47 : void XMLPlaceholderFieldImportContext::ProcessAttribute(
    1002             :     sal_uInt16 nAttrToken, const OUString& sAttrValue )
    1003             : {
    1004          47 :     switch (nAttrToken) {
    1005             :     case XML_TOK_TEXTFIELD_DESCRIPTION:
    1006          13 :         sDescription = sAttrValue;
    1007          13 :         break;
    1008             : 
    1009             :     case XML_TOK_TEXTFIELD_PLACEHOLDER_TYPE:
    1010          34 :         bValid = true;
    1011          34 :         if (IsXMLToken(sAttrValue, XML_TABLE))
    1012             :         {
    1013           0 :             nPlaceholderType = PlaceholderType::TABLE;
    1014             :         }
    1015          34 :         else if (IsXMLToken(sAttrValue, XML_TEXT))
    1016             :         {
    1017          34 :             nPlaceholderType = PlaceholderType::TEXT;
    1018             :         }
    1019           0 :         else if (IsXMLToken(sAttrValue, XML_TEXT_BOX))
    1020             :         {
    1021           0 :             nPlaceholderType = PlaceholderType::TEXTFRAME;
    1022             :         }
    1023           0 :         else if (IsXMLToken(sAttrValue, XML_IMAGE))
    1024             :         {
    1025           0 :             nPlaceholderType = PlaceholderType::GRAPHIC;
    1026             :         }
    1027           0 :         else if (IsXMLToken(sAttrValue, XML_OBJECT))
    1028             :         {
    1029           0 :             nPlaceholderType = PlaceholderType::OBJECT;
    1030             :         }
    1031             :         else
    1032             :         {
    1033           0 :             bValid = false;
    1034             :         }
    1035          34 :         break;
    1036             : 
    1037             :     default:
    1038             :         ; // ignore
    1039             :     }
    1040          47 : }
    1041             : 
    1042          34 : void XMLPlaceholderFieldImportContext::PrepareField(
    1043             :     const Reference<XPropertySet> & xPropertySet) {
    1044             : 
    1045          34 :     Any aAny;
    1046          34 :     aAny <<= sDescription;
    1047          34 :     xPropertySet->setPropertyValue(sPropertyHint, aAny);
    1048             : 
    1049             :     // remove <...> around content (if present)
    1050          68 :     OUString aContent = GetContent();
    1051          34 :     sal_Int32 nStart = 0;
    1052          34 :     sal_Int32 nLength = aContent.getLength();
    1053          34 :     if (aContent.startsWith("<"))
    1054             :     {
    1055          34 :         --nLength;
    1056          34 :         ++nStart;
    1057             :     }
    1058          34 :     if (aContent.endsWith(">"))
    1059             :     {
    1060          34 :         --nLength;
    1061             :     }
    1062          34 :     aAny <<= aContent.copy(nStart, nLength);
    1063          34 :     xPropertySet->setPropertyValue(sPropertyPlaceholder, aAny);
    1064             : 
    1065          34 :     aAny <<= nPlaceholderType;
    1066          68 :     xPropertySet->setPropertyValue(sPropertyPlaceholderType, aAny);
    1067          34 : }
    1068             : 
    1069             : 
    1070             : 
    1071             : // time field
    1072             : 
    1073             : 
    1074           0 : TYPEINIT1( XMLTimeFieldImportContext, XMLTextFieldImportContext);
    1075             : 
    1076         350 : XMLTimeFieldImportContext::XMLTimeFieldImportContext(
    1077             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1078             :     sal_uInt16 nPrfx, const OUString& sLocalName)
    1079             : :   XMLTextFieldImportContext(rImport, rHlp, sAPI_date_time, nPrfx, sLocalName)
    1080             : ,   sPropertyNumberFormat(sAPI_number_format)
    1081             : ,   sPropertyFixed(sAPI_is_fixed)
    1082             : ,   sPropertyDateTimeValue(sAPI_date_time_value)
    1083             : ,   sPropertyDateTime(sAPI_date_time)
    1084             : ,   sPropertyAdjust(sAPI_adjust)
    1085             : ,   sPropertyIsDate(sAPI_is_date)
    1086             : ,   sPropertyIsFixedLanguage(sAPI_is_fixed_language)
    1087             : ,   nAdjust(0)
    1088             : ,   nFormatKey(0)
    1089             : ,   bTimeOK(false)
    1090             : ,   bFormatOK(false)
    1091             : ,   bFixed(false)
    1092             : ,   bIsDate(false)
    1093         350 : ,   bIsDefaultLanguage( true )
    1094             : {
    1095         350 :     bValid = true;  // always valid!
    1096         350 : }
    1097             : 
    1098         377 : void XMLTimeFieldImportContext::ProcessAttribute(
    1099             :     sal_uInt16 nAttrToken, const OUString& sAttrValue )
    1100             : {
    1101         377 :     switch (nAttrToken)
    1102             :     {
    1103             :         case XML_TOK_TEXTFIELD_TIME_VALUE:
    1104             :         {
    1105          96 :             if (::sax::Converter::parseTimeOrDateTime(aDateTimeValue, 0,
    1106          96 :                         sAttrValue))
    1107             :             {
    1108          96 :                 bTimeOK = true;
    1109             :             }
    1110          96 :             break;
    1111             :         }
    1112             :         case XML_TOK_TEXTFIELD_FIXED:
    1113             :         {
    1114           3 :             bool bTmp(false);
    1115           3 :             if (::sax::Converter::convertBool(bTmp, sAttrValue))
    1116             :             {
    1117           3 :                 bFixed = bTmp;
    1118             :             }
    1119           3 :             break;
    1120             :         }
    1121             :         case XML_TOK_TEXTFIELD_DATA_STYLE_NAME:
    1122             :         {
    1123         278 :             sal_Int32 nKey = GetImportHelper().GetDataStyleKey(
    1124         556 :                                                sAttrValue, &bIsDefaultLanguage);
    1125         278 :             if (-1 != nKey)
    1126             :             {
    1127          10 :                 nFormatKey = nKey;
    1128          10 :                 bFormatOK = true;
    1129             :             }
    1130         278 :             break;
    1131             :         }
    1132             :         case XML_TOK_TEXTFIELD_TIME_ADJUST:
    1133             :         {
    1134             :             double fTmp;
    1135             : 
    1136           0 :             if (::sax::Converter::convertDuration(fTmp, sAttrValue))
    1137             :             {
    1138             :                 // convert to minutes
    1139           0 :                 nAdjust = (sal_Int32)::rtl::math::approxFloor(fTmp * 60 * 24);
    1140             :             }
    1141           0 :             break;
    1142             :         }
    1143             :     }
    1144         377 : }
    1145             : 
    1146         350 : void XMLTimeFieldImportContext::PrepareField(
    1147             :     const Reference<XPropertySet> & rPropertySet)
    1148             : {
    1149         350 :     Any aAny;
    1150             : 
    1151             :     // all properties are optional (except IsDate)
    1152             :     Reference<XPropertySetInfo> xPropertySetInfo(
    1153         700 :         rPropertySet->getPropertySetInfo());
    1154             : 
    1155         350 :     if (xPropertySetInfo->hasPropertyByName(sPropertyFixed))
    1156             :     {
    1157         350 :         aAny.setValue( &bFixed, cppu::UnoType<bool>::get() );
    1158         350 :         rPropertySet->setPropertyValue(sPropertyFixed, aAny);
    1159             :     }
    1160             : 
    1161         350 :     aAny.setValue( &bIsDate, cppu::UnoType<bool>::get() );
    1162         350 :     rPropertySet->setPropertyValue(sPropertyIsDate, aAny);
    1163             : 
    1164         350 :     if (xPropertySetInfo->hasPropertyByName(sPropertyAdjust))
    1165             :     {
    1166           8 :         aAny <<= nAdjust;
    1167           8 :         rPropertySet->setPropertyValue(sPropertyAdjust, aAny);
    1168             :     }
    1169             : 
    1170             :     // set value
    1171         350 :     if (bFixed)
    1172             :     {
    1173             :         // organizer or styles-only mode: force update
    1174          12 :         if (GetImport().GetTextImport()->IsOrganizerMode() ||
    1175           9 :             GetImport().GetTextImport()->IsStylesOnlyMode()   )
    1176             :         {
    1177           0 :             ForceUpdate(rPropertySet);
    1178             :         }
    1179             :         else
    1180             :         {
    1181             :             // normal mode: set value (if present)
    1182           3 :             if (bTimeOK)
    1183             :             {
    1184           3 :                if (xPropertySetInfo->hasPropertyByName(sPropertyDateTimeValue))
    1185             :                {
    1186           3 :                    aAny <<= aDateTimeValue;
    1187           3 :                    rPropertySet->setPropertyValue(sPropertyDateTimeValue,aAny);
    1188             :                }
    1189           0 :                else if (xPropertySetInfo->hasPropertyByName(sPropertyDateTime))
    1190             :                {
    1191           0 :                    aAny <<= aDateTimeValue;
    1192           0 :                    rPropertySet->setPropertyValue(sPropertyDateTime, aAny);
    1193             :                }
    1194             :             }
    1195             :         }
    1196             :     }
    1197             : 
    1198         360 :     if (bFormatOK &&
    1199          10 :         xPropertySetInfo->hasPropertyByName(sPropertyNumberFormat))
    1200             :     {
    1201          10 :         aAny <<= nFormatKey;
    1202          10 :         rPropertySet->setPropertyValue(sPropertyNumberFormat, aAny);
    1203             : 
    1204          10 :         if( xPropertySetInfo->hasPropertyByName( sPropertyIsFixedLanguage ) )
    1205             :         {
    1206           8 :             sal_Bool bIsFixedLanguage = ! bIsDefaultLanguage;
    1207           8 :             aAny.setValue( &bIsFixedLanguage, cppu::UnoType<bool>::get() );
    1208           8 :             rPropertySet->setPropertyValue( sPropertyIsFixedLanguage, aAny );
    1209             :         }
    1210         350 :     }
    1211         350 : }
    1212             : 
    1213             : 
    1214             : 
    1215             : 
    1216             : // date field
    1217             : 
    1218             : 
    1219           0 : TYPEINIT1( XMLDateFieldImportContext, XMLTimeFieldImportContext );
    1220             : 
    1221         182 : XMLDateFieldImportContext::XMLDateFieldImportContext(
    1222             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1223             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    1224         182 :         XMLTimeFieldImportContext(rImport, rHlp, nPrfx, sLocalName)
    1225             : {
    1226         182 :     bIsDate = true; // always a date!
    1227         182 : }
    1228             : 
    1229         367 : void XMLDateFieldImportContext::ProcessAttribute(
    1230             :     sal_uInt16 nAttrToken,
    1231             :     const OUString& sAttrValue )
    1232             : {
    1233         367 :     switch (nAttrToken)
    1234             :     {
    1235             :         case XML_TOK_TEXTFIELD_DATE_VALUE:
    1236             :         {
    1237         182 :             if (::sax::Converter::parseDateTime(aDateTimeValue, 0, sAttrValue))
    1238             :             {
    1239         177 :                 bTimeOK = true;
    1240             :             }
    1241         182 :             break;
    1242             :         }
    1243             :         case XML_TOK_TEXTFIELD_DATE_ADJUST:
    1244             :             // delegate to superclass, pretending it was a time-adjust attr.
    1245             :             XMLTimeFieldImportContext::ProcessAttribute(
    1246             :                 XML_TOK_TEXTFIELD_TIME_ADJUST,
    1247           0 :                 sAttrValue);
    1248           0 :             break;
    1249             :         case XML_TOK_TEXTFIELD_TIME_VALUE:
    1250             :         case XML_TOK_TEXTFIELD_TIME_ADJUST:
    1251             :             ; // ignore time-adjust and time-value attributes
    1252           0 :             break;
    1253             :         default:
    1254             :             // all others: delegate to super-class
    1255             :             XMLTimeFieldImportContext::ProcessAttribute(nAttrToken,
    1256         185 :                                                         sAttrValue);
    1257         185 :             break;
    1258             :     }
    1259         367 : }
    1260             : 
    1261             : 
    1262             : 
    1263             : 
    1264             : 
    1265             : // database field superclass
    1266             : 
    1267             : 
    1268           0 : TYPEINIT1( XMLDatabaseFieldImportContext, XMLTextFieldImportContext );
    1269             : 
    1270          69 : XMLDatabaseFieldImportContext::XMLDatabaseFieldImportContext(
    1271             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1272             :     const sal_Char* pServiceName, sal_uInt16 nPrfx,
    1273             :     const OUString& sLocalName, bool bUseDisply)
    1274             : :   XMLTextFieldImportContext(rImport, rHlp, pServiceName, nPrfx, sLocalName)
    1275             : ,   sPropertyDataBaseName(sAPI_data_base_name)
    1276             : ,   sPropertyDataBaseURL(sAPI_data_base_u_r_l)
    1277             : ,   sPropertyTableName(sAPI_data_table_name)
    1278             : ,   sPropertyDataCommandType(sAPI_data_command_type)
    1279             : ,   sPropertyIsVisible(sAPI_is_visible)
    1280             : ,   nCommandType( sdb::CommandType::TABLE )
    1281             : ,   bCommandTypeOK(false)
    1282             : ,   bDisplay( true )
    1283             : ,   bDisplayOK( false )
    1284             : ,   bUseDisplay( bUseDisply )
    1285             : ,   bDatabaseOK(false)
    1286             : ,   bDatabaseNameOK(false)
    1287             : ,   bDatabaseURLOK(false)
    1288          69 : ,   bTableOK(false)
    1289             : {
    1290          69 : }
    1291             : 
    1292         207 : void XMLDatabaseFieldImportContext::ProcessAttribute(
    1293             :     sal_uInt16 nAttrToken, const OUString& sAttrValue )
    1294             : {
    1295         207 :     switch (nAttrToken)
    1296             :     {
    1297             :         case XML_TOK_TEXTFIELD_DATABASE_NAME:
    1298          69 :             sDatabaseName = sAttrValue;
    1299          69 :             bDatabaseOK = true;
    1300          69 :             bDatabaseNameOK = true;
    1301          69 :             break;
    1302             :         case XML_TOK_TEXTFIELD_TABLE_NAME:
    1303          69 :             sTableName = sAttrValue;
    1304          69 :             bTableOK = true;
    1305          69 :             break;
    1306             :         case XML_TOK_TEXTFIELD_TABLE_TYPE:
    1307          69 :             if( IsXMLToken( sAttrValue, XML_TABLE ) )
    1308             :             {
    1309          69 :                 nCommandType = sdb::CommandType::TABLE;
    1310          69 :                 bCommandTypeOK = true;
    1311             :             }
    1312           0 :             else if( IsXMLToken( sAttrValue, XML_QUERY ) )
    1313             :             {
    1314           0 :                 nCommandType = sdb::CommandType::QUERY;
    1315           0 :                 bCommandTypeOK = true;
    1316             :             }
    1317           0 :             else if( IsXMLToken( sAttrValue, XML_COMMAND ) )
    1318             :             {
    1319           0 :                 nCommandType = sdb::CommandType::COMMAND;
    1320           0 :                 bCommandTypeOK = true;
    1321             :             }
    1322          69 :             break;
    1323             :         case XML_TOK_TEXTFIELD_DISPLAY:
    1324           0 :             if( IsXMLToken( sAttrValue, XML_NONE ) )
    1325             :             {
    1326           0 :                 bDisplay = false;
    1327           0 :                 bDisplayOK = true;
    1328             :             }
    1329           0 :             else if( IsXMLToken( sAttrValue, XML_VALUE ) )
    1330             :             {
    1331           0 :                 bDisplay = true;
    1332           0 :                 bDisplayOK = true;
    1333             :             }
    1334           0 :             break;
    1335             :     }
    1336         207 : }
    1337             : 
    1338           0 : SvXMLImportContext* XMLDatabaseFieldImportContext::CreateChildContext(
    1339             :     sal_uInt16 p_nPrefix,
    1340             :     const OUString& rLocalName,
    1341             :     const Reference<XAttributeList>& xAttrList )
    1342             : {
    1343           0 :     if( ( p_nPrefix == XML_NAMESPACE_FORM ) &&
    1344           0 :         IsXMLToken( rLocalName, XML_CONNECTION_RESOURCE ) )
    1345             :     {
    1346             :         // process attribute list directly
    1347           0 :         sal_Int16 nLength = xAttrList->getLength();
    1348           0 :         for( sal_Int16 n = 0; n < nLength; n++ )
    1349             :         {
    1350           0 :             OUString sLocalName;
    1351           0 :             sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
    1352           0 :                 GetKeyByAttrName( xAttrList->getNameByIndex(n), &sLocalName );
    1353             : 
    1354           0 :             if( ( nPrefix == XML_NAMESPACE_XLINK ) &&
    1355           0 :                 IsXMLToken( sLocalName, XML_HREF ) )
    1356             :             {
    1357           0 :                 sDatabaseURL = xAttrList->getValueByIndex(n);
    1358           0 :                 bDatabaseOK = true;
    1359           0 :                 bDatabaseURLOK = true;
    1360             :             }
    1361           0 :         }
    1362             : 
    1363             :         // we call ProcessAttribute in order to set bValid appropriately
    1364           0 :         ProcessAttribute( XML_TOKEN_INVALID, OUString() );
    1365             :     }
    1366             : 
    1367             :     return SvXMLImportContext::CreateChildContext(p_nPrefix, rLocalName,
    1368           0 :                                                   xAttrList);
    1369             : }
    1370             : 
    1371             : 
    1372          69 : void XMLDatabaseFieldImportContext::PrepareField(
    1373             :         const Reference<XPropertySet> & xPropertySet)
    1374             : {
    1375          69 :     Any aAny;
    1376             : 
    1377          69 :     aAny <<= sTableName;
    1378          69 :     xPropertySet->setPropertyValue(sPropertyTableName, aAny);
    1379             : 
    1380          69 :     if( bDatabaseNameOK )
    1381             :     {
    1382          69 :         aAny <<= sDatabaseName;
    1383          69 :         xPropertySet->setPropertyValue(sPropertyDataBaseName, aAny);
    1384             :     }
    1385           0 :     else if( bDatabaseURLOK )
    1386             :     {
    1387           0 :         aAny <<= sDatabaseURL;
    1388           0 :         xPropertySet->setPropertyValue(sPropertyDataBaseURL, aAny);
    1389             :     }
    1390             : 
    1391             :     // #99980# load/save command type for all fields; also load
    1392             :     //         old documents without command type
    1393          69 :     if( bCommandTypeOK )
    1394             :     {
    1395          69 :         aAny <<= nCommandType;
    1396          69 :         xPropertySet->setPropertyValue( sPropertyDataCommandType, aAny );
    1397             :     }
    1398             : 
    1399          69 :     if( bUseDisplay && bDisplayOK )
    1400             :     {
    1401           0 :         aAny.setValue( &bDisplay, cppu::UnoType<bool>::get() );
    1402           0 :         xPropertySet->setPropertyValue( sPropertyIsVisible, aAny );
    1403          69 :     }
    1404          69 : }
    1405             : 
    1406             : 
    1407             : 
    1408             : 
    1409             : // database name field
    1410             : 
    1411             : 
    1412           0 : TYPEINIT1( XMLDatabaseNameImportContext, XMLDatabaseFieldImportContext );
    1413             : 
    1414           0 : XMLDatabaseNameImportContext::XMLDatabaseNameImportContext(
    1415             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1416             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    1417             :         XMLDatabaseFieldImportContext(rImport, rHlp, sAPI_database_name,
    1418           0 :                                       nPrfx, sLocalName, true)
    1419             : {
    1420           0 : }
    1421             : 
    1422           0 : void XMLDatabaseNameImportContext::ProcessAttribute(
    1423             :     sal_uInt16 nAttrToken, const OUString& sAttrValue )
    1424             : {
    1425             :     // delegate to superclass and check for success
    1426           0 :     XMLDatabaseFieldImportContext::ProcessAttribute(nAttrToken, sAttrValue);
    1427           0 :     bValid = bDatabaseOK && bTableOK;
    1428           0 : }
    1429             : 
    1430             : 
    1431             : 
    1432             : 
    1433             : // database next field
    1434             : 
    1435             : 
    1436           0 : TYPEINIT1( XMLDatabaseNextImportContext, XMLDatabaseFieldImportContext );
    1437             : 
    1438           0 : XMLDatabaseNextImportContext::XMLDatabaseNextImportContext(
    1439             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1440             :     const sal_Char* pServiceName, sal_uInt16 nPrfx,
    1441             :     const OUString& sLocalName) :
    1442             :         XMLDatabaseFieldImportContext(rImport, rHlp, pServiceName,
    1443             :                                       nPrfx, sLocalName, false),
    1444             :         sPropertyCondition(sAPI_condition),
    1445             :         sTrue(sAPI_true),
    1446             :         sCondition(),
    1447           0 :         bConditionOK(false)
    1448             : {
    1449           0 : }
    1450             : 
    1451           0 : XMLDatabaseNextImportContext::XMLDatabaseNextImportContext(
    1452             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1453             :     sal_uInt16 nPrfx, const OUString& sLocalName)
    1454             : : XMLDatabaseFieldImportContext(rImport, rHlp, sAPI_database_next, nPrfx, sLocalName, false)
    1455             : ,   sPropertyCondition(sAPI_condition)
    1456             : ,   sTrue(sAPI_true)
    1457           0 : ,   bConditionOK(false)
    1458             : {
    1459           0 : }
    1460             : 
    1461           0 : void XMLDatabaseNextImportContext::ProcessAttribute(
    1462             :     sal_uInt16 nAttrToken, const OUString& sAttrValue )
    1463             : {
    1464           0 :     if (XML_TOK_TEXTFIELD_CONDITION == nAttrToken)
    1465             :     {
    1466           0 :         OUString sTmp;
    1467           0 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap()._GetKeyByAttrName(
    1468           0 :                                     sAttrValue, &sTmp, false );
    1469           0 :         if( XML_NAMESPACE_OOOW == nPrefix )
    1470             :         {
    1471           0 :             sCondition = sTmp;
    1472           0 :             bConditionOK = true;
    1473             :         }
    1474             :         else
    1475           0 :             sCondition = sAttrValue;
    1476             :     }
    1477             :     else
    1478             :     {
    1479             :         XMLDatabaseFieldImportContext::ProcessAttribute(nAttrToken,
    1480           0 :                                                         sAttrValue);
    1481             :     }
    1482             : 
    1483           0 :     bValid = bDatabaseOK && bTableOK;
    1484           0 : }
    1485             : 
    1486           0 : void XMLDatabaseNextImportContext::PrepareField(
    1487             :     const Reference<XPropertySet> & xPropertySet)
    1488             : {
    1489           0 :     Any aAny;
    1490             : 
    1491           0 :     aAny <<= bConditionOK ? sCondition : sTrue;
    1492           0 :     xPropertySet->setPropertyValue(sPropertyCondition, aAny);
    1493             : 
    1494           0 :     XMLDatabaseFieldImportContext::PrepareField(xPropertySet);
    1495           0 : }
    1496             : 
    1497             : 
    1498             : 
    1499             : 
    1500             : // database select field
    1501             : 
    1502             : 
    1503           0 : TYPEINIT1( XMLDatabaseSelectImportContext, XMLDatabaseNextImportContext );
    1504             : 
    1505           0 : XMLDatabaseSelectImportContext::XMLDatabaseSelectImportContext(
    1506             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1507             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    1508             :         XMLDatabaseNextImportContext(rImport, rHlp, sAPI_database_select,
    1509             :                                      nPrfx, sLocalName),
    1510             :         sPropertySetNumber(sAPI_set_number),
    1511             :         nNumber(0),
    1512           0 :         bNumberOK(false)
    1513             : {
    1514           0 : }
    1515             : 
    1516           0 : void XMLDatabaseSelectImportContext::ProcessAttribute(
    1517             :     sal_uInt16 nAttrToken,
    1518             :     const OUString& sAttrValue )
    1519             : {
    1520           0 :     if (XML_TOK_TEXTFIELD_ROW_NUMBER == nAttrToken)
    1521             :     {
    1522             :         sal_Int32 nTmp;
    1523           0 :         if (::sax::Converter::convertNumber( nTmp, sAttrValue
    1524             :                                                /* , nMin, nMax ??? */ ))
    1525             :         {
    1526           0 :             nNumber = nTmp;
    1527           0 :             bNumberOK = true;
    1528             :         }
    1529             :     }
    1530             :     else
    1531             :     {
    1532           0 :         XMLDatabaseNextImportContext::ProcessAttribute(nAttrToken, sAttrValue);
    1533             :     }
    1534             : 
    1535           0 :     bValid = bTableOK && bDatabaseOK && bNumberOK;
    1536           0 : }
    1537             : 
    1538           0 : void XMLDatabaseSelectImportContext::PrepareField(
    1539             :     const Reference<XPropertySet> & xPropertySet)
    1540             : {
    1541           0 :     Any aAny;
    1542             : 
    1543           0 :     aAny <<= nNumber;
    1544           0 :     xPropertySet->setPropertyValue(sPropertySetNumber, aAny);
    1545             : 
    1546           0 :     XMLDatabaseNextImportContext::PrepareField(xPropertySet);
    1547           0 : }
    1548             : 
    1549             : 
    1550             : 
    1551             : 
    1552             : // database display row number field
    1553             : 
    1554             : 
    1555           0 : TYPEINIT1( XMLDatabaseNumberImportContext, XMLDatabaseFieldImportContext );
    1556             : 
    1557           0 : XMLDatabaseNumberImportContext::XMLDatabaseNumberImportContext(
    1558             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1559             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    1560             :         XMLDatabaseFieldImportContext(rImport, rHlp, sAPI_database_number,
    1561             :                                       nPrfx, sLocalName, true),
    1562             :         sPropertyNumberingType(
    1563             :             sAPI_numbering_type),
    1564             :         sPropertySetNumber(sAPI_set_number),
    1565             :         sNumberFormat("1"),
    1566           0 :         sNumberSync(GetXMLToken(XML_FALSE)),
    1567             :         nValue(0),
    1568           0 :         bValueOK(false)
    1569             : {
    1570           0 : }
    1571             : 
    1572           0 : void XMLDatabaseNumberImportContext::ProcessAttribute(
    1573             :     sal_uInt16 nAttrToken,
    1574             :     const OUString& sAttrValue )
    1575             : {
    1576           0 :     switch (nAttrToken)
    1577             :     {
    1578             :         case XML_TOK_TEXTFIELD_NUM_FORMAT:
    1579           0 :             sNumberFormat = sAttrValue;
    1580           0 :             break;
    1581             :         case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
    1582           0 :             sNumberSync = sAttrValue;
    1583           0 :             break;
    1584             :         case XML_TOK_TEXTFIELD_VALUE:
    1585             :         {
    1586             :             sal_Int32 nTmp;
    1587           0 :             if (::sax::Converter::convertNumber( nTmp, sAttrValue ))
    1588             :             {
    1589           0 :                 nValue = nTmp;
    1590           0 :                 bValueOK = true;
    1591             :             }
    1592           0 :             break;
    1593             :         }
    1594             :         default:
    1595             :             XMLDatabaseFieldImportContext::ProcessAttribute(nAttrToken,
    1596           0 :                                                             sAttrValue);
    1597           0 :             break;
    1598             :     }
    1599             : 
    1600           0 :     bValid = bTableOK && bDatabaseOK;
    1601           0 : }
    1602             : 
    1603           0 : void XMLDatabaseNumberImportContext::PrepareField(
    1604             :     const Reference<XPropertySet> & xPropertySet)
    1605             : {
    1606           0 :     Any aAny;
    1607             : 
    1608           0 :     sal_Int16 nNumType = style::NumberingType::ARABIC;
    1609           0 :     GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
    1610             :                                                     sNumberFormat,
    1611           0 :                                                     sNumberSync );
    1612           0 :     aAny <<= nNumType;
    1613           0 :     xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
    1614             : 
    1615           0 :     if (bValueOK)
    1616             :     {
    1617           0 :         aAny <<= nValue;
    1618           0 :         xPropertySet->setPropertyValue(sPropertySetNumber, aAny);
    1619             :     }
    1620             : 
    1621           0 :     XMLDatabaseFieldImportContext::PrepareField(xPropertySet);
    1622           0 : }
    1623             : 
    1624             : 
    1625             : 
    1626             : 
    1627             : // Simple doc info fields
    1628             : 
    1629             : 
    1630           0 : TYPEINIT1( XMLSimpleDocInfoImportContext, XMLTextFieldImportContext );
    1631             : 
    1632         192 : XMLSimpleDocInfoImportContext::XMLSimpleDocInfoImportContext(
    1633             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1634             :     sal_uInt16 nPrfx, const OUString& sLocalName, sal_uInt16 nToken,
    1635             :     bool bContent, bool bAuthor)
    1636             : :   XMLTextFieldImportContext(rImport, rHlp, MapTokenToServiceName(nToken),nPrfx, sLocalName)
    1637             : ,   sPropertyFixed(sAPI_is_fixed)
    1638             : ,   sPropertyContent(sAPI_content)
    1639             : ,   sPropertyAuthor(sAPI_author)
    1640             : ,   sPropertyCurrentPresentation(sAPI_current_presentation)
    1641             : ,   bFixed(false)
    1642             : ,   bHasAuthor(bAuthor)
    1643         192 : ,   bHasContent(bContent)
    1644             : {
    1645         192 :     bValid = true;
    1646         192 : }
    1647             : 
    1648           0 : void XMLSimpleDocInfoImportContext::ProcessAttribute(
    1649             :     sal_uInt16 nAttrToken,
    1650             :     const OUString& sAttrValue )
    1651             : {
    1652           0 :     if (XML_TOK_TEXTFIELD_FIXED == nAttrToken)
    1653             :     {
    1654           0 :         bool bTmp(false);
    1655           0 :         if (::sax::Converter::convertBool(bTmp, sAttrValue))
    1656             :         {
    1657           0 :             bFixed = bTmp;
    1658             :         }
    1659             :     }
    1660           0 : }
    1661             : 
    1662         192 : void XMLSimpleDocInfoImportContext::PrepareField(
    1663             :     const Reference<XPropertySet> & rPropertySet)
    1664             : {
    1665             :     //  title field in Calc has no Fixed property
    1666         192 :     Reference<XPropertySetInfo> xPropertySetInfo(rPropertySet->getPropertySetInfo());
    1667         192 :     if (xPropertySetInfo->hasPropertyByName(sPropertyFixed))
    1668             :     {
    1669          24 :         Any aAny;
    1670          24 :         aAny.setValue(&bFixed, cppu::UnoType<bool>::get() );
    1671          24 :         rPropertySet->setPropertyValue(sPropertyFixed, aAny);
    1672             : 
    1673             :         // set Content and CurrentPresentation (if fixed)
    1674          24 :         if (bFixed)
    1675             :         {
    1676             :             // in organizer-mode or styles-only-mode, only force update
    1677           0 :             if (GetImport().GetTextImport()->IsOrganizerMode() ||
    1678           0 :                 GetImport().GetTextImport()->IsStylesOnlyMode()   )
    1679             :             {
    1680           0 :                 ForceUpdate(rPropertySet);
    1681             :             }
    1682             :             else
    1683             :             {
    1684             :                 // set content (author, if that's the name) and current
    1685             :                 // presentation
    1686           0 :                 aAny <<= GetContent();
    1687             : 
    1688           0 :                 if (bFixed && bHasAuthor)
    1689             :                 {
    1690           0 :                     rPropertySet->setPropertyValue(sPropertyAuthor, aAny);
    1691             :                 }
    1692             : 
    1693           0 :                 if (bFixed && bHasContent)
    1694             :                 {
    1695           0 :                     rPropertySet->setPropertyValue(sPropertyContent, aAny);
    1696             :                 }
    1697             : 
    1698           0 :                 rPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
    1699             :             }
    1700          24 :         }
    1701         192 :     }
    1702         192 : }
    1703             : 
    1704         192 : const sal_Char* XMLSimpleDocInfoImportContext::MapTokenToServiceName(
    1705             :     sal_uInt16 nToken)
    1706             : {
    1707         192 :     const sal_Char* pServiceName = NULL;
    1708             : 
    1709         192 :     switch(nToken)
    1710             :     {
    1711             :         case XML_TOK_TEXT_DOCUMENT_CREATION_AUTHOR:
    1712           0 :             pServiceName = sAPI_docinfo_create_author;
    1713           0 :             break;
    1714             :         case XML_TOK_TEXT_DOCUMENT_CREATION_DATE:
    1715           0 :             pServiceName = sAPI_docinfo_create_date_time;
    1716           0 :             break;
    1717             :         case XML_TOK_TEXT_DOCUMENT_CREATION_TIME:
    1718           0 :             pServiceName = sAPI_docinfo_create_date_time;
    1719           0 :             break;
    1720             :         case XML_TOK_TEXT_DOCUMENT_DESCRIPTION:
    1721           0 :             pServiceName = sAPI_docinfo_description;
    1722           0 :             break;
    1723             :         case XML_TOK_TEXT_DOCUMENT_EDIT_DURATION:
    1724           0 :             pServiceName = sAPI_docinfo_edit_time;
    1725           0 :             break;
    1726             :         case XML_TOK_TEXT_DOCUMENT_USER_DEFINED:
    1727           0 :             pServiceName = sAPI_docinfo_custom;
    1728           0 :             break;
    1729             :         case XML_TOK_TEXT_DOCUMENT_PRINT_AUTHOR:
    1730           0 :             pServiceName = sAPI_docinfo_print_author;
    1731           0 :             break;
    1732             :         case XML_TOK_TEXT_DOCUMENT_PRINT_DATE:
    1733           0 :             pServiceName = sAPI_docinfo_print_date_time;
    1734           0 :             break;
    1735             :         case XML_TOK_TEXT_DOCUMENT_PRINT_TIME:
    1736           0 :             pServiceName = sAPI_docinfo_print_date_time;
    1737           0 :             break;
    1738             :         case XML_TOK_TEXT_DOCUMENT_KEYWORDS:
    1739           0 :             pServiceName = sAPI_docinfo_keywords;
    1740           0 :             break;
    1741             :         case XML_TOK_TEXT_DOCUMENT_SUBJECT:
    1742           1 :             pServiceName = sAPI_docinfo_subject;
    1743           1 :             break;
    1744             :         case XML_TOK_TEXT_DOCUMENT_REVISION:
    1745           0 :             pServiceName = sAPI_docinfo_revision;
    1746           0 :             break;
    1747             :         case XML_TOK_TEXT_DOCUMENT_SAVE_AUTHOR:
    1748           0 :             pServiceName = sAPI_docinfo_change_author;
    1749           0 :             break;
    1750             :         case XML_TOK_TEXT_DOCUMENT_SAVE_DATE:
    1751           2 :             pServiceName = sAPI_docinfo_change_date_time;
    1752           2 :             break;
    1753             :         case XML_TOK_TEXT_DOCUMENT_SAVE_TIME:
    1754           0 :             pServiceName = sAPI_docinfo_change_date_time;
    1755           0 :             break;
    1756             :         case XML_TOK_TEXT_DOCUMENT_TITLE:
    1757         189 :             pServiceName = sAPI_docinfo_title;
    1758         189 :             break;
    1759             : 
    1760             :         default:
    1761             :             OSL_FAIL("no docinfo field token");
    1762           0 :             pServiceName = NULL;
    1763           0 :             break;
    1764             :     }
    1765             : 
    1766         192 :     return pServiceName;
    1767             : }
    1768             : 
    1769             : 
    1770             : 
    1771             : // revision field
    1772             : 
    1773             : 
    1774           0 : TYPEINIT1( XMLRevisionDocInfoImportContext, XMLSimpleDocInfoImportContext );
    1775             : 
    1776           0 : XMLRevisionDocInfoImportContext::XMLRevisionDocInfoImportContext(
    1777             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
    1778             :     const OUString& sLocalName, sal_uInt16 nToken) :
    1779             :         XMLSimpleDocInfoImportContext(rImport, rHlp, nPrfx, sLocalName,
    1780             :                                       nToken, false, false),
    1781           0 :         sPropertyRevision(sAPI_revision)
    1782             : {
    1783           0 :     bValid = true;
    1784           0 : }
    1785             : 
    1786           0 : void XMLRevisionDocInfoImportContext::PrepareField(
    1787             :     const Reference<XPropertySet> & rPropertySet)
    1788             : {
    1789           0 :     XMLSimpleDocInfoImportContext::PrepareField(rPropertySet);
    1790             : 
    1791             :     // set revision number
    1792             :     // if fixed, if not in organizer-mode, if not in styles-only-mode
    1793           0 :     if (bFixed)
    1794             :     {
    1795           0 :         if ( GetImport().GetTextImport()->IsOrganizerMode() ||
    1796           0 :              GetImport().GetTextImport()->IsStylesOnlyMode()   )
    1797             :         {
    1798           0 :             ForceUpdate(rPropertySet);
    1799             :         }
    1800             :         else
    1801             :         {
    1802             :             sal_Int32 nTmp;
    1803           0 :             if (::sax::Converter::convertNumber(nTmp, GetContent()))
    1804             :             {
    1805           0 :                 Any aAny;
    1806           0 :                 aAny <<= nTmp;
    1807           0 :                 rPropertySet->setPropertyValue(sPropertyRevision, aAny);
    1808             :             }
    1809             :         }
    1810             :     }
    1811           0 : }
    1812             : 
    1813             : 
    1814             : 
    1815             : 
    1816             : // DocInfo fields with date/time attributes
    1817             : 
    1818             : 
    1819           0 : TYPEINIT1( XMLDateTimeDocInfoImportContext, XMLSimpleDocInfoImportContext );
    1820             : 
    1821           2 : XMLDateTimeDocInfoImportContext::XMLDateTimeDocInfoImportContext(
    1822             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
    1823             :     const OUString& sLocalName, sal_uInt16 nToken)
    1824             :     : XMLSimpleDocInfoImportContext(rImport, rHlp, nPrfx, sLocalName,nToken, false, false)
    1825             :     , sPropertyNumberFormat(sAPI_number_format)
    1826             :     , sPropertyIsDate(sAPI_is_date)
    1827             :     , sPropertyIsFixedLanguage(sAPI_is_fixed_language)
    1828             :     , nFormat(0)
    1829             :     , bFormatOK(false)
    1830             :     , bIsDate(false)
    1831             :     , bHasDateTime(false)
    1832           2 :     , bIsDefaultLanguage(true)
    1833             : {
    1834             :     // we allow processing of EDIT_DURATION here, because import of actual
    1835             :     // is not supported anyway. If it was, we'd need an extra import class
    1836             :     // because times and time durations are presented differently!
    1837             : 
    1838           2 :     bValid = true;
    1839           2 :     switch (nToken)
    1840             :     {
    1841             :         case XML_TOK_TEXT_DOCUMENT_CREATION_DATE:
    1842             :         case XML_TOK_TEXT_DOCUMENT_PRINT_DATE:
    1843             :         case XML_TOK_TEXT_DOCUMENT_SAVE_DATE:
    1844           2 :             bIsDate = true;
    1845           2 :             bHasDateTime = true;
    1846           2 :             break;
    1847             :         case XML_TOK_TEXT_DOCUMENT_CREATION_TIME:
    1848             :         case XML_TOK_TEXT_DOCUMENT_PRINT_TIME:
    1849             :         case XML_TOK_TEXT_DOCUMENT_SAVE_TIME:
    1850           0 :             bIsDate = false;
    1851           0 :             bHasDateTime = true;
    1852           0 :             break;
    1853             :         case XML_TOK_TEXT_DOCUMENT_EDIT_DURATION:
    1854           0 :             bIsDate = false;
    1855           0 :             bHasDateTime = false;
    1856           0 :             break;
    1857             :         default:
    1858             :             OSL_FAIL(
    1859             :                 "XMLDateTimeDocInfoImportContext needs date/time doc. fields");
    1860           0 :             bValid = false;
    1861           0 :             break;
    1862             :     }
    1863           2 : }
    1864             : 
    1865           2 : void XMLDateTimeDocInfoImportContext::ProcessAttribute(
    1866             :     sal_uInt16 nAttrToken,
    1867             :     const OUString& sAttrValue )
    1868             : {
    1869           2 :     switch (nAttrToken)
    1870             :     {
    1871             :         case XML_TOK_TEXTFIELD_DATA_STYLE_NAME:
    1872             :         {
    1873           2 :             sal_Int32 nKey = GetImportHelper().GetDataStyleKey(
    1874           4 :                                                sAttrValue, &bIsDefaultLanguage);
    1875           2 :             if (-1 != nKey)
    1876             :             {
    1877           2 :                 nFormat = nKey;
    1878           2 :                 bFormatOK = true;
    1879             :             }
    1880           2 :             break;
    1881             :         }
    1882             :         case XML_TOK_TEXTFIELD_FIXED:
    1883             :             XMLSimpleDocInfoImportContext::ProcessAttribute(nAttrToken,
    1884           0 :                                                             sAttrValue);
    1885           0 :             break;
    1886             :         default:
    1887             :             // ignore -> we can't set date/time value anyway!
    1888           0 :             break;
    1889             :     }
    1890           2 : }
    1891             : 
    1892           2 : void XMLDateTimeDocInfoImportContext::PrepareField(
    1893             :     const Reference<XPropertySet> & xPropertySet)
    1894             : {
    1895             :     // process fixed and presentation
    1896           2 :     XMLSimpleDocInfoImportContext::PrepareField(xPropertySet);
    1897             : 
    1898           2 :     Any aAny;
    1899             : 
    1900           2 :     if (bHasDateTime)
    1901             :     {
    1902           2 :         aAny.setValue( &bIsDate, cppu::UnoType<bool>::get());
    1903           2 :         xPropertySet->setPropertyValue(sPropertyIsDate, aAny);
    1904             :     }
    1905             : 
    1906           2 :     if (bFormatOK)
    1907             :     {
    1908           2 :         aAny <<= nFormat;
    1909           2 :         xPropertySet->setPropertyValue(sPropertyNumberFormat, aAny);
    1910             : 
    1911           4 :         if( xPropertySet->getPropertySetInfo()->
    1912           2 :                 hasPropertyByName( sPropertyIsFixedLanguage ) )
    1913             :         {
    1914           2 :             sal_Bool bIsFixedLanguage = ! bIsDefaultLanguage;
    1915           2 :             aAny.setValue( &bIsFixedLanguage, cppu::UnoType<bool>::get() );
    1916           2 :             xPropertySet->setPropertyValue( sPropertyIsFixedLanguage, aAny );
    1917             :         }
    1918           2 :     }
    1919             : 
    1920             :     // can't set date/time/duration value! Sorry.
    1921           2 : }
    1922             : 
    1923             : 
    1924             : 
    1925             : // user defined docinfo fields
    1926             : 
    1927             : 
    1928           0 : TYPEINIT1( XMLUserDocInfoImportContext, XMLSimpleDocInfoImportContext );
    1929             : 
    1930           0 : XMLUserDocInfoImportContext::XMLUserDocInfoImportContext(
    1931             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    1932             :     sal_uInt16 nPrfx, const OUString& sLocalName, sal_uInt16 nToken) :
    1933             :         XMLSimpleDocInfoImportContext(rImport, rHlp, nPrfx,
    1934             :                                       sLocalName, nToken,
    1935             :                                       false, false)
    1936             :     , sPropertyName(sAPI_name)
    1937             :     , sPropertyNumberFormat(sAPI_number_format)
    1938             :     , sPropertyIsFixedLanguage(sAPI_is_fixed_language)
    1939             :     , nFormat(0)
    1940             :     , bFormatOK(false)
    1941           0 :     , bIsDefaultLanguage( true )
    1942             : {
    1943           0 :     bValid = false;
    1944           0 : }
    1945             : 
    1946           0 : void XMLUserDocInfoImportContext::ProcessAttribute(
    1947             :     sal_uInt16 nAttrToken,
    1948             :     const OUString& sAttrValue )
    1949             : {
    1950           0 :     switch (nAttrToken)
    1951             :     {
    1952             :         case XML_TOK_TEXTFIELD_DATA_STYLE_NAME:
    1953             :         {
    1954           0 :             sal_Int32 nKey = GetImportHelper().GetDataStyleKey(
    1955           0 :                                                sAttrValue, &bIsDefaultLanguage);
    1956           0 :             if (-1 != nKey)
    1957             :             {
    1958           0 :                 nFormat = nKey;
    1959           0 :                 bFormatOK = true;
    1960             :             }
    1961           0 :             break;
    1962             :         }
    1963             :         case XML_TOK_TEXTFIELD_NAME:
    1964             :         {
    1965           0 :             if (!bValid)
    1966             :             {
    1967           0 :                 SetServiceName(OUString(sAPI_docinfo_custom ) );
    1968           0 :                 aName = sAttrValue;
    1969           0 :                 bValid = true;
    1970             :             }
    1971           0 :             break;
    1972             :         }
    1973             : 
    1974             :         default:
    1975             :             XMLSimpleDocInfoImportContext::ProcessAttribute(nAttrToken,
    1976           0 :                                                             sAttrValue);
    1977           0 :             break;
    1978             :     }
    1979           0 : }
    1980             : 
    1981           0 : void XMLUserDocInfoImportContext::PrepareField(
    1982             :         const ::com::sun::star::uno::Reference<
    1983             :         ::com::sun::star::beans::XPropertySet> & xPropertySet)
    1984             : {
    1985           0 :     uno::Any aAny;
    1986           0 :     if ( !aName.isEmpty() )
    1987             :     {
    1988           0 :         aAny <<= aName;
    1989           0 :         xPropertySet->setPropertyValue(sPropertyName, aAny);
    1990             :     }
    1991             :     Reference<XPropertySetInfo> xPropertySetInfo(
    1992           0 :         xPropertySet->getPropertySetInfo());
    1993           0 :     if (bFormatOK &&
    1994           0 :         xPropertySetInfo->hasPropertyByName(sPropertyNumberFormat))
    1995             :     {
    1996           0 :         aAny <<= nFormat;
    1997           0 :         xPropertySet->setPropertyValue(sPropertyNumberFormat, aAny);
    1998             : 
    1999           0 :         if( xPropertySetInfo->hasPropertyByName( sPropertyIsFixedLanguage ) )
    2000             :         {
    2001           0 :             sal_Bool bIsFixedLanguage = ! bIsDefaultLanguage;
    2002           0 :             aAny.setValue( &bIsFixedLanguage, cppu::UnoType<bool>::get() );
    2003           0 :             xPropertySet->setPropertyValue( sPropertyIsFixedLanguage, aAny );
    2004             :         }
    2005             :     }
    2006             : 
    2007             :     // call superclass to handle "fixed"
    2008           0 :     XMLSimpleDocInfoImportContext::PrepareField(xPropertySet);
    2009           0 : }
    2010             : 
    2011             : 
    2012             : 
    2013             : // import hidden paragraph fields
    2014             : 
    2015             : 
    2016           0 : TYPEINIT1( XMLHiddenParagraphImportContext, XMLTextFieldImportContext );
    2017             : 
    2018           0 : XMLHiddenParagraphImportContext::XMLHiddenParagraphImportContext(
    2019             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    2020             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    2021             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_hidden_paragraph,
    2022             :                                   nPrfx, sLocalName),
    2023             :         sPropertyCondition(sAPI_condition),
    2024             :         sPropertyIsHidden(sAPI_is_hidden),
    2025             :         sCondition(),
    2026           0 :         bIsHidden(false)
    2027             : {
    2028           0 : }
    2029             : 
    2030           0 : void XMLHiddenParagraphImportContext::ProcessAttribute(
    2031             :     sal_uInt16 nAttrToken,
    2032             :     const OUString& sAttrValue )
    2033             : {
    2034           0 :     if (XML_TOK_TEXTFIELD_CONDITION == nAttrToken)
    2035             :     {
    2036           0 :         OUString sTmp;
    2037           0 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap()._GetKeyByAttrName(
    2038           0 :                                     sAttrValue, &sTmp, false );
    2039           0 :         if( XML_NAMESPACE_OOOW == nPrefix )
    2040             :         {
    2041           0 :             sCondition = sTmp;
    2042           0 :             bValid = true;
    2043             :         }
    2044             :         else
    2045           0 :             sCondition = sAttrValue;
    2046             :     }
    2047           0 :     else if (XML_TOK_TEXTFIELD_IS_HIDDEN == nAttrToken)
    2048             :     {
    2049           0 :         bool bTmp(false);
    2050           0 :         if (::sax::Converter::convertBool(bTmp, sAttrValue))
    2051             :         {
    2052           0 :             bIsHidden = bTmp;
    2053             :         }
    2054             :     }
    2055           0 : }
    2056             : 
    2057           0 : void XMLHiddenParagraphImportContext::PrepareField(
    2058             :     const Reference<XPropertySet> & xPropertySet)
    2059             : {
    2060           0 :     Any aAny;
    2061           0 :     aAny <<= sCondition;
    2062           0 :     xPropertySet->setPropertyValue(sPropertyCondition, aAny);
    2063             : 
    2064           0 :     aAny.setValue( &bIsHidden, cppu::UnoType<bool>::get() );
    2065           0 :     xPropertySet->setPropertyValue(sPropertyIsHidden, aAny);
    2066           0 : }
    2067             : 
    2068             : 
    2069             : 
    2070             : 
    2071             : // import conditional text (<text:conditional-text>)
    2072             : 
    2073             : 
    2074           0 : TYPEINIT1( XMLConditionalTextImportContext, XMLTextFieldImportContext );
    2075             : 
    2076           0 : XMLConditionalTextImportContext::XMLConditionalTextImportContext(
    2077             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    2078             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    2079             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_conditional_text,
    2080             :                                   nPrfx, sLocalName),
    2081             :         sPropertyCondition(sAPI_condition),
    2082             :         sPropertyTrueContent(sAPI_true_content),
    2083             :         sPropertyFalseContent(sAPI_false_content),
    2084             :         sPropertyIsConditionTrue(sAPI_is_condition_true),
    2085             :         sPropertyCurrentPresentation(sAPI_current_presentation),
    2086             :         bConditionOK(false),
    2087             :         bTrueOK(false),
    2088             :         bFalseOK(false),
    2089           0 :         bCurrentValue(false)
    2090             : {
    2091           0 : }
    2092             : 
    2093           0 : void XMLConditionalTextImportContext::ProcessAttribute(
    2094             :     sal_uInt16 nAttrToken,
    2095             :     const OUString& sAttrValue )
    2096             : {
    2097           0 :     switch (nAttrToken)
    2098             :     {
    2099             :         case XML_TOK_TEXTFIELD_CONDITION:
    2100             :             {
    2101           0 :                 OUString sTmp;
    2102           0 :                 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
    2103           0 :                         _GetKeyByAttrName( sAttrValue, &sTmp, false );
    2104           0 :                 if( XML_NAMESPACE_OOOW == nPrefix )
    2105             :                 {
    2106           0 :                     sCondition = sTmp;
    2107           0 :                     bConditionOK = true;
    2108             :                 }
    2109             :                 else
    2110           0 :                     sCondition = sAttrValue;
    2111             :             }
    2112           0 :             break;
    2113             :         case XML_TOK_TEXTFIELD_STRING_VALUE_IF_FALSE:
    2114           0 :             sFalseContent = sAttrValue;
    2115           0 :             bFalseOK = true;
    2116           0 :             break;
    2117             :         case XML_TOK_TEXTFIELD_STRING_VALUE_IF_TRUE:
    2118           0 :             sTrueContent = sAttrValue;
    2119           0 :             bTrueOK = true;
    2120           0 :             break;
    2121             :         case XML_TOK_TEXTFIELD_CURRENT_VALUE:
    2122             :         {
    2123           0 :             bool bTmp(false);
    2124           0 :             if (::sax::Converter::convertBool(bTmp, sAttrValue))
    2125             :             {
    2126           0 :                 bCurrentValue = bTmp;
    2127             :             }
    2128           0 :             break;
    2129             :         }
    2130             :     }
    2131             : 
    2132           0 :     bValid = bConditionOK && bFalseOK && bTrueOK;
    2133           0 : }
    2134             : 
    2135           0 : void XMLConditionalTextImportContext::PrepareField(
    2136             :     const Reference<XPropertySet> & xPropertySet)
    2137             : {
    2138           0 :     Any aAny;
    2139             : 
    2140           0 :     aAny <<= sCondition;
    2141           0 :     xPropertySet->setPropertyValue(sPropertyCondition, aAny);
    2142             : 
    2143           0 :     aAny <<= sFalseContent;
    2144           0 :     xPropertySet->setPropertyValue(sPropertyFalseContent, aAny);
    2145             : 
    2146           0 :     aAny <<= sTrueContent;
    2147           0 :     xPropertySet->setPropertyValue(sPropertyTrueContent, aAny);
    2148             : 
    2149           0 :     aAny.setValue( &bCurrentValue, cppu::UnoType<bool>::get() );
    2150           0 :     xPropertySet->setPropertyValue(sPropertyIsConditionTrue, aAny);
    2151             : 
    2152           0 :     aAny <<= GetContent();
    2153           0 :     xPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
    2154           0 : }
    2155             : 
    2156             : 
    2157             : 
    2158             : 
    2159             : // hidden text
    2160             : 
    2161             : 
    2162           0 : TYPEINIT1( XMLHiddenTextImportContext, XMLTextFieldImportContext);
    2163             : 
    2164           0 : XMLHiddenTextImportContext::XMLHiddenTextImportContext(
    2165             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    2166             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    2167             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_hidden_text,
    2168             :                                   nPrfx, sLocalName),
    2169             :         sPropertyCondition(sAPI_condition),
    2170             :         sPropertyContent(sAPI_content),
    2171             :         sPropertyIsHidden(sAPI_is_hidden),
    2172             :         bConditionOK(false),
    2173             :         bStringOK(false),
    2174           0 :         bIsHidden(false)
    2175             : {
    2176           0 : }
    2177             : 
    2178           0 : void XMLHiddenTextImportContext::ProcessAttribute(
    2179             :     sal_uInt16 nAttrToken,
    2180             :     const OUString& sAttrValue )
    2181             : {
    2182           0 :     switch (nAttrToken)
    2183             :     {
    2184             :         case XML_TOK_TEXTFIELD_CONDITION:
    2185             :             {
    2186           0 :                 OUString sTmp;
    2187           0 :                 sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
    2188           0 :                                         _GetKeyByAttrName( sAttrValue, &sTmp, false );
    2189           0 :                 if( XML_NAMESPACE_OOOW == nPrefix )
    2190             :                 {
    2191           0 :                     sCondition = sTmp;
    2192           0 :                     bConditionOK = true;
    2193             :                 }
    2194             :                 else
    2195           0 :                     sCondition = sAttrValue;
    2196             :             }
    2197           0 :             break;
    2198             :         case XML_TOK_TEXTFIELD_STRING_VALUE:
    2199           0 :             sString = sAttrValue;
    2200           0 :             bStringOK = true;
    2201           0 :             break;
    2202             :         case XML_TOK_TEXTFIELD_IS_HIDDEN:
    2203             :         {
    2204           0 :             bool bTmp(false);
    2205           0 :             if (::sax::Converter::convertBool(bTmp, sAttrValue))
    2206             :             {
    2207           0 :                 bIsHidden = bTmp;
    2208             :             }
    2209           0 :             break;
    2210             :         }
    2211             :     }
    2212             : 
    2213           0 :     bValid = bConditionOK && bStringOK;
    2214           0 : }
    2215             : 
    2216           0 : void XMLHiddenTextImportContext::PrepareField(
    2217             :         const Reference<XPropertySet> & xPropertySet)
    2218             : {
    2219           0 :     Any aAny;
    2220             : 
    2221           0 :     aAny <<= sCondition;
    2222           0 :     xPropertySet->setPropertyValue(sPropertyCondition, aAny);
    2223             : 
    2224           0 :     aAny <<= sString;
    2225           0 :     xPropertySet->setPropertyValue(sPropertyContent, aAny);
    2226             : 
    2227           0 :     aAny.setValue( &bIsHidden, cppu::UnoType<bool>::get() );
    2228           0 :     xPropertySet->setPropertyValue(sPropertyIsHidden, aAny);
    2229           0 : }
    2230             : 
    2231             : 
    2232             : 
    2233             : 
    2234             : // file name fields
    2235             : 
    2236             : 
    2237           0 : TYPEINIT1( XMLFileNameImportContext, XMLTextFieldImportContext );
    2238             : 
    2239             : static const SvXMLEnumMapEntry aFilenameDisplayMap[] =
    2240             : {
    2241             :     { XML_PATH,                 FilenameDisplayFormat::PATH },
    2242             :     { XML_NAME,                 FilenameDisplayFormat::NAME },
    2243             :     { XML_NAME_AND_EXTENSION,   FilenameDisplayFormat::NAME_AND_EXT },
    2244             :     { XML_FULL,                 FilenameDisplayFormat::FULL },
    2245             :     { XML_TOKEN_INVALID, 0 }
    2246             : };
    2247             : 
    2248           4 : XMLFileNameImportContext::XMLFileNameImportContext(
    2249             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
    2250             :     const OUString& sLocalName) :
    2251             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_file_name,
    2252             :                                   nPrfx, sLocalName),
    2253             :         sPropertyFixed(sAPI_is_fixed),
    2254             :         sPropertyFileFormat(sAPI_file_format),
    2255             :         sPropertyCurrentPresentation(
    2256             :             sAPI_current_presentation),
    2257             :         nFormat(FilenameDisplayFormat::FULL),
    2258           4 :         bFixed(false)
    2259             : {
    2260           4 :     bValid = true;
    2261           4 : }
    2262             : 
    2263           4 : void XMLFileNameImportContext::ProcessAttribute(
    2264             :     sal_uInt16 nAttrToken,
    2265             :     const OUString& sAttrValue )
    2266             : {
    2267           4 :     switch (nAttrToken)
    2268             :     {
    2269             :         case XML_TOK_TEXTFIELD_FIXED:
    2270             :         {
    2271           0 :             bool bTmp(false);
    2272           0 :             if (::sax::Converter::convertBool(bTmp, sAttrValue))
    2273             :             {
    2274           0 :                 bFixed = bTmp;
    2275             :             }
    2276           0 :             break;
    2277             :         }
    2278             :         case XML_TOK_TEXTFIELD_DISPLAY:
    2279             :         {
    2280             :             sal_uInt16 nTmp;
    2281           4 :             if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
    2282             :                                                 aFilenameDisplayMap))
    2283             :             {
    2284           4 :                 nFormat = (sal_uInt16)nTmp;
    2285             :             }
    2286           4 :             break;
    2287             :         }
    2288             :         default:
    2289             :             ; // unknown attribute: ignore
    2290           0 :             break;
    2291             :     }
    2292           4 : }
    2293             : 
    2294           4 : void XMLFileNameImportContext::PrepareField(
    2295             :     const Reference<XPropertySet> & xPropertySet)
    2296             : {
    2297           4 :     Any aAny;
    2298             : 
    2299             :     // properties are optional
    2300             :     Reference<XPropertySetInfo> xPropertySetInfo(
    2301           8 :         xPropertySet->getPropertySetInfo());
    2302             : 
    2303           4 :      if (xPropertySetInfo->hasPropertyByName(sPropertyFixed))
    2304             :      {
    2305           4 :          aAny <<= bFixed;
    2306           4 :          xPropertySet->setPropertyValue(sPropertyFixed, aAny);
    2307             :      }
    2308             : 
    2309           4 :     if (xPropertySetInfo->hasPropertyByName(sPropertyFileFormat))
    2310             :     {
    2311           4 :         aAny <<= nFormat;
    2312           4 :         xPropertySet->setPropertyValue(sPropertyFileFormat, aAny);
    2313             :     }
    2314             : 
    2315           4 :     if (xPropertySetInfo->hasPropertyByName(sPropertyCurrentPresentation))
    2316             :     {
    2317           4 :         aAny <<= GetContent();
    2318           4 :         xPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
    2319           4 :     }
    2320           4 : }
    2321             : 
    2322             : 
    2323             : 
    2324             : // template name field
    2325             : 
    2326             : 
    2327             : static const SvXMLEnumMapEntry aTemplateDisplayMap[] =
    2328             : {
    2329             :     { XML_FULL,                 TemplateDisplayFormat::FULL },
    2330             :     { XML_PATH,                 TemplateDisplayFormat::PATH },
    2331             :     { XML_NAME,                 TemplateDisplayFormat::NAME },
    2332             :     { XML_NAME_AND_EXTENSION,   TemplateDisplayFormat::NAME_AND_EXT },
    2333             :     { XML_AREA,                 TemplateDisplayFormat::AREA },
    2334             :     { XML_TITLE,                TemplateDisplayFormat::TITLE },
    2335             :     { XML_TOKEN_INVALID, 0 }
    2336             : };
    2337             : 
    2338           0 : TYPEINIT1( XMLTemplateNameImportContext, XMLTextFieldImportContext );
    2339             : 
    2340           0 : XMLTemplateNameImportContext::XMLTemplateNameImportContext(
    2341             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
    2342             :     const OUString& sLocalName) :
    2343             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_template_name,
    2344             :                                   nPrfx, sLocalName),
    2345             :         sPropertyFileFormat(sAPI_file_format),
    2346           0 :         nFormat(TemplateDisplayFormat::FULL)
    2347             : {
    2348           0 :     bValid = true;
    2349           0 : }
    2350             : 
    2351           0 : void XMLTemplateNameImportContext::ProcessAttribute(
    2352             :     sal_uInt16 nAttrToken,
    2353             :     const OUString& sAttrValue )
    2354             : {
    2355           0 :     switch (nAttrToken)
    2356             :     {
    2357             :         case XML_TOK_TEXTFIELD_DISPLAY:
    2358             :         {
    2359             :             sal_uInt16 nTmp;
    2360           0 :             if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
    2361             :                                                 aTemplateDisplayMap))
    2362             :             {
    2363           0 :                 nFormat = (sal_uInt16)nTmp;
    2364             :             }
    2365           0 :             break;
    2366             :         }
    2367             :         default:
    2368             :             ; // unknown attribute: ignore
    2369           0 :             break;
    2370             :     }
    2371           0 : }
    2372             : 
    2373           0 : void XMLTemplateNameImportContext::PrepareField(
    2374             :     const Reference<XPropertySet> & xPropertySet)
    2375             : {
    2376           0 :     Any aAny;
    2377             : 
    2378           0 :     aAny <<= nFormat;
    2379           0 :     xPropertySet->setPropertyValue(sPropertyFileFormat, aAny);
    2380           0 : }
    2381             : 
    2382             : 
    2383             : 
    2384             : // import chapter fields
    2385             : 
    2386             : 
    2387           0 : TYPEINIT1( XMLChapterImportContext, XMLTextFieldImportContext );
    2388             : 
    2389             : static const SvXMLEnumMapEntry aChapterDisplayMap[] =
    2390             : {
    2391             :     { XML_NAME,                     ChapterFormat::NAME },
    2392             :     { XML_NUMBER,                   ChapterFormat::NUMBER },
    2393             :     { XML_NUMBER_AND_NAME,          ChapterFormat::NAME_NUMBER },
    2394             :     { XML_PLAIN_NUMBER_AND_NAME,    ChapterFormat::NO_PREFIX_SUFFIX },
    2395             :     { XML_PLAIN_NUMBER,             ChapterFormat::DIGIT },
    2396             :     { XML_TOKEN_INVALID, 0 }
    2397             : };
    2398             : 
    2399          12 : XMLChapterImportContext::XMLChapterImportContext(
    2400             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    2401             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    2402             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_chapter,
    2403             :                                   nPrfx, sLocalName),
    2404             :         sPropertyChapterFormat(
    2405             :             sAPI_chapter_format),
    2406             :         sPropertyLevel(sAPI_level),
    2407             :         nFormat(ChapterFormat::NAME_NUMBER),
    2408          12 :         nLevel(0)
    2409             : {
    2410          12 :     bValid = true;
    2411          12 : }
    2412             : 
    2413          24 : void XMLChapterImportContext::ProcessAttribute(
    2414             :     sal_uInt16 nAttrToken,
    2415             :     const OUString& sAttrValue )
    2416             : {
    2417          24 :     switch (nAttrToken)
    2418             :     {
    2419             :         case XML_TOK_TEXTFIELD_DISPLAY:
    2420             :         {
    2421             :             sal_uInt16 nTmp;
    2422          12 :             if (SvXMLUnitConverter::convertEnum(nTmp, sAttrValue,
    2423             :                                                 aChapterDisplayMap))
    2424             :             {
    2425          12 :                 nFormat = (sal_Int16)nTmp;
    2426             :             }
    2427          12 :             break;
    2428             :         }
    2429             :         case XML_TOK_TEXTFIELD_OUTLINE_LEVEL:
    2430             :         {
    2431             :             sal_Int32 nTmp;
    2432          24 :             if (::sax::Converter::convertNumber(
    2433             :                 nTmp, sAttrValue, 1,
    2434          36 :                 GetImport().GetTextImport()->GetChapterNumbering()->getCount()
    2435          24 :                 ))
    2436             :             {
    2437             :                 // API numbers 0..9, we number 1..10
    2438          12 :                 nLevel = (sal_Int8)nTmp;
    2439          12 :                 nLevel--;
    2440             :             }
    2441          12 :             break;
    2442             :         }
    2443             :         default:
    2444             :             ; // unknown attribute: ignore
    2445           0 :             break;
    2446             :     }
    2447          24 : }
    2448             : 
    2449          12 : void XMLChapterImportContext::PrepareField(
    2450             :         const Reference<XPropertySet> & xPropertySet)
    2451             : {
    2452          12 :     Any aAny;
    2453             : 
    2454          12 :     aAny <<= nFormat;
    2455          12 :     xPropertySet->setPropertyValue(sPropertyChapterFormat, aAny);
    2456             : 
    2457          12 :     aAny <<= nLevel;
    2458          12 :     xPropertySet->setPropertyValue(sPropertyLevel, aAny);
    2459          12 : }
    2460             : 
    2461             : 
    2462             : 
    2463             : // counting fields
    2464             : 
    2465             : 
    2466           0 : TYPEINIT1( XMLCountFieldImportContext, XMLTextFieldImportContext );
    2467             : 
    2468         184 : XMLCountFieldImportContext::XMLCountFieldImportContext(
    2469             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    2470             :     sal_uInt16 nPrfx, const OUString& sLocalName, sal_uInt16 nToken) :
    2471             :         XMLTextFieldImportContext(rImport, rHlp, MapTokenToServiceName(nToken),
    2472             :                                   nPrfx, sLocalName),
    2473             :         sPropertyNumberingType(
    2474             :             sAPI_numbering_type),
    2475             :         sNumberFormat(),
    2476             :         sLetterSync(),
    2477         184 :         bNumberFormatOK(false)
    2478             : {
    2479         184 :     bValid = true;
    2480         184 : }
    2481             : 
    2482           9 : void XMLCountFieldImportContext::ProcessAttribute(
    2483             :     sal_uInt16 nAttrToken,
    2484             :     const OUString& sAttrValue )
    2485             : {
    2486           9 :     switch (nAttrToken)
    2487             :     {
    2488             :         case XML_TOK_TEXTFIELD_NUM_FORMAT:
    2489           9 :             sNumberFormat = sAttrValue;
    2490           9 :             bNumberFormatOK = true;
    2491           9 :             break;
    2492             :         case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
    2493           0 :             sLetterSync = sAttrValue;
    2494           0 :             break;
    2495             :     }
    2496           9 : }
    2497             : 
    2498         184 : void XMLCountFieldImportContext::PrepareField(
    2499             :     const Reference<XPropertySet> & xPropertySet)
    2500             : {
    2501         184 :     Any aAny;
    2502             : 
    2503             :     // properties optional
    2504             :     // (only page count, but do for all to save common implementation)
    2505             : 
    2506         368 :     if (xPropertySet->getPropertySetInfo()->
    2507         184 :         hasPropertyByName(sPropertyNumberingType))
    2508             :     {
    2509             :         sal_Int16 nNumType;
    2510          16 :         if( bNumberFormatOK )
    2511             :         {
    2512           9 :             nNumType= style::NumberingType::ARABIC;
    2513           9 :             GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
    2514             :                                                     sNumberFormat,
    2515          18 :                                                     sLetterSync );
    2516             :         }
    2517             :         else
    2518           7 :             nNumType = style::NumberingType::PAGE_DESCRIPTOR;
    2519          16 :         aAny <<= nNumType;
    2520          16 :         xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
    2521         184 :     }
    2522         184 : }
    2523             : 
    2524         184 : const sal_Char* XMLCountFieldImportContext::MapTokenToServiceName(
    2525             :     sal_uInt16 nToken)
    2526             : {
    2527         184 :     const sal_Char* pServiceName = NULL;
    2528             : 
    2529         184 :     switch (nToken)
    2530             :     {
    2531             :         case XML_TOK_TEXT_WORD_COUNT:
    2532           0 :             pServiceName = sAPI_word_count;
    2533           0 :             break;
    2534             :         case XML_TOK_TEXT_PARAGRAPH_COUNT:
    2535           0 :             pServiceName = sAPI_paragraph_count;
    2536           0 :             break;
    2537             :         case XML_TOK_TEXT_TABLE_COUNT:
    2538           0 :             pServiceName = sAPI_table_count;
    2539           0 :             break;
    2540             :         case XML_TOK_TEXT_CHARACTER_COUNT:
    2541           0 :             pServiceName = sAPI_character_count;
    2542           0 :             break;
    2543             :         case XML_TOK_TEXT_IMAGE_COUNT:
    2544           0 :             pServiceName = sAPI_graphic_object_count;
    2545           0 :             break;
    2546             :         case XML_TOK_TEXT_OBJECT_COUNT:
    2547           0 :             pServiceName = sAPI_embedded_object_count;
    2548           0 :             break;
    2549             :         case XML_TOK_TEXT_PAGE_COUNT:
    2550         184 :             pServiceName = sAPI_page_count;
    2551         184 :             break;
    2552             :         default:
    2553           0 :             pServiceName = NULL;
    2554             :             OSL_FAIL("unknown count field!");
    2555           0 :             break;
    2556             :     }
    2557             : 
    2558         184 :     return pServiceName;
    2559             : }
    2560             : 
    2561             : 
    2562             : 
    2563             : 
    2564             : // page variable import
    2565             : 
    2566             : 
    2567           0 : TYPEINIT1( XMLPageVarGetFieldImportContext, XMLTextFieldImportContext );
    2568             : 
    2569           0 : XMLPageVarGetFieldImportContext::XMLPageVarGetFieldImportContext(
    2570             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    2571             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    2572             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_reference_page_get,
    2573             :                                   nPrfx, sLocalName),
    2574             :         sPropertyNumberingType(
    2575             :             sAPI_numbering_type),
    2576             :         sNumberFormat(),
    2577             :         sLetterSync(),
    2578           0 :         bNumberFormatOK(false)
    2579             : {
    2580           0 :     bValid = true;
    2581           0 : }
    2582             : 
    2583           0 : void XMLPageVarGetFieldImportContext::ProcessAttribute(
    2584             :     sal_uInt16 nAttrToken,
    2585             :     const OUString& sAttrValue )
    2586             : {
    2587           0 :     switch (nAttrToken)
    2588             :     {
    2589             :         case XML_TOK_TEXTFIELD_NUM_FORMAT:
    2590           0 :             sNumberFormat = sAttrValue;
    2591           0 :             bNumberFormatOK = true;
    2592           0 :             break;
    2593             :         case XML_TOK_TEXTFIELD_NUM_LETTER_SYNC:
    2594           0 :             sLetterSync = sAttrValue;
    2595           0 :             break;
    2596             :     }
    2597           0 : }
    2598             : 
    2599           0 : void XMLPageVarGetFieldImportContext::PrepareField(
    2600             :     const Reference<XPropertySet> & xPropertySet)
    2601             : {
    2602           0 :     Any aAny;
    2603             : 
    2604             :     sal_Int16 nNumType;
    2605           0 :     if( bNumberFormatOK )
    2606             :     {
    2607           0 :         nNumType= style::NumberingType::ARABIC;
    2608           0 :         GetImport().GetMM100UnitConverter().convertNumFormat( nNumType,
    2609             :                                                     sNumberFormat,
    2610           0 :                                                     sLetterSync );
    2611             :     }
    2612             :     else
    2613           0 :         nNumType = style::NumberingType::PAGE_DESCRIPTOR;
    2614           0 :     aAny <<= nNumType;
    2615           0 :     xPropertySet->setPropertyValue(sPropertyNumberingType, aAny);
    2616             : 
    2617             :     // display old content (#96657#)
    2618           0 :     aAny <<= GetContent();
    2619           0 :     xPropertySet->setPropertyValue(
    2620             :         OUString(sAPI_current_presentation),
    2621           0 :         aAny );
    2622           0 : }
    2623             : 
    2624             : 
    2625             : 
    2626             : 
    2627             : // page variable set fields
    2628             : 
    2629             : 
    2630           0 : TYPEINIT1(XMLPageVarSetFieldImportContext, XMLTextFieldImportContext);
    2631             : 
    2632           0 : XMLPageVarSetFieldImportContext::XMLPageVarSetFieldImportContext(
    2633             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
    2634             :     const OUString& sLocalName) :
    2635             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_reference_page_set,
    2636             :                                   nPrfx, sLocalName),
    2637             :         sPropertyOn(sAPI_on),
    2638             :         sPropertyOffset(sAPI_offset),
    2639             :         nAdjust(0),
    2640           0 :         bActive(true)
    2641             : {
    2642           0 :     bValid = true;
    2643           0 : }
    2644             : 
    2645           0 : void XMLPageVarSetFieldImportContext::ProcessAttribute(
    2646             :     sal_uInt16 nAttrToken,
    2647             :     const OUString& sAttrValue )
    2648             : {
    2649           0 :     switch (nAttrToken)
    2650             :     {
    2651             :     case XML_TOK_TEXTFIELD_ACTIVE:
    2652             :     {
    2653           0 :         bool bTmp(false);
    2654           0 :         if (::sax::Converter::convertBool(bTmp, sAttrValue))
    2655             :         {
    2656           0 :             bActive = bTmp;
    2657             :         }
    2658           0 :         break;
    2659             :     }
    2660             :     case XML_TOK_TEXTFIELD_PAGE_ADJUST:
    2661             :     {
    2662           0 :         sal_Int32 nTmp(0);
    2663           0 :         if (::sax::Converter::convertNumber(nTmp, sAttrValue))
    2664             :         {
    2665           0 :             nAdjust = (sal_Int16)nTmp;
    2666             :         }
    2667           0 :         break;
    2668             :     }
    2669             :     default:
    2670           0 :         break;
    2671             :     }
    2672           0 : }
    2673             : 
    2674           0 : void XMLPageVarSetFieldImportContext::PrepareField(
    2675             :     const Reference<XPropertySet> & xPropertySet)
    2676             : {
    2677           0 :     Any aAny;
    2678             : 
    2679           0 :     aAny.setValue(&bActive, cppu::UnoType<bool>::get());
    2680           0 :     xPropertySet->setPropertyValue(sPropertyOn, aAny);
    2681             : 
    2682           0 :     aAny <<= nAdjust;
    2683           0 :     xPropertySet->setPropertyValue(sPropertyOffset, aAny);
    2684           0 : }
    2685             : 
    2686             : 
    2687             : 
    2688             : 
    2689             : // macro fields
    2690             : 
    2691             : 
    2692           0 : TYPEINIT1( XMLMacroFieldImportContext, XMLTextFieldImportContext );
    2693             : 
    2694           0 : XMLMacroFieldImportContext::XMLMacroFieldImportContext(
    2695             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp, sal_uInt16 nPrfx,
    2696             :     const OUString& sLocalName) :
    2697             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_macro,
    2698             :                                   nPrfx, sLocalName),
    2699             :         sPropertyHint(sAPI_hint),
    2700             :         sPropertyMacroName("MacroName"),
    2701             :         sPropertyScriptURL("ScriptURL"),
    2702           0 :         bDescriptionOK(false)
    2703             : {
    2704           0 : }
    2705             : 
    2706           0 : SvXMLImportContext* XMLMacroFieldImportContext::CreateChildContext(
    2707             :     sal_uInt16 nPrefix,
    2708             :     const OUString& rLocalName,
    2709             :     const Reference<XAttributeList> & xAttrList )
    2710             : {
    2711           0 :     SvXMLImportContext* pContext = NULL;
    2712             : 
    2713           0 :     if ( (nPrefix == XML_NAMESPACE_OFFICE) &&
    2714           0 :          IsXMLToken( rLocalName, XML_EVENT_LISTENERS ) )
    2715             :     {
    2716             :         // create events context and remember it!
    2717             :         pContext = new XMLEventsImportContext(
    2718           0 :             GetImport(), nPrefix, rLocalName );
    2719           0 :         xEventContext = pContext;
    2720           0 :         bValid = true;
    2721             :     }
    2722             :     else
    2723             :         pContext = SvXMLImportContext::CreateChildContext(
    2724           0 :             nPrefix, rLocalName, xAttrList);
    2725             : 
    2726           0 :     return pContext;
    2727             : }
    2728             : 
    2729             : 
    2730           0 : void XMLMacroFieldImportContext::ProcessAttribute(
    2731             :     sal_uInt16 nAttrToken,
    2732             :     const OUString& sAttrValue )
    2733             : {
    2734           0 :     switch (nAttrToken)
    2735             :     {
    2736             :         case XML_TOK_TEXTFIELD_DESCRIPTION:
    2737           0 :             sDescription = sAttrValue;
    2738           0 :             bDescriptionOK = true;
    2739           0 :             break;
    2740             :         case XML_TOK_TEXTFIELD_NAME:
    2741           0 :             sMacro = sAttrValue;
    2742           0 :             bValid = true;
    2743           0 :             break;
    2744             :     }
    2745           0 : }
    2746             : 
    2747           0 : void XMLMacroFieldImportContext::PrepareField(
    2748             :     const Reference<XPropertySet> & xPropertySet)
    2749             : {
    2750           0 :     Any aAny;
    2751             : 
    2752           0 :     OUString sOnClick("OnClick");
    2753           0 :     OUString sPropertyMacroLibrary("MacroLibrary");
    2754             : 
    2755           0 :     aAny <<= (bDescriptionOK ? sDescription : GetContent());
    2756           0 :     xPropertySet->setPropertyValue(sPropertyHint, aAny);
    2757             : 
    2758             :     // if we have an events child element, we'll look for the OnClick
    2759             :     // event if not, it may be an old (pre-638i) document. Then, we'll
    2760             :     // have to look at the name attribute.
    2761           0 :     OUString sMacroName;
    2762           0 :     OUString sLibraryName;
    2763           0 :     OUString sScriptURL;
    2764             : 
    2765           0 :     if ( xEventContext.Is() )
    2766             :     {
    2767             :         // get event sequence
    2768             :         XMLEventsImportContext* pEvents =
    2769           0 :             static_cast<XMLEventsImportContext*>(&xEventContext);
    2770           0 :         Sequence<PropertyValue> aValues;
    2771           0 :         pEvents->GetEventSequence( sOnClick, aValues );
    2772             : 
    2773           0 :         sal_Int32 nLength = aValues.getLength();
    2774           0 :         for( sal_Int32 i = 0; i < nLength; i++ )
    2775             :         {
    2776           0 :             if ( aValues[i].Name == "ScriptType" )
    2777             :             {
    2778             :                 // ignore ScriptType
    2779             :             }
    2780           0 :             else if ( aValues[i].Name == "Library" )
    2781             :             {
    2782           0 :                 aValues[i].Value >>= sLibraryName;
    2783             :             }
    2784           0 :             else if ( aValues[i].Name == "MacroName" )
    2785             :             {
    2786           0 :                 aValues[i].Value >>= sMacroName;
    2787             :             }
    2788           0 :             if ( aValues[i].Name == "Script" )
    2789             :             {
    2790           0 :                 aValues[i].Value >>= sScriptURL;
    2791             :             }
    2792           0 :         }
    2793             :     }
    2794             :     else
    2795             :     {
    2796             :         // disassemble old-style macro-name: Everything before the
    2797             :         // third-last dot is the library
    2798           0 :         sal_Int32 nPos = sMacro.getLength() + 1;    // the loop starts with nPos--
    2799           0 :         const sal_Unicode* pBuf = sMacro.getStr();
    2800           0 :         for( sal_Int32 i = 0; (i < 3) && (nPos > 0); i++ )
    2801             :         {
    2802           0 :             nPos--;
    2803           0 :             while ( (pBuf[nPos] != '.') && (nPos > 0) )
    2804           0 :                 nPos--;
    2805             :         }
    2806             : 
    2807           0 :         if (nPos > 0)
    2808             :         {
    2809           0 :             sLibraryName = sMacro.copy(0, nPos);
    2810           0 :             sMacroName = sMacro.copy(nPos+1);
    2811             :         }
    2812             :         else
    2813           0 :             sMacroName = sMacro;
    2814             :     }
    2815             : 
    2816           0 :     aAny <<= sScriptURL;
    2817           0 :     xPropertySet->setPropertyValue(sPropertyScriptURL, aAny);
    2818             : 
    2819           0 :     aAny <<= sMacroName;
    2820           0 :     xPropertySet->setPropertyValue(sPropertyMacroName, aAny);
    2821             : 
    2822           0 :     aAny <<= sLibraryName;
    2823           0 :     xPropertySet->setPropertyValue(sPropertyMacroLibrary, aAny);
    2824           0 : }
    2825             : 
    2826             : 
    2827             : 
    2828             : 
    2829             : // reference field import
    2830             : 
    2831             : 
    2832           0 : TYPEINIT1( XMLReferenceFieldImportContext, XMLTextFieldImportContext );
    2833             : 
    2834          18 : XMLReferenceFieldImportContext::XMLReferenceFieldImportContext(
    2835             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    2836             :     sal_uInt16 nToken, sal_uInt16 nPrfx, const OUString& sLocalName)
    2837             : :   XMLTextFieldImportContext(rImport, rHlp, sAPI_get_reference, nPrfx, sLocalName)
    2838             : ,   sPropertyReferenceFieldPart(sAPI_reference_field_part)
    2839             : ,   sPropertyReferenceFieldSource(sAPI_reference_field_source)
    2840             : ,   sPropertySourceName(sAPI_source_name)
    2841             : ,   sPropertyCurrentPresentation(sAPI_current_presentation)
    2842             : ,   nElementToken(nToken)
    2843             : ,   nSource(0)
    2844             : ,   nType(ReferenceFieldPart::PAGE_DESC)
    2845             : ,   bNameOK(false)
    2846          18 : ,   bTypeOK(false)
    2847             : {
    2848          18 : }
    2849             : 
    2850             : static SvXMLEnumMapEntry const lcl_aReferenceTypeTokenMap[] =
    2851             : {
    2852             :     { XML_PAGE,         ReferenceFieldPart::PAGE},
    2853             :     { XML_CHAPTER,      ReferenceFieldPart::CHAPTER },
    2854             :     { XML_TEXT,         ReferenceFieldPart::TEXT },
    2855             :     { XML_DIRECTION,    ReferenceFieldPart::UP_DOWN },
    2856             :     { XML_CATEGORY_AND_VALUE, ReferenceFieldPart::CATEGORY_AND_NUMBER },
    2857             :     { XML_CAPTION,      ReferenceFieldPart::ONLY_CAPTION },
    2858             :     { XML_VALUE,        ReferenceFieldPart::ONLY_SEQUENCE_NUMBER },
    2859             :     // Core implementation for direct cross-references (#i81002#)
    2860             :     { XML_NUMBER,               ReferenceFieldPart::NUMBER },
    2861             :     { XML_NUMBER_NO_SUPERIOR,   ReferenceFieldPart::NUMBER_NO_CONTEXT },
    2862             :     { XML_NUMBER_ALL_SUPERIOR,  ReferenceFieldPart::NUMBER_FULL_CONTEXT },
    2863             :     { XML_TOKEN_INVALID, 0 }
    2864             : };
    2865             : 
    2866          18 : void XMLReferenceFieldImportContext::StartElement(
    2867             :     const Reference<XAttributeList> & xAttrList)
    2868             : {
    2869          18 :     bTypeOK = true;
    2870          18 :     switch (nElementToken)
    2871             :     {
    2872             :         case XML_TOK_TEXT_REFERENCE_REF:
    2873           3 :             nSource = ReferenceFieldSource::REFERENCE_MARK;
    2874           3 :             break;
    2875             :         case XML_TOK_TEXT_BOOKMARK_REF:
    2876          13 :             nSource = ReferenceFieldSource::BOOKMARK;
    2877          13 :             break;
    2878             :         case XML_TOK_TEXT_NOTE_REF:
    2879           0 :             nSource = ReferenceFieldSource::FOOTNOTE;
    2880           0 :             break;
    2881             :         case XML_TOK_TEXT_SEQUENCE_REF:
    2882           2 :             nSource = ReferenceFieldSource::SEQUENCE_FIELD;
    2883           2 :             break;
    2884             :         default:
    2885           0 :             bTypeOK = false;
    2886             :             OSL_FAIL("unknown reference field");
    2887           0 :             break;
    2888             :     }
    2889             : 
    2890          18 :     XMLTextFieldImportContext::StartElement(xAttrList);
    2891          18 : }
    2892             : 
    2893             : 
    2894          36 : void XMLReferenceFieldImportContext::ProcessAttribute(
    2895             :     sal_uInt16 nAttrToken,
    2896             :     const OUString& sAttrValue )
    2897             : {
    2898          36 :     switch (nAttrToken)
    2899             :     {
    2900             :         case XML_TOK_TEXTFIELD_NOTE_CLASS:
    2901           0 :             if( IsXMLToken( sAttrValue, XML_ENDNOTE ) )
    2902           0 :                 nSource = ReferenceFieldSource::ENDNOTE;
    2903           0 :             break;
    2904             :         case XML_TOK_TEXTFIELD_REF_NAME:
    2905          18 :             sName = sAttrValue;
    2906          18 :             bNameOK = true;
    2907          18 :             break;
    2908             :         case XML_TOK_TEXTFIELD_REFERENCE_FORMAT:
    2909             :         {
    2910             :             sal_uInt16 nToken;
    2911          18 :             if (SvXMLUnitConverter::convertEnum(nToken, sAttrValue,
    2912             :                                                 lcl_aReferenceTypeTokenMap))
    2913             :             {
    2914          18 :                 nType = nToken;
    2915             :             }
    2916             : 
    2917             :             // check for sequence-only-attributes
    2918          34 :             if ( (XML_TOK_TEXT_SEQUENCE_REF != nElementToken) &&
    2919          32 :                  ( (nType == ReferenceFieldPart::CATEGORY_AND_NUMBER) ||
    2920          32 :                    (nType == ReferenceFieldPart::ONLY_CAPTION) ||
    2921          16 :                    (nType == ReferenceFieldPart::ONLY_SEQUENCE_NUMBER) ) )
    2922             :             {
    2923           0 :                 nType = ReferenceFieldPart::PAGE_DESC;
    2924             :             }
    2925             : 
    2926          18 :             break;
    2927             :         }
    2928             :     }
    2929             : 
    2930             :     // bValid: we need proper element type and name
    2931          36 :     bValid = bTypeOK && bNameOK;
    2932          36 : }
    2933             : 
    2934          18 : void XMLReferenceFieldImportContext::PrepareField(
    2935             :     const Reference<XPropertySet> & xPropertySet)
    2936             : {
    2937          18 :     Any aAny;
    2938             : 
    2939          18 :     aAny <<= nType;
    2940          18 :     xPropertySet->setPropertyValue(sPropertyReferenceFieldPart, aAny);
    2941             : 
    2942          18 :     aAny <<= nSource;
    2943          18 :     xPropertySet->setPropertyValue(sPropertyReferenceFieldSource, aAny);
    2944             : 
    2945          18 :     switch (nElementToken)
    2946             :     {
    2947             :         case XML_TOK_TEXT_REFERENCE_REF:
    2948             :         case XML_TOK_TEXT_BOOKMARK_REF:
    2949          16 :             aAny <<= sName;
    2950          16 :             xPropertySet->setPropertyValue(sPropertySourceName, aAny);
    2951          16 :             break;
    2952             : 
    2953             :         case XML_TOK_TEXT_NOTE_REF:
    2954           0 :             GetImportHelper().ProcessFootnoteReference(sName, xPropertySet);
    2955           0 :             break;
    2956             : 
    2957             :         case XML_TOK_TEXT_SEQUENCE_REF:
    2958           2 :             GetImportHelper().ProcessSequenceReference(sName, xPropertySet);
    2959           2 :             break;
    2960             :     }
    2961             : 
    2962          18 :     aAny <<= GetContent();
    2963          18 :     xPropertySet->setPropertyValue(sPropertyCurrentPresentation, aAny);
    2964          18 : }
    2965             : 
    2966             : 
    2967             : 
    2968             : 
    2969             : // field declarations container
    2970             : 
    2971             : 
    2972             : enum DdeFieldDeclAttrs
    2973             : {
    2974             :     XML_TOK_DDEFIELD_NAME,
    2975             :     XML_TOK_DDEFIELD_APPLICATION,
    2976             :     XML_TOK_DDEFIELD_TOPIC,
    2977             :     XML_TOK_DDEFIELD_ITEM,
    2978             :     XML_TOK_DDEFIELD_UPDATE
    2979             : };
    2980             : 
    2981             : static const SvXMLTokenMapEntry aDdeDeclAttrTokenMap[] =
    2982             : {
    2983             :     { XML_NAMESPACE_OFFICE, XML_NAME, XML_TOK_DDEFIELD_NAME },
    2984             :     { XML_NAMESPACE_OFFICE, XML_DDE_APPLICATION, XML_TOK_DDEFIELD_APPLICATION },
    2985             :     { XML_NAMESPACE_OFFICE, XML_DDE_TOPIC, XML_TOK_DDEFIELD_TOPIC },
    2986             :     { XML_NAMESPACE_OFFICE, XML_DDE_ITEM, XML_TOK_DDEFIELD_ITEM },
    2987             :     { XML_NAMESPACE_OFFICE, XML_AUTOMATIC_UPDATE, XML_TOK_DDEFIELD_UPDATE },
    2988             :     XML_TOKEN_MAP_END
    2989             : };
    2990             : 
    2991           0 : TYPEINIT1( XMLDdeFieldDeclsImportContext, SvXMLImportContext );
    2992             : 
    2993           0 : XMLDdeFieldDeclsImportContext::XMLDdeFieldDeclsImportContext(
    2994             :     SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& sLocalName) :
    2995             :         SvXMLImportContext(rImport, nPrfx, sLocalName),
    2996           0 :         aTokenMap(aDdeDeclAttrTokenMap)
    2997             : {
    2998           0 : }
    2999             : 
    3000           0 : SvXMLImportContext * XMLDdeFieldDeclsImportContext::CreateChildContext(
    3001             :     sal_uInt16 nPrefix,
    3002             :     const OUString& rLocalName,
    3003             :     const Reference<XAttributeList> & xAttrList )
    3004             : {
    3005           0 :     if ( (XML_NAMESPACE_TEXT == nPrefix) &&
    3006           0 :          (IsXMLToken(rLocalName, XML_DDE_CONNECTION_DECL)) )
    3007             :     {
    3008           0 :         return new XMLDdeFieldDeclImportContext(GetImport(), nPrefix,
    3009           0 :                                                 rLocalName, aTokenMap);
    3010             :     }
    3011             :     else
    3012             :     {
    3013             :         return SvXMLImportContext::CreateChildContext(nPrefix,
    3014             :                                                       rLocalName,
    3015           0 :                                                       xAttrList);
    3016             :     }
    3017             : }
    3018             : 
    3019             : 
    3020             : 
    3021             : 
    3022             : // import dde field declaration
    3023             : 
    3024             : 
    3025           0 : TYPEINIT1( XMLDdeFieldDeclImportContext, SvXMLImportContext );
    3026             : 
    3027           0 : XMLDdeFieldDeclImportContext::XMLDdeFieldDeclImportContext(
    3028             :     SvXMLImport& rImport, sal_uInt16 nPrfx,
    3029             :     const OUString& sLocalName, const SvXMLTokenMap& rMap)
    3030             : :   SvXMLImportContext(rImport, nPrfx, sLocalName)
    3031             : ,   sPropertyIsAutomaticUpdate(sAPI_is_automatic_update)
    3032             : ,   sPropertyName(sAPI_name)
    3033             : ,   sPropertyDDECommandType(sAPI_dde_command_type)
    3034             : ,   sPropertyDDECommandFile(sAPI_dde_command_file)
    3035             : ,   sPropertyDDECommandElement(sAPI_dde_command_element)
    3036           0 : ,   rTokenMap(rMap)
    3037             : {
    3038             :     DBG_ASSERT(XML_NAMESPACE_TEXT == nPrfx, "wrong prefix");
    3039             :     DBG_ASSERT(IsXMLToken(sLocalName, XML_DDE_CONNECTION_DECL), "wrong name");
    3040           0 : }
    3041             : 
    3042           0 : void XMLDdeFieldDeclImportContext::StartElement(
    3043             :     const Reference<XAttributeList> & xAttrList)
    3044             : {
    3045           0 :     OUString sName;
    3046           0 :     OUString sCommandApplication;
    3047           0 :     OUString sCommandTopic;
    3048           0 :     OUString sCommandItem;
    3049             : 
    3050           0 :     sal_Bool bUpdate = sal_False;
    3051           0 :     bool bNameOK = false;
    3052           0 :     bool bCommandApplicationOK = false;
    3053           0 :     bool bCommandTopicOK = false;
    3054           0 :     bool bCommandItemOK = false;
    3055             : 
    3056             :     // process attributes
    3057           0 :     sal_Int16 nLength = xAttrList->getLength();
    3058           0 :     for(sal_Int16 i=0; i<nLength; i++)
    3059             :     {
    3060             : 
    3061           0 :         OUString sLocalName;
    3062           0 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
    3063           0 :             GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
    3064             : 
    3065           0 :         switch (rTokenMap.Get(nPrefix, sLocalName))
    3066             :         {
    3067             :             case XML_TOK_DDEFIELD_NAME:
    3068           0 :                 sName = xAttrList->getValueByIndex(i);
    3069           0 :                 bNameOK = true;
    3070           0 :                 break;
    3071             :             case XML_TOK_DDEFIELD_APPLICATION:
    3072           0 :                 sCommandApplication = xAttrList->getValueByIndex(i);
    3073           0 :                 bCommandApplicationOK = true;
    3074           0 :                 break;
    3075             :             case XML_TOK_DDEFIELD_TOPIC:
    3076           0 :                 sCommandTopic = xAttrList->getValueByIndex(i);
    3077           0 :                 bCommandTopicOK = true;
    3078           0 :                 break;
    3079             :             case XML_TOK_DDEFIELD_ITEM:
    3080           0 :                 sCommandItem = xAttrList->getValueByIndex(i);
    3081           0 :                 bCommandItemOK = true;
    3082           0 :                 break;
    3083             :             case XML_TOK_DDEFIELD_UPDATE:
    3084             :             {
    3085           0 :                 bool bTmp(false);
    3086           0 :                 if (::sax::Converter::convertBool(
    3087           0 :                     bTmp, xAttrList->getValueByIndex(i)) )
    3088             :                 {
    3089           0 :                     bUpdate = bTmp;
    3090             :                 }
    3091           0 :                 break;
    3092             :             }
    3093             :         }
    3094           0 :     }
    3095             : 
    3096             :     // valid data?
    3097           0 :     if (bNameOK && bCommandApplicationOK && bCommandTopicOK && bCommandItemOK)
    3098             :     {
    3099             :         // make service name
    3100           0 :         OUStringBuffer sBuf;
    3101           0 :         sBuf.appendAscii(sAPI_fieldmaster_prefix);
    3102           0 :         sBuf.appendAscii(sAPI_dde);
    3103             : 
    3104             :         // create DDE TextFieldMaster
    3105           0 :         Reference<XMultiServiceFactory> xFactory(GetImport().GetModel(),
    3106           0 :                                                  UNO_QUERY);
    3107           0 :         if( xFactory.is() )
    3108             :         {
    3109             :             /* #i6432# There might be multiple occurrences of one DDE
    3110             :                declaration if it is used in more than one of
    3111             :                header/footer/body. createInstance will throw an exception if we
    3112             :                try to create the second, third, etc. instance of such a
    3113             :                declaration. Thus we ignore the exception. Otherwise this will
    3114             :                lead to an unloadable document. */
    3115             :             try
    3116             :             {
    3117             :                 Reference<XInterface> xIfc =
    3118           0 :                     xFactory->createInstance(sBuf.makeStringAndClear());
    3119           0 :                 if( xIfc.is() )
    3120             :                 {
    3121           0 :                     Reference<XPropertySet> xPropSet( xIfc, UNO_QUERY );
    3122           0 :                     if (xPropSet.is() &&
    3123           0 :                         xPropSet->getPropertySetInfo()->hasPropertyByName(
    3124           0 :                                                                           sPropertyDDECommandType))
    3125             :                     {
    3126           0 :                         Any aAny;
    3127             : 
    3128           0 :                         aAny <<= sName;
    3129           0 :                         xPropSet->setPropertyValue(sPropertyName, aAny);
    3130             : 
    3131           0 :                         aAny <<= sCommandApplication;
    3132           0 :                         xPropSet->setPropertyValue(sPropertyDDECommandType, aAny);
    3133             : 
    3134           0 :                         aAny <<= sCommandTopic;
    3135           0 :                         xPropSet->setPropertyValue(sPropertyDDECommandFile, aAny);
    3136             : 
    3137           0 :                         aAny <<= sCommandItem;
    3138           0 :                         xPropSet->setPropertyValue(sPropertyDDECommandElement,
    3139           0 :                                                    aAny);
    3140             : 
    3141           0 :                         aAny.setValue(&bUpdate, cppu::UnoType<bool>::get());
    3142           0 :                         xPropSet->setPropertyValue(sPropertyIsAutomaticUpdate,
    3143           0 :                                                    aAny);
    3144           0 :                     }
    3145             :                     // else: ignore (can't get XPropertySet, or DDE
    3146             :                     //               properties are not supported)
    3147           0 :                 }
    3148             :                 // else: ignore
    3149             :             }
    3150           0 :             catch (const Exception&)
    3151             :             {
    3152             :                 //ignore
    3153             :             }
    3154           0 :         }
    3155             :         // else: ignore
    3156           0 :     }
    3157             :     // else: ignore
    3158           0 : }
    3159             : 
    3160             : 
    3161             : 
    3162             : 
    3163             : // DDE field import
    3164             : 
    3165             : 
    3166           0 : TYPEINIT1( XMLDdeFieldImportContext, XMLTextFieldImportContext );
    3167             : 
    3168           0 : XMLDdeFieldImportContext::XMLDdeFieldImportContext(
    3169             :     SvXMLImport& rImport, XMLTextImportHelper& rHlp,
    3170             :     sal_uInt16 nPrfx, const OUString& sLocalName) :
    3171             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_dde,
    3172             :                                   nPrfx, sLocalName),
    3173             :         sName()
    3174           0 :         ,sPropertyContent(sAPI_content)
    3175             : {
    3176           0 : }
    3177             : 
    3178           0 : void XMLDdeFieldImportContext::ProcessAttribute(
    3179             :     sal_uInt16 nAttrToken,
    3180             :     const OUString& sAttrValue )
    3181             : {
    3182           0 :     if (XML_TOK_TEXTFIELD_CONNECTION_NAME == nAttrToken)
    3183             :     {
    3184           0 :         sName = sAttrValue;
    3185           0 :         bValid = true;
    3186             :     }
    3187           0 : }
    3188             : 
    3189           0 : void XMLDdeFieldImportContext::EndElement()
    3190             : {
    3191           0 :     if (bValid)
    3192             :     {
    3193             :         // find master
    3194           0 :         OUStringBuffer sBuf;
    3195           0 :         sBuf.appendAscii(sAPI_fieldmaster_prefix);
    3196           0 :         sBuf.appendAscii(sAPI_dde);
    3197           0 :         sBuf.append('.');
    3198           0 :         sBuf.append(sName);
    3199           0 :         OUString sMasterName = sBuf.makeStringAndClear();
    3200             : 
    3201           0 :         Reference<XTextFieldsSupplier> xTextFieldsSupp(GetImport().GetModel(),
    3202           0 :                                                        UNO_QUERY);
    3203             :         Reference<container::XNameAccess> xFieldMasterNameAccess(
    3204           0 :             xTextFieldsSupp->getTextFieldMasters(), UNO_QUERY);
    3205             : 
    3206           0 :         if (xFieldMasterNameAccess->hasByName(sMasterName))
    3207             :         {
    3208           0 :             Reference<XPropertySet> xMaster;
    3209           0 :             Any aAny = xFieldMasterNameAccess->getByName(sMasterName);
    3210           0 :             aAny >>= xMaster;
    3211             :             //apply the content to the master
    3212           0 :             xMaster->setPropertyValue( sPropertyContent, uno::makeAny( GetContent()));
    3213             :             // master exists: create text field and attach
    3214           0 :             Reference<XPropertySet> xField;
    3215           0 :             sBuf.appendAscii(sAPI_textfield_prefix);
    3216           0 :             sBuf.appendAscii(sAPI_dde);
    3217           0 :             if (CreateField(xField, sBuf.makeStringAndClear()))
    3218             :             {
    3219           0 :                 Reference<XDependentTextField> xDepTextField(xField,UNO_QUERY);
    3220           0 :                 xDepTextField->attachTextFieldMaster(xMaster);
    3221             : 
    3222             :                 // attach field to document
    3223           0 :                 Reference<XTextContent> xTextContent(xField, UNO_QUERY);
    3224           0 :                 if (xTextContent.is())
    3225             :                 {
    3226           0 :                     GetImportHelper().InsertTextContent(xTextContent);
    3227             : 
    3228             :                     // we're lucky. nothing else to prepare.
    3229           0 :                 }
    3230             :                 // else: fail, because text content could not be created
    3231           0 :             }
    3232             :             // else: fail, because field could not be created
    3233           0 :         }
    3234             :         // else: fail, because no master was found (faulty document?!)
    3235             :     }
    3236             :     // not valid: ignore
    3237           0 : }
    3238             : 
    3239           0 : void XMLDdeFieldImportContext::PrepareField(
    3240             :     const Reference<XPropertySet> &)
    3241             : {
    3242             :     // empty, since not needed.
    3243           0 : }
    3244             : 
    3245             : 
    3246             : 
    3247             : // sheet name fields
    3248             : 
    3249             : 
    3250           0 : TYPEINIT1(XMLSheetNameImportContext, XMLTextFieldImportContext);
    3251             : 
    3252         352 : XMLSheetNameImportContext::XMLSheetNameImportContext(
    3253             :     SvXMLImport& rImport,
    3254             :     XMLTextImportHelper& rHlp,
    3255             :     sal_uInt16 nPrfx,
    3256             :     const OUString& sLocalName) :
    3257             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_sheet_name,
    3258         352 :                                   nPrfx, sLocalName)
    3259             : {
    3260         352 :     bValid = true;  // always valid!
    3261         352 : }
    3262             : 
    3263           0 : void XMLSheetNameImportContext::ProcessAttribute(
    3264             :     sal_uInt16,
    3265             :     const OUString& )
    3266             : {
    3267             :     // no attributes -> nothing to be done
    3268           0 : }
    3269             : 
    3270         352 : void XMLSheetNameImportContext::PrepareField(
    3271             :     const Reference<XPropertySet> &)
    3272             : {
    3273             :     // no attributes -> nothing to be done
    3274         352 : }
    3275             : 
    3276             : /** import page|slide name fields (<text:page-name>) */
    3277           0 : TYPEINIT1( XMLPageNameFieldImportContext, XMLTextFieldImportContext );
    3278             : 
    3279           0 : XMLPageNameFieldImportContext::XMLPageNameFieldImportContext(
    3280             :         SvXMLImport& rImport,                   /// XML Import
    3281             :         XMLTextImportHelper& rHlp,              /// Text import helper
    3282             :         sal_uInt16 nPrfx,                       /// namespace prefix
    3283             :         const OUString& sLocalName)      /// element name w/o prefix
    3284           0 : : XMLTextFieldImportContext(rImport, rHlp, sAPI_pagename, nPrfx, sLocalName )
    3285             : {
    3286           0 :     bValid = true;
    3287           0 : }
    3288             : 
    3289             : /// process attribute values
    3290           0 : void XMLPageNameFieldImportContext::ProcessAttribute( sal_uInt16,
    3291             :                                    const OUString& )
    3292             : {
    3293           0 : }
    3294             : 
    3295             : /// prepare XTextField for insertion into document
    3296           0 : void XMLPageNameFieldImportContext::PrepareField(
    3297             :         const ::com::sun::star::uno::Reference<
    3298             :         ::com::sun::star::beans::XPropertySet> &)
    3299             : {
    3300           0 : }
    3301             : 
    3302             : 
    3303             : // URL fields (Calc, Impress, Draw)
    3304             : 
    3305             : 
    3306           0 : TYPEINIT1(XMLUrlFieldImportContext, XMLTextFieldImportContext);
    3307             : 
    3308           1 : XMLUrlFieldImportContext::XMLUrlFieldImportContext(
    3309             :     SvXMLImport& rImport,
    3310             :     XMLTextImportHelper& rHlp,
    3311             :     sal_uInt16 nPrfx,
    3312             :     const OUString& sLocalName) :
    3313             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_url,
    3314             :                                   nPrfx, sLocalName),
    3315             :         sPropertyURL(sAPI_url),
    3316             :         sPropertyTargetFrame(sAPI_target_frame),
    3317             :         sPropertyRepresentation(
    3318             :             sAPI_representation),
    3319           1 :         bFrameOK(false)
    3320             : {
    3321           1 : }
    3322             : 
    3323           2 : void XMLUrlFieldImportContext::ProcessAttribute(
    3324             :     sal_uInt16 nAttrToken,
    3325             :     const OUString& sAttrValue )
    3326             : {
    3327           2 :     switch (nAttrToken)
    3328             :     {
    3329             :         case XML_TOK_TEXTFIELD_HREF:
    3330           1 :             sURL = GetImport().GetAbsoluteReference( sAttrValue );
    3331           1 :             bValid = true;
    3332           1 :             break;
    3333             :         case XML_TOK_TEXTFIELD_TARGET_FRAME:
    3334           0 :             sFrame = sAttrValue;
    3335           0 :             bFrameOK = true;
    3336           0 :             break;
    3337             :         default:
    3338             :             // ignore
    3339           1 :             break;
    3340             :     }
    3341           2 : }
    3342             : 
    3343           1 : void XMLUrlFieldImportContext::PrepareField(
    3344             :     const Reference<XPropertySet> & xPropertySet)
    3345             : {
    3346           1 :     Any aAny;
    3347             : 
    3348           1 :     aAny <<= sURL;
    3349           1 :     xPropertySet->setPropertyValue(sPropertyURL, aAny);
    3350             : 
    3351           1 :     if (bFrameOK)
    3352             :     {
    3353           0 :         aAny <<= sFrame;
    3354           0 :         xPropertySet->setPropertyValue(sPropertyTargetFrame, aAny);
    3355             :     }
    3356             : 
    3357           1 :     aAny <<= GetContent();
    3358           1 :     xPropertySet->setPropertyValue(sPropertyRepresentation, aAny);
    3359           1 : }
    3360             : 
    3361             : 
    3362           0 : TYPEINIT1(XMLBibliographyFieldImportContext, XMLTextFieldImportContext);
    3363             : 
    3364             : 
    3365           0 : XMLBibliographyFieldImportContext::XMLBibliographyFieldImportContext(
    3366             :     SvXMLImport& rImport,
    3367             :     XMLTextImportHelper& rHlp,
    3368             :     sal_uInt16 nPrfx,
    3369             :     const OUString& sLocalName) :
    3370             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_bibliography,
    3371             :                                   nPrfx, sLocalName),
    3372             :         sPropertyFields("Fields"),
    3373           0 :         aValues()
    3374             : {
    3375           0 :     bValid = true;
    3376           0 : }
    3377             : 
    3378             : // TODO: this is the same map as is used in the text field export
    3379             : static SvXMLEnumMapEntry const aBibliographyDataTypeMap[] =
    3380             : {
    3381             :     { XML_ARTICLE,          BibliographyDataType::ARTICLE },
    3382             :     { XML_BOOK,             BibliographyDataType::BOOK },
    3383             :     { XML_BOOKLET,          BibliographyDataType::BOOKLET },
    3384             :     { XML_CONFERENCE,       BibliographyDataType::CONFERENCE },
    3385             :     { XML_CUSTOM1,          BibliographyDataType::CUSTOM1 },
    3386             :     { XML_CUSTOM2,          BibliographyDataType::CUSTOM2 },
    3387             :     { XML_CUSTOM3,          BibliographyDataType::CUSTOM3 },
    3388             :     { XML_CUSTOM4,          BibliographyDataType::CUSTOM4 },
    3389             :     { XML_CUSTOM5,          BibliographyDataType::CUSTOM5 },
    3390             :     { XML_EMAIL,            BibliographyDataType::EMAIL },
    3391             :     { XML_INBOOK,           BibliographyDataType::INBOOK },
    3392             :     { XML_INCOLLECTION,     BibliographyDataType::INCOLLECTION },
    3393             :     { XML_INPROCEEDINGS,    BibliographyDataType::INPROCEEDINGS },
    3394             :     { XML_JOURNAL,          BibliographyDataType::JOURNAL },
    3395             :     { XML_MANUAL,           BibliographyDataType::MANUAL },
    3396             :     { XML_MASTERSTHESIS,    BibliographyDataType::MASTERSTHESIS },
    3397             :     { XML_MISC,             BibliographyDataType::MISC },
    3398             :     { XML_PHDTHESIS,        BibliographyDataType::PHDTHESIS },
    3399             :     { XML_PROCEEDINGS,      BibliographyDataType::PROCEEDINGS },
    3400             :     { XML_TECHREPORT,       BibliographyDataType::TECHREPORT },
    3401             :     { XML_UNPUBLISHED,      BibliographyDataType::UNPUBLISHED },
    3402             :     { XML_WWW,              BibliographyDataType::WWW },
    3403             :     { XML_TOKEN_INVALID, 0 }
    3404             : };
    3405             : 
    3406             : 
    3407             : // we'll process attributes on our own and forfit the standard
    3408             : // tecfield mechanism, because our attributes have zero overlp with
    3409             : // all the oher textfields.
    3410           0 : void XMLBibliographyFieldImportContext::StartElement(
    3411             :         const Reference<XAttributeList> & xAttrList)
    3412             : {
    3413             :     // iterate over attributes
    3414           0 :     sal_Int16 nLength = xAttrList->getLength();
    3415           0 :     for(sal_Int16 i=0; i<nLength; i++) {
    3416             : 
    3417           0 :         OUString sLocalName;
    3418           0 :         sal_uInt16 nPrefix = GetImport().GetNamespaceMap().
    3419           0 :             GetKeyByAttrName( xAttrList->getNameByIndex(i), &sLocalName );
    3420             : 
    3421           0 :         if (nPrefix == XML_NAMESPACE_TEXT)
    3422             :         {
    3423           0 :             PropertyValue aValue;
    3424           0 :             aValue.Name = OUString::createFromAscii(
    3425           0 :                 MapBibliographyFieldName(sLocalName));
    3426           0 :             Any aAny;
    3427             : 
    3428             :             // special treatment for bibliography type
    3429             :             // biblio vs bibilio: #96658#; also read old documents
    3430           0 :             if (IsXMLToken(sLocalName, XML_BIBILIOGRAPHIC_TYPE) ||
    3431           0 :                 IsXMLToken(sLocalName, XML_BIBLIOGRAPHY_TYPE)    )
    3432             :             {
    3433             :                 sal_uInt16 nTmp;
    3434           0 :                 if (SvXMLUnitConverter::convertEnum(
    3435           0 :                     nTmp, xAttrList->getValueByIndex(i),
    3436           0 :                     aBibliographyDataTypeMap))
    3437             :                 {
    3438           0 :                     aAny <<= (sal_Int16)nTmp;
    3439           0 :                     aValue.Value = aAny;
    3440             : 
    3441           0 :                     aValues.push_back(aValue);
    3442             :                 }
    3443             :             }
    3444             :             else
    3445             :             {
    3446           0 :                 aAny <<= xAttrList->getValueByIndex(i);
    3447           0 :                 aValue.Value = aAny;
    3448             : 
    3449           0 :                 aValues.push_back(aValue);
    3450           0 :             }
    3451             :         }
    3452             :         // else: unknown namespace -> ignore
    3453           0 :     }
    3454           0 : }
    3455             : 
    3456           0 : void XMLBibliographyFieldImportContext::ProcessAttribute(
    3457             :     sal_uInt16,
    3458             :     const OUString& )
    3459             : {
    3460             :     // attributes are handled in StartElement
    3461             :     OSL_FAIL("This should not have happened.");
    3462           0 : }
    3463             : 
    3464             : 
    3465           0 : void XMLBibliographyFieldImportContext::PrepareField(
    3466             :     const Reference<XPropertySet> & xPropertySet)
    3467             : {
    3468             :     // convert vector into sequence
    3469           0 :     sal_Int32 nCount = aValues.size();
    3470           0 :     Sequence<PropertyValue> aValueSequence(nCount);
    3471           0 :     for(sal_Int32 i = 0; i < nCount; i++)
    3472             :     {
    3473           0 :         aValueSequence[i] = aValues[i];
    3474             :     }
    3475             : 
    3476             :     // set sequence
    3477           0 :     Any aAny;
    3478           0 :     aAny <<= aValueSequence;
    3479           0 :     xPropertySet->setPropertyValue(sPropertyFields, aAny);
    3480           0 : }
    3481             : 
    3482           0 : const sal_Char* XMLBibliographyFieldImportContext::MapBibliographyFieldName(
    3483             :     const OUString& sName)
    3484             : {
    3485           0 :     const sal_Char* pName = NULL;
    3486             : 
    3487           0 :     if (IsXMLToken(sName, XML_IDENTIFIER))
    3488             :     {
    3489           0 :         pName = "Identifier";
    3490             :     }
    3491           0 :     else if (IsXMLToken(sName, XML_BIBILIOGRAPHIC_TYPE) ||
    3492           0 :              IsXMLToken(sName, XML_BIBLIOGRAPHY_TYPE)     )
    3493             :     {
    3494             :         // biblio... vs bibilio...: #96658#: also read old documents
    3495           0 :         pName = "BibiliographicType";
    3496             :     }
    3497           0 :     else if (IsXMLToken(sName, XML_ADDRESS))
    3498             :     {
    3499           0 :         pName = "Address";
    3500             :     }
    3501           0 :     else if (IsXMLToken(sName, XML_ANNOTE))
    3502             :     {
    3503           0 :         pName = "Annote";
    3504             :     }
    3505           0 :     else if (IsXMLToken(sName, XML_AUTHOR))
    3506             :     {
    3507           0 :         pName = "Author";
    3508             :     }
    3509           0 :     else if (IsXMLToken(sName, XML_BOOKTITLE))
    3510             :     {
    3511           0 :         pName = "Booktitle";
    3512             :     }
    3513           0 :     else if (IsXMLToken(sName, XML_CHAPTER))
    3514             :     {
    3515           0 :         pName = "Chapter";
    3516             :     }
    3517           0 :     else if (IsXMLToken(sName, XML_EDITION))
    3518             :     {
    3519           0 :         pName = "Edition";
    3520             :     }
    3521           0 :     else if (IsXMLToken(sName, XML_EDITOR))
    3522             :     {
    3523           0 :         pName = "Editor";
    3524             :     }
    3525           0 :     else if (IsXMLToken(sName, XML_HOWPUBLISHED))
    3526             :     {
    3527           0 :         pName = "Howpublished";
    3528             :     }
    3529           0 :     else if (IsXMLToken(sName, XML_INSTITUTION))
    3530             :     {
    3531           0 :         pName = "Institution";
    3532             :     }
    3533           0 :     else if (IsXMLToken(sName, XML_JOURNAL))
    3534             :     {
    3535           0 :         pName = "Journal";
    3536             :     }
    3537           0 :     else if (IsXMLToken(sName, XML_MONTH))
    3538             :     {
    3539           0 :         pName = "Month";
    3540             :     }
    3541           0 :     else if (IsXMLToken(sName, XML_NOTE))
    3542             :     {
    3543           0 :         pName = "Note";
    3544             :     }
    3545           0 :     else if (IsXMLToken(sName, XML_NUMBER))
    3546             :     {
    3547           0 :         pName = "Number";
    3548             :     }
    3549           0 :     else if (IsXMLToken(sName, XML_ORGANIZATIONS))
    3550             :     {
    3551           0 :         pName = "Organizations";
    3552             :     }
    3553           0 :     else if (IsXMLToken(sName, XML_PAGES))
    3554             :     {
    3555           0 :         pName = "Pages";
    3556             :     }
    3557           0 :     else if (IsXMLToken(sName, XML_PUBLISHER))
    3558             :     {
    3559           0 :         pName = "Publisher";
    3560             :     }
    3561           0 :     else if (IsXMLToken(sName, XML_SCHOOL))
    3562             :     {
    3563           0 :         pName = "School";
    3564             :     }
    3565           0 :     else if (IsXMLToken(sName, XML_SERIES))
    3566             :     {
    3567           0 :         pName = "Series";
    3568             :     }
    3569           0 :     else if (IsXMLToken(sName, XML_TITLE))
    3570             :     {
    3571           0 :         pName = "Title";
    3572             :     }
    3573           0 :     else if (IsXMLToken(sName, XML_REPORT_TYPE))
    3574             :     {
    3575           0 :         pName = "Report_Type";
    3576             :     }
    3577           0 :     else if (IsXMLToken(sName, XML_VOLUME))
    3578             :     {
    3579           0 :         pName = "Volume";
    3580             :     }
    3581           0 :     else if (IsXMLToken(sName, XML_YEAR))
    3582             :     {
    3583           0 :         pName = "Year";
    3584             :     }
    3585           0 :     else if (IsXMLToken(sName, XML_URL))
    3586             :     {
    3587           0 :         pName = "URL";
    3588             :     }
    3589           0 :     else if (IsXMLToken(sName, XML_CUSTOM1))
    3590             :     {
    3591           0 :         pName = "Custom1";
    3592             :     }
    3593           0 :     else if (IsXMLToken(sName, XML_CUSTOM2))
    3594             :     {
    3595           0 :         pName = "Custom2";
    3596             :     }
    3597           0 :     else if (IsXMLToken(sName, XML_CUSTOM3))
    3598             :     {
    3599           0 :         pName = "Custom3";
    3600             :     }
    3601           0 :     else if (IsXMLToken(sName, XML_CUSTOM4))
    3602             :     {
    3603           0 :         pName = "Custom4";
    3604             :     }
    3605           0 :     else if (IsXMLToken(sName, XML_CUSTOM5))
    3606             :     {
    3607           0 :         pName = "Custom5";
    3608             :     }
    3609           0 :     else if (IsXMLToken(sName, XML_ISBN))
    3610             :     {
    3611           0 :         pName = "ISBN";
    3612             :     }
    3613             :     else
    3614             :     {
    3615             :         OSL_FAIL("Unknown bibliography info data");
    3616           0 :         pName = NULL;
    3617             :     }
    3618             : 
    3619           0 :     return pName;
    3620             : }
    3621             : 
    3622             : 
    3623             : 
    3624             : // Annotation Field
    3625             : 
    3626             : 
    3627           0 : TYPEINIT1(XMLAnnotationImportContext, XMLTextFieldImportContext);
    3628             : 
    3629          56 : XMLAnnotationImportContext::XMLAnnotationImportContext(
    3630             :     SvXMLImport& rImport,
    3631             :     XMLTextImportHelper& rHlp,
    3632             :     sal_uInt16 nToken,
    3633             :     sal_uInt16 nPrfx,
    3634             :     const OUString& sLocalName) :
    3635             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_annotation,
    3636             :                                   nPrfx, sLocalName),
    3637             :         sPropertyAuthor(sAPI_author),
    3638             :         sPropertyInitials(sAPI_initials),
    3639             :         sPropertyContent(sAPI_content),
    3640             :         // why is there no UNO_NAME_DATE_TIME, but only UNO_NAME_DATE_TIME_VALUE?
    3641             :         sPropertyDate(sAPI_date_time_value),
    3642             :         sPropertyTextRange(sAPI_TextRange),
    3643             :         sPropertyName(sAPI_name),
    3644          56 :         m_nToken(nToken)
    3645             : {
    3646          56 :     bValid = true;
    3647             : 
    3648             :     // remember old list item and block (#91964#) and reset them
    3649             :     // for the text frame
    3650             :     // do this in the constructor, not in CreateChildContext (#i93392#)
    3651          56 :     GetImport().GetTextImport()->PushListContext();
    3652          56 : }
    3653             : 
    3654          36 : void XMLAnnotationImportContext::ProcessAttribute(
    3655             :     sal_uInt16 nToken,
    3656             :     const OUString& rValue )
    3657             : {
    3658          36 :     if (nToken == XML_TOK_TEXT_NAME)
    3659          36 :         aName = rValue;
    3660          36 : }
    3661             : 
    3662         249 : SvXMLImportContext* XMLAnnotationImportContext::CreateChildContext(
    3663             :     sal_uInt16 nPrefix,
    3664             :     const OUString& rLocalName,
    3665             :     const Reference<XAttributeList >& xAttrList )
    3666             : {
    3667         249 :     SvXMLImportContext *pContext = 0;
    3668         249 :     if( XML_NAMESPACE_DC == nPrefix )
    3669             :     {
    3670          74 :         if( IsXMLToken( rLocalName, XML_CREATOR ) )
    3671          37 :             pContext = new XMLStringBufferImportContext(GetImport(), nPrefix,
    3672          37 :                                             rLocalName, aAuthorBuffer);
    3673          37 :         else if( IsXMLToken( rLocalName, XML_DATE ) )
    3674          37 :             pContext = new XMLStringBufferImportContext(GetImport(), nPrefix,
    3675          37 :                                             rLocalName, aDateBuffer);
    3676             :     }
    3677         175 :     else if( XML_NAMESPACE_TEXT == nPrefix || XML_NAMESPACE_LO_EXT == nPrefix )
    3678             :     {
    3679         175 :         if( IsXMLToken( rLocalName, XML_SENDER_INITIALS ) )
    3680          11 :             pContext = new XMLStringBufferImportContext(GetImport(), nPrefix,
    3681          11 :                                             rLocalName, aInitialsBuffer);
    3682             :     }
    3683             : 
    3684         249 :     if( !pContext )
    3685             :     {
    3686             :         try
    3687             :         {
    3688         164 :             bool bOK = true;
    3689         164 :             if ( !mxField.is() )
    3690          38 :                 bOK = CreateField( mxField, sServicePrefix + GetServiceName() );
    3691         164 :             if (bOK)
    3692             :             {
    3693         164 :                 Any aAny = mxField->getPropertyValue( sPropertyTextRange );
    3694         328 :                 Reference< XText > xText;
    3695         164 :                 aAny >>= xText;
    3696         164 :                 if( xText.is() )
    3697             :                 {
    3698         164 :                     rtl::Reference < XMLTextImportHelper > xTxtImport = GetImport().GetTextImport();
    3699         164 :                     if( !mxCursor.is() )
    3700             :                     {
    3701          38 :                         mxOldCursor = xTxtImport->GetCursor();
    3702          38 :                         mxCursor = xText->createTextCursor();
    3703             :                     }
    3704             : 
    3705         164 :                     if( mxCursor.is() )
    3706             :                     {
    3707         164 :                         xTxtImport->SetCursor( mxCursor );
    3708         164 :                         pContext = xTxtImport->CreateTextChildContext( GetImport(), nPrefix, rLocalName, xAttrList );
    3709         164 :                     }
    3710         164 :                 }
    3711             :             }
    3712             :         }
    3713           0 :         catch (const Exception&)
    3714             :         {
    3715             :         }
    3716             : 
    3717         164 :         if( !pContext )
    3718           0 :             pContext = new XMLStringBufferImportContext(GetImport(), nPrefix,  rLocalName, aTextBuffer);
    3719             :     }
    3720             : 
    3721         249 :     return pContext;
    3722             : }
    3723             : 
    3724          56 : void XMLAnnotationImportContext::EndElement()
    3725             : {
    3726             :     DBG_ASSERT(!GetServiceName().isEmpty(), "no service name for element!");
    3727          56 :     if( mxCursor.is() )
    3728             :     {
    3729             :         // delete addition newline
    3730          38 :         const OUString aEmpty;
    3731          38 :         mxCursor->gotoEnd( sal_False );
    3732          38 :         mxCursor->goLeft( 1, sal_True );
    3733          38 :         mxCursor->setString( aEmpty );
    3734             : 
    3735             :         // reset cursor
    3736          38 :         GetImport().GetTextImport()->ResetCursor();
    3737             :     }
    3738             : 
    3739          56 :     if( mxOldCursor.is() )
    3740          38 :         GetImport().GetTextImport()->SetCursor( mxOldCursor );
    3741             : 
    3742             :     // reinstall old list item #91964#
    3743          56 :     GetImport().GetTextImport()->PopListContext();
    3744             : 
    3745          56 :     if ( bValid )
    3746             :     {
    3747          56 :         if ( m_nToken == XML_TOK_TEXT_ANNOTATION_END )
    3748             :         {
    3749             :             // Search for a previous annotation with the same name.
    3750          18 :             uno::Reference< text::XTextContent > xPrevField;
    3751             :             {
    3752          18 :                 Reference<XTextFieldsSupplier> xTextFieldsSupplier(GetImport().GetModel(), UNO_QUERY);
    3753          36 :                 uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
    3754          36 :                 uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
    3755          45 :                 while (xFields->hasMoreElements())
    3756             :                 {
    3757          27 :                     uno::Reference<beans::XPropertySet> xCurrField(xFields->nextElement(), uno::UNO_QUERY);
    3758             :                     uno::Reference<beans::XPropertySetInfo> const xInfo(
    3759          36 :                             xCurrField->getPropertySetInfo());
    3760          27 :                     if (xInfo->hasPropertyByName(sPropertyName))
    3761             :                     {
    3762          27 :                         OUString aFieldName;
    3763          27 :                         xCurrField->getPropertyValue(sPropertyName) >>= aFieldName;
    3764          27 :                         if (aFieldName == aName)
    3765             :                         {
    3766          18 :                             xPrevField.set( xCurrField, uno::UNO_QUERY );
    3767          18 :                             break;
    3768           9 :                         }
    3769             :                     }
    3770          27 :                 }
    3771             :             }
    3772          18 :             if ( xPrevField.is() )
    3773             :             {
    3774             :                 // So we are ending a previous annotation,
    3775             :                 // let's create a text range covering the old and the current position.
    3776          18 :                 uno::Reference<text::XText> xText = GetImportHelper().GetText();
    3777             :                 uno::Reference<text::XTextCursor> xCursor =
    3778          36 :                     xText->createTextCursorByRange(GetImportHelper().GetCursorAsRange());
    3779          18 :                 xCursor->gotoRange(xPrevField->getAnchor(), true);
    3780          36 :                 uno::Reference<text::XTextRange> xTextRange(xCursor, uno::UNO_QUERY);
    3781             : 
    3782          36 :                 xText->insertTextContent(xTextRange, xPrevField, !xCursor->isCollapsed());
    3783          18 :             }
    3784             :         }
    3785             :         else
    3786             :         {
    3787          38 :             if ( mxField.is() || CreateField( mxField, sServicePrefix + GetServiceName() ) )
    3788             :             {
    3789             :                 // set field properties
    3790          38 :                 PrepareField( mxField );
    3791             : 
    3792             :                 // attach field to document
    3793          38 :                 Reference < XTextContent > xTextContent( mxField, UNO_QUERY );
    3794             : 
    3795             :                 // workaround for #80606#
    3796             :                 try
    3797             :                 {
    3798          38 :                     GetImportHelper().InsertTextContent( xTextContent );
    3799             :                 }
    3800           0 :                 catch (const lang::IllegalArgumentException&)
    3801             :                 {
    3802             :                     // ignore
    3803          38 :                 }
    3804             :             }
    3805             :         }
    3806             :     }
    3807             :     else
    3808           0 :         GetImportHelper().InsertString(GetContent());
    3809          56 : }
    3810             : 
    3811          38 : void XMLAnnotationImportContext::PrepareField(
    3812             :     const Reference<XPropertySet> & xPropertySet )
    3813             : {
    3814             :     // import (possibly empty) author
    3815          38 :     OUString sAuthor( aAuthorBuffer.makeStringAndClear() );
    3816          38 :     xPropertySet->setPropertyValue(sPropertyAuthor, makeAny(sAuthor));
    3817             : 
    3818             :     // import (possibly empty) initials
    3819          76 :     OUString sInitials( aInitialsBuffer.makeStringAndClear() );
    3820          38 :     xPropertySet->setPropertyValue(sPropertyInitials, makeAny(sInitials));
    3821             : 
    3822          38 :     util::DateTime aDateTime;
    3823          76 :     if (::sax::Converter::parseDateTime(aDateTime, 0,
    3824          76 :                                             aDateBuffer.makeStringAndClear()))
    3825             :     {
    3826             :         /*
    3827             :         Date aDate;
    3828             :         aDate.Year = aDateTime.Year;
    3829             :         aDate.Month = aDateTime.Month;
    3830             :         aDate.Day = aDateTime.Day;
    3831             :         xPropertySet->setPropertyValue(sPropertyDate, makeAny(aDate));
    3832             :         */
    3833          37 :         xPropertySet->setPropertyValue(sPropertyDate, makeAny(aDateTime));
    3834             :     }
    3835             : 
    3836          76 :     OUString sBuffer = aTextBuffer.makeStringAndClear();
    3837          38 :     if ( sBuffer.getLength() )
    3838             :     {
    3839             :         // delete last paragraph mark (if necessary)
    3840           0 :         if (sal_Char(0x0a) == sBuffer[sBuffer.getLength()-1])
    3841           0 :             sBuffer = sBuffer.copy(0, sBuffer.getLength()-1);
    3842           0 :         xPropertySet->setPropertyValue(sPropertyContent, makeAny(sBuffer));
    3843             :     }
    3844             : 
    3845          38 :     if (!aName.isEmpty())
    3846          56 :         xPropertySet->setPropertyValue(sPropertyName, makeAny(aName));
    3847          38 : }
    3848             : 
    3849             : 
    3850             : 
    3851             : 
    3852             : // script field
    3853             : 
    3854             : 
    3855           0 : TYPEINIT1(XMLScriptImportContext, XMLTextFieldImportContext);
    3856             : 
    3857           0 : XMLScriptImportContext::XMLScriptImportContext(
    3858             :     SvXMLImport& rImport,
    3859             :     XMLTextImportHelper& rHlp,
    3860             :     sal_uInt16 nPrfx,
    3861             :     const OUString& sLocalName)
    3862             : :   XMLTextFieldImportContext(rImport, rHlp, sAPI_script, nPrfx, sLocalName)
    3863             : ,   sPropertyScriptType(sAPI_script_type)
    3864             : ,   sPropertyURLContent(sAPI_url_content)
    3865             : ,   sPropertyContent(sAPI_content)
    3866             : ,   bContentOK(false)
    3867           0 : ,   bScriptTypeOK(false)
    3868             : {
    3869           0 : }
    3870             : 
    3871           0 : void XMLScriptImportContext::ProcessAttribute(
    3872             :     sal_uInt16 nAttrToken,
    3873             :     const OUString& sAttrValue )
    3874             : {
    3875           0 :     switch (nAttrToken)
    3876             :     {
    3877             :         case XML_TOK_TEXTFIELD_HREF:
    3878           0 :             sContent = GetImport().GetAbsoluteReference( sAttrValue );
    3879           0 :             bContentOK = true;
    3880           0 :             break;
    3881             : 
    3882             :         case XML_TOK_TEXTFIELD_LANGUAGE:
    3883           0 :             sScriptType = sAttrValue;
    3884           0 :             bScriptTypeOK = true;
    3885           0 :             break;
    3886             : 
    3887             :         default:
    3888             :             // ignore
    3889           0 :             break;
    3890             :     }
    3891             : 
    3892             :     // always valid (even without ScriptType; cf- #96531#)
    3893           0 :     bValid = true;
    3894           0 : }
    3895             : 
    3896           0 : void XMLScriptImportContext::PrepareField(
    3897             :     const Reference<XPropertySet> & xPropertySet)
    3898             : {
    3899           0 :     Any aAny;
    3900             : 
    3901             :     // if href attribute was present, we use it. Else we use element content
    3902           0 :     if (! bContentOK)
    3903             :     {
    3904           0 :         sContent = GetContent();
    3905             :     }
    3906           0 :     aAny <<= sContent;
    3907           0 :     xPropertySet->setPropertyValue(sPropertyContent, aAny);
    3908             : 
    3909             :     // URL or script text? We use URL if we have an href-attribute
    3910           0 :     aAny.setValue(&bContentOK, cppu::UnoType<bool>::get());
    3911           0 :     xPropertySet->setPropertyValue(sPropertyURLContent, aAny);
    3912             : 
    3913           0 :     aAny <<= sScriptType;
    3914           0 :     xPropertySet->setPropertyValue(sPropertyScriptType, aAny);
    3915           0 : }
    3916             : 
    3917             : 
    3918             : // measure field
    3919             : 
    3920             : 
    3921           0 : TYPEINIT1(XMLMeasureFieldImportContext, XMLTextFieldImportContext);
    3922             : 
    3923           5 : XMLMeasureFieldImportContext::XMLMeasureFieldImportContext(
    3924             :     SvXMLImport& rImport,
    3925             :     XMLTextImportHelper& rHlp,
    3926             :     sal_uInt16 nPrfx,
    3927             :     const OUString& sLocalName) :
    3928             :         XMLTextFieldImportContext(rImport, rHlp, sAPI_measure,
    3929             :                                   nPrfx, sLocalName),
    3930           5 :         mnKind( 0 )
    3931             : {
    3932           5 : }
    3933             : 
    3934           5 : void XMLMeasureFieldImportContext::ProcessAttribute(
    3935             :     sal_uInt16 nAttrToken,
    3936             :     const OUString& sAttrValue )
    3937             : {
    3938           5 :     switch (nAttrToken)
    3939             :     {
    3940             :         case XML_TOK_TEXTFIELD_MEASURE_KIND:
    3941           5 :             if( IsXMLToken( sAttrValue, XML_VALUE ) )
    3942             :             {
    3943           1 :                 mnKind = 0; bValid = true;
    3944             :             }
    3945           4 :             else if( IsXMLToken( sAttrValue, XML_UNIT ) )
    3946             :             {
    3947           1 :                 mnKind = 1; bValid = true;
    3948             :             }
    3949           3 :             else if( IsXMLToken( sAttrValue, XML_GAP ) )
    3950             :             {
    3951           3 :                 mnKind = 2; bValid = true;
    3952             :             }
    3953           5 :             break;
    3954             :     }
    3955           5 : }
    3956             : 
    3957           5 : void XMLMeasureFieldImportContext::PrepareField(
    3958             :     const Reference<XPropertySet> & xPropertySet)
    3959             : {
    3960           5 :     Any aAny;
    3961           5 :     aAny <<= mnKind;
    3962           5 :     xPropertySet->setPropertyValue("Kind", aAny);
    3963           5 : }
    3964             : 
    3965             : 
    3966             : 
    3967             : 
    3968             : // dropdown field
    3969             : 
    3970             : 
    3971             : 
    3972           0 : TYPEINIT1( XMLDropDownFieldImportContext, XMLTextFieldImportContext );
    3973             : 
    3974           0 : XMLDropDownFieldImportContext::XMLDropDownFieldImportContext(
    3975             :         SvXMLImport& rImport,
    3976             :         XMLTextImportHelper& rHlp,
    3977             :         sal_uInt16 nPrfx,
    3978             :         const OUString& sLocalName) :
    3979             :     XMLTextFieldImportContext( rImport, rHlp, sAPI_drop_down,
    3980             :                                nPrfx, sLocalName ),
    3981             :     aLabels(),
    3982             :     sName(),
    3983             :     nSelected( -1 ),
    3984             :     bNameOK( false ),
    3985             :     bHelpOK(false),
    3986             :     bHintOK(false),
    3987             :     sPropertyItems( "Items"  ),
    3988             :     sPropertySelectedItem( "SelectedItem"  ),
    3989             :     sPropertyName( "Name"  ),
    3990             :     sPropertyHelp( "Help"  ),
    3991           0 :     sPropertyToolTip( "Tooltip"  )
    3992             : {
    3993           0 :     bValid = true;
    3994           0 : }
    3995             : 
    3996           0 : static bool lcl_ProcessLabel( const SvXMLImport& rImport,
    3997             :                        const Reference<XAttributeList>& xAttrList,
    3998             :                        OUString& rLabel,
    3999             :                        bool& rIsSelected )
    4000             : {
    4001           0 :     bool bValid = false;
    4002           0 :     sal_Int16 nLength = xAttrList->getLength();
    4003           0 :     for( sal_Int16 n = 0; n < nLength; n++ )
    4004             :     {
    4005           0 :         OUString sLocalName;
    4006           0 :         sal_uInt16 nPrefix = rImport.GetNamespaceMap().
    4007           0 :             GetKeyByAttrName( xAttrList->getNameByIndex(n), &sLocalName );
    4008           0 :         OUString sValue = xAttrList->getValueByIndex(n);
    4009             : 
    4010           0 :         if( nPrefix == XML_NAMESPACE_TEXT )
    4011             :         {
    4012           0 :             if( IsXMLToken( sLocalName, XML_VALUE ) )
    4013             :             {
    4014           0 :                 rLabel = sValue;
    4015           0 :                 bValid = true;
    4016             :             }
    4017           0 :             else if( IsXMLToken( sLocalName, XML_CURRENT_SELECTED ) )
    4018             :             {
    4019           0 :                 bool bTmp(false);
    4020           0 :                 if (::sax::Converter::convertBool( bTmp, sValue ))
    4021           0 :                     rIsSelected = bTmp;
    4022             :             }
    4023             :         }
    4024           0 :     }
    4025           0 :     return bValid;
    4026             : }
    4027             : 
    4028           0 : SvXMLImportContext* XMLDropDownFieldImportContext::CreateChildContext(
    4029             :     sal_uInt16 nPrefix,
    4030             :     const OUString& rLocalName,
    4031             :     const Reference<XAttributeList>& xAttrList )
    4032             : {
    4033           0 :     if( nPrefix == XML_NAMESPACE_TEXT  &&
    4034           0 :         IsXMLToken( rLocalName, XML_LABEL ) )
    4035             :     {
    4036           0 :         OUString sLabel;
    4037           0 :         bool bIsSelected = false;
    4038           0 :         if( lcl_ProcessLabel( GetImport(), xAttrList, sLabel, bIsSelected ) )
    4039             :         {
    4040           0 :             if( bIsSelected )
    4041           0 :                 nSelected = static_cast<sal_Int32>( aLabels.size() );
    4042           0 :             aLabels.push_back( sLabel );
    4043           0 :         }
    4044             :     }
    4045           0 :     return new SvXMLImportContext( GetImport(), nPrefix, rLocalName );
    4046             : }
    4047             : 
    4048           0 : void XMLDropDownFieldImportContext::ProcessAttribute(
    4049             :     sal_uInt16 nAttrToken,
    4050             :     const OUString& sAttrValue )
    4051             : {
    4052           0 :     if( nAttrToken == XML_TOK_TEXTFIELD_NAME )
    4053             :     {
    4054           0 :         sName = sAttrValue;
    4055           0 :         bNameOK = true;
    4056             :     }
    4057           0 :     else if (nAttrToken == XML_TOK_TEXTFIELD_HELP)
    4058             :     {
    4059           0 :         sHelp = sAttrValue;
    4060           0 :         bHelpOK = true;
    4061             :     }
    4062           0 :     else if (nAttrToken == XML_TOK_TEXTFIELD_HINT)
    4063             :     {
    4064           0 :         sHint = sAttrValue;
    4065           0 :         bHintOK = true;
    4066             :     }
    4067           0 : }
    4068             : 
    4069           0 : void XMLDropDownFieldImportContext::PrepareField(
    4070             :     const Reference<XPropertySet>& xPropertySet)
    4071             : {
    4072             :     // create sequence
    4073           0 :     sal_Int32 nLength = static_cast<sal_Int32>( aLabels.size() );
    4074           0 :     Sequence<OUString> aSequence( nLength );
    4075           0 :     OUString* pSequence = aSequence.getArray();
    4076           0 :     for( sal_Int32 n = 0; n < nLength; n++ )
    4077           0 :         pSequence[n] = aLabels[n];
    4078             : 
    4079             :     // now set values:
    4080           0 :     Any aAny;
    4081             : 
    4082           0 :     aAny <<= aSequence;
    4083           0 :     xPropertySet->setPropertyValue( sPropertyItems, aAny );
    4084             : 
    4085           0 :     if( nSelected >= 0  &&  nSelected < nLength )
    4086             :     {
    4087           0 :         aAny <<= pSequence[nSelected];
    4088           0 :         xPropertySet->setPropertyValue( sPropertySelectedItem, aAny );
    4089             :     }
    4090             : 
    4091             :     // set name
    4092           0 :     if( bNameOK )
    4093             :     {
    4094           0 :         aAny <<= sName;
    4095           0 :         xPropertySet->setPropertyValue( sPropertyName, aAny );
    4096             :     }
    4097             :     // set help
    4098           0 :     if( bHelpOK )
    4099             :     {
    4100           0 :         aAny <<= sHelp;
    4101           0 :         xPropertySet->setPropertyValue( sPropertyHelp, aAny );
    4102             :     }
    4103             :     // set hint
    4104           0 :     if( bHintOK )
    4105             :     {
    4106           0 :         aAny <<= sHint;
    4107           0 :         xPropertySet->setPropertyValue( sPropertyToolTip, aAny );
    4108           0 :     }
    4109             : 
    4110           0 : }
    4111             : 
    4112             : /** import header fields (<draw:header>) */
    4113           0 : TYPEINIT1( XMLHeaderFieldImportContext, XMLTextFieldImportContext );
    4114             : 
    4115          83 : XMLHeaderFieldImportContext::XMLHeaderFieldImportContext(
    4116             :         SvXMLImport& rImport,                   /// XML Import
    4117             :         XMLTextImportHelper& rHlp,              /// Text import helper
    4118             :         sal_uInt16 nPrfx,                       /// namespace prefix
    4119             :         const OUString& sLocalName)      /// element name w/o prefix
    4120          83 : : XMLTextFieldImportContext(rImport, rHlp, sAPI_header, nPrfx, sLocalName )
    4121             : {
    4122          83 :     sServicePrefix = sAPI_presentation_prefix;
    4123          83 :     bValid = true;
    4124          83 : }
    4125             : 
    4126             : /// process attribute values
    4127           0 : void XMLHeaderFieldImportContext::ProcessAttribute( sal_uInt16, const OUString& )
    4128             : {
    4129           0 : }
    4130             : 
    4131             : /// prepare XTextField for insertion into document
    4132          83 : void XMLHeaderFieldImportContext::PrepareField(const Reference<XPropertySet> &)
    4133             : {
    4134          83 : }
    4135             : 
    4136             : /** import footer fields (<draw:footer>) */
    4137           0 : TYPEINIT1( XMLFooterFieldImportContext, XMLTextFieldImportContext );
    4138             : 
    4139         120 : XMLFooterFieldImportContext::XMLFooterFieldImportContext(
    4140             :         SvXMLImport& rImport,                   /// XML Import
    4141             :         XMLTextImportHelper& rHlp,              /// Text import helper
    4142             :         sal_uInt16 nPrfx,                       /// namespace prefix
    4143             :         const OUString& sLocalName)      /// element name w/o prefix
    4144         120 : : XMLTextFieldImportContext(rImport, rHlp, sAPI_footer, nPrfx, sLocalName )
    4145             : {
    4146         120 :     sServicePrefix = sAPI_presentation_prefix;
    4147         120 :     bValid = true;
    4148         120 : }
    4149             : 
    4150             : /// process attribute values
    4151           0 : void XMLFooterFieldImportContext::ProcessAttribute( sal_uInt16, const OUString& )
    4152             : {
    4153           0 : }
    4154             : 
    4155             : /// prepare XTextField for insertion into document
    4156         120 : void XMLFooterFieldImportContext::PrepareField(const Reference<XPropertySet> &)
    4157             : {
    4158         120 : }
    4159             : 
    4160             : 
    4161             : /** import footer fields (<draw:date-and-time>) */
    4162           0 : TYPEINIT1( XMLDateTimeFieldImportContext, XMLTextFieldImportContext );
    4163             : 
    4164         120 : XMLDateTimeFieldImportContext::XMLDateTimeFieldImportContext(
    4165             :         SvXMLImport& rImport,                   /// XML Import
    4166             :         XMLTextImportHelper& rHlp,              /// Text import helper
    4167             :         sal_uInt16 nPrfx,                       /// namespace prefix
    4168             :         const OUString& sLocalName)      /// element name w/o prefix
    4169         120 : : XMLTextFieldImportContext(rImport, rHlp, sAPI_datetime, nPrfx, sLocalName )
    4170             : {
    4171         120 :     sServicePrefix = sAPI_presentation_prefix;
    4172         120 :     bValid = true;
    4173         120 : }
    4174             : 
    4175             : /// process attribute values
    4176           0 : void XMLDateTimeFieldImportContext::ProcessAttribute( sal_uInt16,
    4177             :                                    const OUString& )
    4178             : {
    4179           0 : }
    4180             : 
    4181             : /// prepare XTextField for insertion into document
    4182         120 : void XMLDateTimeFieldImportContext::PrepareField(
    4183             :         const ::com::sun::star::uno::Reference<
    4184             :         ::com::sun::star::beans::XPropertySet> &)
    4185             : {
    4186         120 : }
    4187             : 
    4188             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11