From 922a6fb285944ff15ce49e89172a33678ed29b90 Mon Sep 17 00:00:00 2001 From: Adam Wardynski <award@.(B-4.4.46a)> Date: Wed, 12 Jan 2011 18:35:21 +0100 Subject: [PATCH] Select Action, leaving lexemes that meet a condition. --- libwccl/ops/actions/select.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libwccl/ops/actions/select.cpp b/libwccl/ops/actions/select.cpp index 4b2e44b..507e8cd 100644 --- a/libwccl/ops/actions/select.cpp +++ b/libwccl/ops/actions/select.cpp @@ -7,7 +7,23 @@ namespace Wccl { Bool Select::execute(const ActionExecContext& context) const { Bool changed(false); - //@todo: implement + const boost::shared_ptr<const Position> pos = pos_->apply(context); + int abs_pos = context.sentence_context().get_abs_position(*pos); + if (context.sentence_context().is_inside(abs_pos)) { + Corpus2::Token& token = *context.sentence_context().at(abs_pos); + std::vector<Corpus2::Lexeme> original(token.lexemes()); + std::vector<Corpus2::Lexeme> remaining; + token.lexemes() = remaining; + foreach (const Corpus2::Lexeme& lexeme, original) { + token.add_lexeme(lexeme); + if (condition_->apply(context)->get_value()) { + remaining.push_back(lexeme); + } + token.lexemes().pop_back(); + } + changed.set_value((remaining.size() > 0) && (remaining.size() < original.size())); + token.lexemes() = changed.get_value() ? remaining : original; + } return changed; } -- GitLab