aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sdp/meta/read_source_files.d
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdp/meta/read_source_files.d')
-rw-r--r--src/sdp/meta/read_source_files.d118
1 files changed, 88 insertions, 30 deletions
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;
}