/++ extract native/orig header return associative array
the header is passed as text (lopped off top of a sisu markup file until the required first heading ^A~), determine whether is a native header or sdlang one with a regex check if whether it contains the "native header" required tag/field @title: then process accordingly as a "native header" or "sdlang header" converting the metadata and make instructions to a common json format used by program internally. Moved to associative array. +/ template SiSUheaderExtractHub() { private import std.exception, std.regex, std.stdio, std.traits, std.typecons, std.utf, std.conv : to; private import sdlang; private import ao_rgx, ao_conf_make_meta_native, ao_conf_make_meta_sdlang; mixin SiSUrgxInit; mixin SiSUheaderExtractNative; mixin SiSUheaderExtractSDLang; auto rgx = Rgx(); auto SiSUheaderExtractHub(Src, DocMake)( Src header_src, DocMake conf_doc_make_aa ) { debug(asserts){ static assert(is(typeof(header_src) == char[])); static assert(is(typeof(conf_doc_make_aa) == string[string][string])); } auto head_native = HeaderDocMetadataAndMakeNativeToAA(); auto head_sdlang = HeaderExtractSDL(); auto header_make_and_meta_tuple = (match(header_src, rgx.native_header_meta_title)) ? (head_native.headerNativeToAA(header_src)) : (head_sdlang.headerSDLangToAA(header_src, conf_doc_make_aa)); static assert(!isTypeTuple!(header_make_and_meta_tuple)); static assert(header_make_and_meta_tuple.length==2); return header_make_and_meta_tuple; } }