diff --git a/README.md b/README.md index 28478fe04..655241bcc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Inform 7 -v10.1.0-alpha.1+6S71 'Krypton' (15 July 2021) +v10.1.0-alpha.1+6S72 'Krypton' (16 July 2021) ## About Inform 7 diff --git a/build.txt b/build.txt index 50ba61dda..984f8e4d0 100644 --- a/build.txt +++ b/build.txt @@ -1,3 +1,3 @@ Prerelease: alpha.1 -Build Date: 15 July 2021 -Build Number: 6S71 +Build Date: 16 July 2021 +Build Number: 6S72 diff --git a/docs/index-module/2-ii.html b/docs/index-module/2-ii.html index e9882be90..e84e33284 100644 --- a/docs/index-module/2-ii.html +++ b/docs/index-module/2-ii.html @@ -317,7 +317,7 @@ of the Inter tree currently being indexed. inter_lexicon *InterpretIndex::get_lexicon(void) { if (indexing_lexicon == NULL) { if (indexing_tree == NULL) internal_error("no indexing lexicon"); - indexing_lexicon = IndexLexicon::stock(indexing_tree); + indexing_lexicon = IndexLexicon::stock(indexing_tree); } return indexing_lexicon; } diff --git a/docs/index-module/2-iu.html b/docs/index-module/2-iu.html index 6b14b2e38..c32d5408c 100644 --- a/docs/index-module/2-iu.html +++ b/docs/index-module/2-iu.html @@ -146,7 +146,7 @@ the source text in the application.

-void IndexUtilities::link(OUTPUT_STREAM, int wn) {
+void IndexUtilities::link(OUTPUT_STREAM, int wn) {
     IndexUtilities::link_to_location(OUT, Lexer::word_location(wn), TRUE);
 }
 
@@ -205,7 +205,7 @@ code.
     HTML_OPEN_WITH("a", "name=%S", p); HTML_CLOSE("a");
 }
 
-void IndexUtilities::below_link_numbered(OUTPUT_STREAM, int n) {
+void IndexUtilities::below_link_numbered(OUTPUT_STREAM, int n) {
     WRITE(" ");
     HTML_OPEN_WITH("a", "href=#A%d", n);
     HTML_TAG_WITH("img", "border=0 src=inform:/doc_images/Below.png");
diff --git a/docs/index-module/2-lcl.html b/docs/index-module/2-lcl.html
index 8e3a0fbd0..fc2c50689 100644
--- a/docs/index-module/2-lcl.html
+++ b/docs/index-module/2-lcl.html
@@ -266,7 +266,7 @@ working on localisation files can see any defects by looking at the debugging lo
     Localisation::write_general(OUT, D, context, key, vals);
 }
 
-void Localisation::write_1(OUTPUT_STREAM, localisation_dictionary *D,
+void Localisation::write_1(OUTPUT_STREAM, localisation_dictionary *D,
     text_stream *context, text_stream *key,
     text_stream *val1) {
     text_stream *vals[10];
diff --git a/docs/index-module/2-lxc.html b/docs/index-module/2-lxc.html
index cf4119ddf..bbb5d7ba2 100644
--- a/docs/index-module/2-lxc.html
+++ b/docs/index-module/2-lxc.html
@@ -20,6 +20,11 @@ function togglePopup(material_id) {
 
 
 
+
+
+
+
 
 		
 	
@@ -72,7 +77,7 @@ function togglePopup(material_id) {
     
 

A lexicon for nouns, adjectives and verbs found in an Inter tree.

-
+

§1. The lexicon is the part of the Index which gives an alphabetised list of adjectives, nouns, verbs and other words which can be used in descriptions @@ -102,289 +107,133 @@ under a single umbrella: struct index_lexicon_entry *sorted_next; next in lexicographic order CLASS_DEFINITION } index_lexicon_entry; +

+ +

§2. A lexicon is then a set of entries. These are accumulated in no particular +order, then sorted. +

+
 typedef struct inter_lexicon {
     struct linked_list *unsorted;
     index_lexicon_entry *first;  head of list in lexicographic order
     CLASS_DEFINITION
 } inter_lexicon;
 
- -

§2. Lexicon entries are created by the following routine: +

+

§3. Creating a lexicon. And this is where that happens:

-index_lexicon_entry *IndexLexicon::lexicon_new_entry(text_stream *lemma, int part) {
-    index_lexicon_entry *lex = CREATE(index_lexicon_entry);
-    lex->lemma = Str::duplicate(lemma);
-    lex->part_of_speech = part;
-    lex->entry_refers_to = NULL_GENERAL_POINTER;
-    lex->category = NULL; lex->gloss_note = NULL;
-    lex->reduced_to_lower_case = Str::new();
-    lex->lex_package = NULL;
-    lex->link_to = 0;
-    return lex;
-}
-
-

§3.

- -
-index_lexicon_entry *IndexLexicon::new_entry_with_details(text_stream *lemma, int pos,
-    char *category, char *gloss) {
-    index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(lemma, pos);
-    lex->lemma = lemma;
-    lex->category = category; lex->gloss_note = gloss;
-    return lex;
-}
-
-index_lexicon_entry *IndexLexicon::new_main_verb(text_stream *infinitive, int part,
-    inter_package *pack) {
-    index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(NULL, part);
-    lex->lemma = infinitive;
-    lex->category = "verb";
-    lex->lex_package = pack;
-    return lex;
-}
-
-

§4. Printing the lexicon out in HTML format.

- -

§5. Now for the bulk of the work. Entries appear in CSS paragraphs with hanging -indentation and no interparagraph spacing, so we need to insert regular -paragraphs between the As and the Bs, then between the Bs and the Cs, and so -on. Each entry consists of the wording, then maybe some icons, then an -explanation of what it is: for instance, -

- -
-

player's holdall [icon]\quad {\it noun, a kind of} container

-
- -

In a few cases, there is a further textual gloss to add. -

- -
-void IndexLexicon::listing(OUTPUT_STREAM, inter_lexicon *lexicon, int proper_nouns_only) {
-    index_lexicon_entry *lex;
-    wchar_t current_initial_letter = '?';
-    int verb_count = 0, proper_noun_count = 0, c;
-    for (lex = lexicon->first; lex; lex = lex->sorted_next)
-        if (lex->part_of_speech == PROPER_NOUN_TLEXE)
-            proper_noun_count++;
-    if (proper_nouns_only) {
-        HTML::begin_html_table(OUT, NULL, TRUE, 0, 0, 0, 0, 0);
-        HTML::first_html_column(OUT, 0);
-    }
-    for (c = 0, lex = lexicon->first; lex; lex = lex->sorted_next) {
-        if (proper_nouns_only) { if (lex->part_of_speech != PROPER_NOUN_TLEXE) continue; }
-        else { if (lex->part_of_speech == PROPER_NOUN_TLEXE) continue; }
-        if ((proper_nouns_only) && (c == proper_noun_count/2)) HTML::next_html_column(OUT, 0);
-        if (current_initial_letter != Str::get_first_char(lex->reduced_to_lower_case)) {
-            if (c > 0) { HTML_OPEN("p"); HTML_CLOSE("p"); }
-            current_initial_letter = Str::get_first_char(lex->reduced_to_lower_case);
-        }
-        c++;
-        HTML_OPEN_WITH("p", "class=\"hang\"");
-
-        Text of the actual lexicon entry5.1;
-        Icon with link to documentation, source or verb table, if any5.2;
-
-        switch(lex->part_of_speech) {
-            case ADJECTIVAL_PHRASE_TLEXE:
-                Definition of adjectival phrase entry5.5; break;
-            case ENUMERATED_CONSTANT_TLEXE:
-                Definition of enumerated instance entry5.6; break;
-            case PROPER_NOUN_TLEXE:
-                Definition of proper noun entry5.4; break;
-            case COMMON_NOUN_TLEXE:
-                Definition of common noun entry5.3; break;
-        }
-        if (lex->gloss_note) WRITE(" <i>%s</i>", lex->gloss_note);
-        HTML_CLOSE("p");
-    }
-    if (proper_nouns_only) { HTML::end_html_row(OUT); HTML::end_html_table(OUT); }
-}
-
-

§5.1. In traditional dictionary fashion, we present the text in what may not be -the most normal ordering, in order to place the alphabetically important -part first: thus "see, to be able to" rather than "to be able to see". -(Compare "Gallifreyan High Council, continual incidences of madness and -treachery amongst the" in "Doctor Who: The Completely Useless -Encyclopaedia", eds. Howarth and Lyons (1996).) -

- -

Text of the actual lexicon entry5.1 = -

- -
-    WRITE("%S", lex->lemma);
-    if (lex->part_of_speech == PREP_TLEXE) WRITE(", to be");
-
- -

§5.2. Main lexicon entries to do with verbs link further down the index page -to the corresponding entries in the verb table. We want to use numbered -anchors for these links, but we want to avoid colliding with numbered -anchors already used for other purposes higher up on the Phrasebook index -page. So we use a set of anchors numbered 10000 and up, which is guaranteed -not to coincide with any of those. -

- -

We omit source links to an adjectival phrase because these are polymorphic, -that is, the phrase may have multiple definitions in different parts of the -source text: so any single link would be potentially misleading. -

- -

Icon with link to documentation, source or verb table, if any5.2 = -

- -
-    switch(lex->part_of_speech) {
-        case COMMON_NOUN_TLEXE: {
-            text_stream *ref = Metadata::read_optional_textual(lex->lex_package, I"^documentation");
-            if (Str::len(ref) > 0) IndexUtilities::DocReferences::link(OUT, ref);
-            break;
-        }
-        case VERB_TLEXE:
-        case PREP_TLEXE:
-            IndexUtilities::below_link_numbered(OUT, 10000+verb_count++);
-            break;
-    }
-    if ((lex->part_of_speech != ADJECTIVAL_PHRASE_TLEXE) && (lex->link_to > 0))
-        IndexUtilities::link(OUT, lex->link_to);
-
- -

§5.3. Definition of common noun entry5.3 = -

- -
-    Begin definition text5.3.1;
-    WRITE(", a kind of ");
-    text_stream *superk = Metadata::read_optional_textual(lex->lex_package, I"^index_superkind");
-    if (Str::len(superk) > 0) WRITE("%S", superk);
-    End definition text5.3.2;
-
- -

§5.4. Simply the name of an instance. -

- -

Definition of proper noun entry5.4 = -

- -
-    Begin definition text5.3.1;
-    WRITE("%S", Metadata::read_textual(lex->lex_package, I"^index_kind"));
-    End definition text5.3.2;
-
- -

§5.5. As mentioned above, an adjectival phrase can be multiply defined in -different contexts. We want to quote all of those. -

- -

Definition of adjectival phrase entry5.5 = -

- -
-    Begin definition text5.3.1;
-    WRITE(": %S", Metadata::read_textual(lex->lex_package, I"^index_entry"));
-    End definition text5.3.2;
-
- -

§5.6. Definition of enumerated instance entry5.6 = -

- -
-    Begin definition text5.3.1;
-    WRITE(", value of %S", Metadata::read_textual(lex->lex_package, I"^index_kind"));
-    End definition text5.3.2;
-
- -

§5.3.1. Begin definition text5.3.1 = -

- -
-    WRITE(" ... <i>");
-    if ((proper_nouns_only == FALSE) && (lex->category))
-        WRITE("%s", lex->category);
-
- -

§5.3.2. End definition text5.3.2 = -

- -
-    WRITE("</i>");
-
- -

§6. Index tabulation. The following produces the table of verbs in the Phrasebook Index page. -

- -
-inter_lexicon *IndexLexicon::stock(inter_tree *I) {
+inter_lexicon *IndexLexicon::stock(inter_tree *I) {
     inter_lexicon *lexicon = CREATE(inter_lexicon);
     lexicon->first = NULL;
     lexicon->unsorted = NEW_LINKED_LIST(index_lexicon_entry);
     tree_inventory *inv = Synoptic::inv(I);
+    Add verb entries3.1;
+    Add preposition entries3.2;
+    Add adjective entries3.3;
+    Add common noun entries3.4;
+    Add proper noun entries3.5;
+    Create lower-case forms of all lexicon entries3.6;
+    Sort the lexicon into alphabetical order3.7;
+    return lexicon;
+}
+
+

§3.1. Add verb entries3.1 = +

+ +
     TreeLists::sort(inv->verb_nodes, Synoptic::module_order);
     for (int i=0; i<TreeLists::len(inv->verb_nodes); i++) {
         inter_package *pack = Inter::Package::defined_by_frame(inv->verb_nodes->list[i].node);
         index_lexicon_entry *lex;
         if (Metadata::read_numeric(pack, I"^meaningless"))
-            lex = IndexLexicon::new_main_verb(Metadata::read_textual(pack, I"^infinitive"), MVERB_TLEXE, pack);
+            lex = IndexLexicon::new_entry_with_package(
+                Metadata::read_textual(pack, I"^infinitive"), MVERB_TLEXE, pack);
         else
-            lex = IndexLexicon::new_main_verb(Metadata::read_textual(pack, I"^infinitive"), VERB_TLEXE, pack);
+            lex = IndexLexicon::new_entry_with_package(
+                Metadata::read_textual(pack, I"^infinitive"), VERB_TLEXE, pack);
         lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
         ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
     }
+
+ +

§3.2. Add preposition entries3.2 = +

+ +
     for (int i=0; i<TreeLists::len(inv->preposition_nodes); i++) {
         inter_package *pack = Inter::Package::defined_by_frame(inv->preposition_nodes->list[i].node);
-        index_lexicon_entry *lex = IndexLexicon::new_main_verb(Metadata::read_textual(pack, I"^text"), PREP_TLEXE, pack);
+        index_lexicon_entry *lex = IndexLexicon::new_entry_with_package(
+            Metadata::read_textual(pack, I"^text"), PREP_TLEXE, pack);
         lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
     }
+
+ +

§3.3. Add adjective entries3.3 = +

+ +
     for (int i=0; i<TreeLists::len(inv->adjective_nodes); i++) {
         inter_package *pack = Inter::Package::defined_by_frame(inv->adjective_nodes->list[i].node);
         text_stream *lemma = Metadata::read_textual(pack, I"^text");
         if (Str::len(lemma) > 0) {
-            index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(lemma, ADJECTIVAL_PHRASE_TLEXE);
+            index_lexicon_entry *lex = IndexLexicon::new_entry(lemma, ADJECTIVAL_PHRASE_TLEXE);
             lex->category = "adjective";
             lex->lex_package = pack;
             ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
         }
     }
+
+ +

§3.4. Add common noun entries3.4 = +

+ +
     for (int i=0; i<TreeLists::len(inv->kind_nodes); i++) {
         inter_package *pack = Inter::Package::defined_by_frame(inv->kind_nodes->list[i].node);
         if ((Metadata::read_optional_numeric(pack, I"^is_base")) &&
             (Metadata::read_optional_numeric(pack, I"^is_subkind_of_object"))) {
-            index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(Metadata::read_textual(pack, I"^name"), COMMON_NOUN_TLEXE);
+            index_lexicon_entry *lex = IndexLexicon::new_entry(
+                Metadata::read_textual(pack, I"^name"), COMMON_NOUN_TLEXE);
             lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
             lex->category = "noun";
             lex->lex_package = pack;
             ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
         }
     }
+
+ +

§3.5. Add proper noun entries3.5 = +

+ +
     for (int i=0; i<TreeLists::len(inv->instance_nodes); i++) {
         inter_package *pack = Inter::Package::defined_by_frame(inv->instance_nodes->list[i].node);
         if (Metadata::read_optional_numeric(pack, I"^is_object")) {
-            index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(Metadata::read_textual(pack, I"^name"), PROPER_NOUN_TLEXE);
+            index_lexicon_entry *lex = IndexLexicon::new_entry(
+                Metadata::read_textual(pack, I"^name"), PROPER_NOUN_TLEXE);
             lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
             lex->category = "noun";
             lex->lex_package = pack;
             ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
         } else {
-            index_lexicon_entry *lex = IndexLexicon::lexicon_new_entry(Metadata::read_textual(pack, I"^name"), ENUMERATED_CONSTANT_TLEXE);
+            index_lexicon_entry *lex = IndexLexicon::new_entry(
+                Metadata::read_textual(pack, I"^name"), ENUMERATED_CONSTANT_TLEXE);
             lex->link_to = (int) Metadata::read_numeric(pack, I"^at");
             lex->category = "noun";
             lex->lex_package = pack;
             ADD_TO_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted);
         }
     }
-    Create lower-case forms of all lexicon entries dash6.1;
-    Sort the lexicon into alphabetical order dash6.2;
-    return lexicon;
-}
 
-

§6.1. Before we can sort the lexicon, we need to turn its disparate forms of name +

+

§3.6. Before we can sort the lexicon, we need to turn its disparate forms of name into a single, canonical, lower-case representation.

-

Create lower-case forms of all lexicon entries dash6.1 = +

Create lower-case forms of all lexicon entries3.6 =

@@ -395,14 +244,14 @@ into a single, canonical, lower-case representation.
             Str::put(pos, Characters::tolower(Str::get(pos)));
     }
 
- -

§6.2. The lexicon is sorted by insertion sort, which is not ideally fast, but +

+

§3.7. The lexicon is sorted by insertion sort, which is not ideally fast, but which is convenient when dealing with linked lists: there are unlikely to be more than 1000 or so entries, so the speed penalty for insertion rather than (say) quicksort is not great.

-

Sort the lexicon into alphabetical order dash6.2 = +

Sort the lexicon into alphabetical order3.7 =

@@ -423,7 +272,218 @@ than (say) quicksort is not great.
         Inserted: ;
     }
 
+ +

§4. Lexicon entries are created by the following function: +

+ +
+index_lexicon_entry *IndexLexicon::new_entry(text_stream *lemma, int part) {
+    index_lexicon_entry *lex = CREATE(index_lexicon_entry);
+    lex->lemma = Str::duplicate(lemma);
+    lex->part_of_speech = part;
+    lex->entry_refers_to = NULL_GENERAL_POINTER;
+    lex->category = NULL; lex->gloss_note = NULL;
+    lex->reduced_to_lower_case = Str::new();
+    lex->lex_package = NULL;
+    lex->link_to = 0;
+    return lex;
+}
+
+

§5. Or by these specialisations: +

+ +
+index_lexicon_entry *IndexLexicon::new_entry_with_details(text_stream *lemma, int pos,
+    char *category, char *gloss) {
+    index_lexicon_entry *lex = IndexLexicon::new_entry(lemma, pos);
+    lex->lemma = lemma;
+    lex->category = category; lex->gloss_note = gloss;
+    return lex;
+}
+
+index_lexicon_entry *IndexLexicon::new_entry_with_package(text_stream *infinitive, int part,
+    inter_package *pack) {
+    index_lexicon_entry *lex = IndexLexicon::new_entry(NULL, part);
+    lex->lemma = infinitive;
+    lex->category = "verb";
+    lex->lex_package = pack;
+    return lex;
+}
+
+

§6. Listing a lexicon. Now for the bulk of the work. Entries appear in HTML paragraphs with hanging +indentation and no interparagraph spacing, so we need to insert regular +paragraphs between the As and the Bs, then between the Bs and the Cs, and so on. +Each entry consists of the wording, then maybe some icons, then an explanation +of what it is: for instance, +

+ +
+player's holdall [icon]    noun, a kind of container
+
+

In a few cases, there is a further textual gloss to add. +

+ +
+void IndexLexicon::listing(OUTPUT_STREAM, inter_lexicon *lexicon, int proper_nouns_only,
+    localisation_dictionary *LD) {
+    index_lexicon_entry *lex;
+    LOOP_OVER_LINKED_LIST(lex, index_lexicon_entry, lexicon->unsorted) {
+        LOG("%S: %d\n", lex->lemma, lex->part_of_speech);
+    }
+    wchar_t current_initial_letter = '?';
+    int verb_count = 0, proper_noun_count = 0, c;
+    for (lex = lexicon->first; lex; lex = lex->sorted_next)
+        if (lex->part_of_speech == PROPER_NOUN_TLEXE)
+            proper_noun_count++;
+    if (proper_nouns_only) {
+        HTML::begin_html_table(OUT, NULL, TRUE, 0, 0, 0, 0, 0);
+        HTML::first_html_column(OUT, 0);
+    }
+    for (c = 0, lex = lexicon->first; lex; lex = lex->sorted_next) {
+        if (proper_nouns_only) { if (lex->part_of_speech != PROPER_NOUN_TLEXE) continue; }
+        else { if (lex->part_of_speech == PROPER_NOUN_TLEXE) continue; }
+        if ((proper_nouns_only) && (c == proper_noun_count/2)) HTML::next_html_column(OUT, 0);
+        if (current_initial_letter != Str::get_first_char(lex->reduced_to_lower_case)) {
+            if (c > 0) { HTML_OPEN("p"); HTML_CLOSE("p"); }
+            current_initial_letter = Str::get_first_char(lex->reduced_to_lower_case);
+        }
+        c++;
+        HTML_OPEN_WITH("p", "class=\"hang\"");
+
+        Text of the actual lexicon entry6.1;
+        Icon with link to documentation, source or verb table, if any6.2;
+
+        switch(lex->part_of_speech) {
+            case ADJECTIVAL_PHRASE_TLEXE:
+                Definition of adjectival phrase entry6.5; break;
+            case ENUMERATED_CONSTANT_TLEXE:
+                Definition of enumerated instance entry6.6; break;
+            case PROPER_NOUN_TLEXE:
+                Definition of proper noun entry6.4; break;
+            case COMMON_NOUN_TLEXE:
+                Definition of common noun entry6.3; break;
+        }
+        if (lex->gloss_note) WRITE(" <i>%s</i>", lex->gloss_note);
+        HTML_CLOSE("p");
+    }
+    if (proper_nouns_only) { HTML::end_html_row(OUT); HTML::end_html_table(OUT); }
+}
+
+

§6.1. In traditional dictionary fashion, we present the text in what may not be +the most normal ordering, in order to place the alphabetically important +part first: thus "see, to be able to" rather than "to be able to see".1 +

+ + +

Text of the actual lexicon entry6.1 = +

+ +
+    if (lex->part_of_speech == PREP_TLEXE)
+        Localisation::write_1(OUT, LD, I"Lx", I"ToBe", lex->lemma);
+    else
+        WRITE("%S", lex->lemma);
+
+

§6.2. Main lexicon entries to do with verbs link further down the index page +to the corresponding entries in the verb table. We want to use numbered +anchors for these links, but we want to avoid colliding with numbered +anchors already used for other purposes higher up on the Phrasebook index +page. So we use a set of anchors numbered 10000 and up, which is guaranteed +not to coincide with any of those. +

+ +

We omit source links to an adjectival phrase because these are polymorphic, +that is, the phrase may have multiple definitions in different parts of the +source text: so any single link would be potentially misleading. +

+ +

Icon with link to documentation, source or verb table, if any6.2 = +

+ +
+    switch(lex->part_of_speech) {
+        case COMMON_NOUN_TLEXE: {
+            text_stream *ref =
+                Metadata::read_optional_textual(lex->lex_package, I"^documentation");
+            if (Str::len(ref) > 0) IndexUtilities::DocReferences::link(OUT, ref);
+            break;
+        }
+        case VERB_TLEXE:
+        case PREP_TLEXE:
+            IndexUtilities::below_link_numbered(OUT, 10000+verb_count++);
+            break;
+    }
+    if ((lex->part_of_speech != ADJECTIVAL_PHRASE_TLEXE) && (lex->link_to > 0))
+        IndexUtilities::link(OUT, lex->link_to);
+
+ +

§6.3. Definition of common noun entry6.3 = +

+ +
+    Begin definition text6.3.1;
+    WRITE(", ");
+    Localisation::write_1(OUT, LD, I"Lx", I"KindOf",
+        Metadata::read_optional_textual(lex->lex_package, I"^index_superkind"));
+    End definition text6.3.2;
+
+ +

§6.4. Simply the name of an instance. +

+ +

Definition of proper noun entry6.4 = +

+ +
+    Begin definition text6.3.1;
+    WRITE("%S", Metadata::read_textual(lex->lex_package, I"^index_kind"));
+    End definition text6.3.2;
+
+ +

§6.5. As mentioned above, an adjectival phrase can be multiply defined in +different contexts. We want to quote all of those. +

+ +

Definition of adjectival phrase entry6.5 = +

+ +
+    Begin definition text6.3.1;
+    WRITE(": %S", Metadata::read_textual(lex->lex_package, I"^index_entry"));
+    End definition text6.3.2;
+
+ +

§6.6. Definition of enumerated instance entry6.6 = +

+ +
+    Begin definition text6.3.1;
+    WRITE(", ");
+    Localisation::write_1(OUT, LD, I"Lx", I"ValueOf",
+        Metadata::read_optional_textual(lex->lex_package, I"^index_kind"));
+    End definition text6.3.2;
+
+ +

§6.3.1. Begin definition text6.3.1 = +

+ +
+    WRITE(" ... <i>");
+    if ((proper_nouns_only == FALSE) && (lex->category))
+        WRITE("%s", lex->category);
+
+ +

§6.3.2. End definition text6.3.2 = +

+ +
+    WRITE("</i>");
+
+ diff --git a/docs/index-module/3-ge.html b/docs/index-module/3-ge.html index 29483d66f..2084dd43f 100644 --- a/docs/index-module/3-ge.html +++ b/docs/index-module/3-ge.html @@ -76,7 +76,7 @@ function togglePopup(material_id) {
 void GazetteerElement::render(OUTPUT_STREAM, localisation_dictionary *LD) {
-    IndexLexicon::listing(OUT, InterpretIndex::get_lexicon(), TRUE);
+    IndexLexicon::listing(OUT, InterpretIndex::get_lexicon(), TRUE, LD);
 }