From 2c84a758d129dd1b6ab4ae6bc79fa0a2393a923a Mon Sep 17 00:00:00 2001
From: Graham Nelson
Since the comparison function depends only on the KOV, it may seem wasteful -of a word of memory to store it in the list, given that we are already storing -the KOV in any case. But we do this because comparisons have to be fast: we -don't want to incur the overhead of translating KOV to comparison function. -
-[ LIST_OF_TY_Compare listleft listright delta no_items i cf; delta = BlkValueRead(listleft, LIST_LENGTH_F) - BlkValueRead(listright, LIST_LENGTH_F); @@ -762,13 +756,20 @@ we sort based not on the item values but on their values for the property prop. (This only makes sense if the list contains objects.) +- +LIST_OF_TY_Sort(list, dir, 0, 0, cf) sorts the given list with the custom +comparison function cf, which must behave as any standard comparison function +would. +
++Constant SORT_LIST_RANDOM = 2; + Global LIST_OF_TY_Sort_cf; -[ LIST_OF_TY_Sort list dir prop cf i j no_items v; +[ LIST_OF_TY_Sort list dir prop prop_is_bv cf i j no_items v; BlkMakeMutable(list); no_items = BlkValueRead(list, LIST_LENGTH_F); - if (dir == 2) { + if (dir == SORT_LIST_RANDOM) { if (no_items < 2) return; for (i=1:i<no_items:i++) { j = random(i+1) - 1; @@ -779,8 +780,20 @@ we sort based not on the item values but on their values for the property return; } SetSortDomain(ListSwapEntries, ListCompareEntries); - if (cf) LIST_OF_TY_Sort_cf = BlkValueCompare; - else LIST_OF_TY_Sort_cf = 0; + if (cf) { + LIST_OF_TY_Sort_cf = cf; + } + else if (prop) { + if (prop_is_bv) { + LIST_OF_TY_Sort_cf = BlkValueCompare; + } + else { + LIST_OF_TY_Sort_cf = 0; + } + } + else { + LIST_OF_TY_Sort_cf = LIST_OF_TY_ComparisonFn(list); + } SortArray(list, prop, dir, no_items, 0); ]; @@ -791,23 +804,21 @@ we sort based not on the item values but on their values for the property BlkValueWrite(list, LIST_ITEM_BASE+j-1, v); ]; -[ ListCompareEntries list col i j d cf; +[ ListCompareEntries list col i j d; if (i==j) return 0; i = BlkValueRead(list, LIST_ITEM_BASE+i-1); j = BlkValueRead(list, LIST_ITEM_BASE+j-1); if (I7S_Col) { if (i provides I7S_Col) i=i.I7S_Col; else i=0; if (j provides I7S_Col) j=j.I7S_Col; else j=0; - cf = LIST_OF_TY_Sort_cf; - } else { - cf = LIST_OF_TY_ComparisonFn(list); } - if (cf == 0) { + if (LIST_OF_TY_Sort_cf == 0) { if (i > j) return 1; if (i < j) return -1; return 0; - } else - return cf(i, j); + } else { + return LIST_OF_TY_Sort_cf(i, j); + } ];
§18. TableCompareRowsCustomCF(T, C, R1, R2, D) is similar, but calls a custom +comparison function, and so ignores the C parameter. The D parameter is +also ignored at present. +
+ ++Global Table_Sort_cf; + +[ TableCompareRowsCustomCF tab col row1 row2 dir; + return Table_Sort_cf(tab, row1, row2); +]; ++
[ TableMoveRowDown tab r1 r2 rx k l m v f; @@ -728,7 +740,7 @@ where other entries are not. } ];-
§19. Shuffle. TableShuffle(T) sorts T into random row order. +
§20. Shuffle. TableShuffle(T) sorts T into random row order.
@@ -738,7 +750,7 @@ where other entries are not. for (i=2:i<=to:i++) TableSwapRows(tab, i, random(i)); ];-
§20. Next Row. TableNextRow(T, C, R, D) is used when scanning through a table in order +
§21. Next Row. TableNextRow(T, C, R, D) is used when scanning through a table in order
of the values in column C: ascending order if D = 1, descending if D =
-1. The current position is row R of column C, or R = 0 if we have
not yet found the first row. The return value is the row number for the
@@ -828,7 +840,7 @@ Rows with blank entries in C<
return min_at;
];
-
+
§22. Sort. This is really only a front-end: it calls the sorting code at "Sort.i6t".
+ §23. Sort. This is really only a front-end: it calls the sorting code at "Sort.i6t".
§23. Print Table to File. This is how we serialise a table to an external file, though the writing
+ §24. Print Table to File. This is how we serialise a table to an external file, though the writing
is done by printing characters in the standard way; it's just that the output
stream will be an external file rather than the screen when this routine
is called.
@@ -900,7 +920,7 @@ is called.
rfalse;
];
- §24. Read Table from File. And this is how we unserialise again. It makes sense only on Glulx.
+ §25. Read Table from File. And this is how we unserialise again. It makes sense only on Glulx.
§25. Debugging. Routines to print the state of a table, for debugging purposes only.
+ §26. Debugging. Routines to print the state of a table, for debugging purposes only.
§43. Lists. The following are all for adding and removing values to dynamic lists.
§48. Relations are the final data structure given here. In some ways they are
the most fundamental of all, but they're not either set or tested by
diff --git a/docs/basic_inform/S-prm.html b/docs/basic_inform/S-prm.html
index 1b83babf9..757263532 100644
--- a/docs/basic_inform/S-prm.html
+++ b/docs/basic_inform/S-prm.html
@@ -58,7 +58,7 @@ rubric text, and this is no exception:
[ TableMoveBlanksToBack tab fromrow torow i fbl lnbl blc;
@@ -848,25 +860,33 @@ Rows with blank entries in C<
return torow-blc; Final non-blank row
];
-
-[ TableSort tab col dir algorithm i j k f;
+[ TableSort tab col dir algorithm cf i j k;
for (i=1:i<=tab-->0:i++) {
j = tab-->i; Address of column table
if ((j-->1) & TB_COLUMN_DONTSORTME)
return RunTimeProblem(RTP_TABLE_CANTSORT, tab);
}
- if (col >= 100) col=TableFindCol(tab, col, false);
+
+ if (cf) {
+ Table_Sort_cf = cf;
+ SetSortDomain(TableSwapRows, TableCompareRowsCustomCF);
+ }
+ else {
+ if (col >= 100) col=TableFindCol(tab, col, false);
+ SetSortDomain(TableSwapRows, TableCompareRows);
+ }
+
k = TableRows(tab);
k = TableMoveBlanksToBack(tab, 1, k);
- SetSortDomain(TableSwapRows, TableCompareRows);
SortArray(tab, col, dir, k, algorithm);
];
-
@@ -981,7 +1001,7 @@ is called.
return RunTimeProblem(RTP_TABLE_BADFILE, tab);
];
-
diff --git a/docs/basic_inform/S-pd.html b/docs/basic_inform/S-pd.html
index a05e90471..641457ed0 100644
--- a/docs/basic_inform/S-pd.html
+++ b/docs/basic_inform/S-pd.html
@@ -1480,10 +1480,13 @@ text variable.
(- TableShuffle({T}); -).
To sort (T - table name) in/into (TC - table column) order
(documented at ph_sortcolumn):
- (- TableSort({T}, {TC}, 1); -).
+ (- TableSort({T}, {TC}, SORT_ASCENDING); -).
To sort (T - table name) in/into reverse (TC - table column) order
(documented at ph_sortcolumnreverse):
- (- TableSort({T}, {TC}, -1); -).
+ (- TableSort({T}, {TC}, SORT_DESCENDING); -).
+To sort (T - table name) with (cf - phrase (table name, number, number) -> number)
+ (documented at ph_sorttablephrase):
+ (- TableSort({T}, 0, SORT_ASCENDING, 0, {cf}-->1); -).
-Version [[Version Number]] of Basic Inform by Graham Nelson begins here.
+Version [[Version Number]] of Basic Inform by Graham Nelson begins here.
"Basic Inform, included in every project, defines the basic framework
of Inform as a programming language."
diff --git a/docs/lexicon-module/P-wtmd.html b/docs/lexicon-module/P-wtmd.html
index 5f401da91..24b434d33 100644
--- a/docs/lexicon-module/P-wtmd.html
+++ b/docs/lexicon-module/P-wtmd.html
@@ -181,21 +181,21 @@ than the number with correct ones
number of successes.
-Size of lexicon: 3162 excerpt meanings
- Stored among 855 words out of total vocabulary of 10626
+Size of lexicon: 3164 excerpt meanings
+ Stored among 855 words out of total vocabulary of 10631
719 words have a start list: longest belongs to report (with 293 meanings)
21 words have an end list: longest belongs to digits (with 7 meanings)
29 words have a middle list: longest belongs to to (with 4 meanings)
108 words have a subset list: longest belongs to street (with 4 meanings)
-Number of attempts to retrieve: 110520
- of which unsuccessful: 92374
- of which successful: 18146
+Number of attempts to retrieve: 110594
+ of which unsuccessful: 92446
+ of which successful: 18148
-Total attempts to match against excerpt meanings: 279412
- of which, total with incorrect hash codes: 256664
- of which, total with correct hash codes: 22748
- of which, total which matched: 19917
+Total attempts to match against excerpt meanings: 279464
+ of which, total with incorrect hash codes: 256710
+ of which, total with correct hash codes: 22754
+ of which, total which matched: 19919
This code was introduced as part of the implementation of IE-0001, and for -the first time throws problem messages is named resources do not exist. +the first time throws problem messages if named resources do not exist.
diff --git a/docs/supervisor-module/1-ic.html b/docs/supervisor-module/1-ic.html
index 344725e08..c07ac54c3 100644
--- a/docs/supervisor-module/1-ic.html
+++ b/docs/supervisor-module/1-ic.html
@@ -448,7 +448,6 @@ which continues until the parent calls Find the virtual machine10.1;
Supervisor::make_project_from_command_line(C);
- Supervisor::create_default_externals();
Supervisor::enter_phase(TINKERING_INBUILD_PHASE);
Supervisor::sort_nest_list();
@@ -571,32 +570,13 @@ nests, respectively.
(set_shared)?I"shared ":I"", Nests::tag_name(tag), P);
return N;
}
-
-void Supervisor::create_default_externals(void) {
- RUN_ONLY_BEFORE_PHASE(TINKERING_INBUILD_PHASE)
- inbuild_nest *E = shared_external_nest;
- if (E == NULL) {
- pathname *P = home_path;
- char *subfolder_within = INFORM_FOLDER_RELATIVE_TO_HOME;
- if (subfolder_within[0]) {
- TEMPORARY_TEXT(SF)
- WRITE_TO(SF, "%s", subfolder_within);
- P = Pathnames::down(home_path, SF);
- DISCARD_TEXT(SF)
- }
- P = Pathnames::down(P, I"Inform");
- SVEXPLAIN(1, "(in absence of explicit -external, inventing -external %p)\n", P);
- SVEXPLAIN(2, "(because home path, according to environment variable HOME, is %p)\n", home_path);
- E = Supervisor::add_nest(P, EXTERNAL_NEST_TAG);
- }
-}
§15. It is then sorted in tag order:
linked_list *shared_nest_list = NULL; -void Supervisor::sort_nest_list(void) { +void Supervisor::sort_nest_list(void) { RUN_ONLY_IN_PHASE(TINKERING_INBUILD_PHASE) shared_nest_list = NEW_LINKED_LIST(inbuild_nest); inbuild_nest *N; @@ -632,18 +612,18 @@ nests, respectively.-linked_list *Supervisor::shared_nest_list(void) { +linked_list *Supervisor::shared_nest_list(void) { RUN_ONLY_FROM_PHASE(NESTED_INBUILD_PHASE) if (shared_nest_list == NULL) internal_error("nest list never sorted"); return shared_nest_list; } -inbuild_nest *Supervisor::internal(void) { +inbuild_nest *Supervisor::internal(void) { RUN_ONLY_FROM_PHASE(NESTED_INBUILD_PHASE) return shared_internal_nest; } -inbuild_nest *Supervisor::external(void) { +inbuild_nest *Supervisor::external(void) { RUN_ONLY_FROM_PHASE(NESTED_INBUILD_PHASE) return shared_external_nest; } @@ -659,7 +639,7 @@ no better indication of where they are. supervisor_tools_location = P; } -pathname *Supervisor::default_internal_path(void) { +pathname *Supervisor::default_internal_path(void) { pathname *P = supervisor_tools_location; P = Pathnames::down(P, I"inform7"); P = Pathnames::down(P, I"Internal"); @@ -685,7 +665,7 @@ it, but otherwise the external nest is used.-pathname *Supervisor::transient(void) { +pathname *Supervisor::transient(void) { RUN_ONLY_FROM_PHASE(TINKERING_INBUILD_PHASE) if (shared_transient_resources == NULL) if (shared_external_nest) @@ -709,7 +689,7 @@ specify the bundle twice, or specify the file twice. pathname *project_bundle_request = NULL; filename *project_file_request = NULL; -int Supervisor::set_I7_source(filename *F) { +int Supervisor::set_I7_source(filename *F) { RUN_ONLY_FROM_PHASE(CONFIGURATION_INBUILD_PHASE) if (project_file_request) return FALSE; project_file_request = F; @@ -725,7 +705,7 @@ depending on who's asking.@@ -206,7 +210,7 @@ for later reporting. These are stored in a list. return C->source_text_read; } -wording Copies::get_source_text(inbuild_copy *C) { +wording Copies::get_source_text(inbuild_copy *C, text_stream *reason) { if (C->source_text_read == FALSE) { C->source_text_read = TRUE; if (LinkedLists::len(C->errors_reading_source_text) > 0) { diff --git a/docs/supervisor-module/2-gnr.html b/docs/supervisor-module/2-gnr.html index e7d2e17e0..0c2d87244 100644 --- a/docs/supervisor-module/2-gnr.html +++ b/docs/supervisor-module/2-gnr.html @@ -95,7 +95,7 @@ the instance kit_genre return gen; } -text_stream *Genres::name(inbuild_genre *G) { +text_stream *Genres::name(inbuild_genre *G) { if (G == NULL) return I"(none)"; return G->genre_name; } diff --git a/docs/supervisor-module/2-jm.html b/docs/supervisor-module/2-jm.html index 3bb4bab23..2a2c108f9 100644 --- a/docs/supervisor-module/2-jm.html +++ b/docs/supervisor-module/2-jm.html @@ -83,7 +83,7 @@ identifying the copy which it purports to identify. Report a syntax error in JSON1.1; return; } else { - Validate the JSON read in1.2; + if (req) Validate the JSON read in1.2; } DISCARD_TEXT(contents) C->metadata_record = obj; @@ -355,6 +355,7 @@ loads only once. JSON_requirement *JSONMetadata::requirements(void) { if (JSON_resource_metadata_requirements == NULL) { filename *F = InstalledFiles::filename(RESOURCE_JSON_REQS_IRES); + if (TextFiles::exists(F) == FALSE) return NULL; JSON_resource_metadata_requirements = JSON::read_requirements_file(NULL, F); } JSON_requirement *req = diff --git a/docs/supervisor-module/4-ebm.html b/docs/supervisor-module/4-ebm.html index 746aa76e7..b9c8d1710 100644 --- a/docs/supervisor-module/4-ebm.html +++ b/docs/supervisor-module/4-ebm.html @@ -59,7 +59,7 @@ function togglePopup(material_id) {-int Supervisor::set_I7_bundle(pathname *P) { +int Supervisor::set_I7_bundle(pathname *P) { RUN_ONLY_FROM_PHASE(CONFIGURATION_INBUILD_PHASE) if (project_bundle_request) return FALSE; project_bundle_request = P; @@ -756,7 +736,7 @@ location. If it hasn't, we create a project using inform_project *chosen_project = NULL; -void Supervisor::make_project_from_command_line(inbuild_copy *C) { +void Supervisor::make_project_from_command_line(inbuild_copy *C) { RUN_ONLY_IN_PHASE(PRETINKERING_INBUILD_PHASE) filename *F = NULL; result of -source at the command line @@ -793,7 +773,7 @@ location. If it hasn't, we create a project using } } -inform_project *Supervisor::project_set_at_command_line(void) { +inform_project *Supervisor::project_set_at_command_line(void) { return chosen_project; }diff --git a/docs/supervisor-module/2-cps.html b/docs/supervisor-module/2-cps.html index e36f3e320..f85dda432 100644 --- a/docs/supervisor-module/2-cps.html +++ b/docs/supervisor-module/2-cps.html @@ -123,6 +123,8 @@ claiming. If you are a manager, do not call this... inbuild_copy *copy = Copies::new_p(edition); copy->location_if_file = F; copy->nest_of_origin = N; + SVEXPLAIN(3, "(made %S copy C%d at file %f)\n", + Genres::name(copy->edition->work->genre), copy->allocation_id, F); return copy; } @@ -130,6 +132,8 @@ claiming. If you are a manager, do not call this... inbuild_copy *copy = Copies::new_p(edition); copy->location_if_path = P; copy->nest_of_origin = N; + SVEXPLAIN(3, "(made %S copy C%d at directory %p)\n", + Genres::name(copy->edition->work->genre), copy->allocation_id, P); return copy; }
- Home
- Inbuild Modules
- supervisor
- Chapter 4: Genre Management
- Extension Bundle Manager
Claiming and creating copies of the kit genre: used for kits of precompiled Inter code.
-
+
- §1. Genre definition
- §4. Claiming
- §6. Searching
- §7. Copying
- §8. Build graph
- §9. Source text
- §10. Documentation
§1. Genre definition. The extension_bundle_genre can be summarised as follows.
@@ -74,7 +74,8 @@ function togglePopup(material_id) { METHOD_ADD(extension_bundle_genre, GENRE_COPY_TO_NEST_MTID, ExtensionBundleManager::copy_to_nest); METHOD_ADD(extension_bundle_genre, GENRE_CONSTRUCT_GRAPH_MTID, ExtensionBundleManager::construct_graph); METHOD_ADD(extension_bundle_genre, GENRE_BUILDING_SOON_MTID, ExtensionBundleManager::building_soon); - METHOD_ADD(extension_bundle_genre, GENRE_DOCUMENT_MTID, ExtensionBundleManager::document); + METHOD_ADD(extension_bundle_genre, GENRE_DOCUMENT_MTID, ExtensionBundleManager::document); + METHOD_ADD(extension_bundle_genre, GENRE_READ_SOURCE_TEXT_FOR_MTID, ExtensionBundleManager::read_source_text_for); } void ExtensionBundleManager::write_work(inbuild_genre *gen, OUTPUT_STREAM, inbuild_work *work) { @@ -95,7 +96,7 @@ which stores data about extensions used by the Inform compiler.-inform_extension *ExtensionBundleManager::from_copy(inbuild_copy *C) { +inform_extension *ExtensionBundleManager::from_copy(inbuild_copy *C) { if ((C) && (C->edition->work->genre == extension_bundle_genre)) { return RETRIEVE_POINTER_inform_extension(C->metadata); } @@ -495,9 +496,10 @@ directory, we need to rsyncpathname *ExtensionBundleManager::pathname_in_nest(inbuild_nest *N, inbuild_edition *E) { + pathname *EX = ExtensionManager::path_within_nest(N); TEMPORARY_TEXT(leaf) Editions::write_canonical_leaf(leaf, E); - pathname *P = Pathnames::down(ExtensionBundleManager::path_within_nest(N), leaf); + pathname *P = Pathnames::down(Pathnames::down(EX, E->work->author_name), leaf); DISCARD_TEXT(leaf) return P; } @@ -545,10 +547,17 @@ directory, we need to rsync Extensions::construct_graph(ExtensionBundleManager::from_copy(C)); }- +-void ExtensionBundleManager::document(inbuild_genre *gen, inbuild_copy *C, pathname *dest) { +void ExtensionBundleManager::read_source_text_for(inbuild_genre *G, inbuild_copy *C) { + Extensions::read_source_text_for(ExtensionBundleManager::from_copy(C)); +} ++ + ++void ExtensionBundleManager::document(inbuild_genre *gen, inbuild_copy *C, pathname *dest) { Extensions::document(Extensions::from_copy(C), dest); }diff --git a/docs/supervisor-module/4-em.html b/docs/supervisor-module/4-em.html index 325b898b6..74ef042e7 100644 --- a/docs/supervisor-module/4-em.html +++ b/docs/supervisor-module/4-em.html @@ -98,7 +98,7 @@ later on, as needed, just for extensions of interest: see below.-pathname *ExtensionManager::path_within_nest(inbuild_nest *N) { +pathname *ExtensionManager::path_within_nest(inbuild_nest *N) { if (N == NULL) internal_error("no nest"); return Pathnames::down(N->location, I"Extensions"); } diff --git a/docs/supervisor-module/5-es.html b/docs/supervisor-module/5-es.html index 5be329ab5..3d6cabb08 100644 --- a/docs/supervisor-module/5-es.html +++ b/docs/supervisor-module/5-es.html @@ -409,12 +409,7 @@ this is unambiguous. }-
- This code is used in §2.2.1.3.
§2.3. Note that we don't attempt to modify the inbuild_work structure inside -the edition; we create an entirely new inbuild_work. That's because they -are immutable, and need to be for the extensions dictionary to work. -
- -Change the edition of the copy in light of the metadata found in the scan2.3 = +
§2.3. Change the edition of the copy in light of the metadata found in the scan2.3 =
@@ -427,7 +422,7 @@ are immutable, and need to be for the extensions dictionary to work. Copies::attach_error(C, CopyErrors::new_N(EXT_AUTHOR_TOO_LONG_CE, -1, Str::len(claimed_author_name))); C->edition = Editions::new( - Works::new_raw(extension_genre, claimed_title, claimed_author_name), V); + Works::new_raw(C->edition->work->genre, claimed_title, claimed_author_name), V); if (Str::len(reqs) > 0) { compatibility_specification *CS = Compatibility::from_text(reqs); if (CS) C->edition->compatibility = CS; @@ -731,7 +726,7 @@ in a minimal sort of way, with just an -inform_extension *Extensions::from_copy(inbuild_copy *C) { +inform_extension *Extensions::from_copy(inbuild_copy *C) { inform_extension *ext = ExtensionBundleManager::from_copy(C); if (ext == NULL) ext = ExtensionManager::from_copy(C); return ext; @@ -922,16 +917,18 @@ no project involved, we must take action ourselves.)void Extensions::construct_graph(inform_extension *E) { - Copies::get_source_text(E->as_copy); - Sentences::set_start_of_source(sfsm, -1); - Inclusions::traverse(E->as_copy, E->syntax_tree); - linked_list *L = NEW_LINKED_LIST(inbuild_nest); - inbuild_nest *N = Extensions::materials_nest(E); - ADD_TO_LINKED_LIST(N, inbuild_nest, L); - inbuild_requirement *req; - LOOP_OVER_LINKED_LIST(req, inbuild_requirement, E->kits) { - inform_kit *K = Kits::find_by_name(req->work->raw_title, L, NULL); - if (K) Graphs::need_this_to_use(E->as_copy->vertex, K->as_copy->vertex); + if (Supervisor::project_set_at_command_line() == NULL) { + Copies::get_source_text(E->as_copy, I"graphing extension"); + Sentences::set_start_of_source(sfsm, -1); + Inclusions::traverse(E->as_copy, E->syntax_tree); + linked_list *L = NEW_LINKED_LIST(inbuild_nest); + inbuild_nest *N = Extensions::materials_nest(E); + ADD_TO_LINKED_LIST(N, inbuild_nest, L); + inbuild_requirement *req; + LOOP_OVER_LINKED_LIST(req, inbuild_requirement, E->kits) { + inform_kit *K = Kits::find_by_name(req->work->raw_title, L, NULL); + if (K) Graphs::need_this_to_use(E->as_copy->vertex, K->as_copy->vertex); + } } }@@ -945,7 +942,7 @@ This is that time.-void Extensions::read_source_text_for(inform_extension *E) { +void Extensions::read_source_text_for(inform_extension *E) { inform_language *L = Languages::find_for(I"English", Extensions::nest_list(E)); Languages::read_Preform_definition(L, Extensions::nest_list(E)); filename *F = Extensions::main_source_file(E->as_copy); @@ -1017,7 +1014,7 @@ then its sentences will go to the extension's own tree.compiled_documentation *Extensions::get_documentation(inform_extension *E) { if (E == NULL) return NULL; - Copies::get_source_text(E->as_copy); in the unlikely event this has not happened yet + Copies::get_source_text(E->as_copy, I"getting documentation"); in the unlikely event this has not happened yet if (E->documentation_sought == FALSE) { if (E->as_copy->location_if_path) { pathname *D = Pathnames::down(E->as_copy->location_if_path, I"Documentation"); @@ -1047,7 +1044,7 @@ then its sentences will go to the extension's own tree.-void Extensions::document(inform_extension *E, pathname *dest) { +void Extensions::document(inform_extension *E, pathname *dest) { SVEXPLAIN(1, "(documenting %X to %p)\n", E->as_copy->edition->work, dest); compiled_documentation *cd = Extensions::get_documentation(E); DocumentationRenderer::as_HTML(dest, cd, NULL); @@ -1063,7 +1060,8 @@ make use of that: if (sf == NULL) return NULL; inbuild_copy *C = RETRIEVE_POINTER_inbuild_copy(sf->your_ref); if (C == NULL) return NULL; - if (C->edition->work->genre != extension_genre) return NULL; + if ((C->edition->work->genre != extension_genre) && + (C->edition->work->genre != extension_bundle_genre)) return NULL; return Extensions::from_copy(C); }diff --git a/docs/supervisor-module/5-ps2.html b/docs/supervisor-module/5-ps2.html index 0520a03a9..e02962adb 100644 --- a/docs/supervisor-module/5-ps2.html +++ b/docs/supervisor-module/5-ps2.html @@ -959,7 +959,7 @@ rather like a family tree for a minor European royal family. if (proj->chosen_build_target == NULL) { Projects::finalise_kit_dependencies(proj); project_being_scanned = proj; - Copies::get_source_text(proj->as_copy); + Copies::get_source_text(proj->as_copy, I"graphing project"); project_being_scanned = NULL; build_vertex *V = proj->as_copy->vertex; Construct the graph upstream of V33.1; diff --git a/docs/supervisor-module/6-inc.html b/docs/supervisor-module/6-inc.html index 24e1fbdbc..1db23df2a 100644 --- a/docs/supervisor-module/6-inc.html +++ b/docs/supervisor-module/6-inc.html @@ -322,7 +322,8 @@ Sausages by Mr Punch, and loaded it, but then read the sentence inform_extension *Inclusions::load(parse_node *last_H0, parse_node *at, inbuild_requirement *req, inform_project *for_project) { inform_extension *E = NULL; - LOOP_OVER(E, inform_extension) + if (for_project) + LOOP_OVER_LINKED_LIST(E, inform_extension, for_project->extensions_included) if ((Requirements::meets(E->as_copy->edition, req)) && (Copies::source_text_has_been_read(E->as_copy))) { Extensions::must_satisfy(E, req); @@ -352,7 +353,7 @@ Sausages by Mr Punch, and loaded it, but then read the sentence Issue a problem message saying that the VM does not meet requirements6.1.1; if (LinkedLists::len(search_result->copy->errors_reading_source_text) == 0) { - Copies::get_source_text(search_result->copy); + Copies::get_source_text(search_result->copy, I"loading extension"); } #ifndef CORE_MODULE Copies::list_attached_errors(STDERR, search_result->copy); diff --git a/docs/supervisor-module/7-dc.html b/docs/supervisor-module/7-dc.html index 9a0f6e13f..572631e4c 100644 --- a/docs/supervisor-module/7-dc.html +++ b/docs/supervisor-module/7-dc.html @@ -128,39 +128,41 @@ it's really not much more than the tree produced by scan_directory *D = Directories::open(EP); - TEMPORARY_TEXT(leafname) - while (Directories::next(D, leafname)) { - wchar_t first = Str::get_first_char(leafname), last = Str::get_last_char(leafname); - if (Platform::is_folder_separator(last)) continue; - if (first == '.') continue; - if (first == '(') continue; - text_stream *short_name = Str::new(); - filename *F = Filenames::in(EP, leafname); - Filenames::write_unextended_leafname(short_name, F); - if ((Str::get_at(short_name, Str::len(short_name)-2) == '-') && - ((Str::get_at(short_name, Str::len(short_name)-1) == 'I') - || (Str::get_at(short_name, Str::len(short_name)-1) == 'i'))) - continue; - satellite_test_case *stc = CREATE(satellite_test_case); - stc->is_example = egs; - stc->owning_heading = NULL; - stc->owning_node = NULL; - stc->owner = cd; - stc->short_name = short_name; - stc->test_file = F; - stc->ideal_transcript = NULL; - TEMPORARY_TEXT(ideal_leafname) - WRITE_TO(ideal_leafname, "%S-I.txt", stc->short_name); - filename *IF = Filenames::in(EP, ideal_leafname); - if (TextFiles::exists(IF)) stc->ideal_transcript = IF; - DISCARD_TEXT(ideal_leafname) - if (stc->is_example) { - Scan the example for its header and content2.1.2; + if (D) { + TEMPORARY_TEXT(leafname) + while (Directories::next(D, leafname)) { + wchar_t first = Str::get_first_char(leafname), last = Str::get_last_char(leafname); + if (Platform::is_folder_separator(last)) continue; + if (first == '.') continue; + if (first == '(') continue; + text_stream *short_name = Str::new(); + filename *F = Filenames::in(EP, leafname); + Filenames::write_unextended_leafname(short_name, F); + if ((Str::get_at(short_name, Str::len(short_name)-2) == '-') && + ((Str::get_at(short_name, Str::len(short_name)-1) == 'I') + || (Str::get_at(short_name, Str::len(short_name)-1) == 'i'))) + continue; + satellite_test_case *stc = CREATE(satellite_test_case); + stc->is_example = egs; + stc->owning_heading = NULL; + stc->owning_node = NULL; + stc->owner = cd; + stc->short_name = short_name; + stc->test_file = F; + stc->ideal_transcript = NULL; + TEMPORARY_TEXT(ideal_leafname) + WRITE_TO(ideal_leafname, "%S-I.txt", stc->short_name); + filename *IF = Filenames::in(EP, ideal_leafname); + if (TextFiles::exists(IF)) stc->ideal_transcript = IF; + DISCARD_TEXT(ideal_leafname) + if (stc->is_example) { + Scan the example for its header and content2.1.2; + } + ADD_TO_LINKED_LIST(stc, satellite_test_case, cd->cases); } - ADD_TO_LINKED_LIST(stc, satellite_test_case, cd->cases); + DISCARD_TEXT(leafname) + Directories::close(D); } - DISCARD_TEXT(leafname) - Directories::close(D);@@ -198,8 +200,7 @@ it's really not much more than the tree produced by tree_node *placement_node = NULL; if (Str::len(ess.placement) == 0) { - DocumentationCompiler::example_error(&ess, - I"example does not give its Location"); + placement_node = cd->tree->root; } else { placement_node = DocumentationTree::find_section(cd->tree, ess.placement); if (placement_node == NULL) { diff --git a/docs/supervisor-module/7-dr.html b/docs/supervisor-module/7-dr.html index f9e82e969..36d982337 100644 --- a/docs/supervisor-module/7-dr.html +++ b/docs/supervisor-module/7-dr.html @@ -420,28 +420,28 @@ in a hierarchical fashion. WRITE("Example %d is missing", eg); } else { DocumentationRenderer::render_example_heading(OUT, EN, EN->child); - } - HTML_CLOSE("div"); - Enter the small print4.1; - WRITE("This example is drawn from "); - tree_node *H = EN->parent; - if (H->type == heading_TNT) { - cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(H->content); - if (E->level == 1) { - DocumentationRenderer::link_to(OUT, E); - WRITE("Chapter %S", E->count); - HTML_CLOSE("a"); - } else if (E->level == 2) { - DocumentationRenderer::link_to(OUT, E); - WRITE("Section %S", E->count); - HTML_CLOSE("a"); - } else { - HTML_OPEN_WITH("a", "href=\"index.html\""); - WRITE("the introduction"); - HTML_CLOSE("a"); + HTML_CLOSE("div"); + Enter the small print4.1; + WRITE("This example is drawn from "); + tree_node *H = EN->parent; + if (H->type == heading_TNT) { + cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(H->content); + if (E->level == 1) { + DocumentationRenderer::link_to(OUT, E); + WRITE("Chapter %S", E->count); + HTML_CLOSE("a"); + } else if (E->level == 2) { + DocumentationRenderer::link_to(OUT, E); + WRITE("Section %S", E->count); + HTML_CLOSE("a"); + } else { + HTML_OPEN_WITH("a", "href=\"index.html\""); + WRITE("the introduction"); + HTML_CLOSE("a"); + } } + Exit the small print4.2; } - Exit the small print4.2; } void DocumentationRenderer::render_chapter(OUTPUT_STREAM, compiled_documentation *cd, int ch) { diff --git a/docs/supervisor-module/7-dt.html b/docs/supervisor-module/7-dt.html index 84b488141..6d3bfc327 100644 --- a/docs/supervisor-module/7-dt.html +++ b/docs/supervisor-module/7-dt.html @@ -428,9 +428,7 @@ if not. } } if ((task->to_find_section) && (N->type == heading_TNT)) { - cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(N->content); -LOG("Want %S find %S\n", task->to_find_section, E->recognition_name); if ((E->level == 2) && (Str::eq_insensitive(E->recognition_name, task->to_find_section))) { task->result = N; return FALSE; diff --git a/docs/supervisor-module/7-ti.html b/docs/supervisor-module/7-ti.html index d5208cc03..438dd50a5 100644 --- a/docs/supervisor-module/7-ti.html +++ b/docs/supervisor-module/7-ti.html @@ -116,7 +116,7 @@ produces a second report. if (N > 0) Begin report on a damaged extension2.3 else Begin report on a valid extension2.2; if (OUT) { - Copies::get_source_text(project->as_copy); + Copies::get_source_text(project->as_copy, I"graphing for installer"); build_vertex *V = Copies::construct_project_graph(project->as_copy); if (confirmed) Make confirmed report2.5 else Make unconfirmed report2.4; diff --git a/docs/supervisor-module/7-tm.html b/docs/supervisor-module/7-tm.html index 64dbbcc6c..60d51fc6c 100644 --- a/docs/supervisor-module/7-tm.html +++ b/docs/supervisor-module/7-tm.html @@ -90,9 +90,7 @@ the census, to be on the safe side.
- This code is used in §2 (twice).
void ExtensionWebsite::update(inform_project *proj) { LOGIF(EXTENSIONS_CENSUS, "Updating extensions documentation for project\n"); - HTML::set_link_abbreviation_path(Projects::path(proj)); - ExtensionIndex::write(proj); inform_extension *E; LOOP_OVER_LINKED_LIST(E, inform_extension, proj->extensions_included) @@ -102,6 +100,8 @@ the census, to be on the safe side. inbuild_search_result *res; LOOP_OVER_LINKED_LIST(res, inbuild_search_result, census) ExtensionWebsite::document_extension(Extensions::from_copy(res->copy), proj); + + ExtensionIndex::write(proj); }§3. The top-level index page is at this filename. diff --git a/inbuild/supervisor-module/Chapter 1/Inbuild Control.w b/inbuild/supervisor-module/Chapter 1/Inbuild Control.w index a78a3bf12..1de681cbc 100644 --- a/inbuild/supervisor-module/Chapter 1/Inbuild Control.w +++ b/inbuild/supervisor-module/Chapter 1/Inbuild Control.w @@ -356,7 +356,6 @@ void Supervisor::optioneering_complete(inbuild_copy *C, int compile_only, @
; Supervisor::make_project_from_command_line(C); - // Supervisor::create_default_externals(); Supervisor::enter_phase(TINKERING_INBUILD_PHASE); Supervisor::sort_nest_list(); @@ -471,25 +470,6 @@ inbuild_nest *Supervisor::add_nest(pathname *P, int tag) { return N; } -void Supervisor::create_default_externals(void) { - RUN_ONLY_BEFORE_PHASE(TINKERING_INBUILD_PHASE) - inbuild_nest *E = shared_external_nest; - if (E == NULL) { - pathname *P = home_path; - char *subfolder_within = INFORM_FOLDER_RELATIVE_TO_HOME; - if (subfolder_within[0]) { - TEMPORARY_TEXT(SF) - WRITE_TO(SF, "%s", subfolder_within); - P = Pathnames::down(home_path, SF); - DISCARD_TEXT(SF) - } - P = Pathnames::down(P, I"Inform"); - SVEXPLAIN(1, "(in absence of explicit -external, inventing -external %p)\n", P); - SVEXPLAIN(2, "(because home path, according to environment variable HOME, is %p)\n", home_path); - E = Supervisor::add_nest(P, EXTERNAL_NEST_TAG); - } -} - @ It is then sorted in tag order: = diff --git a/inbuild/supervisor-module/Chapter 2/Copies.w b/inbuild/supervisor-module/Chapter 2/Copies.w index 53ffc75e0..719ae9611 100644 --- a/inbuild/supervisor-module/Chapter 2/Copies.w +++ b/inbuild/supervisor-module/Chapter 2/Copies.w @@ -60,6 +60,8 @@ inbuild_copy *Copies::new_in_file(inbuild_edition *edition, filename *F, inbuild inbuild_copy *copy = Copies::new_p(edition); copy->location_if_file = F; copy->nest_of_origin = N; + SVEXPLAIN(3, "(made %S copy C%d at file %f)\n", + Genres::name(copy->edition->work->genre), copy->allocation_id, F); return copy; } @@ -67,6 +69,8 @@ inbuild_copy *Copies::new_in_path(inbuild_edition *edition, pathname *P, inbuild inbuild_copy *copy = Copies::new_p(edition); copy->location_if_path = P; copy->nest_of_origin = N; + SVEXPLAIN(3, "(made %S copy C%d at directory %p)\n", + Genres::name(copy->edition->work->genre), copy->allocation_id, P); return copy; } @@ -142,7 +146,7 @@ int Copies::source_text_has_been_read(inbuild_copy *C) { return C->source_text_read; } -wording Copies::get_source_text(inbuild_copy *C) { +wording Copies::get_source_text(inbuild_copy *C, text_stream *reason) { if (C->source_text_read == FALSE) { C->source_text_read = TRUE; if (LinkedLists::len(C->errors_reading_source_text) > 0) { diff --git a/inbuild/supervisor-module/Chapter 2/JSON Metadata.w b/inbuild/supervisor-module/Chapter 2/JSON Metadata.w index 315fa95cc..a3e9daa77 100644 --- a/inbuild/supervisor-module/Chapter 2/JSON Metadata.w +++ b/inbuild/supervisor-module/Chapter 2/JSON Metadata.w @@ -24,7 +24,7 @@ void JSONMetadata::read_metadata_file(inbuild_copy *C, filename *F, @ ; return; } else { - @ ; + if (req) @ ; } DISCARD_TEXT(contents) C->metadata_record = obj; @@ -251,6 +251,7 @@ dictionary *JSON_resource_metadata_requirements = NULL; JSON_requirement *JSONMetadata::requirements(void) { if (JSON_resource_metadata_requirements == NULL) { filename *F = InstalledFiles::filename(RESOURCE_JSON_REQS_IRES); + if (TextFiles::exists(F) == FALSE) return NULL; JSON_resource_metadata_requirements = JSON::read_requirements_file(NULL, F); } JSON_requirement *req = diff --git a/inbuild/supervisor-module/Chapter 4/Extension Bundle Manager.w b/inbuild/supervisor-module/Chapter 4/Extension Bundle Manager.w index 6e08bd3a2..be25ecf09 100644 --- a/inbuild/supervisor-module/Chapter 4/Extension Bundle Manager.w +++ b/inbuild/supervisor-module/Chapter 4/Extension Bundle Manager.w @@ -17,6 +17,7 @@ void ExtensionBundleManager::start(void) { METHOD_ADD(extension_bundle_genre, GENRE_CONSTRUCT_GRAPH_MTID, ExtensionBundleManager::construct_graph); METHOD_ADD(extension_bundle_genre, GENRE_BUILDING_SOON_MTID, ExtensionBundleManager::building_soon); METHOD_ADD(extension_bundle_genre, GENRE_DOCUMENT_MTID, ExtensionBundleManager::document); + METHOD_ADD(extension_bundle_genre, GENRE_READ_SOURCE_TEXT_FOR_MTID, ExtensionBundleManager::read_source_text_for); } void ExtensionBundleManager::write_work(inbuild_genre *gen, OUTPUT_STREAM, inbuild_work *work) { @@ -417,9 +418,10 @@ directory, we need to |rsync| it. = pathname *ExtensionBundleManager::pathname_in_nest(inbuild_nest *N, inbuild_edition *E) { + pathname *EX = ExtensionManager::path_within_nest(N); TEMPORARY_TEXT(leaf) Editions::write_canonical_leaf(leaf, E); - pathname *P = Pathnames::down(ExtensionBundleManager::path_within_nest(N), leaf); + pathname *P = Pathnames::down(Pathnames::down(EX, E->work->author_name), leaf); DISCARD_TEXT(leaf) return P; } @@ -467,6 +469,13 @@ void ExtensionBundleManager::construct_graph(inbuild_genre *G, inbuild_copy *C) Extensions::construct_graph(ExtensionBundleManager::from_copy(C)); } +@h Source text. + += +void ExtensionBundleManager::read_source_text_for(inbuild_genre *G, inbuild_copy *C) { + Extensions::read_source_text_for(ExtensionBundleManager::from_copy(C)); +} + @h Documentation. = diff --git a/inbuild/supervisor-module/Chapter 5/Extension Services.w b/inbuild/supervisor-module/Chapter 5/Extension Services.w index d9a711c8f..6e046baf5 100644 --- a/inbuild/supervisor-module/Chapter 5/Extension Services.w +++ b/inbuild/supervisor-module/Chapter 5/Extension Services.w @@ -303,10 +303,6 @@ this is unambiguous. Str::copy(reqs, mr.exp[1]); } -@ Note that we don't attempt to modify the |inbuild_work| structure inside -the edition; we create an entirely new |inbuild_work|. That's because they -are immutable, and need to be for the extensions dictionary to work. - @ = if (Str::len(claimed_title) == 0) { WRITE_TO(claimed_title, "Unknown"); } if (Str::len(claimed_author_name) == 0) { WRITE_TO(claimed_author_name, "Anonymous"); } @@ -317,7 +313,7 @@ are immutable, and need to be for the extensions dictionary to work. Copies::attach_error(C, CopyErrors::new_N(EXT_AUTHOR_TOO_LONG_CE, -1, Str::len(claimed_author_name))); C->edition = Editions::new( - Works::new_raw(extension_genre, claimed_title, claimed_author_name), V); + Works::new_raw(C->edition->work->genre, claimed_title, claimed_author_name), V); if (Str::len(reqs) > 0) { compatibility_specification *CS = Compatibility::from_text(reqs); if (CS) C->edition->compatibility = CS; @@ -745,16 +741,18 @@ no project involved, we must take action ourselves.) = void Extensions::construct_graph(inform_extension *E) { - Copies::get_source_text(E->as_copy); - Sentences::set_start_of_source(sfsm, -1); - Inclusions::traverse(E->as_copy, E->syntax_tree); - linked_list *L = NEW_LINKED_LIST(inbuild_nest); - inbuild_nest *N = Extensions::materials_nest(E); - ADD_TO_LINKED_LIST(N, inbuild_nest, L); - inbuild_requirement *req; - LOOP_OVER_LINKED_LIST(req, inbuild_requirement, E->kits) { - inform_kit *K = Kits::find_by_name(req->work->raw_title, L, NULL); - if (K) Graphs::need_this_to_use(E->as_copy->vertex, K->as_copy->vertex); + if (Supervisor::project_set_at_command_line() == NULL) { + Copies::get_source_text(E->as_copy, I"graphing extension"); + Sentences::set_start_of_source(sfsm, -1); + Inclusions::traverse(E->as_copy, E->syntax_tree); + linked_list *L = NEW_LINKED_LIST(inbuild_nest); + inbuild_nest *N = Extensions::materials_nest(E); + ADD_TO_LINKED_LIST(N, inbuild_nest, L); + inbuild_requirement *req; + LOOP_OVER_LINKED_LIST(req, inbuild_requirement, E->kits) { + inform_kit *K = Kits::find_by_name(req->work->raw_title, L, NULL); + if (K) Graphs::need_this_to_use(E->as_copy->vertex, K->as_copy->vertex); + } } } @@ -826,7 +824,7 @@ then its sentences will go to the extension's own tree. = compiled_documentation *Extensions::get_documentation(inform_extension *E) { if (E == NULL) return NULL; - Copies::get_source_text(E->as_copy); /* in the unlikely event this has not happened yet */ + Copies::get_source_text(E->as_copy, I"getting documentation"); /* in the unlikely event this has not happened yet */ if (E->documentation_sought == FALSE) { if (E->as_copy->location_if_path) { pathname *D = Pathnames::down(E->as_copy->location_if_path, I"Documentation"); @@ -866,7 +864,8 @@ inform_extension *Extensions::corresponding_to(source_file *sf) { if (sf == NULL) return NULL; inbuild_copy *C = RETRIEVE_POINTER_inbuild_copy(sf->your_ref); if (C == NULL) return NULL; - if (C->edition->work->genre != extension_genre) return NULL; + if ((C->edition->work->genre != extension_genre) && + (C->edition->work->genre != extension_bundle_genre)) return NULL; return Extensions::from_copy(C); } diff --git a/inbuild/supervisor-module/Chapter 5/Project Services.w b/inbuild/supervisor-module/Chapter 5/Project Services.w index 5e3c7d6eb..1f4977d4e 100644 --- a/inbuild/supervisor-module/Chapter 5/Project Services.w +++ b/inbuild/supervisor-module/Chapter 5/Project Services.w @@ -828,7 +828,7 @@ void Projects::construct_graph(inform_project *proj) { if (proj->chosen_build_target == NULL) { Projects::finalise_kit_dependencies(proj); project_being_scanned = proj; - Copies::get_source_text(proj->as_copy); + Copies::get_source_text(proj->as_copy, I"graphing project"); project_being_scanned = NULL; build_vertex *V = proj->as_copy->vertex; @ ; diff --git a/inbuild/supervisor-module/Chapter 6/Inclusions.w b/inbuild/supervisor-module/Chapter 6/Inclusions.w index 03b86d2c0..7b568b4b4 100644 --- a/inbuild/supervisor-module/Chapter 6/Inclusions.w +++ b/inbuild/supervisor-module/Chapter 6/Inclusions.w @@ -226,7 +226,8 @@ then we need to note that the version requirement on PS has been raised to 3. inform_extension *Inclusions::load(parse_node *last_H0, parse_node *at, inbuild_requirement *req, inform_project *for_project) { inform_extension *E = NULL; - LOOP_OVER(E, inform_extension) + if (for_project) + LOOP_OVER_LINKED_LIST(E, inform_extension, for_project->extensions_included) if ((Requirements::meets(E->as_copy->edition, req)) && (Copies::source_text_has_been_read(E->as_copy))) { Extensions::must_satisfy(E, req); @@ -253,7 +254,7 @@ inform_extension *Inclusions::load(parse_node *last_H0, parse_node *at, @ ; if (LinkedLists::len(search_result->copy->errors_reading_source_text) == 0) { - Copies::get_source_text(search_result->copy); + Copies::get_source_text(search_result->copy, I"loading extension"); } #ifndef CORE_MODULE Copies::list_attached_errors(STDERR, search_result->copy); diff --git a/inbuild/supervisor-module/Chapter 7/Documentation Compiler.w b/inbuild/supervisor-module/Chapter 7/Documentation Compiler.w index a32683a5c..94ed6d8ae 100644 --- a/inbuild/supervisor-module/Chapter 7/Documentation Compiler.w +++ b/inbuild/supervisor-module/Chapter 7/Documentation Compiler.w @@ -65,39 +65,41 @@ compiled_documentation *DocumentationCompiler::compile_from_path(pathname *P, @ = scan_directory *D = Directories::open(EP); - TEMPORARY_TEXT(leafname) - while (Directories::next(D, leafname)) { - wchar_t first = Str::get_first_char(leafname), last = Str::get_last_char(leafname); - if (Platform::is_folder_separator(last)) continue; - if (first == '.') continue; - if (first == '(') continue; - text_stream *short_name = Str::new(); - filename *F = Filenames::in(EP, leafname); - Filenames::write_unextended_leafname(short_name, F); - if ((Str::get_at(short_name, Str::len(short_name)-2) == '-') && - ((Str::get_at(short_name, Str::len(short_name)-1) == 'I') - || (Str::get_at(short_name, Str::len(short_name)-1) == 'i'))) - continue; - satellite_test_case *stc = CREATE(satellite_test_case); - stc->is_example = egs; - stc->owning_heading = NULL; - stc->owning_node = NULL; - stc->owner = cd; - stc->short_name = short_name; - stc->test_file = F; - stc->ideal_transcript = NULL; - TEMPORARY_TEXT(ideal_leafname) - WRITE_TO(ideal_leafname, "%S-I.txt", stc->short_name); - filename *IF = Filenames::in(EP, ideal_leafname); - if (TextFiles::exists(IF)) stc->ideal_transcript = IF; - DISCARD_TEXT(ideal_leafname) - if (stc->is_example) { - @ ; + if (D) { + TEMPORARY_TEXT(leafname) + while (Directories::next(D, leafname)) { + wchar_t first = Str::get_first_char(leafname), last = Str::get_last_char(leafname); + if (Platform::is_folder_separator(last)) continue; + if (first == '.') continue; + if (first == '(') continue; + text_stream *short_name = Str::new(); + filename *F = Filenames::in(EP, leafname); + Filenames::write_unextended_leafname(short_name, F); + if ((Str::get_at(short_name, Str::len(short_name)-2) == '-') && + ((Str::get_at(short_name, Str::len(short_name)-1) == 'I') + || (Str::get_at(short_name, Str::len(short_name)-1) == 'i'))) + continue; + satellite_test_case *stc = CREATE(satellite_test_case); + stc->is_example = egs; + stc->owning_heading = NULL; + stc->owning_node = NULL; + stc->owner = cd; + stc->short_name = short_name; + stc->test_file = F; + stc->ideal_transcript = NULL; + TEMPORARY_TEXT(ideal_leafname) + WRITE_TO(ideal_leafname, "%S-I.txt", stc->short_name); + filename *IF = Filenames::in(EP, ideal_leafname); + if (TextFiles::exists(IF)) stc->ideal_transcript = IF; + DISCARD_TEXT(ideal_leafname) + if (stc->is_example) { + @ ; + } + ADD_TO_LINKED_LIST(stc, satellite_test_case, cd->cases); } - ADD_TO_LINKED_LIST(stc, satellite_test_case, cd->cases); + DISCARD_TEXT(leafname) + Directories::close(D); } - DISCARD_TEXT(leafname) - Directories::close(D); @ @@ -130,8 +132,7 @@ typedef struct example_scanning_state { tree_node *placement_node = NULL; if (Str::len(ess.placement) == 0) { - DocumentationCompiler::example_error(&ess, - I"example does not give its Location"); + placement_node = cd->tree->root; } else { placement_node = DocumentationTree::find_section(cd->tree, ess.placement); if (placement_node == NULL) { diff --git a/inbuild/supervisor-module/Chapter 7/Documentation Renderer.w b/inbuild/supervisor-module/Chapter 7/Documentation Renderer.w index 10be33815..b8eef96bf 100644 --- a/inbuild/supervisor-module/Chapter 7/Documentation Renderer.w +++ b/inbuild/supervisor-module/Chapter 7/Documentation Renderer.w @@ -347,28 +347,28 @@ void DocumentationRenderer::render_example(OUTPUT_STREAM, compiled_documentation WRITE("Example %d is missing", eg); } else { DocumentationRenderer::render_example_heading(OUT, EN, EN->child); - } - HTML_CLOSE("div"); - @ ; - WRITE("This example is drawn from "); - tree_node *H = EN->parent; - if (H->type == heading_TNT) { - cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(H->content); - if (E->level == 1) { - DocumentationRenderer::link_to(OUT, E); - WRITE("Chapter %S", E->count); - HTML_CLOSE("a"); - } else if (E->level == 2) { - DocumentationRenderer::link_to(OUT, E); - WRITE("Section %S", E->count); - HTML_CLOSE("a"); - } else { - HTML_OPEN_WITH("a", "href=\"index.html\""); - WRITE("the introduction"); - HTML_CLOSE("a"); + HTML_CLOSE("div"); + @ ; + WRITE("This example is drawn from "); + tree_node *H = EN->parent; + if (H->type == heading_TNT) { + cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(H->content); + if (E->level == 1) { + DocumentationRenderer::link_to(OUT, E); + WRITE("Chapter %S", E->count); + HTML_CLOSE("a"); + } else if (E->level == 2) { + DocumentationRenderer::link_to(OUT, E); + WRITE("Section %S", E->count); + HTML_CLOSE("a"); + } else { + HTML_OPEN_WITH("a", "href=\"index.html\""); + WRITE("the introduction"); + HTML_CLOSE("a"); + } } + @ ; } - @ ; } void DocumentationRenderer::render_chapter(OUTPUT_STREAM, compiled_documentation *cd, int ch) { diff --git a/inbuild/supervisor-module/Chapter 7/Documentation Tree.w b/inbuild/supervisor-module/Chapter 7/Documentation Tree.w index c74945ff5..b962f839e 100644 --- a/inbuild/supervisor-module/Chapter 7/Documentation Tree.w +++ b/inbuild/supervisor-module/Chapter 7/Documentation Tree.w @@ -345,10 +345,8 @@ int DocumentationTree::find_visit(tree_node *N, void *state, int L) { return FALSE; } } - if ((task->to_find_section) && (N->type == heading_TNT)) { - + if ((task->to_find_section) && (N->type == heading_TNT)) { cdoc_heading *E = RETRIEVE_POINTER_cdoc_heading(N->content); -LOG("Want %S find %S\n", task->to_find_section, E->recognition_name); if ((E->level == 2) && (Str::eq_insensitive(E->recognition_name, task->to_find_section))) { task->result = N; return FALSE; diff --git a/inbuild/supervisor-module/Chapter 7/The Installer.w b/inbuild/supervisor-module/Chapter 7/The Installer.w index 1a36fa679..d394ec36a 100644 --- a/inbuild/supervisor-module/Chapter 7/The Installer.w +++ b/inbuild/supervisor-module/Chapter 7/The Installer.w @@ -57,7 +57,7 @@ void ExtensionInstaller::install(inbuild_copy *C, int confirmed, pathname *to_to if (N > 0) @ else @ ; if (OUT) { - Copies::get_source_text(project->as_copy); + Copies::get_source_text(project->as_copy, I"graphing for installer"); build_vertex *V = Copies::construct_project_graph(project->as_copy); if (confirmed) @ else @ ; diff --git a/inform7/Downloads/excerpts-diagnostics.txt b/inform7/Downloads/excerpts-diagnostics.txt index 76783bab8..3bc14c5b7 100644 --- a/inform7/Downloads/excerpts-diagnostics.txt +++ b/inform7/Downloads/excerpts-diagnostics.txt @@ -1,15 +1,15 @@ -Size of lexicon: 3162 excerpt meanings - Stored among 855 words out of total vocabulary of 10626 +Size of lexicon: 3164 excerpt meanings + Stored among 855 words out of total vocabulary of 10631 719 words have a start list: longest belongs to report (with 293 meanings) 21 words have an end list: longest belongs to digits (with 7 meanings) 29 words have a middle list: longest belongs to to (with 4 meanings) 108 words have a subset list: longest belongs to street (with 4 meanings) -Number of attempts to retrieve: 110520 - of which unsuccessful: 92374 - of which successful: 18146 +Number of attempts to retrieve: 110594 + of which unsuccessful: 92446 + of which successful: 18148 -Total attempts to match against excerpt meanings: 279412 - of which, total with incorrect hash codes: 256664 - of which, total with correct hash codes: 22748 - of which, total which matched: 19917 +Total attempts to match against excerpt meanings: 279464 + of which, total with incorrect hash codes: 256710 + of which, total with correct hash codes: 22754 + of which, total which matched: 19919 diff --git a/inform7/Downloads/preform-diagnostics.txt b/inform7/Downloads/preform-diagnostics.txt index fb652f153..3c19bc44b 100644 --- a/inform7/Downloads/preform-diagnostics.txt +++ b/inform7/Downloads/preform-diagnostics.txt @@ -1,6 +1,6 @@ internal nti 28 constraint (none) extremes [1, 1] - internal hits 1318/8632 nti 29 constraint (none) extremes [0, 0] + internal hits 1318/8636 nti 29 constraint (none) extremes [0, 0] internal hits 4036/8296 nti 30 constraint (none) extremes [0, 0] @@ -16,7 +16,7 @@ internal nti 7 constraint (none) extremes [1, 1] - internal hits 3010/26210 nti 8 constraint (none) extremes [1, 1] + internal hits 3010/26218 nti 8 constraint (none) extremes [1, 1] internal nti 9 constraint (none) extremes [1, 1] @@ -24,7 +24,7 @@ internal nti 11 constraint (none) extremes [1, 1] - internal hits 2/13878 nti 12 constraint (none) extremes [0, 0] + internal hits 2/13886 nti 12 constraint (none) extremes [0, 0] hits 0/18 nti 16 constraint DS = {16} extremes [3, infinity) English: @@ -33,17 +33,17 @@ {......} _or {......} (hits 0/9) constraint DS = {16} extremes [3, infinity) - hits 468/3194 nti 18 constraint DS = {17, 18} extremes [6, infinity) + hits 470/3202 nti 18 constraint DS = {17, 18} extremes [6, infinity) English: {...} ( ) - (hits 433/959) (matched long text) constraint DS = {17, 18} extremes [6, infinity) + (hits 435/963) (matched long text) constraint DS = {17, 18} extremes [6, infinity) {...} -- -- - (hits 35/526) (matched long text) constraint DS = {17, 18} extremes [6, infinity) + (hits 35/528) (matched long text) constraint DS = {17, 18} extremes [6, infinity) - hits 501/1232 nti 17 constraint DS = {17} extremes [3, 3] + hits 503/1236 nti 17 constraint DS = {17} extremes [3, 3] English: documented at {###} - (hits 501/501) (matched: 'documented at ph_say') constraint DS = {17} extremes [3, 3] + (hits 503/503) (matched: 'documented at ph_say') constraint DS = {17} extremes [3, 3] nti 19 constraint DS = {19} extremes [2, infinity) English: @@ -4707,7 +4707,7 @@ twelfth constraint CS = {27} extremes [1, 1] - internal hits 200/23596 nti r0 constraint CS = {r0} extremes [1, 1] + internal hits 200/23604 nti r0 constraint CS = {r0} extremes [1, 1] internal nti r1 constraint CS = {r1} extremes [1, 1] @@ -4729,23 +4729,23 @@ {...} constraint (none) extremes [1, infinity) - hits 86354/172708 nti 26 constraint (none) extremes [1, infinity) + hits 86428/172856 nti 26 constraint (none) extremes [1, infinity) English: {...} - (hits 16348/49345) (matched long text) constraint (none) extremes [2, infinity) + (hits 16348/49419) (matched long text) constraint (none) extremes [2, infinity) {...} - (hits 70006/70006) (matched long text) constraint (none) extremes [1, infinity) + (hits 70080/70080) (matched long text) constraint (none) extremes [1, infinity) nti 27 constraint (none) extremes [2, infinity) English: {...} constraint (none) extremes [2, infinity) - internal hits 16901/103016 nti r2 constraint (none) extremes [1, 1] + internal hits 16902/103180 nti r2 constraint (none) extremes [1, 1] - internal hits 20813/245166 nti r2 constraint (none) extremes [1, 1] + internal hits 20813/245294 nti r2 constraint (none) extremes [1, 1] - internal hits 2213/43638 nti r2 constraint (none) extremes [1, 1] + internal hits 2213/43666 nti r2 constraint (none) extremes [1, 1] nti r2 constraint CS = {r2} extremes [6, 6] English: @@ -4806,10 +4806,10 @@ other than constraint CS = {28} extremes [2, 2] - hits 16/22586 nti 29 constraint DS = {29} extremes [2, infinity) + hits 16/22594 nti 29 constraint DS = {29} extremes [2, infinity) English: not {...} - (hits 16/6759) (matched long text) constraint DS = {29} extremes [2, infinity) + (hits 16/6763) (matched long text) constraint DS = {29} extremes [2, infinity) hits 111/222 nti 30 constraint (none) extremes [1, infinity) English: @@ -4820,10 +4820,10 @@ {...} (hits 111/111) (matched: 'dvd carried by the person asked') constraint (none) extremes [1, infinity) - hits 0/22298 nti 6 constraint DS = {6} extremes [2, infinity) + hits 0/22306 nti 6 constraint DS = {6} extremes [2, infinity) English: no one {***} - (hits 0/4241) constraint DS = {6} extremes [2, infinity) + (hits 0/4245) constraint DS = {6} extremes [2, infinity) internal hits 123/1384 nti 28 constraint (none) extremes [1, 1] @@ -4914,7 +4914,7 @@ internal nti 12 constraint DS = {12} extremes [1, infinity) - internal hits 662/19346 nti 13 constraint DS = {13} extremes [1, infinity) + internal hits 662/19364 nti 13 constraint DS = {13} extremes [1, infinity) internal hits 258/8622 nti 14 constraint DS = {14} extremes [1, infinity) @@ -5217,10 +5217,10 @@ {...} (hits 67/1279) (matched: 'usually table of general chitchat') constraint DS = {14} extremes [2, infinity) - hits 798/26684 nti 6 constraint CS = {6} extremes [1, 1] + hits 798/26694 nti 6 constraint CS = {6} extremes [1, 1] English: which/who/that - (hits 798/5388) (matched: 'which') constraint CS = {6} extremes [1, 1] + (hits 798/5393) (matched: 'which') constraint CS = {6} extremes [1, 1] hits 3/2900 nti 12 constraint DS = {6} extremes [2, infinity) English: @@ -5250,22 +5250,22 @@ grammatical case (hits 1/1) (matched: 'grammatical case') constraint CS = {9} extremes [2, 2] - internal hits 2566/44526 nti 13 constraint (none) extremes [0, 0] + internal hits 2652/44698 nti 13 constraint (none) extremes [0, 0] internal hits 175/350 nti 14 constraint (none) extremes [1, infinity) - hits 24/68 nti 11 constraint DS = {11} extremes [3, infinity) + hits 24/76 nti 11 constraint DS = {11} extremes [3, infinity) English: ( ) - (hits 0/34) constraint DS = {11} extremes [3, infinity) + (hits 0/38) constraint DS = {11} extremes [3, infinity) name of kind of - (hits 21/31) (matched: 'name of kind of value of kind k') constraint DS = {11} extremes [5, infinity) + (hits 21/35) (matched: 'name of kind of value of kind k') constraint DS = {11} extremes [5, infinity) name of kind - (hits 3/13) (matched: 'name of kind k') constraint DS = {11} extremes [4, infinity) + (hits 3/17) (matched: 'name of kind k') constraint DS = {11} extremes [4, infinity) name of kind of {...} - (hits 0/10) constraint DS = {11} extremes [5, infinity) + (hits 0/14) constraint DS = {11} extremes [5, infinity) name of kind {...} - (hits 0/10) constraint DS = {11} extremes [4, infinity) + (hits 0/14) constraint DS = {11} extremes [4, infinity) hits 24/48 nti 10 constraint (none) extremes [1, infinity) English: @@ -5276,20 +5276,20 @@ (hits 5/5) (matched: 'value of kind k') constraint (none) extremes [1, infinity) - hits 5922/107764 nti r5 constraint (none) extremes [1, infinity) + hits 5941/107850 nti r5 constraint (none) extremes [1, infinity) English: ( ) - (hits 0/2337) constraint DS = {r5} & CW = {r2, r5} extremes [3, infinity) + (hits 0/2362) constraint DS = {r5} & CW = {r2, r5} extremes [3, infinity) ^ - (hits 1597/11930) (matched: 'k') constraint CW = {r2, r5} extremes [1, infinity) + (hits 1597/11973) (matched: 'k') constraint CW = {r2, r5} extremes [1, infinity) - (hits 202/10333) (matched: 'sayable value of kind k') constraint CW = {r2, r5} extremes [1, infinity) + (hits 207/10376) (matched: 'sayable value of kind k') constraint CW = {r2, r5} extremes [1, infinity) - (hits 3761/10131) (matched: 'an ice cream cone') constraint CW = {r2, r5} extremes [1, infinity) + (hits 3771/10169) (matched: 'an ice cream cone') constraint CW = {r2, r5} extremes [1, infinity) - (hits 2/16854) (matched: 'object-based rulebook') constraint DS = {r5} extremes [2, infinity) + (hits 2/16882) (matched: 'object-based rulebook') constraint DS = {r5} extremes [2, infinity) - (hits 360/6368) (matched long text) constraint CW = {r2, r5} extremes [1, infinity) + (hits 364/6396) (matched long text) constraint CW = {r2, r5} extremes [1, infinity) hits 40/338 nti 15 constraint (none) extremes [1, infinity) English: @@ -5298,92 +5298,92 @@ (hits 8/137) (matched: 'room') constraint (none) extremes [1, infinity) - hits 202/2566 nti r5 constraint CW = {r2, r5} extremes [1, infinity) + hits 207/2652 nti r5 constraint CW = {r2, r5} extremes [1, infinity) English: - (hits 120/647) (matched: 'k') constraint CW = {r2, r5} extremes [1, 1] + (hits 124/659) (matched: 'k') constraint CW = {r2, r5} extremes [1, 1] of kind - (hits 82/316) (matched: 'sayable value of kind k') constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity) + (hits 83/336) (matched: 'sayable value of kind k') constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity) - internal hits 3761/20262 nti r5 constraint CW = {r2, r5} extremes [1, infinity) + internal hits 3771/20338 nti r5 constraint CW = {r2, r5} extremes [1, infinity) - hits 2/33708 nti r5 constraint DS = {r5} extremes [2, infinity) + hits 2/33764 nti r5 constraint DS = {r5} extremes [2, infinity) English: indexed text - (hits 0/1096) constraint CS = {r5} extremes [2, 2] + (hits 0/1100) constraint CS = {r5} extremes [2, 2] indexed texts - (hits 0/1096) constraint CS = {r5} extremes [2, 2] + (hits 0/1100) constraint CS = {r5} extremes [2, 2] stored action - (hits 0/1096) constraint CS = {r5} extremes [2, 2] + (hits 0/1100) constraint CS = {r5} extremes [2, 2] stored actions - (hits 0/1096) constraint CS = {r5} extremes [2, 2] + (hits 0/1100) constraint CS = {r5} extremes [2, 2] object-based rulebook producing - (hits 0/5401) constraint DS = {r5} extremes [5, infinity) + (hits 0/5416) constraint DS = {r5} extremes [5, infinity) object-based rulebook producing - (hits 0/1274) constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity) + (hits 0/1293) constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity) object-based rulebook - (hits 2/1096) (matched: 'object-based rulebook') constraint CS = {r5} extremes [2, 2] + (hits 2/1100) (matched: 'object-based rulebook') constraint CS = {r5} extremes [2, 2] action-based rulebook - (hits 0/1094) constraint CS = {r5} extremes [2, 2] + (hits 0/1098) constraint CS = {r5} extremes [2, 2] object-based rule producing - (hits 0/5401) constraint DS = {r5} extremes [5, infinity) + (hits 0/5416) constraint DS = {r5} extremes [5, infinity) object-based rule producing - (hits 0/1274) constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity) + (hits 0/1293) constraint DS = {r5} & CW = {r2, r5} extremes [4, infinity) object-based rule - (hits 0/1094) constraint CS = {r5} extremes [2, 2] + (hits 0/1098) constraint CS = {r5} extremes [2, 2] action-based rule - (hits 0/1094) constraint CS = {r5} extremes [2, 2] + (hits 0/1098) constraint CS = {r5} extremes [2, 2] either-or property - (hits 0/1094) constraint CS = {r5} extremes [2, 2] + (hits 0/1098) constraint CS = {r5} extremes [2, 2] - internal hits 360/12736 nti r5 constraint CW = {r2, r5} extremes [1, infinity) + internal hits 364/12792 nti r5 constraint CW = {r2, r5} extremes [1, infinity) - hits 150/300 nti r5 constraint (none) extremes [1, infinity) + hits 157/314 nti r5 constraint (none) extremes [1, infinity) English: ( ) - (hits 0/50) constraint DS = {r5} extremes [3, infinity) + (hits 0/51) constraint DS = {r5} extremes [3, infinity) - (hits 0/51) constraint (none) extremes [2, infinity) + (hits 0/53) constraint (none) extremes [2, infinity) - (hits 150/150) (matched long text) constraint (none) extremes [1, infinity) + (hits 157/157) (matched long text) constraint (none) extremes [1, infinity) - hits 67/134 nti r5 constraint (none) extremes [1, infinity) + hits 69/138 nti r5 constraint (none) extremes [1, infinity) English: ( ) (hits 0/21) constraint DS = {r5} extremes [3, infinity) (hits 9/27) (matched: 'a value of kind k') constraint (none) extremes [2, infinity) nothing - (hits 19/40) (matched: 'nothing') constraint CS = {r5} extremes [1, 1] + (hits 19/42) (matched: 'nothing') constraint CS = {r5} extremes [1, 1] action - (hits 1/21) (matched: 'action') constraint CS = {r5} extremes [1, 1] + (hits 1/23) (matched: 'action') constraint CS = {r5} extremes [1, 1] - (hits 38/38) (matched: 'value of kind k') constraint (none) extremes [1, infinity) + (hits 40/40) (matched: 'value of kind k') constraint (none) extremes [1, infinity) - hits 15/30 nti r5 constraint (none) extremes [1, infinity) + hits 17/34 nti r5 constraint (none) extremes [1, infinity) English: ( ) - (hits 7/10) (matched long text) constraint DS = {r5} extremes [3, infinity) + (hits 9/12) (matched long text) constraint DS = {r5} extremes [3, infinity) nothing (hits 3/5) (matched: 'nothing') constraint CS = {r5} extremes [1, 1] (hits 5/5) (matched: 'value of kind k') constraint (none) extremes [1, infinity) - hits 17/34 nti r5 constraint (none) extremes [1, infinity) + hits 22/44 nti r5 constraint (none) extremes [1, infinity) English: , - (hits 10/16) (matched long text) constraint DS = {r5} extremes [3, infinity) + (hits 13/19) (matched long text) constraint DS = {r5} extremes [3, infinity) - (hits 7/7) (matched: 'value of kind l') constraint (none) extremes [1, infinity) + (hits 9/9) (matched: 'value of kind l') constraint (none) extremes [1, infinity) - hits 101/450 nti r5 constraint (none) extremes [1, infinity) + hits 102/454 nti r5 constraint (none) extremes [1, infinity) English: - (hits 101/225) (matched: 'sayable value') constraint (none) extremes [1, infinity) + (hits 102/227) (matched: 'sayable value') constraint (none) extremes [1, infinity) internal hits 1597/21294 nti r5 constraint CW = {r2, r5} extremes [1, 1] - internal hits 221/1496 nti r5 constraint CW = {r2, r5} extremes [1, 1] + internal hits 226/1522 nti r5 constraint CW = {r2, r5} extremes [1, 1] internal hits 0/774 nti 16 constraint (none) extremes [1, 1] @@ -5446,12 +5446,12 @@ internal nti 18 constraint (none) extremes [1, infinity) - hits 213/10956 nti 19 constraint DW = {12, 13} extremes [2, infinity) + hits 213/10964 nti 19 constraint DW = {12, 13} extremes [2, infinity) English: - (hits 205/4302) (matched long text) constraint DS = {12} extremes [2, infinity) + (hits 205/4304) (matched long text) constraint DS = {12} extremes [2, infinity) - (hits 8/3630) (matched long text) constraint DS = {13} extremes [3, infinity) + (hits 8/3632) (matched long text) constraint DS = {13} extremes [3, infinity) hits 205/2608 nti 12 constraint DS = {12} extremes [2, infinity) English: @@ -5470,35 +5470,35 @@ section {...} (hits 161/1260) (matched long text) constraint DS = {12} extremes [2, infinity) - hits 8/7260 nti 13 constraint DS = {13} extremes [3, infinity) + hits 8/7264 nti 13 constraint DS = {13} extremes [3, infinity) English: {...} begin/begins here - (hits 4/3630) (matched long text) constraint DS = {13} extremes [3, infinity) + (hits 4/3632) (matched long text) constraint DS = {13} extremes [3, infinity) {...} end/ends here - (hits 4/3626) (matched: 'the standard rules end here') constraint DS = {13} extremes [3, infinity) + (hits 4/3628) (matched: 'the standard rules end here') constraint DS = {13} extremes [3, infinity) - hits 32/13878 nti 15 constraint (none) extremes [1, infinity) + hits 32/13886 nti 15 constraint (none) extremes [1, infinity) English: (hits 0/20) constraint (none) extremes [1, 1] {...} - (hits 0/6919) constraint (none) extremes [2, infinity) + (hits 0/6923) constraint (none) extremes [2, infinity) - (hits 0/6749) constraint DS = {14} extremes [4, infinity) + (hits 0/6753) constraint DS = {14} extremes [4, infinity) * constraint CS = {15} extremes [1, 1] * constraint DS = {15} extremes [2, 2] table {...} - (hits 14/6760) (matched long text) constraint DS = {15} extremes [2, infinity) + (hits 14/6764) (matched long text) constraint DS = {15} extremes [2, infinity) equation {...} - (hits 0/6746) constraint DS = {15} extremes [2, infinity) + (hits 0/6750) constraint DS = {15} extremes [2, infinity) include the {...} by {...} - (hits 0/6734) constraint DS = {15} extremes [5, infinity) + (hits 0/6738) constraint DS = {15} extremes [5, infinity) include {...} by {...} - (hits 18/6746) (matched long text) constraint DS = {15} extremes [4, infinity) + (hits 18/6750) (matched long text) constraint DS = {15} extremes [4, infinity) include (- {...} - (hits 0/6728) constraint DS = {15} extremes [3, infinity) + (hits 0/6732) constraint DS = {15} extremes [3, infinity) hits 9/2942 nti 16 constraint DS = {16} extremes [2, infinity) English: @@ -5513,12 +5513,12 @@ when {...} (hits 4/1285) (matched: 'when scene begins is a scene based rulebook') constraint DS = {16} extremes [2, infinity) - hits 0/13498 nti 14 constraint DS = {14} extremes [4, infinity) + hits 0/13506 nti 14 constraint DS = {14} extremes [4, infinity) English: include (- {###} in the preform grammar (hits 0/106) constraint DS = {14} extremes [7, 7] use {...} language element/elements - (hits 0/6749) constraint DS = {14} extremes [4, infinity) + (hits 0/6753) constraint DS = {14} extremes [4, infinity) hits 39/488 nti 22 constraint DS = {22} extremes [2, infinity) English: @@ -5655,30 +5655,30 @@ the {...} (hits 1/1) (matched: 'the standard rules') constraint DS = {29} extremes [2, infinity) - hits 2957/19474 nti 30 constraint DS = {30} extremes [1, infinity) + hits 2957/19486 nti 30 constraint DS = {30} extremes [1, infinity) English: if {...} is begin (hits 0/5035) constraint DS = {30} extremes [4, infinity) if {...} is (hits 0/5623) constraint DS = {30} extremes [3, infinity) if/unless {...} - (hits 2182/7004) (matched long text) constraint DS = {30} extremes [2, infinity) + (hits 2182/7010) (matched long text) constraint DS = {30} extremes [2, infinity) repeat {...} - (hits 99/4822) (matched long text) constraint DS = {30} extremes [2, infinity) + (hits 99/4828) (matched long text) constraint DS = {30} extremes [2, infinity) while {...} - (hits 36/4723) (matched long text) constraint DS = {30} extremes [2, infinity) + (hits 36/4729) (matched long text) constraint DS = {30} extremes [2, infinity) else/otherwise (hits 338/338) (matched: 'otherwise') constraint CS = {30} extremes [1, 1] else/otherwise if/unless {...} (hits 233/3306) (matched long text) constraint DS = {30} extremes [3, infinity) else/otherwise {...} - (hits 69/4454) (matched long text) constraint DS = {30} extremes [2, infinity) + (hits 69/4460) (matched long text) constraint DS = {30} extremes [2, infinity) -- otherwise (hits 0/18) constraint CS = {30} extremes [2, 2] -- {...} - (hits 0/4385) constraint DS = {30} extremes [2, infinity) + (hits 0/4391) constraint DS = {30} extremes [2, infinity) - hits 22/12428 nti 6 constraint CS = {6} extremes [2, 2] + hits 22/12436 nti 6 constraint CS = {6} extremes [2, 2] English: end if/unless (hits 20/34) (matched: 'end if') constraint CS = {6} extremes [2, 2] @@ -5687,7 +5687,7 @@ end repeat (hits 0/12) constraint CS = {6} extremes [2, 2] - hits 785/14982 nti 7 constraint DS = {7} extremes [2, infinity) + hits 785/14986 nti 7 constraint DS = {7} extremes [2, infinity) English: say {...} (hits 604/2592) (matched long text) constraint DS = {7} extremes [2, infinity) @@ -5699,7 +5699,7 @@ {......} , {......} (hits 2332/2627) (matched long text) constraint DS = {8} extremes [3, infinity) - hits 30/10178 nti 9 constraint DS = {9} extremes [2, infinity) + hits 30/10182 nti 9 constraint DS = {9} extremes [2, infinity) English: instead {...} (hits 0/2050) constraint DS = {9} extremes [2, infinity) @@ -6797,14 +6797,14 @@ {***} {***} (hits 0/960) constraint (none) extremes [1, infinity) - hits 0/1710 nti 27 constraint (none) extremes [1, infinity) + hits 0/1718 nti 27 constraint (none) extremes [1, infinity) English: - (hits 0/707) constraint (none) extremes [1, 1] + (hits 0/711) constraint (none) extremes [1, 1] {***} (/)/{/}/,/. {***} (hits 0/44) constraint DS = {27} extremes [1, infinity) {***} {***} - (hits 0/855) constraint (none) extremes [1, infinity) + (hits 0/859) constraint (none) extremes [1, infinity) hits 0/84 nti 28 constraint (none) extremes [1, infinity) English: @@ -6818,7 +6818,7 @@ {***} something {***} constraint DS = {29} extremes [1, infinity) - hits 457/1482 nti 30 constraint DS = {30} extremes [2, infinity) + hits 459/1486 nti 30 constraint DS = {30} extremes [2, infinity) English: (- {###} - in to only (hits 17/27) (matched: '(- rtrue; - in to only') constraint DS = {30} extremes [6, 6] @@ -6827,11 +6827,11 @@ (- {###} - in to decide only (hits 0/7) constraint DS = {30} extremes [7, 7] (- {###} - (hits 436/442) (matched: '(- {-say:val:K} ') constraint DS = {30} extremes [2, 2] + (hits 438/444) (matched: '(- {-say:val:K} ') constraint DS = {30} extremes [2, 2] (- {###} {...} (hits 0/65) constraint DS = {30} extremes [3, infinity) - hits 48/2830 nti 6 constraint CS = {6} extremes [1, 1] + hits 48/2834 nti 6 constraint CS = {6} extremes [1, 1] English: definition (hits 48/48) (matched: 'definition') constraint CS = {6} extremes [1, 1] @@ -6866,47 +6866,47 @@ {...} (hits 28/28) (matched: 'going on') constraint (none) extremes [1, infinity) - hits 525/2734 nti 11 constraint DS = {11} extremes [1, infinity) + hits 527/2738 nti 11 constraint DS = {11} extremes [1, infinity) English: {to} constraint CS = {11} extremes [1, 1] to {...} ( called {...} ) - (hits 0/836) constraint DS = {11} extremes [6, infinity) + (hits 0/838) constraint DS = {11} extremes [6, infinity) {to ...} ( this is the {### function} inverse to {###} ) - (hits 16/704) (matched long text) constraint DS = {11} extremes [12, infinity) + (hits 16/706) (matched long text) constraint DS = {11} extremes [12, infinity) {to ...} ( this is the {### function} ) - (hits 4/754) (matched long text) constraint DS = {11} extremes [9, infinity) + (hits 4/756) (matched long text) constraint DS = {11} extremes [9, infinity) {to ...} ( this is {...} ) - (hits 0/798) constraint DS = {11} extremes [7, infinity) + (hits 0/800) constraint DS = {11} extremes [7, infinity) {to ...} - (hits 505/881) (matched long text) constraint DS = {11} extremes [2, infinity) + (hits 507/883) (matched long text) constraint DS = {11} extremes [2, infinity) - hits 1/1050 nti 12 constraint DS = {12} extremes [3, infinity) + hits 1/1054 nti 12 constraint DS = {12} extremes [3, infinity) English: to now {...} - (hits 1/521) (matched: 'to now ( cn - condition )') constraint DS = {12} extremes [3, infinity) + (hits 1/523) (matched: 'to now ( cn - condition )') constraint DS = {12} extremes [3, infinity) - hits 0/1050 nti 13 constraint CS = {13} extremes [2, 2] + hits 0/1054 nti 13 constraint CS = {13} extremes [2, 2] English: to begin constraint CS = {13} extremes [2, 2] - hits 545/1090 nti 14 constraint DS = {14} extremes [2, infinity) + hits 547/1094 nti 14 constraint DS = {14} extremes [2, infinity) English: to {decide yes/no} (hits 2/2) (matched: 'to decide yes') constraint CS = {14} extremes [3, 3] to {decide on ...} - (hits 1/496) (matched: 'to decide on ( something - value )') constraint DS = {14} extremes [4, infinity) + (hits 1/498) (matched: 'to decide on ( something - value )') constraint DS = {14} extremes [4, infinity) to decide whether/if the {...} - (hits 12/482) (matched long text) constraint DS = {14} extremes [5, infinity) + (hits 12/484) (matched long text) constraint DS = {14} extremes [5, infinity) to decide whether/if {...} - (hits 39/483) (matched long text) constraint DS = {14} extremes [4, infinity) + (hits 39/485) (matched long text) constraint DS = {14} extremes [4, infinity) to decide what/which is the {...} - (hits 96/409) (matched long text) constraint DS = {14} extremes [7, infinity) + (hits 96/411) (matched long text) constraint DS = {14} extremes [7, infinity) to decide what/which is {...} - (hits 74/323) (matched long text) constraint DS = {14} extremes [6, infinity) + (hits 74/325) (matched long text) constraint DS = {14} extremes [6, infinity) to {...} - (hits 321/321) (matched long text) constraint DS = {14} extremes [2, infinity) + (hits 323/323) (matched long text) constraint DS = {14} extremes [2, infinity) hits 170/340 nti 28 constraint (none) extremes [1, infinity) English: @@ -6915,133 +6915,133 @@ {...} constraint (none) extremes [1, infinity) - hits 546/1092 nti 17 constraint (none) extremes [1, infinity) + hits 548/1096 nti 17 constraint (none) extremes [1, infinity) English: ( deprecated ) - (hits 1/454) (matched long text) constraint DS = {17} extremes [4, infinity) + (hits 1/456) (matched long text) constraint DS = {17} extremes [4, infinity) - (hits 152/514) (matched long text) constraint DS = {15} extremes [2, infinity) + (hits 152/516) (matched long text) constraint DS = {15} extremes [2, infinity) - (hits 393/393) (matched long text) constraint (none) extremes [1, infinity) + (hits 395/395) (matched long text) constraint (none) extremes [1, infinity) - hits 415/830 nti 16 constraint (none) extremes [1, infinity) + hits 417/834 nti 16 constraint (none) extremes [1, infinity) English: ( arithmetic operation ) - (hits 16/357) (matched long text) constraint DS = {16} extremes [6, infinity) + (hits 16/359) (matched long text) constraint DS = {16} extremes [6, infinity) ( assignment operation ) - (hits 6/351) (matched long text) constraint DS = {16} extremes [5, infinity) + (hits 6/353) (matched long text) constraint DS = {16} extremes [5, infinity) {let ... be given by ...} - (hits 2/335) (matched long text) constraint DS = {16} extremes [6, infinity) + (hits 2/337) (matched long text) constraint DS = {16} extremes [6, infinity) {let ...} - (hits 4/359) (matched long text) constraint DS = {16} extremes [2, infinity) + (hits 4/361) (matched long text) constraint DS = {16} extremes [2, infinity) {...} -- end - (hits 0/352) constraint DS = {16} extremes [3, infinity) + (hits 0/354) constraint DS = {16} extremes [3, infinity) {...} -- end conditional - (hits 3/347) (matched long text) constraint DS = {16} extremes [4, infinity) + (hits 3/349) (matched long text) constraint DS = {16} extremes [4, infinity) {...} -- end loop - (hits 10/344) (matched long text) constraint DS = {16} extremes [4, infinity) + (hits 10/346) (matched long text) constraint DS = {16} extremes [4, infinity) {...} -- in loop - (hits 2/334) (matched: 'break -- in loop') constraint DS = {16} extremes [4, infinity) + (hits 2/336) (matched: 'break -- in loop') constraint DS = {16} extremes [4, infinity) {...} -- in {###} - (hits 0/332) constraint DS = {16} extremes [4, infinity) + (hits 0/334) constraint DS = {16} extremes [4, infinity) {...} - (hits 372/372) (matched long text) constraint (none) extremes [1, infinity) + (hits 374/374) (matched long text) constraint (none) extremes [1, infinity) - hits 168/1060 nti 15 constraint DS = {15} extremes [2, infinity) + hits 168/1064 nti 15 constraint DS = {15} extremes [2, infinity) English: -- running on - (hits 16/472) (matched long text) constraint DS = {15} extremes [4, infinity) + (hits 16/474) (matched long text) constraint DS = {15} extremes [4, infinity) {say otherwise/else} (hits 2/4) (matched: 'say otherwise') constraint CS = {15} extremes [2, 2] {say otherwise/else if/unless ...} - (hits 0/456) constraint DS = {15} extremes [4, infinity) + (hits 0/458) constraint DS = {15} extremes [4, infinity) {say if/unless ...} - (hits 2/472) (matched: 'say if ( c - condition )') constraint DS = {15} extremes [3, infinity) + (hits 2/474) (matched: 'say if ( c - condition )') constraint DS = {15} extremes [3, infinity) {say end if/unless} (hits 2/2) (matched: 'say end if') constraint CS = {15} extremes [3, 3] {say ...} -- beginning {###} - (hits 2/434) (matched: 'say one of -- beginning say_one_of') constraint DS = {15} extremes [5, infinity) + (hits 2/436) (matched: 'say one of -- beginning say_one_of') constraint DS = {15} extremes [5, infinity) {say ...} -- continuing {###} - (hits 1/432) (matched: 'say or -- continuing say_one_of') constraint DS = {15} extremes [5, infinity) + (hits 1/434) (matched: 'say or -- continuing say_one_of') constraint DS = {15} extremes [5, infinity) {say ...} -- ending {###} with marker {###} - (hits 9/373) (matched long text) constraint DS = {15} extremes [8, infinity) + (hits 9/375) (matched long text) constraint DS = {15} extremes [8, infinity) {say ...} -- ending {###} - (hits 1/422) (matched: 'say only -- ending say_first_time') constraint DS = {15} extremes [5, infinity) + (hits 1/424) (matched: 'say only -- ending say_first_time') constraint DS = {15} extremes [5, infinity) {say ...} - (hits 133/495) (matched long text) constraint DS = {15} extremes [2, infinity) + (hits 133/497) (matched long text) constraint DS = {15} extremes [2, infinity) - hits 0/1090 nti 18 constraint DS = {13, 18} extremes [8, infinity) + hits 0/1094 nti 18 constraint DS = {13, 18} extremes [8, infinity) English: ( {......} ) { } ( {......} ) - (hits 0/356) constraint DS = {13, 18} extremes [8, infinity) + (hits 0/358) constraint DS = {13, 18} extremes [8, infinity) - hits 2384/4768 nti 20 constraint (none) extremes [1, infinity) + hits 2392/4784 nti 20 constraint (none) extremes [1, infinity) English: ( ) {***} - (hits 0/1886) constraint DS = {20} extremes [2, infinity) + (hits 0/1894) constraint DS = {20} extremes [2, infinity) ( ) {***} - (hits 614/1848) (matched long text) constraint DS = {20} extremes [3, infinity) + (hits 618/1856) (matched long text) constraint DS = {20} extremes [3, infinity) ( {***} - (hits 0/1283) constraint DS = {20} extremes [1, infinity) + (hits 0/1287) constraint DS = {20} extremes [1, infinity) ) {***} - (hits 0/1283) constraint DS = {20} extremes [1, infinity) + (hits 0/1287) constraint DS = {20} extremes [1, infinity) {###} {***} - (hits 1770/1770) (matched long text) constraint (none) extremes [1, infinity) + (hits 1774/1774) (matched long text) constraint (none) extremes [1, infinity) - hits 614/1238 nti 19 constraint (none) extremes [1, infinity) + hits 618/1250 nti 19 constraint (none) extremes [1, infinity) English: {***} ( {***} - {......} - (hits 0/619) constraint DS = {19} extremes [3, infinity) + (hits 0/625) constraint DS = {19} extremes [3, infinity) {......} - a nonexisting variable - (hits 0/197) constraint DS = {19} extremes [5, infinity) + (hits 0/202) constraint DS = {19} extremes [5, infinity) {......} - a nonexisting variable - (hits 0/105) constraint DS = {19} extremes [6, infinity) + (hits 0/110) constraint DS = {19} extremes [6, infinity) {......} - a nonexisting that/which varies - (hits 0/66) constraint DS = {19} extremes [7, infinity) + (hits 0/71) constraint DS = {19} extremes [7, infinity) {......} - nonexisting variable - (hits 4/393) (matched: 't - nonexisting variable') constraint DS = {19} extremes [4, infinity) + (hits 4/399) (matched: 't - nonexisting variable') constraint DS = {19} extremes [4, infinity) {......} - nonexisting variable - (hits 5/197) (matched: 'loopvar - nonexisting k variable') constraint DS = {19} extremes [5, infinity) + (hits 5/202) (matched: 'loopvar - nonexisting k variable') constraint DS = {19} extremes [5, infinity) {......} - nonexisting that/which varies - (hits 0/105) constraint DS = {19} extremes [6, infinity) + (hits 0/110) constraint DS = {19} extremes [6, infinity) {......} - {an existing variable} - (hits 0/192) constraint DS = {19} extremes [5, infinity) + (hits 0/197) constraint DS = {19} extremes [5, infinity) {......} - {an existing variable} - (hits 0/105) constraint DS = {19} extremes [6, infinity) + (hits 0/110) constraint DS = {19} extremes [6, infinity) {......} - {an existing that/which varies} - (hits 0/66) constraint DS = {19} extremes [7, infinity) + (hits 0/71) constraint DS = {19} extremes [7, infinity) {......} - {existing variable} - (hits 2/384) (matched: 't - existing variable') constraint DS = {19} extremes [4, infinity) + (hits 2/390) (matched: 't - existing variable') constraint DS = {19} extremes [4, infinity) {......} - {existing variable} - (hits 0/192) constraint DS = {19} extremes [5, infinity) + (hits 0/197) constraint DS = {19} extremes [5, infinity) {......} - {existing that/which varies} - (hits 0/105) constraint DS = {19} extremes [6, infinity) + (hits 0/110) constraint DS = {19} extremes [6, infinity) {......} - a condition - (hits 0/382) constraint DS = {19} extremes [4, infinity) + (hits 0/388) constraint DS = {19} extremes [4, infinity) {......} - condition - (hits 9/608) (matched: 'c - condition') constraint DS = {19} extremes [3, infinity) + (hits 9/614) (matched: 'c - condition') constraint DS = {19} extremes [3, infinity) {......} - a phrase - (hits 0/382) constraint DS = {19} extremes [4, infinity) + (hits 0/388) constraint DS = {19} extremes [4, infinity) {......} - phrase - (hits 0/599) constraint DS = {19} extremes [3, infinity) + (hits 0/605) constraint DS = {19} extremes [3, infinity) {......} - storage - (hits 4/599) (matched: 's - storage') constraint DS = {19} extremes [3, infinity) + (hits 4/605) (matched: 's - storage') constraint DS = {19} extremes [3, infinity) {......} - a table-reference - (hits 0/382) constraint DS = {19} extremes [4, infinity) + (hits 0/388) constraint DS = {19} extremes [4, infinity) {......} - table-reference - (hits 3/595) (matched: 'tr - table-reference') constraint DS = {19} extremes [3, infinity) + (hits 3/601) (matched: 'tr - table-reference') constraint DS = {19} extremes [3, infinity) {......} - - (hits 563/592) (matched long text) constraint DS = {19} extremes [3, infinity) + (hits 567/598) (matched long text) constraint DS = {19} extremes [3, infinity) {......} - - (hits 2/29) (matched long text) constraint DS = {19} extremes [3, infinity) + (hits 2/31) (matched long text) constraint DS = {19} extremes [3, infinity) {......} - {......} - (hits 0/27) constraint DS = {19} extremes [3, infinity) + (hits 0/29) constraint DS = {19} extremes [3, infinity) - (hits 22/27) (matched: 'name of kind of enumerated value k') constraint (none) extremes [1, infinity) + (hits 22/29) (matched: 'name of kind of enumerated value k') constraint (none) extremes [1, infinity) {......} - (hits 0/5) constraint (none) extremes [1, infinity) + (hits 0/7) constraint (none) extremes [1, infinity) - internal hits 24/68 nti 29 constraint (none) extremes [1, infinity) + internal hits 24/76 nti 29 constraint (none) extremes [1, infinity) internal hits 106/3406 nti 30 constraint (none) extremes [1, infinity) @@ -7670,7 +7670,7 @@ i6/inter condition says so ( {...} ) (hits 1/24) (matched long text) constraint DS = {21} extremes [8, infinity) - hits 2131/24680 nti 19 constraint (none) extremes [1, infinity) + hits 2131/24688 nti 19 constraint (none) extremes [1, infinity) English: (hits 171/171) (matched: '100') constraint CS = {r0} extremes [1, 1] @@ -7688,17 +7688,17 @@ (hits 1575/5756) (matched: 'Can be used for objects which are purely conceptual, like ideas, or are needed for internal book-keeping.') constraint (none) extremes [1, 1] - (hits 11/10320) (matched: 'plus infinity') constraint (none) extremes [1, infinity) + (hits 11/10324) (matched: 'plus infinity') constraint (none) extremes [1, infinity) (hits 100/379) (matched: 'false') constraint CS = {13} extremes [1, 1] - (hits 0/3246) constraint DS = {15} extremes [2, infinity) + (hits 0/3250) constraint DS = {15} extremes [2, infinity) unicode - (hits 0/3994) constraint DS = {19} extremes [2, infinity) + (hits 0/3998) constraint DS = {19} extremes [2, infinity) - (hits 0/3569) constraint DW = {16, 17, 18} extremes [2, 5] + (hits 0/3571) constraint DW = {16, 17, 18} extremes [2, 5] - (hits 0/10209) constraint (none) extremes [1, infinity) + (hits 0/10213) constraint (none) extremes [1, infinity) internal hits 716/1432 nti 28 constraint (none) extremes [1, 1] @@ -7717,9 +7717,9 @@ internal nti 7 constraint (none) extremes [1, infinity) - internal hits 0/20418 nti 8 constraint (none) extremes [1, infinity) + internal hits 0/20426 nti 8 constraint (none) extremes [1, infinity) - hits 11/20640 nti 11 constraint (none) extremes [1, infinity) + hits 11/20648 nti 11 constraint (none) extremes [1, infinity) English: _pi (hits 1/197) (matched: 'pi') constraint CS = {11} extremes [1, 1] @@ -7730,14 +7730,14 @@ minus infinity (hits 4/4) (matched: 'minus infinity') constraint CS = {11} extremes [2, 2] - (hits 1/10310) (matched: '0.5') constraint (none) extremes [1, infinity) + (hits 1/10314) (matched: '0.5') constraint (none) extremes [1, infinity) - internal hits 1/20620 nti 9 constraint (none) extremes [1, infinity) + internal hits 1/20628 nti 9 constraint (none) extremes [1, infinity) - hits 0/7138 nti 18 constraint DW = {16, 17, 18} extremes [2, 5] + hits 0/7142 nti 18 constraint DW = {16, 17, 18} extremes [2, 5] English: minus - (hits 0/833) constraint DS = {16, 18} extremes [3, 5] + (hits 0/835) constraint DS = {16, 18} extremes [3, 5] (hits 0/1192) constraint DS = {16} extremes [2, 4] @@ -7779,12 +7779,12 @@ internal nti 14 constraint (none) extremes [1, infinity) -