diff options
Diffstat (limited to 'src/sdp/ao/abstraction.d')
-rw-r--r-- | src/sdp/ao/abstraction.d | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/sdp/ao/abstraction.d b/src/sdp/ao/abstraction.d new file mode 100644 index 0000000..17b1dff --- /dev/null +++ b/src/sdp/ao/abstraction.d @@ -0,0 +1,132 @@ +module sdp.ao.abstraction; +template SiSUabstraction() { + /+ sdp: sisu document parser, see http://sisudoc.org +/ + import sdp.ao; + import + std.getopt, + std.process; + import + sdp.ao.abstraction_summary, + sdp.ao.abstract_doc_source, + sdp.ao.conf_make_meta, + // sdp.ao.conf_make_meta_native, + sdp.ao.conf_make_meta_sdlang, + sdp.ao.defaults, + sdp.ao.doc_debugs, + sdp.ao.read_config_files, + sdp.ao.read_source_files, + sdp.ao.rgx, + sdp.output.hub, + sdp.output.paths_source; + + + mixin SiSUrgxInit; + mixin SiSUregisters; + mixin SiSUheaderExtractSDLang; + 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 } + auto rgx = Rgx(); + auto SiSUabstraction(Fn,O,E)(Fn fn_src, O opts, E env){ + auto sdl_root_configuration = ConfigHub!()("conf.sdl", env); + auto sdl_root_doc_make = ConfigHub!()("sisu_document_make", env); + auto confsdl = HeaderExtractSDL(); + auto conf_settings_aa = confsdl.configSettingsSDLangToAAmake(sdl_root_configuration); + auto conf_doc_make_aa = confsdl.documentMakeSDLangToAAmake(sdl_root_doc_make); + /+ ↓ read file (filename with path) +/ + /+ ↓ file tuple of header and content +/ + auto _header_body_inserts = + SiSUrawMarkupContent!()(fn_src); + static assert(!isTypeTuple!(_header_body_inserts)); + static assert(_header_body_inserts.length==3); + 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 +/ + auto _make_and_meta = + SiSUheaderExtractHub!()(_header_body_inserts[headBody.header], conf_doc_make_aa); + static assert(!isTypeTuple!(_make_and_meta)); + static assert(_make_and_meta.length==2); + /+ ↓ document abstraction: process document, return abstraction as tuple +/ + auto da = SiSUdocAbstraction!()( + (_header_body_inserts[headBody.body_content]), + (_make_and_meta[makeMeta.make]), + (_make_and_meta[makeMeta.meta]), + opts + ); + 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]; + 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 dochead_make() { + string[string][string] _k = _make_and_meta[makeMeta.make]; + return _k; + } + auto dochead_meta() { + string[string][string] _k = _make_and_meta[makeMeta.meta]; + return _k; + } + auto src_path_info() { + string _pwd = env["pwd"]; + auto _k = SiSUpathsSRC!()(_pwd, fn_src); + return _k; + } + auto source_filename() { + string _k = fn_src; + 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 opt_action_bool() { + bool[string] _k = opts; + return _k; + } + auto environment() { + auto _k = env; + return _k; + } + } + auto doc_matters = DocumentMatters(); + auto t = tuple(doc_abstraction, doc_matters); + static assert(t.length==2); + return t; + } +} |