From 5f238cfa5122fefbee7769e36fd07df060a85b4c Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sat, 2 Dec 2017 12:53:52 -0500 Subject: 0.23.0 make image list available early for sisupod - have information needed for building source pods available early - don't do extra scan (for images) unless building of source pod requested --- src/sdp/meta/metadoc.d | 28 ++++++---- src/sdp/meta/read_source_files.d | 118 +++++++++++++++++++++++++++++---------- src/sdp/sdp.d | 18 +++--- 3 files changed, 113 insertions(+), 51 deletions(-) (limited to 'src/sdp') diff --git a/src/sdp/meta/metadoc.d b/src/sdp/meta/metadoc.d index 79f9849..e3947e5 100644 --- a/src/sdp/meta/metadoc.d +++ b/src/sdp/meta/metadoc.d @@ -27,7 +27,7 @@ template SiSUabstraction() { mixin SiSUbiblio; mixin SiSUrgxInitFlags; mixin outputHub; - enum headBody { header, body_content, insert_filelist } + enum headBody { header, body_content, insert_file_list, image_list } enum makeMeta { make, meta } enum docAbst { doc_abstraction, section_keys, segnames, segnames_0_4, images } static auto rgx = Rgx(); @@ -42,26 +42,30 @@ template SiSUabstraction() { /+ ↓ read file (filename with path) +/ /+ ↓ file tuple of header and content +/ debug(steps) { - writeln(__LINE__, ":", __FILE__, ": step1 commence → (get document header & body & insert files)"); + writeln(__LINE__, ":", __FILE__, + ": step1 commence → (get document header & body & insert file list & if needed image list)" + ); } - auto _header_body_inserts = - SiSUrawMarkupContent!()(_manifest.src_fn); - static assert(!isTypeTuple!(_header_body_inserts)); - static assert(_header_body_inserts.length==3); + auto _header_body_insertfilelist_imagelist = + SiSUrawMarkupContent!()(_opt_action, _manifest.src_fn); + static assert(!isTypeTuple!(_header_body_insertfilelist_imagelist)); + static assert(_header_body_insertfilelist_imagelist.length==4); 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]); + writeln(_header_body_insertfilelist_imagelist.length); + writeln(_header_body_insertfilelist_imagelist.length[headBody.body_content][0]); } /+ ↓ split header into make and meta +/ debug(steps) { - writeln(__LINE__, ":", __FILE__, ": step2 commence → (doc header: make & meta as struct)"); + 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 ... + docHeaderMakeAndMetaTupExtractAndConvertToStruct!()(conf_files_composite_make, _header_body_insertfilelist_imagelist[headBody.header]); // breakage ... debug(steps) { writeln(__LINE__, ":", __FILE__, ": step2 complete"); } @@ -70,7 +74,7 @@ template SiSUabstraction() { writeln(__LINE__, ":", __FILE__, ": step3 commence → (document abstraction (da); da keys; segnames; doc_matters)"); } auto da = SiSUdocAbstraction!()( - _header_body_inserts[headBody.body_content], + _header_body_insertfilelist_imagelist[headBody.body_content], _make_and_meta_struct, _opt_action, ); @@ -148,7 +152,7 @@ template SiSUabstraction() { return _manifest.pod_image_dirs; } auto file_insert_list() { - string[] _k = _header_body_inserts[headBody.insert_filelist]; + string[] _k = _header_body_insertfilelist_imagelist[headBody.insert_file_list]; return _k; } auto image_list() { diff --git a/src/sdp/meta/read_source_files.d b/src/sdp/meta/read_source_files.d index ccda78c..2fce0be 100644 --- a/src/sdp/meta/read_source_files.d +++ b/src/sdp/meta/read_source_files.d @@ -14,10 +14,19 @@ static template SiSUrawMarkupContent() { std.path; mixin SiSUrgxInit; static auto rgx = Rgx(); + string[] _images=[]; + auto _extract_images(S)(S content_block) { + string[] images_; + auto _content_block = content_block.to!string; + if (auto m = _content_block.matchAll(rgx.image)) { + images_ ~= m.captures[1].to!string; + } + return images_; + } auto rawsrc = RawMarkupContent(); - auto SiSUrawMarkupContent(Fn)(Fn fn_src) { + auto SiSUrawMarkupContent(O,Fn)(O _opt_action, Fn fn_src) { auto _0_header_1_body_content_2_insert_filelist_tuple = - rawsrc.sourceContentSplitIntoHeaderAndBody(rawsrc.sourceContent(fn_src), fn_src); + rawsrc.sourceContentSplitIntoHeaderAndBody(_opt_action, rawsrc.sourceContent(fn_src), fn_src); return _0_header_1_body_content_2_insert_filelist_tuple; } struct RawMarkupContent { @@ -27,9 +36,10 @@ static template SiSUrawMarkupContent() { raw.markupSourceReadIn(fn_src); return source_txt_str; } - final auto sourceContentSplitIntoHeaderAndBody(in string source_txt_str, in string fn_src="") { + final auto sourceContentSplitIntoHeaderAndBody(O)(O _opt_action, in string source_txt_str, in string fn_src="") { auto raw = MarkupRawUnit(); string[] insert_file_list; + string[] images_list; auto t = raw.markupSourceHeaderContentRawLineTupleArray(source_txt_str); auto header_raw = t[0]; @@ -37,17 +47,25 @@ static template SiSUrawMarkupContent() { if (fn_src.match(rgx.src_fn_master)) { // filename with path needed if master file (.ssm) not otherwise auto ins = Inserts(); auto tu = - ins.scan_master_src_for_insert_files_and_import_content(sourcefile_body_content, fn_src); + ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src); static assert(!isTypeTuple!(tu)); sourcefile_body_content = tu[0]; insert_file_list = tu[1].dup; + images_list = tu[2].dup; + } else if (_opt_action.source || _opt_action.sisupod) { + auto ins = Inserts(); + auto tu = + ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src); + static assert(!isTypeTuple!(tu)); + images_list = tu[2].dup; } t = tuple( header_raw, sourcefile_body_content, - insert_file_list + insert_file_list, + images_list ); - static assert(t.length==3); + static assert(t.length==4); return t; } } @@ -106,6 +124,7 @@ static template SiSUrawMarkupContent() { } auto markupSourceHeaderContentRawLineTupleArray(in string source_txt_str) { string[] file_insert_list = []; + string[] images_list = []; auto hc = header0Content1(source_txt_str); auto header = hc[0]; char[] source_txt = hc[1]; @@ -113,7 +132,8 @@ static template SiSUrawMarkupContent() { auto t = tuple( header, source_line_arr, - file_insert_list + file_insert_list, + images_list ); return t; } @@ -133,9 +153,10 @@ static template SiSUrawMarkupContent() { } struct Inserts { import sdp.meta.defaults; - auto scan_subdoc_source( + auto scan_subdoc_source(O)( + O _opt_action, char[][] markup_sourcefile_insert_content, - string fn_src + string fn_src ) { mixin SiSUrgxInitFlags; char[][] contents_insert; @@ -198,33 +219,51 @@ static template SiSUrawMarkupContent() { markup_sourcesubfile_insert_content.length ); } + if (_opt_action.source || _opt_action.sisupod) { + _images ~= _extract_images(markup_sourcesubfile_insert_content); + } auto ins = Inserts(); /+ - 1. load file, - 2. read lines; - 3. scan lines, - 4. if filename insert, and insert filename - 5. repeat 1 - 6. else - 7. add line to new array; + - 1. load file + - 2. read lines + - 3. scan lines + - a. if filename insert, and insert filename + - repeat 1 + - b. else + - add line to new array; + - build image list, search for any image files to add to image list +/ } else { type1["header_make"] = 0; type1["header_meta"] = 0; - contents_insert ~= line; + contents_insert ~= line; // images to extract for image list? + if (_opt_action.source || _opt_action.sisupod) { + auto _image_linelist = _extract_images(line); + if (_image_linelist.length > 0) { + _images ~= _image_linelist; + } + } } } // end src subdoc (inserts) loop - return contents_insert; + auto t = tuple( + contents_insert, + _images + ); + return t; } - auto scan_master_src_for_insert_files_and_import_content( + auto scan_master_src_for_insert_files_and_import_content(O)( + O _opt_action, char[][] sourcefile_body_content, - string fn_src + string fn_src ) { + import std.algorithm; mixin SiSUrgxInitFlags; char[][] contents; auto type = flags_type_init; auto fn_pth_full = fn_src.match(rgx.src_pth); auto markup_src_file_path = fn_pth_full.captures[1]; + char[][] contents_insert; + string[] _images =[]; string[] insert_file_list =[]; foreach (line; sourcefile_body_content) { if (type["curly_code"] == 1) { @@ -266,31 +305,50 @@ static template SiSUrawMarkupContent() { ); } auto ins = Inserts(); - auto contents_insert = ins.scan_subdoc_source( + auto contents_insert_tu = ins.scan_subdoc_source( + _opt_action, markup_sourcefile_insert_content, to!string(fn_src_insert) ); - contents ~= contents_insert; + contents ~= contents_insert_tu[0]; // images to extract for image list? + if (_opt_action.source || _opt_action.sisupod) { + auto _image_linelist = _extract_images(contents_insert_tu[0]); + if (_image_linelist.length > 0) { + _images ~= _image_linelist; + } + } /+ - 1. load file, - 2. read lines; - 3. scan lines, - 4. if filename insert, and insert filename - 5. repeat 1 - 6. else - 7. add line to new array; + - 1. load file + - 2. read lines + - 3. scan lines + - a. if filename insert, and insert filename + - repeat 1 + - b. else + - add line to new array; + - build image list, search for any image files to add to image list +/ } else { contents ~= line; + if (_opt_action.source || _opt_action.sisupod) { + auto _image_linelist = _extract_images(line); + if (_image_linelist.length > 0) { + _images ~= _image_linelist; + } + } } } // end src doc loop + string[] images = []; + foreach(i; uniq(_images.sort())) { + images ~= i; + } debug(insert_file) { writeln(__LINE__); writeln(contents.length); } auto t = tuple( contents, - insert_file_list + insert_file_list, + images ); return t; } diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d index 30f8d03..f4d738f 100755 --- a/src/sdp/sdp.d +++ b/src/sdp/sdp.d @@ -302,19 +302,19 @@ void main(string[] args) { "pwd" : environment["PWD"], "home" : environment["HOME"], ]; - auto _manifest = PodManifest!()(); - auto _manifest_plus = PodMatters!()(_opt_action, _env); - auto _manifests = [ _manifest_plus ]; + auto _manifest_start = PodManifest!()(); + auto _manifest_matter = PodMatters!()(_opt_action, _env); + auto _manifests = [ _manifest_matter ]; foreach(arg; args[1..$]) { - _manifest = PodManifest!()(arg); + _manifest_start = PodManifest!()(arg); if (arg.match(rgx.flag_action)) { flag_action ~= " " ~ arg; // flags not taken by getopt } else if (arg.match(rgx.src_pth)) { _manifests ~= PodMatters!()(_opt_action, _env, arg, arg); // gather input markup source file names for processing - } else if (_manifest.pod_manifest_file_with_path) { + } else if (_manifest_start.pod_manifest_file_with_path) { string contents_location_raw_; string contents_location_; - string sisudoc_txt_ = _manifest.pod_manifest_file_with_path; + string sisudoc_txt_ = _manifest_start.pod_manifest_file_with_path; enforce( exists(sisudoc_txt_)!=0, "file not found: «" ~ @@ -353,8 +353,8 @@ void main(string[] args) { || (contents_location_pth_).match(lang_rgx_) ) { auto _fns = (((tmp_dir_).chainPath(contents_location_pth_)).array).to!(string); - _manifest_plus = PodMatters!()(_opt_action, _env, arg, _fns, contents_locations_arr); - _manifests ~= _manifest_plus; // TODO how to capture? + _manifest_matter = PodMatters!()(_opt_action, _env, arg, _fns, contents_locations_arr); + _manifests ~= _manifest_matter; // TODO how to capture? } } } else if (arg.match(rgx.src_pth_zip)) { @@ -367,7 +367,7 @@ void main(string[] args) { if (!(_opt_action.skip_output)) { outputHubOp!()(_opt_action); } - if (_manifests.length > 1) { // _manifests[0] is dummy element used in initialization to be removed + if (_manifests.length > 1) { // _manifests[0] initialized dummy element foreach(manifest; _manifests[1..$]) { if (!empty(manifest.src_fn)) { scope(success) { -- cgit v1.2.3