Setting up the use of this module.

§1. This section simply sets up the module in ways expected by foundation, and contains no code of interest. The following constant exists only in tools which use this module:

define SUPERVISOR_MODULE TRUE

§2. This module defines the following classes:

enumerate build_methodology_CLASS 
enumerate build_script_CLASS 
enumerate build_skill_CLASS 
enumerate build_step_CLASS 
enumerate build_vertex_CLASS 
enumerate cd_image_CLASS 
enumerate cd_layout_error_CLASS 
enumerate cd_manifest_item_CLASS 
enumerate cd_pageset_CLASS 
enumerate cd_source_file_CLASS 
enumerate cd_volume_CLASS 
enumerate compiled_documentation_CLASS 
enumerate control_structure_phrase_CLASS 
enumerate copy_error_CLASS 
enumerate element_activation_CLASS 
enumerate example_index_data_CLASS 
enumerate extensions_key_item_CLASS 
enumerate heading_CLASS 
enumerate heading_tree_CLASS 
enumerate inbuild_copy_CLASS 
enumerate inbuild_edition_CLASS 
enumerate inbuild_genre_CLASS 
enumerate inbuild_licence_CLASS 
enumerate inbuild_nest_CLASS 
enumerate inbuild_registry_CLASS 
enumerate inbuild_requirement_CLASS 
enumerate inbuild_search_result_CLASS 
enumerate inbuild_work_CLASS 
enumerate index_lemma_CLASS 
enumerate index_reference_CLASS 
enumerate index_cross_reference_CLASS 
enumerate indexing_category_CLASS 
enumerate inform_extension_CLASS 
enumerate inform_kit_CLASS 
enumerate inform_kit_ittt_CLASS 
enumerate inform_language_CLASS 
enumerate inform_pipeline_CLASS 
enumerate inform_project_CLASS 
enumerate inform_template_CLASS 
enumerate kit_configuration_CLASS 
enumerate kit_dependency_CLASS 
enumerate satellite_test_case_CLASS 
enumerate index_markup_notation_CLASS 
DECLARE_CLASS(build_methodology)
DECLARE_CLASS(build_script)
DECLARE_CLASS(build_skill)
DECLARE_CLASS(build_step)
DECLARE_CLASS(build_vertex)
DECLARE_CLASS(cd_image)
DECLARE_CLASS(cd_layout_error)
DECLARE_CLASS(cd_manifest_item)
DECLARE_CLASS(cd_pageset)
DECLARE_CLASS(cd_source_file)
DECLARE_CLASS(cd_volume)
DECLARE_CLASS(control_structure_phrase)
DECLARE_CLASS(compiled_documentation)
DECLARE_CLASS(copy_error)
DECLARE_CLASS(element_activation)
DECLARE_CLASS(example_index_data)
DECLARE_CLASS(extensions_key_item)
DECLARE_CLASS(heading_tree)
DECLARE_CLASS(heading)
DECLARE_CLASS(inbuild_copy)
DECLARE_CLASS(inbuild_edition)
DECLARE_CLASS(inbuild_genre)
DECLARE_CLASS(inbuild_licence)
DECLARE_CLASS(inbuild_nest)
DECLARE_CLASS(inbuild_registry)
DECLARE_CLASS(inbuild_requirement)
DECLARE_CLASS(inbuild_search_result)
DECLARE_CLASS(inbuild_work)
DECLARE_CLASS(index_lemma)
DECLARE_CLASS(index_reference)
DECLARE_CLASS(index_cross_reference)
DECLARE_CLASS(indexing_category)
DECLARE_CLASS(inform_extension)
DECLARE_CLASS(inform_kit_ittt)
DECLARE_CLASS(inform_kit)
DECLARE_CLASS(inform_language)
DECLARE_CLASS(inform_pipeline)
DECLARE_CLASS(inform_project)
DECLARE_CLASS(inform_template)
DECLARE_CLASS(kit_configuration)
DECLARE_CLASS(kit_dependency)
DECLARE_CLASS(satellite_test_case)
DECLARE_CLASS(index_markup_notation)

§3. Like all modules, this one must define a start and end function:

enumerate RESULTS_SORTING_MREASON 
enumerate EXTENSIONS_CENSUS_DA 
enumerate HEADINGS_DA 
void SupervisorModule::start(void) {
    Memory::reason_name(RESULTS_SORTING_MREASON, "results sorting");
    Writers::register_writer('X', &Works::writer);
    Writers::register_writer('J', &Languages::log);
    Log::declare_aspect(EXTENSIONS_CENSUS_DA, U"extensions census", FALSE, FALSE);
    Log::declare_aspect(HEADINGS_DA, U"headings", FALSE, FALSE);
    Supervisor::start();
    Declare the tree annotations3.1;
}
void SupervisorModule::end(void) {
}

§4. This module uses syntax, and adds the following annotations to the syntax tree.

enumerate embodying_heading_ANNOT /* heading: for parse nodes of headings */ 
enumerate inclusion_of_extension_ANNOT /* inform_extension: for parse nodes of headings */ 
DECLARE_ANNOTATION_FUNCTIONS(embodying_heading, heading)
MAKE_ANNOTATION_FUNCTIONS(embodying_heading, heading)
DECLARE_ANNOTATION_FUNCTIONS(inclusion_of_extension, inform_extension)
MAKE_ANNOTATION_FUNCTIONS(inclusion_of_extension, inform_extension)

§3.1. Declare the tree annotations3.1 =

    Annotations::declare_type(embodying_heading_ANNOT,
        SupervisorModule::write_embodying_heading_ANNOT);
    Annotations::declare_type(inclusion_of_extension_ANNOT,
        SupervisorModule::write_inclusion_of_extension_ANNOT);

§5.

void SupervisorModule::write_embodying_heading_ANNOT(text_stream *OUT, parse_node *p) {
    if (Node::get_embodying_heading(p)) {
        heading *H = Node::get_embodying_heading(p);
        WRITE(" {under: H%d'%W'}", H->level, Node::get_text(H->sentence_declaring));
    }
}
void SupervisorModule::write_inclusion_of_extension_ANNOT(text_stream *OUT, parse_node *p) {
    if (Node::get_inclusion_of_extension(p)) {
        inform_extension *E = Node::get_inclusion_of_extension(p);
        WRITE(" {includes: ");
        Copies::write_copy(OUT, E->as_copy);
        WRITE(" }");
    }
}

§6.

define STILL_MORE_ANNOTATION_PERMISSIONS_SYNTAX_CALLBACK SupervisorModule::grant_annotation_permissions
void SupervisorModule::grant_annotation_permissions(void) {
    Annotations::allow(HEADING_NT, embodying_heading_ANNOT);
    Annotations::allow(HEADING_NT, inclusion_of_extension_ANNOT);
}