diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/css.cc | 17 | ||||
-rw-r--r-- | src/css.hh | 13 | ||||
-rw-r--r-- | src/cssparser.cc | 4 |
3 files changed, 28 insertions, 6 deletions
@@ -24,6 +24,23 @@ void CssProperty::print () { fprintf (stderr, "%s - %d\n", Css_property_info[name].symbol, value.intVal); } +CssPropertyList::~CssPropertyList () { + if (ownerOfStrings) { + for (int i = 0; i < size (); i++) { + CssProperty *p = getRef (i); + + switch (p->name) { + case CssProperty::CSS_PROPERTY_CONTENT: + case CssProperty::CSS_PROPERTY_FONT_FAMILY: + dFree (p->value.strVal); + break; + default: + break; + } + } + } +} + void CssPropertyList::set (CssProperty::Name name, CssProperty::Value value) { for (int i = 0; i < size (); i++) if (getRef (i)->name == name) { @@ -52,7 +52,7 @@ class CssProperty { public: typedef union { int intVal; - const char *strVal; + char *strVal; } Value; typedef enum { @@ -167,19 +167,24 @@ class CssProperty { * \brief A list of CssProperty objects. */ class CssPropertyList : public lout::misc::SimpleVector <CssProperty> { - int refCount; + int refCount; + bool ownerOfStrings; public: - CssPropertyList() : lout::misc::SimpleVector <CssProperty> (1) { + CssPropertyList(bool ownerOfStrings = false) : + lout::misc::SimpleVector <CssProperty> (1) { refCount = 0; + this->ownerOfStrings = ownerOfStrings; }; CssPropertyList(const CssPropertyList &p) : lout::misc::SimpleVector <CssProperty> (p) { refCount = 0; + ownerOfStrings = false; }; + ~CssPropertyList (); void set (CssProperty::Name name, CssProperty::Value value); - void set (CssProperty::Name name, const char *value) { + void set (CssProperty::Name name, char *value) { CssProperty::Value v; v.strVal = value; set (name, v); diff --git a/src/cssparser.cc b/src/cssparser.cc index d000c45f..03fc102c 100644 --- a/src/cssparser.cc +++ b/src/cssparser.cc @@ -1110,9 +1110,9 @@ static void Css_parse_ruleset(CssParser * parser) DEBUG_MSG(DEBUG_PARSE_LEVEL, "end of %s\n", "selectors"); - props = new CssPropertyList(); + props = new CssPropertyList(true); props->ref(); - importantProps = new CssPropertyList(); + importantProps = new CssPropertyList(true); importantProps->ref(); /* Read block. ('{' has already been read.) */ |