diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/COPYRIGHT | 12 | ||||
| -rw-r--r-- | src/doc_reform/COPYRIGHT | 12 | ||||
| -rw-r--r-- | src/doc_reform/io_out/cgi_sqlite_search_form.d | 1022 | ||||
| -rw-r--r-- | src/doc_reform/io_out/epub3.d | 6 | ||||
| -rw-r--r-- | src/doc_reform/io_out/html.d | 1 | ||||
| -rw-r--r-- | src/doc_reform/io_out/latex.d | 98 | ||||
| -rw-r--r-- | src/doc_reform/io_out/source_pod.d | 2 | ||||
| -rw-r--r-- | src/doc_reform/io_out/sqlite.d | 160 | ||||
| -rw-r--r-- | src/doc_reform/meta/conf_make_meta_yaml.d | 101 | ||||
| -rw-r--r-- | src/doc_reform/meta/metadoc.d | 254 | 
10 files changed, 793 insertions, 875 deletions
| diff --git a/src/COPYRIGHT b/src/COPYRIGHT index 6f8b82e..6b491b3 100644 --- a/src/COPYRIGHT +++ b/src/COPYRIGHT @@ -68,6 +68,9 @@        [https://github.com/dlang-community/d2sqlite3]        [https://code.dlang.org/packages/d2sqlite3] +    - src/ext_depends/d2sqlite3 +    - sundry/spine_search_cgi/src/ext_depends_cgi/d2sqlite3 +    - Name: dyaml      - Description:        D:YAML is an open source YAML parser and emitter library for the D programming language. @@ -86,6 +89,8 @@        [https://github.com/dlang-community/D-YAML]        [https://code.dlang.org/packages/dyaml] +    - src/ext_depends/D-YAML +    - Name: imageformats      - Description: @@ -103,6 +108,8 @@        [https://github.com/lgvz/imageformats]        [https://code.dlang.org/packages/imageformats] +    - src/ext_depends/imageformats +    - Name: tinyendian (dyaml dependency)      - Description:        TinyEndian is a minimal endianness library for the D programming language. @@ -121,6 +128,8 @@        [https://github.com/dlang-community/tinyendian]        [https://code.dlang.org/packages/tinyendian] +    - src/ext_depends/tinyendian +  - Name: cgi.d    - Description: @@ -129,7 +138,7 @@    - Copyright: (C) 2008 - 2021 Adam D. Ruppe -  - code: cgi.d (copy in ./sundry/spine_search_cgi/src/ext_depends_cgi/arsd) +  - code: cgi.d      aria2c https://raw.githubusercontent.com/adamdruppe/arsd/master/cgi.d      - License: BSL-1.0 @@ -140,6 +149,7 @@    - Homepages:      [https://github.com/adamdruppe/arsd] +  - sundry/spine_search_cgi/src/ext_depends_cgi/arsd  - Name: dub2nix    - Description: diff --git a/src/doc_reform/COPYRIGHT b/src/doc_reform/COPYRIGHT index 6f8b82e..6b491b3 100644 --- a/src/doc_reform/COPYRIGHT +++ b/src/doc_reform/COPYRIGHT @@ -68,6 +68,9 @@        [https://github.com/dlang-community/d2sqlite3]        [https://code.dlang.org/packages/d2sqlite3] +    - src/ext_depends/d2sqlite3 +    - sundry/spine_search_cgi/src/ext_depends_cgi/d2sqlite3 +    - Name: dyaml      - Description:        D:YAML is an open source YAML parser and emitter library for the D programming language. @@ -86,6 +89,8 @@        [https://github.com/dlang-community/D-YAML]        [https://code.dlang.org/packages/dyaml] +    - src/ext_depends/D-YAML +    - Name: imageformats      - Description: @@ -103,6 +108,8 @@        [https://github.com/lgvz/imageformats]        [https://code.dlang.org/packages/imageformats] +    - src/ext_depends/imageformats +    - Name: tinyendian (dyaml dependency)      - Description:        TinyEndian is a minimal endianness library for the D programming language. @@ -121,6 +128,8 @@        [https://github.com/dlang-community/tinyendian]        [https://code.dlang.org/packages/tinyendian] +    - src/ext_depends/tinyendian +  - Name: cgi.d    - Description: @@ -129,7 +138,7 @@    - Copyright: (C) 2008 - 2021 Adam D. Ruppe -  - code: cgi.d (copy in ./sundry/spine_search_cgi/src/ext_depends_cgi/arsd) +  - code: cgi.d      aria2c https://raw.githubusercontent.com/adamdruppe/arsd/master/cgi.d      - License: BSL-1.0 @@ -140,6 +149,7 @@    - Homepages:      [https://github.com/adamdruppe/arsd] +  - sundry/spine_search_cgi/src/ext_depends_cgi/arsd  - Name: dub2nix    - Description: diff --git a/src/doc_reform/io_out/cgi_sqlite_search_form.d b/src/doc_reform/io_out/cgi_sqlite_search_form.d index fb3febb..57dd90b 100644 --- a/src/doc_reform/io_out/cgi_sqlite_search_form.d +++ b/src/doc_reform/io_out/cgi_sqlite_search_form.d @@ -142,317 +142,317 @@ void cgi_function_intro(Cgi cgi) {        //   cgi.write(field ~ ": " ~ content ~ "<br>");        // }      } -  static struct Rgx { -    // static canned_query   = ctRegex!(`\A(?P<matched>.+)\Z`,                            "m"); -    static search_text_area  = ctRegex!(`\A(?P<matched>.+)\Z`,                            "m"); -    // static fulltext       = ctRegex!(`\A(?P<matched>.+)\Z`,                            "m"); -    static line              = ctRegex!(`^(?P<matched>.+?)(?: ~|$)`,                      "m"); -    static text              = ctRegex!(`(?:^|\s~\s*)text:\s+(?P<matched>.+?)(?: ~|$)`,   "m"); -    static author            = ctRegex!(`(?:^|\s~\s*)author:\s+(?P<matched>.+)$`,         "m"); -    static title             = ctRegex!(`(?:^|\s~\s*)title:\s+(?P<matched>.+)$`,          "m"); -    static uid               = ctRegex!(`(?:^|\s~\s*)uid:\s+(?P<matched>.+)$`,            "m"); -    static fn                = ctRegex!(`(?:^|\s~\s*)fn:\s+(?P<matched>.+)$`,             "m"); -    static keywords          = ctRegex!(`(?:^|\s~\s*)keywords:\s+(?P<matched>.+)$`,       "m"); -    static topic_register    = ctRegex!(`(?:^|\s~\s*)topic_register:\s+(?P<matched>.+)$`, "m"); -    static subject           = ctRegex!(`(?:^|\s~\s*)subject:\s+(?P<matched>.+)$`,        "m"); -    static description       = ctRegex!(`(?:^|\s~\s*)description:\s+(?P<matched>.+)$`,    "m"); -    static publisher         = ctRegex!(`(?:^|\s~\s*)publisher:\s+(?P<matched>.+)$`,      "m"); -    static editor            = ctRegex!(`(?:^|\s~\s*)editor:\s+(?P<matched>.+)$`,         "m"); -    static contributor       = ctRegex!(`(?:^|\s~\s*)contributor:\s+(?P<matched>.+)$`,    "m"); -    static date              = ctRegex!(`(?:^|\s~\s*)date:\s+(?P<matched>.+)$`,           "m"); -    static results_type      = ctRegex!(`(?:^|\s~\s*)type:\s+(?P<matched>.+)$`,           "m"); -    static format            = ctRegex!(`(?:^|\s~\s*)format:\s+(?P<matched>.+)$`,         "m"); -    static source            = ctRegex!(`(?:^|\s~\s*)source:\s+(?P<matched>.+)$`,         "m"); -    static language          = ctRegex!(`(?:^|\s~\s*)language:\s+(?P<matched>.+)$`,       "m"); -    static relation          = ctRegex!(`(?:^|\s~\s*)relation:\s+(?P<matched>.+)$`,       "m"); -    static coverage          = ctRegex!(`(?:^|\s~\s*)coverage:\s+(?P<matched>.+)$`,       "m"); -    static rights            = ctRegex!(`(?:^|\s~\s*)rights:\s+(?P<matched>.+)$`,         "m"); -    static comment           = ctRegex!(`(?:^|\s~\s*)comment:\s+(?P<matched>.+)$`,        "m"); -    // static abstract_         = ctRegex!(`(?:^|\s~\s*)abstract:\s+(?P<matched>.+)$`,       "m"); -    static src_filename_base = ctRegex!(`^src_filename_base:\s+(?P<matched>.+)$`,         "m"); -  } -  struct searchFields { -    string canned_query      = ""; // GET  canned_query     == cq -    string search_text_area  = ""; // POST search_text_area == tsa -    string text              = ""; // text              == txt -    string author            = ""; // author            == au -    string title             = ""; // title             == ti -    string uid               = ""; // uid               == uid -    string fn                = ""; // fn                == fn -    string keywords          = ""; // keywords          == kw -    string topic_register    = ""; // topic_register    == tr -    string subject           = ""; // subject           == su -    string description       = ""; // description       == de -    string publisher         = ""; // publisher         == pb -    string editor            = ""; // editor            == ed -    string contributor       = ""; // contributor       == ct -    string date              = ""; // date              == dt -    string format            = ""; // format            == fmt -    string source            = ""; // source            == src sfn -    string language          = ""; // language          == lng -    string relation          = ""; // relation          == rl -    string coverage          = ""; // coverage          == cv -    string rights            = ""; // rights            == rgt -    string comment           = ""; // comment           == cmt -    // string abstract          = ""; -    string src_filename_base = ""; // src_filename_base == bfn -    string results_type      = ""; // results_type      == rt     radio -    string sql_match_limit   = ""; // sql_match_limit   == sml    radio -    string sql_match_offset  = ""; // sql_match_offset  == smo -    string stats             = ""; // stats             == sts    checked -    string echo              = ""; // echo              == ec     checked -    string url               = ""; // url               == url    checked -    string searched          = ""; // searched          == se     checked -    string sql               = ""; // sql               == sql    checked -  } -  auto rgx  = Rgx(); -  auto got  = searchFields(); -  if (environment.get("REQUEST_METHOD", "POST") == "POST") { -    if ("sf" in cgi.post) { -      got.search_text_area =  cgi.post["sf"]; -      if (auto m = got.search_text_area.matchFirst(rgx.text)) { -        got.text = m["matched"]; -        got.canned_query ~= "sf=" ~ m["matched"]; -      } else if (auto m = got.search_text_area.matchFirst(rgx.line)) { -        if ( -          !(m["matched"].matchFirst(rgx.author)) -          && !(m["matched"].matchFirst(rgx.title)) -        ) { +    static struct Rgx { +      // static canned_query   = ctRegex!(`\A(?P<matched>.+)\Z`,                            "m"); +      static search_text_area  = ctRegex!(`\A(?P<matched>.+)\Z`,                            "m"); +      // static fulltext       = ctRegex!(`\A(?P<matched>.+)\Z`,                            "m"); +      static line              = ctRegex!(`^(?P<matched>.+?)(?: ~|$)`,                      "m"); +      static text              = ctRegex!(`(?:^|\s~\s*)text:\s+(?P<matched>.+?)(?: ~|$)`,   "m"); +      static author            = ctRegex!(`(?:^|\s~\s*)author:\s+(?P<matched>.+)$`,         "m"); +      static title             = ctRegex!(`(?:^|\s~\s*)title:\s+(?P<matched>.+)$`,          "m"); +      static uid               = ctRegex!(`(?:^|\s~\s*)uid:\s+(?P<matched>.+)$`,            "m"); +      static fn                = ctRegex!(`(?:^|\s~\s*)fn:\s+(?P<matched>.+)$`,             "m"); +      static keywords          = ctRegex!(`(?:^|\s~\s*)keywords:\s+(?P<matched>.+)$`,       "m"); +      static topic_register    = ctRegex!(`(?:^|\s~\s*)topic_register:\s+(?P<matched>.+)$`, "m"); +      static subject           = ctRegex!(`(?:^|\s~\s*)subject:\s+(?P<matched>.+)$`,        "m"); +      static description       = ctRegex!(`(?:^|\s~\s*)description:\s+(?P<matched>.+)$`,    "m"); +      static publisher         = ctRegex!(`(?:^|\s~\s*)publisher:\s+(?P<matched>.+)$`,      "m"); +      static editor            = ctRegex!(`(?:^|\s~\s*)editor:\s+(?P<matched>.+)$`,         "m"); +      static contributor       = ctRegex!(`(?:^|\s~\s*)contributor:\s+(?P<matched>.+)$`,    "m"); +      static date              = ctRegex!(`(?:^|\s~\s*)date:\s+(?P<matched>.+)$`,           "m"); +      static results_type      = ctRegex!(`(?:^|\s~\s*)type:\s+(?P<matched>.+)$`,           "m"); +      static format            = ctRegex!(`(?:^|\s~\s*)format:\s+(?P<matched>.+)$`,         "m"); +      static source            = ctRegex!(`(?:^|\s~\s*)source:\s+(?P<matched>.+)$`,         "m"); +      static language          = ctRegex!(`(?:^|\s~\s*)language:\s+(?P<matched>.+)$`,       "m"); +      static relation          = ctRegex!(`(?:^|\s~\s*)relation:\s+(?P<matched>.+)$`,       "m"); +      static coverage          = ctRegex!(`(?:^|\s~\s*)coverage:\s+(?P<matched>.+)$`,       "m"); +      static rights            = ctRegex!(`(?:^|\s~\s*)rights:\s+(?P<matched>.+)$`,         "m"); +      static comment           = ctRegex!(`(?:^|\s~\s*)comment:\s+(?P<matched>.+)$`,        "m"); +      // static abstract_         = ctRegex!(`(?:^|\s~\s*)abstract:\s+(?P<matched>.+)$`,       "m"); +      static src_filename_base = ctRegex!(`^src_filename_base:\s+(?P<matched>.+)$`,         "m"); +    } +    struct searchFields { +      string canned_query      = ""; // GET  canned_query     == cq +      string search_text_area  = ""; // POST search_text_area == tsa +      string text              = ""; // text              == txt +      string author            = ""; // author            == au +      string title             = ""; // title             == ti +      string uid               = ""; // uid               == uid +      string fn                = ""; // fn                == fn +      string keywords          = ""; // keywords          == kw +      string topic_register    = ""; // topic_register    == tr +      string subject           = ""; // subject           == su +      string description       = ""; // description       == de +      string publisher         = ""; // publisher         == pb +      string editor            = ""; // editor            == ed +      string contributor       = ""; // contributor       == ct +      string date              = ""; // date              == dt +      string format            = ""; // format            == fmt +      string source            = ""; // source            == src sfn +      string language          = ""; // language          == lng +      string relation          = ""; // relation          == rl +      string coverage          = ""; // coverage          == cv +      string rights            = ""; // rights            == rgt +      string comment           = ""; // comment           == cmt +      // string abstract          = ""; +      string src_filename_base = ""; // src_filename_base == bfn +      string results_type      = ""; // results_type      == rt     radio +      string sql_match_limit   = ""; // sql_match_limit   == sml    radio +      string sql_match_offset  = ""; // sql_match_offset  == smo +      string stats             = ""; // stats             == sts    checked +      string echo              = ""; // echo              == ec     checked +      string url               = ""; // url               == url    checked +      string searched          = ""; // searched          == se     checked +      string sql               = ""; // sql               == sql    checked +    } +    auto rgx  = Rgx(); +    auto got  = searchFields(); +    if (environment.get("REQUEST_METHOD", "POST") == "POST") { +      if ("sf" in cgi.post) { +        got.search_text_area =  cgi.post["sf"]; +        if (auto m = got.search_text_area.matchFirst(rgx.text)) {            got.text = m["matched"];            got.canned_query ~= "sf=" ~ m["matched"]; +        } else if (auto m = got.search_text_area.matchFirst(rgx.line)) { +          if ( +            !(m["matched"].matchFirst(rgx.author)) +            && !(m["matched"].matchFirst(rgx.title)) +          ) { +            got.text = m["matched"]; +            got.canned_query ~= "sf=" ~ m["matched"]; +          } +        } +        if (auto m = got.search_text_area.matchFirst(rgx.author)) { +          got.author = m["matched"]; +          got.canned_query ~= "&au=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.title)) { +          got.title = m["matched"]; +          got.canned_query ~= "&ti=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.uid)) { +          got.uid = m["matched"]; +          got.canned_query ~= "&uid=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.fn)) { +          got.fn = m["matched"]; +          got.canned_query ~= "&fn=" ~ m["matched"]; +        } else if ("fn" in cgi.post) { +          got.search_text_area ~= "\nfn: " ~ cgi.post["fn"] ~ "\n"; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.keywords)) { +          got.keywords = m["matched"]; +          got.canned_query ~= "&kw=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.topic_register)) { +          got.topic_register = m["matched"]; +          got.canned_query ~= "&tr=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.subject)) { +          got.subject = m["matched"]; +          got.canned_query ~= "&su=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.description)) { +          got.description = m["matched"]; +          got.canned_query ~= "&de=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.publisher)) { +          got.publisher = m["matched"]; +          got.canned_query ~= "&pb=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.editor)) { +          got.editor = m["matched"]; +          got.canned_query ~= "&ed=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.contributor)) { +          got.contributor = m["matched"]; +          got.canned_query ~= "&ct=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.date)) { +          got.date = m["matched"]; +          got.canned_query ~= "&dt=" ~ m["matched"]; +        } +        // if (auto m = got.search_text_area.matchFirst(rgx.results_type)) { +        //   got.results_type = m["matched"]; +        //   got.canned_query ~= "&rt=" ~ m["matched"]; +        // } +        if (auto m = got.search_text_area.matchFirst(rgx.format)) { +          got.format = m["matched"]; +          got.canned_query ~= "&fmt=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.source)) { +          got.source = m["matched"]; +          got.canned_query ~= "&src=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.language)) { +          got.language = m["matched"]; +          got.canned_query ~= "&lng=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.relation)) { +          got.relation = m["matched"]; +          got.canned_query ~= "&rl=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.coverage)) { +          got.coverage = m["matched"]; +          got.canned_query ~= "&cv=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.rights)) { +          got.rights = m["matched"]; +          got.canned_query ~= "&rgt=" ~ m["matched"]; +        } +        if (auto m = got.search_text_area.matchFirst(rgx.comment)) { +          got.comment = m["matched"]; +          got.canned_query ~= "&cmt=" ~ m["matched"]; +        } +        // if (auto m = search_text_area.matchFirst(rgx.abstract)) { +        //   got.abstract = m["matched"]; +        // } +        if (auto m = got.search_text_area.matchFirst(rgx.src_filename_base)) { +          got.src_filename_base = m["matched"]; +          got.canned_query ~= "&bfn=" ~ m["matched"];          }        } -      if (auto m = got.search_text_area.matchFirst(rgx.author)) { -        got.author = m["matched"]; -        got.canned_query ~= "&au=" ~ m["matched"]; +      if ("fn" in cgi.post) { +        got.fn =  cgi.post["fn"]; +        got.canned_query ~= "&fn=" ~ cgi.post["fn"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.title)) { -        got.title = m["matched"]; -        got.canned_query ~= "&ti=" ~ m["matched"]; +      if ("rt" in cgi.post) { +        got.results_type =  cgi.post["rt"]; +        got.canned_query ~= "&rt=" ~ cgi.post["rt"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.uid)) { -        got.uid = m["matched"]; -        got.canned_query ~= "&uid=" ~ m["matched"]; +      if ("sts" in cgi.post) { +        got.stats =  cgi.post["sts"]; +        got.canned_query ~= "&sts=" ~ cgi.post["sts"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.fn)) { -        got.fn = m["matched"]; -        got.canned_query ~= "&fn=" ~ m["matched"]; -      } else if ("fn" in cgi.post) { -        got.search_text_area ~= "\nfn: " ~ cgi.post["fn"] ~ "\n"; +      if ("ec" in cgi.post) { +        got.echo =  cgi.post["ec"]; +        got.canned_query ~= "&ec=" ~ cgi.post["ec"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.keywords)) { -        got.keywords = m["matched"]; -        got.canned_query ~= "&kw=" ~ m["matched"]; +      if ("url" in cgi.post) { +        got.url =  cgi.post["url"]; +        got.canned_query ~= "&url=" ~ cgi.post["url"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.topic_register)) { -        got.topic_register = m["matched"]; -        got.canned_query ~= "&tr=" ~ m["matched"]; +      if ("se" in cgi.post) { +        got.searched =  cgi.post["se"]; +        got.canned_query ~= "&se=" ~ cgi.post["se"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.subject)) { -        got.subject = m["matched"]; -        got.canned_query ~= "&su=" ~ m["matched"]; +      if ("sql" in cgi.post) { +        got.sql =  cgi.post["sql"]; +        got.canned_query ~= "&sql=" ~ cgi.post["sql"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.description)) { -        got.description = m["matched"]; -        got.canned_query ~= "&de=" ~ m["matched"]; +      if ("sml" in cgi.post) { +        got.sql_match_limit =  cgi.post["sml"]; +        got.canned_query ~= "&sml=" ~ cgi.post["sml"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.publisher)) { -        got.publisher = m["matched"]; -        got.canned_query ~= "&pb=" ~ m["matched"]; +      if ("smo" in cgi.post) { +        got.sql_match_offset = "0";   // cgi.post["smo"]; +        got.canned_query ~= "&smo=0"; //  ~ cgi.post["smo"];        } -      if (auto m = got.search_text_area.matchFirst(rgx.editor)) { -        got.editor = m["matched"]; -        got.canned_query ~= "&ed=" ~ m["matched"]; +      got.canned_query = got.canned_query.strip.split(" ").join("%%20"); +      conf.query_string = got.canned_query; +      // cgi.write("f.canned_query: " ~ got.canned_query ~ "<br>"); +    } else if (environment.get("REQUEST_METHOD", "POST") == "GET") { +      got.canned_query = environment.get("QUERY_STRING", ""); +      // cgi.write("f.canned_query: " ~ got.canned_query ~ "<br>"); +      got.search_text_area = ""; +      if ("sf" in canned_query && !(canned_query["sf"]).empty) { +        got.text = canned_query["sf"].split("%%20").join(" "); +        got.search_text_area ~= "text: " ~ got.text ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.contributor)) { -        got.contributor = m["matched"]; -        got.canned_query ~= "&ct=" ~ m["matched"]; +      if ("au" in canned_query && !(canned_query["au"]).empty) { +        got.author = canned_query["au"].split("%%20").join(" "); +        got.search_text_area ~= "author: " ~ got.author ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.date)) { -        got.date = m["matched"]; -        got.canned_query ~= "&dt=" ~ m["matched"]; +      if ("ti" in canned_query && !(canned_query["ti"]).empty) { +        got.title = canned_query["ti"].split("%%20").join(" "); +        got.search_text_area ~= "title: " ~ got.title ~ "\n";        } -      // if (auto m = got.search_text_area.matchFirst(rgx.results_type)) { -      //   got.results_type = m["matched"]; -      //   got.canned_query ~= "&rt=" ~ m["matched"]; -      // } -      if (auto m = got.search_text_area.matchFirst(rgx.format)) { -        got.format = m["matched"]; -        got.canned_query ~= "&fmt=" ~ m["matched"]; +      if ("uid" in canned_query && !(canned_query["uid"]).empty) { +        got.uid = canned_query["uid"].split("%%20").join(" "); +        got.search_text_area ~= "uid: " ~ got.uid ~ "\n"; +      } +      if ("fn" in canned_query && !(canned_query["fn"]).empty) { +        got.fn = canned_query["fn"].split("%%20").join(" "); +        got.search_text_area ~= "fn: " ~ got.fn ~ "\n"; +      } +      if ("kw" in canned_query && !(canned_query["kw"]).empty) { +        got.keywords = canned_query["kw"].split("%%20").join(" "); +        got.search_text_area ~= "keywords: " ~ got.keywords ~ "\n"; +      } +      if ("tr" in canned_query && !(canned_query["tr"]).empty) { +        got.topic_register = canned_query["tr"].split("%%20").join(" "); +        got.search_text_area ~= "topic_register: " ~ got.topic_register ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.source)) { -        got.source = m["matched"]; -        got.canned_query ~= "&src=" ~ m["matched"]; +      if ("su" in canned_query && !(canned_query["su"]).empty) { +        got.subject = canned_query["su"].split("%%20").join(" "); +        got.search_text_area ~= "subject: " ~ got.subject ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.language)) { -        got.language = m["matched"]; -        got.canned_query ~= "&lng=" ~ m["matched"]; +      if ("de" in canned_query && !(canned_query["de"]).empty) { +        got.description = canned_query["de"].split("%%20").join(" "); +        got.search_text_area ~= "description: " ~ got.description ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.relation)) { -        got.relation = m["matched"]; -        got.canned_query ~= "&rl=" ~ m["matched"]; +      if ("pb" in canned_query && !(canned_query["pb"]).empty) { +        got.publisher = canned_query["pb"].split("%%20").join(" "); +        got.search_text_area ~= "publisher: " ~ got.publisher ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.coverage)) { -        got.coverage = m["matched"]; -        got.canned_query ~= "&cv=" ~ m["matched"]; +      if ("ed" in canned_query && !(canned_query["ed"]).empty) { +        got.editor = canned_query["ed"].split("%%20").join(" "); +        got.search_text_area ~= "editor: " ~ got.editor ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.rights)) { -        got.rights = m["matched"]; -        got.canned_query ~= "&rgt=" ~ m["matched"]; +      if ("ct" in canned_query && !(canned_query["ct"]).empty) { +        got.contributor = canned_query["ct"].split("%%20").join(" "); +        got.search_text_area ~= "contributor: " ~ got.contributor ~ "\n";        } -      if (auto m = got.search_text_area.matchFirst(rgx.comment)) { -        got.comment = m["matched"]; -        got.canned_query ~= "&cmt=" ~ m["matched"]; +      if ("dt" in canned_query && !(canned_query["dt"]).empty) { +        got.date = canned_query["dt"].split("%%20").join(" "); +        got.search_text_area ~= "date: " ~ got.date ~ "\n";        } -      // if (auto m = search_text_area.matchFirst(rgx.abstract)) { -      //   got.abstract = m["matched"]; +      if ("rt" in canned_query && !(canned_query["rt"]).empty) { +        got.results_type = canned_query["rt"].split("%%20").join(" "); +        // got.search_text_area ~= "results_type: " ~ got.results_type ~ "\n"; +      } +      if ("fmt" in canned_query && !(canned_query["fmt"]).empty) { +        got.format = canned_query["fmt"].split("%%20").join(" "); +        got.search_text_area ~= "format: " ~ got.format ~ "\n"; +      } +      if ("src" in canned_query && !(canned_query["src"]).empty) { +        got.source = canned_query["src"].split("%%20").join(" "); +        got.search_text_area ~= "source: " ~ got.source ~ "\n"; +      } +      if ("lng" in canned_query && !(canned_query["lng"]).empty) { +        got.language = canned_query["lng"].split("%%20").join(" "); +        got.search_text_area ~= "language: " ~ got.language ~ "\n"; +      } +      if ("rl" in canned_query && !(canned_query["rl"]).empty) { +        got.relation = canned_query["rl"].split("%%20").join(" "); +        got.search_text_area ~= "relation: " ~ got.relation ~ "\n"; +      } +      if ("cv" in canned_query && !(canned_query["cv"]).empty) { +        got.coverage = canned_query["cv"].split("%%20").join(" "); +        got.search_text_area ~= "coverage: " ~ got.coverage ~ "\n"; +      } +      if ("rgt" in canned_query && !(canned_query["rgt"]).empty) { +        got.rights = canned_query["rgt"].split("%%20").join(" "); +        got.search_text_area ~= "rights: " ~ got.rights ~ "\n"; +      } +      if ("cmt" in canned_query && !(canned_query["cmt"]).empty) { +        got.comment = canned_query["cmt"].split("%%20").join(" "); +        got.search_text_area ~= "comment: " ~ got.comment ~ "\n"; +      } +      // if ("abstract" in canned_query && !(canned_query["abstract"]).empty) { +      //   got.abstract = canned_query["abstract"];        // } -      if (auto m = got.search_text_area.matchFirst(rgx.src_filename_base)) { -        got.src_filename_base = m["matched"]; -        got.canned_query ~= "&bfn=" ~ m["matched"]; +      if ("bfn" in canned_query && !(canned_query["bfn"]).empty) { // search_field +        got.src_filename_base = canned_query["bfn"].split("%%20").join(" "); +        got.search_text_area ~= "src_filename_base: " ~ got.src_filename_base ~ "\n";        } +      if ("sml" in canned_query && !(canned_query["sml"]).empty) { +        got.sql_match_limit = canned_query["sml"].split("%%20").join(" "); +        // got.search_text_area ~= "sql_match_limit: " ~ got.sql_match_limit ~ "\n"; +      } +      // cgi.write("f.search_text_area: " ~ got.search_text_area ~ "<br>");      } -    if ("fn" in cgi.post) { -      got.fn =  cgi.post["fn"]; -      got.canned_query ~= "&fn=" ~ cgi.post["fn"]; -    } -    if ("rt" in cgi.post) { -      got.results_type =  cgi.post["rt"]; -      got.canned_query ~= "&rt=" ~ cgi.post["rt"]; -    } -    if ("sts" in cgi.post) { -      got.stats =  cgi.post["sts"]; -      got.canned_query ~= "&sts=" ~ cgi.post["sts"]; -    } -    if ("ec" in cgi.post) { -      got.echo =  cgi.post["ec"]; -      got.canned_query ~= "&ec=" ~ cgi.post["ec"]; -    } -    if ("url" in cgi.post) { -      got.url =  cgi.post["url"]; -      got.canned_query ~= "&url=" ~ cgi.post["url"]; -    } -    if ("se" in cgi.post) { -      got.searched =  cgi.post["se"]; -      got.canned_query ~= "&se=" ~ cgi.post["se"]; -    } -    if ("sql" in cgi.post) { -      got.sql =  cgi.post["sql"]; -      got.canned_query ~= "&sql=" ~ cgi.post["sql"]; -    } -    if ("sml" in cgi.post) { -      got.sql_match_limit =  cgi.post["sml"]; -      got.canned_query ~= "&sml=" ~ cgi.post["sml"]; -    } -    if ("smo" in cgi.post) { -      got.sql_match_offset = "0";   // cgi.post["smo"]; -      got.canned_query ~= "&smo=0"; //  ~ cgi.post["smo"]; -    } -    got.canned_query = got.canned_query.strip.split(" ").join("%%20"); -    conf.query_string = got.canned_query; -    // cgi.write("f.canned_query: " ~ got.canned_query ~ "<br>"); -  } else if (environment.get("REQUEST_METHOD", "POST") == "GET") { -    got.canned_query = environment.get("QUERY_STRING", ""); -    // cgi.write("f.canned_query: " ~ got.canned_query ~ "<br>"); -    got.search_text_area = ""; -    if ("sf" in canned_query && !(canned_query["sf"]).empty) { -      got.text = canned_query["sf"].split("%%20").join(" "); -      got.search_text_area ~= "text: " ~ got.text ~ "\n"; -    } -    if ("au" in canned_query && !(canned_query["au"]).empty) { -      got.author = canned_query["au"].split("%%20").join(" "); -      got.search_text_area ~= "author: " ~ got.author ~ "\n"; -    } -    if ("ti" in canned_query && !(canned_query["ti"]).empty) { -      got.title = canned_query["ti"].split("%%20").join(" "); -      got.search_text_area ~= "title: " ~ got.title ~ "\n"; -    } -    if ("uid" in canned_query && !(canned_query["uid"]).empty) { -      got.uid = canned_query["uid"].split("%%20").join(" "); -      got.search_text_area ~= "uid: " ~ got.uid ~ "\n"; -    } -    if ("fn" in canned_query && !(canned_query["fn"]).empty) { -      got.fn = canned_query["fn"].split("%%20").join(" "); -      got.search_text_area ~= "fn: " ~ got.fn ~ "\n"; -    } -    if ("kw" in canned_query && !(canned_query["kw"]).empty) { -      got.keywords = canned_query["kw"].split("%%20").join(" "); -      got.search_text_area ~= "keywords: " ~ got.keywords ~ "\n"; -    } -    if ("tr" in canned_query && !(canned_query["tr"]).empty) { -      got.topic_register = canned_query["tr"].split("%%20").join(" "); -      got.search_text_area ~= "topic_register: " ~ got.topic_register ~ "\n"; -    } -    if ("su" in canned_query && !(canned_query["su"]).empty) { -      got.subject = canned_query["su"].split("%%20").join(" "); -      got.search_text_area ~= "subject: " ~ got.subject ~ "\n"; -    } -    if ("de" in canned_query && !(canned_query["de"]).empty) { -      got.description = canned_query["de"].split("%%20").join(" "); -      got.search_text_area ~= "description: " ~ got.description ~ "\n"; -    } -    if ("pb" in canned_query && !(canned_query["pb"]).empty) { -      got.publisher = canned_query["pb"].split("%%20").join(" "); -      got.search_text_area ~= "publisher: " ~ got.publisher ~ "\n"; -    } -    if ("ed" in canned_query && !(canned_query["ed"]).empty) { -      got.editor = canned_query["ed"].split("%%20").join(" "); -      got.search_text_area ~= "editor: " ~ got.editor ~ "\n"; -    } -    if ("ct" in canned_query && !(canned_query["ct"]).empty) { -      got.contributor = canned_query["ct"].split("%%20").join(" "); -      got.search_text_area ~= "contributor: " ~ got.contributor ~ "\n"; -    } -    if ("dt" in canned_query && !(canned_query["dt"]).empty) { -      got.date = canned_query["dt"].split("%%20").join(" "); -      got.search_text_area ~= "date: " ~ got.date ~ "\n"; -    } -    if ("rt" in canned_query && !(canned_query["rt"]).empty) { -      got.results_type = canned_query["rt"].split("%%20").join(" "); -      // got.search_text_area ~= "results_type: " ~ got.results_type ~ "\n"; -    } -    if ("fmt" in canned_query && !(canned_query["fmt"]).empty) { -      got.format = canned_query["fmt"].split("%%20").join(" "); -      got.search_text_area ~= "format: " ~ got.format ~ "\n"; -    } -    if ("src" in canned_query && !(canned_query["src"]).empty) { -      got.source = canned_query["src"].split("%%20").join(" "); -      got.search_text_area ~= "source: " ~ got.source ~ "\n"; -    } -    if ("lng" in canned_query && !(canned_query["lng"]).empty) { -      got.language = canned_query["lng"].split("%%20").join(" "); -      got.search_text_area ~= "language: " ~ got.language ~ "\n"; -    } -    if ("rl" in canned_query && !(canned_query["rl"]).empty) { -      got.relation = canned_query["rl"].split("%%20").join(" "); -      got.search_text_area ~= "relation: " ~ got.relation ~ "\n"; -    } -    if ("cv" in canned_query && !(canned_query["cv"]).empty) { -      got.coverage = canned_query["cv"].split("%%20").join(" "); -      got.search_text_area ~= "coverage: " ~ got.coverage ~ "\n"; -    } -    if ("rgt" in canned_query && !(canned_query["rgt"]).empty) { -      got.rights = canned_query["rgt"].split("%%20").join(" "); -      got.search_text_area ~= "rights: " ~ got.rights ~ "\n"; -    } -    if ("cmt" in canned_query && !(canned_query["cmt"]).empty) { -      got.comment = canned_query["cmt"].split("%%20").join(" "); -      got.search_text_area ~= "comment: " ~ got.comment ~ "\n"; -    } -    // if ("abstract" in canned_query && !(canned_query["abstract"]).empty) { -    //   got.abstract = canned_query["abstract"]; -    // } -    if ("bfn" in canned_query && !(canned_query["bfn"]).empty) { // search_field -      got.src_filename_base = canned_query["bfn"].split("%%20").join(" "); -      got.search_text_area ~= "src_filename_base: " ~ got.src_filename_base ~ "\n"; -    } -    if ("sml" in canned_query && !(canned_query["sml"]).empty) { -      got.sql_match_limit = canned_query["sml"].split("%%20").join(" "); -      // got.search_text_area ~= "sql_match_limit: " ~ got.sql_match_limit ~ "\n"; -    } -    // cgi.write("f.search_text_area: " ~ got.search_text_area ~ "<br>"); -  } -  return got; +    return got;    }    auto tf = text_fields; //    struct SQL_select { @@ -559,8 +559,8 @@ void cgi_function_intro(Cgi cgi) {      _previous_next = "<hr>" ~ arrow_previous ~ arrow_next;      return _previous_next;    } -{ -  header = format(q"┃ +  { +    header = format(q"┃  <!DOCTYPE html>  <html>  <head> @@ -1373,8 +1373,8 @@ void cgi_function_intro(Cgi cgi) {      conf.http_host,     );    } - { -   table = format(q"┃ +  { +    table = format(q"┃  <table summary="band" border="0" cellpadding="2" cellspacing="0">  <tr><td width="20%%%%">   <table summary="home button / home information" border="0" cellpadding="2" cellspacing="0"> @@ -1387,76 +1387,76 @@ void cgi_function_intro(Cgi cgi) {  </td></tr>  </table>  ┃"); - } -{ -  string post_value(string field_name, string type="box", string set="on") { -    string val = ""; -    switch (type) { -    case "field": -      val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) -        ? cgi.post[field_name] -        : (field_name in cgi.get) -          ? cgi.get[field_name] -          : ""); -      val = tf.search_text_area; -      break; -    case "box": // generic for checkbox or radio; checkbox set == "on" radio set == "name set" -      val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) -        ? (cgi.post[field_name]  == set ? "checked" : "off") -        : (field_name in cgi.get) -          ? (cgi.get[field_name] == set ? "checked" : "off") -          :                               "off"); -      break; -    case "radio": // used generic bo -      val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) -        ? (cgi.post[field_name]  == set ? "checked" : "off") -        : (field_name in cgi.get) -          ? (cgi.get[field_name] == set ? "checked" : "off") -          :                               "checked"); -      break; -    case "checkbox": // used generic bo -      val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) -        ? (cgi.post[field_name]  == set ? "checked" : "off") -        : (field_name in cgi.get) -          ? (cgi.get[field_name] == set ? "checked" : "off") -          :                               "checked"); -      break; -    default: +  } +  { +    string post_value(string field_name, string type="box", string set="on") { +      string val = ""; +      switch (type) { +      case "field": +        val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) +          ? cgi.post[field_name] +          : (field_name in cgi.get) +            ? cgi.get[field_name] +            : ""); +        val = tf.search_text_area; +        break; +      case "box": // generic for checkbox or radio; checkbox set == "on" radio set == "name set" +        val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) +          ? (cgi.post[field_name]  == set ? "checked" : "off") +          : (field_name in cgi.get) +            ? (cgi.get[field_name] == set ? "checked" : "off") +            :                               "off"); +        break; +      case "radio": // used generic bo +        val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) +          ? (cgi.post[field_name]  == set ? "checked" : "off") +          : (field_name in cgi.get) +            ? (cgi.get[field_name] == set ? "checked" : "off") +            :                               "checked"); +        break; +      case "checkbox": // used generic bo +        val = ((field_name in cgi.post && !(cgi.post[field_name]).empty) +          ? (cgi.post[field_name]  == set ? "checked" : "off") +          : (field_name in cgi.get) +            ? (cgi.get[field_name] == set ? "checked" : "off") +            :                               "checked"); +        break; +      default: +      } +      return val;      } -    return val; -  } -string the_can(string fv) { -  string show_the_can = post_value("url"); -  string _the_can = ""; -  if (show_the_can == "checked") { -    tf = text_fields; -    string method_get_url            = conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ "?" ~ environment.get("QUERY_STRING", ""); -    string method_post_url_construct = conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ "?" ~ tf.canned_query; -    // assert(method_get_url == environment.get("HTTP_REFERER", conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ "?" ~ conf.query_string)); -    if (conf.request_method == "POST") { -      _the_can = -        "<font size=\"2\" color=\"#666666\">" -        ~ "POST: " -        ~ "<a href=\"" -        ~ method_post_url_construct -        ~ "\">" -        ~ method_post_url_construct -        ~ "</a></font>" -        ~ "<br>"; -    } else if (conf.request_method == "GET") { -      _the_can = -        "<font size=\"2\" color=\"#666666\">" -        ~ "GET:  " -        ~ "<a href=\"" -        ~ method_get_url -        ~ "\">" -        ~ method_get_url -        ~ "</a></font>"; +    string the_can(string fv) { +      string show_the_can = post_value("url"); +      string _the_can = ""; +      if (show_the_can == "checked") { +        tf = text_fields; +        string method_get_url            = conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ "?" ~ environment.get("QUERY_STRING", ""); +        string method_post_url_construct = conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ "?" ~ tf.canned_query; +        // assert(method_get_url == environment.get("HTTP_REFERER", conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ "?" ~ conf.query_string)); +        if (conf.request_method == "POST") { +          _the_can = +            "<font size=\"2\" color=\"#666666\">" +            ~ "POST: " +            ~ "<a href=\"" +            ~ method_post_url_construct +            ~ "\">" +            ~ method_post_url_construct +            ~ "</a></font>" +            ~ "<br>"; +        } else if (conf.request_method == "GET") { +          _the_can = +            "<font size=\"2\" color=\"#666666\">" +            ~ "GET:  " +            ~ "<a href=\"" +            ~ method_get_url +            ~ "\">" +            ~ method_get_url +            ~ "</a></font>"; +        } +        conf.http_url = conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ tf.canned_query; +      } +      return _the_can;      } -    conf.http_url = conf.http_request_type ~ "://" ~ conf.http_host ~ conf.cgi_script ~ tf.canned_query; -  } -  return _the_can; -}      string provide_tip() {        string searched_tip = post_value("se");        string tip = ""; @@ -1520,55 +1520,55 @@ string the_can(string fv) {  </form>  ┃",        "%s", -  (post_value("ec") == "checked") ? post_value("sf", "field") : "", -  provide_tip, -  search_note, -  the_can(post_value("sf", "field")), -  cv.db_selected, -  post_value("rt",  "box", "idx"), -  post_value("rt",  "box", "txt"), -  post_value("sml", "box", "1000"), -  post_value("sml", "box", "2500"), -  post_value("ec"), -  post_value("url"), -  post_value("se"), -  post_value("sql"), -); -  { -    string set_value(string field_name, string default_val) { -      string val; -      if (field_name in cgi.post) { -        val = cgi.post[field_name]; -      } else if (field_name in cgi.get) { -        val = cgi.get[field_name]; -      } else { val = default_val; } -      return val; -    } -    bool set_bool(string field_name) { -      bool val; -      if (field_name in cgi.post -      && cgi.post[field_name] == "on") { -        val = true; -      } else if (field_name in cgi.get -      && cgi.get[field_name] == "on") { -        val = true; -      } else { val = false; } -      return val; +      (post_value("ec") == "checked") ? post_value("sf", "field") : "", +      provide_tip, +      search_note, +      the_can(post_value("sf", "field")), +      cv.db_selected, +      post_value("rt",  "box", "idx"), +      post_value("rt",  "box", "txt"), +      post_value("sml", "box", "1000"), +      post_value("sml", "box", "2500"), +      post_value("ec"), +      post_value("url"), +      post_value("se"), +      post_value("sql"), +    ); +    { +      string set_value(string field_name, string default_val) { +        string val; +        if (field_name in cgi.post) { +          val = cgi.post[field_name]; +        } else if (field_name in cgi.get) { +          val = cgi.get[field_name]; +        } else { val = default_val; } +        return val; +      } +      bool set_bool(string field_name) { +        bool val; +        if (field_name in cgi.post +        && cgi.post[field_name] == "on") { +          val = true; +        } else if (field_name in cgi.get +        && cgi.get[field_name] == "on") { +          val = true; +        } else { val = false; } +        return val; +      } +      cv.db_selected      = set_value("selected_db", "%s"); // selected_db_name == db (spine.search.db or whatever) +      cv.sql_match_limit  = set_value("sml",         "1000"); +      cv.sql_match_offset = set_value("smo",         "0"); +      cv.search_text      = set_value("sf",          ""); +      cv.results_type     = set_value("rt",          "idx"); +      cv.checked_echo     = set_bool("ec"); +      cv.checked_stats    = set_bool("sts"); +      cv.checked_url      = set_bool("url"); +      cv.checked_searched = set_bool("se"); +      cv.checked_tip      = set_bool("tip"); +      cv.checked_sql      = set_bool("sql"); +      tf = text_fields;      } -    cv.db_selected      = set_value("selected_db", "%s"); // selected_db_name == db (spine.search.db or whatever) -    cv.sql_match_limit  = set_value("sml",         "1000"); -    cv.sql_match_offset = set_value("smo",         "0"); -    cv.search_text      = set_value("sf",          ""); -    cv.results_type     = set_value("rt",          "idx"); -    cv.checked_echo     = set_bool("ec"); -    cv.checked_stats    = set_bool("sts"); -    cv.checked_url      = set_bool("url"); -    cv.checked_searched = set_bool("se"); -    cv.checked_tip      = set_bool("tip"); -    cv.checked_sql      = set_bool("sql"); -    tf = text_fields;    } -}    {      cgi.write(header);      cgi.write(table); @@ -1709,113 +1709,113 @@ LIMIT %%s OFFSET %%s          cv.sql_match_limit,          cv.sql_match_offset,        ); -(cv.checked_sql) -? cgi.write(previous_next -    ~ "<hr><font size=\"2\" color=\"#666666\">" -    ~ sql_select.the_body.strip.split("\n  ").join(" ").split("\n").join("<br>") -    ~ "</font>\n" -  ) -: ""; -cgi.write(previous_next); -auto select_query_results = db.execute(sql_select.the_body).cached; -string _old_uid = ""; -if (!select_query_results.empty) { -  string _date_published = "0000"; -  string _close_para = ""; -  string _matched_ocn_open = ""; -  foreach (idx, row; select_query_results) { -    if (row["uid"].as!string != _old_uid) { -      _close_para = (idx == 1) ? "" : "</p>"; -      _matched_ocn_open = (idx == 1) ? "" : "<p class=\"matched_ocn\">"; -      _old_uid = row["uid"].as!string; -      _date_published = (row["date_published"].as!string.match(regex(r"^([0-9]{4})"))) -      ? row["date_published"].as!string : "0000"; // used in regex that breaks if no match -      auto m = _date_published.match(regex(r"^([0-9]{4})")); -      string _date = (m.hit == "0000") ? "(year?) " : "(" ~ m.hit ~ ") "; -      cgi.write( -        _close_para -        ~ "<hr><div class=\"publication\">" -          ~ "<p class=\"publication\"><a href=\"" -            ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" -            ~ row["language_document_char"].as!string ~ "/html/" -            ~ row["src_filename_base"].as!string ~ "/" -            ~ "toc.html" -          ~ "\">\"" -            ~ row["title"].as!string ~ "\"" -          ~ "</a> " -          ~ _date -          ~ "[" ~ row["language_document_char"].as!string ~ "] " -          ~ row["creator_author_last_first"].as!string -          ~ " " -          ~ show_matched_objects(row["src_filename_base"].as!string) -          ~ "</p>" -        ~ "</div>" -      ); -    } -if (cv.results_type == "txt") { -  if (row["ocn"].as!string != "0") { -    cgi.write( -      "<div class=\"flex-container\">" -      ~ "<div class=\"textview_ocn\" style=\"flex: 0 0 1.2em\">" -        ~ "<p class=\"ocn_is\"><a href=\"" -          ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" -          ~ row["language_document_char"].as!string ~ "/html/" -          ~ row["src_filename_base"].as!string ~ "/" -          ~ row["seg_name"].as!string ~ ".html#" ~ row["ocn"].as!string -        ~ "\">" -          ~ row["ocn"].as!string -        ~ "</a>:</p>" -      ~ "</div>" -      ~ "<div class=\"textview_found\">" -        ~ highlight_text_matched(row["body"].as!string, tf.text) -      ~ "</div>" -      ~ "</div>" -    ); -  } else { -    cgi.write( -      "<div class=\"flex-container\">" -      ~ "<div class=\"textview_ocn\" style=\"flex: 0 0 1.2em\">" -        ~ "<p class=\"ocn_is\"><a href=\"" -          ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" -          ~ row["language_document_char"].as!string ~ "/html/" -          ~ row["src_filename_base"].as!string ~ "/toc.html" -        ~ "\">" -          ~ row["ocn"].as!string -        ~ "</a>:</p>" -      ~ "</div>" -      ~ "<div class=\"textview_found\">" -        ~ highlight_text_matched(row["body"].as!string, tf.text) -      ~ "</div>" -      ~ "</div>" -    ); -  } -} else { -  if (row["ocn"].as!string != "0") { -    cgi.write( -      _matched_ocn_open -      ~ "<a href=\"" -        ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" -        ~ row["language_document_char"].as!string ~ "/html/" -        ~ row["src_filename_base"].as!string ~ "/" -        ~ row["seg_name"].as!string ~ ".html#" ~ row["ocn"].as!string -      ~ "\">" -        ~ row["ocn"].as!string -      ~ "</a>, " -    ); -  } else { -    cgi.write( -      _matched_ocn_open -      ~ "<a href=\"" -        ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" -        ~ row["language_document_char"].as!string ~ "/html/" -        ~ row["src_filename_base"].as!string ~ "/toc.html" -      ~ "\">" -        ~ row["ocn"].as!string -      ~ "</a>, " -    ); -  } -  _matched_ocn_open = ""; -} +      (cv.checked_sql) +      ? cgi.write(previous_next +          ~ "<hr><font size=\"2\" color=\"#666666\">" +          ~ sql_select.the_body.strip.split("\n  ").join(" ").split("\n").join("<br>") +          ~ "</font>\n" +        ) +      : ""; +      cgi.write(previous_next); +      auto select_query_results = db.execute(sql_select.the_body).cached; +      string _old_uid = ""; +      if (!select_query_results.empty) { +        string _date_published = "0000"; +        string _close_para = ""; +        string _matched_ocn_open = ""; +        foreach (idx, row; select_query_results) { +          if (row["uid"].as!string != _old_uid) { +            _close_para = (idx == 1) ? "" : "</p>"; +            _matched_ocn_open = (idx == 1) ? "" : "<p class=\"matched_ocn\">"; +            _old_uid = row["uid"].as!string; +            _date_published = (row["date_published"].as!string.match(regex(r"^([0-9]{4})"))) +            ? row["date_published"].as!string : "0000"; // used in regex that breaks if no match +            auto m = _date_published.match(regex(r"^([0-9]{4})")); +            string _date = (m.hit == "0000") ? "(year?) " : "(" ~ m.hit ~ ") "; +            cgi.write( +              _close_para +              ~ "<hr><div class=\"publication\">" +                ~ "<p class=\"publication\"><a href=\"" +                  ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" +                  ~ row["language_document_char"].as!string ~ "/html/" +                  ~ row["src_filename_base"].as!string ~ "/" +                  ~ "toc.html" +                ~ "\">\"" +                  ~ row["title"].as!string ~ "\"" +                ~ "</a> " +                ~ _date +                ~ "[" ~ row["language_document_char"].as!string ~ "] " +                ~ row["creator_author_last_first"].as!string +                ~ " " +                ~ show_matched_objects(row["src_filename_base"].as!string) +                ~ "</p>" +              ~ "</div>" +            ); +          } +          if (cv.results_type == "txt") { +            if (row["ocn"].as!string != "0") { +              cgi.write( +                "<div class=\"flex-container\">" +                ~ "<div class=\"textview_ocn\" style=\"flex: 0 0 1.2em\">" +                  ~ "<p class=\"ocn_is\"><a href=\"" +                    ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" +                    ~ row["language_document_char"].as!string ~ "/html/" +                    ~ row["src_filename_base"].as!string ~ "/" +                    ~ row["seg_name"].as!string ~ ".html#" ~ row["ocn"].as!string +                  ~ "\">" +                    ~ row["ocn"].as!string +                  ~ "</a>:</p>" +                ~ "</div>" +                ~ "<div class=\"textview_found\">" +                  ~ highlight_text_matched(row["body"].as!string, tf.text) +                ~ "</div>" +                ~ "</div>" +              ); +            } else { +              cgi.write( +                "<div class=\"flex-container\">" +                ~ "<div class=\"textview_ocn\" style=\"flex: 0 0 1.2em\">" +                  ~ "<p class=\"ocn_is\"><a href=\"" +                    ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" +                    ~ row["language_document_char"].as!string ~ "/html/" +                    ~ row["src_filename_base"].as!string ~ "/toc.html" +                  ~ "\">" +                    ~ row["ocn"].as!string +                  ~ "</a>:</p>" +                ~ "</div>" +                ~ "<div class=\"textview_found\">" +                  ~ highlight_text_matched(row["body"].as!string, tf.text) +                ~ "</div>" +                ~ "</div>" +              ); +            } +          } else { +            if (row["ocn"].as!string != "0") { +              cgi.write( +                _matched_ocn_open +                ~ "<a href=\"" +                  ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" +                  ~ row["language_document_char"].as!string ~ "/html/" +                  ~ row["src_filename_base"].as!string ~ "/" +                  ~ row["seg_name"].as!string ~ ".html#" ~ row["ocn"].as!string +                ~ "\">" +                  ~ row["ocn"].as!string +                ~ "</a>, " +              ); +            } else { +              cgi.write( +                _matched_ocn_open +                ~ "<a href=\"" +                  ~ "https://" ~ conf.http_host ~ conf.doc_collection_sub_root ~ "/" +                  ~ row["language_document_char"].as!string ~ "/html/" +                  ~ row["src_filename_base"].as!string ~ "/toc.html" +                ~ "\">" +                  ~ row["ocn"].as!string +                ~ "</a>, " +              ); +            } +            _matched_ocn_open = ""; +          }          }          cgi.write( previous_next); diff --git a/src/doc_reform/io_out/epub3.d b/src/doc_reform/io_out/epub3.d index 07bd8ed..b930cdf 100644 --- a/src/doc_reform/io_out/epub3.d +++ b/src/doc_reform/io_out/epub3.d @@ -413,9 +413,9 @@ template outputEPub3() {        string[] doc_parts;      }      auto epubWrite = writeOut(); -  foreach (part; doc_matters.has.keys_seq.seg) { -    foreach (obj; doc_abstraction[part]) { -      string _txt = xhtml_format.special_characters(obj); +    foreach (part; doc_matters.has.keys_seq.seg) { +      foreach (obj; doc_abstraction[part]) { +        string _txt = xhtml_format.special_characters(obj);          if (obj.metainfo.is_a == "heading") {            assert(part == "head" || "toc" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail");            switch (obj.metainfo.heading_lev_markup) { diff --git a/src/doc_reform/io_out/html.d b/src/doc_reform/io_out/html.d index 7e5f51f..d314ed4 100644 --- a/src/doc_reform/io_out/html.d +++ b/src/doc_reform/io_out/html.d @@ -560,7 +560,6 @@ template outputHTML() {      M    doc_matters,    ) {      { /+ (copy html images) +/ -          auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language);        if (!exists(pth_html.image)) {          pth_html.image.mkdirRecurse; diff --git a/src/doc_reform/io_out/latex.d b/src/doc_reform/io_out/latex.d index 117b3e7..5b1309a 100644 --- a/src/doc_reform/io_out/latex.d +++ b/src/doc_reform/io_out/latex.d @@ -789,19 +789,19 @@ string table(O,M)(      M      doc_matters,      string paper_size_orientation,    ) { -  struct paperTypeLatex { -    string a4_portrait; -    string a4_landscape; -    string a5_portrait; -    string a5_landscape; -    string b4_portrait; -    string b4_landscape; -    string us_letter_portrait; -    string us_letter_landscape; -    string us_legal_portrait; -    string us_legal_landscape; -  } -  auto paper_type_latex           = paperTypeLatex(); +    struct paperTypeLatex { +      string a4_portrait; +      string a4_landscape; +      string a5_portrait; +      string a5_landscape; +      string b4_portrait; +      string b4_landscape; +      string us_letter_portrait; +      string us_letter_landscape; +      string us_legal_portrait; +      string us_legal_landscape; +    } +    auto paper_type_latex           = paperTypeLatex();      string _footer(M)(M doc_matters) {        string _ft = "\\lfoot[\\textrm{\\thepage}]";        string _ft_1 = format(q"┃{\tiny \href{%s}{%s}}┃", "https://sisudoc.org", "SiSU",); @@ -830,39 +830,39 @@ string table(O,M)(        }        return _ft;      } -struct paperMargins { -  string portrait; -  string landscape; -} -auto margins           = paperMargins(); -margins.portrait    = format(q"┃ +  struct paperMargins { +    string portrait; +    string landscape; +  } +  auto margins           = paperMargins(); +  margins.portrait    = format(q"┃  \setlength{\oddsidemargin}{0mm} \setlength{\evensidemargin}{0mm}  \setlength{\topmargin}{-12pt} \setlength{\headheight}{12pt}  \setlength{\headsep}{35pt}  ┃",    ); -margins.landscape    = format(q"┃ +  margins.landscape    = format(q"┃  \setlength{\oddsidemargin}{6mm} \setlength{\evensidemargin}{6mm}  \setlength{\topmargin}{-12mm} \setlength{\headheight}{12pt}  \setlength{\headsep}{20pt}  ┃",    ); -struct columnsMulti { -  string portrait; -  string landscape; -} -auto multicol           = columnsMulti(); -multicol.portrait    = format(q"┃ +  struct columnsMulti { +    string portrait; +    string landscape; +  } +  auto multicol           = columnsMulti(); +  multicol.portrait    = format(q"┃  \usepackage{multicol}  ┃",    ); -multicol.landscape    = ""; -struct colorLinks { -  string mono; -  string color; -} -auto links           = colorLinks(); -links.mono    = format(q"┃ +  multicol.landscape    = ""; +  struct colorLinks { +    string mono; +    string color; +  } +  auto links           = colorLinks(); +  links.mono    = format(q"┃  \usepackage[xetex,    colorlinks=true,    urlcolor=myblack, @@ -870,7 +870,7 @@ links.mono    = format(q"┃    linkcolor=myblack,  ┃",    ); -links.color    = format(q"┃ +  links.color    = format(q"┃  \usepackage[xetex,    colorlinks=true,    urlcolor=myblue,    %% \href{...}{...}   external url @@ -1271,25 +1271,25 @@ links.color    = format(q"┃            default: break;            }            break; -      case "comment": -        break; -      default: -        { /+ debug +/ -          if (doc_matters.opt.action.debug_do -          && doc_matters.opt.action.verbose) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part); -            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a); -            writeln(__FILE__, ":", __LINE__, ": ", obj.text); +        case "comment": +          break; +        default: +          { /+ debug +/ +            if (doc_matters.opt.action.debug_do +            && doc_matters.opt.action.verbose) { +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a); +              writeln(__FILE__, ":", __LINE__, ": ", obj.text); +            }            } +          break;          } -        break;        }      } -  } -  if (_multicolumns) { -    _multicolumns = false; -    _latex_body ~= "\n\\end{multicols}\n"; -  } +    if (_multicolumns) { +      _multicolumns = false; +      _latex_body ~= "\n\\end{multicols}\n"; +    }      return _latex_body;    }    string latex_tail(M)( diff --git a/src/doc_reform/io_out/source_pod.d b/src/doc_reform/io_out/source_pod.d index 47f1570..484d418 100644 --- a/src/doc_reform/io_out/source_pod.d +++ b/src/doc_reform/io_out/source_pod.d @@ -421,7 +421,7 @@ template spinePod() {            // Handle errors          }        } -       +      // source pod zip      } catch (ErrnoException ex) {        // Handle error      } diff --git a/src/doc_reform/io_out/sqlite.d b/src/doc_reform/io_out/sqlite.d index cb7b065..8bb5789 100644 --- a/src/doc_reform/io_out/sqlite.d +++ b/src/doc_reform/io_out/sqlite.d @@ -1039,61 +1039,61 @@ template SQLiteInsertMetadata() {    ) {      string _uid = SQLinsertDelimiter!()(doc_matters.src.doc_uid);      string _insert_metadata = format(q"┃ -    INSERT INTO metadata_and_text ( -      uid, -      src_filename_base, -      src_filename_suffix, -      src_composite_id_per_txt, -      src_composite_id_per_pod, -      title, -      title_main, -      title_sub, -      title_short, -      title_edition, -      title_language, -      creator_author, -      creator_author_last_first, -      creator_author_email, -      creator_illustrator, -      creator_translator, -      language_document, -      language_document_char, -      date_added_to_site, -      date_available, -      date_created, -      date_issued, -      date_modified, -      date_published, -      date_valid, -      rights_copyright, -      rights_copyright_audio, -      rights_copyright_cover, -      rights_copyright_illustrations, -      rights_copyright_photographs, -      rights_copyright_text, -      rights_copyright_translation, -      rights_copyright_video, -      rights_license, -      identifier_oclc, -      identifier_isbn, -      classify_dewey, -      classify_keywords, -      classify_loc, -      classify_subject, -      classify_topic_register, -      original_title, -      original_publisher, -      original_language, -      original_language_char, -      original_source, -      notes_abstract, -      notes_description, -      publisher, -      site_url_doc_root -    ) -    VALUES ( -      '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' -    ); +      INSERT INTO metadata_and_text ( +        uid, +        src_filename_base, +        src_filename_suffix, +        src_composite_id_per_txt, +        src_composite_id_per_pod, +        title, +        title_main, +        title_sub, +        title_short, +        title_edition, +        title_language, +        creator_author, +        creator_author_last_first, +        creator_author_email, +        creator_illustrator, +        creator_translator, +        language_document, +        language_document_char, +        date_added_to_site, +        date_available, +        date_created, +        date_issued, +        date_modified, +        date_published, +        date_valid, +        rights_copyright, +        rights_copyright_audio, +        rights_copyright_cover, +        rights_copyright_illustrations, +        rights_copyright_photographs, +        rights_copyright_text, +        rights_copyright_translation, +        rights_copyright_video, +        rights_license, +        identifier_oclc, +        identifier_isbn, +        classify_dewey, +        classify_keywords, +        classify_loc, +        classify_subject, +        classify_topic_register, +        original_title, +        original_publisher, +        original_language, +        original_language_char, +        original_source, +        notes_abstract, +        notes_description, +        publisher, +        site_url_doc_root +      ) +      VALUES ( +        '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' +      );      ┃",        _uid,        SQLinsertDelimiter!()(doc_matters.src.filename_base), @@ -1151,17 +1151,17 @@ template SQLiteInsertMetadata() {        foreach (topic; doc_matters.conf_make_meta.meta.classify_topic_register_arr) {          string[] subject_tree = topic.split(mkup.sep);      _insert_topics ~= format(q"┃ -    INSERT INTO topic_register ( -      uid_metadata_and_text, -      topic_register_lv0, -      topic_register_lv1, -      topic_register_lv2, -      topic_register_lv3, -      topic_register_lv4 -    ) -    VALUES ( -      '%s', '%s', '%s', '%s', '%s', '%s' -    ); +      INSERT INTO topic_register ( +        uid_metadata_and_text, +        topic_register_lv0, +        topic_register_lv1, +        topic_register_lv2, +        topic_register_lv3, +        topic_register_lv4 +      ) +      VALUES ( +        '%s', '%s', '%s', '%s', '%s', '%s' +      );      ┃",        _uid,        (subject_tree.length > 0) ? subject_tree[0] : "", @@ -1184,20 +1184,20 @@ template SQLiteInsertDocObjectsLoop() {      auto url_html = spineUrlsHTML!()(doc_matters.conf_make_meta.conf.w_srv_data_root_url_html, doc_matters.src.language);      string insertDocObjectsRow(O)(O obj) {        string _insert_doc_objects_row = format(q"┃ -      INSERT INTO doc_objects ( -        uid_metadata_and_text, -        ocn, -        obj_id, -        clean, -        body, -        lev, -        is_of_type, -        is_a, -        seg_name -      ) -      VALUES ( -        '%s', %s, '%s', '%s', '%s', %s, '%s', '%s', '%s' -      ); +        INSERT INTO doc_objects ( +          uid_metadata_and_text, +          ocn, +          obj_id, +          clean, +          body, +          lev, +          is_of_type, +          is_a, +          seg_name +        ) +        VALUES ( +          '%s', %s, '%s', '%s', '%s', %s, '%s', '%s', '%s' +        );        ┃",          _uid,          obj.metainfo.ocn, diff --git a/src/doc_reform/meta/conf_make_meta_yaml.d b/src/doc_reform/meta/conf_make_meta_yaml.d index ef40a09..de218ee 100644 --- a/src/doc_reform/meta/conf_make_meta_yaml.d +++ b/src/doc_reform/meta/conf_make_meta_yaml.d @@ -786,7 +786,6 @@ template contentYAMLtoSpineStruct() {          _struct_composite.make.substitute               = _mk.substitute(_struct_composite.make_str.substitute);          _struct_composite.make.texpdf_font              = _mk.texpdf_font(_struct_composite.make_str.texpdf_font);        } -        /+ meta ------------------------------------------------------------------- +/        if (_struct_composite.meta.creator_author.empty) {          if ("creator" in _yaml @@ -1162,56 +1161,6 @@ template contentYAMLtoSpineStruct() {      return _struct_composite;    }  } -/+ -- Name: Spine, Doc Reform [a part of] -  - Description: documents, structuring, processing, publishing, search -    - static content generator - -  - Author: Ralph Amissah -    [ralph.amissah@gmail.com] - -  - Copyright: (C) 2015 - 2021 Ralph Amissah, All Rights -    Reserved. - -  - License: AGPL 3 or later: - -    Spine (SiSU), a framework for document structuring, publishing and -    search - -    Copyright (C) Ralph Amissah - -    This program is free software: you can redistribute it and/or modify it -    under the terms of the GNU AFERO General Public License as published by the -    Free Software Foundation, either version 3 of the License, or (at your -    option) any later version. - -    This program is distributed in the hope that it will be useful, but WITHOUT -    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -    FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -    more details. - -    You should have received a copy of the GNU General Public License along with -    this program. If not, see [https://www.gnu.org/licenses/]. - -    If you have Internet connection, the latest version of the AGPL should be -    available at these locations: -    [https://www.fsf.org/licensing/licenses/agpl.html] -    [https://www.gnu.org/licenses/agpl.html] - -  - Spine (by Doc Reform, related to SiSU) uses standard: -    - docReform markup syntax -      - standard SiSU markup syntax with modified headers and minor modifications -    - docReform object numbering -      - standard SiSU object citation numbering & system - -  - Homepages: -    [https://www.doc_reform.org] -    [https://www.sisudoc.org] - -  - Git -    [https://git.sisudoc.org/projects/?p=software/spine.git;a=summary] - -+/  template configParseYAMLreturnSpineStruct() {    import dyaml;    import @@ -1245,56 +1194,6 @@ template configParseYAMLreturnSpineStruct() {      return _make_and_meta_struct;    }  } -/+ -- Name: Spine, Doc Reform [a part of] -  - Description: documents, structuring, processing, publishing, search -    - static content generator - -  - Author: Ralph Amissah -    [ralph.amissah@gmail.com] - -  - Copyright: (C) 2015 - 2021 Ralph Amissah, All Rights -    Reserved. - -  - License: AGPL 3 or later: - -    Spine (SiSU), a framework for document structuring, publishing and -    search - -    Copyright (C) Ralph Amissah - -    This program is free software: you can redistribute it and/or modify it -    under the terms of the GNU AFERO General Public License as published by the -    Free Software Foundation, either version 3 of the License, or (at your -    option) any later version. - -    This program is distributed in the hope that it will be useful, but WITHOUT -    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -    FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -    more details. - -    You should have received a copy of the GNU General Public License along with -    this program. If not, see [https://www.gnu.org/licenses/]. - -    If you have Internet connection, the latest version of the AGPL should be -    available at these locations: -    [https://www.fsf.org/licensing/licenses/agpl.html] -    [https://www.gnu.org/licenses/agpl.html] - -  - Spine (by Doc Reform, related to SiSU) uses standard: -    - docReform markup syntax -      - standard SiSU markup syntax with modified headers and minor modifications -    - docReform object numbering -      - standard SiSU object citation numbering & system - -  - Homepages: -    [https://www.doc_reform.org] -    [https://www.sisudoc.org] - -  - Git -    [https://git.sisudoc.org/projects/?p=software/spine.git;a=summary] - -+/  template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() {    import      std.exception, diff --git a/src/doc_reform/meta/metadoc.d b/src/doc_reform/meta/metadoc.d index 3d04236..d8b252e 100644 --- a/src/doc_reform/meta/metadoc.d +++ b/src/doc_reform/meta/metadoc.d @@ -101,143 +101,143 @@ template spineAbstraction() {        writeln("step4 commence → (doc_matters)");      }      struct DocumentMatters { -    @safe auto generator_program() { -      struct Prog_ { -        @safe string project_name() { -          return "spine"; -        } -        @safe string name() { -          return program_info.name; -        } -        @safe string ver() { -          return program_info.ver; -        } -        @trusted string name_and_version() { -          return format("%s-%s", -            name, -            ver, -          ); -        } -        @safe string url_home() { -          return "https://sisudoc.org"; -        } -        @safe string url_git() { -          return "https://git.sisudoc.org/software/sisu"; -        } -        @safe auto compiler() { -          return program_info.compiler; -        } -        @safe auto stime() { -          return Clock.currTime(UTC()).toSimpleString(); +      @safe auto generator_program() { +        struct Prog_ { +          @safe string project_name() { +            return "spine"; +          } +          @safe string name() { +            return program_info.name; +          } +          @safe string ver() { +            return program_info.ver; +          } +          @trusted string name_and_version() { +            return format("%s-%s", +              name, +              ver, +            ); +          } +          @safe string url_home() { +            return "https://sisudoc.org"; +          } +          @safe string url_git() { +            return "https://git.sisudoc.org/software/sisu"; +          } +          @safe auto compiler() { +            return program_info.compiler; +          } +          @safe auto stime() { +            return Clock.currTime(UTC()).toSimpleString(); +          }          } +        return Prog_();        } -      return Prog_(); -    } -    @safe auto generated_time() { -      auto _st = Clock.currTime(UTC()); -      auto _time = _st.year.to!string -        ~ "-" ~ _st.month.to!int.to!string // prefer as month number -        ~ "-" ~ _st.day.to!string -        ~ " [" ~ _st.isoWeek.to!string ~ "/" ~ _st.dayOfWeek.to!int.to!string ~ "]" -        ~ " " ~ _st.hour.to!string -        ~ ":" ~ _st.minute.to!string -        ~ ":" ~ _st.second.to!string; -      return _time; -    } -    @safe auto conf_make_meta() { -      return _make_and_meta_struct; -    } -    @safe auto has() { -      return _doc_has_struct; -    } -    @safe auto env() { -      struct Env_ { -        @safe auto pwd() { -          return _manifest.env.pwd; -        } -        @safe auto home() { -          return _manifest.env.home; -        } +      @safe auto generated_time() { +        auto _st = Clock.currTime(UTC()); +        auto _time = _st.year.to!string +          ~ "-" ~ _st.month.to!int.to!string // prefer as month number +          ~ "-" ~ _st.day.to!string +          ~ " [" ~ _st.isoWeek.to!string ~ "/" ~ _st.dayOfWeek.to!int.to!string ~ "]" +          ~ " " ~ _st.hour.to!string +          ~ ":" ~ _st.minute.to!string +          ~ ":" ~ _st.second.to!string; +        return _time;        } -      return Env_(); -    } -    @safe auto opt() { -      struct Opt_ { -        @safe auto action() { -          /+ getopt options, commandline instructions, raw -           - processing instructions --epub --html etc. -           - command line config instructions --output -          +/ -          return _opt_action; -        } +      @safe auto conf_make_meta() { +        return _make_and_meta_struct;        } -      return Opt_(); -    } -    @safe auto src() { -      return _manifest.src; -    } -    @safe auto src_path_info() { -      return spinePathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); // would like (to have and use) relative path -    } -    @safe auto pod() { -      return _manifest.pod; -    } -    @safe auto sqlite() { -      struct SQLite_ { -        @safe string filename() { -          string _fn = ""; -          string _pth = ""; -          if (_opt_action.sqliteDB_filename.length > 0) { -            _fn = _opt_action.sqliteDB_filename; -          } else if (_make_and_meta_struct.conf.w_srv_db_sqlite_filename.length > 0) { -            _fn = _make_and_meta_struct.conf.w_srv_db_sqlite_filename; -          } -          return _fn; -        } -        @safe string path() { -          string _pth = ""; -          if (_opt_action.sqliteDB_path.length > 0) { -            _pth = _opt_action.sqliteDB_path; -          } else if (_make_and_meta_struct.conf.w_srv_db_sqlite_path.length > 0) { -            _pth = _make_and_meta_struct.conf.w_srv_db_sqlite_path; -          } -          return _pth; -        } -        @safe string cgi_filename() { -          string _fn = ""; -          if (_opt_action.cgi_sqlite_search_filename.length > 0) { -            _fn = _opt_action.cgi_sqlite_search_filename; -          } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script.length > 0) { -            _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script; -          } -          return _fn; +      @safe auto has() { +        return _doc_has_struct; +      } +      @safe auto env() { +        struct Env_ { +          @safe auto pwd() { +            return _manifest.env.pwd; +          } +          @safe auto home() { +            return _manifest.env.home; +          }          } -        @safe string cgi_filename_d() { -          string _fn = ""; -          if (_opt_action.cgi_sqlite_search_filename_d.length > 0) { -            _fn = _opt_action.cgi_sqlite_search_filename_d; -          } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d.length > 0) { -            _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d; -          } -          return _fn; +        return Env_(); +      } +      @safe auto opt() { +        struct Opt_ { +          @safe auto action() { +            /+ getopt options, commandline instructions, raw +             - processing instructions --epub --html etc. +             - command line config instructions --output +            +/ +            return _opt_action; +          }          } +        return Opt_();        } -      return SQLite_(); -    } -    @safe auto output_path() { -      return _make_and_meta_struct.conf.output_path; -    } -    @safe auto srcs() { -      struct SRC_ { -        auto file_insert_list() { -          return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; +      @safe auto src() { +        return _manifest.src; +      } +      @safe auto src_path_info() { +        return spinePathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); // would like (to have and use) relative path +      } +      @safe auto pod() { +        return _manifest.pod; +      } +      @safe auto sqlite() { +        struct SQLite_ { +          @safe string filename() { +            string _fn = ""; +            string _pth = ""; +            if (_opt_action.sqliteDB_filename.length > 0) { +              _fn = _opt_action.sqliteDB_filename; +            } else if (_make_and_meta_struct.conf.w_srv_db_sqlite_filename.length > 0) { +              _fn = _make_and_meta_struct.conf.w_srv_db_sqlite_filename; +            } +            return _fn; +          } +          @safe string path() { +            string _pth = ""; +            if (_opt_action.sqliteDB_path.length > 0) { +              _pth = _opt_action.sqliteDB_path; +            } else if (_make_and_meta_struct.conf.w_srv_db_sqlite_path.length > 0) { +              _pth = _make_and_meta_struct.conf.w_srv_db_sqlite_path; +            } +            return _pth; +          } +          @safe string cgi_filename() { +            string _fn = ""; +            if (_opt_action.cgi_sqlite_search_filename.length > 0) { +              _fn = _opt_action.cgi_sqlite_search_filename; +            } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script.length > 0) { +              _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script; +            } +            return _fn; +          } +          @safe string cgi_filename_d() { +            string _fn = ""; +            if (_opt_action.cgi_sqlite_search_filename_d.length > 0) { +              _fn = _opt_action.cgi_sqlite_search_filename_d; +            } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d.length > 0) { +              _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d; +            } +            return _fn; +          }          } -        auto image_list() { -          return _doc_has_struct.imagelist; +        return SQLite_(); +      } +      @safe auto output_path() { +        return _make_and_meta_struct.conf.output_path; +      } +      @safe auto srcs() { +        struct SRC_ { +          auto file_insert_list() { +            return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; +          } +          auto image_list() { +            return _doc_has_struct.imagelist; +          }          } +        return SRC_();        } -      return SRC_(); -    }      }      auto doc_matters = DocumentMatters();      if ((_opt_action.debug_do) | 
