module sdp.meta.metadoc; template SiSUabstraction() { import std.getopt, std.file, std.path, std.process; import sdp.meta, sdp.meta.metadoc_summary, sdp.meta.metadoc_from_src, sdp.meta.conf_make_meta, // sdp.meta.conf_make_meta_native, sdp.meta.conf_make_meta_sdlang, sdp.meta.conf_make_meta_composite, sdp.meta.defaults, sdp.meta.doc_debugs, sdp.meta.read_config_files, sdp.meta.read_source_files, sdp.meta.rgx, sdp.output.hub, sdp.output.paths_source; mixin SiSUrgxInit; mixin SiSUregisters; mixin SiSUextractSDLang; mixin SiSUnode; mixin SiSUbiblio; mixin SiSUrgxInitFlags; mixin outputHub; enum headBody { header, body_content, insert_filelist } enum makeMeta { make, meta } enum docAbst { doc_abstraction, section_keys, segnames, segnames_0_4, images } static auto rgx = Rgx(); auto SiSUabstraction(Fn,O,E)( Fn fn_src, O _opt_action, E env, ){ auto sdl_root_config_share = configRead!()("config_share", env); auto sdl_root_config_local = configRead!()("config_local", env); auto conf_files_composite_make = confFilesSDLtoStruct!()(sdl_root_config_share, sdl_root_config_local); /+ ↓ read file (filename with path) +/ /+ ↓ file tuple of header and content +/ debug(steps) { writeln(__LINE__, ":", __FILE__, ": step1 commence → (get document header & body & insert files)"); } auto _header_body_inserts = SiSUrawMarkupContent!()(fn_src); static assert(!isTypeTuple!(_header_body_inserts)); static assert(_header_body_inserts.length==3); debug(steps) { writeln(__LINE__, ":", __FILE__, ": step1 complete"); } debug(header_and_body) { writeln(header); writeln(_header_body_inserts.length); writeln(_header_body_inserts.length[headBody.body_content][0]); } /+ ↓ split header into make and meta +/ debug(steps) { writeln(__LINE__, ":", __FILE__, ": step2 commence → (doc header: make & meta as struct)"); } auto _make_and_meta_struct = docHeaderMakeAndMetaTupExtractAndConvertToStruct!()(conf_files_composite_make, _header_body_inserts[headBody.header]); // breakage ... debug(steps) { writeln(__LINE__, ":", __FILE__, ": step2 complete"); } /+ ↓ document abstraction: process document, return abstraction as tuple +/ debug(steps) { writeln(__LINE__, ":", __FILE__, ": step3 commence → (document abstraction (da); da keys; segnames; doc_matters)"); } auto da = SiSUdocAbstraction!()( _header_body_inserts[headBody.body_content], _make_and_meta_struct, _opt_action, ); static assert(!isTypeTuple!(da)); static assert(da.length==5); auto doc_abstraction = da[docAbst.doc_abstraction]; /+ head ~ toc ~ body ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~ blurb; +/ auto _document_section_keys_sequenced = da[docAbst.section_keys]; string[] _doc_html_segnames = da[docAbst.segnames]; string[] _doc_epub_segnames_0_4 = da[docAbst.segnames_0_4]; auto _images = da[docAbst.images]; debug(steps) { writeln(__LINE__, ":", __FILE__, ": step3 complete"); } debug(steps) { writeln(__LINE__, ":", __FILE__, ": step4 commence → (doc_matters)"); } struct DocumentMatters { auto keys_seq() { /+ contains .seg & .scroll sequences +/ auto _k = _document_section_keys_sequenced; return _k; } string[] segnames() { string[] _k = _doc_html_segnames; return _k; } string[] segnames_lv_0_to_4() { string[] _k = _doc_epub_segnames_0_4; return _k; } auto conf_make_meta() { auto _k = _make_and_meta_struct; return _k; } auto source_filename() { string _k = fn_src; return _k; } auto src_path_info() { string _pwd = env["pwd"]; auto _k = SiSUpathsSRC!()(_pwd, fn_src); return _k; } auto opt_action() { auto _k = _opt_action; return _k; } auto environment() { auto _k = env; return _k; } auto language() { string _k; if (auto m = fn_src.match(rgx.language_code_and_filename)) { _k = m.captures[1]; } else { _k = "en"; } return _k; } auto file_insert_list() { string[] _k = _header_body_inserts[headBody.insert_filelist]; return _k; } auto image_list() { auto _k = _images; return _k; } } auto doc_matters = DocumentMatters(); debug(steps) { writeln(__LINE__, ":", __FILE__, ": step4 complete"); } auto t = tuple(doc_abstraction, doc_matters); static assert(t.length==2); return t; } }