summaryrefslogtreecommitdiff
path: root/quacker
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
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')
-rw-r--r--quacker/lexicondialog.cpp43
-rw-r--r--quacker/lexicondialog.h11
2 files changed, 51 insertions, 3 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()
diff --git a/quacker/lexicondialog.h b/quacker/lexicondialog.h
index cdc0a59..573d48b 100644
--- a/quacker/lexicondialog.h
+++ b/quacker/lexicondialog.h
@@ -20,17 +20,20 @@
#define QUACKER_LEXICONDIALOG_H
#include <string>
-#include <game.h>
+#include "game.h"
+#include "lexiconparameters.h"
#include <QWidget>
#include <QDialog>
using namespace std;
+using namespace Quackle;
class QComboBox;
class QLabel;
class QLineEdit;
class QPushButton;
+class DawgFactory;
class LexiconDialog : public QDialog
{
@@ -47,6 +50,10 @@ protected slots:
void deleteLexicon();
void addWordsFromFile();
+protected:
+ void addWordsFromDawg(const string &dawgfile, const string &alphabetfile);
+ void addWordsFromDawgRecursive(const LexiconParameters &lexParams, Quackle::LetterString &word, int index);
+
private:
QLineEdit *m_lexiconName;
QComboBox *m_alphabetCombo;
@@ -59,6 +66,8 @@ private:
QPushButton *m_deleteLexicon;
QString m_originalName;
+
+ DawgFactory *m_wordFactory;
};
#endif