1/* 2 * Copyright (C) 2009 Alex Milowski (alex@milowski.com). All rights reserved. 3 * Copyright (C) 2010 Apple Inc. All rights reserved. 4 * Copyright (C) 2010 François Sausset (sausset@gmail.com). All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#include "config.h" 29 30#if ENABLE(MATHML) 31 32#include "MathMLElement.h" 33 34#include "MathMLNames.h" 35#include "RenderObject.h" 36#include "RenderTableCell.h" 37 38namespace WebCore { 39 40using namespace MathMLNames; 41 42MathMLElement::MathMLElement(const QualifiedName& tagName, Document* document) 43 : StyledElement(tagName, document, CreateStyledElement) 44{ 45} 46 47PassRefPtr<MathMLElement> MathMLElement::create(const QualifiedName& tagName, Document* document) 48{ 49 return adoptRef(new MathMLElement(tagName, document)); 50} 51 52int MathMLElement::colSpan() const 53{ 54 if (!hasTagName(mtdTag)) 55 return 1; 56 const AtomicString& colSpanValue = fastGetAttribute(columnspanAttr); 57 return std::max(1, colSpanValue.toInt()); 58} 59 60int MathMLElement::rowSpan() const 61{ 62 if (!hasTagName(mtdTag)) 63 return 1; 64 const AtomicString& rowSpanValue = fastGetAttribute(rowspanAttr); 65 return std::max(1, rowSpanValue.toInt()); 66} 67 68void MathMLElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 69{ 70 if (name == rowspanAttr) { 71 if (renderer() && renderer()->isTableCell() && hasTagName(mtdTag)) 72 toRenderTableCell(renderer())->colSpanOrRowSpanChanged(); 73 } else if (name == columnspanAttr) { 74 if (renderer() && renderer()->isTableCell() && hasTagName(mtdTag)) 75 toRenderTableCell(renderer())->colSpanOrRowSpanChanged(); 76 } else 77 StyledElement::parseAttribute(name, value); 78} 79 80bool MathMLElement::isPresentationAttribute(const QualifiedName& name) const 81{ 82 if (name == mathbackgroundAttr || name == mathsizeAttr || name == mathcolorAttr || name == fontsizeAttr || name == backgroundAttr || name == colorAttr || name == fontstyleAttr || name == fontweightAttr || name == fontfamilyAttr) 83 return true; 84 return StyledElement::isPresentationAttribute(name); 85} 86 87void MathMLElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) 88{ 89 if (name == mathbackgroundAttr) 90 addPropertyToPresentationAttributeStyle(style, CSSPropertyBackgroundColor, value); 91 else if (name == mathsizeAttr) { 92 // The following three values of mathsize are handled in WebCore/css/mathml.css 93 if (value != "normal" && value != "small" && value != "big") 94 addPropertyToPresentationAttributeStyle(style, CSSPropertyFontSize, value); 95 } else if (name == mathcolorAttr) 96 addPropertyToPresentationAttributeStyle(style, CSSPropertyColor, value); 97 // FIXME: deprecated attributes that should loose in a conflict with a non deprecated attribute 98 else if (name == fontsizeAttr) 99 addPropertyToPresentationAttributeStyle(style, CSSPropertyFontSize, value); 100 else if (name == backgroundAttr) 101 addPropertyToPresentationAttributeStyle(style, CSSPropertyBackgroundColor, value); 102 else if (name == colorAttr) 103 addPropertyToPresentationAttributeStyle(style, CSSPropertyColor, value); 104 else if (name == fontstyleAttr) 105 addPropertyToPresentationAttributeStyle(style, CSSPropertyFontStyle, value); 106 else if (name == fontweightAttr) 107 addPropertyToPresentationAttributeStyle(style, CSSPropertyFontWeight, value); 108 else if (name == fontfamilyAttr) 109 addPropertyToPresentationAttributeStyle(style, CSSPropertyFontFamily, value); 110 else { 111 ASSERT(!isPresentationAttribute(name)); 112 StyledElement::collectStyleForPresentationAttribute(name, value 113 , style); 114 } 115} 116 117} 118 119#endif // ENABLE(MATHML) 120