diff options
Diffstat (limited to 'generator')
-rw-r--r-- | generator/generator.cpp | 49 | ||||
-rw-r--r-- | generator/schema.sql | 8 |
2 files changed, 45 insertions, 12 deletions
diff --git a/generator/generator.cpp b/generator/generator.cpp index 3201154..6a16467 100644 --- a/generator/generator.cpp +++ b/generator/generator.cpp | |||
@@ -80,6 +80,8 @@ struct pronunciation_t { | |||
80 | std::string phonemes; | 80 | std::string phonemes; |
81 | std::string prerhyme; | 81 | std::string prerhyme; |
82 | std::string rhyme; | 82 | std::string rhyme; |
83 | int syllables = 0; | ||
84 | std::string stress; | ||
83 | 85 | ||
84 | bool operator<(const pronunciation_t& other) const | 86 | bool operator<(const pronunciation_t& other) const |
85 | { | 87 | { |
@@ -609,6 +611,8 @@ int main(int argc, char** argv) | |||
609 | 611 | ||
610 | pronunciation_t p; | 612 | pronunciation_t p; |
611 | p.phonemes = phonemes; | 613 | p.phonemes = phonemes; |
614 | |||
615 | // Rhyme detection | ||
612 | if (phemstrt != std::end(phoneme_set)) | 616 | if (phemstrt != std::end(phoneme_set)) |
613 | { | 617 | { |
614 | std::stringstream rhymer; | 618 | std::stringstream rhymer; |
@@ -641,6 +645,23 @@ int main(int argc, char** argv) | |||
641 | p.rhyme = ""; | 645 | p.rhyme = ""; |
642 | } | 646 | } |
643 | 647 | ||
648 | // Syllable/stress | ||
649 | for (auto phm : phoneme_set) | ||
650 | { | ||
651 | if (isdigit(phm.back())) | ||
652 | { | ||
653 | // It's a vowel! | ||
654 | p.syllables++; | ||
655 | |||
656 | if (phm.back() == '1') | ||
657 | { | ||
658 | p.stress.push_back('1'); | ||
659 | } else { | ||
660 | p.stress.push_back('0'); | ||
661 | } | ||
662 | } | ||
663 | } | ||
664 | |||
644 | pronunciations[canonical].insert(p); | 665 | pronunciations[canonical].insert(p); |
645 | } | 666 | } |
646 | } | 667 | } |
@@ -864,9 +885,9 @@ int main(int argc, char** argv) | |||
864 | { | 885 | { |
865 | if (!pronunciation.rhyme.empty()) | 886 | if (!pronunciation.rhyme.empty()) |
866 | { | 887 | { |
867 | query = "INSERT INTO verb_pronunciations (verb_id, pronunciation, prerhyme, rhyme) VALUES (?, ?, ?, ?)"; | 888 | query = "INSERT INTO verb_pronunciations (verb_id, pronunciation, syllables, stress, prerhyme, rhyme) VALUES (?, ?, ?, ?, ?, ?)"; |
868 | } else { | 889 | } else { |
869 | query = "INSERT INTO verb_pronunciations (verb_id, pronunciation) VALUES (?, ?)"; | 890 | query = "INSERT INTO verb_pronunciations (verb_id, pronunciation, syllables, stress) VALUES (?, ?, ?, ?)"; |
870 | } | 891 | } |
871 | 892 | ||
872 | if (sqlite3_prepare_v2(ppdb, query.c_str(), query.length(), &ppstmt, NULL) != SQLITE_OK) | 893 | if (sqlite3_prepare_v2(ppdb, query.c_str(), query.length(), &ppstmt, NULL) != SQLITE_OK) |
@@ -876,11 +897,13 @@ int main(int argc, char** argv) | |||
876 | 897 | ||
877 | sqlite3_bind_int(ppstmt, 1, rowid); | 898 | sqlite3_bind_int(ppstmt, 1, rowid); |
878 | sqlite3_bind_text(ppstmt, 2, pronunciation.phonemes.c_str(), pronunciation.phonemes.length(), SQLITE_TRANSIENT); | 899 | sqlite3_bind_text(ppstmt, 2, pronunciation.phonemes.c_str(), pronunciation.phonemes.length(), SQLITE_TRANSIENT); |
900 | sqlite3_bind_int(ppstmt, 3, pronunciation.syllables); | ||
901 | sqlite3_bind_text(ppstmt, 4, pronunciation.stress.c_str(), pronunciation.stress.length(), SQLITE_TRANSIENT); | ||
879 | 902 | ||
880 | if (!pronunciation.rhyme.empty()) | 903 | if (!pronunciation.rhyme.empty()) |
881 | { | 904 | { |
882 | sqlite3_bind_text(ppstmt, 3, pronunciation.prerhyme.c_str(), pronunciation.prerhyme.length(), SQLITE_TRANSIENT); | 905 | sqlite3_bind_text(ppstmt, 5, pronunciation.prerhyme.c_str(), pronunciation.prerhyme.length(), SQLITE_TRANSIENT); |
883 | sqlite3_bind_text(ppstmt, 4, pronunciation.rhyme.c_str(), pronunciation.rhyme.length(), SQLITE_TRANSIENT); | 906 | sqlite3_bind_text(ppstmt, 6, pronunciation.rhyme.c_str(), pronunciation.rhyme.length(), SQLITE_TRANSIENT); |
884 | } | 907 | } |
885 | 908 | ||
886 | if (sqlite3_step(ppstmt) != SQLITE_DONE) | 909 | if (sqlite3_step(ppstmt) != SQLITE_DONE) |
@@ -1243,9 +1266,9 @@ int main(int argc, char** argv) | |||
1243 | { | 1266 | { |
1244 | if (!pronunciation.rhyme.empty()) | 1267 | if (!pronunciation.rhyme.empty()) |
1245 | { | 1268 | { |
1246 | query = "INSERT INTO noun_pronunciations (noun_id, pronunciation, prerhyme, rhyme) VALUES (?, ?, ?, ?)"; | 1269 | query = "INSERT INTO noun_pronunciations (noun_id, pronunciation, syllables, stress, prerhyme, rhyme) VALUES (?, ?, ?, ?, ?, ?)"; |
1247 | } else { | 1270 | } else { |
1248 | query = "INSERT INTO noun_pronunciations (noun_id, pronunciation) VALUES (?, ?)"; | 1271 | query = "INSERT INTO noun_pronunciations (noun_id, pronunciation, syllables, stress) VALUES (?, ?, ?, ?)"; |
1249 | } | 1272 | } |
1250 | 1273 | ||
1251 | break; | 1274 | break; |
@@ -1255,9 +1278,9 @@ int main(int argc, char** argv) | |||
1255 | { | 1278 | { |
1256 | if (!pronunciation.rhyme.empty()) | 1279 | if (!pronunciation.rhyme.empty()) |
1257 | { | 1280 | { |
1258 | query = "INSERT INTO adjective_pronunciations (adjective_id, pronunciation, prerhyme, rhyme) VALUES (?, ?, ?, ?)"; | 1281 | query = "INSERT INTO adjective_pronunciations (adjective_id, pronunciation, syllables, stress, prerhyme, rhyme) VALUES (?, ?, ?, ?, ?, ?)"; |
1259 | } else { | 1282 | } else { |
1260 | query = "INSERT INTO adjective_pronunciations (adjective_id, pronunciation) VALUES (?, ?)"; | 1283 | query = "INSERT INTO adjective_pronunciations (adjective_id, pronunciation, syllables, stress) VALUES (?, ?, ?, ?)"; |
1261 | } | 1284 | } |
1262 | 1285 | ||
1263 | break; | 1286 | break; |
@@ -1267,9 +1290,9 @@ int main(int argc, char** argv) | |||
1267 | { | 1290 | { |
1268 | if (!pronunciation.rhyme.empty()) | 1291 | if (!pronunciation.rhyme.empty()) |
1269 | { | 1292 | { |
1270 | query = "INSERT INTO adverb_pronunciations (adverb_id, pronunciation, prerhyme, rhyme) VALUES (?, ?, ?, ?)"; | 1293 | query = "INSERT INTO adverb_pronunciations (adverb_id, pronunciation, syllables, stress, prerhyme, rhyme) VALUES (?, ?, ?, ?, ?, ?)"; |
1271 | } else { | 1294 | } else { |
1272 | query = "INSERT INTO adverb_pronunciations (adverb_id, pronunciation) VALUES (?, ?)"; | 1295 | query = "INSERT INTO adverb_pronunciations (adverb_id, pronunciation, syllables, stress) VALUES (?, ?, ?, ?)"; |
1273 | } | 1296 | } |
1274 | 1297 | ||
1275 | break; | 1298 | break; |
@@ -1283,11 +1306,13 @@ int main(int argc, char** argv) | |||
1283 | 1306 | ||
1284 | sqlite3_bind_int(ppstmt, 1, rowid); | 1307 | sqlite3_bind_int(ppstmt, 1, rowid); |
1285 | sqlite3_bind_text(ppstmt, 2, pronunciation.phonemes.c_str(), pronunciation.phonemes.length(), SQLITE_TRANSIENT); | 1308 | sqlite3_bind_text(ppstmt, 2, pronunciation.phonemes.c_str(), pronunciation.phonemes.length(), SQLITE_TRANSIENT); |
1309 | sqlite3_bind_int(ppstmt, 3, pronunciation.syllables); | ||
1310 | sqlite3_bind_text(ppstmt, 4, pronunciation.stress.c_str(), pronunciation.stress.length(), SQLITE_TRANSIENT); | ||
1286 | 1311 | ||
1287 | if (!pronunciation.rhyme.empty()) | 1312 | if (!pronunciation.rhyme.empty()) |
1288 | { | 1313 | { |
1289 | sqlite3_bind_text(ppstmt, 3, pronunciation.prerhyme.c_str(), pronunciation.prerhyme.length(), SQLITE_TRANSIENT); | 1314 | sqlite3_bind_text(ppstmt, 5, pronunciation.prerhyme.c_str(), pronunciation.prerhyme.length(), SQLITE_TRANSIENT); |
1290 | sqlite3_bind_text(ppstmt, 4, pronunciation.rhyme.c_str(), pronunciation.rhyme.length(), SQLITE_TRANSIENT); | 1315 | sqlite3_bind_text(ppstmt, 6, pronunciation.rhyme.c_str(), pronunciation.rhyme.length(), SQLITE_TRANSIENT); |
1291 | } | 1316 | } |
1292 | 1317 | ||
1293 | if (sqlite3_step(ppstmt) != SQLITE_DONE) | 1318 | if (sqlite3_step(ppstmt) != SQLITE_DONE) |
diff --git a/generator/schema.sql b/generator/schema.sql index 1836c62..410b536 100644 --- a/generator/schema.sql +++ b/generator/schema.sql | |||
@@ -186,6 +186,8 @@ CREATE TABLE `noun_pronunciations` ( | |||
186 | `pronunciation` VARCHAR(64) NOT NULL, | 186 | `pronunciation` VARCHAR(64) NOT NULL, |
187 | `prerhyme` VARCHAR(8), | 187 | `prerhyme` VARCHAR(8), |
188 | `rhyme` VARCHAR(64), | 188 | `rhyme` VARCHAR(64), |
189 | `syllables` INT NOT NULL, | ||
190 | `stress` VARCHAR(64) NOT NULL, | ||
189 | FOREIGN KEY (`noun_id`) REFERENCES `nouns`(`noun_id`) | 191 | FOREIGN KEY (`noun_id`) REFERENCES `nouns`(`noun_id`) |
190 | ); | 192 | ); |
191 | 193 | ||
@@ -195,6 +197,8 @@ CREATE TABLE `verb_pronunciations` ( | |||
195 | `pronunciation` VARCHAR(64) NOT NULL, | 197 | `pronunciation` VARCHAR(64) NOT NULL, |
196 | `prerhyme` VARCHAR(8), | 198 | `prerhyme` VARCHAR(8), |
197 | `rhyme` VARCHAR(64), | 199 | `rhyme` VARCHAR(64), |
200 | `syllables` INT NOT NULL, | ||
201 | `stress` VARCHAR(64) NOT NULL, | ||
198 | FOREIGN KEY (`verb_id`) REFERENCES `verbs`(`verb_id`) | 202 | FOREIGN KEY (`verb_id`) REFERENCES `verbs`(`verb_id`) |
199 | ); | 203 | ); |
200 | 204 | ||
@@ -204,6 +208,8 @@ CREATE TABLE `adjective_pronunciations` ( | |||
204 | `pronunciation` VARCHAR(64) NOT NULL, | 208 | `pronunciation` VARCHAR(64) NOT NULL, |
205 | `prerhyme` VARCHAR(8), | 209 | `prerhyme` VARCHAR(8), |
206 | `rhyme` VARCHAR(64), | 210 | `rhyme` VARCHAR(64), |
211 | `syllables` INT NOT NULL, | ||
212 | `stress` VARCHAR(64) NOT NULL, | ||
207 | FOREIGN KEY (`adjective_id`) REFERENCES `adjectives`(`adjective_id`) | 213 | FOREIGN KEY (`adjective_id`) REFERENCES `adjectives`(`adjective_id`) |
208 | ); | 214 | ); |
209 | 215 | ||
@@ -213,6 +219,8 @@ CREATE TABLE `adverb_pronunciations` ( | |||
213 | `pronunciation` VARCHAR(64) NOT NULL, | 219 | `pronunciation` VARCHAR(64) NOT NULL, |
214 | `prerhyme` VARCHAR(8), | 220 | `prerhyme` VARCHAR(8), |
215 | `rhyme` VARCHAR(64), | 221 | `rhyme` VARCHAR(64), |
222 | `syllables` INT NOT NULL, | ||
223 | `stress` VARCHAR(64) NOT NULL, | ||
216 | FOREIGN KEY (`adverb_id`) REFERENCES `adverbs`(`adverb_id`) | 224 | FOREIGN KEY (`adverb_id`) REFERENCES `adverbs`(`adverb_id`) |
217 | ); | 225 | ); |
218 | 226 | ||