From e38cc6e2c9900a4c883471386210241bb9e48a3c Mon Sep 17 00:00:00 2001 From: twanvl Date: Sat, 28 Apr 2007 21:58:29 +0000 Subject: [PATCH] Fixed dependencies for 'styling'; Fixed: specific character prefered over .* for keywords git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@306 0fc631ac-6414-0410-93d0-97cfa31319b6 --- src/data/card.cpp | 8 ++----- src/data/card.hpp | 2 +- src/data/field.cpp | 9 ++++++++ src/data/field.hpp | 2 ++ src/data/keyword.cpp | 7 +++--- src/data/set.cpp | 14 ++++-------- src/data/set.hpp | 3 +-- src/gui/control/keyword_list.cpp | 4 ++-- src/render/text/element.cpp | 2 +- src/script/functions/basic.cpp | 2 +- src/script/to_value.hpp | 38 ++++++++++++++++++-------------- 11 files changed, 49 insertions(+), 42 deletions(-) diff --git a/src/data/card.cpp b/src/data/card.cpp index 9de1af4e..d6824356 100644 --- a/src/data/card.cpp +++ b/src/data/card.cpp @@ -43,12 +43,8 @@ String Card::identification() const { } } -void mark_dependency_member(const CardP& card, const String& name, const Dependency& dep) { - // Find field with that name - IndexMap::const_iterator it = card->data.find(name); - if (it != card->data.end()) { - (*it)->fieldP->dependent_scripts.add(dep); - } +void mark_dependency_member(const Card& card, const String& name, const Dependency& dep) { + mark_dependency_member(card.data, name, dep); } IMPLEMENT_REFLECTION(Card) { diff --git a/src/data/card.hpp b/src/data/card.hpp index 26f3afbe..287438ba 100644 --- a/src/data/card.hpp +++ b/src/data/card.hpp @@ -69,7 +69,7 @@ class Card { DECLARE_REFLECTION(); }; -void mark_dependency_member(const CardP& value, const String& name, const Dependency& dep); +void mark_dependency_member(const Card& value, const String& name, const Dependency& dep); // ----------------------------------------------------------------------------- : EOF #endif diff --git a/src/data/field.cpp b/src/data/field.cpp index 47bcf80e..7665358d 100644 --- a/src/data/field.cpp +++ b/src/data/field.cpp @@ -137,3 +137,12 @@ void init_object(const FieldP& field, ValueP& value) { template <> ValueP read_new(Reader&) { throw InternalError(_("IndexMap contains nullptr ValueP the application should have crashed already")); } + + + +void mark_dependency_member(const IndexMap& value, const String& name, const Dependency& dep) { + IndexMap::const_iterator it = value.find(name); + if (it != value.end()) { + (*it)->fieldP->dependent_scripts.add(dep); + } +} diff --git a/src/data/field.hpp b/src/data/field.hpp index 98d9330e..c937d3cf 100644 --- a/src/data/field.hpp +++ b/src/data/field.hpp @@ -186,5 +186,7 @@ template <> ValueP read_new(Reader&); return *static_cast(fieldP.get()); \ } +void mark_dependency_member(const IndexMap& value, const String& name, const Dependency& dep); + // ----------------------------------------------------------------------------- : EOF #endif diff --git a/src/data/keyword.cpp b/src/data/keyword.cpp index ac57c562..352b4adc 100644 --- a/src/data/keyword.cpp +++ b/src/data/keyword.cpp @@ -361,13 +361,14 @@ String KeywordDatabase::expand(const String& text, } // find 'next' trie node set matching c FOR_EACH(kt, current) { - if (kt->on_any_star) { - next.push_back(kt->on_any_star); - } map::const_iterator it = kt->children.find(c); if (it != kt->children.end()) { next.push_back(it->second); } + // TODO: on any star first or last? + if (kt->on_any_star) { + next.push_back(kt->on_any_star); + } } // next becomes current swap(current, next); diff --git a/src/data/set.cpp b/src/data/set.cpp index ebf2552f..1cf24b07 100644 --- a/src/data/set.cpp +++ b/src/data/set.cpp @@ -154,25 +154,19 @@ ScriptValueP make_iterator(const Set& set) { return new_intrusive1 > >(&set.cards); } -void mark_dependency_member(Set* value, const String& name, const Dependency& dep) { +void mark_dependency_member(const Set& set, const String& name, const Dependency& dep) { // is it the card list? if (name == _("cards")) { - value->game->dependent_scripts_cards.add(dep); + set.game->dependent_scripts_cards.add(dep); return; } // is it the keywords? if (name == _("keywords")) { - value->game->dependent_scripts_keywords.add(dep); + set.game->dependent_scripts_keywords.add(dep); return; } // is it in the set data? - IndexMap::const_iterator it = value->data.find(name); - if (it != value->data.end()) { - (*it)->fieldP->dependent_scripts.add(dep); - } -} -void mark_dependency_member(const SetP& value, const String& name, const Dependency& dep) { - mark_dependency_member(value.get(), name, dep); + mark_dependency_member(set.data, name, dep); } // in scripts, set.something is read from the set_info diff --git a/src/data/set.hpp b/src/data/set.hpp index 000a8e85..1b3826ac 100644 --- a/src/data/set.hpp +++ b/src/data/set.hpp @@ -122,8 +122,7 @@ inline int item_count(const Set& set) { } ScriptValueP make_iterator(const Set& set); -void mark_dependency_member(const SetP& value, const String& name, const Dependency& dep); -void mark_dependency_member(Set* value, const String& name, const Dependency& dep); +void mark_dependency_member(const Set& set, const String& name, const Dependency& dep); // ----------------------------------------------------------------------------- : SetView diff --git a/src/gui/control/keyword_list.cpp b/src/gui/control/keyword_list.cpp index 3aa8d53f..dbaae30c 100644 --- a/src/gui/control/keyword_list.cpp +++ b/src/gui/control/keyword_list.cpp @@ -84,8 +84,8 @@ void KeywordList::onAction(const Action& action, bool undone) { String match_string(const Keyword& a) { return untag(replace_all(replace_all( a.match, - _(""), _("<")), - _(""), _(">")) + _(""), LEFT_ANGLE_BRACKET), + _(""), RIGHT_ANGLE_BRACKET) ); } diff --git a/src/render/text/element.cpp b/src/render/text/element.cpp index c07cb53c..9c8e8ff3 100644 --- a/src/render/text/element.cpp +++ b/src/render/text/element.cpp @@ -174,7 +174,7 @@ struct TextElementsFromString { line > 0 ? BREAK_LINE : BREAK_HARD); } if (bracket) { - e->content = String(_("<")) + c + _(">"); + e->content = String(LEFT_ANGLE_BRACKET) + c + RIGHT_ANGLE_BRACKET; } else { e->content = c; } diff --git a/src/script/functions/basic.cpp b/src/script/functions/basic.cpp index df9018f4..d46880f9 100644 --- a/src/script/functions/basic.cpp +++ b/src/script/functions/basic.cpp @@ -202,7 +202,7 @@ SCRIPT_FUNCTION_DEPENDENCIES(position_of) { ScriptObject* c = dynamic_cast*>(of.get()); if (s && c) { // dependency on cards - mark_dependency_member(s->getValue(), _("cards"), dep); + mark_dependency_member(*s->getValue(), _("cards"), dep); if (order_by) { // dependency on order_by function order_by->dependencies(ctx, dep.makeCardIndependend()); diff --git a/src/script/to_value.hpp b/src/script/to_value.hpp index c0d75a2e..826eceee 100644 --- a/src/script/to_value.hpp +++ b/src/script/to_value.hpp @@ -14,6 +14,23 @@ #include #include +// ----------------------------------------------------------------------------- : Overloadable templates + +/// Number of items in some collection like object, can be overloaded +template +int item_count(const T& v) { + return -1; +} +/// Return an iterator for some collection, can be overloaded +template +ScriptValueP make_iterator(const T& v) { + return ScriptValueP(); +} + +/// Mark a dependency on a member of value, can be overloaded +template +void mark_dependency_member(const T& value, const String& name, const Dependency& dep) {} + // ----------------------------------------------------------------------------- : Iterators // Iterator over a collection @@ -108,6 +125,10 @@ class ScriptMap : public ScriptValue { virtual int itemCount() const { return (int)value->size(); } /// Collections can be compared by comparing pointers virtual const void* comparePointer() const { return value; } + virtual ScriptValueP dependencyMember(const String& name, const Dependency& dep) const { + mark_dependency_member(*value, name, dep); + return getMember(name); + } private: /// Store a pointer to a collection, collections are only ever used for structures owned outside the script const Collection* value; @@ -132,21 +153,6 @@ class ScriptCustomCollection : public ScriptValue { // ----------------------------------------------------------------------------- : Objects -/// Number of items in some collection like object, can be overloaded -template -int item_count(const T& v) { - return -1; -} -/// Return an iterator for some collection, can be overloaded -template -ScriptValueP make_iterator(const T& v) { - return ScriptValueP(); -} - -/// Mark a dependency on a member of value, can be overloaded -template -void mark_dependency_member(const T& value, const String& name, const Dependency& dep) {} - /// Script value containing an object (pointer) template class ScriptObject : public ScriptValue { @@ -173,7 +179,7 @@ class ScriptObject : public ScriptValue { } } virtual ScriptValueP dependencyMember(const String& name, const Dependency& dep) const { - mark_dependency_member(value, name, dep); + mark_dependency_member(*value, name, dep); return getMember(name); } virtual ScriptValueP makeIterator(const ScriptValueP& thisP) const {