Another easy win.
This commit is contained in:
25
src/css.cc
25
src/css.cc
@ -232,14 +232,9 @@ void CssSelector::print () {
|
|||||||
|
|
||||||
CssSimpleSelector::CssSimpleSelector () {
|
CssSimpleSelector::CssSimpleSelector () {
|
||||||
element = ELEMENT_ANY;
|
element = ELEMENT_ANY;
|
||||||
id = NULL;
|
|
||||||
pseudo = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CssSimpleSelector::~CssSimpleSelector () {
|
CssSimpleSelector::~CssSimpleSelector ()= default;
|
||||||
dFree (id);
|
|
||||||
dFree (pseudo);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CssSimpleSelector::setSelect (SelectType t, const char *v) {
|
void CssSimpleSelector::setSelect (SelectType t, const char *v) {
|
||||||
switch (t) {
|
switch (t) {
|
||||||
@ -247,12 +242,12 @@ void CssSimpleSelector::setSelect (SelectType t, const char *v) {
|
|||||||
klass.push_back(v);
|
klass.push_back(v);
|
||||||
break;
|
break;
|
||||||
case SELECT_PSEUDO_CLASS:
|
case SELECT_PSEUDO_CLASS:
|
||||||
if (pseudo == NULL)
|
if (not pseudo.has_value())
|
||||||
pseudo = dStrdup (v);
|
pseudo = v;
|
||||||
break;
|
break;
|
||||||
case SELECT_ID:
|
case SELECT_ID:
|
||||||
if (id == NULL)
|
if (not id.has_value())
|
||||||
id = dStrdup (v);
|
id = v;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -267,10 +262,10 @@ bool CssSimpleSelector::match (const DoctreeNode *n) {
|
|||||||
assert (n);
|
assert (n);
|
||||||
if (element != ELEMENT_ANY && element != n->element)
|
if (element != ELEMENT_ANY && element != n->element)
|
||||||
return false;
|
return false;
|
||||||
if (pseudo != NULL &&
|
if (pseudo.has_value() &&
|
||||||
(n->pseudo == NULL || dStrAsciiCasecmp (pseudo, n->pseudo) != 0))
|
(n->pseudo == NULL || dStrAsciiCasecmp (pseudo.value().c_str(), n->pseudo) != 0))
|
||||||
return false;
|
return false;
|
||||||
if (id != NULL && (n->id == NULL || dStrAsciiCasecmp (id, n->id) != 0))
|
if (id.has_value() && (n->id == NULL || dStrAsciiCasecmp (id.value().c_str(), n->id) != 0))
|
||||||
return false;
|
return false;
|
||||||
for (int i = 0; i < klass.size (); i++) {
|
for (int i = 0; i < klass.size (); i++) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
@ -310,7 +305,7 @@ int CssSimpleSelector::specificity () {
|
|||||||
|
|
||||||
void CssSimpleSelector::print () {
|
void CssSimpleSelector::print () {
|
||||||
fprintf (stderr, "Element %d, pseudo %s, id %s ",
|
fprintf (stderr, "Element %d, pseudo %s, id %s ",
|
||||||
element, pseudo, id);
|
element, pseudo.value().c_str(), id.value().c_str());
|
||||||
fprintf (stderr, "class ");
|
fprintf (stderr, "class ");
|
||||||
for (int i = 0; i < klass.size (); i++)
|
for (int i = 0; i < klass.size (); i++)
|
||||||
fprintf (stderr, ".%s", klass.at (i).c_str());
|
fprintf (stderr, ".%s", klass.at (i).c_str());
|
||||||
@ -369,7 +364,7 @@ void CssStyleSheet::addRule (std::shared_ptr< CssRule > rule) {
|
|||||||
std::string string;
|
std::string string;
|
||||||
|
|
||||||
if (top->getId ()) {
|
if (top->getId ()) {
|
||||||
string = top->getId ();
|
string = top->getId ().value();
|
||||||
if (not idTable.contains(string)) {
|
if (not idTable.contains(string)) {
|
||||||
ruleList= std::make_shared< RuleList > ();
|
ruleList= std::make_shared< RuleList > ();
|
||||||
idTable.emplace (string, ruleList);
|
idTable.emplace (string, ruleList);
|
||||||
|
|||||||
@ -363,7 +363,8 @@ class CssPropertyList : public lout::misc::SimpleVector <CssProperty> {
|
|||||||
class CssSimpleSelector {
|
class CssSimpleSelector {
|
||||||
private:
|
private:
|
||||||
int element;
|
int element;
|
||||||
char *pseudo, *id;
|
std::optional< std::string > pseudo;
|
||||||
|
std::optional< std::string > id;
|
||||||
std::vector< std::string > klass;
|
std::vector< std::string > klass;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -384,8 +385,8 @@ class CssSimpleSelector {
|
|||||||
inline void setElement (int e) { element = e; };
|
inline void setElement (int e) { element = e; };
|
||||||
void setSelect (SelectType t, const char *v);
|
void setSelect (SelectType t, const char *v);
|
||||||
inline std::vector< std::string > &getClass () { return klass; };
|
inline std::vector< std::string > &getClass () { return klass; };
|
||||||
inline const char *getPseudoClass () { return pseudo; };
|
inline const auto &getPseudoClass () { return pseudo; };
|
||||||
inline const char *getId () { return id; };
|
inline const auto &getId () { return id; };
|
||||||
inline int getElement () { return element; };
|
inline int getElement () { return element; };
|
||||||
bool match (const DoctreeNode *node);
|
bool match (const DoctreeNode *node);
|
||||||
int specificity ();
|
int specificity ();
|
||||||
|
|||||||
Reference in New Issue
Block a user