/* TextRunStyle: Stores (and writes) paragraph/span-style-based information * (e.g.: a paragraph might be bold) that is needed at the head of an OO * document. * * Copyright (C) 2002-2004 William Lachance (william.lachance@sympatico.ca) * Copyright (C) 2004 Net Integration Technologies, Inc. (http://www.net-itech.com) * Copyright (C) 2004 Fridrich Strba (fridrich.strba@bluewin.ch) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library 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 * * For further information visit http://libwpd.sourceforge.net * */ /* "This product is not manufactured, approved, or supported by * Corel Corporation or Corel Corporation Limited." */ #include "FilterInternal.hxx" #include "TextRunStyle.hxx" #include "WriterProperties.hxx" #include "DocumentElement.hxx" #ifdef _MSC_VER #include #endif #include ParagraphStyle::ParagraphStyle(WPXPropertyList *pPropList, const WPXPropertyListVector &xTabStops, const WPXString &sName) : mpPropList(pPropList), mxTabStops(xTabStops), msName(sName) { } ParagraphStyle::~ParagraphStyle() { delete mpPropList; } void ParagraphStyle::write(DocumentHandler *pHandler) const { WRITER_DEBUG_MSG(("Writing a paragraph style..\n")); WPXPropertyList propList; propList.insert("style:name", msName.cstr()); propList.insert("style:family", "paragraph"); propList.insert("style:parent-style-name", (*mpPropList)["style:parent-style-name"]->getStr()); if ((*mpPropList)["style:master-page-name"]) propList.insert("style:master-page-name", (*mpPropList)["style:master-page-name"]->getStr()); pHandler->startElement("style:style", propList); propList.clear(); WPXPropertyList::Iter k((*mpPropList)); for (k.rewind(); k.next(); ) { if (strcmp(k.key(), "style:list-style-name") == 0) propList.insert("style:list-style-name", k()->getStr()); if (strcmp(k.key(), "fo:margin-left") == 0) propList.insert("fo:margin-left", k()->getStr()); if (strcmp(k.key(), "fo:margin-right") == 0) propList.insert("fo:margin-right", k()->getStr()); if (strcmp(k.key(), "fo:text-indent") == 0) propList.insert("fo:text-indent", k()->getStr()); if (strcmp(k.key(), "fo:margin-top") == 0) propList.insert("fo:margin-top", k()->getStr()); if (strcmp(k.key(), "fo:margin-bottom") == 0) propList.insert("fo:margin-bottom", k()->getStr()); if (strcmp(k.key(), "fo:line-height") == 0) propList.insert("fo:line-height", k()->getStr()); if (strcmp(k.key(), "fo:break-before") == 0) propList.insert("fo:break-before", k()->getStr()); if (strcmp(k.key(), "fo:text-align") == 0) propList.insert("fo:text-align", k()->getStr()); if (strcmp(k.key(), "fo:text-align-last") == 0) propList.insert("fo:text-align-last", k()->getStr()); } propList.insert("style:justify-single-word", "false"); pHandler->startElement("style:properties", propList); if (mxTabStops.count() > 0) { TagOpenElement tabListOpen("style:tab-stops"); tabListOpen.write(pHandler); WPXPropertyListVector::Iter i(mxTabStops); for (i.rewind(); i.next();) { TagOpenElement tabStopOpen("style:tab-stop"); WPXPropertyList::Iter j(i()); for (j.rewind(); j.next(); ) { tabStopOpen.addAttribute(j.key(), j()->getStr().cstr()); } tabStopOpen.write(pHandler); pHandler->endElement("style:tab-stop"); } pHandler->endElement("style:tab-stops"); } pHandler->endElement("style:properties"); pHandler->endElement("style:style"); } SpanStyle::SpanStyle(const char *psName, const WPXPropertyList &xPropList) : Style(psName), mPropList(xPropList) { } void SpanStyle::write(DocumentHandler *pHandler) const { WRITER_DEBUG_MSG(("Writing a span style..\n")); WPXPropertyList styleOpenList; styleOpenList.insert("style:name", getName()); styleOpenList.insert("style:family", "text"); pHandler->startElement("style:style", styleOpenList); WPXPropertyList propList(mPropList); if (mPropList["style:font-name"]) { propList.insert("style:font-name-asian", mPropList["style:font-name"]->getStr()); propList.insert("style:font-name-complex", mPropList["style:font-name"]->getStr()); } if (mPropList["fo:font-size"]) { propList.insert("style:font-size-asian", mPropList["fo:font-size"]->getStr()); propList.insert("style:font-size-complex", mPropList["fo:font-size"]->getStr()); } if (mPropList["fo:font-weight"]) { propList.insert("style:font-weight-asian", mPropList["fo:font-weight"]->getStr()); propList.insert("style:font-weight-complex", mPropList["fo:font-weight"]->getStr()); } if (mPropList["fo:font-style"]) { propList.insert("style:font-style-asian", mPropList["fo:font-style"]->getStr()); propList.insert("style:font-style-complex", mPropList["fo:font-style"]->getStr()); } pHandler->startElement("style:properties", propList); pHandler->endElement("style:properties"); pHandler->endElement("style:style"); }