diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-08-24 12:49:20 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-08-24 17:16:57 -0400 |
commit | 3e1bc81ad888cab1e31382f5a4faa3d2f0373577 (patch) | |
tree | 8bd6ec31c8e7ff9047b4dfa86275b18fcad3828c /sc | |
parent | 9ae7d6762b81adfdbd87034652cb2d4550a6dcf8 (diff) |
Make this a separate function.
Change-Id: I387470b42e967dd549b5bcfc418e9e566d2ccecc
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/filter/xml/xmlexprt.cxx | 386 |
1 files changed, 198 insertions, 188 deletions
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx index 28708bafbfec..b94ccc245fe8 100644 --- a/sc/source/filter/xml/xmlexprt.cxx +++ b/sc/source/filter/xml/xmlexprt.cxx @@ -1111,234 +1111,244 @@ void ScXMLExport::ExportExternalRefCacheStyles() } } -void ScXMLExport::ExportCellTextAutoStyles(sal_Int32 nTable) -{ - if (!ValidTab(nTable)) - return; +namespace { - UniReference<XMLPropertySetMapper> xMapper = GetTextParagraphExport()->GetTextPropMapper()->getPropertySetMapper(); +void toXMLPropertyStates( + std::vector<XMLPropertyState>& rPropStates, const std::vector<const SfxPoolItem*>& rSecAttrs, + const UniReference<XMLPropertySetMapper>& xMapper, const ScXMLEditAttributeMap& rAttrMap ) +{ sal_Int32 nEntryCount = xMapper->GetEntryCount(); - UniReference<SvXMLAutoStylePoolP> xStylePool = GetAutoStylePool(); - const ScXMLEditAttributeMap& rAttrMap = GetEditAttributeMap(); - - sc::EditTextIterator aIter(*pDoc, nTable); - sal_Int32 nCellCount = 0; - for (const EditTextObject* pEdit = aIter.first(); pEdit; pEdit = aIter.next(), ++nCellCount) + rPropStates.reserve(rSecAttrs.size()); + std::vector<const SfxPoolItem*>::const_iterator it = rSecAttrs.begin(), itEnd = rSecAttrs.end(); + for (; it != itEnd; ++it) { - std::vector<editeng::SectionAttribute> aAttrs; - pEdit->GetAllSectionAttributes(aAttrs); - if (aAttrs.empty()) + const SfxPoolItem* p = *it; + const ScXMLEditAttributeMap::Entry* pEntry = rAttrMap.getEntryByItemID(p->Which()); + if (!pEntry) continue; - std::vector<editeng::SectionAttribute>::const_iterator itSec = aAttrs.begin(), itSecEnd = aAttrs.end(); - for (; itSec != itSecEnd; ++itSec) - { - const std::vector<const SfxPoolItem*>& rSecAttrs = itSec->maAttributes; - if (rSecAttrs.empty()) - // No formats applied to this section. Skip it. - continue; + sal_Int32 nIndex = xMapper->GetEntryIndex( + pEntry->nmXMLNS, OUString::createFromAscii(pEntry->mpXMLName), 0); - std::vector<XMLPropertyState> aPropStates; - aPropStates.reserve(rSecAttrs.size()); - std::vector<const SfxPoolItem*>::const_iterator it = rSecAttrs.begin(), itEnd = rSecAttrs.end(); - for (; it != itEnd; ++it) + if (nIndex == -1 || nIndex >= nEntryCount) + continue; + + uno::Any aAny; + switch (p->Which()) + { + case EE_CHAR_FONTINFO: + case EE_CHAR_FONTINFO_CJK: + case EE_CHAR_FONTINFO_CTL: { - const SfxPoolItem* p = *it; - const ScXMLEditAttributeMap::Entry* pEntry = rAttrMap.getEntryByItemID(p->Which()); - if (!pEntry) + if (!static_cast<const SvxFontItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) continue; - sal_Int32 nIndex = xMapper->GetEntryIndex( - pEntry->nmXMLNS, OUString::createFromAscii(pEntry->mpXMLName), 0); + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_WEIGHT: + case EE_CHAR_WEIGHT_CJK: + case EE_CHAR_WEIGHT_CTL: + { + if (!static_cast<const SvxWeightItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - if (nIndex == -1 || nIndex >= nEntryCount) + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_FONTHEIGHT: + case EE_CHAR_FONTHEIGHT_CJK: + case EE_CHAR_FONTHEIGHT_CTL: + { + if (!static_cast<const SvxFontHeightItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) continue; - uno::Any aAny; - switch (p->Which()) - { - case EE_CHAR_FONTINFO: - case EE_CHAR_FONTINFO_CJK: - case EE_CHAR_FONTINFO_CTL: - { - if (!static_cast<const SvxFontItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_ITALIC: + case EE_CHAR_ITALIC_CJK: + case EE_CHAR_ITALIC_CTL: + { + if (!static_cast<const SvxPostureItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_UNDERLINE: + { + // Underline attribute needs to export multiple entries. + sal_Int32 nIndexStyle = xMapper->GetEntryIndex(XML_NAMESPACE_STYLE, "text-underline-style", 0); + if (nIndexStyle == -1 || nIndexStyle > nEntryCount) break; - case EE_CHAR_WEIGHT: - case EE_CHAR_WEIGHT_CJK: - case EE_CHAR_WEIGHT_CTL: - { - if (!static_cast<const SvxWeightItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } + sal_Int32 nIndexWidth = xMapper->GetEntryIndex(XML_NAMESPACE_STYLE, "text-underline-width", 0); + if (nIndexWidth == -1 || nIndexWidth > nEntryCount) break; - case EE_CHAR_FONTHEIGHT: - case EE_CHAR_FONTHEIGHT_CJK: - case EE_CHAR_FONTHEIGHT_CTL: - { - if (!static_cast<const SvxFontHeightItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } + sal_Int32 nIndexColor = xMapper->FindEntryIndex("CharUnderlineColor", XML_NAMESPACE_STYLE, "text-underline-color"); + if (nIndexColor == -1 || nIndexColor > nEntryCount) break; - case EE_CHAR_ITALIC: - case EE_CHAR_ITALIC_CJK: - case EE_CHAR_ITALIC_CTL: - { - if (!static_cast<const SvxPostureItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } + sal_Int32 nIndexHasColor = xMapper->FindEntryIndex("CharUnderlineHasColor", XML_NAMESPACE_STYLE, "text-underline-color"); + if (nIndexHasColor == -1 || nIndexHasColor > nEntryCount) break; - case EE_CHAR_UNDERLINE: - { - // Underline attribute needs to export multiple entries. - sal_Int32 nIndexStyle = xMapper->GetEntryIndex(XML_NAMESPACE_STYLE, "text-underline-style", 0); - if (nIndexStyle == -1 || nIndexStyle > nEntryCount) - break; - sal_Int32 nIndexWidth = xMapper->GetEntryIndex(XML_NAMESPACE_STYLE, "text-underline-width", 0); - if (nIndexWidth == -1 || nIndexWidth > nEntryCount) - break; + const SvxUnderlineItem* pUL = static_cast<const SvxUnderlineItem*>(p); + pUL->QueryValue(aAny, MID_TL_STYLE); + rPropStates.push_back(XMLPropertyState(nIndexStyle, aAny)); + rPropStates.push_back(XMLPropertyState(nIndexWidth, aAny)); - sal_Int32 nIndexColor = xMapper->FindEntryIndex("CharUnderlineColor", XML_NAMESPACE_STYLE, "text-underline-color"); - if (nIndexColor == -1 || nIndexColor > nEntryCount) - break; + pUL->QueryValue(aAny, MID_TL_COLOR); + rPropStates.push_back(XMLPropertyState(nIndexColor, aAny)); - sal_Int32 nIndexHasColor = xMapper->FindEntryIndex("CharUnderlineHasColor", XML_NAMESPACE_STYLE, "text-underline-color"); - if (nIndexHasColor == -1 || nIndexHasColor > nEntryCount) - break; + pUL->QueryValue(aAny, MID_TL_HASCOLOR); + rPropStates.push_back(XMLPropertyState(nIndexHasColor, aAny)); + } + break; + case EE_CHAR_OVERLINE: + { + if (!static_cast<const SvxOverlineItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - const SvxUnderlineItem* pUL = static_cast<const SvxUnderlineItem*>(p); - pUL->QueryValue(aAny, MID_TL_STYLE); - aPropStates.push_back(XMLPropertyState(nIndexStyle, aAny)); - aPropStates.push_back(XMLPropertyState(nIndexWidth, aAny)); + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_COLOR: + { + if (!static_cast<const SvxColorItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - pUL->QueryValue(aAny, MID_TL_COLOR); - aPropStates.push_back(XMLPropertyState(nIndexColor, aAny)); + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_WLM: + { + if (!static_cast<const SvxWordLineModeItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - pUL->QueryValue(aAny, MID_TL_HASCOLOR); - aPropStates.push_back(XMLPropertyState(nIndexHasColor, aAny)); - } - break; - case EE_CHAR_OVERLINE: - { - if (!static_cast<const SvxOverlineItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_STRIKEOUT: + { + if (!static_cast<const SvxCrossedOutItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_COLOR: - { - if (!static_cast<const SvxColorItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_RELIEF: + { + if (!static_cast<const SvxCharReliefItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_WLM: - { - if (!static_cast<const SvxWordLineModeItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_OUTLINE: + { + if (!static_cast<const SvxContourItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_STRIKEOUT: - { - if (!static_cast<const SvxCrossedOutItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_SHADOW: + { + if (!static_cast<const SvxShadowedItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_RELIEF: - { - if (!static_cast<const SvxCharReliefItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_KERNING: + { + if (!static_cast<const SvxKerningItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_OUTLINE: - { - if (!static_cast<const SvxContourItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_PAIRKERNING: + { + if (!static_cast<const SvxAutoKernItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_SHADOW: - { - if (!static_cast<const SvxShadowedItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_FONTWIDTH: + { + if (!static_cast<const SvxCharScaleWidthItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_KERNING: - { - if (!static_cast<const SvxKerningItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_ESCAPEMENT: + { + if (!static_cast<const SvxEscapementItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_PAIRKERNING: - { - if (!static_cast<const SvxAutoKernItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_EMPHASISMARK: + { + if (!static_cast<const SvxEmphasisMarkItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_FONTWIDTH: - { - if (!static_cast<const SvxCharScaleWidthItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + case EE_CHAR_LANGUAGE: + case EE_CHAR_LANGUAGE_CJK: + case EE_CHAR_LANGUAGE_CTL: + { + if (!static_cast<const SvxLanguageItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) + continue; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_ESCAPEMENT: - { - if (!static_cast<const SvxEscapementItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; + rPropStates.push_back(XMLPropertyState(nIndex, aAny)); + } + break; + default: + continue; + } + } +} - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_EMPHASISMARK: - { - if (!static_cast<const SvxEmphasisMarkItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; +} - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - case EE_CHAR_LANGUAGE: - case EE_CHAR_LANGUAGE_CJK: - case EE_CHAR_LANGUAGE_CTL: - { - if (!static_cast<const SvxLanguageItem*>(p)->QueryValue(aAny, pEntry->mnFlag)) - continue; +void ScXMLExport::ExportCellTextAutoStyles(sal_Int32 nTable) +{ + if (!ValidTab(nTable)) + return; - aPropStates.push_back(XMLPropertyState(nIndex, aAny)); - } - break; - default: - continue; - } - } + UniReference<XMLPropertySetMapper> xMapper = GetTextParagraphExport()->GetTextPropMapper()->getPropertySetMapper(); + UniReference<SvXMLAutoStylePoolP> xStylePool = GetAutoStylePool(); + const ScXMLEditAttributeMap& rAttrMap = GetEditAttributeMap(); + + sc::EditTextIterator aIter(*pDoc, nTable); + sal_Int32 nCellCount = 0; + for (const EditTextObject* pEdit = aIter.first(); pEdit; pEdit = aIter.next(), ++nCellCount) + { + std::vector<editeng::SectionAttribute> aAttrs; + pEdit->GetAllSectionAttributes(aAttrs); + if (aAttrs.empty()) + continue; + std::vector<editeng::SectionAttribute>::const_iterator itSec = aAttrs.begin(), itSecEnd = aAttrs.end(); + for (; itSec != itSecEnd; ++itSec) + { + const std::vector<const SfxPoolItem*>& rSecAttrs = itSec->maAttributes; + if (rSecAttrs.empty()) + // No formats applied to this section. Skip it. + continue; + + std::vector<XMLPropertyState> aPropStates; + toXMLPropertyStates(aPropStates, rSecAttrs, xMapper, rAttrMap); if (!aPropStates.empty()) xStylePool->Add(XML_STYLE_FAMILY_TEXT_TEXT, OUString(), aPropStates, false); } |