| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * (C) 1999-2003 Lars Knoll (knoll@kde.org) |    2  * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 
|    3  * Copyright (C) 2004, 2006, 2010, 2012 Apple Inc. All rights reserved. |    3  * Copyright (C) 2004, 2006, 2010, 2012 Apple Inc. All rights reserved. | 
|    4  * |    4  * | 
|    5  * This library is free software; you can redistribute it and/or |    5  * This library is free software; you can redistribute it and/or | 
|    6  * modify it under the terms of the GNU Library General Public |    6  * modify it under the terms of the GNU Library General Public | 
|    7  * License as published by the Free Software Foundation; either |    7  * License as published by the Free Software Foundation; either | 
|    8  * version 2 of the License, or (at your option) any later version. |    8  * version 2 of the License, or (at your option) any later version. | 
|    9  * |    9  * | 
|   10  * This library is distributed in the hope that it will be useful, |   10  * This library is distributed in the hope that it will be useful, | 
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  113     unsigned length = string.length(); |  113     unsigned length = string.length(); | 
|  114     unsigned i = 0; |  114     unsigned i = 0; | 
|  115     for (; i < length; ++i) { |  115     for (; i < length; ++i) { | 
|  116         unsigned short c = string[i]; |  116         unsigned short c = string[i]; | 
|  117         if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '1' && c
      <= '9') || (c == '-'))) |  117         if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '1' && c
      <= '9') || (c == '-'))) | 
|  118             break; |  118             break; | 
|  119     } |  119     } | 
|  120     return string.left(i); |  120     return string.left(i); | 
|  121 } |  121 } | 
|  122  |  122  | 
 |  123 PassOwnPtr<MediaQuery> MediaQuerySet::parseMediaQuery(const String& queryString) | 
 |  124 { | 
 |  125     CSSParser parser(CSSStrictMode); | 
 |  126     OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryString); | 
 |  127  | 
 |  128     if (parsedQuery) | 
 |  129         return parsedQuery.release(); | 
 |  130  | 
 |  131     if (m_fallbackToDescriptor) { | 
 |  132         String medium = parseMediaDescriptor(queryString); | 
 |  133         if (!medium.isNull()) | 
 |  134             return adoptPtr(new MediaQuery(MediaQuery::None, medium, nullptr)); | 
 |  135     } | 
 |  136  | 
 |  137     return adoptPtr(new MediaQuery(MediaQuery::None, "not all", nullptr)); | 
 |  138 } | 
 |  139  | 
|  123 bool MediaQuerySet::parse(const String& mediaString) |  140 bool MediaQuerySet::parse(const String& mediaString) | 
|  124 { |  141 { | 
|  125     CSSParser parser(CSSStrictMode); |  142     if (mediaString.isEmpty()) { | 
 |  143         m_queries.clear(); | 
 |  144         return true; | 
 |  145     } | 
 |  146  | 
 |  147     Vector<String> list; | 
 |  148     // FIXME: This is too simple as it shouldn't split when the ',' is inside | 
 |  149     // other allowed matching pairs such as (), [], {}, "", and ''. | 
 |  150     mediaString.split(',', /* allowEmptyEntries */ true, list); | 
|  126  |  151  | 
|  127     Vector<OwnPtr<MediaQuery> > result; |  152     Vector<OwnPtr<MediaQuery> > result; | 
|  128     Vector<String> list; |  153     result.reserveInitialCapacity(list.size()); | 
|  129     mediaString.split(',', list); |  154  | 
|  130     for (unsigned i = 0; i < list.size(); ++i) { |  155     for (unsigned i = 0; i < list.size(); ++i) { | 
|  131         String medium = list[i].stripWhiteSpace(); |  156         String queryString = list[i].stripWhiteSpace(); | 
|  132         if (medium.isEmpty()) { |  157         if (OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryString)) | 
|  133             if (!m_fallbackToDescriptor) |  158             result.uncheckedAppend(parsedQuery.release()); | 
|  134                 return false; |  | 
|  135             continue; |  | 
|  136         } |  | 
|  137         OwnPtr<MediaQuery> mediaQuery = parser.parseMediaQuery(medium); |  | 
|  138         if (!mediaQuery) { |  | 
|  139             if (!m_fallbackToDescriptor) |  | 
|  140                 return false; |  | 
|  141             String mediaDescriptor = parseMediaDescriptor(medium); |  | 
|  142             if (mediaDescriptor.isNull()) |  | 
|  143                 continue; |  | 
|  144             mediaQuery = adoptPtr(new MediaQuery(MediaQuery::None, mediaDescript
     or, nullptr)); |  | 
|  145         } |  | 
|  146         result.append(mediaQuery.release()); |  | 
|  147     } |  159     } | 
|  148     // ",,,," falls straight through, but is not valid unless fallback |  160  | 
|  149     if (!m_fallbackToDescriptor && list.isEmpty()) { |  | 
|  150         String strippedMediaString = mediaString.stripWhiteSpace(); |  | 
|  151         if (!strippedMediaString.isEmpty()) |  | 
|  152             return false; |  | 
|  153     } |  | 
|  154     m_queries.swap(result); |  161     m_queries.swap(result); | 
|  155     return true; |  162     return true; | 
|  156 } |  163 } | 
|  157  |  164  | 
|  158 bool MediaQuerySet::add(const String& queryString) |  165 bool MediaQuerySet::add(const String& queryString) | 
|  159 { |  166 { | 
|  160     CSSParser parser(CSSStrictMode); |  167     if (OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryString)) { | 
|  161  |  168         m_queries.append(parsedQuery.release()); | 
|  162     OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryString); |  169         return true; | 
|  163     if (!parsedQuery && m_fallbackToDescriptor) { |  | 
|  164         String medium = parseMediaDescriptor(queryString); |  | 
|  165         if (!medium.isNull()) |  | 
|  166             parsedQuery = adoptPtr(new MediaQuery(MediaQuery::None, medium, null
     ptr)); |  | 
|  167     } |  170     } | 
|  168     if (!parsedQuery) |  171     return false; | 
|  169         return false; |  | 
|  170  |  | 
|  171     m_queries.append(parsedQuery.release()); |  | 
|  172     return true; |  | 
|  173 } |  172 } | 
|  174  |  173  | 
|  175 bool MediaQuerySet::remove(const String& queryStringToRemove) |  174 bool MediaQuerySet::remove(const String& queryStringToRemove) | 
|  176 { |  175 { | 
|  177     CSSParser parser(CSSStrictMode); |  176     OwnPtr<MediaQuery> parsedQuery = parseMediaQuery(queryStringToRemove); | 
|  178  |  | 
|  179     OwnPtr<MediaQuery> parsedQuery = parser.parseMediaQuery(queryStringToRemove)
     ; |  | 
|  180     if (!parsedQuery && m_fallbackToDescriptor) { |  | 
|  181         String medium = parseMediaDescriptor(queryStringToRemove); |  | 
|  182         if (!medium.isNull()) |  | 
|  183             parsedQuery = adoptPtr(new MediaQuery(MediaQuery::None, medium, null
     ptr)); |  | 
|  184     } |  | 
|  185     if (!parsedQuery) |  177     if (!parsedQuery) | 
|  186         return false; |  178         return false; | 
|  187  |  179  | 
|  188     for (size_t i = 0; i < m_queries.size(); ++i) { |  180     for (size_t i = 0; i < m_queries.size(); ++i) { | 
|  189         MediaQuery* query = m_queries[i].get(); |  181         MediaQuery* query = m_queries[i].get(); | 
|  190         if (*query == *parsedQuery) { |  182         if (*query == *parsedQuery) { | 
|  191             m_queries.remove(i); |  183             m_queries.remove(i); | 
|  192             return true; |  184             return true; | 
|  193         } |  185         } | 
|  194     } |  186     } | 
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  357                     CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(cssV
     alue); |  349                     CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(cssV
     alue); | 
|  358                     if (primitiveValue->isDotsPerInch() || primitiveValue->isDot
     sPerCentimeter()) |  350                     if (primitiveValue->isDotsPerInch() || primitiveValue->isDot
     sPerCentimeter()) | 
|  359                         addResolutionWarningMessageToConsole(document, mediaQuer
     ySet->mediaText(), primitiveValue); |  351                         addResolutionWarningMessageToConsole(document, mediaQuer
     ySet->mediaText(), primitiveValue); | 
|  360                 } |  352                 } | 
|  361             } |  353             } | 
|  362         } |  354         } | 
|  363     } |  355     } | 
|  364 } |  356 } | 
|  365  |  357  | 
|  366 } |  358 } | 
| OLD | NEW |