| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| #ifndef _XMLOFF_XMLREDLINEEXPORT_HXX |
| #define _XMLOFF_XMLREDLINEEXPORT_HXX |
| |
| #include <rtl/ustrbuf.hxx> |
| #include <com/sun/star/uno/Reference.h> |
| #include <com/sun/star/uno/Sequence.h> |
| |
| #include <list> |
| #include <map> |
| #include <set> |
| |
| class SvXMLExport; |
| namespace com { namespace sun { namespace star { |
| namespace beans { class XPropertySet; } |
| namespace beans { struct PropertyValue; } |
| namespace text { class XText; } |
| namespace text { class XTextContent; } |
| namespace text { class XTextSection; } |
| } } } |
| namespace rtl { |
| class OUString; |
| class OUStringBuffer; |
| } |
| |
| // store a list of redline properties |
| typedef ::std::list< |
| ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> > ChangesListType; |
| |
| // store a list of redline properties for each XText |
| typedef ::std::map< |
| ::com::sun::star::uno::Reference< ::com::sun::star::text::XText>, |
| ChangesListType* > ChangesMapType; |
| |
| |
| /** |
| * This class handles the export of redline portions. |
| * It is to be called from XMLTextParagraphExport. |
| */ |
| class XMLRedlineExport |
| { |
| const ::rtl::OUString sDelete; |
| const ::rtl::OUString sDeletion; |
| const ::rtl::OUString sFormat; |
| const ::rtl::OUString sFormatChange; |
| const ::rtl::OUString sInsert; |
| const ::rtl::OUString sInsertion; |
| const ::rtl::OUString sIsCollapsed; |
| const ::rtl::OUString sIsStart; |
| const ::rtl::OUString sRedlineAuthor; |
| const ::rtl::OUString sRedlineComment; |
| const ::rtl::OUString sRedlineDateTime; |
| const ::rtl::OUString sRedlineSuccessorData; |
| const ::rtl::OUString sRedlineText; |
| const ::rtl::OUString sRedlineType; |
| const ::rtl::OUString sStyle; |
| const ::rtl::OUString sTextTable; |
| const ::rtl::OUString sUnknownChange; |
| const ::rtl::OUString sStartRedline; |
| const ::rtl::OUString sEndRedline; |
| const ::rtl::OUString sRedlineIdentifier; |
| const ::rtl::OUString sIsInHeaderFooter; |
| const ::rtl::OUString sRedlineProtectionKey; |
| const ::rtl::OUString sRecordChanges; |
| const ::rtl::OUString sMergeLastPara; |
| |
| const ::rtl::OUString sChangePrefix; |
| |
| SvXMLExport& rExport; |
| |
| |
| // handling of change recording: |
| |
| // To support change tracking in headers and footers we need to |
| // write these changes separately. To do this, we record the |
| // changes for headers and footers. For the main document body, we |
| // get the complete list of changes from the document, which |
| // should be much more efficient than recording all of those. |
| |
| ChangesMapType aChangeMap; /// map of recorded changes |
| |
| /// list of current changes; is NULL or points to member of aChangeMap |
| ChangesListType* pCurrentChangesList; |
| |
| |
| public: |
| XMLRedlineExport(SvXMLExport& rExp); |
| |
| ~XMLRedlineExport(); |
| |
| /// export a change |
| void ExportChange( |
| /// PropertySet of RedlinePortion |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet, |
| sal_Bool bAutoStyle); |
| |
| /// export the list of changes (complete list minus recorded changed) |
| void ExportChangesList(sal_Bool bAutoStyles); |
| |
| /// export the list of changes (recorded changes for this XText only) |
| void ExportChangesList( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::text::XText> & rText, |
| sal_Bool bAutoStyles); |
| |
| /// set the current XText for which changes should be recorded. |
| /// An empty XText means: don't record changes |
| void SetCurrentXText( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::text::XText> & rText); |
| |
| /// Do not record changes. |
| /// Same as SetCurrentXText(Reference<XText>) with empty argument. |
| void SetCurrentXText(); |
| |
| /// export redline marks which start or end at start nodes, |
| /// i.e. that include the complete paragraph/table/section |
| void ExportStartOrEndRedline( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet, |
| sal_Bool bStart); /// start or end of text entity (e.g. paragraph)? |
| |
| /// convenience method, calls XPropertySet-version of this method |
| void ExportStartOrEndRedline( |
| /// XTextContent; must also be an XPropertySet |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::text::XTextContent> & rContent, |
| sal_Bool bStart); |
| |
| /// convenience method, calls XPropertySet-version of this method |
| void ExportStartOrEndRedline( |
| /// XTextSection; must also be an XPropertySet |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::text::XTextSection> & rSection, |
| sal_Bool bStart); |
| |
| private: |
| |
| /// export the change mark contained in the text body |
| void ExportChangeInline( |
| /// PropertySet of RedlinePortion |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet); |
| |
| /// export the auto styles used in this change |
| void ExportChangeAutoStyle( |
| /// PropertySet of RedlinePortion |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet); |
| |
| /// export the changes list (<text:tracked-changes>) |
| void ExportChangesListElements(); |
| |
| /// export the auto styles needed by the changes list |
| void ExportChangesListAutoStyles(); |
| |
| /// export the changed-region element |
| void ExportChangedRegion( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet); |
| |
| /// export an change-info element (from a PropertySet) |
| void ExportChangeInfo( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet); |
| |
| /// export an change-info element (from PropertyValues) |
| void ExportChangeInfo( |
| const ::com::sun::star::uno::Sequence< |
| ::com::sun::star::beans::PropertyValue> & rValues); |
| |
| /// convert the change type from API to XML names |
| const ::rtl::OUString ConvertTypeName(const ::rtl::OUString& sApiName); |
| |
| /// Get ID string! |
| const ::rtl::OUString GetRedlineID( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::beans::XPropertySet> & rPropSet); |
| |
| /// write a comment string as sequence of <text:p> elements |
| void WriteComment(const ::rtl::OUString& rComment); |
| }; |
| |
| #endif |