diff options
Diffstat (limited to 'src/sdp/abstraction.d')
| -rw-r--r-- | src/sdp/abstraction.d | 121 | 
1 files changed, 121 insertions, 0 deletions
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; +  } +}  | 
