Skip to content
Snippets Groups Projects
Commit 5c114f0c authored by Franck Dary's avatar Franck Dary
Browse files

Made it impossible to do a splitword on splitedwords or to modify splitedwords

parent 8946a076
No related branches found
No related tags found
No related merge requests found
......@@ -58,11 +58,12 @@ class Action
static Action setRoot();
static Action updateIds();
static Action endWord();
static Action assertIdIsEmpty();
static Action attach(Object governorObject, int governorIndex, Object dependentObject, int dependentIndex);
static Action addCurCharToCurWord();
static Action ignoreCurrentCharacter();
static Action consumeCharacterIndex(std::string consumed);
static Action setMultiwordId(int multiwordSize);
static Action setMultiwordIds(int multiwordSize);
};
#endif
......@@ -48,16 +48,20 @@ Action Action::moveWordIndex(int movement)
return {Type::MoveWord, apply, undo, appliable};
}
Action Action::setMultiwordId(int multiwordSize)
Action Action::setMultiwordIds(int multiwordSize)
{
auto apply = [multiwordSize](Config & config, Action & a)
{
addHypothesisRelative(Config::idColName, Object::Buffer, 0, fmt::format("{}-{}", config.getCurrentWordId()+1, config.getCurrentWordId()+multiwordSize)).apply(config, a);
for (int i = 0; i < multiwordSize; i++)
addHypothesisRelative(Config::idColName, Object::Buffer, i+1, fmt::format("{}", config.getCurrentWordId()+1+i)).apply(config, a);
};
auto undo = [](Config & config, Action &)
auto undo = [multiwordSize](Config & config, Action &)
{
config.getLastNotEmpty(Config::idColName, config.getWordIndex()) = "";
for (int i = 0; i < multiwordSize; i++)
config.getLastNotEmpty(Config::idColName, config.getWordIndex()+1+i) = "";
};
auto appliable = [](const Config &, const Action &)
......@@ -366,6 +370,24 @@ Action Action::ignoreCurrentCharacter()
return {Type::MoveChar, apply, undo, appliable};
}
Action Action::assertIdIsEmpty()
{
auto apply = [](Config &, Action &)
{
};
auto undo = [](Config &, Action &)
{
};
auto appliable = [](const Config & config, const Action &)
{
return util::isEmpty(config.getAsFeature(Config::idColName, config.getWordIndex()));
};
return {Type::Check, apply, undo, appliable};
}
Action Action::addCurCharToCurWord()
{
auto apply = [](Config & config, Action & a)
......
......@@ -164,6 +164,7 @@ void Transition::initEndWord()
void Transition::initAddCharToWord()
{
sequence.emplace_back(Action::assertIdIsEmpty());
sequence.emplace_back(Action::addLinesIfNeeded(0));
sequence.emplace_back(Action::addCurCharToCurWord());
sequence.emplace_back(Action::moveCharacterIndex(1));
......@@ -190,11 +191,12 @@ void Transition::initAddCharToWord()
void Transition::initSplitWord(std::vector<std::string> words)
{
auto & consumedWord = words[0];
sequence.emplace_back(Action::assertIdIsEmpty());
sequence.emplace_back(Action::addLinesIfNeeded(words.size()));
sequence.emplace_back(Action::consumeCharacterIndex(consumedWord));
for (unsigned int i = 0; i < words.size(); i++)
sequence.emplace_back(Action::addHypothesisRelative("FORM", Action::Object::Buffer, i, words[i]));
sequence.emplace_back(Action::setMultiwordId(words.size()-1));
sequence.emplace_back(Action::setMultiwordIds(words.size()-1));
cost = [words](const Config & config)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment