summaryrefslogtreecommitdiff
path: root/quacker/lexicondialog.cpp
diff options
context:
space:
mode:
authorJohn Fultz <jfultz@wolfram.com>2015-09-26 10:47:07 -0500
committerJohn Fultz <jfultz@wolfram.com>2015-09-26 10:47:07 -0500
commit1214533715a1acfbc35ebe29ff78afee2f850226 (patch)
tree8c4c9a5280cfbb48b48dff2ae1c567364ea97e89 /quacker/lexicondialog.cpp
parented46987403dd923d3ba14df6eb676e1e163d1d8d (diff)
Work on DAWG generation.
V1 DAWGs now include an alphabet. Begin creating DAWGs which extend other DAWGs. In general, laying the groundwork for plain text import to DAWG.
Diffstat (limited to 'quacker/lexicondialog.cpp')
-rw-r--r--quacker/lexicondialog.cpp43
1 files changed, 41 insertions, 2 deletions
diff --git a/quacker/lexicondialog.cpp b/quacker/lexicondialog.cpp
index 9d1998c..f9c6399 100644
--- a/quacker/lexicondialog.cpp
+++ b/quacker/lexicondialog.cpp
@@ -25,9 +25,10 @@
#include "customqsettings.h"
#include "settings.h"
#include "geometry.h"
+#include "quackleio/dawgfactory.h"
-
-LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDialog(parent)
+LexiconDialog::LexiconDialog(QWidget *parent, const QString &originalName) : QDialog(parent),
+ m_wordFactory(NULL)
{
m_originalName = originalName;
@@ -117,7 +118,45 @@ void LexiconDialog::deleteLexicon()
void LexiconDialog::addWordsFromFile()
{
+ QFileDialog browser(this, tr("Choose a file containing words to be added to the lexicon..."));
+}
+
+void LexiconDialog::addWordsFromDawg(const string &dawgfile, const string &alphabetfile)
+{
+ delete m_wordFactory;
+ m_wordFactory = NULL;
+
+ LexiconParameters lexParams;
+ lexParams.loadDawg(dawgfile);
+ if (!lexParams.hasDawg())
+ return;
+ m_wordFactory = new DawgFactory(alphabetfile);
+ Quackle::LetterString word;
+
+ addWordsFromDawgRecursive(lexParams, word, 1);
+}
+
+void LexiconDialog::addWordsFromDawgRecursive(const LexiconParameters &lexParams, Quackle::LetterString &word, int index)
+{
+ unsigned int p;
+ Quackle::Letter letter;
+ bool t;
+ bool lastchild;
+ bool british;
+ int playability;
+
+ do
+ {
+ lexParams.dawgAt(index, p, letter, t, lastchild, british, playability);
+ word.push_back(letter);
+ if (t)
+ m_wordFactory->pushWord(word, !british, playability);
+ if (p)
+ addWordsFromDawgRecursive(lexParams, word, p);
+ index++;
+ word.pop_back();
+ } while (!lastchild);
}
void LexiconDialog::accept()