diff options
author | Daniel Vogelheim <dvo@openoffice.org> | 2000-11-14 13:42:50 +0000 |
---|---|---|
committer | Daniel Vogelheim <dvo@openoffice.org> | 2000-11-14 13:42:50 +0000 |
commit | c26ca6c062ac2181a6acf5adf18e2a68b0605273 (patch) | |
tree | ae4790e4ae8ea6f125fd868d3230954f7f61ad67 /xmloff/source/text/txtsecte.cxx | |
parent | b71e1da56b515e6ad6f69be7edce75c2c0d658ed (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.cxx | 604 |
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); - } - } -} |