1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/** 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (C) 1999 Antti Koivisto (koivisto@kde.org) 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version. 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful, 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details. 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA. 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "config.h" 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(WML) 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLPElement.h" 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 29e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "Attribute.h" 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "CSSPropertyNames.h" 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "CSSValueKeywords.h" 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Document.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "HTMLNames.h" 34635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "NodeList.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "WMLNames.h" 36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectusing namespace WMLNames; 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectWMLPElement::WMLPElement(const QualifiedName& tagName, Document* doc) 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : WMLElement(tagName, doc) 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian MonsenPassRefPtr<WMLPElement> WMLPElement::create(const QualifiedName& tagName, Document* document) 475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return adoptRef(new WMLPElement(tagName, document)); 495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 505ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool WMLPElement::mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (attrName == HTMLNames::alignAttr) { 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project result = eBlock; // We can share with DIV here. 55635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 58635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return WMLElement::mapToEntry(attrName, result); 59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 61e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid WMLPElement::parseMappedAttribute(Attribute* attr) 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (attr->name() == HTMLNames::alignAttr) { 64635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project const AtomicString& value = attr->value(); 65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (equalIgnoringCase(value, "middle") || equalIgnoringCase(value, "center")) 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addCSSProperty(attr, CSSPropertyTextAlign, CSSValueWebkitCenter); 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (equalIgnoringCase(value, "left")) 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addCSSProperty(attr, CSSPropertyTextAlign, CSSValueWebkitLeft); 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (equalIgnoringCase(value, "right")) 70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addCSSProperty(attr, CSSPropertyTextAlign, CSSValueWebkitRight); 71635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addCSSProperty(attr, CSSPropertyTextAlign, value); 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } else if (attr->name() == modeAttr) { 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_mode = attr->value(); 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (m_mode == "wrap") 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addCSSProperty(attr, CSSPropertyWordWrap, CSSValueBreakWord); 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (m_mode == "nowrap") 78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project addCSSProperty(attr, CSSPropertyWhiteSpace, CSSValueNowrap); 79635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } else 80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WMLElement::parseMappedAttribute(attr); 81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 83635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid WMLPElement::insertedIntoDocument() 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WMLElement::insertedIntoDocument(); 86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // If not explicitly specified, the linewrap mode is identical to 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // the line-wrap mode of the previous paragraph in the text flow of 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // a card. The default mode for the first paragraph in a card is wrap. 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!m_mode.isEmpty()) 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RefPtr<NodeList> nodeList = document()->getElementsByTagName("p"); 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!nodeList) 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 96635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project unsigned length = nodeList->length(); 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (length < 2) 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Assure we're the last inserted paragraph element 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // This only works while parsing, otherwhise this statement is never true. 103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (nodeList->item(length - 1) != this) 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WMLPElement* lastParagraph = static_cast<WMLPElement*>(nodeList->item(length - 2)); 107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT(lastParagraph); 108635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project String lastMode = lastParagraph->getAttribute(modeAttr); 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (lastMode.isEmpty() || lastMode == "wrap") // Default value, do nothing. 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project setAttribute(modeAttr, lastMode); 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 119