diff options
Diffstat (limited to 'generator/generator.cpp')
-rw-r--r-- | generator/generator.cpp | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/generator/generator.cpp b/generator/generator.cpp index 610a602..4cc9f64 100644 --- a/generator/generator.cpp +++ b/generator/generator.cpp | |||
@@ -8,7 +8,7 @@ | |||
8 | #include "../lib/enums.h" | 8 | #include "../lib/enums.h" |
9 | #include "progress.h" | 9 | #include "progress.h" |
10 | #include "../lib/selrestr.h" | 10 | #include "../lib/selrestr.h" |
11 | #include "../lib/role.h" | 11 | #include "role.h" |
12 | #include "part.h" | 12 | #include "part.h" |
13 | #include "field.h" | 13 | #include "field.h" |
14 | #include "../lib/util.h" | 14 | #include "../lib/util.h" |
@@ -640,7 +640,7 @@ namespace verbly { | |||
640 | } | 640 | } |
641 | 641 | ||
642 | { | 642 | { |
643 | progress ppgs("Writing verb groups...", groups_.size()); | 643 | progress ppgs("Writing verb frames...", groups_.size()); |
644 | 644 | ||
645 | for (group& g : groups_) | 645 | for (group& g : groups_) |
646 | { | 646 | { |
@@ -649,17 +649,6 @@ namespace verbly { | |||
649 | ppgs.update(); | 649 | ppgs.update(); |
650 | } | 650 | } |
651 | } | 651 | } |
652 | |||
653 | { | ||
654 | progress ppgs("Writing verb frames...", frames_.size()); | ||
655 | |||
656 | for (frame& f : frames_) | ||
657 | { | ||
658 | db_ << f; | ||
659 | |||
660 | ppgs.update(); | ||
661 | } | ||
662 | } | ||
663 | } | 652 | } |
664 | 653 | ||
665 | void generator::readWordNetAntonymy() | 654 | void generator::readWordNetAntonymy() |
@@ -1212,9 +1201,15 @@ namespace verbly { | |||
1212 | return w; | 1201 | return w; |
1213 | } | 1202 | } |
1214 | 1203 | ||
1215 | group& generator::createGroup(xmlNodePtr top) | 1204 | void generator::createGroup(xmlNodePtr top, const group* parent) |
1216 | { | 1205 | { |
1217 | groups_.emplace_back(); | 1206 | if (parent != nullptr) |
1207 | { | ||
1208 | groups_.emplace_back(*parent); | ||
1209 | } else { | ||
1210 | groups_.emplace_back(); | ||
1211 | } | ||
1212 | |||
1218 | group& grp = groups_.back(); | 1213 | group& grp = groups_.back(); |
1219 | 1214 | ||
1220 | xmlChar* key; | 1215 | xmlChar* key; |
@@ -1229,8 +1224,11 @@ namespace verbly { | |||
1229 | { | 1224 | { |
1230 | try | 1225 | try |
1231 | { | 1226 | { |
1232 | group& subgrp = createGroup(subclass); | 1227 | // Parsing a subgroup starts by making a copy of everything in |
1233 | subgrp.setParent(grp); | 1228 | // the parent. This is okay to do at this point because in the |
1229 | // VerbNet data, subgroups are always defined after everything | ||
1230 | // else. | ||
1231 | createGroup(subclass, &grp); | ||
1234 | } catch (const std::exception& e) | 1232 | } catch (const std::exception& e) |
1235 | { | 1233 | { |
1236 | key = xmlGetProp(subclass, reinterpret_cast<const xmlChar*>("ID")); | 1234 | key = xmlGetProp(subclass, reinterpret_cast<const xmlChar*>("ID")); |
@@ -1323,8 +1321,7 @@ namespace verbly { | |||
1323 | { | 1321 | { |
1324 | if (!xmlStrcmp(frametopnode->name, reinterpret_cast<const xmlChar*>("FRAME"))) | 1322 | if (!xmlStrcmp(frametopnode->name, reinterpret_cast<const xmlChar*>("FRAME"))) |
1325 | { | 1323 | { |
1326 | frames_.emplace_back(); | 1324 | frame fr; |
1327 | frame& fr = frames_.back(); | ||
1328 | 1325 | ||
1329 | for (xmlNodePtr framenode = frametopnode->xmlChildrenNode; framenode != nullptr; framenode = framenode->next) | 1326 | for (xmlNodePtr framenode = frametopnode->xmlChildrenNode; framenode != nullptr; framenode = framenode->next) |
1330 | { | 1327 | { |
@@ -1428,15 +1425,13 @@ namespace verbly { | |||
1428 | } | 1425 | } |
1429 | } | 1426 | } |
1430 | 1427 | ||
1431 | grp.addFrame(fr); | 1428 | grp.addFrame(std::move(fr)); |
1432 | } | 1429 | } |
1433 | } | 1430 | } |
1434 | } | 1431 | } |
1435 | } | 1432 | } |
1436 | } | 1433 | } |
1437 | } | 1434 | } |
1438 | |||
1439 | return grp; | ||
1440 | } | 1435 | } |
1441 | 1436 | ||
1442 | selrestr generator::parseSelrestr(xmlNodePtr top) | 1437 | selrestr generator::parseSelrestr(xmlNodePtr top) |