summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTroy A. Griffitts <scribe@crosswire.org>2007-08-31 07:41:49 +0000
committerTroy A. Griffitts <scribe@crosswire.org>2007-08-31 07:41:49 +0000
commit50905796dd888f347111ed05da4cce83efe4d315 (patch)
tree4f62da165522e15c3cb5c217023a8dd481a64f5f
parentde29640c49b84bab12f5bbc395d2a6d29554af00 (diff)
downloadsword-tools-50905796dd888f347111ed05da4cce83efe4d315.tar.gz
updated to produce flashcard lessons
git-svn-id: https://www.crosswire.org/svn/sword-tools/trunk@94 07627401-56e2-0310-80f4-f8cd0041bdcd
-rw-r--r--flashtools/flash.cpp112
1 files changed, 86 insertions, 26 deletions
diff --git a/flashtools/flash.cpp b/flashtools/flash.cpp
index ca8bada..eedc959 100644
--- a/flashtools/flash.cpp
+++ b/flashtools/flash.cpp
@@ -2,31 +2,33 @@
#include <vector>
#include <iostream>
#include <sstream>
+#include <fstream>
#include <swmgr.h>
#include <swbuf.h>
#include <swmodule.h>
#include <utf8utf16.h>
#include <versekey.h>
+#include <thmlplain.h>
using namespace sword;
using namespace std;
class Word {
public:
-Word()
- : utf8("")
- , strong(0)
- , freq(0)
- , kjvTrans("")
-{}
-SWBuf utf8;
-int strong;
-int freq;
-// from stongs lex
-SWBuf kjvTrans;
-// computed ourselves
-map<SWBuf, int> kjvFreq;
+ Word()
+ : utf8("")
+ , strong(0)
+ , freq(0)
+ , kjvTrans("")
+ {}
+ SWBuf utf8;
+ int strong;
+ int freq;
+ // from stongs lex
+ SWBuf kjvTrans;
+ // computed ourselves
+ map<SWBuf, int> kjvFreq;
};
string itoa(int v) { stringstream str; str << v; return str.str(); }
@@ -44,7 +46,7 @@ SWBuf prettyKJVFreq(map<SWBuf, int> &in) {
vector<map<SWBuf, int>::const_iterator> sorted;
for (map<SWBuf, int>::const_iterator it = in.begin(); it != in.end(); it++) {
// combine cap words with lowercase, if exists
- if (toupper(it->first[0]) == it->first[0]) {
+ if (toupper(it->first[0]) == it->first[0] && it->first != "God" && it->first != "Lord") {
SWBuf key = it->first;
key[0] = tolower(key[0]);
if (key != it->first) {
@@ -86,16 +88,79 @@ SWBuf escapedUTF8(SWBuf inText) {
}
+void outputCSV(vector<Word *> &wordList) {
+ for (vector<Word *>::iterator it = wordList.begin(); it != wordList.end(); it++) {
+ Word *w = (*it);
+// cout << w->freq << "|" << escapedUTF8(w->utf8).c_str() << "|" << w->strong << "|" << prettyKJVFreq(w->kjvFreq).c_str() << "\n";
+ cout << w->freq << "|" << w->utf8.c_str() << "|" << w->strong << "|" << prettyKJVFreq(w->kjvFreq).c_str() << "|" << w->kjvTrans << "\n";
+ }
+ std::cout << std::endl;
+}
+
+
+void outputFlash(vector<Word *> &wordList, int maxPerLesson) {
+ ThMLPlain strip;
+ ofstream ofile;
+ int wordCount = 0;
+ int lessonNumber = 0;
+ int startFreq = 0;
+ int lastFreq = 0;
+
+ vector<Word *>::iterator it = wordList.begin();
+ while (it != wordList.end()) {
+ Word *w = (*it);
+ if (!wordCount) {
+ SWBuf fname = "lesson";
+ fname.appendFormatted("%d", lessonNumber);
+ fname += ".flash";
+ ofile.open(fname);
+ startFreq = w->freq;
+ }
+
+ // use if you want answers as KJV phrases
+ SWBuf answers = prettyKJVFreq(w->kjvFreq);
+ if (answers.size() > 200) answers.size(200);
+
+ // use if you would rather have short strongs
+// SWBuf answers = w->kjvTrans;
+// strip.processText(answers); // remove html tags
+// answers.replaceBytes("\n\r", ' '); // remove newlines
+
+ // be sure we have both a word and an answer
+ if (w->utf8.trim().size() && answers.trim().size()) {
+ ofile << "word" << wordCount << "=" << escapedUTF8(w->utf8) << "\n";
+ ofile << "answers" << wordCount << "=" << answers << "\n";
+ lastFreq = w->freq;
+ wordCount++;
+ }
+
+ it++;
+
+ if (it == wordList.end() || wordCount >= maxPerLesson) {
+ // close lesson
+ SWBuf lessonTitle = "";
+ lessonTitle.appendFormatted("lessonTitle=%.3d Freqs. %d-%d\n", lessonNumber, startFreq, lastFreq);
+ ofile << lessonTitle;
+ ofile << "wordCount=" << wordCount << "\n";
+ ofile.close();
+ wordCount = 0;
+ lessonNumber++;
+ }
+ }
+}
+
+
int main(int argc, char **argv)
{
SWMgr manager;
- SWModule *bible;
- SWConfig utf8("hwords.conf");
- SWConfig defs("hdefs.conf");
+ SWModule *bible = manager.getModule("KJV");
map<int, Word> wordList;
- bible = manager.getModule("KJV");
+ SWConfig utf8("hwords.conf");
+ SWConfig defs("hdefs.conf");
+// SWConfig utf8("gwords.conf");
+// SWConfig defs("gdefs.conf");
for (bible->setKey("gen.1.1"); ((VerseKey*)bible->getKey())->Testament() == 1; (*bible)++) {
// for (bible->setKey("mat.1.1"); !bible->Error(); (*bible)++) {
@@ -129,13 +194,8 @@ int main(int argc, char **argv)
}
sort(sorted.begin(), sorted.end(), compareFreq);
+// outputCSV(sorted);
+ outputFlash(sorted, 25);
return 0;
}
-void outputCSV(Vector<Word *>wordList) {
- for (vector<Word *>::iterator it = wordList.begin(); it != wordList.end(); it++) {
- Word *w = (*it);
-// cout << w->freq << "|" << escapedUTF8(w->utf8).c_str() << "|" << w->strong << "|" << prettyKJVFreq(w->kjvFreq).c_str() << "\n";
- cout << w->freq << "|" << w->utf8.c_str() << "|" << w->strong << "|" << prettyKJVFreq(w->kjvFreq).c_str() << "|" << w->kjvTrans << "\n";
- }
- std::cout << std::endl;
-}
+