aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sdp/ao_read_source_files.d
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sdp/ao_read_source_files.d')
-rw-r--r--lib/sdp/ao_read_source_files.d281
1 files changed, 281 insertions, 0 deletions
diff --git a/lib/sdp/ao_read_source_files.d b/lib/sdp/ao_read_source_files.d
new file mode 100644
index 0000000..a5ca084
--- /dev/null
+++ b/lib/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;
+ }
+ }
+}