diff options
| -rw-r--r-- | org/default_paths.org | 9 | ||||
| -rw-r--r-- | org/doc_reform.org | 13 | ||||
| -rw-r--r-- | org/meta_abstraction.org | 17 | ||||
| -rw-r--r-- | org/meta_conf_make_meta.org | 50 | ||||
| -rw-r--r-- | org/output_harvest_metadata.org | 68 | ||||
| -rwxr-xr-x | src/doc_reform/doc_reform.d | 13 | ||||
| -rw-r--r-- | src/doc_reform/meta/conf_make_meta_json.d | 15 | ||||
| -rw-r--r-- | src/doc_reform/meta/conf_make_meta_yaml.d | 35 | ||||
| -rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 17 | ||||
| -rw-r--r-- | src/doc_reform/meta/metadoc_harvests_authors.d | 36 | ||||
| -rw-r--r-- | src/doc_reform/meta/metadoc_harvests_topics.d | 64 | ||||
| -rw-r--r-- | src/doc_reform/source/paths_source.d | 9 | ||||
| -rw-r--r-- | subprojects/archived.wrap | 4 | ||||
| -rw-r--r-- | subprojects/toml-d.wrap | 4 | 
14 files changed, 249 insertions, 105 deletions
| diff --git a/org/default_paths.org b/org/default_paths.org index e50881f..459d8b9 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -75,6 +75,9 @@ template PodManifest() {          }          return _manifest_path;        } +      string pods_collection_root_path() { +        return (pod_manifest_path.length > 0) ? ((chainPath(pod_manifest_path, "..")).asNormalizedPath).array.to!string : ""; +      }        string pod_manifest_file_with_path() {          string _k;          if  (exists(pod_manifest_path.chainPath(pod_manifest_filename).array)!=0) { @@ -141,7 +144,6 @@ template PathMatters() {          return Env_();        }        auto opt() { -        auto _opt_actions = _opt_actions;          struct Opt_ {            auto action() {              return _opt_actions; @@ -157,9 +159,8 @@ template PathMatters() {            bool src_is_pod() {              return (_manifested.pod_manifest_path.length > 0) ? true : false;            } -          auto collection_root() { -            auto _collection_root = ((chainPath(_manifested.pod_manifest_path, "..")).asNormalizedPath).array; -            return _collection_root; +          string collection_root() { +            return _manifested.pods_collection_root_path;            }            string manifest_filename() {              return _manifested.pod_manifest_filename; diff --git a/org/doc_reform.org b/org/doc_reform.org index f367dea..5b44538 100644 --- a/org/doc_reform.org +++ b/org/doc_reform.org @@ -377,8 +377,8 @@ bool[string] opts = [    "workon"             : false,  ];  string[string] settings = [ -  "output-dir"         : "", -  "site-config-dir"    : "", +  "config"             : "", +  "output"             : "",    "lang"               : "all",    "sqlite-filename"    : "documents",  ]; @@ -439,8 +439,8 @@ auto helpInfo = getopt(args,    "theme-dark",         "--theme-dark alternative dark theme",                                      &opts["theme-dark"],    "theme-light",        "--theme-light default light theme",                                        &opts["theme-light"],    "workon",             "--workon (reserved for some matters under development & testing)",         &opts["workon"], -  "output-dir",         "--output-dir=[dir path]",                                                  &settings["output-dir"], -  "site-config-dir",    "--site-config-dir=[dir path]",                                             &settings["site-config-dir"], +  "config",             "--config=/path/to/config/file/including/filename",                         &settings["config"], +  "output",             "--output=/path/to/output/dir specify where to place output",               &settings["output"],    "sqlite-filename",    "--sqlite-filename=[filename].sqlite",                                      &settings["sqlite-filename"],    "lang",               "--lang=[lang code e.g. =en or =en,es]",                                    &settings["lang"],  ); @@ -462,6 +462,9 @@ struct OptActions {    bool concordance() {      return opts["concordance"];    } +  auto config_path_set() { +    return settings["config"]; +  }    bool css_theme_default() {      bool _is_light;      if (opts["light"] || opts["theme-light"]) { @@ -612,7 +615,7 @@ struct OptActions {      return settings["lang"].split(",");    }    auto output_dir_set() { -    return settings["output-dir"]; +    return settings["output"];    }    auto sqlite_filename() {      return settings["sqlite-filename"]; diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index bff74a4..5da3795 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -4862,11 +4862,18 @@ string[string] flow_heading_matched_(CMM)(      assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels      switch (an_object["lev"]) {      case "A":                                // Title set -      an_object[an_object_key]=(an_object[an_object_key]) -        .replaceFirst(rgx.variable_doc_title, -          (conf_make_meta.meta.title_full ~ ",")) -        .replaceFirst(rgx.variable_doc_author, -          conf_make_meta.meta.creator_author); +      if (an_object[an_object_key].match(rgx.variable_doc_title) +      && an_object[an_object_key].match(rgx.variable_doc_author)) { +        an_object[an_object_key] = an_object[an_object_key] +          .replaceFirst(rgx.variable_doc_title, +            (conf_make_meta.meta.title_full ~ ", ")) +          .replaceFirst(rgx.variable_doc_author, +            conf_make_meta.meta.creator_author); +      } else if (an_object[an_object_key].match(rgx.variable_doc_title)) { +        an_object[an_object_key] = an_object[an_object_key] +          .replaceFirst(rgx.variable_doc_title, +            conf_make_meta.meta.title_full); +      }        collapsed_lev["h0"] = 0;        an_object["lev_collapsed_number"]          = collapsed_lev["h0"].to!string; diff --git a/org/meta_conf_make_meta.org b/org/meta_conf_make_meta.org index b6f1c7d..07befe1 100644 --- a/org/meta_conf_make_meta.org +++ b/org/meta_conf_make_meta.org @@ -816,16 +816,21 @@ if (_struct_composite.meta.creator_author.empty) {      = _struct_composite.meta.creator_author.split(rgx.arr_delimiter);    auto _lastname = appender!(char[])();    foreach (author_raw; authors_raw_arr) { -    author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -    authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); -    authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); -    authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -    authors_hash_arr["as_input"] ~= author_raw;      if (auto m = author_raw.match(rgx.raw_author_munge)) { +      author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); +      authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); +      authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); +      authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1");        (m.captures[1]).map!toUpper.copy(_lastname);        authors_hash_arr["last_first"] ~= _lastname.data.to!string ~ ", " ~ m.captures[2];        _lastname = appender!(char[])(); +    } else { +      author_arr                     ~= author_raw; +      authors_hash_arr["last"]       ~= author_raw; +      authors_hash_arr["full"]       ~= author_raw; +      authors_hash_arr["last_first"] ~= author_raw;      } +    authors_hash_arr["as_input"] ~= author_raw;    }    _struct_composite.meta.creator_author_arr = author_arr;    _struct_composite.meta.creator_author     = author_arr.join(", ").chomp.chomp; @@ -1555,16 +1560,21 @@ if (_struct_composite.meta.creator_author.empty) {      = _struct_composite.meta.creator_author.split(rgx.arr_delimiter);    auto _lastname = appender!(char[])();    foreach (author_raw; authors_raw_arr) { -    author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -    authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); -    authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); -    authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -    authors_hash_arr["as_input"] ~= author_raw;      if (auto m = author_raw.match(rgx.raw_author_munge)) { +      author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); +      authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); +      authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); +      authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1");        (m.captures[1]).map!toUpper.copy(_lastname);        authors_hash_arr["last_first"] ~= _lastname.data.to!string ~ ", " ~ m.captures[2];        _lastname = appender!(char[])(); +    } { +      author_arr                     ~= author_raw; +      authors_hash_arr["last"]       ~= author_raw; +      authors_hash_arr["full"]       ~= author_raw; +      authors_hash_arr["last_first"] ~= author_raw;      } +    authors_hash_arr["as_input"] ~= author_raw;    }    _struct_composite.meta.creator_author_arr = author_arr;    _struct_composite.meta.creator_author     = author_arr.join(", ").chomp.chomp; @@ -1810,9 +1820,15 @@ static template configParseYAMLreturnDocReformStruct() {      CCm     _make_and_meta_struct,      M       _manifested    ){ -    Node yaml_root = Loader.fromString(_document_struct.content).load(); -    _make_and_meta_struct -      = contentYAMLtoDocReformStruct!()(_make_and_meta_struct, yaml_root, _manifested, _document_struct.filename); // struct from yaml +    Node yaml_root; +    try { +      yaml_root = Loader.fromString(_document_struct.content).load(); +      _make_and_meta_struct +        = contentYAMLtoDocReformStruct!()(_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"); +    }      return _make_and_meta_struct;    }  } @@ -1846,8 +1862,12 @@ static template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() {    ) {      Node _yaml_root;      if (header_src.match(rgx.yaml_header_meta_title)) { -      import dyaml; -      _yaml_root = Loader.fromString(header_src).load(); +      try { +        _yaml_root = Loader.fromString(header_src).load(); +      } catch { +        import std.stdio; +        writeln("ERROR failed to read document header, not parsed as yaml"); +      }      }      auto _header_and_make_and_meta_struct        = contentYAMLtoDocReformStruct!()(_make_and_meta_struct, _yaml_root, _manifested, "header"); diff --git a/org/output_harvest_metadata.org b/org/output_harvest_metadata.org index a25ab61..a7ce40f 100644 --- a/org/output_harvest_metadata.org +++ b/org/output_harvest_metadata.org @@ -252,8 +252,8 @@ foreach(k0;      _prev_k = k0.toUpper.to!(char[])[0];    }    if (k0 != "_a") { -    topics ~= format(q"┃<p class="lev0"><a name="%s">%s</a></p>┃", -      k0, k0,) ~ "\n"; +    topics ~= format(q"┃<p class="lev0"><a name="%s" class="lev0">%s</a></p>┃", +      k0.translate([' ' : "_"]), k0,) ~ "\n";      if (_opt_action.very_verbose) {        writeln("", k0);      } @@ -265,13 +265,13 @@ foreach(k0;          _auth = [];          if (t_a_.author_arr.length < 2) {            _auth = format(q"┃ <a href="authors.html#%s">%s</a>┃", -            t_a_.author_surname, +            t_a_.author_surname.translate([' ' : "_"]),              t_a_.author,            );          } else {            foreach (a; t_a_.author_arr) {              _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -              t_a_.author_surname, +              t_a_.author_surname.translate([' ' : "_"]),                a,              );            } @@ -291,8 +291,8 @@ foreach(k0;        .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)      ) {        if (k1 != "_a") { -        topics ~= format(q"┃<p class="lev1"><a name="%s">%s</a></p>┃", -          k1, k1,) ~ "\n"; +        topics ~= format(q"┃<p class="lev1"><a name="%s" class="lev1">%s</a></p>┃", +          k1.translate([' ' : "_"]), k1,) ~ "\n";          if (_opt_action.very_verbose) {            writeln("  ", k1);          } @@ -304,13 +304,13 @@ foreach(k0;              _auth = [];              if (t_a_.author_arr.length < 2) {                _auth = format(q"┃ <a href="authors.html#%s">%s</a>┃", -                t_a_.author_surname, +                t_a_.author_surname.translate([' ' : "_"]),                  t_a_.author,                );              } else {                foreach (a; t_a_.author_arr) {                  _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -                  t_a_.author_surname, +                  t_a_.author_surname.translate([' ' : "_"]),                    a,                  );                } @@ -331,8 +331,8 @@ foreach(k0;          .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)        ) {          if (k2 != "_a") { -          topics ~= format(q"┃<p class="lev2"><a name="%s">%s</a></p>┃", -            k2, k2,) ~ "\n"; +          topics ~= format(q"┃<p class="lev2"><a name="%s" class="lev2">%s</a></p>┃", +            k2.translate([' ' : "_"]), k2,) ~ "\n";            if (_opt_action.very_verbose) {              writeln("    ", k2);            } @@ -344,13 +344,13 @@ foreach(k0;                _auth = [];                if (t_a_.author_arr.length < 2) {                  _auth = format(q"┃ <a href="authors.html#%s">%s</a>┃", -                  t_a_.author_surname, +                  t_a_.author_surname.translate([' ' : "_"]),                    t_a_.author,                  );                } else {                  foreach (a; t_a_.author_arr) {                    _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -                    t_a_.author_surname, +                    t_a_.author_surname.translate([' ' : "_"]),                      a,                    );                  } @@ -371,8 +371,8 @@ foreach(k0;            .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)          ) {            if (k3 != "_a") { -            topics ~= format(q"┃<p class="lev3"><a name="%s">%s</a></p>┃", -              k3, k3,) ~ "\n"; +            topics ~= format(q"┃<p class="lev3"><a name="%s" class="lev3">%s</a></p>┃", +              k3.translate([' ' : "_"]), k3,) ~ "\n";              if (_opt_action.very_verbose) {                writeln("      ", k3);              } @@ -384,13 +384,13 @@ foreach(k0;                  _auth = [];                  if (t_a_.author_arr.length < 2) {                    _auth = format(q"┃<a href="authors.html#%s">%s</a>┃", -                    t_a_.author_surname, +                    t_a_.author_surname.translate([' ' : "_"]),                      t_a_.author,                    );                  } else {                    foreach (a; t_a_.author_arr) {                      _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -                      t_a_.author_surname, +                      t_a_.author_surname.translate([' ' : "_"]),                        a,                      );                    } @@ -521,8 +521,8 @@ template DocReformMetaDocHarvestsAuthors() {        ) {          if (doc_harvest.author_surname_fn != _prev_auth) {            _au[doc_harvest.author_surname_fn] -          = format(q"┃<p class="author"><a name="%s">%s</a></p> <p class="publication">%s "<a href="%s">%s</a>" [%s]</p>┃", -            doc_harvest.author_surname, +          = format(q"┃<p class="author"><a name="%s" class="lev0">%s</a></p> <p class="publication">%s "<a href="%s">%s</a>" [%s]</p>┃", +            doc_harvest.author_surname.translate([' ' : "_"]),              doc_harvest.author_surname_fn,              (doc_harvest.date_published.length > 0)                ? doc_harvest.date_published : "", @@ -616,6 +616,22 @@ string theme_dark_0 = format(q"┃      color                    : #888888;      text-decoration          : underline;    } +  a.lev0:hover { +    color                    : #FFFFFF; +    background-color         : #000000; +  } +  a.lev1:hover { +    color                    : #FFFFFF; +    background               : #333333; +  } +  a.lev2:hover { +    color                    : #FFFFFF; +    background               : #555555; +  } +  a.lev3:hover { +    color                    : #FFFFFF; +    background               : #777777; +  }  ┃");  string theme_light_0 = format(q"┃    body { @@ -642,6 +658,20 @@ string theme_light_0 = format(q"┃      color                    : #003399;      text-decoration          : underline;    } +  a.lev0:hover { +    color                    : #000000; +    background-color         : #FFFFFF; +  } +  a.lev1:hover { +    color                    : #FFFFFF; +    background               : #444444; +  } +  a.lev2:hover { +    background               : #888888; +  } +  a.lev3:hover { +    background               : #BBBBBB; +  }  ┃");  #+END_SRC @@ -718,7 +748,7 @@ string theme_light_1 = format(q"┃  <meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" />  <meta name="generator" content="doc_reform" />  <link rel="generator" href="http://sisudoc.org" /> -<link href="../../_sisu/css/harvest.css" rel="stylesheet"> +<link href="./css/harvest.css" rel="stylesheet">  <style TYPE="text/css">  /* DocReform harvest css default stylesheet */%s    .norm, .bold { diff --git a/src/doc_reform/doc_reform.d b/src/doc_reform/doc_reform.d index 708c96a..369c91b 100755 --- a/src/doc_reform/doc_reform.d +++ b/src/doc_reform/doc_reform.d @@ -170,8 +170,8 @@ void main(string[] args) {      "workon"             : false,    ];    string[string] settings = [ -    "output-dir"         : "", -    "site-config-dir"    : "", +    "config"             : "", +    "output"             : "",      "lang"               : "all",      "sqlite-filename"    : "documents",    ]; @@ -232,8 +232,8 @@ void main(string[] args) {      "theme-dark",         "--theme-dark alternative dark theme",                                      &opts["theme-dark"],      "theme-light",        "--theme-light default light theme",                                        &opts["theme-light"],      "workon",             "--workon (reserved for some matters under development & testing)",         &opts["workon"], -    "output-dir",         "--output-dir=[dir path]",                                                  &settings["output-dir"], -    "site-config-dir",    "--site-config-dir=[dir path]",                                             &settings["site-config-dir"], +    "config",             "--config=/path/to/config/file/including/filename",                         &settings["config"], +    "output",             "--output=/path/to/output/dir specify where to place output",               &settings["output"],      "sqlite-filename",    "--sqlite-filename=[filename].sqlite",                                      &settings["sqlite-filename"],      "lang",               "--lang=[lang code e.g. =en or =en,es]",                                    &settings["lang"],    ); @@ -248,6 +248,9 @@ void main(string[] args) {      bool concordance() {        return opts["concordance"];      } +    auto config_path_set() { +      return settings["config"]; +    }      bool css_theme_default() {        bool _is_light;        if (opts["light"] || opts["theme-light"]) { @@ -398,7 +401,7 @@ void main(string[] args) {        return settings["lang"].split(",");      }      auto output_dir_set() { -      return settings["output-dir"]; +      return settings["output"];      }      auto sqlite_filename() {        return settings["sqlite-filename"]; diff --git a/src/doc_reform/meta/conf_make_meta_json.d b/src/doc_reform/meta/conf_make_meta_json.d index 0a3c4c2..3d69a3c 100644 --- a/src/doc_reform/meta/conf_make_meta_json.d +++ b/src/doc_reform/meta/conf_make_meta_json.d @@ -393,16 +393,21 @@ static template contentJSONtoDocReformStruct() {          = _struct_composite.meta.creator_author.split(rgx.arr_delimiter);        auto _lastname = appender!(char[])();        foreach (author_raw; authors_raw_arr) { -        author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -        authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); -        authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); -        authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -        authors_hash_arr["as_input"] ~= author_raw;          if (auto m = author_raw.match(rgx.raw_author_munge)) { +          author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); +          authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); +          authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); +          authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1");            (m.captures[1]).map!toUpper.copy(_lastname);            authors_hash_arr["last_first"] ~= _lastname.data.to!string ~ ", " ~ m.captures[2];            _lastname = appender!(char[])(); +        } { +          author_arr                     ~= author_raw; +          authors_hash_arr["last"]       ~= author_raw; +          authors_hash_arr["full"]       ~= author_raw; +          authors_hash_arr["last_first"] ~= author_raw;          } +        authors_hash_arr["as_input"] ~= author_raw;        }        _struct_composite.meta.creator_author_arr = author_arr;        _struct_composite.meta.creator_author     = author_arr.join(", ").chomp.chomp; diff --git a/src/doc_reform/meta/conf_make_meta_yaml.d b/src/doc_reform/meta/conf_make_meta_yaml.d index 8b76a3e..a9c4434 100644 --- a/src/doc_reform/meta/conf_make_meta_yaml.d +++ b/src/doc_reform/meta/conf_make_meta_yaml.d @@ -451,16 +451,21 @@ static template contentYAMLtoDocReformStruct() {          = _struct_composite.meta.creator_author.split(rgx.arr_delimiter);        auto _lastname = appender!(char[])();        foreach (author_raw; authors_raw_arr) { -        author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -        authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); -        authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); -        authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); -        authors_hash_arr["as_input"] ~= author_raw;          if (auto m = author_raw.match(rgx.raw_author_munge)) { +          author_arr                   ~= author_raw.replace(rgx.raw_author_munge, "$2 $1"); +          authors_hash_arr["first"]    ~= author_raw.replace(rgx.raw_author_munge, "$2"); +          authors_hash_arr["last"]     ~= author_raw.replace(rgx.raw_author_munge, "$1"); +          authors_hash_arr["full"]     ~= author_raw.replace(rgx.raw_author_munge, "$2 $1");            (m.captures[1]).map!toUpper.copy(_lastname);            authors_hash_arr["last_first"] ~= _lastname.data.to!string ~ ", " ~ m.captures[2];            _lastname = appender!(char[])(); +        } else { +          author_arr                     ~= author_raw; +          authors_hash_arr["last"]       ~= author_raw; +          authors_hash_arr["full"]       ~= author_raw; +          authors_hash_arr["last_first"] ~= author_raw;          } +        authors_hash_arr["as_input"] ~= author_raw;        }        _struct_composite.meta.creator_author_arr = author_arr;        _struct_composite.meta.creator_author     = author_arr.join(", ").chomp.chomp; @@ -781,9 +786,15 @@ static template configParseYAMLreturnDocReformStruct() {      CCm     _make_and_meta_struct,      M       _manifested    ){ -    Node yaml_root = Loader.fromString(_document_struct.content).load(); -    _make_and_meta_struct -      = contentYAMLtoDocReformStruct!()(_make_and_meta_struct, yaml_root, _manifested, _document_struct.filename); // struct from yaml +    Node yaml_root; +    try { +      yaml_root = Loader.fromString(_document_struct.content).load(); +      _make_and_meta_struct +        = contentYAMLtoDocReformStruct!()(_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"); +    }      return _make_and_meta_struct;    }  } @@ -812,8 +823,12 @@ static template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() {    ) {      Node _yaml_root;      if (header_src.match(rgx.yaml_header_meta_title)) { -      import dyaml; -      _yaml_root = Loader.fromString(header_src).load(); +      try { +        _yaml_root = Loader.fromString(header_src).load(); +      } catch { +        import std.stdio; +        writeln("ERROR failed to read document header, not parsed as yaml"); +      }      }      auto _header_and_make_and_meta_struct        = contentYAMLtoDocReformStruct!()(_make_and_meta_struct, _yaml_root, _manifested, "header"); diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index f5e0b81..4eb7771 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -3855,11 +3855,18 @@ template DocReformDocAbstraction() {        assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels        switch (an_object["lev"]) {        case "A":                                // Title set -        an_object[an_object_key]=(an_object[an_object_key]) -          .replaceFirst(rgx.variable_doc_title, -            (conf_make_meta.meta.title_full ~ ",")) -          .replaceFirst(rgx.variable_doc_author, -            conf_make_meta.meta.creator_author); +        if (an_object[an_object_key].match(rgx.variable_doc_title) +        && an_object[an_object_key].match(rgx.variable_doc_author)) { +          an_object[an_object_key] = an_object[an_object_key] +            .replaceFirst(rgx.variable_doc_title, +              (conf_make_meta.meta.title_full ~ ", ")) +            .replaceFirst(rgx.variable_doc_author, +              conf_make_meta.meta.creator_author); +        } else if (an_object[an_object_key].match(rgx.variable_doc_title)) { +          an_object[an_object_key] = an_object[an_object_key] +            .replaceFirst(rgx.variable_doc_title, +              conf_make_meta.meta.title_full); +        }          collapsed_lev["h0"] = 0;          an_object["lev_collapsed_number"]            = collapsed_lev["h0"].to!string; diff --git a/src/doc_reform/meta/metadoc_harvests_authors.d b/src/doc_reform/meta/metadoc_harvests_authors.d index 1645d9b..29fcc72 100644 --- a/src/doc_reform/meta/metadoc_harvests_authors.d +++ b/src/doc_reform/meta/metadoc_harvests_authors.d @@ -44,6 +44,22 @@ string theme_dark_0 = format(q"┃      color                    : #888888;      text-decoration          : underline;    } +  a.lev0:hover { +    color                    : #FFFFFF; +    background-color         : #000000; +  } +  a.lev1:hover { +    color                    : #FFFFFF; +    background               : #333333; +  } +  a.lev2:hover { +    color                    : #FFFFFF; +    background               : #555555; +  } +  a.lev3:hover { +    color                    : #FFFFFF; +    background               : #777777; +  }  ┃");  string theme_light_0 = format(q"┃    body { @@ -70,6 +86,20 @@ string theme_light_0 = format(q"┃      color                    : #003399;      text-decoration          : underline;    } +  a.lev0:hover { +    color                    : #000000; +    background-color         : #FFFFFF; +  } +  a.lev1:hover { +    color                    : #FFFFFF; +    background               : #444444; +  } +  a.lev2:hover { +    background               : #888888; +  } +  a.lev3:hover { +    background               : #BBBBBB; +  }  ┃");  string theme_dark_1 = format(q"┃    h1 { @@ -141,7 +171,7 @@ string theme_light_1 = format(q"┃  <meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" />  <meta name="generator" content="doc_reform" />  <link rel="generator" href="http://sisudoc.org" /> -<link href="../../_sisu/css/harvest.css" rel="stylesheet"> +<link href="./css/harvest.css" rel="stylesheet">  <style TYPE="text/css">  /* DocReform harvest css default stylesheet */%s    .norm, .bold { @@ -265,8 +295,8 @@ string theme_light_1 = format(q"┃        ) {          if (doc_harvest.author_surname_fn != _prev_auth) {            _au[doc_harvest.author_surname_fn] -          = format(q"┃<p class="author"><a name="%s">%s</a></p> <p class="publication">%s "<a href="%s">%s</a>" [%s]</p>┃", -            doc_harvest.author_surname, +          = format(q"┃<p class="author"><a name="%s" class="lev0">%s</a></p> <p class="publication">%s "<a href="%s">%s</a>" [%s]</p>┃", +            doc_harvest.author_surname.translate([' ' : "_"]),              doc_harvest.author_surname_fn,              (doc_harvest.date_published.length > 0)                ? doc_harvest.date_published : "", diff --git a/src/doc_reform/meta/metadoc_harvests_topics.d b/src/doc_reform/meta/metadoc_harvests_topics.d index 9f73552..63e4a79 100644 --- a/src/doc_reform/meta/metadoc_harvests_topics.d +++ b/src/doc_reform/meta/metadoc_harvests_topics.d @@ -87,6 +87,22 @@ string theme_dark_0 = format(q"┃      color                    : #888888;      text-decoration          : underline;    } +  a.lev0:hover { +    color                    : #FFFFFF; +    background-color         : #000000; +  } +  a.lev1:hover { +    color                    : #FFFFFF; +    background               : #333333; +  } +  a.lev2:hover { +    color                    : #FFFFFF; +    background               : #555555; +  } +  a.lev3:hover { +    color                    : #FFFFFF; +    background               : #777777; +  }  ┃");  string theme_light_0 = format(q"┃    body { @@ -113,6 +129,20 @@ string theme_light_0 = format(q"┃      color                    : #003399;      text-decoration          : underline;    } +  a.lev0:hover { +    color                    : #000000; +    background-color         : #FFFFFF; +  } +  a.lev1:hover { +    color                    : #FFFFFF; +    background               : #444444; +  } +  a.lev2:hover { +    background               : #888888; +  } +  a.lev3:hover { +    background               : #BBBBBB; +  }  ┃");  string theme_dark_1 = format(q"┃    h1 { @@ -182,7 +212,7 @@ string theme_light_1 = format(q"┃  <meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" />  <meta name="generator" content="doc_reform" />  <link rel="generator" href="http://sisudoc.org" /> -<link href="../../_sisu/css/harvest.css" rel="stylesheet"> +<link href="./css/harvest.css" rel="stylesheet">  <style TYPE="text/css">  /* DocReform harvest css default stylesheet */%s    .norm, .bold { @@ -304,8 +334,8 @@ string theme_light_1 = format(q"┃            _prev_k = k0.toUpper.to!(char[])[0];          }          if (k0 != "_a") { -          topics ~= format(q"┃<p class="lev0"><a name="%s">%s</a></p>┃", -            k0, k0,) ~ "\n"; +          topics ~= format(q"┃<p class="lev0"><a name="%s" class="lev0">%s</a></p>┃", +            k0.translate([' ' : "_"]), k0,) ~ "\n";            if (_opt_action.very_verbose) {              writeln("", k0);            } @@ -317,13 +347,13 @@ string theme_light_1 = format(q"┃                _auth = [];                if (t_a_.author_arr.length < 2) {                  _auth = format(q"┃ <a href="authors.html#%s">%s</a>┃", -                  t_a_.author_surname, +                  t_a_.author_surname.translate([' ' : "_"]),                    t_a_.author,                  );                } else {                  foreach (a; t_a_.author_arr) {                    _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -                    t_a_.author_surname, +                    t_a_.author_surname.translate([' ' : "_"]),                      a,                    );                  } @@ -343,8 +373,8 @@ string theme_light_1 = format(q"┃              .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)            ) {              if (k1 != "_a") { -              topics ~= format(q"┃<p class="lev1"><a name="%s">%s</a></p>┃", -                k1, k1,) ~ "\n"; +              topics ~= format(q"┃<p class="lev1"><a name="%s" class="lev1">%s</a></p>┃", +                k1.translate([' ' : "_"]), k1,) ~ "\n";                if (_opt_action.very_verbose) {                  writeln("  ", k1);                } @@ -356,13 +386,13 @@ string theme_light_1 = format(q"┃                    _auth = [];                    if (t_a_.author_arr.length < 2) {                      _auth = format(q"┃ <a href="authors.html#%s">%s</a>┃", -                      t_a_.author_surname, +                      t_a_.author_surname.translate([' ' : "_"]),                        t_a_.author,                      );                    } else {                      foreach (a; t_a_.author_arr) {                        _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -                        t_a_.author_surname, +                        t_a_.author_surname.translate([' ' : "_"]),                          a,                        );                      } @@ -383,8 +413,8 @@ string theme_light_1 = format(q"┃                .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)              ) {                if (k2 != "_a") { -                topics ~= format(q"┃<p class="lev2"><a name="%s">%s</a></p>┃", -                  k2, k2,) ~ "\n"; +                topics ~= format(q"┃<p class="lev2"><a name="%s" class="lev2">%s</a></p>┃", +                  k2.translate([' ' : "_"]), k2,) ~ "\n";                  if (_opt_action.very_verbose) {                    writeln("    ", k2);                  } @@ -396,13 +426,13 @@ string theme_light_1 = format(q"┃                      _auth = [];                      if (t_a_.author_arr.length < 2) {                        _auth = format(q"┃ <a href="authors.html#%s">%s</a>┃", -                        t_a_.author_surname, +                        t_a_.author_surname.translate([' ' : "_"]),                          t_a_.author,                        );                      } else {                        foreach (a; t_a_.author_arr) {                          _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -                          t_a_.author_surname, +                          t_a_.author_surname.translate([' ' : "_"]),                            a,                          );                        } @@ -423,8 +453,8 @@ string theme_light_1 = format(q"┃                  .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)                ) {                  if (k3 != "_a") { -                  topics ~= format(q"┃<p class="lev3"><a name="%s">%s</a></p>┃", -                    k3, k3,) ~ "\n"; +                  topics ~= format(q"┃<p class="lev3"><a name="%s" class="lev3">%s</a></p>┃", +                    k3.translate([' ' : "_"]), k3,) ~ "\n";                    if (_opt_action.very_verbose) {                      writeln("      ", k3);                    } @@ -436,13 +466,13 @@ string theme_light_1 = format(q"┃                        _auth = [];                        if (t_a_.author_arr.length < 2) {                          _auth = format(q"┃<a href="authors.html#%s">%s</a>┃", -                          t_a_.author_surname, +                          t_a_.author_surname.translate([' ' : "_"]),                            t_a_.author,                          );                        } else {                          foreach (a; t_a_.author_arr) {                            _auth ~= format(q"┃ <a href="authors.html#%s">%s</a>,┃", -                            t_a_.author_surname, +                            t_a_.author_surname.translate([' ' : "_"]),                              a,                            );                          } diff --git a/src/doc_reform/source/paths_source.d b/src/doc_reform/source/paths_source.d index 838f114..f291fb5 100644 --- a/src/doc_reform/source/paths_source.d +++ b/src/doc_reform/source/paths_source.d @@ -43,6 +43,9 @@ template PodManifest() {          }          return _manifest_path;        } +      string pods_collection_root_path() { +        return (pod_manifest_path.length > 0) ? ((chainPath(pod_manifest_path, "..")).asNormalizedPath).array.to!string : ""; +      }        string pod_manifest_file_with_path() {          string _k;          if  (exists(pod_manifest_path.chainPath(pod_manifest_filename).array)!=0) { @@ -87,7 +90,6 @@ template PathMatters() {          return Env_();        }        auto opt() { -        auto _opt_actions = _opt_actions;          struct Opt_ {            auto action() {              return _opt_actions; @@ -103,9 +105,8 @@ template PathMatters() {            bool src_is_pod() {              return (_manifested.pod_manifest_path.length > 0) ? true : false;            } -          auto collection_root() { -            auto _collection_root = ((chainPath(_manifested.pod_manifest_path, "..")).asNormalizedPath).array; -            return _collection_root; +          string collection_root() { +            return _manifested.pods_collection_root_path;            }            string manifest_filename() {              return _manifested.pod_manifest_filename; diff --git a/subprojects/archived.wrap b/subprojects/archived.wrap deleted file mode 100644 index 0cb238c..0000000 --- a/subprojects/archived.wrap +++ /dev/null @@ -1,4 +0,0 @@ -[wrap-git] -directory = archived -url       = https://github.com/ximion/archive.git -revision  = head diff --git a/subprojects/toml-d.wrap b/subprojects/toml-d.wrap deleted file mode 100644 index 70f7adc..0000000 --- a/subprojects/toml-d.wrap +++ /dev/null @@ -1,4 +0,0 @@ -[wrap-git] -directory = toml-d -url       = https://github.com/ximion/toml.git -revision  = head | 
