blob: 39c34ff5d97542b0bdef88813e95f7b54d3e168d [file] [log] [blame]
/**
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2007 Google Inc. All Rights Reserved.
// Author: yian@google.com (Yian Huang)
// Author: dpeng@google.com (Daniel Peng)
#ifndef WEBUTIL_CSS_UTIL_H__
#define WEBUTIL_CSS_UTIL_H__
#include <string>
#include <vector>
#include "strings/stringpiece.h"
#include "webutil/css/string.h"
class HtmlColor;
class UnicodeText;
namespace Css {
class MediaQueries;
class Value;
namespace Util {
enum COLOR_ATTR {ORIGINAL, TRANSPARENT, UNKNOWN, INHERIT};
// Parses CSS color value (may be a string, identifier or a color) into
// HtmlColor. returns def if the color is invalid. set attr to one of the
// following attributes: ORIGINAL if the color is valid, INHERIT if it is the
// keyword inherit, UNKNOWN if it is the keywoard unknown, TRANSPARENT
// if it is invalid otherwise.
HtmlColor GetCssColor(const Css::Value* val, const HtmlColor& def,
COLOR_ATTR* attr);
// Converts length or percentage string to absolute px units. Refer to
// parent_size when seeing 10% (invalid if parent_size is -1). Refer to
// font_size when seeing 1.2EM or 1.2EX. Invalid if val is NULL or it is not
// a number. It can also be invalid if can_negative is set and the value is
// negative, can_unitless works similarly. Returns if parsing succeeds, and
// if so, size stores the result.
bool GetCssLength(const Css::Value* val, double parent_size,
double font_size, double unit, bool can_negative,
bool can_unitless, double* size);
// Updates color with system color specified in colorstr. The change is only
// done only when the conversion succeeds, indicated by the return value.
// For a list of system colors, please see
// http://www.w3.org/TR/CSS21/ui.html#system-colors
// Actual system colors depend on OS's graphic environment. For the purpose
// of hidden text detection, we assume a typical setting based on Windows XP
// default theme.
bool GetSystemColor(const string& colorstr, HtmlColor* color);
// Whether a media string (comma separated list of media) is compatible with
// screen-oriented applications. It is valid if no media is specified or some
// medium has the name "screen" or "all".
bool MediaAppliesToScreen(const StringPiece& media);
// Whether a media list is compatible with screen-oriented applications. It
// is valid if no media is specified or some medium has the name "screen" or
// "all".
bool MediaAppliesToScreen(const std::vector<UnicodeText>& media);
// Note: Operates like a naive CSS2 parser, only returning true if media type
// is "screen" or "all" and there are no qualifiers. Media expressions are
// ignored.
bool MediaAppliesToScreen(const Css::MediaQueries& media);
} // namespace Util
} // namespace Css
#endif // WEBUTIL_CSS_UTIL_H__