MathMLFractionElement.cpp [plain text]
#include "config.h"
#if ENABLE(MATHML)
#include "MathMLFractionElement.h"
#include "RenderMathMLFraction.h"
namespace WebCore {
using namespace MathMLNames;
inline MathMLFractionElement::MathMLFractionElement(const QualifiedName& tagName, Document& document)
: MathMLInlineContainerElement(tagName, document)
{
}
Ref<MathMLFractionElement> MathMLFractionElement::create(const QualifiedName& tagName, Document& document)
{
return adoptRef(*new MathMLFractionElement(tagName, document));
}
const MathMLElement::Length& MathMLFractionElement::lineThickness()
{
if (!m_lineThickness.dirty)
return m_lineThickness;
String thickness = attributeWithoutSynchronization(linethicknessAttr);
if (equalLettersIgnoringASCIICase(thickness, "thin")) {
m_lineThickness.type = LengthType::UnitLess;
m_lineThickness.value = .5;
} else if (equalLettersIgnoringASCIICase(thickness, "medium")) {
m_lineThickness.type = LengthType::UnitLess;
m_lineThickness.value = 1;
} else if (equalLettersIgnoringASCIICase(thickness, "thick")) {
m_lineThickness.type = LengthType::UnitLess;
m_lineThickness.value = 2;
} else
m_lineThickness = parseMathMLLength(thickness);
m_lineThickness.dirty = false;
return m_lineThickness;
}
MathMLFractionElement::FractionAlignment MathMLFractionElement::cachedFractionAlignment(const QualifiedName& name, FractionAlignmentAttribute& alignment)
{
if (!alignment.dirty)
return alignment.value;
String value = attributeWithoutSynchronization(name);
if (equalLettersIgnoringASCIICase(value, "left"))
alignment.value = FractionAlignmentLeft;
else if (equalLettersIgnoringASCIICase(value, "right"))
alignment.value = FractionAlignmentRight;
else
alignment.value = FractionAlignmentCenter;
alignment.dirty = false;
return alignment.value;
}
MathMLFractionElement::FractionAlignment MathMLFractionElement::numeratorAlignment()
{
return cachedFractionAlignment(numalignAttr, m_numeratorAlignment);
}
MathMLFractionElement::FractionAlignment MathMLFractionElement::denominatorAlignment()
{
return cachedFractionAlignment(denomalignAttr, m_denominatorAlignment);
}
void MathMLFractionElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
if (name == linethicknessAttr)
m_lineThickness.dirty = true;
else if (name == numalignAttr)
m_numeratorAlignment.dirty = true;
else if (name == denomalignAttr)
m_denominatorAlignment.dirty = true;
MathMLElement::parseAttribute(name, value);
}
RenderPtr<RenderElement> MathMLFractionElement::createElementRenderer(RenderStyle&& style, const RenderTreePosition&)
{
ASSERT(hasTagName(MathMLNames::mfracTag));
return createRenderer<RenderMathMLFraction>(*this, WTFMove(style));
}
}
#endif // ENABLE(MATHML)