diff options
Diffstat (limited to 'org/in_source_files.org')
-rw-r--r-- | org/in_source_files.org | 56 |
1 files changed, 39 insertions, 17 deletions
diff --git a/org/in_source_files.org b/org/in_source_files.org index 90143f4..6275ed4 100644 --- a/org/in_source_files.org +++ b/org/in_source_files.org @@ -298,6 +298,7 @@ module sisudoc.io_in.read_source_files; @safe: template spineRawMarkupContent() { import + std.digest.sha, std.file, std.path; import @@ -309,6 +310,14 @@ template spineRawMarkupContent() { static auto rgx = RgxI(); mixin spineRgxFiles; static auto rgx_files = RgxFiles(); + struct ST_doc_parts { + char[] header_raw; + char[][] sourcefile_body_content; + string[] insert_file_list; + string[] images_list; + ubyte[32] header_raw_digest; + ubyte[32] src_txt_digest; + } string[] _images=[]; string[] _extract_images(S)(S content_block) { string[] images_; @@ -328,7 +337,9 @@ template spineRawMarkupContent() { char[], "header", char[][], "src_txt", string[], "insert_files", - string[], "images" + string[], "images", + ubyte[32], "header_digest", + ubyte[32], "src_txt_digest" ); auto spineRawMarkupContent(O,Fn)(O _opt_action, Fn fn_src) { auto _0_header_1_body_content_2_insert_filelist_tuple @@ -342,43 +353,50 @@ template spineRawMarkupContent() { = raw.markupSourceReadIn(fn_src); return source_txt_str; } - final auto sourceContentSplitIntoHeaderAndBody(O)( + final ST_doc_parts sourceContentSplitIntoHeaderAndBody(O)( O _opt_action, in string source_txt_str, in string fn_src="" ) { auto raw = MarkupRawUnit(); - string[] insert_file_list; - string[] images_list; + string[] insert_file_list_get; + string[] images_list_get; HeaderContentInsertsImages t = raw.markupSourceHeaderContentRawLineTupleArray(source_txt_str); char[] header_raw = t.header; + ubyte[32] header_raw_digest = t.header.sha256Of; char[][] sourcefile_body_content = t.src_txt; if (fn_src.match(rgx_files.src_fn_master)) { // filename with path needed if master file (.ssm) not otherwise auto ins = Inserts(); ContentsInsertsImages tu = ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src); sourcefile_body_content = tu.contents; - insert_file_list = tu.insert_files.dup; - images_list = tu.images.dup; + insert_file_list_get = tu.insert_files.dup; + images_list_get = tu.images.dup; } else if (_opt_action.source || _opt_action.pod) { auto ins = Inserts(); ContentsInsertsImages tu = ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src); - images_list = tu.images.dup; - } + images_list_get = tu.images.dup; + } // image_list, if path could take sha256 digests already here? + ubyte[32] src_txt_digest = sourcefile_body_content.sha256Of; string header_type = ""; - t = tuple( - header_raw, - sourcefile_body_content, - insert_file_list, - images_list - ); - return t; + ST_doc_parts ret; + { + ret.header_raw = t.header; + ret.sourcefile_body_content = sourcefile_body_content; + ret.insert_file_list = insert_file_list_get; + ret.images_list = images_list_get; + ret.header_raw_digest = t.header.sha256Of; + ret.src_txt_digest = sourcefile_body_content.sha256Of; + } + return ret; } } struct MarkupRawUnit { - import std.file; + import + std.digest.sha, + std.file; <<meta_markup_source_raw_read_file_source_string>> <<meta_markup_source_raw_doc_header_and_content_split>> <<meta_markup_source_raw_source_line_array>> @@ -517,11 +535,15 @@ HeaderContentInsertsImages markupSourceHeaderContentRawLineTupleArray(in string char[] header = hc[0]; char[] source_txt = hc[1]; char[][] source_line_arr = markupSourceLineArray(source_txt); + ubyte[32] header_digest; + ubyte[32] src_txt_digest; HeaderContentInsertsImages t = tuple( header, source_line_arr, file_insert_list, - images_list + images_list, + header_digest, + src_txt_digest ); return t; } |