From c8c141d8abf715c9a697d2e3dd949d4621cfea7b Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sun, 29 Jan 2017 11:57:41 -0500 Subject: 0.12.1 abstraction template --- src/sdp/abstraction.d | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 src/sdp/abstraction.d (limited to 'src/sdp/abstraction.d') diff --git a/src/sdp/abstraction.d b/src/sdp/abstraction.d new file mode 100644 index 0000000..d91618e --- /dev/null +++ b/src/sdp/abstraction.d @@ -0,0 +1,121 @@ +template SiSUabstraction() { + /+ sdp: sisu document parser, see http://sisudoc.org +/ + import + ao_abstract_doc_source, + ao_conf_make_meta, + ao_conf_make_meta_native, + ao_conf_make_meta_sdlang, + ao_defaults, + ao_output_debugs, + ao_read_config_files, + ao_read_source_files, + ao_rgx, + output_hub; + /+ sdlang http://sdlang.org +/ + import sdlang; // sdlang.d + /+ std +/ + private import + std.algorithm, + std.array, + std.container, + std.exception, + std.getopt, + std.json, + std.process, + std.stdio, + std.file, + std.path, + std.range, + std.regex, + std.string, + std.traits, + std.typecons, + std.utf, + std.conv : to; + mixin SiSUrgxInit; + mixin SiSUregisters; + mixin SiSUheaderExtractSDLang; + mixin SiSUnode; + mixin SiSUbiblio; + mixin SiSUrgxInitFlags; + mixin outputHub; + // 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); + 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 _0_header_1_body_content_2_insert_filelist_tuple = + SiSUmarkupRaw!()(fn_src); + static assert(!isTypeTuple!(_0_header_1_body_content_2_insert_filelist_tuple)); + static assert(_0_header_1_body_content_2_insert_filelist_tuple.length==3); + debug(header_and_body) { + writeln(header); + writeln(_0_header_1_body_content_2_insert_filelist_tuple.length); + writeln(_0_header_1_body_content_2_insert_filelist_tuple.length[1][0]); + } + /+ ↓ split header into make and meta +/ + auto _0_make_1_dochead_meta_tuple = + SiSUheaderExtractHub!()(_0_header_1_body_content_2_insert_filelist_tuple[0], conf_doc_make_aa); + static assert(!isTypeTuple!(_0_make_1_dochead_meta_tuple)); + static assert(_0_make_1_dochead_meta_tuple.length==2); + /+ ↓ document abstraction: process document, return abstraction as tuple +/ + auto da = SiSUdocAbstraction!()( + (_0_header_1_body_content_2_insert_filelist_tuple[1]), + (_0_make_1_dochead_meta_tuple[0]), + (_0_make_1_dochead_meta_tuple[1]), + opts + ); + static assert(!isTypeTuple!(da)); + static assert(da.length==3); + auto doc_abstraction = da[0]; // head ~ toc ~ contents ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~blurb; + string[][string] _document_section_keys_sequenced = da[1]; + string[] _doc_html_segnames = da[2]; + struct DocumentMatters { + string[] keys_seq_seg() { + string[] _k = _document_section_keys_sequenced["seg"]; + return _k; + } + string[] keys_seq_scroll() { + string[] _k = _document_section_keys_sequenced["scroll"]; + return _k; + } + string[] segnames() { + string[] _k = _doc_html_segnames; + return _k; + } + auto dochead_make() { + string[string][string] _k = _0_make_1_dochead_meta_tuple[0]; + return _k; + } + auto dochead_meta() { + string[string][string] _k = _0_make_1_dochead_meta_tuple[1]; + return _k; + } + auto source_filename() { + string _k = fn_src; + return _k; + } + auto file_insert_list() { + string[] _k = _0_header_1_body_content_2_insert_filelist_tuple[2]; + return _k; + } + auto opt_action_bool() { + bool[string] _k = opts; + return _k; + } + } + auto doc_matters = DocumentMatters(); + auto t = tuple(doc_abstraction, doc_matters); + static assert(t.length==2); + return t; + } +} -- cgit v1.2.3