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:
enum build_methodology_CLASS enum build_script_CLASS enum build_skill_CLASS enum build_step_CLASS enum build_vertex_CLASS enum control_structure_phrase_CLASS enum copy_error_CLASS enum element_activation_CLASS enum extension_census_CLASS enum extension_census_datum_CLASS enum extension_dictionary_entry_CLASS enum heading_CLASS enum heading_tree_CLASS enum inbuild_copy_CLASS enum inbuild_edition_CLASS enum inbuild_genre_CLASS enum inbuild_nest_CLASS enum inbuild_registry_CLASS enum inbuild_requirement_CLASS enum inbuild_search_result_CLASS enum inbuild_work_CLASS enum inform_extension_CLASS enum inform_kit_CLASS enum inform_kit_ittt_CLASS enum inform_language_CLASS enum inform_pipeline_CLASS enum inform_project_CLASS enum inform_template_CLASS enum kit_dependency_CLASS enum known_extension_clash_CLASS
DECLARE_CLASS(build_methodology) DECLARE_CLASS(build_script) DECLARE_CLASS(build_skill) DECLARE_CLASS(build_step) DECLARE_CLASS(build_vertex) DECLARE_CLASS(control_structure_phrase) DECLARE_CLASS(copy_error) DECLARE_CLASS(element_activation) DECLARE_CLASS(extension_census_datum) DECLARE_CLASS(extension_census) DECLARE_CLASS(extension_dictionary_entry) DECLARE_CLASS(heading_tree) DECLARE_CLASS(heading) DECLARE_CLASS(inbuild_copy) DECLARE_CLASS(inbuild_edition) DECLARE_CLASS(inbuild_genre) DECLARE_CLASS(inbuild_nest) DECLARE_CLASS(inbuild_registry) DECLARE_CLASS(inbuild_requirement) DECLARE_CLASS(inbuild_search_result) DECLARE_CLASS(inbuild_work) 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_dependency) DECLARE_CLASS(known_extension_clash)
§3. Like all modules, this one must define a start and end function:
enum EXTENSION_DICTIONARY_MREASON enum EXTENSIONS_CENSUS_DA enum HEADINGS_DA
COMPILE_WRITER(extension_dictionary_entry *, ExtensionDictionary::log_entry) void SupervisorModule::start(void) { Memory::reason_name(EXTENSION_DICTIONARY_MREASON, "extension dictionary"); REGISTER_WRITER('d', ExtensionDictionary::log_entry); Writers::register_writer('X', &Works::writer); Writers::register_writer('J', &Languages::log); Log::declare_aspect(EXTENSIONS_CENSUS_DA, L"extensions census", FALSE, FALSE); Log::declare_aspect(HEADINGS_DA, L"headings", FALSE, FALSE); Supervisor::start(); Declare the tree annotations3.2; } void SupervisorModule::end(void) { }
§3.1. This module uses syntax, and adds the following annotations to the syntax tree.
enum embodying_heading_ANNOT heading: for parse nodes of headings enum 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.2. Declare the tree annotations3.2 =
Annotations::declare_type(embodying_heading_ANNOT, SupervisorModule::write_embodying_heading_ANNOT); Annotations::declare_type(inclusion_of_extension_ANNOT, SupervisorModule::write_inclusion_of_extension_ANNOT);
- This code is used in §3.
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(" }"); } } 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); }