diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2016-02-01 09:30:04 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2016-02-01 09:30:04 -0500 |
commit | 617155fe562652c859a380d85cc5710783d79448 (patch) | |
tree | f5eee89b0fa4b3c9dfe7187ca78916a71b59045e /freevars.cpp | |
parent | b316e309559d7176af6cf0bb7dcd6dbaa83c01cd (diff) | |
download | rawr-ebooks-617155fe562652c859a380d85cc5710783d79448.tar.gz rawr-ebooks-617155fe562652c859a380d85cc5710783d79448.tar.bz2 rawr-ebooks-617155fe562652c859a380d85cc5710783d79448.zip |
Added emoji freevar
Strings of emojis are tokenized separately from anything else, and added to an emoticon freevar, which is mixed in with regular emoticons like :P. This breaks old-style freevars like $name$ and $noun$ so some legacy support for compatibility is left in but eventually $name$ should be made into an actual new freevar. Emoji data is from gemoji (https://github.com/github/gemoji).
Diffstat (limited to 'freevars.cpp')
-rw-r--r-- | freevars.cpp | 58 |
1 files changed, 22 insertions, 36 deletions
diff --git a/freevars.cpp b/freevars.cpp index 54c5aab..4429d00 100644 --- a/freevars.cpp +++ b/freevars.cpp | |||
@@ -1,46 +1,32 @@ | |||
1 | #include "freevars.h" | 1 | #include "freevars.h" |
2 | #include <fstream> | 2 | #include <fstream> |
3 | #include <cstdlib> | 3 | #include "kgramstats.h" |
4 | 4 | ||
5 | freevars::freevars() | 5 | freevar::freevar(word& w, std::string file) : w(w) |
6 | { | 6 | { |
7 | vars = new std::map<std::string, std::vector<std::string>* >(); | 7 | std::ifstream infile(file); |
8 | if (infile) | ||
9 | { | ||
10 | std::string line; | ||
11 | while (getline(infile, line)) | ||
12 | { | ||
13 | instances.insert(line); | ||
14 | w.forms.add(line); | ||
15 | } | ||
16 | } | ||
8 | } | 17 | } |
9 | 18 | ||
10 | void freevars::addVar(std::string name, std::string filename) | 19 | bool freevar::check(std::string f) const |
11 | { | 20 | { |
12 | std::vector<std::string>* eltlist = new std::vector<std::string>(); | 21 | return (instances.count(f) == 1); |
13 | |||
14 | std::ifstream infile(filename.c_str()); | ||
15 | if (infile) | ||
16 | { | ||
17 | std::string line; | ||
18 | |||
19 | while (getline(infile, line)) | ||
20 | { | ||
21 | eltlist->push_back(line); | ||
22 | } | ||
23 | } else { | ||
24 | eltlist->push_back(""); | ||
25 | } | ||
26 | |||
27 | (*vars)[name] = eltlist; | ||
28 | } | 22 | } |
29 | 23 | ||
30 | std::string freevars::parse(std::string in) | 24 | void freevar::add(std::string f) |
31 | { | 25 | { |
32 | std::string res(in); | 26 | instances.insert(f); |
33 | 27 | } | |
34 | for (std::map<std::string, std::vector<std::string>* >::iterator it = vars->begin(); it != vars->end(); it++) | 28 | |
35 | { | 29 | word& freevar::getWord() |
36 | std::string tofind = "$" + it->first + "$"; | 30 | { |
37 | size_t fpos; | 31 | return w; |
38 | while ((fpos = res.find(tofind)) != std::string::npos) | 32 | } |
39 | { | ||
40 | int r = rand() % it->second->size(); | ||
41 | res.replace(fpos, tofind.length(), (*it->second)[r], 0, std::string::npos); | ||
42 | } | ||
43 | } | ||
44 | |||
45 | return res; | ||
46 | } \ No newline at end of file | ||