To write the Events element (Ev) in the index.
§1. There are two tables, one for timed events, the other for those of no fixed time.
void EventsElement::render(OUTPUT_STREAM, localisation_dictionary *LD) { inter_tree *I = InterpretIndex::get_tree(); tree_inventory *inv = Synoptic::inv(I); TreeLists::sort(inv->rule_nodes, Synoptic::module_order); int when_count = 0, tt_count = 0; Index events with no specific time1.1; Index timetabled events1.2; if ((when_count == 0) && (tt_count == 0)) { HTML_OPEN("p"); Localisation::italic_0(OUT, LD, I"Index.Elements.Ev.None"); HTML_CLOSE("p"); } }
§1.1. Index events with no specific time1.1 =
inter_package *pack; LOOP_OVER_INVENTORY_PACKAGES(pack, i, inv->rule_nodes) if ((Metadata::exists(pack, I"^timed")) && (Metadata::exists(pack, I"^timed_for") == FALSE)) { if (when_count == 0) { HTML_OPEN("p"); Localisation::italic_0(OUT, LD, I"Index.Elements.Ev.Timeless"); HTML_CLOSE("p"); } when_count++; HTML_OPEN_WITH("p", "class=\"tightin2\""); WRITE("%S", Metadata::read_textual(pack, I"^preamble")); IndexUtilities::link_package(OUT, pack); WRITE(" ("); Localisation::write_0(OUT, LD, I"Index.Elements.Ev.WhereTriggered"); WRITE(": "); inter_package *entry; LOOP_THROUGH_SUBPACKAGES(entry, pack, I"_timed_rule_trigger") { int at = (int) Metadata::read_optional_numeric(entry, I"^used_at"); if (at > 0) IndexUtilities::link(OUT, at); } WRITE(")"); HTML_CLOSE("p"); }
- This code is used in §1.
§1.2. Index timetabled events1.2 =
inter_package *pack; LOOP_OVER_INVENTORY_PACKAGES(pack, i, inv->rule_nodes) if ((Metadata::exists(pack, I"^timed")) && (Metadata::exists(pack, I"^timed_for"))) { if (tt_count == 0) { HTML_OPEN("p"); Localisation::italic_0(OUT, LD, I"Index.Elements.Ev.Timetable"); HTML_CLOSE("p"); } tt_count++; HTML_OPEN_WITH("p", "class=\"in2\""); WRITE("%S", Metadata::read_textual(pack, I"^preamble")); IndexUtilities::link_package(OUT, pack); HTML_CLOSE("p"); }
- This code is used in §1.