1*ddde725dSArmin Le Grand /************************************************************** 2*ddde725dSArmin Le Grand * 3*ddde725dSArmin Le Grand * Licensed to the Apache Software Foundation (ASF) under one 4*ddde725dSArmin Le Grand * or more contributor license agreements. See the NOTICE file 5*ddde725dSArmin Le Grand * distributed with this work for additional information 6*ddde725dSArmin Le Grand * regarding copyright ownership. The ASF licenses this file 7*ddde725dSArmin Le Grand * to you under the Apache License, Version 2.0 (the 8*ddde725dSArmin Le Grand * "License"); you may not use this file except in compliance 9*ddde725dSArmin Le Grand * with the License. You may obtain a copy of the License at 10*ddde725dSArmin Le Grand * 11*ddde725dSArmin Le Grand * http://www.apache.org/licenses/LICENSE-2.0 12*ddde725dSArmin Le Grand * 13*ddde725dSArmin Le Grand * Unless required by applicable law or agreed to in writing, 14*ddde725dSArmin Le Grand * software distributed under the License is distributed on an 15*ddde725dSArmin Le Grand * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ddde725dSArmin Le Grand * KIND, either express or implied. See the License for the 17*ddde725dSArmin Le Grand * specific language governing permissions and limitations 18*ddde725dSArmin Le Grand * under the License. 19*ddde725dSArmin Le Grand * 20*ddde725dSArmin Le Grand *************************************************************/ 21*ddde725dSArmin Le Grand 22*ddde725dSArmin Le Grand // MARKER(update_precomp.py): autogen include statement, do not remove 23*ddde725dSArmin Le Grand #include "precompiled_svgio.hxx" 24*ddde725dSArmin Le Grand 25*ddde725dSArmin Le Grand #include <svgio/svgreader/svgstylenode.hxx> 26*ddde725dSArmin Le Grand #include <svgio/svgreader/svgdocument.hxx> 27*ddde725dSArmin Le Grand 28*ddde725dSArmin Le Grand ////////////////////////////////////////////////////////////////////////////// 29*ddde725dSArmin Le Grand 30*ddde725dSArmin Le Grand namespace svgio 31*ddde725dSArmin Le Grand { 32*ddde725dSArmin Le Grand namespace svgreader 33*ddde725dSArmin Le Grand { 34*ddde725dSArmin Le Grand SvgStyleNode::SvgStyleNode( 35*ddde725dSArmin Le Grand SvgDocument& rDocument, 36*ddde725dSArmin Le Grand SvgNode* pParent) 37*ddde725dSArmin Le Grand : SvgNode(SVGTokenStyle, rDocument, pParent), 38*ddde725dSArmin Le Grand maSvgStyleAttributes(), 39*ddde725dSArmin Le Grand mbTextCss(false) 40*ddde725dSArmin Le Grand { 41*ddde725dSArmin Le Grand } 42*ddde725dSArmin Le Grand 43*ddde725dSArmin Le Grand SvgStyleNode::~SvgStyleNode() 44*ddde725dSArmin Le Grand { 45*ddde725dSArmin Le Grand while(!maSvgStyleAttributes.empty()) 46*ddde725dSArmin Le Grand { 47*ddde725dSArmin Le Grand delete *(maSvgStyleAttributes.end() - 1); 48*ddde725dSArmin Le Grand maSvgStyleAttributes.pop_back(); 49*ddde725dSArmin Le Grand } 50*ddde725dSArmin Le Grand } 51*ddde725dSArmin Le Grand 52*ddde725dSArmin Le Grand void SvgStyleNode::parseAttribute(const rtl::OUString& rTokenName, SVGToken aSVGToken, const rtl::OUString& aContent) 53*ddde725dSArmin Le Grand { 54*ddde725dSArmin Le Grand // call parent 55*ddde725dSArmin Le Grand SvgNode::parseAttribute(rTokenName, aSVGToken, aContent); 56*ddde725dSArmin Le Grand 57*ddde725dSArmin Le Grand // parse own 58*ddde725dSArmin Le Grand switch(aSVGToken) 59*ddde725dSArmin Le Grand { 60*ddde725dSArmin Le Grand case SVGTokenType: 61*ddde725dSArmin Le Grand { 62*ddde725dSArmin Le Grand if(aContent.getLength()) 63*ddde725dSArmin Le Grand { 64*ddde725dSArmin Le Grand static rtl::OUString aStrTextCss(rtl::OUString::createFromAscii("text/css")); 65*ddde725dSArmin Le Grand 66*ddde725dSArmin Le Grand if(aContent.match(aStrTextCss)) 67*ddde725dSArmin Le Grand { 68*ddde725dSArmin Le Grand setTextCss(true); 69*ddde725dSArmin Le Grand } 70*ddde725dSArmin Le Grand } 71*ddde725dSArmin Le Grand break; 72*ddde725dSArmin Le Grand } 73*ddde725dSArmin Le Grand } 74*ddde725dSArmin Le Grand } 75*ddde725dSArmin Le Grand 76*ddde725dSArmin Le Grand void SvgStyleNode::addCssStyleSheet(const rtl::OUString& aContent) 77*ddde725dSArmin Le Grand { 78*ddde725dSArmin Le Grand const sal_Int32 nLen(aContent.getLength()); 79*ddde725dSArmin Le Grand 80*ddde725dSArmin Le Grand if(nLen) 81*ddde725dSArmin Le Grand { 82*ddde725dSArmin Le Grand sal_Int32 nPos(0); 83*ddde725dSArmin Le Grand rtl::OUStringBuffer aTokenValue; 84*ddde725dSArmin Le Grand 85*ddde725dSArmin Le Grand skip_char(aContent, sal_Unicode(' '), sal_Unicode('#'), nPos, nLen); 86*ddde725dSArmin Le Grand copyToLimiter(aContent, sal_Unicode('{'), nPos, aTokenValue, nLen); 87*ddde725dSArmin Le Grand const rtl::OUString aStyleName = aTokenValue.makeStringAndClear().trim(); 88*ddde725dSArmin Le Grand 89*ddde725dSArmin Le Grand if(aStyleName.getLength()) 90*ddde725dSArmin Le Grand { 91*ddde725dSArmin Le Grand skip_char(aContent, sal_Unicode(' '), sal_Unicode('{'), nPos, nLen); 92*ddde725dSArmin Le Grand copyToLimiter(aContent, sal_Unicode('}'), nPos, aTokenValue, nLen); 93*ddde725dSArmin Le Grand const rtl::OUString aStyleContent = aTokenValue.makeStringAndClear().trim(); 94*ddde725dSArmin Le Grand 95*ddde725dSArmin Le Grand if(aStyleContent.getLength()) 96*ddde725dSArmin Le Grand { 97*ddde725dSArmin Le Grand // create new style 98*ddde725dSArmin Le Grand SvgStyleAttributes* pNewStyle = new SvgStyleAttributes(*this); 99*ddde725dSArmin Le Grand maSvgStyleAttributes.push_back(pNewStyle); 100*ddde725dSArmin Le Grand 101*ddde725dSArmin Le Grand // fill with content 102*ddde725dSArmin Le Grand pNewStyle->readStyle(aStyleContent); 103*ddde725dSArmin Le Grand 104*ddde725dSArmin Le Grand // register new style at document 105*ddde725dSArmin Le Grand const_cast< SvgDocument& >(getDocument()).addSvgStyleAttributesToMapper(aStyleName, *pNewStyle); 106*ddde725dSArmin Le Grand } 107*ddde725dSArmin Le Grand } 108*ddde725dSArmin Le Grand } 109*ddde725dSArmin Le Grand } 110*ddde725dSArmin Le Grand 111*ddde725dSArmin Le Grand } // end of namespace svgreader 112*ddde725dSArmin Le Grand } // end of namespace svgio 113*ddde725dSArmin Le Grand 114*ddde725dSArmin Le Grand ////////////////////////////////////////////////////////////////////////////// 115*ddde725dSArmin Le Grand // eof 116