Home | History | Annotate | Download | only in css
      1 /*
      2  * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "WebKitCSSKeyframeRule.h"
     28 
     29 #include "CSSMutableStyleDeclaration.h"
     30 
     31 namespace WebCore {
     32 
     33 WebKitCSSKeyframeRule::WebKitCSSKeyframeRule(CSSStyleSheet* parent)
     34     : CSSRule(parent)
     35 {
     36 }
     37 
     38 WebKitCSSKeyframeRule::~WebKitCSSKeyframeRule()
     39 {
     40     if (m_style)
     41         m_style->setParent(0);
     42 }
     43 
     44 String WebKitCSSKeyframeRule::cssText() const
     45 {
     46     String result = m_key;
     47 
     48     result += " { ";
     49     result += m_style->cssText();
     50     result += "}";
     51 
     52     return result;
     53 }
     54 
     55 bool WebKitCSSKeyframeRule::parseString(const String& /*string*/, bool /*strict*/)
     56 {
     57     // FIXME
     58     return false;
     59 }
     60 
     61 void WebKitCSSKeyframeRule::setDeclaration(PassRefPtr<CSSMutableStyleDeclaration> style)
     62 {
     63     m_style = style;
     64     m_style->setParent(parent());
     65 }
     66 
     67 /* static */
     68 void WebKitCSSKeyframeRule::parseKeyString(const String& s, Vector<float>& keys)
     69 {
     70     keys.clear();
     71     Vector<String> strings;
     72     s.split(',', strings);
     73 
     74     for (size_t i = 0; i < strings.size(); ++i) {
     75         float key = -1;
     76         String cur = strings[i].stripWhiteSpace();
     77 
     78         // For now the syntax MUST be 'xxx%' or 'from' or 'to', where xxx is a legal floating point number
     79         if (cur == "from")
     80             key = 0;
     81         else if (cur == "to")
     82             key = 1;
     83         else if (cur.endsWith("%")) {
     84             float k = cur.substring(0, cur.length() - 1).toFloat();
     85             if (k >= 0 && k <= 100)
     86                 key = k/100;
     87         }
     88 
     89         if (key < 0) {
     90             keys.clear();
     91             return;
     92         }
     93         else
     94             keys.append(key);
     95     }
     96 }
     97 
     98 } // namespace WebCore
     99