blob: b0f4e7e06e269269095fb89b00b5b5e9010ee1e3 [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 2006 Google Inc. All Rights Reserved.
// Author: dpeng@google.com (Daniel Peng)
#include "util/gtl/stl_util.h"
#include "webutil/css/selector.h"
namespace Css {
//
// static
//
const HtmlTagIndex SimpleSelector::tagindex_;
//
// SimpleSelector factory methods
//
SimpleSelector* SimpleSelector::NewElementType(const UnicodeText& name) {
HtmlTagEnum tag = static_cast<HtmlTagEnum>(
tagindex_.FindHtmlTag(name.utf8_data(), name.utf8_length()));
return new SimpleSelector(tag, name);
}
SimpleSelector* SimpleSelector::NewUniversal() {
return new SimpleSelector(SimpleSelector::UNIVERSAL,
UnicodeText(), UnicodeText());
}
SimpleSelector* SimpleSelector::NewExistAttribute(
const UnicodeText& attribute) {
return new SimpleSelector(SimpleSelector::EXIST_ATTRIBUTE,
attribute, UnicodeText());
}
SimpleSelector* SimpleSelector::NewBinaryAttribute(
Type type, const UnicodeText& attribute, const UnicodeText& value) {
return new SimpleSelector(type, attribute, value);
}
static const char kClassText[] = "class";
SimpleSelector* SimpleSelector::NewClass(const UnicodeText& classname) {
static const UnicodeText kClass =
UTF8ToUnicodeText(kClassText, strlen(kClassText));
return new SimpleSelector(SimpleSelector::CLASS,
kClass, classname);
}
static const char kIdText[] = "id";
SimpleSelector* SimpleSelector::NewId(const UnicodeText& id) {
static const UnicodeText kId = UTF8ToUnicodeText(kIdText, strlen(kIdText));
return new SimpleSelector(SimpleSelector::ID,
kId, id);
}
// sep is the separator. Either ":" or "::".
// See: http://www.w3.org/TR/CSS2/selector.html#pseudo-elements
// and http://www.w3.org/TR/css3-selectors/#pseudo-elements
SimpleSelector* SimpleSelector::NewPseudoclass(
const UnicodeText& pseudoclass, const UnicodeText& sep) {
return new SimpleSelector(SimpleSelector::PSEUDOCLASS,
sep, pseudoclass);
}
SimpleSelector* SimpleSelector::NewLang(const UnicodeText& lang) {
return new SimpleSelector(SimpleSelector::LANG,
UnicodeText(), lang);
}
//
// Some destructors that need STLDeleteElements() from stl_util.h
//
SimpleSelectors::~SimpleSelectors() { STLDeleteElements(this); }
Selector::~Selector() { STLDeleteElements(this); }
Selectors::~Selectors() { STLDeleteElements(this); }
} // namespace