office-gobmx/xmloff/inc/txtflde.hxx

519 lines
22 KiB
C++
Raw Normal View History

2000-09-18 11:07:07 -05:00
/*************************************************************************
*
* $RCSfile: txtflde.hxx,v $
*
* $Revision: 1.17 $
2000-09-18 11:07:07 -05:00
*
* last change: $Author: cl $ $Date: 2001-05-09 14:37:03 $
2000-09-18 11:07:07 -05:00
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (the "License"); You may not use this file
* except in compliance with the License. You may obtain a copy of the
* License at http://www.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
/** @#file
* XML export of all text fields
*/
#ifndef _XMLOFF_TXTFLDE_HXX
#define _XMLOFF_TXTFLDE_HXX
#ifndef _COM_SUN_STAR_UNO_REFERENCE_H_
#include <com/sun/star/uno/Reference.h>
#endif
#ifndef _XMLOFF_XMLNMSPE_HXX
#include "xmlnmspe.hxx"
#endif
2000-09-18 11:07:07 -05:00
#ifndef _RTL_USTRING
#include <rtl/ustring>
#endif
2001-03-09 07:10:57 -06:00
#include <map>
#include <set>
2000-09-18 11:07:07 -05:00
class SvXMLExport;
class SvXMLNumFmtExport;
struct XMLPropertyState;
2000-09-18 11:07:07 -05:00
2001-03-09 07:10:57 -06:00
namespace com { namespace sun { namespace star {
namespace util { struct DateTime; }
namespace util { struct Date; }
namespace text { class XTextField; }
namespace text { class XText; }
namespace beans { class XPropertySet; }
namespace frame { class XModel; }
} } }
namespace rtl { class OUString; }
2000-09-18 11:07:07 -05:00
/// field IDs,
// including translation between UNO speak and XML speak if appropriate
enum FieldIdEnum {
FIELD_ID_SENDER, // sender == extended user
FIELD_ID_AUTHOR,
FIELD_ID_DATE, // current date
FIELD_ID_TIME, // current time (+date)
FIELD_ID_PAGENUMBER, // page number
FIELD_ID_PAGESTRING, // page contination string (page number string)
FIELD_ID_REFPAGE_SET, // set reference page
FIELD_ID_REFPAGE_GET, // get reference page number
FIELD_ID_PLACEHOLDER, // placeholder field == jump edit field
FIELD_ID_VARIABLE_DECL, // field type for set variable
FIELD_ID_VARIABLE_GET, // get variable == get expression
FIELD_ID_VARIABLE_SET, // set variable == set expression
FIELD_ID_VARIABLE_INPUT, // input field (variable)
FIELD_ID_USER_DECL, // field type for user field
FIELD_ID_USER_GET, // user field
FIELD_ID_USER_INPUT, // input field (user field)
FIELD_ID_TEXT_INPUT, // input field (text)
FIELD_ID_EXPRESSION, // expression field = formula field
FIELD_ID_SEQUENCE_DECL, // field type for sequence
FIELD_ID_SEQUENCE, // sequence field
FIELD_ID_DATABASE_NEXT, // select next row
FIELD_ID_DATABASE_SELECT, // select row # (NumSet)
FIELD_ID_DATABASE_DISPLAY, // display data (form letter field)
FIELD_ID_DATABASE_NAME, // display current db name (database name)
FIELD_ID_DATABASE_NUMBER, // display row # (SetNumber)
FIELD_ID_DOCINFO_CREATION_AUTHOR, // docinfo fields
FIELD_ID_DOCINFO_CREATION_TIME,
FIELD_ID_DOCINFO_CREATION_DATE,
FIELD_ID_DOCINFO_DESCRIPTION,
FIELD_ID_DOCINFO_INFORMATION0, // ATTENTION: INFO-fields must be numbered
FIELD_ID_DOCINFO_INFORMATION1, // consecutively (to find out
FIELD_ID_DOCINFO_INFORMATION2, // number)
FIELD_ID_DOCINFO_INFORMATION3,
FIELD_ID_DOCINFO_PRINT_TIME,
FIELD_ID_DOCINFO_PRINT_DATE,
FIELD_ID_DOCINFO_PRINT_AUTHOR,
FIELD_ID_DOCINFO_TITLE,
FIELD_ID_DOCINFO_SUBJECT,
FIELD_ID_DOCINFO_KEYWORDS,
FIELD_ID_DOCINFO_REVISION,
FIELD_ID_DOCINFO_EDIT_DURATION,
FIELD_ID_DOCINFO_SAVE_TIME,
FIELD_ID_DOCINFO_SAVE_DATE,
FIELD_ID_DOCINFO_SAVE_AUTHOR,
FIELD_ID_CONDITIONAL_TEXT, // conditionally choose between 2 texts
FIELD_ID_HIDDEN_TEXT, // conditionally hide a text
FIELD_ID_HIDDEN_PARAGRAPH, // conditionally hide a paragraph
FIELD_ID_TEMPLATE_NAME, // display name of template
FIELD_ID_CHAPTER, // display name/number of current chapter
FIELD_ID_FILE_NAME, // display name of current file
FIELD_ID_COUNT_PARAGRAPHS, // statistics fields: - paragraphs
FIELD_ID_COUNT_WORDS, // - words
FIELD_ID_COUNT_CHARACTERS, // - chars
FIELD_ID_COUNT_PAGES, // - pages
FIELD_ID_COUNT_TABLES, // - tables
FIELD_ID_COUNT_GRAPHICS, // - graphics
FIELD_ID_COUNT_OBJECTS, // - objects
FIELD_ID_MACRO, // macro fields
FIELD_ID_REF_REFERENCE, // get reference field (reference)
FIELD_ID_REF_SEQUENCE, // get reference field (sequence)
FIELD_ID_REF_BOOKMARK, // get reference field (bookmark)
FIELD_ID_REF_FOOTNOTE, // get reference field (footnote)
FIELD_ID_REF_ENDNOTE, // get reference field (endnote)
FIELD_ID_DDE, // DDE field
FIELD_ID_BIBLIOGRAPHY, // bibliography index entry
FIELD_ID_SHEET_NAME, // name of current (spread-)sheet
FIELD_ID_URL, // URL field (only Calc, Draw, Impress)
FIELD_ID_SCRIPT, // script fields (for HTML pages, mostly)
FIELD_ID_ANNOTATION, // annotation (notice) field
FIELD_ID_COMBINED_CHARACTERS, // combined characters (asian typography)
2001-02-01 12:12:31 -06:00
FIELD_ID_MEASURE, // for measure shapes
2000-09-18 11:07:07 -05:00
FIELD_ID_UNKNOWN // invalid or unknown field type!
};
class XMLTextFieldExport
{
SvXMLExport& rExport;
2001-03-09 07:10:57 -06:00
/// store used text field master names (NULL means: don't collect)
::std::map<
::com::sun::star::uno::Reference< ::com::sun::star::text::XText >,
::std::set< ::rtl::OUString > > *
pUsedMasters;
2000-09-18 11:07:07 -05:00
public:
XMLTextFieldExport( SvXMLExport& rExp,
/// XMLPropertyState for the combined characters field
XMLPropertyState* pCombinedCharState = NULL );
2000-09-18 11:07:07 -05:00
virtual ~XMLTextFieldExport();
/// Export this field and the surrounding span element with the formatting.
2000-09-18 11:07:07 -05:00
/// To be called for every field in the document body.
void ExportField(const ::com::sun::star::uno::Reference <
::com::sun::star::text::XTextField > & rTextField );
/// collect styles (character styles, data styles, ...) for this field
/// (if appropriate).
2001-03-09 07:10:57 -06:00
/// Also collect used field masters (if pUsedMasters is set)
2000-09-18 11:07:07 -05:00
/// to be called for every field during style export.
void ExportFieldAutoStyle(const ::com::sun::star::uno::Reference <
::com::sun::star::text::XTextField > & rTextField );
/// export field declarations.
/// to be called once at beginning of document body.
void ExportFieldDeclarations();
2001-03-09 07:10:57 -06:00
/// export field declarations for fields used in the the particular XText.
/// (Requires that a list of used field declarations has previously been
/// built-up in ExportFieldAutoStyle() )
void ExportFieldDeclarations(
const ::com::sun::star::uno::Reference <
::com::sun::star::text::XText > & rText);
/// export all field declarations, or only those that have been used?
/// Calling this method will reset the list of used field declataions.
void SetExportOnlyUsedFieldDeclarations(
sal_Bool bExportOnlyUsed = sal_True);
// determine element or attribute names
// (public, because they may be useful in related XML export classes)
static const sal_Char* MapPlaceholderType(sal_uInt16 nType);
static const sal_Char* MapTemplateDisplayFormat(sal_Int16 nType);
static const sal_Char* MapChapterDisplayFormat(sal_Int16 nType);
static const sal_Char* MapFilenameDisplayFormat(sal_Int16 nType);
static const sal_Char* MapDocInfoFieldName(enum FieldIdEnum nToken);
static const sal_Char* MapReferenceSource(sal_Int16 nType);
static const sal_Char* MapReferenceType(sal_Int16 nType);
static const sal_Char* MapCountFieldName(sal_Int16 nToken);
static const sal_Char* MapBibliographyFieldName(::rtl::OUString sName);
2001-02-01 12:12:31 -06:00
static const sal_Char* MapMeasureKind(sal_Int16 nKind);
const sal_Char* MapPageNumberName(const ::com::sun::star::uno::Reference<
::com::sun::star::beans::XPropertySet> & xPropSet,
sal_Int32& nOffset); /// also adjust page offset
const sal_Char* MapAuthorFieldName(const ::com::sun::star::uno::Reference <
::com::sun::star::beans::XPropertySet > & xPropSet);
const sal_Char* MapSenderFieldName(const ::com::sun::star::uno::Reference <
::com::sun::star::beans::XPropertySet > & xPropSet);
2000-09-18 11:07:07 -05:00
protected:
SvXMLExport& GetExport() { return rExport; }
/// export a field after <text:span> is already written
void XMLTextFieldExport::ExportFieldHelper(
const ::com::sun::star::uno::Reference<
::com::sun::star::text::XTextField> & rTextField,
const ::com::sun::star::uno::Reference<
::com::sun::star::beans::XPropertySet> & rPropSet,
const ::com::sun::star::uno::Reference<
::com::sun::star::beans::XPropertySet> & rRangePropSet,
enum FieldIdEnum nToken);
2000-09-18 11:07:07 -05:00
/// export an empty element
void ExportElement(const sal_Char* pElementName, /// element name
sal_Bool bAddSpace = sal_False); /// add blanks around
/// element?
/// export an element with string content
void ExportElement(const sal_Char* pElementName, /// element name
const ::rtl::OUString& sContent, /// element content
sal_Bool bAddSpace = sal_False); /// add blanks around
/// element?
/// export a boolean attribute
void ProcessBoolean(
const sal_Char* pXmlName, /// attribute name (namespace text)
sal_Bool bBool, /// attribute value
sal_Bool bDefault); /// attribute default; omit, if attribute differs
/// export an integer attribute
void ProcessInteger(
const sal_Char* pXmlName, /// attribute name (namespace text)
sal_Int32 nNum); /// attribute value
/// export an integer attribute, omit if default
void ProcessInteger(
const sal_Char* pXmlName, /// attribute name (namespace text)
sal_Int32 nNum, /// attribute value
sal_Int32 nDefault); /// default value
/// export a string attribute
void ProcessString(
const sal_Char* pXmlName, /// attribute name (namespace text)
const ::rtl::OUString& sValue, /// attribute value
sal_Bool bOmitEmpty = sal_False, /// omit attribute, if value is empty
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
2000-09-18 11:07:07 -05:00
/// export a string attribute, omit if default
void ProcessString(
const sal_Char* pXmlName, /// attribute name (namespace text)
const ::rtl::OUString& sValue, /// attribute value
const ::rtl::OUString& sDefault, /// default value; omit if equal
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
2000-09-18 11:07:07 -05:00
/// export a string attribute
void ProcessString(
const sal_Char* pXmlName, /// attribute name (namespace text)
const sal_Char* pValue, /// attribute value
sal_Bool bOmitEmpty = sal_False, /// omit attribute, if value is empty
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
2000-09-18 11:07:07 -05:00
/// export a string attribute, omit if default
void ProcessString(
const sal_Char* pXmlName, /// attribute name (namespace text)
const sal_Char* pValue, /// attribute value
const sal_Char* pDefault, /// attribute default
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
2000-09-18 11:07:07 -05:00
/// export a string as a sequence of paragraphs
void ProcessParagraphSequence(
/// string containing the paragraphs
const ::rtl::OUString& sParagraphSequence);
2000-09-18 11:07:07 -05:00
/// export a numbering format (numeric, roman, alphabetic, etc.)
void ProcessNumberingType(
sal_Int16 nNumberingType); /// numbering type key
/// export display attribute (value, formula, none)
void ProcessDisplay(sal_Bool bIsVisible, /// is visible?
sal_Bool bIsCommand, /// is show command/show name?
sal_Bool bDefault = sal_True); /// omit, if default
/// export all data-style related attributes
void ProcessValueAndType(
sal_Bool bIsString, /// do we process a string or a number?
sal_Int32 nFormatKey, /// format key for NumberFormatter; possibly -1
const ::rtl::OUString& sContent, /// string content; possibly invalid
const ::rtl::OUString& sDefault, /// default string
double fValue, /// float content; possibly invalid
sal_Bool bExportValue, /// export value attribute?
sal_Bool bExportValueType, /// export value-type attribute?
sal_Bool bExportStyle, /// export style-sttribute?
sal_Bool bTimeStyle = sal_False); // exporting a time style?
2000-09-18 11:07:07 -05:00
/// export times, dates and durations according to ISO 8601
void ProcessDateTime(
const sal_Char* sXMLName, /// name of attribute
double dValue, /// date/time value
sal_Bool bIsDate, /// export as date (rather than date/time)?
sal_Bool bIsDuration = sal_False, /// export as duration
sal_Bool bOmitDurationIfZero = sal_True, /// omit zero-length durat.
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
2000-09-18 11:07:07 -05:00
/// export a date, time, or duration
void ProcessDateTime(
const sal_Char* sXMLName, /// name of attribute
sal_Int32 nMinutes, /// date/time value in minutes
sal_Bool bIsDate, /// export as date?
sal_Bool bIsDuration, /// export as duration?
sal_Bool bOmitDurationIfZero, /// omit zero-length durations
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
2000-09-18 11:07:07 -05:00
/// export times, dates and durations according to ISO 8601
void ProcessDateTime(
const sal_Char* sXMLName, /// name of attribute
const ::com::sun::star::util::DateTime& rTime, /// date/time value
sal_Bool bIsDate, /// export as date (rather than date/time)?
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
/// export date according to ISO 8601
void ProcessDate(
const sal_Char* sXMLName, /// name of attribute
const ::com::sun::star::util::Date& rTime, /// date value
sal_uInt16 nPrefix = XML_NAMESPACE_TEXT); /// attribute name prefix
/// export all attributes for bibliography data fields
void ProcessBibliographyData(
const ::com::sun::star::uno::Reference <
::com::sun::star::beans::XPropertySet > & rPropertySet);
2000-09-18 11:07:07 -05:00
/// for XDependentTextFields, get PropertySet of FieldMaster
::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet >
GetMasterPropertySet(const ::com::sun::star::uno::Reference <
::com::sun::star::text::XTextField > & rTextField);
/// get PropertySet of (any) DependentTextField for this FieldMaster
sal_Bool GetDependentFieldPropertySet(
const ::com::sun::star::uno::Reference<
::com::sun::star::beans::XPropertySet> & xmaster,
::com::sun::star::uno::Reference<
::com::sun::star::beans::XPropertySet> & xField);
/// get field ID from XTextField (and it's Property-Set)
enum FieldIdEnum GetFieldID(const ::com::sun::star::uno::Reference <
::com::sun::star::text::XTextField > & rTextField,
const ::com::sun::star::uno::Reference <
::com::sun::star::beans::XPropertySet > & xPropSet);
/// get field ID from XTextField service name (and it's PropertySet)
enum FieldIdEnum MapFieldName(const ::rtl::OUString& sFieldName,
const ::com::sun::star::uno::Reference <
::com::sun::star::beans::XPropertySet> & xPropSet);
/// determine, whether field has string or numeric content
sal_Bool IsStringField(sal_uInt16 nFieldType, /// field ID
const ::com::sun::star::uno::Reference <
::com::sun::star::beans::XPropertySet > & xPropSet);
/// explode a field master name into field type and field name
sal_Bool ExplodeFieldMasterName(
const ::rtl::OUString& sMasterName, /// name as returned by SO API
::rtl::OUString& sFieldType, /// out: field type
::rtl::OUString& sVarName); /// out: variable name
/// make reference name for a foot- or endnote
static ::rtl::OUString MakeFootnoteRefName(sal_Int16 nSeqNo);
/// make reference name for a sequence field
static ::rtl::OUString MakeSequenceRefName(sal_Int16 nSeqNo,
const ::rtl::OUString& rSeqName);
2000-09-18 11:07:07 -05:00
private:
// constants
// service names
const ::rtl::OUString sServicePrefix;
const ::rtl::OUString sFieldMasterPrefix;
// property names
const ::rtl::OUString sPropertyContent;
const ::rtl::OUString sPropertyIsFixed;
const ::rtl::OUString sPropertyFullName;
2000-09-18 11:07:07 -05:00
const ::rtl::OUString sPropertyFieldSubType;
const ::rtl::OUString sPropertyHint;
const ::rtl::OUString sPropertyPlaceholder;
const ::rtl::OUString sPropertyPlaceholderType;
const ::rtl::OUString sPropertyIsVisible;
const ::rtl::OUString sPropertyIsShowFormula;
const ::rtl::OUString sPropertyIsInput;
const ::rtl::OUString sPropertyIsExpression;
const ::rtl::OUString sPropertyNumberFormat;
const ::rtl::OUString sPropertyVariableName;
const ::rtl::OUString sPropertySubType;
const ::rtl::OUString sPropertyName;
const ::rtl::OUString sPropertyVariableSubType;
const ::rtl::OUString sPropertyValue;
const ::rtl::OUString sPropertyChapterNumberingLevel;
const ::rtl::OUString sPropertyNumberingSeparator;
const ::rtl::OUString sPropertyNumberingType;
const ::rtl::OUString sPropertyDataBaseName;
const ::rtl::OUString sPropertyDataTableName;
const ::rtl::OUString sPropertyDateTimeValue;
const ::rtl::OUString sPropertyDataColumnName;
const ::rtl::OUString sPropertySetNumber;
const ::rtl::OUString sPropertyIsDataBaseFormat;
const ::rtl::OUString sPropertyUserText;
const ::rtl::OUString sPropertyOffset;
const ::rtl::OUString sPropertyCondition;
const ::rtl::OUString sPropertyDateTime;
const ::rtl::OUString sPropertyTrueContent;
const ::rtl::OUString sPropertyFalseContent;
const ::rtl::OUString sPropertyRevision;
const ::rtl::OUString sPropertyChapterFormat;
const ::rtl::OUString sPropertyFileFormat;
const ::rtl::OUString sPropertyLevel;
const ::rtl::OUString sPropertyIsDate;
const ::rtl::OUString sPropertyAdjust;
const ::rtl::OUString sPropertyOn;
const ::rtl::OUString sPropertyMacro;
const ::rtl::OUString sPropertyReferenceFieldPart;
const ::rtl::OUString sPropertyReferenceFieldType;
const ::rtl::OUString sPropertyReferenceFieldSource;
const ::rtl::OUString sPropertySequenceNumber;
const ::rtl::OUString sPropertySourceName;
const ::rtl::OUString sPropertyIsAutomaticUpdate;
const ::rtl::OUString sPropertyDependentTextFields;
const ::rtl::OUString sPropertyDDECommandType;
const ::rtl::OUString sPropertyDDECommandFile;
const ::rtl::OUString sPropertyDDECommandElement;
const ::rtl::OUString sPropertySequenceValue;
const ::rtl::OUString sPropertyURL;
const ::rtl::OUString sPropertyTargetFrame;
const ::rtl::OUString sPropertyFields;
const ::rtl::OUString sPropertyScriptType;
const ::rtl::OUString sPropertyURLContent;
const ::rtl::OUString sPropertyAuthor;
const ::rtl::OUString sPropertyDate;
2001-02-01 12:12:31 -06:00
const ::rtl::OUString sPropertyMeasureKind;
2001-03-09 07:10:57 -06:00
const ::rtl::OUString sPropertyInstanceName;
const ::rtl::OUString sPropertyIsHidden;
const ::rtl::OUString sPropertyIsConditionTrue;
2000-09-18 11:07:07 -05:00
const ::rtl::OUString sEmpty;
XMLPropertyState* pCombinedCharactersPropertyState;
2000-09-18 11:07:07 -05:00
};
#endif