diff options
Diffstat (limited to 'src/sdp/ao_read_source_files.d')
-rw-r--r-- | src/sdp/ao_read_source_files.d | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/src/sdp/ao_read_source_files.d b/src/sdp/ao_read_source_files.d new file mode 100644 index 0000000..a5ca084 --- /dev/null +++ b/src/sdp/ao_read_source_files.d @@ -0,0 +1,281 @@ +/+ + ao_read_source_files.d + - open markup files + - if master file scan for addional files to import/insert ++/ +// module ao_read_source_files; +template SiSUmarkupRaw() { + private import + std.exception, + std.regex, + std.stdio, + std.utf, + std.conv : to; + private import + ao_rgx; // ao_defaults.d + mixin RgxInit; + auto rgx = Rgx(); + struct MarkupRaw { + final char[][] sourceContent(in string fn_src) { + auto raw = MarkupRawUnit(); + auto sourcefile_content = + raw.markupSourceContentRawLineArray(fn_src, rgx.src_pth); + if (match(fn_src, rgx.src_fn_master)) { + auto ins = Inserts(); + sourcefile_content = + ins.scan_master_doc_source_for_insert_filenames(sourcefile_content, fn_src); + // auto ins = SiSUdocInserts.Inserts(); + } + return sourcefile_content; + } + } + private + struct MarkupRawUnit { + private import std.file; + final private string readInMarkupSource(in string fn_src) { + enforce( + exists(fn_src)!=0, + "file not found" + ); + string source_txt_str; + try { + if (exists(fn_src)) { + source_txt_str = readText(fn_src); + } + } + catch (ErrnoException ex) { + //// Handle errors + // switch(ex.errno) { + // case EPERM: + // case EACCES: + // // Permission denied + // break; + // case ENOENT: + // // File does not exist + // break; + // default: + // // Handle other errors + // break; + // } + } + catch (UTFException ex) { + // Handle validation errors + } + catch (FileException ex) { + // Handle errors + } + std.utf.validate(source_txt_str); + return source_txt_str; + } + final private char[][] markupSourceLineArray(in string src_text) { + char[][] source_line_arr = + split(cast(char[]) src_text, rgx.line_delimiter); + return source_line_arr; + } + final char[][] markupSourceContentRawLineArray(in string fn_src, Regex!(char) rgx_file ) { + enforce( + match(fn_src, rgx_file), + "not a sisu markup filename" + ); + auto source_txt_str = readInMarkupSource(fn_src); + auto source_line_arr = markupSourceLineArray(source_txt_str); + return source_line_arr; + } + } + struct Inserts { + private import ao_defaults; // ao_defaults.d + private import ao_ansi_colors; // ao_ansi_colors.d + auto scan_subdoc_source( + char[][] markup_sourcefile_insert_content, + string fn_src + ) { + mixin SiSUrgxInitFlags; + char[][] contents_insert; + auto type1 = flags_type_init; + mixin ScreenTxtColors; + int tell_l(string color, in char[] line) { + writeln(scr_txt_marker[color], line); + return 0; + } + auto fn_pth_full = match(fn_src, rgx.src_pth); + auto markup_src_file_path = fn_pth_full.captures[1]; + foreach (line; markup_sourcefile_insert_content) { + if (type1["curly_code"] == 1) { + type1["header_make"] = 0; + type1["header_metadata"] = 0; + if (auto m = match(line, rgx.block_curly_code_close)) { + type1["curly_code"] = 0; + } + contents_insert ~= line; + } else if (auto m = match(line, rgx.block_curly_code_open)) { + type1["curly_code"] = 1; + type1["header_make"] = 0; + type1["header_metadata"] = 0; + contents_insert ~= line; + } else if (type1["tic_code"] == 1) { + type1["header_make"] = 0; + type1["header_metadata"] = 0; + if (auto m = match(line, rgx.block_tic_close)) { + type1["tic_code"] = 0; + } + contents_insert ~= line; + } else if (auto m = match(line, rgx.block_tic_code_open)) { + type1["tic_code"] = 1; + type1["header_make"] = 0; + type1["header_metadata"] = 0; + contents_insert ~= line; + } else if ( + (type1["header_make"] == 1) + && match(line, rgx.header_sub) + ) { + type1["header_make"] = 1; + type1["header_metadata"] = 0; + // cont_dynamic_array ~= "% " ~ line; + } else if ( + (type1["header_metadata"] == 1) + && match(line, rgx.header_sub) + ) { + type1["header_metadata"] = 1; + type1["header_make"] = 0; + // cont_dynamic_array ~= "% " ~ line; + } else if (auto m = match(line, rgx.insert_src_fn_ssi_or_sst)) { + type1["header_make"] = 0; + type1["header_metadata"] = 0; + auto insert_fn = m.captures[2]; + auto insert_sub_pth = m.captures[1]; + auto fn_src_insert = + to!string(markup_src_file_path ~ insert_sub_pth ~ insert_fn); + auto raw = MarkupRawUnit(); + auto markup_sourcesubfile_insert_content = + raw.markupSourceContentRawLineArray(fn_src_insert, rgx.src_fn_find_inserts); + debug(insert) { // insert file + tell_l("red", line); + tell_l("red", fn_src_insert); + tell_l("fuchsia", "ERROR"); + writeln( + " length contents insert array: ", + markup_sourcesubfile_insert_content.length + ); + } + 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; + +/ + } else { + type1["header_make"] = 0; + type1["header_metadata"] = 0; + contents_insert ~= line; + } + } // end src subdoc (inserts) loop + return contents_insert; + } + auto scan_master_doc_source_for_insert_filenames( + char[][] sourcefile_content, + string fn_src + ) { + mixin SiSUrgxInitFlags; + char[][] contents; + auto type = flags_type_init; + mixin ScreenTxtColors; + int tell_l(string color, in char[] line) { + writeln(scr_txt_marker[color], line); + return 0; + } + auto fn_pth_full = match(fn_src, rgx.src_pth); + auto markup_src_file_path = fn_pth_full.captures[1]; + foreach (line; sourcefile_content) { + if (type["curly_code"] == 1) { + type["header_make"] = 0; + type["header_metadata"] = 0; + if (auto m = match(line, rgx.block_curly_code_close)) { + type["curly_code"] = 0; + } + contents ~= line; + } else if (auto m = match(line, rgx.block_curly_code_open)) { + type["curly_code"] = 1; + type["header_make"] = 0; + type["header_metadata"] = 0; + contents ~= line; + } else if (type["tic_code"] == 1) { + type["header_make"] = 0; + type["header_metadata"] = 0; + if (auto m = match(line, rgx.block_tic_close)) { + type["tic_code"] = 0; + } + contents ~= line; + } else if (auto m = match(line, rgx.block_tic_code_open)) { + type["tic_code"] = 1; + type["header_make"] = 0; + type["header_metadata"] = 0; + contents ~= line; + } else if ( + (type["header_make"] == 1) + && match(line, rgx.header_sub) + ) { + contents ~= line; + } else if ( + (type["header_metadata"] == 1) + && match(line, rgx.header_sub) + ) { + contents ~= line; + } else if (auto m = match(line, rgx.header_make)) { + type["header_make"] = 1; + type["header_metadata"] = 0; + contents ~= line; + } else if (auto m = match(line, rgx.header_metadata)) { + type["header_make"] = 0; + type["header_metadata"] = 1; + contents ~= line; + } else if (auto m = match(line, rgx.insert_src_fn_ssi_or_sst)) { + type["header_make"] = 0; + type["header_metadata"] = 0; + auto insert_fn = m.captures[2]; + auto insert_sub_pth = m.captures[1]; + auto fn_src_insert = + to!string(markup_src_file_path ~ insert_sub_pth ~ insert_fn); + auto raw = MarkupRawUnit(); + auto markup_sourcefile_insert_content = + raw.markupSourceContentRawLineArray(fn_src_insert, rgx.src_fn_find_inserts); + debug(insert) { // insert file + tell_l("red", line); + tell_l("red", fn_src_insert); + writeln( + " length contents insert array: ", + markup_sourcefile_insert_content.length + ); + } + auto ins = Inserts(); + auto contents_insert = ins.scan_subdoc_source( + markup_sourcefile_insert_content, + to!string(fn_src_insert) + ); + contents ~= contents_insert; + /+ + 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; + +/ + } else { + type["header_make"] = 0; + type["header_metadata"] = 0; + contents ~= line; + } + } // end src doc loop + debug(insert) { // insert file + writeln(__LINE__); + writeln(contents.length); + } + return contents; + } + } +} |