aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2017-12-02 12:53:52 -0500
committerRalph Amissah <ralph@amissah.com>2019-04-10 15:14:14 -0400
commit5f238cfa5122fefbee7769e36fd07df060a85b4c (patch)
treec18731cfebd484ce92af84917ec3aad2c3a18c97 /src
parent0.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')
-rw-r--r--src/sdp/meta/metadoc.d28
-rw-r--r--src/sdp/meta/read_source_files.d118
-rwxr-xr-xsrc/sdp/sdp.d18
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) {