diff --git a/README.md b/README.md
index 26b4fc130..5b18a3afb 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Inform 7
-v10.1.0-alpha.1+6Q81 'Krypton' (28 July 2020)
+v10.1.0-alpha.1+6Q82 'Krypton' (29 July 2020)
## About Inform 7
diff --git a/build.txt b/build.txt
index 10eb61c24..b48a837ac 100644
--- a/build.txt
+++ b/build.txt
@@ -1,3 +1,3 @@
Prerelease: alpha.1
-Build Date: 28 July 2020
-Build Number: 6Q81
+Build Date: 29 July 2020
+Build Number: 6Q82
diff --git a/docs/basic_inform/S-md.html b/docs/basic_inform/S-md.html
index cb03ca43d..53ed9caa5 100644
--- a/docs/basic_inform/S-md.html
+++ b/docs/basic_inform/S-md.html
@@ -75,18 +75,16 @@ after an object is created).
Anobjectcanbeproper-namedorimproper-named. Anobjectisusuallyimproper-named.Anobjectcanbeambiguouslyplural.
-
§4. In the age of Inter as a target language, "translates into I6" is not to
-be taken literally. These are instead identifier names which will be used to
-annotate our Inter code.
+
§5. Variables. Most of the built-in kinds and kind constructors, such as "number" and
"list of K", are defined in special low-level files read in by Inform early
@@ -111,7 +109,7 @@ despite the definition below, it is not necessarily an object.)
§7. Rulebooks. The Standard Rules (for interactive fiction) create a wealth of rulebooks
and activities in order to model a fictional world. Here we are much more
@@ -135,7 +133,7 @@ template libraries. (Remember that creating an activity creates three rulebooks.
Startingthevirtualmachine (documentedatact_startvm) isanactivity.TheenableGlulxaccelerationruleislistedfirstinforstartingthevirtualmachine.
-TheenableGlulxaccelerationruletranslatesintoI6as"ENABLE_GLULX_ACCEL_R".
+TheenableGlulxaccelerationruletranslatesintoInteras"ENABLE_GLULX_ACCEL_R".
§8. However, the two activities for printing names of objects are indeed
functional in Basic Inform.
@@ -145,12 +143,14 @@ functional in Basic Inform.
Printingthenameofsomething (documentedatact_pn) isanactivity.Thestandardnameprintingruleislistedlastintheforprintingthenamerulebook.
-ThestandardnameprintingruletranslatesintoI6as"STANDARD_NAME_PRINTING_R".
+ThestandardnameprintingruletranslatesintoInteras"STANDARD_NAME_PRINTING_R".Printingthepluralnameofsomething (documentedatact_ppn) isanactivity.
-Thestandardprintingthepluralnameruleislistedlastintheforprintingthepluralnamerulebook.
-ThestandardprintingthepluralnameruletranslatesintoI6as"STANDARD_PLURAL_NAME_PRINTING_R".
+Thestandardprintingthepluralnameruleislistedlastintheforprintingthe
+pluralnamerulebook.
+ThestandardprintingthepluralnameruletranslatesintoInteras
+"STANDARD_PLURAL_NAME_PRINTING_R".
-inform_project *Task::project(void) {
+inform_project *Task::project(void) {if (inform7_task == NULL) internal_error("there is no current task");returninform7_task->project;}
@@ -211,7 +211,7 @@ rough stages. Twenty is plenty.
returninform7_task->project->as_copy->edition;}
-parse_node_tree *Task::syntax_tree(void) {
+parse_node_tree *Task::syntax_tree(void) {returnlatest_syntax_tree;}
@@ -496,7 +496,7 @@ it can all be generated again.
}
diff --git a/docs/core-module/10-aots.html b/docs/core-module/10-aots.html
index 0a43225af..58af9db91 100644
--- a/docs/core-module/10-aots.html
+++ b/docs/core-module/10-aots.html
@@ -437,7 +437,7 @@ back into the original tree but throw away the S-node head.
}
diff --git a/docs/core-module/10-cad.html b/docs/core-module/10-cad.html
index bfc9c6a0b..76a021a60 100644
--- a/docs/core-module/10-cad.html
+++ b/docs/core-module/10-cad.html
@@ -828,7 +828,7 @@ to the kind "thing", whereas "somebody" does refer to people and
diff --git a/docs/core-module/10-cap.html b/docs/core-module/10-cap.html
index 059965f35..e9d5fca20 100644
--- a/docs/core-module/10-cap.html
+++ b/docs/core-module/10-cap.html
@@ -501,7 +501,7 @@ limit that we were unable to construct a test case for it.
diff --git a/docs/core-module/10-pl.html b/docs/core-module/10-pl.html
index 868bdcf92..aaec91113 100644
--- a/docs/core-module/10-pl.html
+++ b/docs/core-module/10-pl.html
@@ -402,7 +402,7 @@ exponent increments, and we round to that power of 10 exactly.
}
diff --git a/docs/core-module/11-ap.html b/docs/core-module/11-ap.html
index ddc9b230e..a146aed0b 100644
--- a/docs/core-module/11-ap.html
+++ b/docs/core-module/11-ap.html
@@ -113,7 +113,7 @@ a pcalc_prop st
structpcalc_prop *next; next atom in the list for this proposition} pcalc_prop;
-
§3. The Universe is filled with atoms, but they come in different kinds, called
elements. For us, an "element" is the identifying number, stored in the
element field, which tells Inform what kind of atom something is. The
@@ -632,7 +632,7 @@ arity.)
diff --git a/docs/core-module/11-bas.html b/docs/core-module/11-bas.html
index de4bfc7da..d10e38ca0 100644
--- a/docs/core-module/11-bas.html
+++ b/docs/core-module/11-bas.html
@@ -599,7 +599,7 @@ since the time with which the proposition is concerned.
}
diff --git a/docs/core-module/11-itpc.html b/docs/core-module/11-itpc.html
index dbdad919e..4430f987a 100644
--- a/docs/core-module/11-itpc.html
+++ b/docs/core-module/11-itpc.html
@@ -436,7 +436,7 @@ but Inform does not at present make use of this.
diff --git a/docs/core-module/11-pr.html b/docs/core-module/11-pr.html
index d51ac83e5..92b86e039 100644
--- a/docs/core-module/11-pr.html
+++ b/docs/core-module/11-pr.html
@@ -933,7 +933,7 @@ created in Inform go through type-checking, so:
diff --git a/docs/core-module/11-sm.html b/docs/core-module/11-sm.html
index 300e2f4f3..370f82597 100644
--- a/docs/core-module/11-sm.html
+++ b/docs/core-module/11-sm.html
@@ -1412,7 +1412,7 @@ have no other consequence.
}
diff --git a/docs/core-module/12-ca.html b/docs/core-module/12-ca.html
index 0beae0387..efc71eaaa 100644
--- a/docs/core-module/12-ca.html
+++ b/docs/core-module/12-ca.html
@@ -489,7 +489,7 @@ we have to re-establish \(R(x, y)\) before we can proceed.
}
diff --git a/docs/core-module/12-cad.html b/docs/core-module/12-cad.html
index 21fcade97..913bb2834 100644
--- a/docs/core-module/12-cad.html
+++ b/docs/core-module/12-cad.html
@@ -305,7 +305,7 @@ kind is then part of the information recorded at deferral time.
}
diff --git a/docs/core-module/12-ter.html b/docs/core-module/12-ter.html
index 5c55a2785..83416dd7f 100644
--- a/docs/core-module/12-ter.html
+++ b/docs/core-module/12-ter.html
@@ -485,7 +485,7 @@ one that's more helpfully specific and return }
diff --git a/docs/core-module/13-ca.html b/docs/core-module/13-ca.html
index 9c382b5d7..c3d4baa77 100644
--- a/docs/core-module/13-ca.html
+++ b/docs/core-module/13-ca.html
@@ -439,7 +439,7 @@ always be small, partly because of the need for scaling to come out right.
diff --git a/docs/core-module/14-cfs.html b/docs/core-module/14-cfs.html
index 5a1d6b5e1..1ac5bfda7 100644
--- a/docs/core-module/14-cfs.html
+++ b/docs/core-module/14-cfs.html
@@ -275,7 +275,7 @@ a value in a context where a particular kind of value is expected:
}
diff --git a/docs/core-module/14-ds.html b/docs/core-module/14-ds.html
index 0fe0e676b..5d0520f54 100644
--- a/docs/core-module/14-ds.html
+++ b/docs/core-module/14-ds.html
@@ -485,7 +485,7 @@ the number of atoms in the proposition. So we simply use it as a sorting key.
diff --git a/docs/core-module/14-rv.html b/docs/core-module/14-rv.html
index 25e2b397b..0b608a3c3 100644
--- a/docs/core-module/14-rv.html
+++ b/docs/core-module/14-rv.html
@@ -338,7 +338,7 @@ together with their kinds:
-parse_node *Rvalues::from_wording(wordingW) {
+parse_node *Rvalues::from_wording(wordingW) {parse_node *spec = Node::new_with_words(CONSTANT_NT, W);Node::set_kind_of_value(spec, K_text);returnspec;
@@ -959,7 +959,7 @@ in several contexts by using a tilde:
diff --git a/docs/core-module/14-sp.html b/docs/core-module/14-sp.html
index 08b6ac527..76d3fafbf 100644
--- a/docs/core-module/14-sp.html
+++ b/docs/core-module/14-sp.html
@@ -396,7 +396,7 @@ meaning could be found.
}
diff --git a/docs/core-module/15-cp.html b/docs/core-module/15-cp.html
index 4ab828e43..e8932ec0a 100644
--- a/docs/core-module/15-cp.html
+++ b/docs/core-module/15-cp.html
@@ -247,7 +247,7 @@ becomes the name of a property.
}
diff --git a/docs/core-module/15-cr.html b/docs/core-module/15-cr.html
index e37d4f1d2..c62cbf5e8 100644
--- a/docs/core-module/15-cr.html
+++ b/docs/core-module/15-cr.html
@@ -192,7 +192,7 @@ so symmetrically; we rewrite the annotated schema on the fly.
}
diff --git a/docs/core-module/15-ia.html b/docs/core-module/15-ia.html
index c0d4e9382..e9cda6c1d 100644
--- a/docs/core-module/15-ia.html
+++ b/docs/core-module/15-ia.html
@@ -85,7 +85,7 @@ So as an interim measure the text is inferred into a pseudo-property called
diff --git a/docs/core-module/15-ma.html b/docs/core-module/15-ma.html
index c73be3409..1a9d2546b 100644
--- a/docs/core-module/15-ma.html
+++ b/docs/core-module/15-ma.html
@@ -697,7 +697,7 @@ prepositional usages to test property-equality ("the same height as").
diff --git a/docs/core-module/15-pov.html b/docs/core-module/15-pov.html
index ffd7335b3..5b561ff74 100644
--- a/docs/core-module/15-pov.html
+++ b/docs/core-module/15-pov.html
@@ -176,7 +176,7 @@ and it seems best to reject the extra complexity needed.
diff --git a/docs/core-module/15-pr.html b/docs/core-module/15-pr.html
index 4969a2b19..8445409d9 100644
--- a/docs/core-module/15-pr.html
+++ b/docs/core-module/15-pr.html
@@ -917,7 +917,7 @@ we find it, we compile it and return }
diff --git a/docs/core-module/15-spr.html b/docs/core-module/15-spr.html
index ba8970477..33473d52e 100644
--- a/docs/core-module/15-spr.html
+++ b/docs/core-module/15-spr.html
@@ -214,7 +214,7 @@ truncate to a reasonable length, ensuring that the result doesn't exceed
}
diff --git a/docs/core-module/16-cmw2.html b/docs/core-module/16-cmw2.html
index c76a282ca..a2acc37cb 100644
--- a/docs/core-module/16-cmw2.html
+++ b/docs/core-module/16-cmw2.html
@@ -104,7 +104,7 @@ to write anything, then put the same question to the subjects.
}
diff --git a/docs/core-module/16-ic.html b/docs/core-module/16-ic.html
index 5fd0d1b81..803e0e318 100644
--- a/docs/core-module/16-ic.html
+++ b/docs/core-module/16-ic.html
@@ -507,7 +507,7 @@ constants, and use the Link constants to progress; we stop at }
§7. Creation. The following routine coins a newly minted inference which is not yet attached
to any subject: but it will not stay unattached for long. Note that if nothing
has been said about likelihood, the sentence is assumed to be factually certain.
@@ -409,7 +409,7 @@ knowledge means that the inferences must have a certainty of likely or better.
}}
-parse_node *World::Inferences::get_prop_state(inference_subject *infs, property *prn) {
+parse_node *World::Inferences::get_prop_state(inference_subject *infs, property *prn) {if ((prn == NULL) || (infs == NULL)) returnNULL;inference_subject *k;for (k = infs; k; k = InferenceSubjects::narrowest_broader_subject(k)) {
@@ -439,7 +439,7 @@ knowledge means that the inferences must have a certainty of likely or better.
returnNULL;}
-parse_node *World::Inferences::get_prop_state_without_inheritance(inference_subject *infs,
+parse_node *World::Inferences::get_prop_state_without_inheritance(inference_subject *infs,property *prn, parse_node **where) {if ((prn == NULL) || (infs == NULL)) returnNULL;inference *inf;
@@ -458,7 +458,7 @@ has, and so on — is generated.
-voidWorld::Inferences::index(OUTPUT_STREAM, inference_subject *infs, intbrief) {
+voidWorld::Inferences::index(OUTPUT_STREAM, inference_subject *infs, intbrief) {inference *inf;KNOWLEDGE_LOOP(inf, infs, PROPERTY_INF)if (World::Inferences::get_property(inf) == P_specification) {
@@ -506,7 +506,7 @@ state of being boolean, and the given certainty levels:
returnUNKNOWN_CE;}
-voidWorld::Inferences::index_provided(OUTPUT_STREAM, inference_subject *infs, intbool, intc, char *cert, intbrief) {
+voidWorld::Inferences::index_provided(OUTPUT_STREAM, inference_subject *infs, intbool, intc, char *cert, intbrief) {intf = TRUE;property *prn;LOOP_OVER(prn, property) {
@@ -548,7 +548,7 @@ state of being boolean, and the given certainty levels:
-voidWorld::Inferences::index_specific(OUTPUT_STREAM, inference_subject *infs) {
+voidWorld::Inferences::index_specific(OUTPUT_STREAM, inference_subject *infs) {property *prn; intk = 0;LOOP_OVER(prn, property)if (Properties::is_shown_in_index(prn))
@@ -640,7 +640,7 @@ was probably a good thing.
-intWorld::Inferences::compare_inferences(inference *i1, inference *i2) {
+intWorld::Inferences::compare_inferences(inference *i1, inference *i2) {if (i1 == i2) returnCI_IDENTICAL;if (i1 == NULL) returnCI_DIFFER_IN_EXISTENCE;if (i2 == NULL) return -CI_DIFFER_IN_EXISTENCE;
@@ -695,11 +695,11 @@ was probably a good thing.
voidWorld::Inferences::diversion_on(void) {infs_diversion = TRUE;}
-voidWorld::Inferences::diversion_off(void) {
+voidWorld::Inferences::diversion_off(void) {infs_diversion = FALSE;}
-inference_subject *World::Inferences::divert_infs(inference_subject *infs) {
+inference_subject *World::Inferences::divert_infs(inference_subject *infs) { #ifdefIF_MODULEif (infs_diversion)if ((I_yourself) && (player_VAR) &&
@@ -724,7 +724,7 @@ then the routine exits without completing the loop.
-voidWorld::Inferences::join_inference(inference *i, inference_subject *infs) {
+voidWorld::Inferences::join_inference(inference *i, inference_subject *infs) {PROTECTED_MODEL_PROCEDURE;if (i == NULL) internal_error("joining null inference");if (infs == NULL) internal_error("joining to null inference subject");
@@ -976,7 +976,7 @@ bugs if inferences are incorrectly ignored.
diff --git a/docs/core-module/16-pp.html b/docs/core-module/16-pp.html
index 698a03003..519a31b0a 100644
--- a/docs/core-module/16-pp.html
+++ b/docs/core-module/16-pp.html
@@ -330,7 +330,7 @@ property — when indexing who can own it.
}
diff --git a/docs/core-module/17-rs.html b/docs/core-module/17-rs.html
index 12fd3c538..0b335e605 100644
--- a/docs/core-module/17-rs.html
+++ b/docs/core-module/17-rs.html
@@ -695,7 +695,7 @@ text needs to be printed in a particular way.
diff --git a/docs/core-module/17-ts.html b/docs/core-module/17-ts.html
index 663b07b01..b224b4d08 100644
--- a/docs/core-module/17-ts.html
+++ b/docs/core-module/17-ts.html
@@ -456,7 +456,7 @@ we aren't doing very much; most TSs will be passed quickly over.
}
diff --git a/docs/core-module/19-rsft.html b/docs/core-module/19-rsft.html
index 774199a4a..bde410f87 100644
--- a/docs/core-module/19-rsft.html
+++ b/docs/core-module/19-rsft.html
@@ -449,7 +449,7 @@ table values and prints the (title-cased) name of the one which matches.
}
diff --git a/docs/core-module/19-tod.html b/docs/core-module/19-tod.html
index 640b033c9..8e0d474d7 100644
--- a/docs/core-module/19-tod.html
+++ b/docs/core-module/19-tod.html
@@ -198,7 +198,6 @@ whatever is named in column 1.
switch (task) { "The colours are defined by Table 1."caseACCEPT_SMFT:if (<defined-by-sentence-object>(OW)) {
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);Annotations::write_int(V, examine_for_ofs_ANNOT, TRUE);parse_node *O = <<rp>>;<np-unparsed>(SW);
@@ -641,7 +640,7 @@ also ordinary sentences about the property value, and the former won't.
}
diff --git a/docs/core-module/2-si.html b/docs/core-module/2-si.html
index c30803fb9..b580a727d 100644
--- a/docs/core-module/2-si.html
+++ b/docs/core-module/2-si.html
@@ -416,7 +416,7 @@ own quaint syntax, and where there is syntax, there are error messages:
}
defineSTARTING_VIRTUAL_MACHINE_ACT0
@@ -157,7 +157,6 @@ is specified, since this would otherwise not be legal Inform.
switch (task) { "Description is an activity."caseACCEPT_SMFT:if (<bare-activity-sentence-object>(OW)) {
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-unparsed>(SW);V->next = <<rp>>;<np-unparsed>(OW);
@@ -817,7 +816,7 @@ values, of the kind to which the activity applies.
}
diff --git a/docs/core-module/21-rl2.html b/docs/core-module/21-rl2.html
index 636c4cb22..005f3c1d7 100644
--- a/docs/core-module/21-rl2.html
+++ b/docs/core-module/21-rl2.html
@@ -176,7 +176,7 @@ have affected it in this way:
CLASS_DEFINITION} placement_affecting;
-
§6. As rulebooks are declared, the first few are quietly copied into
a small array: that way, we can always obtain a pointer to, say, the
turn sequence rules by looking up built_in_rulebooks[TURN_SEQUENCE_RB].
@@ -1460,7 +1460,7 @@ popular rulebooks, showing their contents in logical order.
diff --git a/docs/core-module/22-cs.html b/docs/core-module/22-cs.html
index 1563acd3a..19ba24df6 100644
--- a/docs/core-module/22-cs.html
+++ b/docs/core-module/22-cs.html
@@ -326,8 +326,8 @@ only conditionally, or substituted by other rules.
(Node::get_type(p->down) == VERB_NT)) {prevailing_mood =Annotations::read_int(p->down, verbal_certainty_ANNOT);
-if (Annotations::read_int(p->down, verb_id_ANNOT) == SPECIAL_MEANING_VB)
-Assertions::Traverse::try_special_meaning(TRAVERSE_FOR_RULE_FILING_SMFT, p->down);
+if (Assertions::Traverse::special(p->down))
+Assertions::Traverse::try_special_meaning(TRAVERSE_FOR_RULE_FILING_SMFT, p->down); }}
@@ -608,7 +608,7 @@ can be called multiple times in the course of the evening.)
}
diff --git a/docs/core-module/22-dptd.html b/docs/core-module/22-dptd.html
index 1bfc373d4..e5f063445 100644
--- a/docs/core-module/22-dptd.html
+++ b/docs/core-module/22-dptd.html
@@ -1225,7 +1225,7 @@ in exactly one place: for example,
diff --git a/docs/core-module/22-ph.html b/docs/core-module/22-ph.html
index 198d9ff53..53348edef 100644
--- a/docs/core-module/22-ph.html
+++ b/docs/core-module/22-ph.html
@@ -589,7 +589,7 @@ response to "requests". All other phrases are compiled just once.
}
diff --git a/docs/core-module/22-pi.html b/docs/core-module/22-pi.html
index b56ad7bff..06693759d 100644
--- a/docs/core-module/22-pi.html
+++ b/docs/core-module/22-pi.html
@@ -337,7 +337,7 @@ above, it may as well go here.
}
diff --git a/docs/core-module/22-tp.html b/docs/core-module/22-tp.html
index 19d80e24b..dca34bc1b 100644
--- a/docs/core-module/22-tp.html
+++ b/docs/core-module/22-tp.html
@@ -399,7 +399,7 @@ is confined to the current Chapter.
}
diff --git a/docs/core-module/22-tp2.html b/docs/core-module/22-tp2.html
index 77670c964..c823f344e 100644
--- a/docs/core-module/22-tp2.html
+++ b/docs/core-module/22-tp2.html
@@ -90,7 +90,7 @@ defined as "At 9:00 AM: ..." But two values are special:
CLASS_DEFINITION} use_as_event;
-
diff --git a/docs/core-module/23-ad.html b/docs/core-module/23-ad.html
index 817f54549..f4e20d57e 100644
--- a/docs/core-module/23-ad.html
+++ b/docs/core-module/23-ad.html
@@ -334,7 +334,7 @@ offer the new adjective around and see if anybody claims it.
}
§4. A local variable needs to be stored somewhere at run-time. The obvious
correspondence is to put these into I6 local variables, which are, in effect,
CPU registers. We won't need to do much in the way of register-allocation,
@@ -1359,7 +1359,7 @@ need in the compilation of any given routine:
}
diff --git a/docs/core-module/24-sf.html b/docs/core-module/24-sf.html
index 07a263eb7..6712dcc33 100644
--- a/docs/core-module/24-sf.html
+++ b/docs/core-module/24-sf.html
@@ -405,7 +405,7 @@ a subarray of short blocks, indexed by the offset.
}
diff --git a/docs/core-module/25-ciac.html b/docs/core-module/25-ciac.html
index 0485f230c..eab626b62 100644
--- a/docs/core-module/25-ciac.html
+++ b/docs/core-module/25-ciac.html
@@ -164,7 +164,7 @@ then follow, and finally the optional bitmap of phrase options.
diff --git a/docs/core-module/25-cii.html b/docs/core-module/25-cii.html
index f1b5999d2..2cad9f664 100644
--- a/docs/core-module/25-cii.html
+++ b/docs/core-module/25-cii.html
@@ -2317,7 +2317,7 @@ of defined adjectives. So:
}
diff --git a/docs/core-module/25-pi.html b/docs/core-module/25-pi.html
index 1103bcdbb..c3d82a522 100644
--- a/docs/core-module/25-pi.html
+++ b/docs/core-module/25-pi.html
@@ -549,7 +549,7 @@ parser needs our help in the first place.)
diff --git a/docs/core-module/26-fc.html b/docs/core-module/26-fc.html
index 48860fc9d..5d1e6436c 100644
--- a/docs/core-module/26-fc.html
+++ b/docs/core-module/26-fc.html
@@ -210,7 +210,7 @@ Inform's own version number), but it belongs nowhere else either, so:
}
§1. Three readers. In the pre-2015 design of Inform, the I6T interpreter was a formidably complex
function. There was a special Main.i6t file which contained, essentially,
@@ -103,7 +103,7 @@ and +) Inform 7
I6T::interpreter_shared(Task::syntax_tree(), KINDT_MODE, NULL, NULL, NULL, -1, segment_file);}
-voidI6T::interpret_indext(filename *indext_file) {
+voidI6T::interpret_indext(filename *indext_file) {if (do_not_generate_index == FALSE)I6T::interpreter_shared(Task::syntax_tree(), INDEXT_MODE, NULL, NULL, NULL, -1, indext_file);}
@@ -383,28 +383,21 @@ time.) {-index:name} }
§3. Template errors. Errors here used to be basically failed assertions, but inevitably people
-reported this as a bug (0001596). It was never intended that I6T coding
-be part of the outside-facing language, but for a handful of people
-using template-hacking there are a handful of cases that can't be avoided, so...
+
§3. Indexing. And so, finally, the following triggers the indexing process.
-voidI6T::error(char *message) {
-Problems::quote_text(1, message);
-StandardProblems::handmade_problem(Task::syntax_tree(), _p_(...));
-Problems::issue_problem_segment(
-"I ran into a mistake in a template file command: %1. The I6 "
-"template files (or .i6t files) are a very low-level part of Inform, "
-"and errors like this will only occur if the standard installation "
-"has been amended or damaged. One possibility is that you're using "
-"an extension which does some 'template hacking', as it's called, "
-"but made a mistake doing so.");
-Problems::issue_problem_end();
+voidI6T::produce_index(void) {
+inform_project *project = Task::project();
+I6T::interpret_indext(
+Filenames::in(
+Languages::path_to_bundle(
+Projects::get_language_of_index(project)),
+Projects::index_structure(project)));}
diff --git a/docs/core-module/26-rt.html b/docs/core-module/26-rt.html
index bffcfff1b..2d6e0abc5 100644
--- a/docs/core-module/26-rt.html
+++ b/docs/core-module/26-rt.html
@@ -301,7 +301,7 @@ after the call parameters, and is used only as a scratch variable.
§1. Registration of sentence handlers. At this point in the tangled code, all of the assertion sentence handlers
+
§1. At this point in the tangled code, all of the assertion sentence handlers
— with names like TABLE_SH_handler — have now been created, so it is
safe to expand the following macros.
§1.1. This is all of the node types still present at the top level of the tree
-at the end of sentence-breaking.
-
-
-
Add sentence handlers for the top-level node types1.1 =
-
-
-
REGISTER_SENTENCE_HANDLER(TRACE_SH);REGISTER_SENTENCE_HANDLER(BEGINHERE_SH);REGISTER_SENTENCE_HANDLER(ENDHERE_SH);
@@ -100,22 +86,10 @@ at the end of sentence-breaking.
REGISTER_SENTENCE_HANDLER(EQUATION_SH);REGISTER_SENTENCE_HANDLER(HEADING_SH);REGISTER_SENTENCE_HANDLER(SENTENCE_SH);
+}
diff --git a/docs/core-module/26-tti.html b/docs/core-module/26-tti.html
index 2961e89f8..a8db600ef 100644
--- a/docs/core-module/26-tti.html
+++ b/docs/core-module/26-tti.html
@@ -135,7 +135,7 @@ will be required to pass <
§5.
-voidIdentifierTranslations::as(parse_node *pn) {
+voidIdentifierTranslations::as(parse_node *pn) {parse_node *p1 = pn->next;parse_node *p2 = pn->next->next;parse_node *responses_list = NULL;
@@ -243,7 +243,7 @@ traversing the parse tree to look for translation sentences of the right sort.
}
diff --git a/docs/core-module/26-uo.html b/docs/core-module/26-uo.html
index fb2b987b6..afa1c3ea5 100644
--- a/docs/core-module/26-uo.html
+++ b/docs/core-module/26-uo.html
@@ -148,7 +148,6 @@ by hand with a sentence in the source text.
switch (task) { "Use American dialect means ..."caseACCEPT_SMFT:if (<use-translates-as-sentence-subject>(SW)) {
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);V->next = <<rp>>;<np-unparsed>(OW);V->next->next = <<rp>>;
@@ -298,14 +297,15 @@ there is no need to translate this to other languages.)
§11.
-intUseOptions::use_SMF(inttask, parse_node *V, wording *NPs) {
+intUseOptions::use_SMF(inttask, parse_node *V, wording *NPs) {wordingOW = (NPs)?(NPs[1]):EMPTY_WORDING;switch (task) { "Use American dialect."caseACCEPT_SMFT:
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-articled-list>(OW);V->next = <<rp>>;returnTRUE;
+caseALLOW_IN_OPTIONS_FILE_SMFT:
+returnTRUE;caseTRAVERSE1_SMFT:caseTRAVERSE2_SMFT:UseOptions::set_use_options(V->next);
@@ -813,7 +813,7 @@ one to test them, one to print them.
}
diff --git a/docs/core-module/27-em.html b/docs/core-module/27-em.html
index ec42d52cf..ef58bf932 100644
--- a/docs/core-module/27-em.html
+++ b/docs/core-module/27-em.html
@@ -726,7 +726,7 @@ insert them into the Inter stream close to the top.
Produce::guard(Inter::Link::new(Packaging::at(Emit::tree()), (inter_ti) stage, ID1, ID2, ID3, ID4, ref, Produce::baseline(Packaging::at(Emit::tree())), NULL));}
-
The structure dval_written is private to this section.
§1. Traversing for primary verbs. The story so far: the supervisor module has arranged for the source
+text to be read in by words and has made a rudimentary parse tree for
+it using syntax. Certain "structural" sentences, such as headings, have
+been taken care of, and turned into nodes with types like HEADING_NT.
+
+
+
But the assertions we want to read — such as "The Mona Lisa is in the Louvre",
+or "The plural of major general is majors general" — are all simply
+SENTENCE_NT nodes with no children. The following traverse begins Inform's
+compilation process in earnest: for each such SENTENCE_NT node, it asks
+the linguistics module to identify a primary verb, noun phrases and so
+on, placing them in a subtree.
+
§2. Certain extra sentences, called "inventions", are sometimes created after
+that traverse takes place: those extra SENTENCE_NT nodes therefore won't
+be caught. Extra sentences can happen in two ways:
+
+
+
(a) When additional text is fed to the lexer and sentence-broken by the
+syntax module, at which point syntax calls the function below
+because we have given it as a callback.
+
(b) When explicit rearrangement of the tree causes new SENTENCE_NT nodes
+to be created. Any code doing this should call the following function
+explicitly.
+
§3. Textual sentences. "Textual" sentences are not really sentences at all, and are just double-quoted
+text used in isolation — Inform sometimes recognises these as being implicit
+property values, as for the description of a room just created. These sentences
+are necessarily exempt from having a primary verb.
+
§4. Classifying a single sentence. Every SENTENCE_NT node, however it is constructed, therefore ends up here,
+and we ask the linguistics module to "diagram" it.
+
+StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_TwoLikelihoods),
+"this sentence seems to have a likelihood qualification on both "
+"sides of the verb",
+"which is not allowed. 'The black door certainly is usually open' "
+"might possibly be grammatical English in some idioms, but Inform "
+"doesn't like a sentence in this shape because the 'certainly' "
+"on one side of the verb and the 'usually' on the other are "
+"rival indications of certainty.");
+
§4.2. Only special-meaning sentences are allowed in Options files, and not all
+of those.
+
+
+
Check that this is allowed, if it occurs in the Options file4.2 =
+
+
+
+if (Wordings::within(Node::get_text(p), options_file_wording)) {
+special_meaning_holder *sm = Node::get_special_meaning(p->down);
+if ((sm == NULL) ||
+ (SpecialMeanings::call(sm, ALLOW_IN_OPTIONS_FILE_SMFT, NULL, NULL) == FALSE))
+StandardProblems::unlocated_problem(Task::syntax_tree(),
+_p_(BelievedImpossible), not convenient to test automatically, anyway
+"The options file placed in this installation of Inform's folder "
+"is incorrect, making use of a sentence form which isn't allowed "
+"in that situation. The options file is only allowed to contain "
+"use options, Test ... with..., and Release along with... "
+"instructions.");
+ }
+
§5. From the earliest beta-testing, the problem message for "I can't find a verb"
+split into cases. Inform is quite sensitive to punctuation errors as between
+comma, paragraph break and semicolon, and this is where that sensitivity begins
+to bite. The grammar below is just a set of heuristics, really: once we enter
+this, a problem message of some kind will certainly result.
+
+StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_RuleWithoutColon),
+"I can't find a verb that I know how to deal with, so can't do anything "
+"with this sentence. It looks as if it might be a rule definition",
+"but if so then it is lacking the necessary colon (or comma). "
+"The punctuation style for rules is 'Rule conditions: do this; "
+"do that; do some more.' Perhaps you used a full stop instead "
+"of the colon?");
+
+StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_IfOutsidePhrase),
+"I can't find a verb that I know how to deal with. This looks like an 'if' "
+"phrase which has slipped its moorings",
+"so I am ignoring it. ('If' phrases, like all other such "
+"instructions, belong inside definitions of rules or phrases - "
+"not as sentences which have no context. Maybe a full stop or a "
+"skipped line was accidentally used instead of semicolon, so that you "
+"inadvertently ended the last rule early?)");
+
+Problems::quote_source(1, current_sentence);
+StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NoSuchVerbComma));
+Problems::issue_problem_segment(
+"In the sentence %1, I can't find a verb that I know how to deal with. "
+"(I notice there's a comma here, which is sometimes used to abbreviate "
+"rules which would normally be written with a colon - for instance, "
+"'Before taking: say \"You draw breath.\"' can be abbreviated to 'Before "
+"taking, say...' - but that's only allowed for Before, Instead and "
+"After rules. I mention all this in case you meant this sentence "
+"as a rule in some rulebook, but used a comma where there should "
+"have been a colon ':'?)");
+Problems::issue_problem_end();
+
+Problems::quote_source(1, current_sentence);
+StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NoSuchVerb));
+Problems::issue_problem_segment(
+"In the sentence %1, I can't find a verb that I know how to deal with.");
+Problems::issue_problem_end();
+
+if (Annotations::read_int(current_sentence, verb_problem_issued_ANNOT) == FALSE) {
+Annotations::write_int(current_sentence, verb_problem_issued_ANNOT, TRUE);
+StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_NonPresentTense),
+"assertions about the initial state of play must be given in the "
+"present tense",
+"so 'The cat is in the basket' is fine but not 'The cat has been in "
+"the basket'. Time is presumed to start only when the game begins, so "
+"there is no anterior state which we can speak of.");
+ }
+
§3. Parsing. The following matches the English-language name of a language: for example,
-"French". It will only make a match if Inform has successfully found a
-bundle for that language during its initial scan.
-
§4. The natural language kind. Inform has a kind built in called "natural language", whose values are
-enumerated names: English language, French language, German language and so on.
-When the kind is created, the following routine makes these instances. We do
-this exactly as we would to create any other instance — we write a logical
-proposition claiming its existence, then assert this to be true. It's an
-interesting question whether the possibility of the game having been written
-in German "belongs" in the model world, if in fact the game wasn't written
-in German; but this is how we'll do it, anyway.
-
§5. The adaptive person. The following is only relevant for the language of play, whose extension will
-always be read in. That in turn is expected to contain a declaration like
-this one:
-
-
-
-
The adaptive text viewpoint of the French language is second person singular.
-
-
-
The following routine picks up on the result of this declaration. (We cache
-this because we need access to it very quickly when parsing text substitutions.)
-
-voidNaturalLanguages::preform_error(word_assemblagebase_text, nonterminal *nt,
-production *pr, char *message) {
-if (pr) {
-LOG("The production at fault is:\n");
-Instrumentation::log_production(pr, FALSE); LOG("\n");
- }
-if (nt == NULL)
-Problems::quote_text(1, "(no nonterminal)");
-else
-Problems::quote_wide_text(1, Vocabulary::get_exemplar(nt->nonterminal_id, FALSE));
-Problems::quote_text(2, message);
-StandardProblems::handmade_problem(Task::syntax_tree(), _p_(Untestable));
-if (WordAssemblages::nonempty(base_text)) {
-Problems::quote_wa(5, &base_text);
-Problems::issue_problem_segment(
-"I'm having difficulties conjugating the verb '%5'. ");
- }
-
-TEMPORARY_TEXT(TEMP)
-if (pr) {
-Problems::quote_number(3, &(pr->match_number));
-ptoken *pt;
-for (pt = pr->first_pt; pt; pt = pt->next_pt) {
-Instrumentation::write_ptoken(TEMP, pt);
-if (pt->next_pt) WRITE_TO(TEMP, " ");
- }
-Problems::quote_stream(4, TEMP);
-Problems::issue_problem_segment(
-"There's a problem in Inform's linguistic grammar, which is probably "
-"set by a translation extension. The problem occurs in line %3 of "
-"%1 ('%4'): %2.");
- } else {
-Problems::issue_problem_segment(
-"There's a problem in Inform's linguistic grammar, which is probably "
-"set by a translation extension. The problem occurs in the definition of "
-"%1: %2.");
- }
-Problems::issue_problem_end();
-DISCARD_TEXT(TEMP)
-}
-
§1. Sentences like "the plural of cherub is cherubim" are hardly needed now,
+because the inflections module now contains a full implementation of
+Conway's algorithm. Still, we keep the syntax around, and it may one day be
+useful again for languages other than English.
+
-
§1. Stocking the plurals dictionary. The user gives us plurals with special sentences, whose subject is like so:
+
§2. We take immediate action on parsing the sentence, and after that ignore it
-as having been dealt with.
+
§2. Note that we are saved later grief by not allowing a plural form which
+would be illegal as a new noun: allowing "The plural of thing is ," would not
+end well.
-
Note that we are entirely allowed to register a new plural for a phrase
-which already has a plural in the dictionary, which is why we do not
-trouble to search the existing dictionary here.
+
intPlurals::plural_SMF(inttask, parse_node *V, wording *NPs) {wordingSW = (NPs)?(NPs[0]):EMPTY_WORDING;wordingOW = (NPs)?(NPs[1]):EMPTY_WORDING;
-switch (task) { "The plural of woman is women."
+switch (task) { "The plural of seraph is seraphim."caseACCEPT_SMFT:
-FSW = SW; FOW = OW;if (<plural-sentence-subject>(SW)) {
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);V->next = <<rp>>;<np-unparsed>(OW);V->next->next = <<rp>>;wordingS = Node::get_text(V->next);wordingP = Node::get_text(V->next->next);
-Forbid plural declarations containing quoted text2.1;
+Forbid plural declarations containing quoted text2.1;if (Assertions::Creator::vet_name_for_noun(P) == FALSE) returnTRUE;Pluralisation::register(S, P, DefaultLanguage::get(NULL));returnTRUE;
@@ -120,8 +121,9 @@ text anyway, so the following problem messages are not too gratuitous.
LOOP_THROUGH_WORDING(i, S)
-if (Vocabulary::test_flags(i, TEXT_MC+TEXTWITHSUBS_MC)) {
-StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_PluralOfQuoted),
+if (Vocabulary::test_flags(i, TEXT_MC + TEXTWITHSUBS_MC)) {
+StandardProblems::sentence_problem(Task::syntax_tree(),
+_p_(PM_PluralOfQuoted),"declares a plural for a phrase containing quoted text","which is forbidden. Sentences like this are supposed to ""declare plurals without quotation marks: for instance, "
@@ -129,8 +131,9 @@ text anyway, so the following problem messages are not too gratuitous.
returnTRUE; }LOOP_THROUGH_WORDING(i, P)
-if (Vocabulary::test_flags(i, TEXT_MC+TEXTWITHSUBS_MC)) {
-StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_PluralIsQuoted),
+if (Vocabulary::test_flags(i, TEXT_MC + TEXTWITHSUBS_MC)) {
+StandardProblems::sentence_problem(Task::syntax_tree(),
+_p_(PM_PluralIsQuoted),"declares a plural for a phrase using quoted text","which is forbidden. Sentences like this are supposed to ""declare plurals without quotation marks: for instance, "
@@ -138,9 +141,9 @@ text anyway, so the following problem messages are not too gratuitous.
returnTRUE; }
§5. Translation into Inter. The sentence "X translates into Y as Z" has this sense provided Y matches the
+following. Before the coming of Inter code, the only conceivable compilation
+target was Inform 6, but these now set Inter identifiers, so really the first
+wording is to be preferred.
+
diff --git a/docs/core-module/4-its.html b/docs/core-module/4-its.html
index 5bfe404d0..60ffef6bb 100644
--- a/docs/core-module/4-its.html
+++ b/docs/core-module/4-its.html
@@ -26,14 +26,6 @@ MathJax = {
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
-
-
-
@@ -284,60 +276,8 @@ unifying construction: the pa
whole thing into a specification for the rest of Inform to use.
diff --git a/docs/core-module/5-lp.html b/docs/core-module/5-lp.html
index ba4a90352..4f0ba1e0d 100644
--- a/docs/core-module/5-lp.html
+++ b/docs/core-module/5-lp.html
@@ -271,7 +271,7 @@ mass might also support "in kilograms" and "in grams", for instance.
CLASS_DEFINITION} literal_pattern_name;
-
@@ -2629,7 +2629,6 @@ and this causes no trouble.
if (<np-unparsed>(OW)) {parse_node *O = <<rp>>;V->next = S; V->next->next = O;
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);returnTRUE; } }
@@ -3613,7 +3612,7 @@ attached to the same kind, and they become alternative syntaxes.)
}
diff --git a/docs/core-module/5-tod.html b/docs/core-module/5-tod.html
index dfa5e953f..961fb71bb 100644
--- a/docs/core-module/5-tod.html
+++ b/docs/core-module/5-tod.html
@@ -274,7 +274,7 @@ a specific time of day, or when a named event occurs.
diff --git a/docs/core-module/5-uem.html b/docs/core-module/5-uem.html
index f0dd0f453..e6850a1bd 100644
--- a/docs/core-module/5-uem.html
+++ b/docs/core-module/5-uem.html
@@ -194,7 +194,7 @@ following. (The six highest bits are defined in the }
§1. Identifiers. Since I6 identifiers compiled by Inform are usually based on the names of
the things they represent — a typical example would be I45_silver_bars —
@@ -177,73 +176,8 @@ instance, the Standard Rules want the player-character object to be called
}
diff --git a/docs/core-module/5-ut.html b/docs/core-module/5-ut.html
index 18f4180e7..306fb6b16 100644
--- a/docs/core-module/5-ut.html
+++ b/docs/core-module/5-ut.html
@@ -73,7 +73,7 @@ a new name and its meaning to be.
-voidUnicodeTranslations::unicode_translates(parse_node *pn) {
+voidUnicodeTranslations::unicode_translates(parse_node *pn) {if (<translates-into-unicode-sentence-object>(Node::get_text(pn->next->next)) == FALSE) return;intcc = <<r>>;if (UnicodeTranslations::char_in_range(cc) == FALSE) return;
@@ -180,7 +180,7 @@ the player types either of these:
}
diff --git a/docs/core-module/6-bp.html b/docs/core-module/6-bp.html
index 5d092541a..c68a8bb0f 100644
--- a/docs/core-module/6-bp.html
+++ b/docs/core-module/6-bp.html
@@ -1289,7 +1289,7 @@ above. This happens very early in compilation.
}
diff --git a/docs/core-module/6-tur.html b/docs/core-module/6-tur.html
index ae4b02436..d96234af8 100644
--- a/docs/core-module/6-tur.html
+++ b/docs/core-module/6-tur.html
@@ -213,7 +213,7 @@ can't be changed at compile time, but the universal relation can.
}
§1. World objects under each heading. Every heading must carry with it a linked list of the nametags created in
+
§1. World objects under each heading. Every heading must carry with it a linked list of the nouns created in
sentences which belong to it. So when any noun is created, the following
is called to let the current sentence's heading know that it has a new
friend.
@@ -473,7 +473,7 @@ organisation, and are not directly functional in themselves.
{ HEADING_NT, -1, 0, Sentences::Headings::handle_heading };voidSentences::Headings::handle_heading(parse_node *PN) {
-Assertions::Traverse::new_discussion();
+Assertions::Traverse::new_discussion();}
§14. Describing the heading structure, 1: to the debugging log. Finally, three ways to describe the run of headings: to the debugging log,
@@ -557,7 +557,7 @@ surreptitiously check that it is correctly formed at the same time.
}}
-
§2. At this point in the narrative, we have read files from disc, lexed the text
-into a stream of words, and broken this into a list of sentences; we have
-identified requests to include extensions, and fully acted on these, so that
-we can now forget about that whole complication; and we have built a tree
-of headings and subheadings (and file divisions) so that we have a clear map
-of the overall structure of the source text. Sentences intended for use only
-in some circumstances (for instance, when compiling for the Glulx virtual
-machine) have been omitted as necessary, so that we can forget about that
-complication, too.
-
-
-
This gives as much information as we can squeeze out by easily specified
-mechanical means: we have attacked the text at the very small scale, letters
-and words, and at the very large, headings and files. This zig-zag in scale
-will continue. In the rest of this chapter, we find the overall structure of
-sentences.
-
-
-
§3. The parse tree is currently a long, long list: each sentence is a node
-which is a child of the root, but no sentence has any child nodes of its own.
-(That is about to change.) We can divide these sentences into three:
-
-
-
(a) Structural sentences — headings, extension requests, extension bookends.
-All these have now been dealt with.
-
(b) Sentences inside rules: rule preambles (RULE_NT nodes)
-and phrases (INVOCATION_LIST_NT). These will not even be looked at until the
-second phase of compilation, after the model world has been created.
-
(c) Sentences with primary verbs, having node type SENTENCE_NT. These are
-the assertions: they make statements about the initial state of the model
-world — the existence of places and things, and their properties at the
-start of play — and which describe patterns of behaviour during play.
-
-
In the present section of code, then, we identify the primary verbs of
-assertion sentences, and deal right away with some of the easier cases,
-while leaving the harder ones for later.
-
-
-
§4. Every SENTENCE_NT node is annotated with a verb type from the enumeration
-below. All of the assertions which create objects and kinds, and put them
-into relationships with each other — a tremendous variety of possible
-sentences, between them making up about three-quarters of all SENTENCE_NT
-nodes in typical source — fall into one of two verb types:
-
-
-
defineASSERT_VB10 "The bat and ball are on the table."
-
-
§5. Finally, the remaining verb types are all direct commands to Inform —
-note the imperative forms they take: Use, Understand, Include, and so forth.
-In a sense the whole source text is an instruction to Inform, but mostly
-it's a passive one: the implicit message is "make the world so that all
-this comes right". Here, on the other hand, the user actually speaks
-directly. This is a point of the design which has sometimes seemed a little
-doubtful — wouldn't it be more consistent for all of these sentences to be
-more passively worded? — but pragmatism won out: circumlocutions such as
-"American dialect is used." or "The story file is released along with..."
-are plausible enough, but
-
-
-
-
"take noun" is understood as taking the noun.
-
-
-
would mean a lot of important sentences being oddly punctuated with no
-initial capital letter, while forcing meaningless extra words, as in
-
-
-
-
The command "take noun" is understood as taking the noun.
-
-
-
might prove annoying. Users seem to find the directness of the imperative
-easier to use, at any rate, and perhaps the difference in mood helps to
-clarify that these are sentences rather different in implication from
-the usual sort.
-
-
-
defineSPECIAL_MEANING_VB70
-
-
§6. This isn't a verb, and is used only to mark errors:
-
-
-
defineBAD_NONVERB1000
-
-
§7.
-
-
-wordingFOW, FSW;
-
-
§8. Traversing for primary verbs. As with headings, so with SENTENCE_NT nodes: we want the ability to
-come back later and add some more. That means that the primary-verb-finder
-needs to be able to make more than one pass through. To handle this, all
-SENTENCE_NT nodes are annotated on creation with the "sentence
-unparsed" marker: we run through the top level of the parse tree,
-look at all nodes with this marker, parse their associated sentences,
-and remove the marker from them. (So, for instance, if this is run twice
-in quick succession, the second run-through does nothing.)
-
§9. To break up an individual sentence into noun phrases and a verb phrase
-is quite simple: we feed it to the <nonstructural-sentence> grammar,
-and if that doesn't work, we feed it to <bad-nonstructural-sentence-diagnosis>
-to look for a good contextual problem message.
-
§14. Here, then, is one of Inform's largest grammars, <nonstructural-sentence>.
-
-
-
It's large because of the many exceptional, ad-hoc-looking syntaxes, and at
-first sight those seem unnecessary: why not simply define more built-in verbs
-and relations, and handle them as regular sentences? The answer to this is that
-they have an irregular structure to them. Consider:
-
-
-
-
Trampling is an action applying to nothing.
-
-
-
This doesn't conform to the pattern of a verb plus a subject and object
-noun phrase, each of which refers to some value.
-
-
-
An arguably inconsistent feature of the design of Inform is that some of these
-sentences take the imperative mood:
-
-
-
-
Release along with the solution.
-
-
-
rather than the indicative ("The ball is in the box") which is otherwise
-used for all Inform sentences other than rule definitions. Sometimes I think
-this is a mistake, sometimes a virtue. In the case of "Release along", for
-instance, we're telling the computer to do something, rather than telling
-the computer about something — which seems a worthwhile distinction. In the
-case of "Understand X as Y", though, it could be argued that an indicative
-use of "X means Y" would work better. (It was actually Andrew Plotkin's
-suggestion that we use "Understand", and it stuck.) At any rate, it's too
-late now, and I ask translators into natural languages to follow the same
-pattern: use imperatives if the English does, and use indicatives otherwise.
-
-
-
Note also that "Index map with..." is an imperative, with the verb being
-"to index", that is, it's an instruction to make a map; "index map" is
-not a noun phrase here.
-
-
-
The ordering of the sentences in this nonterminal is important. A few notes:
-
-
-
(a) We check Unicode translations first of all, because we haven't any control
-over the wording of character names in the Unicode standard. Among the 12,997
-definitions used in the Unicode Full Character Names extension are such choice
-examples as "downwards arrow from bar", "arabic hamza above", "kangxi
-radical use" and so forth, and we don't want to misread "from", "above",
-"use", and so on, as prepositions or verbs: in sentences like this one
-they are nouns.
-
(b) Any sentence form with "is" or "has" in it must be checked before
-regular sentences are checked: "X is an action...", for instance, is
-otherwise easily mistaken for a regular assertion.
-
(c) We could conceivably have implemented "action" and "activity" as
-pseudo-kinds, and thus handled sentences like these through ordinary
-assertions, but it would have been a lot of fuss. So we do it the
-simple-minded way.
-
(d) Note that activity declarations always simply end "is an activity.",
-thus having nothing interesting by way of an object noun phrase, whereas
-action declarations continue with usually extensive further text:
-"... is an action applying to two visible things.", say.
-
-StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_TwoLikelihoods),
-"this sentence seems to have a likelihood qualification on both "
-"sides of the verb",
-"which is not allowed. 'The black door certainly is usually open' "
-"might possibly be grammatical English in some idioms, but Inform "
-"doesn't like a sentence in this shape because the 'certainly' "
-"on one side of the verb and the 'usually' on the other are "
-"rival indications of certainty.");
-
§15. In all other cases it's routine to construct the subtree, which typically
-gives the sentence node three children: verb phrase, subject noun phrase,
-object noun phrase.
-
-
-
- SENTENCE_NT "Railway Departure begins when the player is in the train"
- VERB_NT "begins when"
- PROPER_NOUN_NT "Railway Departure"
- PROPER_NOUN_NT "the player is in the train"
-
-
This is made by Sentences::VPs::nss_tree2, but there are variants for one noun phrase or three.
-
§16. In the assertion parser, any text at all can be a noun phrase. However,
-to disambiguate sentences we sometimes want to insist that it takes a
-particular form: for instance <nounphrase-figure> matches any text ending
-in the word "figure".
-
-
-
<nounphrase-actionable> is an awkward necessity, designed to prevent the
-regular sentence
-
-
-
-
The impulse is an action name that varies.
-
-
-
from being parsed as an instance of "... is an action ...", creating a
-new action.
-
§19. This final case never matches a legal sentence: it simply hoovers up
-usages of past tense assertion verbs in order to give them a better
-Problem message than the one they will otherwise receive later on.
-
-if (Annotations::read_int(current_sentence, verb_problem_issued_ANNOT) == FALSE) {
-Annotations::write_int(current_sentence, verb_problem_issued_ANNOT, TRUE);
-StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_NonPresentTense),
-"assertions about the initial state of play must be given in the "
-"present tense",
-"so 'The cat is in the basket' is fine but not 'The cat has been in "
-"the basket'. Time is presumed to start only when the game begins, so "
-"there is no anterior state which we can speak of.");
- }
-
-
-
-
-
-
-
diff --git a/docs/core-module/7-oaf.html b/docs/core-module/7-oaf.html
index acc4eb535..e6d39809e 100644
--- a/docs/core-module/7-oaf.html
+++ b/docs/core-module/7-oaf.html
@@ -166,7 +166,7 @@ roof, since it might need to recurse thousands of function calls deep.
-if ((Annotations::read_int(pn, verb_id_ANNOT) == ASSERT_VB)
+if ((Assertions::Traverse::special(pn) == FALSE) && (pn->next) && (pn->next->next) && (Assertions::Copular::possessive(pn->next->next))
@@ -393,18 +393,18 @@ wastes only a negligible amount of memory.
voidSentences::Rearrangement::traverse_for_nonbreaking_ofs(parse_node *pn) {if ((Node::get_type(pn) == SENTENCE_NT) && (pn->down) && (Node::get_type(pn->down) == VERB_NT)) {
-intvn = Annotations::read_int(pn->down, verb_id_ANNOT);
-if (((vn == ASSERT_VB) || (Annotations::read_int(pn->down, examine_for_ofs_ANNOT))) &&
+intvn = Assertions::Traverse::special(pn->down);
+if (((vn == FALSE) || (Annotations::read_int(pn->down, examine_for_ofs_ANNOT))) && (<sentence-needing-second-look>(Node::get_text(pn)))) {current_sentence = pn; (just in case any problem messages are issued)pn->down = NULL; thus cutting off and forgetting its former subtree
-Sentences::VPs::seek(pn); ...in order to make a new one
+Classifying::visit_extra_sentence(pn); ...in order to make a new one } }}
diff --git a/docs/core-module/7-ptu.html b/docs/core-module/7-ptu.html
index 658d25e0e..e0c1bf9fe 100644
--- a/docs/core-module/7-ptu.html
+++ b/docs/core-module/7-ptu.html
@@ -249,7 +249,6 @@ also makes it easier for us to manipulate the results.
Annotations::allow_for_category(L2_NCAT, clears_pronouns_ANNOT);Annotations::allow_for_category(L2_NCAT, interpretation_of_subject_ANNOT);
-Annotations::allow_for_category(L2_NCAT, sentence_unparsed_ANNOT);Annotations::allow_for_category(L2_NCAT, verb_problem_issued_ANNOT);Annotations::allow(RULE_NT, indentation_level_ANNOT);Annotations::allow(SENTENCE_NT, implicit_in_creation_of_ANNOT);
@@ -268,11 +267,8 @@ also makes it easier for us to manipulate the results.
Annotations::allow(ADJECTIVE_NT, aph_ANNOT);Annotations::allow(ADJECTIVE_NT, negated_boolean_ANNOT);Annotations::allow(ADJECTIVE_NT, article_ANNOT);
-Annotations::allow(VERB_NT, log_inclusion_sense_ANNOT);
-Annotations::allow(VERB_NT, verb_id_ANNOT);
-Annotations::allow(VERB_NT, imperative_ANNOT);Annotations::allow(VERB_NT, examine_for_ofs_ANNOT);
-Annotations::allow(VERB_NT, listing_sense_ANNOT);
+Annotations::allow(VERB_NT, rule_placement_sense_ANNOT);Annotations::allow(COMMON_NOUN_NT, action_meaning_ANNOT);Annotations::allow(COMMON_NOUN_NT, creation_site_ANNOT);Annotations::allow(COMMON_NOUN_NT, multiplicity_ANNOT);
@@ -283,7 +279,6 @@ also makes it easier for us to manipulate the results.
Annotations::allow(PROPER_NOUN_NT, creation_site_ANNOT);Annotations::allow(UNPARSED_NOUN_NT, defn_language_ANNOT);Annotations::allow(PROPER_NOUN_NT, defn_language_ANNOT);
-Annotations::allow(PROPER_NOUN_NT, log_inclusion_sense_ANNOT);Annotations::allow(PROPER_NOUN_NT, lpe_options_ANNOT);Annotations::allow(PROPER_NOUN_NT, multiplicity_ANNOT);Annotations::allow(PROPER_NOUN_NT, negated_boolean_ANNOT);
@@ -316,10 +311,7 @@ also makes it easier for us to manipulate the results.
Annotations::allow_for_category(L4_NCAT, verb_problem_issued_ANNOT);Annotations::allow_for_category(L4_NCAT, problem_falls_under_ANNOT);Annotations::allow_for_category(L4_NCAT, module_ANNOT);
-Annotations::allow(CODE_BLOCK_NT, sentence_unparsed_ANNOT);Annotations::allow(INVOCATION_LIST_NT, from_text_substitution_ANNOT);
-Annotations::allow(INVOCATION_LIST_NT, sentence_unparsed_ANNOT);
-Annotations::allow(INVOCATION_LIST_SAY_NT, sentence_unparsed_ANNOT);Annotations::allow(INVOCATION_LIST_SAY_NT, suppress_newlines_ANNOT);Annotations::allow(INVOCATION_NT, epistemological_status_ANNOT);Annotations::allow(INVOCATION_NT, kind_resulting_ANNOT);
@@ -530,9 +522,6 @@ be such that their head nodes each pass this test:
WRITE(" (x%d)", Annotations::read_int(pn, multiplicity_ANNOT));show_refers = TRUE;break;
-caseVERB_NT:
-WRITE(" ($V)", Annotations::read_int(pn, verb_id_ANNOT));
-break;caseTOKEN_NT:WRITE(" [%d/%d]", Annotations::read_int(pn, slash_class_ANNOT),Annotations::read_int(pn, slash_dash_dash_ANNOT)); break;caseINVOCATION_LIST_NT:
@@ -570,12 +559,8 @@ be such that their head nodes each pass this test:
VerifyTree::verify_structure(Task::syntax_tree());}
diff --git a/docs/core-module/7-rs.html b/docs/core-module/7-rs.html
index f24027230..9059430eb 100644
--- a/docs/core-module/7-rs.html
+++ b/docs/core-module/7-rs.html
@@ -1612,7 +1612,7 @@ match a given begin node.
}
§4. For reasons to do with timing, each object needs to keep track of which
generalisations have and have not yet applied to it. In practice, this is
a list of pairs \((K, g)\) where \(K\) is a kind and \(g\) is the most recent one
@@ -138,7 +138,7 @@ applied from \(K\)'s list.
structapplication *next;} application;
-
§5. These structures are combined in the following packet of data attached to
each inference subject:
@@ -452,7 +452,6 @@ we actually do is to insert new sentences after the current one.
make the new sentence an assertion:new_sentence->down = Node::new(VERB_NT);
-Annotations::write_int(new_sentence->down, verb_id_ANNOT, ASSERT_VB);new_sentence->down->next = Node::new(CREATED_NT);Node::copy_subtree(g->look_for, new_sentence->down->next, 0);new_sentence->down->next->next = Node::new(CREATED_NT);
@@ -508,7 +507,7 @@ machinery is in infinite regress, e.g., because each \(K\) must contain an
diff --git a/docs/core-module/9-ita.html b/docs/core-module/9-ita.html
index 27ed1bcf1..43838621a 100644
--- a/docs/core-module/9-ita.html
+++ b/docs/core-module/9-ita.html
@@ -250,7 +250,7 @@ That story will be taken up in a later chapter.
diff --git a/docs/core-module/9-pd.html b/docs/core-module/9-pd.html
index fc028f34c..52cc22604 100644
--- a/docs/core-module/9-pd.html
+++ b/docs/core-module/9-pd.html
@@ -91,7 +91,6 @@ Y or Z...".
switch (task) { "A room is either dark or lighted."caseACCEPT_SMFT:if (<either-sentence-object>(OW)) {
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);parse_node *O = <<rp>>;<np-unparsed>(SW);V->next = <<rp>>;
@@ -114,7 +113,6 @@ Y or Z...".
wordingOW = (NPs)?(NPs[1]):EMPTY_WORDING;switch (task) { "A room can be dark or lighted."caseACCEPT_SMFT:
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-unparsed>(OW);parse_node *O = <<rp>>;<np-unparsed>(SW);
@@ -872,7 +870,7 @@ several property names, e.g., in
diff --git a/docs/core-module/9-rk.html b/docs/core-module/9-rk.html
index 4f5851ac2..b1655efdd 100644
--- a/docs/core-module/9-rk.html
+++ b/docs/core-module/9-rk.html
@@ -300,7 +300,7 @@ that subtrees \(T_X\) and \(T_Y\), where \(T_X\) is a single value or object and
diff --git a/docs/core-module/9-rpt.html b/docs/core-module/9-rpt.html
index eb1438744..c46d39b10 100644
--- a/docs/core-module/9-rpt.html
+++ b/docs/core-module/9-rpt.html
@@ -481,14 +481,14 @@ inference subject representing the domain to which any new kind would belong.
}Node::set_type(p, PROPER_NOUN_NT);if ((Stock::usage_might_be_singular(pro->usage) == FALSE) &&
- (Assertions::Traverse::get_current_subject_plurality())) {
+ (Assertions::Traverse::get_current_subject_plurality())) {StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_EnigmaticThey),"I'm unable to handle 'they' here","since it looks as if it needs to refer to more than one ""object here, and that's something I can't manage.");return; }
-inference_subject *referent = Assertions::Traverse::get_current_object();
+inference_subject *referent = Assertions::Traverse::get_current_object();if (referent) Assertions::Refiner::noun_from_infs(p, referent);else {StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_EnigmaticPronoun),
@@ -1134,7 +1134,7 @@ can set up aliases of variable names to constants like this.
}
diff --git a/docs/core-module/9-tbath.html b/docs/core-module/9-tbath.html
index a822c44ce..aea0daf24 100644
--- a/docs/core-module/9-tbath.html
+++ b/docs/core-module/9-tbath.html
@@ -104,16 +104,14 @@ relationship as well as the noun).
-sentence_handlerASSERT_SH_handler = { SENTENCE_NT, ASSERT_VB, 0, Assertions::Copular::assertion };
-
-voidAssertions::Copular::assertion(parse_node *pv) {
+voidAssertions::Copular::assertion(parse_node *pv) {if (Assertions::Copular::possessive(pv->down->next->next))Assertions::Copular::to_have(pv);elseAssertions::Copular::to_be(pv->down->next, pv->down->next->next);}
-intAssertions::Copular::possessive(parse_node *py) {
+intAssertions::Copular::possessive(parse_node *py) {if ((py) && (Node::get_type(py) == RELATIONSHIP_NT) && (Node::get_relationship(py)) && (Node::get_relationship(py)->reversal == VERB_MEANING_POSSESSION))
@@ -121,7 +119,7 @@ relationship as well as the noun).
returnFALSE;}
-voidAssertions::Copular::to_be(parse_node *px, parse_node *py) {
+voidAssertions::Copular::to_be(parse_node *px, parse_node *py) {if ((Wordings::length(Node::get_text(px)) > 1) && (Vocabulary::test_flags(Wordings::first_wn(Node::get_text(px)), TEXT_MC+TEXTWITHSUBS_MC))) {
@@ -155,7 +153,7 @@ called in traverse 2, when there are no uses of "to have" left in the tree.
§1. Creations to match unrecognised names. The model contains objects, their properties and their relationships, and
this section is where all of the objects are created — not only world
@@ -1393,7 +1393,7 @@ For example, property names can't be unsuitable, but they can be unfortunate.
-intAssertions::Creator::vet_name_for_noun(wordingW) {
+intAssertions::Creator::vet_name_for_noun(wordingW) {if (<unfortunate-name>(W)) {StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_NameBestAvoided),"this is a name which is best avoided",
@@ -1406,8 +1406,28 @@ For example, property names can't be unsuitable, but they can be unfortunate.
returnTRUE;}
+
§12. The natural language kind. Inform has a kind built in called "natural language", whose values are
+enumerated names: English language, French language, German language and so on.
+When the kind is created, the following routine makes these instances. We do
+this exactly as we would to create any other instance — we write a logical
+proposition claiming its existence, then assert it to be true.
+
@@ -101,6 +101,7 @@ exception to Inform's normal rules.)
enumTRAVERSE_FOR_MAP1_SMFTenumTRAVERSE_FOR_MAP2_SMFTenumTRAVERSE_FOR_MAP_INDEX_SMFT
+enumALLOW_IN_OPTIONS_FILE_SMFT
inttraverse; always 1 or 2
@@ -142,7 +143,6 @@ or even both).
sentence_handler *how_to_handle_nodes[MAX_OF_NTS_AND_VBS]; for non-SENTENCE_NT nodes
-sentence_handler *how_to_handle_sentences[MAX_OF_NTS_AND_VBS]; for SENTENCE_NT nodes
§5. We recognise either node types *_NT, or node type SENTENCE_NT plus an
associated verb number *_VB. The following macro registers a sentence handler
@@ -151,9 +151,6 @@ by entering a pointer to it into one of the above tables:
@@ -186,7 +183,7 @@ we don't bother to print details of the closing Assertions::Traverse::traverse(2);}voidAssertions::Traverse::traverse(intpass) {
-Assertions::Traverse::new_discussion(); clear memory of what the subject and object of discussion are
+Assertions::Traverse::new_discussion(); clear memory of what the subject and object of discussion aretraverse = pass;SyntaxTree::clear_trace(Task::syntax_tree());
@@ -277,10 +274,7 @@ handlers until right at the end of the program. The routine which does so,
§10. During early beta-testing, the problem message for "I can't find a verb"
+
§9.3. During early beta-testing, the problem message for "I can't find a verb"
split into cases. Inform is quite sensitive to punctuation errors as between
comma, paragraph break and semicolon, and this is where that sensitivity begins
to bite.
@@ -439,74 +427,13 @@ to bite.
-StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_RuleWithoutColon),
-"I can't find a verb that I know how to deal with, so can't do anything "
-"with this sentence. It looks as if it might be a rule definition",
-"but if so then it is lacking the necessary colon (or comma). "
-"The punctuation style for rules is 'Rule conditions: do this; "
-"do that; do some more.' Perhaps you used a full stop instead "
-"of the colon?");
-
-StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_IfOutsidePhrase),
-"I can't find a verb that I know how to deal with. This looks like an 'if' "
-"phrase which has slipped its moorings",
-"so I am ignoring it. ('If' phrases, like all other such "
-"instructions, belong inside definitions of rules or phrases - "
-"not as sentences which have no context. Maybe a full stop or a "
-"skipped line was accidentally used instead of semicolon, so that you "
-"inadvertently ended the last rule early?)");
-
-Problems::quote_source(1, current_sentence);
-StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NoSuchVerbComma));
-Problems::issue_problem_segment(
-"In the sentence %1, I can't find a verb that I know how to deal with. "
-"(I notice there's a comma here, which is sometimes used to abbreviate "
-"rules which would normally be written with a colon - for instance, "
-"'Before taking: say \"You draw breath.\"' can be abbreviated to 'Before "
-"taking, say...' - but that's only allowed for Before, Instead and "
-"After rules. I mention all this in case you meant this sentence "
-"as a rule in some rulebook, but used a comma where there should "
-"have been a colon ':'?)");
-Problems::issue_problem_end();
-
-LOG("$T\n", current_sentence);
-Problems::quote_source(1, current_sentence);
-StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_NoSuchVerb));
-Problems::issue_problem_segment(
-"In the sentence %1, I can't find a verb that I know how to deal with.");
-Problems::issue_problem_end();
-
§11.1. The variable near_start_of_extension is always 0 except at the start of
+
§10.1. The variable near_start_of_extension is always 0 except at the start of
an extension (immediately after the header line), when it is set to 1. The
following increments it to 2 to allow for up to two quoted lines; the first
is the rubric, the second the credit line.
-
This is rubric or credit text for an extension11.1 =
+
This is rubric or credit text for an extension10.1 =
@@ -583,8 +510,8 @@ is the rubric, the second the credit line.
}return;
§11. The current object and subject. Inform is deliberately minimal when allowing the use of pronouns which carry
meanings from one sentence to another. It is unclear exactly how natural
language does this, and while some theories are more persuasive than others,
all seem vulnerable to odd cases that they get "wrong". It's therefore
@@ -632,19 +559,19 @@ not to tangible things and kinds.
inference_subject *object_of_sentences = NULL, *subject_of_sentences = NULL;intsubject_seems_to_be_plural = FALSE;
-inference_subject *Assertions::Traverse::get_current_subject(void) {
+inference_subject *Assertions::Traverse::get_current_subject(void) {returnsubject_of_sentences;}
-inference_subject *Assertions::Traverse::get_current_object(void) {
+inference_subject *Assertions::Traverse::get_current_object(void) {returnobject_of_sentences;}
-intAssertions::Traverse::get_current_subject_plurality(void) {
+intAssertions::Traverse::get_current_subject_plurality(void) {returnsubject_seems_to_be_plural;}
-
§13. The routine Assertions::Traverse::new_discussion is called when we reach a
+
§12. The routine Assertions::Traverse::new_discussion is called when we reach a
heading or other barrier in the source text, to make clear that there has
been a change of the topic discussed.
@@ -665,7 +592,7 @@ subject carried over from previous sentences.
diff --git a/docs/core-module/index.html b/docs/core-module/index.html
index 2e9d5fff4..508b52c81 100644
--- a/docs/core-module/index.html
+++ b/docs/core-module/index.html
@@ -92,6 +92,11 @@
How To Compile -
The long production line on which products of Inform are built, one step at a time.
+
-
- To manage definitions of natural languages, such as English or French, which may be used either to write Inform or to read the works it compiles.
+
-
+ Three unrelated senses of "X translates into Y as Z" sentences.
@@ -259,11 +274,6 @@
Headings -
To keep track of the hierarchy of headings and subheadings found in the source text.
-
Sentence Handler Registration -
- This routine has to be placed close to the end of the code for boring compilation order reasons, not because it belongs here.
+ This function has to be placed close to the end of the code for boring compilation order reasons, not because it belongs here.
diff --git a/docs/if-module/2-bd.html b/docs/if-module/2-bd.html
index efa5b02ab..3e2511311 100644
--- a/docs/if-module/2-bd.html
+++ b/docs/if-module/2-bd.html
@@ -256,7 +256,6 @@ which must match:
switch (task) { "The story is episode 2 of ..."caseACCEPT_SMFT:if ((<episode-sentence-subject>(SW)) && (<episode-sentence-object>(OW))) {
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);if (<<r>> >= 0) {episode_number = <<r>>;Word::dequote(<<series>>);
diff --git a/docs/if-module/2-ri.html b/docs/if-module/2-ri.html
index 2ffe50964..4747d1442 100644
--- a/docs/if-module/2-ri.html
+++ b/docs/if-module/2-ri.html
@@ -190,10 +190,11 @@ optionally be marked "public" (they appear on any website about it) or
wordingOW = (NPs)?(NPs[1]):EMPTY_WORDING;switch (task) { "Use American dialect."caseACCEPT_SMFT:
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-articled-list>(OW);V->next = <<rp>>;returnTRUE;
+caseALLOW_IN_OPTIONS_FILE_SMFT:
+returnTRUE;caseTRAVERSE1_SMFT:PL::Bibliographic::Release::handle_release_declaration_inner(V->next);break;
diff --git a/docs/if-module/3-em.html b/docs/if-module/3-em.html
index c348b4e56..67ef08d0e 100644
--- a/docs/if-module/3-em.html
+++ b/docs/if-module/3-em.html
@@ -406,7 +406,6 @@ If all are null, then the global scope is used.
wordingOW = (NPs)?(NPs[1]):EMPTY_WORDING;switch (task) { "Index map with ..."caseACCEPT_SMFT:
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-articled-list>(OW);V->next = <<rp>>;returnTRUE;
diff --git a/docs/if-module/3-scn.html b/docs/if-module/3-scn.html
index bcf02cf9c..3e5141af5 100644
--- a/docs/if-module/3-scn.html
+++ b/docs/if-module/3-scn.html
@@ -406,7 +406,6 @@ begins when...".
wordingOW = (NPs)?(NPs[1]):EMPTY_WORDING;switch (task) { "The Ballroom Scene begins when..."caseACCEPT_SMFT:
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-unparsed>(OW);parse_node *O = <<rp>>;<np-unparsed>(SW);
@@ -434,7 +433,6 @@ two noun phrases and sometimes three.
wordingO2W = (NPs)?(NPs[2]):EMPTY_WORDING;switch (task) { "The Ballroom Scene ends when..."caseACCEPT_SMFT:
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-unparsed>(OW);parse_node *O = <<rp>>;<np-unparsed>(SW);
diff --git a/docs/if-module/3-tnt.html b/docs/if-module/3-tnt.html
index 5cfdff0e1..fab1a4807 100644
--- a/docs/if-module/3-tnt.html
+++ b/docs/if-module/3-tnt.html
@@ -67,7 +67,7 @@ function togglePopup(material_id) {
Inform has a thicket of properties to do with names: not just the name itself, but whether it is a plural, a proper name, and so on. Here we look after these properties, and give them their initial states.
@@ -621,6 +621,49 @@ capitalising and fixing "your" as needed.
}}
+
§15. The adaptive person. The following is only relevant for the language of play, whose extension will
+always be read in. That in turn is expected to contain a declaration like
+this one:
+
+
+
+
The adaptive text viewpoint of the French language is second person singular.
+
+
+
The following routine picks up on the result of this declaration. (We cache
+this because we need access to it very quickly when parsing text substitutions.)
+
diff --git a/docs/if-module/4-act.html b/docs/if-module/4-act.html
index 8b9b341af..453623a3a 100644
--- a/docs/if-module/4-act.html
+++ b/docs/if-module/4-act.html
@@ -831,6 +831,16 @@ action patterns. For example, the Standard Rules define:
}
§25. This handles the special meaning "X is an action...".
+<nounphrase-actionable> is an awkward necessity, designed to prevent the
+regular sentence
+
+
+
+
The impulse is an action name that varies.
+
+
+
from being parsed as an instance of "... is an action ...", creating a
+new action.
@@ -841,6 +851,13 @@ action patterns. For example, the Standard Rules define:
<new-action-sentence-object-unarticled>::=action<nounphrase-actionable>|==> { TRUE, RP[1] }action==>Issue PM_BadActionDeclaration problem25.1
+
+<nounphrase-actionable>::=
+^<variable-creation-tail>==> { 0, Diagrams::new_UNPARSED_NOUN(W) }
+
+<variable-creation-tail>::=
+***that/whichvary/varies|
+***variable
§25.1. Issue PM_BadActionDeclaration problem25.1 =
@@ -864,7 +881,6 @@ action patterns. For example, the Standard Rules define:
caseACCEPT_SMFT:if (<new-action-sentence-object>(OW)) {if (<<r>> == FALSE) returnFALSE;
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);parse_node *O = <<rp>>;<np-unparsed>(SW);V->next = <<rp>>;
diff --git a/docs/if-module/5-tfg.html b/docs/if-module/5-tfg.html
index 06f5a1eca..f099f19d0 100644
--- a/docs/if-module/5-tfg.html
+++ b/docs/if-module/5-tfg.html
@@ -135,7 +135,6 @@ traverse.
wordingO2W = (NPs)?(NPs[2]):EMPTY_WORDING;switch (task) { "Understand... as..."caseACCEPT_SMFT:
-Annotations::write_int(V, verb_id_ANNOT, SPECIAL_MEANING_VB);<np-unparsed>(O2W);V->next = <<rp>>;<np-unparsed>(OW);
diff --git a/docs/index-module/2-li.html b/docs/index-module/2-li.html
index e416c4b53..f42a5fe71 100644
--- a/docs/index-module/2-li.html
+++ b/docs/index-module/2-li.html
@@ -305,7 +305,7 @@ on. (Sometimes these will also be listed separately with an adjectival sense.)
"indefinite article", NULL);PreformUtilities::enter_lexicon(<definite-article>, MISCELLANEOUS_LEXE,"definite article", NULL);
-PreformUtilities::enter_lexicon(<relative-clause-marker>, MISCELLANEOUS_LEXE,
+PreformUtilities::enter_lexicon(<rc-marker>, MISCELLANEOUS_LEXE,"connective","used to place a further condition on a description: like 'which' in ""'A which is B', or 'A which carries B', for instance.");
diff --git a/docs/kinds-module/2-knd.html b/docs/kinds-module/2-knd.html
index 2787a07c1..1b281d93a 100644
--- a/docs/kinds-module/2-knd.html
+++ b/docs/kinds-module/2-knd.html
@@ -314,7 +314,7 @@ Inform. Some standard kinds:
kind *K_action_name = NULL;kind *K_equation = NULL;kind *K_grammatical_gender = NULL;
-kind *K_inform_language = NULL;
+kind *K_natural_language = NULL;kind *K_number = NULL;kind *K_object = NULL;kind *K_real_number = NULL;
@@ -804,9 +804,9 @@ is the super-kind ("value", "thing").
if (<notable-linguistic-kinds>(W)) {Kinds::Constructors::mark_as_linguistic(K->construct);switch (<<r>>) {
-case0: K_inform_language = K;
- #ifdefNATURAL_LANGUAGES_PRESENT
-NaturalLanguages::stock_nl_kind(K);
+case0: K_natural_language = K;
+ #ifdefNOTIFY_NATURAL_LANGUAGE_KINDS_CALLBACK
+NOTIFY_NATURAL_LANGUAGE_KINDS_CALLBACK(K); #endifbreak;case1: K_grammatical_gender = K; break;
diff --git a/docs/linguistics-module/1-dgr.html b/docs/linguistics-module/1-dgr.html
index f396f6ebf..6e4bd5451 100644
--- a/docs/linguistics-module/1-dgr.html
+++ b/docs/linguistics-module/1-dgr.html
@@ -128,8 +128,7 @@ some new node types:
MAKE_ANNOTATION_FUNCTIONS(special_meaning, special_meaning_holder)MAKE_ANNOTATION_FUNCTIONS(occurrence, time_period)
-
§3. The linguistic_error_here_ANNOT annotation is for any errors we find,
-though at present there is just one:
+
§3. The linguistic_error_here_ANNOT annotation is for any errors we find:
enumTwoLikelihoods_LINERRORfrom1
diff --git a/docs/linguistics-module/3-prp.html b/docs/linguistics-module/3-prp.html
index c8a3746fc..d103e929a 100644
--- a/docs/linguistics-module/3-prp.html
+++ b/docs/linguistics-module/3-prp.html
@@ -259,7 +259,7 @@ with a given "permitted verb".
voidPrepositions::mark_for_preform(void) {
-Nonterminals::flag_words_with(<relative-clause-marker>, PREPOSITION_MC);
+Nonterminals::flag_words_with(<rc-marker>, PREPOSITION_MC);}voidPrepositions::preform_optimiser(void) {
diff --git a/docs/linguistics-module/3-vu.html b/docs/linguistics-module/3-vu.html
index 575a05c92..d9407abd8 100644
--- a/docs/linguistics-module/3-vu.html
+++ b/docs/linguistics-module/3-vu.html
@@ -601,7 +601,7 @@ which has a meaning.
-<meaningful-nonimperative-verb>internal?{
+<nonimperative-verb>internal?{verb_usage *vu;LOOP_OVER_USAGES(vu) {verb *vi = VerbUsages::get_verb(vu);
@@ -830,7 +830,7 @@ or "the verb to be able to see" use these.
voidVerbUsages::mark_as_verb(vocabulary_entry *ve) {
-NTI::mark_vocabulary(ve, <meaningful-nonimperative-verb>);
+NTI::mark_vocabulary(ve, <nonimperative-verb>);NTI::mark_vocabulary(ve, <copular-verb>);NTI::mark_vocabulary(ve, <negated-noncopular-verb-present>);NTI::mark_vocabulary(ve, <universal-verb>);
@@ -839,7 +839,7 @@ or "the verb to be able to see" use these.
}voidVerbUsages::preform_optimiser(void) {
-NTI::first_word_in_match_must_have_my_NTI_bit(<meaningful-nonimperative-verb>);
+NTI::first_word_in_match_must_have_my_NTI_bit(<nonimperative-verb>);NTI::first_word_in_match_must_have_my_NTI_bit(<copular-verb>);NTI::first_word_in_match_must_have_my_NTI_bit(<negated-noncopular-verb-present>);NTI::first_word_in_match_must_have_my_NTI_bit(<universal-verb>);
@@ -852,7 +852,9 @@ or "the verb to be able to see" use these.
intVerbUsages::adaptive_person(NATURAL_LANGUAGE_WORDS_TYPE *X) { #ifdefADAPTIVE_PERSON_LINGUISTICS_CALLBACK
-returnADAPTIVE_PERSON_LINGUISTICS_CALLBACK(X);
+intN = ADAPTIVE_PERSON_LINGUISTICS_CALLBACK(X);
+if (N >= 0) returnN;
+returnFIRST_PERSON; #endif #ifndefADAPTIVE_PERSON_LINGUISTICS_CALLBACKreturnFIRST_PERSON;
@@ -860,7 +862,9 @@ or "the verb to be able to see" use these.
}intVerbUsages::adaptive_number(NATURAL_LANGUAGE_WORDS_TYPE *X) { #ifdefADAPTIVE_NUMBER_LINGUISTICS_CALLBACK
-returnADAPTIVE_NUMBER_LINGUISTICS_CALLBACK(X);
+intN = ADAPTIVE_NUMBER_LINGUISTICS_CALLBACK(X);
+if (N >= 0) returnN;
+returnPLURAL_NUMBER; #endif #ifndefADAPTIVE_NUMBER_LINGUISTICS_CALLBACKreturnPLURAL_NUMBER;
diff --git a/docs/linguistics-module/4-vp.html b/docs/linguistics-module/4-vp.html
index dc2f93d8b..4fe6de81a 100644
--- a/docs/linguistics-module/4-vp.html
+++ b/docs/linguistics-module/4-vp.html
@@ -371,7 +371,7 @@ it read "Velma is a doer".
if ((Lexer::word(pos) == CLOSEBRACKET_V) || (Lexer::word(pos) == CLOSEBRACE_V)) bl--;inti = pos - Wordings::first_wn(W);if (i >= VIABILITY_MAP_SIZE) break;
-if (NTI::test_vocabulary(Lexer::word(pos), <meaningful-nonimperative-verb>) == FALSE) {
+if (NTI::test_vocabulary(Lexer::word(pos), <nonimperative-verb>) == FALSE) {viable[i] = 0; } else {if (bl == 0) viable[i] = 1; elseviable[i] = 2;
@@ -863,11 +863,11 @@ little careful using this nonterminal.
§10. The following is used only in the reconstruction of existential sentences
diff --git a/docs/linguistics-module/P-asd.html b/docs/linguistics-module/P-asd.html
index 7af252222..27c320d90 100644
--- a/docs/linguistics-module/P-asd.html
+++ b/docs/linguistics-module/P-asd.html
@@ -74,7 +74,7 @@ nonterminal, and the trees displayed below were the result. For example:
-linguistics-test: sentence failed to parse
+linguistics-test: sentence has no primary verb(1) arfle barfle gloopSENTENCE_NT'arfle barfle gloop'
diff --git a/docs/linguistics-test/1-dgr2.html b/docs/linguistics-test/1-dgr2.html
index 0f5f63654..ef49d26d9 100644
--- a/docs/linguistics-test/1-dgr2.html
+++ b/docs/linguistics-test/1-dgr2.html
@@ -112,12 +112,16 @@ further nodes, which we graft below the wordingW = Node::get_text(p);if (<sentence>(W)) {parse_node *n = <<rp>>;
-if (Annotations::read_int(p, linguistic_error_here_ANNOT) == TwoLikelihoods_LINERROR)
-Errors::nowhere("sentence has two certainties");
-else
-SyntaxTree::graft(syntax_tree, n, p);
+switch (Annotations::read_int(p, linguistic_error_here_ANNOT)) {
+caseTwoLikelihoods_LINERROR:
+Errors::nowhere("sentence has two certainties");
+break;
+default:
+SyntaxTree::graft(syntax_tree, n, p);
+break;
+ } } else {
-Errors::nowhere("sentence failed to parse");
+Errors::nowhere("sentence has no primary verb"); } }}
diff --git a/docs/multimedia-module/2-ef.html b/docs/multimedia-module/2-ef.html
index f02b88d85..9e3b53c00 100644
--- a/docs/multimedia-module/2-ef.html
+++ b/docs/multimedia-module/2-ef.html
@@ -219,6 +219,9 @@ letters or digits, with the first being a letter.
<new-file-sentence-object-unarticled>::=called<np-unparsed>==> { TRUE, RP[1] }
+
+<nounphrase-external-file>::=
+<external-file-sentence-subject>==> { 0, Diagrams::new_UNPARSED_NOUN(W) }
§6. And such lists of names are formed up in turn into room descriptions.
@@ -249,7 +249,7 @@ going after all.)
Thestandardimplicittakingruleislistedlastinforimplicitlytaking.
-ThestandardimplicittakingruletranslatesintoI6as"STANDARD_IMPLICIT_TAKING_R"with
+ThestandardimplicittakingruletranslatesintoInteras"STANDARD_IMPLICIT_TAKING_R"with"(first taking [the noun])[command clarification break]" (A),"([the second noun] first taking [the noun])[command clarification break]" (B).
@@ -269,12 +269,12 @@ several unconnected things happen in succession.
Theprintfinalscoreruleislistedlastinforprintingtheplayer'sobituary.Thedisplayfinalstatuslineruleislistedlastinforprintingtheplayer'sobituary.
-TheprintobituaryheadlineruletranslatesintoI6as"PRINT_OBITUARY_HEADLINE_R"
+TheprintobituaryheadlineruletranslatesintoInteras"PRINT_OBITUARY_HEADLINE_R"with" You have died " (A)," You have won " (B)," The End " (C).
-TheprintfinalscoreruletranslatesintoI6as"PRINT_FINAL_SCORE_R".
-ThedisplayfinalstatuslineruletranslatesintoI6as"DISPLAY_FINAL_STATUS_LINE_R".
+TheprintfinalscoreruletranslatesintoInteras"PRINT_FINAL_SCORE_R".
+ThedisplayfinalstatuslineruletranslatesintoInteras"DISPLAY_FINAL_STATUS_LINE_R".
§16. There is one last question: the one which usually reads "Would you like to
RESTART, RESTORE a saved game, or QUIT?", but which sometimes provides other
@@ -294,10 +294,10 @@ references to them into a table.)
-TheimmediatelyrestarttheVMruletranslatesintoI6as"IMMEDIATELY_RESTART_VM_R".
-TheimmediatelyrestoresavedgameruletranslatesintoI6as"IMMEDIATELY_RESTORE_SAVED_R".
-TheimmediatelyquitruletranslatesintoI6as"IMMEDIATELY_QUIT_R".
-TheimmediatelyundoruletranslatesintoI6as"IMMEDIATELY_UNDO_R"with
+TheimmediatelyrestarttheVMruletranslatesintoInteras"IMMEDIATELY_RESTART_VM_R".
+TheimmediatelyrestoresavedgameruletranslatesintoInteras"IMMEDIATELY_RESTORE_SAVED_R".
+TheimmediatelyquitruletranslatesintoInteras"IMMEDIATELY_QUIT_R".
+TheimmediatelyundoruletranslatesintoInteras"IMMEDIATELY_UNDO_R"with"The use of 'undo' is forbidden in this story." (A),"You can't 'undo' what hasn't been done!" (B),"Your interpreter does not provide 'undo'. Sorry!" (C),
@@ -321,7 +321,7 @@ implementation, so the latter is the last there, too.
Thisistheprintthefinalpromptrule: say"> [run paragraph on]" (A).
-ThereadthefinalanswerruletranslatesintoI6as"READ_FINAL_ANSWER_R".
+ThereadthefinalanswerruletranslatesintoInteras"READ_FINAL_ANSWER_R".
§19. That clears away the underbrush and reduces us to two matching tasks: (i)
to print the question, (ii) to parse the answer, given that we want to be
diff --git a/docs/standard_rules/S-act2.html b/docs/standard_rules/S-act2.html
index 1804e0157..494ca4c10 100644
--- a/docs/standard_rules/S-act2.html
+++ b/docs/standard_rules/S-act2.html
@@ -79,7 +79,7 @@ and subheadings used in the Actions page of the Index.
Section2 - Standardactionsconcerningtheactor'spossessionsTakinginventoryisanactionapplyingtonothing.
-ThetakinginventoryactiontranslatesintoI6as"Inv".
+ThetakinginventoryactiontranslatesintoInteras"Inv".Thespecificationofthetakinginventoryactionis"Taking an inventory ofone's immediate possessions: the things being carried, either directly or in
@@ -126,7 +126,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Takingisanactionapplyingtoonething.
-ThetakingactiontranslatesintoI6as"Take".
+ThetakingactiontranslatesintoInteras"Take".Thespecificationofthetakingactionis"The taking action is the only wayan action in the Standard Rules can cause something to be carried by an actor.
@@ -254,7 +254,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Removingitfromisanactionapplyingtotwothings.
-TheremovingitfromactiontranslatesintoI6as"Remove".
+TheremovingitfromactiontranslatesintoInteras"Remove".Thespecificationoftheremovingitfromactionis"Removing is not reallyan action in its own right. Whereas there are many ways to put something down
@@ -295,7 +295,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Droppingisanactionapplyingtoonething.
-ThedroppingactiontranslatesintoI6as"Drop".
+ThedroppingactiontranslatesintoInteras"Drop".Thespecificationofthedroppingactionis"Dropping is one of five actionsby which an actor can get rid of something carried: the others are inserting
@@ -386,7 +386,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Puttingitonisanactionapplyingtotwothings.
-TheputtingitonactiontranslatesintoI6as"PutOn".
+TheputtingitonactiontranslatesintoInteras"PutOn".Thespecificationoftheputtingitonactionis"By this action, an actor putssomething he is holding on top of a supporter: for instance, putting an apple
@@ -464,7 +464,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Insertingitintoisanactionapplyingtotwothings.
-TheinsertingitintoactiontranslatesintoI6as"Insert".
+TheinsertingitintoactiontranslatesintoInteras"Insert".Thespecificationoftheinsertingitintoactionis"By this action, an actor putssomething he is holding into a container: for instance, putting a coin into a
@@ -551,7 +551,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Eatingisanactionapplyingtoonething.
-TheeatingactiontranslatesintoI6as"Eat".
+TheeatingactiontranslatesintoInteras"Eat".Thespecificationoftheeatingactionis"Eating is the only one of thebuilt-in actions which can, in effect, destroy something: the carry out
@@ -617,7 +617,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Section3 - StandardactionswhichmovetheactorGoingisanactionapplyingtoonevisiblething.
-ThegoingactiontranslatesintoI6as"Go".
+ThegoingactiontranslatesintoInteras"Go".Thespecificationofthegoingactionis"This is the action which allows peopleto move from one room to another, using whatever map connections and doors are
@@ -803,7 +803,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Enteringisanactionapplyingtoonething.
-TheenteringactiontranslatesintoI6as"Enter".
+TheenteringactiontranslatesintoInteras"Enter".Thespecificationoftheenteringactionis"Whereas the going action allowspeople to move from one location to another in the model world, the entering
@@ -954,7 +954,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Exitingisanactionapplyingtonothing.
-TheexitingactiontranslatesintoI6as"Exit".
+TheexitingactiontranslatesintoInteras"Exit".Theexitingactionhasanobjectcalledthecontainerexitedfrom (matchedas"from").Thespecificationoftheexitingactionis"Whereas the going action allows
@@ -1031,7 +1031,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Gettingoffisanactionapplyingtoonething.
-ThegettingoffactiontranslatesintoI6as"GetOff".
+ThegettingoffactiontranslatesintoInteras"GetOff".Thespecificationofthegettingoffactionis"The getting off action is foractors who are currently on top of a supporter: perhaps standing on a platform,
@@ -1078,7 +1078,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Section4 - Standardactionsconcerningtheactor'svisionLookingisanactionapplyingtonothing.
-ThelookingactiontranslatesintoI6as"Look".
+ThelookingactiontranslatesintoInteras"Look".Thespecificationofthelookingactionis"The looking action describes theplayer's current room and any visible items, but is made more complicated
@@ -1217,7 +1217,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Examiningisanactionapplyingtoonevisiblethingandrequiringlight.
-TheexaminingactiontranslatesintoI6as"Examine".
+TheexaminingactiontranslatesintoInteras"Examine".Thespecificationoftheexaminingactionis"The act of looking closely atsomething. Note that the noun could be either a direction or a thing, which
@@ -1297,7 +1297,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Lookingunderisanactionapplyingtoonevisiblethingandrequiringlight.
-ThelookingunderactiontranslatesintoI6as"LookUnder".
+ThelookingunderactiontranslatesintoInteras"LookUnder".Thespecificationofthelookingunderactionis"The standard Inform worldmodel does not have a concept of things being under other things, so this
@@ -1333,7 +1333,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Searchingisanactionapplyingtoonethingandrequiringlight.
-ThesearchingactiontranslatesintoI6as"Search".
+ThesearchingactiontranslatesintoInteras"Search".Thespecificationofthesearchingactionis"Searching looks at the contentsof an open or transparent container, or at the items on top of a supporter.
@@ -1397,7 +1397,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Consultingitaboutisanactionapplyingtoonethingandonetopic.
-TheconsultingitaboutactiontranslatesintoI6as"Consult".
+TheconsultingitaboutactiontranslatesintoInteras"Consult".Thespecificationoftheconsultingitaboutactionis"Consulting is a veryflexible and potentially powerful action, but only because it leaves almost
@@ -1426,7 +1426,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Section5 - StandardactionswhichchangethestateofthingsLockingitwithisanactionapplyingtoonethingandonecarriedthing.
-ThelockingitwithactiontranslatesintoI6as"Lock".
+ThelockingitwithactiontranslatesintoInteras"Lock".Thespecificationofthelockingitwithactionis"Locking is the act ofusing an object such as a key to ensure that something such as a door or
@@ -1512,7 +1512,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Unlockingitwithisanactionapplyingtoonethingandonecarriedthing.
-TheunlockingitwithactiontranslatesintoI6as"Unlock".
+TheunlockingitwithactiontranslatesintoInteras"Unlock".Thespecificationoftheunlockingitwithactionis"Unlocking undoes theeffect of locking, and renders the noun openable again provided that the
@@ -1590,7 +1590,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Switchingonisanactionapplyingtoonething.
-TheswitchingonactiontranslatesintoI6as"SwitchOn".
+TheswitchingonactiontranslatesintoInteras"SwitchOn".Thespecificationoftheswitchingonactionis"The switching on and switchingoff actions are for the simplest kind of machinery operation: they are for
@@ -1636,7 +1636,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Switchingoffisanactionapplyingtoonething.
-TheswitchingoffactiontranslatesintoI6as"SwitchOff".
+TheswitchingoffactiontranslatesintoInteras"SwitchOff".Thespecificationoftheswitchingoffactionis"The switching off and switchingon actions are for the simplest kind of machinery operation: they are for
@@ -1682,7 +1682,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Openingisanactionapplyingtoonething.
-TheopeningactiontranslatesintoI6as"Open".
+TheopeningactiontranslatesintoInteras"Open".Thespecificationoftheopeningactionis"Opening makes something no longera physical barrier. The action can be performed on any kind of thing which
@@ -1768,7 +1768,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Closingisanactionapplyingtoonething.
-TheclosingactiontranslatesintoI6as"Close".
+TheclosingactiontranslatesintoInteras"Close".Thespecificationoftheclosingactionis"Closing makes something intoa physical barrier. The action can be performed on any kind of thing which
@@ -1830,7 +1830,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Wearingisanactionapplyingtoonecarriedthing.
-ThewearingactiontranslatesintoI6as"Wear".
+ThewearingactiontranslatesintoInteras"Wear".Thespecificationofthewearingactionis"The Standard Rules give Informonly a simple model of clothing. A thing can be worn only if it has the
@@ -1888,7 +1888,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Takingoffisanactionapplyingtoonething.
-ThetakingoffactiontranslatesintoI6as"Disrobe".
+ThetakingoffactiontranslatesintoInteras"Disrobe".Doestheplayermeantakingoffsomethingworn: itisverylikely.
@@ -1944,7 +1944,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Section6 - StandardactionsconcerningotherpeopleGivingittoisanactionapplyingtoonecarriedthingandonething.
-ThegivingittoactiontranslatesintoI6as"Give".
+ThegivingittoactiontranslatesintoInteras"Give".Thespecificationofthegivingittoactionis"This action is indexed byInform under 'Actions concerning other people', but it could just as easily
@@ -2027,7 +2027,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Showingittoisanactionapplyingtoonecarriedthingandonevisiblething.
-TheshowingittoactiontranslatesintoI6as"Show".
+TheshowingittoactiontranslatesintoInteras"Show".Thespecificationoftheshowingittoactionis"Anyone can show anyoneelse something which they are carrying, but not some nearby piece of
@@ -2069,7 +2069,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Wakingisanactionapplyingtoonething.
-ThewakingactiontranslatesintoI6as"WakeOther".
+ThewakingactiontranslatesintoInteras"WakeOther".Thespecificationofthewakingactionis"This is the act of jostlinga sleeping person to wake him or her up, and it finds its way into the
@@ -2092,7 +2092,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Throwingitatisanactionapplyingtoonecarriedthingandonevisiblething.
-ThethrowingitatactiontranslatesintoI6as"ThrowAt".
+ThethrowingitatactiontranslatesintoInteras"ThrowAt".Thespecificationofthethrowingitatactionis"Throwing something atsomeone or something is difficult for Inform to model. So many considerations
@@ -2143,7 +2143,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Attackingisanactionapplyingtoonething.
-TheattackingactiontranslatesintoI6as"Attack".
+TheattackingactiontranslatesintoInteras"Attack".Thespecificationoftheattackingactionis"Violence is seldom the answer,and attempts to attack another person are normally blocked as being unrealistic
@@ -2166,7 +2166,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Kissingisanactionapplyingtoonething.
-ThekissingactiontranslatesintoI6as"Kiss".
+ThekissingactiontranslatesintoInteras"Kiss".Thespecificationofthekissingactionis"Possibly because Inform wasoriginally written by an Englishman, attempts at kissing another person are
@@ -2193,7 +2193,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Answeringitthatisanactionapplyingtoonethingandonetopic.
-TheansweringitthatactiontranslatesintoI6as"Answer".
+TheansweringitthatactiontranslatesintoInteras"Answer".Thespecificationoftheansweringitthatactionis"The Standard Rules donot include any systematic way to handle conversation: instead, Inform is
@@ -2230,7 +2230,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Tellingitaboutisanactionapplyingtoonethingandonetopic.
-ThetellingitaboutactiontranslatesintoI6as"Tell".
+ThetellingitaboutactiontranslatesintoInteras"Tell".Thespecificationofthetellingitaboutactionis"The Standard Rules donot include any systematic way to handle conversation: instead, Inform is
@@ -2273,7 +2273,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Askingitaboutisanactionapplyingtoonethingandonetopic.
-TheaskingitaboutactiontranslatesintoI6as"Ask".
+TheaskingitaboutactiontranslatesintoInteras"Ask".Thespecificationoftheaskingitaboutactionis"The Standard Rules donot include any systematic way to handle conversation: instead, Inform is
@@ -2309,7 +2309,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Askingitforisanactionapplyingtotwothings.
-TheaskingitforactiontranslatesintoI6as"AskFor".
+TheaskingitforactiontranslatesintoInteras"AskFor".Thespecificationoftheaskingitforactionis"The Standard Rules donot include any systematic way to handle conversation, but this is
@@ -2343,7 +2343,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Section7 - StandardactionswhicharecheckedbutthendonothingunlessrulesinterveneWaitingisanactionapplyingtonothing.
-ThewaitingactiontranslatesintoI6as"Wait".
+ThewaitingactiontranslatesintoInteras"Wait".Thespecificationofthewaitingactionis"The inaction action: where wouldwe be without waiting? Waiting does not cause time to pass by - that happens
@@ -2371,7 +2371,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Touchingisanactionapplyingtoonething.
-ThetouchingactiontranslatesintoI6as"Touch".
+ThetouchingactiontranslatesintoInteras"Touch".Thespecificationofthetouchingactionis"Touching is just that, touchingsomething without applying pressure: a touch-sensitive screen or a living
@@ -2420,7 +2420,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Wavingisanactionapplyingtoonething.
-ThewavingactiontranslatesintoI6as"Wave".
+ThewavingactiontranslatesintoInteras"Wave".Thespecificationofthewavingactionis"Waving in this sense is likewaving a sceptre: the item to be waved must be directly held (or worn)
@@ -2456,7 +2456,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Pullingisanactionapplyingtoonething.
-ThePullingactiontranslatesintoI6as"Pull".
+ThePullingactiontranslatesintoInteras"Pull".Thespecificationofthepullingactionis"Pulling is the act of pullingsomething not grossly larger than the actor by an amount which would not
@@ -2507,7 +2507,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Pushingisanactionapplyingtoonething.
-ThePushingactiontranslatesintoI6as"Push".
+ThePushingactiontranslatesintoInteras"Push".Thespecificationofthepushingactionis"Pushing is the act of pushingsomething not grossly larger than the actor by an amount which would not
@@ -2559,7 +2559,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Turningisanactionapplyingtoonething.
-TheTurningactiontranslatesintoI6as"Turn".
+TheTurningactiontranslatesintoInteras"Turn".Thespecificationoftheturningactionis"Turning is the act of rotatingsomething - say, a dial.
@@ -2607,7 +2607,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Pushingittoisanactionapplyingtoonethingandonevisiblething.
-ThePushingittoactiontranslatesintoI6as"PushDir".
+ThePushingittoactiontranslatesintoInteras"PushDir".Thespecificationofthepushingittoactionis"This action covers pushinga large object, not being carried, so that the actor pushes it from one room
@@ -2660,7 +2660,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Squeezingisanactionapplyingtoonething.
-TheSqueezingactiontranslatesintoI6as"Squeeze".
+TheSqueezingactiontranslatesintoInteras"Squeeze".Thespecificationofthesqueezingactionis"Squeezing is an action whichcan conveniently vary from squeezing something hand-held, like a washing-up
@@ -2699,7 +2699,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Section8 - StandardactionswhichalwaysdonothingunlessrulesinterveneSayingyesisanactionapplyingtonothing.
-TheSayingyesactiontranslatesintoI6as"Yes".
+TheSayingyesactiontranslatesintoInteras"Yes".Thespecificationofthesayingyesactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2723,7 +2723,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Sayingnoisanactionapplyingtonothing.
-TheSayingnoactiontranslatesintoI6as"No".
+TheSayingnoactiontranslatesintoInteras"No".Thespecificationofthesayingnoactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2746,7 +2746,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Burningisanactionapplyingtoonething.
-TheBurningactiontranslatesintoI6as"Burn".
+TheBurningactiontranslatesintoInteras"Burn".Thespecificationoftheburningactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2769,7 +2769,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Wakingupisanactionapplyingtonothing.
-TheWakingupactiontranslatesintoI6as"Wake".
+TheWakingupactiontranslatesintoInteras"Wake".Thespecificationofthewakingupactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2793,7 +2793,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Thinkingisanactionapplyingtonothing.
-TheThinkingactiontranslatesintoI6as"Think".
+TheThinkingactiontranslatesintoInteras"Think".Thespecificationofthethinkingactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2816,7 +2816,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Smellingisanactionapplyingtonothingoronething.
-TheSmellingactiontranslatesintoI6as"Smell".
+TheSmellingactiontranslatesintoInteras"Smell".Thespecificationofthesmellingactionis"The Standard Rules define this action in only a minimal way, replying only
@@ -2837,7 +2837,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Listeningtoisanactionapplyingtonothingoronethingandabbreviable.
-TheListeningtoactiontranslatesintoI6as"Listen".
+TheListeningtoactiontranslatesintoInteras"Listen".Thespecificationofthelisteningtoactionis"The Standard Rules define this action in only a minimal way, replying only
@@ -2858,7 +2858,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Tastingisanactionapplyingtoonething.
-TheTastingactiontranslatesintoI6as"Taste".
+TheTastingactiontranslatesintoInteras"Taste".Thespecificationofthetastingactionis"The Standard Rules define this action in only a minimal way, replying only
@@ -2879,7 +2879,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Cuttingisanactionapplyingtoonething.
-TheCuttingactiontranslatesintoI6as"Cut".
+TheCuttingactiontranslatesintoInteras"Cut".Thespecificationofthecuttingactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2902,7 +2902,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Jumpingisanactionapplyingtonothing.
-TheJumpingactiontranslatesintoI6as"Jump".
+TheJumpingactiontranslatesintoInteras"Jump".Thespecificationofthejumpingactionis"The Standard Rules define this action in only a minimal way, simply reporting
@@ -2923,7 +2923,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Tyingittoisanactionapplyingtotwothings.
-TheTyingittoactiontranslatesintoI6as"Tie".
+TheTyingittoactiontranslatesintoInteras"Tie".Thespecificationofthetyingittoactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2946,7 +2946,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Drinkingisanactionapplyingtoonething.
-TheDrinkingactiontranslatesintoI6as"Drink".
+TheDrinkingactiontranslatesintoInteras"Drink".Thespecificationofthedrinkingactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2970,7 +2970,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Sayingsorryisanactionapplyingtonothing.
-TheSayingsorryactiontranslatesintoI6as"Sorry".
+TheSayingsorryactiontranslatesintoInteras"Sorry".Thespecificationofthesayingsorryactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -2994,7 +2994,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Swingingisanactionapplyingtoonething.
-TheSwingingactiontranslatesintoI6as"Swing".
+TheSwingingactiontranslatesintoInteras"Swing".Thespecificationoftheswingingactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -3018,7 +3018,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Rubbingisanactionapplyingtoonething.
-TheRubbingactiontranslatesintoI6as"Rub".
+TheRubbingactiontranslatesintoInteras"Rub".Thespecificationoftherubbingactionis"The Standard Rules define this action in only a minimal way, simply reporting
@@ -3049,7 +3049,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Settingittoisanactionapplyingtoonethingandonetopic.
-TheSettingittoactiontranslatesintoI6as"SetTo".
+TheSettingittoactiontranslatesintoInteras"SetTo".Thespecificationofthesettingittoactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -3072,7 +3072,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Wavinghandsisanactionapplyingtonothing.
-TheWavinghandsactiontranslatesintoI6as"WaveHands".
+TheWavinghandsactiontranslatesintoInteras"WaveHands".Thespecificationofthewavinghandsactionis"The Standard Rules define this action in only a minimal way, simply reporting
@@ -3093,7 +3093,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Buyingisanactionapplyingtoonething.
-TheBuyingactiontranslatesintoI6as"Buy".
+TheBuyingactiontranslatesintoInteras"Buy".Thespecificationofthebuyingactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -3117,7 +3117,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Climbingisanactionapplyingtoonething.
-TheClimbingactiontranslatesintoI6as"Climb".
+TheClimbingactiontranslatesintoInteras"Climb".Thespecificationoftheclimbingactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -3140,7 +3140,7 @@ since she died (at a grand old age and in mid-spring) in 2008.
Sleepingisanactionapplyingtonothing.
-TheSleepingactiontranslatesintoI6as"Sleep".
+TheSleepingactiontranslatesintoInteras"Sleep".Thespecificationofthesleepingactionis"The Standard Rules define this action in only a minimal way, blocking it
@@ -3170,60 +3170,60 @@ is the current VM: so these are close to the metal, as they say.
Section9 - StandardactionswhichhappenoutofworldQuittingthegameisanactionoutofworldandapplyingtonothing.
-ThequittingthegameactiontranslatesintoI6as"Quit".
+ThequittingthegameactiontranslatesintoInteras"Quit".Thequitthegameruleislistedinthecarryoutquittingthegamerulebook.
-ThequitthegameruletranslatesintoI6as"QUIT_THE_GAME_R"with
+ThequitthegameruletranslatesintoInteras"QUIT_THE_GAME_R"with"Are you sure you want to quit? " (A).Savingthegameisanactionoutofworldandapplyingtonothing.
-ThesavingthegameactiontranslatesintoI6as"Save".
+ThesavingthegameactiontranslatesintoInteras"Save".Thesavethegameruleislistedinthecarryoutsavingthegamerulebook.
-ThesavethegameruletranslatesintoI6as"SAVE_THE_GAME_R"with
+ThesavethegameruletranslatesintoInteras"SAVE_THE_GAME_R"with"Save failed." (A),"Ok." (B).Restoringthegameisanactionoutofworldandapplyingtonothing.
-TherestoringthegameactiontranslatesintoI6as"Restore".
+TherestoringthegameactiontranslatesintoInteras"Restore".Therestorethegameruleislistedinthecarryoutrestoringthegamerulebook.
-TherestorethegameruletranslatesintoI6as"RESTORE_THE_GAME_R"with
+TherestorethegameruletranslatesintoInteras"RESTORE_THE_GAME_R"with"Restore failed." (A),"Ok." (B).Restartingthegameisanactionoutofworldandapplyingtonothing.
-TherestartingthegameactiontranslatesintoI6as"Restart".
+TherestartingthegameactiontranslatesintoInteras"Restart".Therestartthegameruleislistedinthecarryoutrestartingthegamerulebook.
-TherestartthegameruletranslatesintoI6as"RESTART_THE_GAME_R"with
+TherestartthegameruletranslatesintoInteras"RESTART_THE_GAME_R"with"Are you sure you want to restart? " (A),"Failed." (B).Verifyingthestoryfileisanactionoutofworldandapplyingtonothing.
-TheverifyingthestoryfileactiontranslatesintoI6as"Verify".
+TheverifyingthestoryfileactiontranslatesintoInteras"Verify".Theverifythestoryfileruleislistedinthecarryoutverifyingthestoryfilerulebook.
-TheverifythestoryfileruletranslatesintoI6as"VERIFY_THE_STORY_FILE_R"with
+TheverifythestoryfileruletranslatesintoInteras"VERIFY_THE_STORY_FILE_R"with"The game file has verified as intact." (A),"The game file did not verify as intact, and may be corrupt." (B).Switchingthestorytranscriptonisanactionoutofworldandapplyingtonothing.
-TheswitchingthestorytranscriptonactiontranslatesintoI6as"ScriptOn".
+TheswitchingthestorytranscriptonactiontranslatesintoInteras"ScriptOn".Theswitchthestorytranscriptonruleislistedinthecarryoutswitchingthestorytranscriptonrulebook.
-TheswitchthestorytranscriptonruletranslatesintoI6as"SWITCH_TRANSCRIPT_ON_R"with
+TheswitchthestorytranscriptonruletranslatesintoInteras"SWITCH_TRANSCRIPT_ON_R"with"Transcripting is already on." (A),"Start of a transcript of" (B),"Attempt to begin transcript failed." (C).Switchingthestorytranscriptoffisanactionoutofworldandapplyingtonothing.
-TheswitchingthestorytranscriptoffactiontranslatesintoI6as"ScriptOff".
+TheswitchingthestorytranscriptoffactiontranslatesintoInteras"ScriptOff".Theswitchthestorytranscriptoffruleislistedinthecarryoutswitchingthestorytranscriptoffrulebook.
-TheswitchthestorytranscriptoffruletranslatesintoI6as"SWITCH_TRANSCRIPT_OFF_R"with
+TheswitchthestorytranscriptoffruletranslatesintoInteras"SWITCH_TRANSCRIPT_OFF_R"with"Transcripting is already off." (A),"[line break]End of transcript." (B),"Attempt to end transcript failed." (C).
@@ -3236,11 +3236,11 @@ different formats being compiled to.
§177. There's really no very good reason why we provide the out-of-world command
SCORE but not (say) TIME, or any one of dozens of other traditional what's-my-status
@@ -3252,10 +3252,10 @@ removal would be a gesture too far.
Requestingthescoreisanactionoutofworldandapplyingtonothing.
-TherequestingthescoreactiontranslatesintoI6as"Score".
+TherequestingthescoreactiontranslatesintoInteras"Score".Theannouncethescoreruleislistedinthecarryoutrequestingthescorerulebook.
-TheannouncethescoreruletranslatesintoI6as"ANNOUNCE_SCORE_R"with
+TheannouncethescoreruletranslatesintoInteras"ANNOUNCE_SCORE_R"with"[if the story has ended]In that game you scored[otherwise]You have so far scorednd if [score] out of a possible [maximum score], in [turn count] turn[s]" (A),", earning you the rank of " (B),
@@ -3272,46 +3272,46 @@ and does no harm.
Preferringabbreviatedroomdescriptionsisanactionoutofworldandapplyingtonothing.
-ThepreferringabbreviatedroomdescriptionsactiontranslatesintoI6as"LMode3".
+ThepreferringabbreviatedroomdescriptionsactiontranslatesintoInteras"LMode3".Thepreferabbreviatedroomdescriptionsruleislistedinthecarryoutpreferringabbreviatedroomdescriptionsrulebook.
-ThepreferabbreviatedroomdescriptionsruletranslatesintoI6as"PREFER_ABBREVIATED_R".
+ThepreferabbreviatedroomdescriptionsruletranslatesintoInteras"PREFER_ABBREVIATED_R".Thestandardreportpreferringabbreviatedroomdescriptionsruleislistedinthereportpreferringabbreviatedroomdescriptionsrulebook.Thestandardreportpreferringabbreviatedroomdescriptionsruletranslatesinto
-I6as"REP_PREFER_ABBREVIATED_R"with
+Interas"REP_PREFER_ABBREVIATED_R"with" is now in its 'superbrief' mode, which always gives short descriptions of locations (even if you haven't been there before)." (A).Preferringunabbreviatedroomdescriptionsisanactionoutofworldandapplyingtonothing.
-ThepreferringunabbreviatedroomdescriptionsactiontranslatesintoI6as"LMode2".
+ThepreferringunabbreviatedroomdescriptionsactiontranslatesintoInteras"LMode2".Thepreferunabbreviatedroomdescriptionsruleislistedinthecarryoutpreferringunabbreviatedroomdescriptionsrulebook.
-ThepreferunabbreviatedroomdescriptionsruletranslatesintoI6as"PREFER_UNABBREVIATED_R".
+ThepreferunabbreviatedroomdescriptionsruletranslatesintoInteras"PREFER_UNABBREVIATED_R".Thestandardreportpreferringunabbreviatedroomdescriptionsruleislistedinthereportpreferringunabbreviatedroomdescriptionsrulebook.Thestandardreportpreferringunabbreviatedroomdescriptionsruletranslatesinto
-I6as"REP_PREFER_UNABBREVIATED_R"with
+Interas"REP_PREFER_UNABBREVIATED_R"with" is now in its 'verbose' mode, which always gives long descriptions of locations (even if you've been there before)." (A).Preferringsometimesabbreviatedroomdescriptionsisanactionoutofworldandapplyingtonothing.
-ThepreferringsometimesabbreviatedroomdescriptionsactiontranslatesintoI6as"LMode1".
+ThepreferringsometimesabbreviatedroomdescriptionsactiontranslatesintoInteras"LMode1".Theprefersometimesabbreviatedroomdescriptionsruleislistedinthecarryoutpreferringsometimesabbreviatedroomdescriptionsrulebook.
-TheprefersometimesabbreviatedroomdescriptionsruletranslatesintoI6as
+TheprefersometimesabbreviatedroomdescriptionsruletranslatesintoInteras"PREFER_SOMETIMES_ABBREVIATED_R".Thestandardreportpreferringsometimesabbreviatedroomdescriptionsruleislistedinthereportpreferringsometimesabbreviatedroomdescriptionsrulebook.Thestandardreportpreferringsometimesabbreviatedroomdescriptionsruletranslates
-intoI6as"REP_PREFER_SOMETIMES_ABBR_R"with
+intoInteras"REP_PREFER_SOMETIMES_ABBR_R"with" is now in its 'brief' printing mode, which gives long descriptions of places never before visited and short descriptions otherwise." (A).
§180. Lastly, the "pronouns" verb, which is perhaps more often used by people
debugging the I6 parser than by actual players.
@@ -3349,11 +3349,11 @@ debugging the I6 parser than by actual players.
Requestingthepronounmeaningsisanactionoutofworldandapplyingtonothing.
-TherequestingthepronounmeaningsactiontranslatesintoI6as"Pronouns".
+TherequestingthepronounmeaningsactiontranslatesintoInteras"Pronouns".Theannouncethepronounmeaningsruleislistedinthecarryoutrequestingthepronounmeaningsrulebook.
-TheannouncethepronounmeaningsruletranslatesintoI6as"ANNOUNCE_PRONOUN_MEANINGS_R"with
+TheannouncethepronounmeaningsruletranslatesintoInteras"ANNOUNCE_PRONOUN_MEANINGS_R"with"At the moment, " (A),"means " (B),"is unset" (C),
diff --git a/docs/standard_rules/S-cg.html b/docs/standard_rules/S-cg.html
index 4fbc48e2f..acbf9958b 100644
--- a/docs/standard_rules/S-cg.html
+++ b/docs/standard_rules/S-cg.html
@@ -275,7 +275,7 @@ fact used in the default grammar above, but is available for authors.
@@ -796,7 +796,7 @@ that property for the "yourself" object, so we need do nothing here.
Thedescriptionofyourselfisusually"As good-looking as ever."
-TheyourselfobjecttranslatesintoI6as"selfobj".
+TheyourselfobjecttranslatesintoInteras"selfobj".
§37. Non-fundamental kinds. We have now finished defining the nine fundamental kinds which Inform requires
in order for it to function. There are six more to define, but it's worth
@@ -1041,31 +1041,31 @@ meanings were basically similar.
§46. Second, the I7 value properties mapping onto I6 properties. Again,
map_region is a new I6 property of our own, while the rest are I6 staples.
@@ -1073,11 +1073,11 @@ And see also "other side", which is translated above for timing reasons.
diff --git a/docs/standard_rules/S-var.html b/docs/standard_rules/S-var.html
index 84f5a4058..d95ed35d6 100644
--- a/docs/standard_rules/S-var.html
+++ b/docs/standard_rules/S-var.html
@@ -70,7 +70,7 @@ perspective during play and become somebody else — at which point the
Note that "player" is a name given to a variable explicitly defined in
the srules template with a given name (in this case player), so it
-has a "translates into I6" sentence.
+has a "translates into Inter" sentence.
@@ -82,7 +82,7 @@ has a "translates into I6" sentence.
Section1 - SituationTheplayerisapersonthatvaries.
-TheplayervariabletranslatesintoI6as"player".
+TheplayervariabletranslatesintoInteras"player".
§2. The I7 variable "location" corresponds to I6's real_location, not
location. Its value is never equal to a pseudo-room representing darkness:
@@ -105,12 +105,12 @@ and this cannot be changed at run-time.
Thetimeofday -- documentedatvar_time -- isatimethatvaries.Thedarknesswitnessedisatruthstatethatvaries.
-ThelocationvariabletranslatesintoI6as"real_location".
-ThescorevariabletranslatesintoI6as"score".
-ThelastnotifiedscorevariabletranslatesintoI6as"last_score".
-ThemaximumscorevariabletranslatesintoI6as"MAX_SCORE".
-TheturncountvariabletranslatesintoI6as"turns".
-ThetimeofdayvariabletranslatesintoI6as"the_time".
+ThelocationvariabletranslatesintoInteras"real_location".
+ThescorevariabletranslatesintoInteras"score".
+ThelastnotifiedscorevariabletranslatesintoInteras"last_score".
+ThemaximumscorevariabletranslatesintoInteras"MAX_SCORE".
+TheturncountvariabletranslatesintoInteras"turns".
+ThetimeofdayvariabletranslatesintoInteras"the_time".
§3. It is arguable that "noun", "second noun" and "person asked" ought
to be rulebook variables belonging to the action-processing rules, so that
@@ -140,11 +140,11 @@ meanings from sentence to sentence.
basedruleproducingnothingthatvaries.Theitemdescribedisanobjectthatvaries.
-ThenounvariabletranslatesintoI6as"noun".
-ThesecondnounvariabletranslatesintoI6as"second".
-ThepersonaskedvariabletranslatesintoI6as"actor".
-ThereasontheactionfailedvariabletranslatesintoI6as"reason_the_action_failed".
-TheitemdescribedvariabletranslatesintoI6as"self".
+ThenounvariabletranslatesintoInteras"noun".
+ThesecondnounvariabletranslatesintoInteras"second".
+ThepersonaskedvariabletranslatesintoInteras"actor".
+ThereasontheactionfailedvariabletranslatesintoInteras"reason_the_action_failed".
+TheitemdescribedvariabletranslatesintoInteras"self".
§4. "Person reaching" turns out to have exactly the same meaning as "person
asked" — they are both the actor, in Inter terms, but are used in different
@@ -159,10 +159,10 @@ situations.
Thesupporterinquestionisanobjectthatvaries.Theparticularpossession -- documentedatvar_particular -- isathingthatvaries.
-ThepersonreachingvariabletranslatesintoI6as"actor".
-ThecontainerinquestionvariabletranslatesintoI6as"parameter_object".
-ThesupporterinquestionvariabletranslatesintoI6as"parameter_object".
-TheparticularpossessionvariabletranslatesintoI6as"particular_possession".
+ThepersonreachingvariabletranslatesintoInteras"actor".
+ThecontainerinquestionvariabletranslatesintoInteras"parameter_object".
+ThesupporterinquestionvariabletranslatesintoInteras"parameter_object".
+TheparticularpossessionvariabletranslatesintoInteras"particular_possession".
§5. Parsing variables follow. The I6 parser tends to put any data read as part
of a command into the variable parsed_number, but then, Inter is typeless:
@@ -193,10 +193,10 @@ understood"), "the truth state understood" but no others.
Thetruthstateunderstoodisatruthstatethatvaries.Thecurrentitemfromthemultipleobjectlistisanobjectthatvaries.
-Theplayer'scommandvariabletranslatesintoI6as"players_command".
-ThematchedtextvariabletranslatesintoI6as"matched_text".
-ThetopicunderstoodvariabletranslatesintoI6as"parsed_number".
-ThecurrentitemfromthemultipleobjectlistvariabletranslatesintoI6as
+Theplayer'scommandvariabletranslatesintoInteras"players_command".
+ThematchedtextvariabletranslatesintoInteras"matched_text".
+ThetopicunderstoodvariabletranslatesintoInteras"parsed_number".
+ThecurrentitemfromthemultipleobjectlistvariabletranslatesintoInteras"multiple_object_item".
§6.
@@ -210,11 +210,11 @@ understood"), "the truth state understood" but no others.
Thelefthandstatusline -- documentedatvar_sl -- isatextthatvaries.Therighthandstatuslineisatextthatvaries.
-ThelefthandstatuslinevariabletranslatesintoI6as"left_hand_status_line".
-TherighthandstatuslinevariabletranslatesintoI6as"right_hand_status_line".
+ThelefthandstatuslinevariabletranslatesintoInteras"left_hand_status_line".
+TherighthandstatuslinevariabletranslatesintoInteras"right_hand_status_line".Thelistinggroupsizeisanumberthatvaries.
-ThelistinggroupsizevariabletranslatesintoI6as"listing_size".
+ThelistinggroupsizevariabletranslatesintoInteras"listing_size".
§7. Now some linguistic variables:
@@ -223,7 +223,7 @@ understood"), "the truth state understood" but no others.
Section6 - LanguagegenerationThepriornamedobjectisanobjectthatvaries.
-ThepriornamedobjectvariabletranslatesintoI6as"prior_named_noun".
+ThepriornamedobjectvariabletranslatesintoInteras"prior_named_noun".Anobjecthasatextcalledlistgroupingkey.
§8. ...but they are not the last global variables created by the Standard Rules.
@@ -262,7 +262,7 @@ can be sure that we are first, so everything works.
Thestoryheadlineisusually"An Interactive Fiction".Thestorygenreisusually"Fiction".
-ThestorytitlevariabletranslatesintoI6as"Story".
+ThestorytitlevariabletranslatesintoInteras"Story".SectionSR2/6b - UnindexedStandardRulesvariables - Unindexed (forfigureslanguageelementonly)
@@ -312,10 +312,10 @@ run-time for what is in the end only a label.)
Section8 - UnindexedStandardRulesvariables - UnindexedTheI6-nothing-constantisanobjectthatvaries.
-TheI6-nothing-constantvariabletranslatesintoI6as"nothing".
+TheI6-nothing-constantvariabletranslatesintoInteras"nothing".TheI6-varying-globalisanobjectthatvaries.
-TheI6-varying-globalvariabletranslatesintoI6as"nothing".
+TheI6-varying-globalvariabletranslatesintoInteras"nothing".
§10. The remaining secret variables are:
@@ -334,13 +334,13 @@ preambles to rules in object-based rulebooks.
§11. Rulebooks. Whereas Basic Inform equips the language with only a handful of rulebooks
to start out, the Standard Rules are replete with them.
@@ -565,7 +565,7 @@ automatically to a safely neutral default value. It makes no decision.
§22. Startup. Every rulebook contains a (possibly empty) run of "first" rules, then
a (possibly empty) run of miscellaneous rules, then a (possibly empty)
@@ -626,11 +626,11 @@ ordinary I7 rules can be run.
Thevirtualmachinestartupruleislistedfirstinthestartuprulebook. nd.Theinitialisememoryruleislistedfirstinthestartuprulebook. st.
-ThevirtualmachinestartupruletranslatesintoI6as"VIRTUAL_MACHINE_STARTUP_R".
-TheinitialisememoryruletranslatesintoI6as"INITIALISE_MEMORY_R".
-TheseedrandomnumbergeneratorruletranslatesintoI6as"SEED_RANDOM_NUMBER_GENERATOR_R".
-TheupdatechronologicalrecordsruletranslatesintoI6as"UPDATE_CHRONOLOGICAL_RECORDS_R".
-ThepositionplayerinmodelworldruletranslatesintoI6as"POSITION_PLAYER_IN_MODEL_R".
+ThevirtualmachinestartupruletranslatesintoInteras"VIRTUAL_MACHINE_STARTUP_R".
+TheinitialisememoryruletranslatesintoInteras"INITIALISE_MEMORY_R".
+TheseedrandomnumbergeneratorruletranslatesintoInteras"SEED_RANDOM_NUMBER_GENERATOR_R".
+TheupdatechronologicalrecordsruletranslatesintoInteras"UPDATE_CHRONOLOGICAL_RECORDS_R".
+ThepositionplayerinmodelworldruletranslatesintoInteras"POSITION_PLAYER_IN_MODEL_R".Thisisthestartinthecorrectscenesrule: followthescenechangingrules.
@@ -782,17 +782,17 @@ I6 primitives in the template layer.
-TheadjustlightruletranslatesintoI6as"ADJUST_LIGHT_R"with
+TheadjustlightruletranslatesintoInteras"ADJUST_LIGHT_R"with"[It] [are] [if story tense is present tense]now [end if]pitch dark in [if story tense is present tense]here[else]there[end if]!" (A).
-TheadvancetimeruletranslatesintoI6as"ADVANCE_TIME_R".
-ThegenerateactionruletranslatesintoI6as"GENERATE_ACTION_R"with
+TheadvancetimeruletranslatesintoInteras"ADVANCE_TIME_R".
+ThegenerateactionruletranslatesintoInteras"GENERATE_ACTION_R"with"(considering the first sixteen objects only)[command clarification break]" (A),"Nothing to do!" (B).
-ThenoteobjectacquisitionsruletranslatesintoI6as"NOTE_OBJECT_ACQUISITIONS_R".
-TheparsecommandruletranslatesintoI6as"PARSE_COMMAND_R".
-ThetimedeventsruletranslatesintoI6as"TIMED_EVENTS_R".
+ThenoteobjectacquisitionsruletranslatesintoInteras"NOTE_OBJECT_ACQUISITIONS_R".
+TheparsecommandruletranslatesintoInteras"PARSE_COMMAND_R".
+ThetimedeventsruletranslatesintoInteras"TIMED_EVENTS_R".
§29. Shutdown. Goodbye is not the hardest word to say, but it does involve a little bit of
work. It might not actually be goodbye, for one thing: if this rulebook ends
@@ -824,8 +824,8 @@ current execution context entirely.
Thisistheprintplayer'sobituaryrule:carryouttheprintingtheplayer'sobituaryactivity.
-TheresurrectplayerifaskedruletranslatesintoI6as"RESURRECT_PLAYER_IF_ASKED_R".
-TheaskthefinalquestionruletranslatesintoI6as"ASK_FINAL_QUESTION_R".
+TheresurrectplayerifaskedruletranslatesintoInteras"RESURRECT_PLAYER_IF_ASKED_R".
+TheaskthefinalquestionruletranslatesintoInteras"ASK_FINAL_QUESTION_R".
§30. Scene changing. Scene changing is handled by a routine called DetectSceneChange which is
compiled directly by Inform: this is so primitive that it can't even be handled
@@ -838,7 +838,7 @@ use of this opportunity.
§31. We couldn't do this earlier (because creating a scene automatically generates
two rulebooks, and that would have thrown the rulebook numbering), so let's
@@ -990,18 +990,18 @@ instance, "check taking" is the specific check rulebook for the
the names aren't so visible).
-ThebasicaccessibilityruletranslatesintoI6as"BASIC_ACCESSIBILITY_R"with
+ThebasicaccessibilityruletranslatesintoInteras"BASIC_ACCESSIBILITY_R"with"You must name something more substantial." (A).
-ThebasicvisibilityruletranslatesintoI6as"BASIC_VISIBILITY_R"with
+ThebasicvisibilityruletranslatesintoInteras"BASIC_VISIBILITY_R"with"[It] [are] pitch dark, and [we] [can't see] a thing." (A).
-ThecarryingrequirementsruletranslatesintoI6as"CARRYING_REQUIREMENTS_R".
-TherequestedactionsrequirepersuasionruletranslatesintoI6as
+ThecarryingrequirementsruletranslatesintoInteras"CARRYING_REQUIREMENTS_R".
+TherequestedactionsrequirepersuasionruletranslatesintoInteras"REQUESTED_ACTIONS_REQUIRE_R"with"[The noun] [have] better things to do." (A).
-ThecarryoutrequestedactionsruletranslatesintoI6as
+ThecarryoutrequestedactionsruletranslatesintoInteras"CARRY_OUT_REQUESTED_ACTIONS_R"with"[The noun] [are] unable to do that." (A).
-Thedescendtospecificaction-processingruletranslatesintoI6as
+Thedescendtospecificaction-processingruletranslatesintoInteras"DESCEND_TO_SPECIFIC_ACTION_R".
§37. Specific action-processing. And now we descend to the lower level, which is much easier to understand.
@@ -1073,7 +1073,7 @@ and whether or not it is in world.
§41. Player's action awareness. This rulebook decides whether or not an action by somebody should be routinely
@@ -1115,7 +1115,7 @@ we expect most users to work with one of the two reaching rulebooks instead.
Theaccessthroughbarriersruleislistedlastintheaccessibilityrules.
-TheaccessthroughbarriersruletranslatesintoI6as
+TheaccessthroughbarriersruletranslatesintoInteras"ACCESS_THROUGH_BARRIERS_R"with"[regarding the noun][Those] [aren't] available." (A).
@@ -1236,7 +1236,7 @@ there as constants with the notation didn'tunderstandaddressee'slastnameerror.Thelatestparsererrorisacommandparsererrorthatvaries.
-ThelatestparsererrorvariabletranslatesintoI6as"etype".
+ThelatestparsererrorvariabletranslatesintoInteras"etype".
§51. Internal rules. These rules do nothing in themselves, and are really just hooks on which
some response texts can be hung.
@@ -1245,7 +1245,7 @@ some response texts can be hung.
Section9 - Responsesforinternalrules
-ThelistwriterinternalruletranslatesintoI6as
+ThelistwriterinternalruletranslatesintoInteras"LIST_WRITER_INTERNAL_R"with" (" (A),")" (B),
@@ -1273,7 +1273,7 @@ some response texts can be hung.
"Nothing" (X),"nothing" (Y).
-TheactionprocessinginternalruletranslatesintoI6as
+TheactionprocessinginternalruletranslatesintoInteras"ACTION_PROCESSING_INTERNAL_R"with"[bracket]That command asks to do something outside of play, so it can only make sense from you to me. [The noun] cannot be asked to do this.lose
@@ -1290,7 +1290,7 @@ some response texts can be hung.
cut short.)" (J),"I didn't understand that instruction." (K).
-TheparsererrorinternalruletranslatesintoI6as
+TheparsererrorinternalruletranslatesintoInteras"PARSER_ERROR_INTERNAL_R"with"I didn't understand that sentence." (A),"I only understood you as far as wanting to " (B),
@@ -1319,7 +1319,7 @@ some response texts can be hung.
"To talk to someone, try 'someone, hello' or some such." (W),"I beg your pardon?" (X).
-TheparsernothingerrorinternalruletranslatesintoI6as
+TheparsernothingerrorinternalruletranslatesintoInteras"PARSER_N_ERROR_INTERNAL_R"with"Nothing to do!" (A),"[There] [adapt the verb are from the third person plural] none at all available!" (B),
@@ -1328,17 +1328,17 @@ some response texts can be hung.
"[The noun] [aren't] open." (E),"[The noun] [are] empty." (F).
-ThedarknessnameinternalruletranslatesintoI6as"DARKNESS_NAME_INTERNAL_R"with
+ThedarknessnameinternalruletranslatesintoInteras"DARKNESS_NAME_INTERNAL_R"with"Darkness" (A).
-TheparsercommandinternalruletranslatesintoI6as
+TheparsercommandinternalruletranslatesintoInteras"PARSER_COMMAND_INTERNAL_R"with"Sorry, that can't be corrected." (A),"Think nothing of it." (B),"'Oops' can only correct a single word." (C),"You can hardly repeat that." (D).
-TheparserclarificationinternalruletranslatesintoI6as
+TheparserclarificationinternalruletranslatesintoInteras"PARSER_CLARIF_INTERNAL_R"with"Who do you mean, " (A),"Which do you mean, " (B),
@@ -1351,11 +1351,11 @@ some response texts can be hung.
"that" (G)," or " (H).
-TheyesornoquestioninternalruletranslatesintoI6as
+TheyesornoquestioninternalruletranslatesintoInteras"YES_OR_NO_QUESTION_INTERNAL_R"with"Please answer yes or no." (A).
-TheprintprotagonistinternalruletranslatesintoI6as
+TheprintprotagonistinternalruletranslatesintoInteras"PRINT_PROTAGONIST_INTERNAL_R"with"[We]" (A),"[ourselves]" (B),
diff --git a/docs/supervisor-module/2-ce.html b/docs/supervisor-module/2-ce.html
index 3e00dcc83..c7480bf88 100644
--- a/docs/supervisor-module/2-ce.html
+++ b/docs/supervisor-module/2-ce.html
@@ -111,7 +111,7 @@ fields are blank.
-copy_error *CopyErrors::new(intcat, intsubcat) {
+copy_error *CopyErrors::new(intcat, intsubcat) {copy_error *CE = CREATE(copy_error);CE->copy = NULL;CE->error_category = cat;
@@ -171,7 +171,7 @@ we also offer these functions to tack extra details on:
CE->details_work2 = w2;}
-voidCopyErrors::supply_node(copy_error *CE, parse_node *n) {
+voidCopyErrors::supply_node(copy_error *CE, parse_node *n) {CE->details_node = n;}
diff --git a/docs/supervisor-module/2-cps.html b/docs/supervisor-module/2-cps.html
index cc917f116..8815208a3 100644
--- a/docs/supervisor-module/2-cps.html
+++ b/docs/supervisor-module/2-cps.html
@@ -144,7 +144,7 @@ for later reporting. These are stored in a list.
-voidCopies::attach_error(inbuild_copy *C, copy_error *CE) {
+voidCopies::attach_error(inbuild_copy *C, copy_error *CE) {if (C == NULL) internal_error("no copy to attach to");CopyErrors::supply_attached_copy(CE, C);ADD_TO_LINKED_LIST(CE, copy_error, C->errors_reading_source_text);
diff --git a/docs/supervisor-module/3-is2.html b/docs/supervisor-module/3-is2.html
index 40a2aedc6..8985037e1 100644
--- a/docs/supervisor-module/3-is2.html
+++ b/docs/supervisor-module/3-is2.html
@@ -130,7 +130,6 @@ folders anyway; maybe we should leave well be.)
if (project == NULL) internal_error("no project");if (S->associated_copy->edition->work->genre == project_bundle_genre)Pathnames::create_in_file_system(Projects::materials_path(project));
-SourceText::bulk_of_source_loaded(); #ifdefCORE_MODULEreturnTask::carry_out(S); #endif
diff --git a/docs/supervisor-module/4-em.html b/docs/supervisor-module/4-em.html
index a5f8a51ca..6b876df6c 100644
--- a/docs/supervisor-module/4-em.html
+++ b/docs/supervisor-module/4-em.html
@@ -113,7 +113,7 @@ which stores data about extensions used by the Inform compiler.
-inform_extension *ExtensionManager::from_copy(inbuild_copy *C) {
+inform_extension *ExtensionManager::from_copy(inbuild_copy *C) {if ((C) && (C->edition->work->genre == extension_genre)) {returnRETRIEVE_POINTER_inform_extension(C->metadata); }
diff --git a/docs/supervisor-module/5-ls.html b/docs/supervisor-module/5-ls.html
index c6a0afdfd..6ec578447 100644
--- a/docs/supervisor-module/5-ls.html
+++ b/docs/supervisor-module/5-ls.html
@@ -21,6 +21,7 @@ function togglePopup(material_id) {
+
@@ -243,6 +244,23 @@ include the Materials folder for any relevant project.
returnNULL;}
+
§11. Finally, the following Preform nonterminal matches the English-language
+name of a language: for example, "French". Unlike the above functions, it
+looks only at languages already loaded, and doesn't scan nests for more.
+
diff --git a/docs/supervisor-module/6-hdn.html b/docs/supervisor-module/6-hdn.html
index 5fe55e8b5..2852464aa 100644
--- a/docs/supervisor-module/6-hdn.html
+++ b/docs/supervisor-module/6-hdn.html
@@ -309,7 +309,6 @@ different way in. (These are never skipped.)
voidHeadings::place_implied_level_0(parse_node_tree *T, parse_node *pn) {Headings::attach(T, pn);
-Annotations::write_int(pn, sentence_unparsed_ANNOT, FALSE);Annotations::write_int(pn, heading_level_ANNOT, 0);Annotations::write_int(pn, implied_heading_ANNOT, TRUE);}
diff --git a/docs/supervisor-module/6-inc.html b/docs/supervisor-module/6-inc.html
index cfb9a38ec..8a503b014 100644
--- a/docs/supervisor-module/6-inc.html
+++ b/docs/supervisor-module/6-inc.html
@@ -415,7 +415,7 @@ use an extension which is marked as not working on the current VM.
§8. The inform7 compiler will eventually make a much more detailed syntax
-tree, extending the one we make here: but we will basically just break the
-text into sentences, arrange those under headings, and take action on just a
-few so-called "structural sentences" which have to be dealt with early on.
-
-
-
syntax allows us to create a callback function which will be called
-whenever a new sentence is made. What we use it for reflects that fact that
-the vast bulk of the source text is read by supervisor early in a run of
-inform7, with just a few sentences ("inventions") added later. The bulk
-part is parsed collectively, but the later inventions have to be marked as
-needing to be parsed one by one. So, when supervisor has definitely
-finished loading the bulk in, it calls:
-
§10. The next tweak to syntax is to give it some node metadata. syntax
+
§8. The next tweak to syntax is to give it some node metadata. syntax
itself places nodes of a small number of basic types into the syntax tree;
we want to expand on those. (And the core module will expand on them still
further, so this still isn't everything: see Parse Tree Usage (in core).)
@@ -275,7 +238,7 @@ look for below. (The asterisk notation for defineNODE_METADATA_SETUP_SYNTAX_CALLBACKSourceText::node_metadata
+
defineNODE_METADATA_SETUP_SYNTAX_CALLBACKSourceText::node_metadataenumBIBLIOGRAPHIC_NT For the initial title sentenceenumRULE_NT "Instead of taking something, ..."enumINFORM6CODE_NT "Include (- ... -)
@@ -297,7 +260,7 @@ Inform users: it increases output to the debugging log.)
NodeType::new(INVOCATION_LIST_NT, I"INVOCATION_LIST_NT", 0, INFTY, L4_NCAT, 0);}
-
§11. Sentences in the source text are of five categories: dividing sentences,
+
§9. Sentences in the source text are of five categories: dividing sentences,
which divide up the source into segments; structural sentences, which split
the source into different forms (standard text, tables, equations, I6 matter,
and so on); nonstructural sentences, which make grammatical definitions and
@@ -346,15 +309,15 @@ and here goes:
section...==> { 5, - }<extension-end-marker-sentence>::=
-...begin/beginshere|==> { -1, - }; Check we can begin an extension here11.1;
-...end/endshere==> { -2, - }; Check we can end an extension here11.2;
+...begin/beginshere|==> { -1, - }; Check we can begin an extension here9.1;
+...end/endshere==> { -2, - }; Check we can end an extension here9.2;
§11.1. Note that the extension end markers are only read in extensions, so they can
+
§9.1. Note that the extension end markers are only read in extensions, so they can
never accidentally match in the main source text.
-
Check we can begin an extension here11.1 =
+
Check we can begin an extension here9.1 =
@@ -364,8 +327,8 @@ never accidentally match in the main source text.
case3: PROBLEM_SYNTAX_CALLBACK(ExtBeginsAfterEndsHere_SYNERROR, W, sfsm->ref, 0); break; }
@@ -375,8 +338,8 @@ never accidentally match in the main source text.
case3: PROBLEM_SYNTAX_CALLBACK(ExtMultipleEndsHere_SYNERROR, W, sfsm->ref, 0); break; }
§13. Rules are ordinarily detected by their colon, which divides the header from the
+
§11. Rules are ordinarily detected by their colon, which divides the header from the
rest: colons are not otherwise legal in Inform. But there's an exception. If the
sentence consists of text matching the following grammar, followed by comma,
followed by more text, then the comma is read as if it's a colon and the
@@ -413,7 +376,7 @@ sentence becomes a rule. For example:
when...
§14. Properly speaking, despite the definition above, language modifying sentences
+
§12. Properly speaking, despite the definition above, language modifying sentences
are nonstructural. So what are they doing here? The answer is that we need to
read them early on, because they affect the way that they parse all other
sentences. Whereas other nonstructural sentences can wait, these can't.
@@ -425,12 +388,12 @@ sentences. Whereas other nonstructural sentences can wait, these can't.
use...languageelement/elements==> { -1, - }
§15. The following callback function is called by syntax when it breaks a
+
§13. The following callback function is called by syntax when it breaks a
sentence of type BEGINHERE_NT or ENDHERE_NT — i.e., the beginning or end
of an extension.
voidSourceText::new_language(wordingW) {
diff --git a/docs/syntax-module/2-na.html b/docs/syntax-module/2-na.html
index 8d16686fc..483fa5b53 100644
--- a/docs/syntax-module/2-na.html
+++ b/docs/syntax-module/2-na.html
@@ -154,7 +154,7 @@ one (on the same node) overwrites it, but this is not an error.
enumheading_level_ANNOTfrom1 int: for HEADING nodes, a hierarchical level, 0 (highest) to 9 (lowest)enumlanguage_element_ANNOT int: this node is not really a sentence, but a language definition Use
-enumsentence_unparsed_ANNOT int: set if verbs haven't been sought yet hereenumsuppress_heading_dependencies_ANNOT int: ignore extension dependencies on this heading nodeenumimplied_heading_ANNOT int: set only for the heading of implied inclusionsdefineMAX_ANNOT_NUMBER (NO_DEFINED_ANNOT_VALUES+1)
@@ -259,8 +258,6 @@ node will throw an internal error — it must mean a bug in Inform.
voidAnnotations::make_annotation_allowed_table(void) {Annotations::allow(HEADING_NT, heading_level_ANNOT);Annotations::allow(SENTENCE_NT, language_element_ANNOT);
-Annotations::allow_for_category(L1_NCAT, sentence_unparsed_ANNOT);
-Annotations::allow_for_category(L2_NCAT, sentence_unparsed_ANNOT); #ifdefANNOTATION_PERMISSIONS_SYNTAX_CALLBACKANNOTATION_PERMISSIONS_SYNTAX_CALLBACK(); #endif
@@ -282,7 +279,7 @@ expected also to call the following:
voidAnnotations::allow(node_type_tt, intannot) {annotation_allowed[t - ENUMERATED_NT_BASE][annot] = TRUE;}
-voidAnnotations::allow_for_category(intcat, intannot) {
+voidAnnotations::allow_for_category(intcat, intannot) {LOOP_OVER_ENUMERATED_NTS(t)if (NodeType::category(t) == cat)Annotations::allow(t, annot);
@@ -293,7 +290,7 @@ types (i.e., those of an unenumerated node type) cannot be annotated.
-intAnnotations::is_allowed(node_type_tt, intannot) {
+intAnnotations::is_allowed(node_type_tt, intannot) {if ((annot <= 0) || (annot > MAX_ANNOT_NUMBER))internal_error("annotation number out of range");if (NodeType::is_enumerated(t))
@@ -306,7 +303,7 @@ is rarely used by Inform, but is needed when a node changes its type.
-voidAnnotations::clear_invalid(parse_node *pn) {
+voidAnnotations::clear_invalid(parse_node *pn) {node_type_tnt = Node::get_type(pn);while ((pn->annotations) && (!(Annotations::is_allowed(nt, pn->annotations->annotation_id))))
diff --git a/docs/syntax-module/3-snt.html b/docs/syntax-module/3-snt.html
index 8a8980c6d..26ad18a6c 100644
--- a/docs/syntax-module/3-snt.html
+++ b/docs/syntax-module/3-snt.html
@@ -496,7 +496,6 @@ is declared as if it were a super-heading in the text.
if (Lexer::file_of_origin(Wordings::first_wn(W)) != sfsm->sf) {parse_node *implicit_heading = Node::new(HEADING_NT);Node::set_text(implicit_heading, W);
-Annotations::write_int(implicit_heading, sentence_unparsed_ANNOT, FALSE);Annotations::write_int(implicit_heading, heading_level_ANNOT, 0);SyntaxTree::graft_sentence(T, implicit_heading); #ifdefNEW_HEADING_SYNTAX_CALLBACK
@@ -589,7 +588,6 @@ in Headings to determine whether we should include the material.
@@ -904,7 +900,6 @@ it would be too late.
LANGUAGE_ELEMENT_SYNTAX_CALLBACK(GET_RW(<language-modifying-sentence>, 1)); #endifAnnotations::write_int(new, language_element_ANNOT, TRUE);
-Annotations::write_int(new, sentence_unparsed_ANNOT, FALSE);
§6.9.8. And for similar reasons:
@@ -920,7 +915,6 @@ it would be too late.
WRITE_TO(wd, "%+W", Wordings::one_word(Wordings::first_wn(W)));LoadPreform::parse_text(wd);DISCARD_TEXT(wd)
-Annotations::write_int(new, sentence_unparsed_ANNOT, FALSE);