diff options
| author | Ralph Amissah <ralph@amissah.com> | 2017-12-02 12:53:52 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2019-04-10 15:14:14 -0400 | 
| commit | 5f238cfa5122fefbee7769e36fd07df060a85b4c (patch) | |
| tree | c18731cfebd484ce92af84917ec3aad2c3a18c97 /src/sdp | |
| parent | 0.22.0 document matters & pod matters structs (diff) | |
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
Diffstat (limited to 'src/sdp')
| -rw-r--r-- | src/sdp/meta/metadoc.d | 28 | ||||
| -rw-r--r-- | src/sdp/meta/read_source_files.d | 118 | ||||
| -rwxr-xr-x | src/sdp/sdp.d | 18 | 
3 files changed, 113 insertions, 51 deletions
| 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) { | 
