From e4fa0cb86d97c23c24cd7bdd62c23f03eed312da Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sun, 5 Feb 2017 08:56:39 -0500 Subject: Flattened selrestrs Now, selrestrs are, instead of logically being a tree of positive/negative restrictions that are ANDed/ORed together, they are a flat set of positive restrictions that are ORed together. They are stored as strings in a table called selrestrs, just like synrestrs, which makes them a lot more queryable now as well. This change required some changes to the VerbNet data, because we needed to consolidate any ANDed clauses into single selrestrs, as well as convert any negative selrestrs into positive ones. The changes made are detailed on the wiki. Preposition choices are now encoded as comma-separated lists instead of using JSON. This change, along with the selrestrs one, allows us to remove verbly's dependency on nlohmann::json. --- generator/CMakeLists.txt | 4 +- generator/frame.h | 1 + generator/generator.cpp | 82 +++--------- generator/generator.h | 3 - generator/group.cpp | 27 ++-- generator/group.h | 1 + generator/part.cpp | 18 +-- generator/part.h | 7 +- generator/role.h | 8 +- generator/schema.sql | 8 +- generator/vn.diff | 340 +++++++++++++++++++++++++++++++++++++++++++++-- 11 files changed, 396 insertions(+), 103 deletions(-) (limited to 'generator') diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 5bbd82d..95a11b5 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -5,8 +5,8 @@ find_package(PkgConfig) pkg_check_modules(sqlite3 sqlite3 REQUIRED) find_package(libxml2 REQUIRED) -include_directories(${sqlite3_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ../vendor/json) -add_executable(generator notion.cpp word.cpp lemma.cpp form.cpp pronunciation.cpp group.cpp frame.cpp part.cpp ../lib/selrestr.cpp database.cpp field.cpp generator.cpp main.cpp) +include_directories(${sqlite3_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) +add_executable(generator notion.cpp word.cpp lemma.cpp form.cpp pronunciation.cpp group.cpp frame.cpp part.cpp database.cpp field.cpp generator.cpp main.cpp) set_property(TARGET generator PROPERTY CXX_STANDARD 11) set_property(TARGET generator PROPERTY CXX_STANDARD_REQUIRED ON) target_link_libraries(generator ${sqlite3_LIBRARIES} ${LIBXML2_LIBRARIES}) diff --git a/generator/frame.h b/generator/frame.h index ba266f0..d26d500 100644 --- a/generator/frame.h +++ b/generator/frame.h @@ -2,6 +2,7 @@ #define FRAME_H_26770FF1 #include +#include #include "part.h" namespace verbly { diff --git a/generator/generator.cpp b/generator/generator.cpp index 4cc9f64..e125b4a 100644 --- a/generator/generator.cpp +++ b/generator/generator.cpp @@ -7,7 +7,6 @@ #include #include "../lib/enums.h" #include "progress.h" -#include "../lib/selrestr.h" #include "role.h" #include "part.h" #include "field.h" @@ -1303,12 +1302,20 @@ namespace verbly { std::string roleName = reinterpret_cast(key); xmlFree(key); - selrestr roleSelrestrs; + std::set roleSelrestrs; for (xmlNodePtr rolenode = roletopnode->xmlChildrenNode; rolenode != nullptr; rolenode = rolenode->next) { if (!xmlStrcmp(rolenode->name, reinterpret_cast("SELRESTRS"))) { - roleSelrestrs = parseSelrestr(rolenode); + for (xmlNodePtr selrestrnode = rolenode->xmlChildrenNode; selrestrnode != nullptr; selrestrnode = selrestrnode->next) + { + if (!xmlStrcmp(selrestrnode->name, reinterpret_cast("SELRESTR"))) + { + key = xmlGetProp(selrestrnode, reinterpret_cast("type")); + roleSelrestrs.insert(std::string(reinterpret_cast(key))); + xmlFree(key); + } + } } } @@ -1335,7 +1342,7 @@ namespace verbly { std::string partRole = reinterpret_cast(key); xmlFree(key); - selrestr partSelrestrs; + std::set partSelrestrs; std::set partSynrestrs; for (xmlNodePtr npnode = syntaxnode->xmlChildrenNode; npnode != nullptr; npnode = npnode->next) @@ -1351,11 +1358,17 @@ namespace verbly { xmlFree(key); } } - } - - if (!xmlStrcmp(npnode->name, reinterpret_cast("SELRESTRS"))) + } else if (!xmlStrcmp(npnode->name, reinterpret_cast("SELRESTRS"))) { - partSelrestrs = parseSelrestr(npnode); + for (xmlNodePtr selrestrnode = npnode->xmlChildrenNode; selrestrnode != nullptr; selrestrnode = selrestrnode->next) + { + if (!xmlStrcmp(selrestrnode->name, reinterpret_cast("SELRESTR"))) + { + key = xmlGetProp(selrestrnode, reinterpret_cast("type")); + partSelrestrs.insert(std::string(reinterpret_cast(key))); + xmlFree(key); + } + } } } @@ -1434,58 +1447,5 @@ namespace verbly { } } - selrestr generator::parseSelrestr(xmlNodePtr top) - { - xmlChar* key; - - if (!xmlStrcmp(top->name, reinterpret_cast("SELRESTRS"))) - { - if (xmlChildElementCount(top) == 0) - { - return {}; - } else if (xmlChildElementCount(top) == 1) - { - return parseSelrestr(xmlFirstElementChild(top)); - } else { - bool orlogic = false; - if (xmlHasProp(top, reinterpret_cast("logic"))) - { - key = xmlGetProp(top, reinterpret_cast("logic")); - if (!xmlStrcmp(key, reinterpret_cast("or"))) - { - orlogic = true; - } - - xmlFree(key); - } - - std::list children; - for (xmlNodePtr selrestr = top->xmlChildrenNode; selrestr != nullptr; selrestr = selrestr->next) - { - if (!xmlStrcmp(selrestr->name, reinterpret_cast("SELRESTRS")) - || !xmlStrcmp(selrestr->name, reinterpret_cast("SELRESTR"))) - { - children.push_back(parseSelrestr(selrestr)); - } - } - - return selrestr(children, orlogic); - } - } else if (!xmlStrcmp(top->name, reinterpret_cast("SELRESTR"))) - { - key = xmlGetProp(top, reinterpret_cast("Value")); - bool selPos = (std::string(reinterpret_cast(key)) == "+"); - xmlFree(key); - - key = xmlGetProp(top, reinterpret_cast("type")); - std::string selRestriction = reinterpret_cast(key); - xmlFree(key); - - return selrestr(selRestriction, selPos); - } else { - throw std::logic_error("Badly formatted selrestr"); - } - } - }; }; diff --git a/generator/generator.h b/generator/generator.h index bc9b3c7..43b3272 100644 --- a/generator/generator.h +++ b/generator/generator.h @@ -18,7 +18,6 @@ namespace verbly { enum class part_of_speech; - class selrestr; namespace generator { @@ -107,8 +106,6 @@ namespace verbly { void createGroup(xmlNodePtr top, const group* parent = nullptr); - selrestr parseSelrestr(xmlNodePtr top); - // Input std::string verbNetPath_; diff --git a/generator/group.cpp b/generator/group.cpp index aa28d42..5b23578 100644 --- a/generator/group.cpp +++ b/generator/group.cpp @@ -1,10 +1,10 @@ #include "group.h" #include #include -#include #include "database.h" #include "field.h" #include "frame.h" +#include "../lib/util.h" namespace verbly { namespace generator { @@ -83,16 +83,22 @@ namespace verbly { { fields.emplace_back("role", p.getNounRole()); - selrestr partSelrestr; - if (p.getNounSelrestrs().getType() != selrestr::type::empty) + // Short interlude to serialize the selrestrs + std::set partSelrestrs = p.getNounSelrestrs(); + if (partSelrestrs.empty() && arg.hasRole(p.getNounRole())) { - partSelrestr = p.getNounSelrestrs(); - } else if (arg.hasRole(p.getNounRole())) - { - partSelrestr = arg.getRole(p.getNounRole()).getSelrestrs(); + partSelrestrs = arg.getRole(p.getNounRole()).getSelrestrs(); } - fields.emplace_back("selrestrs", partSelrestr.toJson().dump()); + for (const std::string& s : partSelrestrs) + { + std::list selrestrFields; + + selrestrFields.emplace_back("part_id", p.getId()); + selrestrFields.emplace_back("selrestr", s); + + db.insertIntoTable("selrestrs", std::move(selrestrFields)); + } // Short interlude to serialize the synrestrs for (const std::string& s : p.getNounSynrestrs()) @@ -110,7 +116,10 @@ namespace verbly { case part::type::preposition: { - fields.emplace_back("prepositions", nlohmann::json(p.getPrepositionChoices()).dump()); + std::set setChoices = p.getPrepositionChoices(); + std::string serializedChoices = implode(std::begin(setChoices), std::end(setChoices), ","); + + fields.emplace_back("prepositions", std::move(serializedChoices)); fields.emplace_back("preposition_literality", p.isPrepositionLiteral() ? 1 : 0); break; diff --git a/generator/group.h b/generator/group.h index 5486fbe..a7f3a17 100644 --- a/generator/group.h +++ b/generator/group.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "role.h" namespace verbly { diff --git a/generator/part.cpp b/generator/part.cpp index 07618a8..d3e6656 100644 --- a/generator/part.cpp +++ b/generator/part.cpp @@ -6,12 +6,12 @@ namespace verbly { int part::nextId_ = 0; - part part::createNounPhrase(std::string role, selrestr selrestrs, std::set synrestrs) + part part::createNounPhrase(std::string role, std::set selrestrs, std::set synrestrs) { part p(type::noun_phrase); new(&p.noun_phrase_.role) std::string(std::move(role)); - new(&p.noun_phrase_.selrestrs) selrestr(std::move(selrestrs)); + new(&p.noun_phrase_.selrestrs) std::set(std::move(selrestrs)); new(&p.noun_phrase_.synrestrs) std::set(std::move(synrestrs)); return p; @@ -60,7 +60,7 @@ namespace verbly { case type::noun_phrase: { new(&result.noun_phrase_.role) std::string(other.noun_phrase_.role); - new(&result.noun_phrase_.selrestrs) selrestr(other.noun_phrase_.selrestrs); + new(&result.noun_phrase_.selrestrs) std::set(other.noun_phrase_.selrestrs); new(&result.noun_phrase_.synrestrs) std::set(other.noun_phrase_.synrestrs); break; @@ -103,7 +103,7 @@ namespace verbly { case type::noun_phrase: { new(&noun_phrase_.role) std::string(other.noun_phrase_.role); - new(&noun_phrase_.selrestrs) selrestr(other.noun_phrase_.selrestrs); + new(&noun_phrase_.selrestrs) std::set(other.noun_phrase_.selrestrs); new(&noun_phrase_.synrestrs) std::set(other.noun_phrase_.synrestrs); break; @@ -153,7 +153,7 @@ namespace verbly { type tempType = first.type_; int tempId = first.id_; std::string tempRole; - selrestr tempSelrestrs; + std::set tempSelrestrs; std::set tempSynrestrs; std::set tempChoices; bool tempPrepLiteral; @@ -204,7 +204,7 @@ namespace verbly { case type::noun_phrase: { new(&first.noun_phrase_.role) std::string(std::move(second.noun_phrase_.role)); - new(&first.noun_phrase_.selrestrs) selrestr(std::move(second.noun_phrase_.selrestrs)); + new(&first.noun_phrase_.selrestrs) std::set(std::move(second.noun_phrase_.selrestrs)); new(&first.noun_phrase_.synrestrs) std::set(std::move(second.noun_phrase_.synrestrs)); break; @@ -244,7 +244,7 @@ namespace verbly { case type::noun_phrase: { new(&second.noun_phrase_.role) std::string(std::move(tempRole)); - new(&second.noun_phrase_.selrestrs) selrestr(std::move(tempSelrestrs)); + new(&second.noun_phrase_.selrestrs) std::set(std::move(tempSelrestrs)); new(&second.noun_phrase_.synrestrs) std::set(std::move(tempSynrestrs)); break; @@ -285,7 +285,7 @@ namespace verbly { using set_type = std::set; noun_phrase_.role.~string_type(); - noun_phrase_.selrestrs.~selrestr(); + noun_phrase_.selrestrs.~set_type(); noun_phrase_.synrestrs.~set_type(); break; @@ -329,7 +329,7 @@ namespace verbly { } } - selrestr part::getNounSelrestrs() const + std::set part::getNounSelrestrs() const { if (type_ == type::noun_phrase) { diff --git a/generator/part.h b/generator/part.h index 39ba1e7..01791f5 100644 --- a/generator/part.h +++ b/generator/part.h @@ -3,7 +3,6 @@ #include #include -#include "../lib/selrestr.h" #include "../lib/enums.h" namespace verbly { @@ -17,7 +16,7 @@ namespace verbly { // Static factories - static part createNounPhrase(std::string role, selrestr selrestrs, std::set synrestrs); + static part createNounPhrase(std::string role, std::set selrestrs, std::set synrestrs); static part createVerb(); @@ -67,7 +66,7 @@ namespace verbly { std::string getNounRole() const; - selrestr getNounSelrestrs() const; + std::set getNounSelrestrs() const; std::set getNounSynrestrs() const; @@ -104,7 +103,7 @@ namespace verbly { union { struct { std::string role; - selrestr selrestrs; + std::set selrestrs; std::set synrestrs; } noun_phrase_; struct { diff --git a/generator/role.h b/generator/role.h index 4884ef3..fccfa98 100644 --- a/generator/role.h +++ b/generator/role.h @@ -3,7 +3,7 @@ #include #include -#include "../lib/selrestr.h" +#include namespace verbly { @@ -18,7 +18,7 @@ namespace verbly { role( std::string name, - selrestr selrestrs = {}) : + std::set selrestrs = {}) : valid_(true), name_(name), selrestrs_(selrestrs) @@ -37,7 +37,7 @@ namespace verbly { return name_; } - const selrestr& getSelrestrs() const + const std::set& getSelrestrs() const { if (!valid_) { @@ -51,7 +51,7 @@ namespace verbly { bool valid_ = false; std::string name_; - selrestr selrestrs_; + std::set selrestrs_; }; diff --git a/generator/schema.sql b/generator/schema.sql index 33ebc28..2ac658c 100644 --- a/generator/schema.sql +++ b/generator/schema.sql @@ -200,7 +200,6 @@ CREATE TABLE `parts` ( `part_index` INTEGER NOT NULL, `type` INTEGER NOT NULL, `role` VARCHAR(16), - `selrestrs` BLOB, `prepositions` BLOB, `preposition_literality` SMALLINT, `literal_value` VARCHAR(64) @@ -215,3 +214,10 @@ CREATE TABLE `synrestrs` ( ); CREATE INDEX `synrestrs_for` ON `synrestrs`(`part_id`); + +CREATE TABLE `selrestrs` ( + `part_id` INTEGER NOT NULL, + `selrestr` VARCHAR(32) NOT NULL +); + +CREATE INDEX `selrestrs_for` ON `selrestrs`(`part_id`); diff --git a/generator/vn.diff b/generator/vn.diff index 5d5e2f3..bbfd6cf 100644 --- a/generator/vn.diff +++ b/generator/vn.diff @@ -1,8 +1,11 @@ diff /Users/hatkirby/Downloads/new_vn 2/admit-65.xml datadir/vn/admit-65.xml -104c104 +104,106c104,105 < +< +< --- > +> diff /Users/hatkirby/Downloads/new_vn 2/amuse-31.1.xml datadir/vn/amuse-31.1.xml 270a271,273 > @@ -30,6 +33,18 @@ diff /Users/hatkirby/Downloads/new_vn 2/animal_sounds-38.xml datadir/vn/animal_s diff /Users/hatkirby/Downloads/new_vn 2/assessment-34.1.xml datadir/vn/assessment-34.1.xml 103d102 < +diff /Users/hatkirby/Downloads/new_vn 2/assuming_position-50.xml datadir/vn/assuming_position-50.xml +41,42c41 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/banish-10.2.xml datadir/vn/banish-10.2.xml +35,36c35 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/battle-36.4.xml datadir/vn/battle-36.4.xml 96c96 < @@ -85,6 +100,20 @@ diff /Users/hatkirby/Downloads/new_vn 2/break-45.1.xml datadir/vn/break-45.1.xml > > > +diff /Users/hatkirby/Downloads/new_vn 2/bring-11.3.xml datadir/vn/bring-11.3.xml +27,30c27 +< +< +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/butter-9.9.xml datadir/vn/butter-9.9.xml +155,156c155 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/characterize-29.2.xml datadir/vn/characterize-29.2.xml 107c107 < @@ -104,6 +133,31 @@ diff /Users/hatkirby/Downloads/new_vn 2/characterize-29.2.xml datadir/vn/charact > > > +diff /Users/hatkirby/Downloads/new_vn 2/cheat-10.6.xml datadir/vn/cheat-10.6.xml +56,59c56 +< +< +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/chew-39.2.xml datadir/vn/chew-39.2.xml +37,38c37 +< +< +--- +> +155,156c154 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/coil-9.6.xml datadir/vn/coil-9.6.xml +22,23c22 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/coloring-24.xml datadir/vn/coloring-24.xml 89c89,91 < @@ -118,6 +172,11 @@ diff /Users/hatkirby/Downloads/new_vn 2/confess-37.10.xml datadir/vn/confess-37. > > > +diff /Users/hatkirby/Downloads/new_vn 2/confine-92.xml datadir/vn/confine-92.xml +18c18 +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/consider-29.9.xml datadir/vn/consider-29.9.xml 191,193c191,193 < @@ -195,6 +254,47 @@ diff /Users/hatkirby/Downloads/new_vn 2/declare-29.4.xml datadir/vn/declare-29.4 > > > +diff /Users/hatkirby/Downloads/new_vn 2/devour-39.4.xml datadir/vn/devour-39.4.xml +26,27c26 +< +< +--- +> +67,68c66 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/drive-11.5.xml datadir/vn/drive-11.5.xml +37,40c37 +< +< +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/eat-39.1.xml datadir/vn/eat-39.1.xml +24,25c24 +< +< +--- +> +148,149c147 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/enforce-63.xml datadir/vn/enforce-63.xml +11c11 +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/entity_specific_modes_being-47.2.xml datadir/vn/entity_specific_modes_being-47.2.xml +35,36c35 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/estimate-34.2.xml datadir/vn/estimate-34.2.xml 123a124 > @@ -206,12 +306,53 @@ diff /Users/hatkirby/Downloads/new_vn 2/estimate-34.2.xml datadir/vn/estimate-34 > > > +diff /Users/hatkirby/Downloads/new_vn 2/exchange-13.6.xml datadir/vn/exchange-13.6.xml +329,330c329 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/exist-47.1.xml datadir/vn/exist-47.1.xml +13,14c13 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/fill-9.8.xml datadir/vn/fill-9.8.xml +132,133c132 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/funnel-9.3.xml datadir/vn/funnel-9.3.xml +30,31c30 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/get-13.5.1.xml datadir/vn/get-13.5.1.xml 55,56c55 < < --- > +diff /Users/hatkirby/Downloads/new_vn 2/gobble-39.3.xml datadir/vn/gobble-39.3.xml +23,24c23 +< +< +--- +> +118,119c117 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/herd-47.5.2.xml datadir/vn/herd-47.5.2.xml +29,30c29 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/hit-18.1.xml datadir/vn/hit-18.1.xml 234c234,236 < @@ -257,6 +398,23 @@ diff /Users/hatkirby/Downloads/new_vn 2/judgment-33.xml datadir/vn/judgment-33.x < --- > +diff /Users/hatkirby/Downloads/new_vn 2/keep-15.2.xml datadir/vn/keep-15.2.xml +24,25c24 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/leave-51.2.xml datadir/vn/leave-51.2.xml +16,17c16 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/light_emission-43.1.xml datadir/vn/light_emission-43.1.xml +31c31 +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/manner_speaking-37.3.xml datadir/vn/manner_speaking-37.3.xml 264c264,266 < @@ -270,6 +428,17 @@ diff /Users/hatkirby/Downloads/new_vn 2/manner_speaking-37.3.xml datadir/vn/mann > > > +diff /Users/hatkirby/Downloads/new_vn 2/matter-91.xml datadir/vn/matter-91.xml +10c10 +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/modes_of_being_with_motion-47.3.xml datadir/vn/modes_of_being_with_motion-47.3.xml +64,65c64 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/other_cos-45.4.xml datadir/vn/other_cos-45.4.xml 534c534,536 < @@ -277,6 +446,11 @@ diff /Users/hatkirby/Downloads/new_vn 2/other_cos-45.4.xml datadir/vn/other_cos- > > > +diff /Users/hatkirby/Downloads/new_vn 2/pay-68.xml datadir/vn/pay-68.xml +13c13 +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/pocket-9.10.xml datadir/vn/pocket-9.10.xml 256c256,258 < @@ -292,7 +466,24 @@ diff /Users/hatkirby/Downloads/new_vn 2/poison-42.2.xml datadir/vn/poison-42.2.x > > diff /Users/hatkirby/Downloads/new_vn 2/pour-9.5.xml datadir/vn/pour-9.5.xml -59,61c59,62 +24,27c24 +< +< +< +< +--- +> +32,33c29 +< +< +--- +> +39,40c35 +< +< +--- +> +59,61c54,57 < < < @@ -301,7 +492,7 @@ diff /Users/hatkirby/Downloads/new_vn 2/pour-9.5.xml datadir/vn/pour-9.5.xml > > > -157,160c158,162 +157,160c153,157 < < < @@ -319,6 +510,31 @@ diff /Users/hatkirby/Downloads/new_vn 2/push-12.xml datadir/vn/push-12.xml > > > +diff /Users/hatkirby/Downloads/new_vn 2/put-9.1.xml datadir/vn/put-9.1.xml +35,36c35 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/put_direction-9.4.xml datadir/vn/put_direction-9.4.xml +30,31c30 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/put_spatial-9.2.xml datadir/vn/put_spatial-9.2.xml +25,26c25 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/reach-51.8.xml datadir/vn/reach-51.8.xml +12,13c12,13 +< +< +--- +> +> diff /Users/hatkirby/Downloads/new_vn 2/roll-51.3.1.xml datadir/vn/roll-51.3.1.xml 190c190,192 < @@ -357,8 +573,23 @@ diff /Users/hatkirby/Downloads/new_vn 2/seem-109.xml datadir/vn/seem-109.xml > > > +diff /Users/hatkirby/Downloads/new_vn 2/send-11.1.xml datadir/vn/send-11.1.xml +41,44c41 +< +< +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/slide-11.2.xml datadir/vn/slide-11.2.xml -69,72c69,73 +27,30c27 +< +< +< +< +--- +> +69,72c66,70 < < < @@ -369,7 +600,7 @@ diff /Users/hatkirby/Downloads/new_vn 2/slide-11.2.xml datadir/vn/slide-11.2.xml > > > -218,221c219,223 +218,221c216,220 < < < @@ -380,6 +611,22 @@ diff /Users/hatkirby/Downloads/new_vn 2/slide-11.2.xml datadir/vn/slide-11.2.xml > > > +diff /Users/hatkirby/Downloads/new_vn 2/smell_emission-43.3.xml datadir/vn/smell_emission-43.3.xml +12c12 +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/sound_emission-43.2.xml datadir/vn/sound_emission-43.2.xml +138c138 +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/sound_existence-47.4.xml datadir/vn/sound_existence-47.4.xml +21,22c21 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/spank-18.3.xml datadir/vn/spank-18.3.xml 69a70,72 > @@ -405,6 +652,12 @@ diff /Users/hatkirby/Downloads/new_vn 2/spank-18.3.xml datadir/vn/spank-18.3.xml > > > +diff /Users/hatkirby/Downloads/new_vn 2/spatial_configuration-47.6.xml datadir/vn/spatial_configuration-47.6.xml +66,67c66 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/split-23.2.xml datadir/vn/split-23.2.xml 59c59 < @@ -418,6 +671,41 @@ diff /Users/hatkirby/Downloads/new_vn 2/split-23.2.xml datadir/vn/split-23.2.xml < --- > +diff /Users/hatkirby/Downloads/new_vn 2/spray-9.7.xml datadir/vn/spray-9.7.xml +19,20c19 +< +< +--- +> +254,255c253 +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/steal-10.5.xml datadir/vn/steal-10.5.xml +55,58c55 +< +< +< +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/substance_emission-43.4.xml datadir/vn/substance_emission-43.4.xml +40c40 +< +--- +> +diff /Users/hatkirby/Downloads/new_vn 2/swarm-47.5.1.xml datadir/vn/swarm-47.5.1.xml +8,9c8 +< +< +--- +> +14,15c13 +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/swat-18.2.xml datadir/vn/swat-18.2.xml 264c264,266 < @@ -432,12 +720,25 @@ diff /Users/hatkirby/Downloads/new_vn 2/swat-18.2.xml datadir/vn/swat-18.2.xml > > diff /Users/hatkirby/Downloads/new_vn 2/tape-22.4.xml datadir/vn/tape-22.4.xml -364c364,366 +93,94c93 +< +< +--- +> +364c363,365 < --- > > > +diff /Users/hatkirby/Downloads/new_vn 2/throw-17.1.xml datadir/vn/throw-17.1.xml +27,30c27 +< +< +< +< +--- +> diff /Users/hatkirby/Downloads/new_vn 2/vehicle-51.4.1.xml datadir/vn/vehicle-51.4.1.xml 227c227,229 < @@ -468,18 +769,32 @@ diff /Users/hatkirby/Downloads/new_vn 2/want-32.1.xml datadir/vn/want-32.1.xml > > diff /Users/hatkirby/Downloads/new_vn 2/wipe_instr-10.4.2.xml datadir/vn/wipe_instr-10.4.2.xml -178c178,180 +26,27c26 +< +< +--- +> +37,38c36 +< +< +--- +> +178c176,178 < --- > > > diff /Users/hatkirby/Downloads/new_vn 2/wipe_manner-10.4.1.xml datadir/vn/wipe_manner-10.4.1.xml -198c198,199 +37,38c37 +< +< +--- +> +198c197 < --- -> -> +> diff /Users/hatkirby/Downloads/new_vn 2/wish-62.xml datadir/vn/wish-62.xml 91a92 > @@ -493,3 +808,8 @@ diff /Users/hatkirby/Downloads/new_vn 2/wish-62.xml datadir/vn/wish-62.xml > 122a124 > +diff /Users/hatkirby/Downloads/new_vn 2/withdraw-82.xml datadir/vn/withdraw-82.xml +7c7 +< +--- +> -- cgit 1.4.1