summaryrefslogtreecommitdiff
path: root/xmloff/source/text/txtsecte.cxx
diff options
context:
space:
mode:
authorDaniel Vogelheim <dvo@openoffice.org>2000-11-14 13:42:50 +0000
committerDaniel Vogelheim <dvo@openoffice.org>2000-11-14 13:42:50 +0000
commitc26ca6c062ac2181a6acf5adf18e2a68b0605273 (patch)
treeae4790e4ae8ea6f125fd868d3230954f7f61ad67 /xmloff/source/text/txtsecte.cxx
parentb71e1da56b515e6ad6f69be7edce75c2c0d658ed (diff)
#80284# XML im-/export continued
- changed: section and TOC im-/export restructured to accomodate indices - added: im-/export of all index types (implemented but disabled due to API problems) - changed: auto style Add(), Find() made public on txtparae.hxx - changed: text:section-source-dde into office:dde-source - changed: dde attribute names now use standard terminology
Diffstat (limited to 'xmloff/source/text/txtsecte.cxx')
-rw-r--r--xmloff/source/text/txtsecte.cxx604
1 files changed, 10 insertions, 594 deletions
diff --git a/xmloff/source/text/txtsecte.cxx b/xmloff/source/text/txtsecte.cxx
index 2f8e38c1dca0..0cda39075a4f 100644
--- a/xmloff/source/text/txtsecte.cxx
+++ b/xmloff/source/text/txtsecte.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: txtsecte.cxx,v $
*
- * $Revision: 1.1 $
+ * $Revision: 1.2 $
*
- * last change: $Author: dvo $ $Date: 2000-11-02 15:51:18 $
+ * last change: $Author: dvo $ $Date: 2000-11-14 14:42:50 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -156,6 +156,10 @@
#include "XMLTextNumRuleInfo.hxx"
#endif
+#ifndef _XMLOFF_XMLSECTIONEXPORT_HXX_
+#include "XMLSectionExport.hxx"
+#endif
+
using namespace ::com::sun::star;
using namespace ::com::sun::star::text;
using namespace ::com::sun::star::uno;
@@ -200,7 +204,7 @@ void XMLTextParagraphExport::exportListAndSectionChange(
if (xDocumentIndex.is() && !rPrevSection.is())
{
- exportDocumentIndex(xDocumentIndex, bAutoStyles);
+ pSectionExport->ExportIndexStart(xDocumentIndex, bAutoStyles);
}
}
}
@@ -212,8 +216,7 @@ void XMLTextParagraphExport::exportListAndSectionChange(
{
if ( xNextSection.is() )
{
- Reference<XPropertySet> xPropSet( xNextSection, UNO_QUERY);
- Add( XML_STYLE_FAMILY_TEXT_SECTION, xPropSet );
+ pSectionExport->ExportSectionStart( xNextSection, bAutoStyles );
}
}
else
@@ -260,18 +263,13 @@ void XMLTextParagraphExport::exportListAndSectionChange(
// close all elements of aOld, open all of aNew
while (aOld != aOldStack.rend())
{
- Reference<XNamed> xName(*aOld, UNO_QUERY);
- GetExport().GetDocHandler()->ignorableWhitespace(
- GetExport().sWS );
- GetExport().GetDocHandler()->endElement(sText_Section);
- GetExport().GetDocHandler()->ignorableWhitespace(
- GetExport().sWS );
+ pSectionExport->ExportSectionEnd(*aOld, bAutoStyles);
aOld++;
}
while (aNew != aNewStack.rend())
{
- exportSectionStart(*aNew);
+ pSectionExport->ExportSectionStart(*aNew, bAutoStyles);
aNew++;
}
@@ -288,585 +286,3 @@ void XMLTextParagraphExport::exportListAndSectionChange(
// save old section (old numRule gets saved in calling method
rPrevSection = xNextSection;
}
-
-void XMLTextParagraphExport::exportSectionStart(
- const ::com::sun::star::uno::Reference <
- ::com::sun::star::text::XTextSection > & rSection)
-{
- // any old attributes?
- GetExport().CheckAttrList();
-
- Reference<XNamed> xName(rSection, UNO_QUERY);
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_name,
- xName->getName());
-
- // get XPropertySet for other values
- Reference<XPropertySet> xPropSet(rSection, UNO_QUERY);
- Any aAny;
-
- // style name
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_style_name,
- Find( XML_STYLE_FAMILY_TEXT_SECTION,
- xPropSet, sEmpty ));
-
- // condition and display
- aAny = xPropSet->getPropertyValue(sCondition);
- OUString sCond;
- aAny >>= sCond;
- sal_Char* pDisplay;
- if (sCond.getLength() > 0)
- {
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_condition,
- sCond);
- pDisplay = sXML_condition;
- }
- else
- {
- pDisplay = sXML_none;
- }
- aAny = xPropSet->getPropertyValue(sIsVisible);
- if (! *(sal_Bool*)aAny.getValue())
- {
- GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT, sXML_display,
- pDisplay);
- }
-
- // export element
- GetExport().GetDocHandler()->ignorableWhitespace( GetExport().sWS );
- GetExport().GetDocHandler()->startElement( sText_Section,
- GetExport().GetXAttrList() );
- GetExport().ClearAttrList();
-
- // data source
- // unfortunately, we have to test all relevant strings for non-zero length
- aAny = xPropSet->getPropertyValue(sFileLink);
- SectionFileLink aFileLink;
- aAny >>= aFileLink;
-
- aAny = xPropSet->getPropertyValue(sLinkRegion);
- OUString sRegionName;
- aAny >>= sRegionName;
-
- if ( (aFileLink.FileURL.getLength() > 0) ||
- (aFileLink.FilterName.getLength() > 0) ||
- (sRegionName.getLength() > 0) )
- {
- if (aFileLink.FileURL.getLength() > 0)
- {
- GetExport().AddAttribute(XML_NAMESPACE_XLINK, sXML_href,
- aFileLink.FileURL);
- }
-
- if (aFileLink.FilterName.getLength() > 0)
- {
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_filter_name,
- aFileLink.FilterName);
- }
-
- if (sRegionName.getLength() > 0)
- {
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_section_name,
- sRegionName);
- }
-
- SvXMLElementExport aElem(GetExport(),
- XML_NAMESPACE_TEXT, sXML_section_source,
- sal_True, sal_True);
- }
- else
- {
- // data source DDE
- // unfortunately, we have to test all relevant strings for
- // non-zero length
- aAny = xPropSet->getPropertyValue(sDdeCommandFile);
- OUString sApplication;
- aAny >>= sApplication;
- aAny = xPropSet->getPropertyValue(sDdeCommandType);
- OUString sTopic;
- aAny >>= sTopic;
- aAny = xPropSet->getPropertyValue(sDdeCommandElement);
- OUString sItem;
- aAny >>= sItem;
-
- if ( (sApplication.getLength() > 0) ||
- (sTopic.getLength() > 0) ||
- (sItem.getLength() > 0 ) )
- {
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_dde_application,
- sApplication);
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_dde_topic,
- sTopic);
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_dde_item,
- sItem);
-
- SvXMLElementExport aElem(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_section_source_dde,
- sal_True, sal_True);
- }
- // else: no data source
- }
-}
-
-void XMLTextParagraphExport::exportDocumentIndex(
- Reference<XDocumentIndex> & rIndex,
- sal_Bool bAutoStyles)
-{
- OUString sServiceName = rIndex->getServiceName();
-
- const sal_Char sAPI_ContentIndex[] = "com.sun.star.text.ContentIndex";
-
- if (sServiceName.equalsAsciiL(sAPI_ContentIndex,
- sizeof(sAPI_ContentIndex)-1))
- {
- Reference<XPropertySet> xPropertySet(rIndex, UNO_QUERY);
-
- if (bAutoStyles)
- {
- // treat index as section style
- Add( XML_STYLE_FAMILY_TEXT_SECTION, xPropertySet );
- }
- else
- {
- Any aAny;
-
- // style name
- GetExport().AddAttribute(XML_NAMESPACE_TEXT, sXML_style_name,
- Find( XML_STYLE_FAMILY_TEXT_SECTION,
- xPropertySet, sEmpty ));
-
- // table of content Element
- SvXMLElementExport aElem(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_table_of_content,
- sal_True, sal_True);
-
- {
- // scope for table-of-content-source element
-
- // outline-level (none|1..10)
- aAny = xPropertySet->getPropertyValue(sCreateFromOutline);
- if (*(sal_Bool*)aAny.getValue())
- {
- // outline-level: 1..10
- aAny = xPropertySet->getPropertyValue(sLevel);
- sal_Int16 nLevel;
- aAny >>= nLevel;
-
- OUStringBuffer sBuffer;
- SvXMLUnitConverter::convertNumber(sBuffer,
- (sal_Int32)nLevel);
-
- GetExport().AddAttribute(XML_NAMESPACE_TEXT,
- sXML_outline_level,
- sBuffer.makeStringAndClear());
- }
- else
- {
- // outline-level: none
- GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT,
- sXML_outline_level,
- sXML_none);
- }
-
- // use index marks
- aAny = xPropertySet->getPropertyValue(sCreateFromMarks);
- if (! (*(sal_Bool*)aAny.getValue()))
- {
- GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT,
- sXML_use_index_marks,
- sXML_true);
- }
-
- // document or chapter index?
- aAny = xPropertySet->getPropertyValue(sCreateFromChapter);
- if (*(sal_Bool*)aAny.getValue())
- {
- GetExport().AddAttributeASCII(XML_NAMESPACE_TEXT,
- sXML_index_scope,
- sXML_chapter);
- }
-
- // the TOC source element
- SvXMLElementExport aElem(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_table_of_content_source,
- sal_True, sal_True);
-
- // styles from which to build the index (LevelParagraphStyles)
- aAny = xPropertySet->getPropertyValue(sLevelParagraphStyles);
- Reference<XIndexReplace> xLevelParagraphStyles;
- aAny >>= xLevelParagraphStyles;
-
- // iterate over levels
- sal_Int32 nPLevelCount = xLevelParagraphStyles->getCount();
- for(sal_Int32 nLevel = 0; nLevel < nPLevelCount; nLevel++)
- {
- aAny = xLevelParagraphStyles->getByIndex(nLevel);
- Sequence<OUString> aStyleNames;
- aAny >>= aStyleNames;
-
- // export only if at least one style is contained
- sal_Int32 nNamesCount = aStyleNames.getLength();
- if (nNamesCount > 0)
- {
-
- // level attribute; we count 1..10; API 0..9
- OUStringBuffer sBuf;
- sal_Int32 nLevelPlusOne = nLevel + 1;
- SvXMLUnitConverter::convertNumber(sBuf, nLevelPlusOne);
- GetExport().AddAttribute(XML_NAMESPACE_TEXT,
- sXML_outline_level,
- sBuf.makeStringAndClear());
-
- // source styles element
- SvXMLElementExport aParaStyles(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_index_source_styles,
- sal_True, sal_True);
-
- // iterate over styles in this level
- for(sal_Int32 nName = 0; nName < nNamesCount; nName++)
- {
- // stylename attribute
- GetExport().AddAttribute(XML_NAMESPACE_TEXT,
- sXML_style_name,
- aStyleNames[nName]);
-
- // element
- SvXMLElementExport aParaStyle(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_index_source_style,
- sal_True, sal_False);
- }
- }
- }
-
- // scope for title template
- {
- // header style name
- aAny = xPropertySet->getPropertyValue(sParaStyleHeading);
- OUString sStyleName;
- aAny >>= sStyleName;
- GetExport().AddAttribute(XML_NAMESPACE_TEXT,
- sXML_style_name,
- sStyleName);
-
- // title template
- SvXMLElementExport aHeaderTemplate(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_index_title_template,
- sal_True, sal_False);
-
- // title as element content
- aAny = xPropertySet->getPropertyValue(sTitle);
- OUString sTitleString;
- aAny >>= sTitleString;
- GetExport().GetDocHandler()->characters(sTitleString);
- }
-
- // export level templates
- aAny = xPropertySet->getPropertyValue(sLevelFormat);
- Reference<XIndexReplace> xLevelTemplates;
- aAny >>= xLevelTemplates;
-
- // iterate over level formats;
- // skip element 0 (empty template for title)
- sal_Int32 nLevelCount = xLevelTemplates->getCount();
- for(sal_Int32 i = 1; i<nLevelCount; i++)
- {
- // level number
- OUStringBuffer sBuffer;
- SvXMLUnitConverter::convertNumber(sBuffer, i);
- OUString sNumber = sBuffer.makeStringAndClear();
-
- GetExport().AddAttribute(XML_NAMESPACE_TEXT,
- sXML_outline_level,
- sNumber);
-
- // style name
- sBuffer.append(sParaStyleLevel);
- sBuffer.append(i);
- aAny = xPropertySet->getPropertyValue(
- sBuffer.makeStringAndClear());
- OUString sLevelStyle;
- aAny >>= sLevelStyle;
- GetExport().AddAttribute(XML_NAMESPACE_TEXT,
- sXML_style_name,
- sLevelStyle);
-
- // template element
- SvXMLElementExport aLevelTemplate(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_index_entry_template,
- sal_True, sal_True);
-
- // get sequence
- Sequence<PropertyValues> aTemplateSequence;
- aAny = xLevelTemplates->getByIndex(i);
- aAny >>= aTemplateSequence;
-
- // export sequence
- sal_Int32 nTemplateCount = aTemplateSequence.getLength();
- for(sal_Int32 nTemplateNo = 0;
- nTemplateNo < nTemplateCount;
- nTemplateNo++)
- {
- exportIndexTemplateElement(
- aTemplateSequence[nTemplateNo]);
- }
- }
- }
-
- {
- SvXMLElementExport aIndexBody(GetExport(),
- XML_NAMESPACE_TEXT,
- sXML_table_of_content_body,
- sal_True, sal_True);
- }
- }
- }
-}
-
-
-enum TemplateTypeEnum
-{
- TOK_TTYPE_ENTRY_NUMBER,
- TOK_TTYPE_ENTRY_TEXT,
- TOK_TTYPE_TAB_STOP,
- TOK_TTYPE_TEXT,
- TOK_TTYPE_PAGE_NUMBER,
- TOK_TTYPE_CHAPTER_INFO,
- TOK_TTYPE_HYPERLINK_START,
- TOK_TTYPE_HYPERLINK_END,
- TOK_TTYPE_BIBLIOGRAPHY,
- TOK_TTYPE_INVALID
-};
-
-enum TemplateParamEnum
-{
- TOK_TPARAM_TOKEN_TYPE,
- TOK_TPARAM_CHAR_STYLE,
- TOK_TPARAM_TAB_RIGHT_ALIGNED,
- TOK_TPARAM_TAB_POSITION,
- TOK_TPARAM_TAB_FILL_CHAR,
- TOK_TPARAM_TEXT,
- TOK_TPARAM_CHAPTER_FORMAT
-};
-
-SvXMLEnumMapEntry __READONLY_DATA aTemplateTypeMap[] =
-{
- { "TokenEntryNumber", TOK_TTYPE_ENTRY_NUMBER },
- { "TokenEntryText", TOK_TTYPE_ENTRY_TEXT },
- { "TokenTabStop", TOK_TTYPE_TAB_STOP },
- { "TokenText", TOK_TTYPE_TEXT },
- { "TokenPageNumber", TOK_TTYPE_PAGE_NUMBER },
- { "TokenChapterInfo", TOK_TTYPE_CHAPTER_INFO },
- { "TokenHyperlinkStart", TOK_TTYPE_HYPERLINK_START },
- { "TokenHyperlinkEnd", TOK_TTYPE_HYPERLINK_END },
- { "TokenBibliogaphyDataField", TOK_TTYPE_BIBLIOGRAPHY },
- { NULL, NULL }
-};
-
-SvXMLEnumMapEntry __READONLY_DATA aTemplateParamMap[] =
-{
- { "TokenType", TOK_TPARAM_TOKEN_TYPE },
- { "CharacterStyleName", TOK_TPARAM_CHAR_STYLE },
- { "TabStopRightAligned", TOK_TPARAM_TAB_RIGHT_ALIGNED },
- { "TabStopPosition", TOK_TPARAM_TAB_POSITION },
- { "TabStopFillCharacter", TOK_TPARAM_TAB_FILL_CHAR },
- { "Text", TOK_TPARAM_TEXT },
- { "ChapterFormat", TOK_TPARAM_CHAPTER_FORMAT },
- { NULL, NULL }
-};
-
-void XMLTextParagraphExport::exportIndexTemplateElement(
- Sequence<PropertyValue> & rValues)
-{
-
- // variables for template values
-
- // char style
- OUString sCharStyle;
- sal_Bool bCharStyleOK = sal_False;
-
- // text
- OUString sText;
- sal_Bool bTextOK = sal_False;
-
- // tab position
- sal_Bool bRightAligned = sal_False;
- sal_Bool bRightAlignedOK = sal_False;
-
- // tab position
- sal_Int32 nTabPosition = 0;
- sal_Bool bTabPositionOK = sal_False;
-
- // fill character
- OUString sFillChar;
- sal_Bool bFillCharOK = sal_False;
-
- // chapter format
- sal_Int16 nChapterFormat;
- sal_Bool bChapterFormatOK = sal_False;
-
-
- // token type
- enum TemplateTypeEnum nTokenType = TOK_TTYPE_INVALID;
-
- sal_Int32 nCount = rValues.getLength();
- for(sal_Int32 i = 0; i<nCount; i++)
- {
- sal_uInt16 nToken;
- if ( SvXMLUnitConverter::convertEnum( nToken, rValues[i].Name,
- aTemplateParamMap ) )
- {
- // Only use direct and default values.
- // Wrong. no property states, so ignore.
- // if ( (beans::PropertyState_DIRECT_VALUE == rValues[i].State) ||
- // (beans::PropertyState_DEFAULT_VALUE == rValues[i].State) )
-
- switch (nToken)
- {
- case TOK_TPARAM_TOKEN_TYPE:
- {
- sal_uInt16 nTmp;
- OUString sVal;
- rValues[i].Value >>= sVal;
- if (SvXMLUnitConverter::convertEnum( nTmp, sVal,
- aTemplateTypeMap))
- {
- nTokenType = (enum TemplateTypeEnum)nTmp;
- }
- break;
- }
-
- case TOK_TPARAM_CHAR_STYLE:
- // only valid, if not empty
- rValues[i].Value >>= sCharStyle;
- bCharStyleOK = sCharStyle.getLength() > 0;
- break;
-
- case TOK_TPARAM_TEXT:
- rValues[i].Value >>= sText;
- bTextOK = sal_True;
- break;
-
- case TOK_TPARAM_TAB_RIGHT_ALIGNED:
- bRightAligned =
- *(sal_Bool *)rValues[i].Value.getValue();
- bRightAlignedOK = sal_True;
- break;
-
- case TOK_TPARAM_TAB_POSITION:
- rValues[i].Value >>= nTabPosition;
- bTabPositionOK = sal_True;
- break;
-
- case TOK_TPARAM_TAB_FILL_CHAR:
- rValues[i].Value >>= sFillChar;
- bFillCharOK = sal_True;
- break;
-
- case TOK_TPARAM_CHAPTER_FORMAT:
- rValues[i].Value >>= nChapterFormat;
- bChapterFormatOK = sal_True;
- break;
- }
- }
- }
-
- // convert type to token (and check validity) ...
- sal_Char* pElement = NULL;
- switch(nTokenType)
- {
- case TOK_TTYPE_ENTRY_TEXT:
- pElement = sXML_index_entry_text;
- break;
- case TOK_TTYPE_TAB_STOP:
- // test validity
- pElement = ( bRightAligned || bTabPositionOK || bFillCharOK )
- ? sXML_index_entry_tab_stop : NULL;
- break;
- case TOK_TTYPE_TEXT:
- // test validity
- pElement = bTextOK ? sXML_index_entry_span : NULL;
- break;
- case TOK_TTYPE_PAGE_NUMBER:
- pElement = sXML_index_entry_page_number;
- break;
- case TOK_TTYPE_CHAPTER_INFO: // keyword index
- case TOK_TTYPE_ENTRY_NUMBER: // table of content
- // sanitize format: both as chapter fields
- pElement = sXML_index_entry_chapter;
- break;
- case TOK_TTYPE_HYPERLINK_START:
- pElement = sXML_index_entry_link_start;
- break;
- case TOK_TTYPE_HYPERLINK_END:
- pElement = sXML_index_entry_link_end;
- break;
- case TOK_TTYPE_BIBLIOGRAPHY:
- pElement = sXML_index_entry_bibliography;
- default:
- ; // unknown/unimplemented template
- break;
- }
-
- // ... and write Element
- if (pElement != NULL)
- {
- // character style (for most templates)
- if (bCharStyleOK)
- {
- switch (nTokenType)
- {
- case TOK_TTYPE_ENTRY_TEXT:
- case TOK_TTYPE_TEXT:
- case TOK_TTYPE_PAGE_NUMBER:
- case TOK_TTYPE_ENTRY_NUMBER:
- case TOK_TTYPE_HYPERLINK_START:
- case TOK_TTYPE_HYPERLINK_END:
- GetExport().AddAttribute(XML_NAMESPACE_TEXT,
- sXML_style_name, sCharStyle);
- break;
- default:
- ; // nothing: no character style
- break;
- }
- }
-
- if (TOK_TTYPE_TAB_STOP == nTokenType)
- {
- // tab type
- GetExport().AddAttributeASCII(XML_NAMESPACE_STYLE,
- sXML_type,
- bRightAligned ? sXML_right : sXML_left);
-
- if (! bRightAligned)
- {
- // position for left tabs (convert to measure)
- OUStringBuffer sBuf;
- GetExport().GetMM100UnitConverter().convertMeasure(sBuf,
- nTabPosition);
- GetExport().AddAttribute(XML_NAMESPACE_STYLE,
- sXML_position,
- sBuf.makeStringAndClear());
- }
-
- // fill char ("leader char")
- GetExport().AddAttribute(XML_NAMESPACE_STYLE, sXML_leader_char,
- sFillChar);
- }
-
- // export template
- SvXMLElementExport aTemplateElement(GetExport(), XML_NAMESPACE_TEXT,
- pElement, sal_True, sal_False);
-
- // entry text or span element: write text
- if (TOK_TTYPE_TEXT == nTokenType)
- {
- GetExport().GetDocHandler()->characters(sText);
- }
- }
-}