diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2019-12-08 19:26:13 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2020-01-13 16:06:43 -0500 | 
| commit | 99de6c56f71bcc0588aa1d888a5278aba15ec237 (patch) | |
| tree | dc064ccaafafac75d40f2022829b10de9d14bec4 /src | |
| parent | src without pod.manifest, report on verbose (diff) | |
yaml doc headers, protect harvest
- protect harvest from missing doc header metadata
  - title & author required
- removed crude rgx yaml check
  (rely on yaml parser)
Diffstat (limited to 'src')
| -rw-r--r-- | src/doc_reform/io_in/read_config_files.d | 2 | ||||
| -rw-r--r-- | src/doc_reform/io_in/read_source_files.d | 13 | ||||
| -rw-r--r-- | src/doc_reform/meta/conf_make_meta_yaml.d | 34 | ||||
| -rw-r--r-- | src/doc_reform/meta/metadoc.d | 26 | ||||
| -rwxr-xr-x | src/doc_reform/spine.d | 45 | 
5 files changed, 65 insertions, 55 deletions
| diff --git a/src/doc_reform/io_in/read_config_files.d b/src/doc_reform/io_in/read_config_files.d index cb673e0..1f6faa3 100644 --- a/src/doc_reform/io_in/read_config_files.d +++ b/src/doc_reform/io_in/read_config_files.d @@ -127,7 +127,7 @@ static template readConfigDoc() {      string[] possible_config_path_locations = _conf_file_details.possible_config_path_locations.dr_document_make;      foreach(conf_fn; [_conf_file_details.config_filename_document]) {        foreach(pth; possible_config_path_locations) { -        auto conf_file = ((chainPath(pth.to!string, conf_fn)).asNormalizedPath).array; +        char[] conf_file = ((chainPath(pth.to!string, conf_fn)).asNormalizedPath).array;          conf_filename = conf_fn;          if (config_file_str.length > 0) {            break; diff --git a/src/doc_reform/io_in/read_source_files.d b/src/doc_reform/io_in/read_source_files.d index aeb2382..933868b 100644 --- a/src/doc_reform/io_in/read_source_files.d +++ b/src/doc_reform/io_in/read_source_files.d @@ -64,17 +64,13 @@ static template spineRawMarkupContent() {          images_list = tu[2].dup;        }        string header_type = ""; -      if (header_raw.match(rgx.yaml_config)) { -        header_type = "yaml"; -      }        t = tuple(          header_raw,          sourcefile_body_content, -        header_type,          insert_file_list,          images_list        ); -      static assert(t.length==5); +      static assert(t.length==4);        return t;      }    } @@ -82,7 +78,7 @@ static template spineRawMarkupContent() {      import std.file;      final private string readInMarkupSource(in char[] fn_src) {        enforce( -        exists(fn_src)!=0, +        exists(fn_src) != 0,          "file not found: «" ~          fn_src ~ "»"        ); @@ -138,14 +134,9 @@ static template spineRawMarkupContent() {        char[] header = hc[0];        char[] source_txt = hc[1];        auto source_line_arr = markupSourceLineArray(source_txt); -      string header_type = ""; -      if (header.match(rgx.yaml_config)) { -        header_type = "yaml"; -      }        auto t = tuple(          header,          source_line_arr, -        header_type,          file_insert_list,          images_list        ); diff --git a/src/doc_reform/meta/conf_make_meta_yaml.d b/src/doc_reform/meta/conf_make_meta_yaml.d index 8f1f885..5576b1c 100644 --- a/src/doc_reform/meta/conf_make_meta_yaml.d +++ b/src/doc_reform/meta/conf_make_meta_yaml.d @@ -794,14 +794,17 @@ static template configParseYAMLreturnSpineStruct() {      CCm     _make_and_meta_struct,      M       _manifested    ){ -    Node yaml_root; -    try { -      yaml_root = Loader.fromString(_document_struct.content).load(); -      _make_and_meta_struct -        = contentYAMLtoSpineStruct!()(_make_and_meta_struct, yaml_root, _manifested, _document_struct.filename); // struct from yaml -    } catch { -      import std.stdio; -      writeln("ERROR failed to read content, not parsed as yaml"); +    Node _yaml; +    if (_document_struct.content.length > 0) { +      try { +        _yaml = Loader.fromString(_document_struct.content).load(); +        _make_and_meta_struct +          = contentYAMLtoSpineStruct!()(_make_and_meta_struct, _yaml, _manifested, _document_struct.filename); // struct from yaml +      } catch { +        import std.stdio; +        writeln("ERROR failed to parse content as yaml: ", _document_struct.filename); +        // writeln(_document_struct.content); +      }      }      return _make_and_meta_struct;    } @@ -829,16 +832,17 @@ static template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() {      CCm     _make_and_meta_struct,      M       _manifested,    ) { -    Node _yaml_root; +    Node _yaml;      try { -      _yaml_root = Loader.fromString(header_src).load(); +      _yaml = Loader.fromString(header_src).load(); +      if (("title" in _yaml) && ("creator" in _yaml)) {} else { // need test for _yaml content (does not work) +        writeln("ERROR failed to read document header, yaml header does not contain essential information related to title and author"); +      } +      return contentYAMLtoSpineStruct!()(_make_and_meta_struct, _yaml, _manifested, "header");      } catch {        import std.stdio; -      writeln("ERROR failed to read document header, not parsed as yaml"); +      writeln("ERROR failed to read document header, header not parsed as yaml: ", _manifested.src.filename); +      return _make_and_meta_struct;      } -    // need test for _yaml_root content -    auto _header_and_make_and_meta_struct -      = contentYAMLtoSpineStruct!()(_make_and_meta_struct, _yaml_root, _manifested, "header"); -    return _header_and_make_and_meta_struct;    }  } diff --git a/src/doc_reform/meta/metadoc.d b/src/doc_reform/meta/metadoc.d index b81dfb2..e45139d 100644 --- a/src/doc_reform/meta/metadoc.d +++ b/src/doc_reform/meta/metadoc.d @@ -26,7 +26,7 @@ template spineAbstraction() {    mixin spineBiblio;    mixin spineRgxInitFlags;    mixin outputHub; -  enum headBody { header, body_content, header_type, insert_file_list, image_list } +  enum headBody { header, body_content, insert_file_list, image_list }    enum makeMeta { make, meta }    enum docAbst  { doc_abstract_obj, doc_has }    static auto rgx = Rgx(); @@ -39,10 +39,8 @@ template spineAbstraction() {    ){      { /+ document config/make file +/        auto _config_document_struct = readConfigDoc!()(_manifest, _env); -      if (_config_document_struct.filetype == "yaml") { -        import doc_reform.meta.conf_make_meta_yaml; -        _make_and_meta_struct = _config_document_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifest); -      } +      import doc_reform.meta.conf_make_meta_yaml; +      _make_and_meta_struct = _config_document_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifest);      }      /+ ↓ read file (filename with path) +/      /+ ↓ file tuple of header and content +/ @@ -55,7 +53,7 @@ template spineAbstraction() {      auto _header_body_insertfilelist_imagelist        = spineRawMarkupContent!()(_opt_action, _manifest.src.path_and_fn);      static assert(!isTypeTuple!(_header_body_insertfilelist_imagelist)); -    static assert(_header_body_insertfilelist_imagelist.length==5); +    static assert(_header_body_insertfilelist_imagelist.length==4);      if ((_opt_action.debug_do)      || (_opt_action.very_verbose)      ) { @@ -72,15 +70,13 @@ template spineAbstraction() {      ) {        writeln("step2 commence → (read document header (yaml) return struct)");      } -    if (_header_body_insertfilelist_imagelist[headBody.header_type] == "yaml") { -      import doc_reform.meta.conf_make_meta_yaml; -      _make_and_meta_struct = -        docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct!()( -          _header_body_insertfilelist_imagelist[headBody.header], -          _make_and_meta_struct, -          _manifest, -        ); -    } +    import doc_reform.meta.conf_make_meta_yaml; +    _make_and_meta_struct = +      docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct!()( +        _header_body_insertfilelist_imagelist[headBody.header], +        _make_and_meta_struct, +        _manifest, +      );      if ((_opt_action.debug_do)      || (_opt_action.very_verbose)      ) { diff --git a/src/doc_reform/spine.d b/src/doc_reform/spine.d index 96ac7d4..2ee081c 100755 --- a/src/doc_reform/spine.d +++ b/src/doc_reform/spine.d @@ -546,21 +546,17 @@ void main(string[] args) {          { /+ local site config +/            _conf_file_details = ConfigFilePaths!()(_manifested, _env, _opt_action.config_path_set);            auto _config_local_site_struct = readConfigSite!()(_conf_file_details); -          if (_config_local_site_struct.filetype == "yaml") { -            import doc_reform.meta.conf_make_meta_yaml; -            _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config -            break; -          } +          import doc_reform.meta.conf_make_meta_yaml; +          _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config +          break;          }        }      }    } else {      { /+ local site config +/        auto _config_local_site_struct = readConfigSite!()(_conf_file_details); -      if (_config_local_site_struct.filetype == "yaml") { -        import doc_reform.meta.conf_make_meta_yaml; -        _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config -      } +      import doc_reform.meta.conf_make_meta_yaml; +      _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config      }    }    foreach(arg; args[1..$]) { // refigure how args relate to _opt_action, need path from _opt_action or args early _manifested too late, work on (search for PathMatters and .harvest, @@ -674,7 +670,6 @@ void main(string[] args) {                      }                    }                  } -                  } catch (ErrnoException ex) {                }              } @@ -799,7 +794,19 @@ void main(string[] args) {              spineShowConfig!()(doc_matters);            }            if (doc_matters.opt.action.harvest) { -            hvst.harvests ~= spineMetaDocHarvest!()(doc_matters, hvst); +            auto _hvst = spineMetaDocHarvest!()(doc_matters, hvst); +            if ( +              _hvst.title.length > 0 +              && _hvst.author_surname_fn.length > 0 +            ) { +              hvst.harvests ~= _hvst; +            } else { +              if ((doc_matters.opt.action.debug_do) +              || (doc_matters.opt.action.very_verbose) +              ) { +                writeln("WARNING harvest: document header yaml does not contain information related to: title or author: ", _hvst.path_html_segtoc); +              } +            }            }            /+ ↓ debugs +/            if (doc_matters.opt.action.debug_do) { @@ -903,7 +910,19 @@ void main(string[] args) {              spineShowConfig!()(doc_matters);            }            if (doc_matters.opt.action.harvest) { -            hvst.harvests ~= spineMetaDocHarvest!()(doc_matters, hvst); +            auto _hvst = spineMetaDocHarvest!()(doc_matters, hvst); +            if ( +              _hvst.title.length > 0 +              && _hvst.author_surname_fn.length > 0 +            ) { +              hvst.harvests ~= _hvst; +            } else { +              if ((doc_matters.opt.action.debug_do) +              || (doc_matters.opt.action.very_verbose) +              ) { +                writeln("WARNING harvest: document header yaml does not contain information related to: title or author: ", _hvst.path_html_segtoc); +              } +            }            }            /+ ↓ debugs +/            if (doc_matters.opt.action.debug_do) { @@ -958,5 +977,5 @@ void main(string[] args) {          writeln("- ", out_pth.harvest("topics.html"));        }      } -  } +  } else { writeln("NO HARVESTS"); }  } | 
