diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2019-07-08 17:41:06 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2019-10-17 19:07:20 -0400 | 
| commit | 1319336d6f8ce2de9a1a6319917bee6be278ad5a (patch) | |
| tree | 132773a7a8bb44e9d456347f4d7de0c4ef2611d7 | |
| parent | harvests reorganized; adjustments: output, paths (diff) | |
0.7.4 sqlite related, also some xml paths
| -rw-r--r-- | org/default_paths.org | 199 | ||||
| -rw-r--r-- | org/doc_reform.org | 2 | ||||
| -rw-r--r-- | org/output_sqlite.org | 379 | ||||
| -rw-r--r-- | org/output_xmls.org | 20 | ||||
| -rw-r--r-- | src/doc_reform/output/epub3.d | 20 | ||||
| -rw-r--r-- | src/doc_reform/output/paths_output.d | 192 | ||||
| -rw-r--r-- | src/doc_reform/output/sqlite.d | 239 | ||||
| -rw-r--r-- | views/version.txt | 2 | 
8 files changed, 570 insertions, 483 deletions
| diff --git a/org/default_paths.org b/org/default_paths.org index dba021f..b1d6980 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -1026,47 +1026,6 @@ template DocReformOutPathsFnPd() {  }  #+END_SRC -** _url_                                                                 :url: - -#+name: template_paths_url -#+BEGIN_SRC d -template DocReformPathsUrl() { -  import std.format; -  mixin DocReformRgxInit; -  static auto rgx = Rgx(); -  auto DocReformPathsUrl(M)(M doc_matters) { -    struct _UrlPathsStruct { -      string doc_root() { -        string _doc_root = (doc_matters.conf_make_meta.conf.webserv_url_doc_path.length > 0) -        ? doc_matters.conf_make_meta.conf.webserv_url_doc_root -        : "file://" ~ doc_matters.output_path; -        return _doc_root; -      } -      string html_seg(string html_segname, string obj_id) { // TODO bespoke for sqlite -        string _url = format(q"┃%s/%s/html/%s/%s.html#%s┃", -          doc_root, -          doc_matters.src.language, -          doc_matters.src.filename_base, -          html_segname, -          obj_id -        ); -        if (html_segname.empty || obj_id.empty) { -          if ( -            doc_matters.opt.action.debug_do -            && doc_matters.opt.action.verbose -          ) { -            writeln("sqlite object missing segname or object id: ", _url); -          } -          _url = ""; -        } -        return _url; -      } -    } -    return _UrlPathsStruct(); -  } -} -#+END_SRC -  ** _html_                                                               :html:  *** relative @@ -1075,7 +1034,7 @@ template DocReformPathsUrl() {  template DocReformDocRootTreeHTML() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformDocRootTreeHTML(Lng)(Lng lng) { +  auto DocReformDocRootTreeHTML()(string lng) {      auto lng_pth = DocReformOutPaths!()("", lng);      string base_dir = "html";      string suffix = ".html"; @@ -1089,7 +1048,7 @@ template DocReformDocRootTreeHTML() {        string base_filename_seg(string fn_src) {          return base_filename(fn_src) ~ "." ~ lng;        } -      string docroot() { +      string doc_root() {          return asNormalizedPath(lng_pth.output_root).array;        }        string base() { @@ -1131,26 +1090,26 @@ template DocReformDocRootTreeHTML() {  }  #+END_SRC -*** absolute +*** absolute disk path  #+name: template_paths_html  #+BEGIN_SRC d  template DocReformPathsHTML() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformPathsHTML(Po,Lng)( -    Po  root_pth, -    Lng lng, +  auto DocReformPathsHTML()( +    string root_pth, +    string lng,    ) {      auto doc_tree = DocReformDocRootTreeHTML!()(lng);      string base_dir = "html";      string suffix = ".html";      struct _PathsStruct { -      string docroot() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.docroot)).array; +      string doc_root() { +        return asNormalizedPath(root_pth.chainPath(doc_tree.doc_root)).array;        }        string harvest(string fn_harvest) { -        return docroot ~ "/" ~ fn_harvest; +        return doc_root ~ "/" ~ fn_harvest;        }        string base() {          return asNormalizedPath(root_pth.chainPath(doc_tree.base)).array; @@ -1195,46 +1154,88 @@ template DocReformPathsHTML() {  #+name: template_paths_html  #+BEGIN_SRC d -template DocReformUrlPathsHTML() { +template DocReformUrlsHTML() { +  import std.format;    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformUrlPathsHTML(Po,Lng)( -    Po  root_pth, -    Lng lng, +  auto DocReformUrlsHTML()( +    string url_doc_root, +    string lng,    ) {      auto doc_tree = DocReformDocRootTreeHTML!()(lng);      string base_dir = "html";      string suffix = ".html";      struct _PathsStruct { -      string docroot() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.docroot)).array; +      string doc_root() { +        return url_doc_root ~ asNormalizedPath(doc_tree.doc_root).array;        }        string harvest(string fn_harvest) { -        return docroot ~ "/" ~ fn_harvest; +        return format(q"┃%s/%s┃", +          doc_root, +          fn_harvest, +        );        }        string base() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.base)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.base).array, +        );        }        string image() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.image)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.image).array, +        );        }        string css() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.css)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.css).array, +        );        }        string fn_seg_css() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_seg_css)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_seg_css).array, +        );        }        string fn_scroll_css() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_scroll_css)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_scroll_css).array, +        );        }        string seg(string fn_src) { -        return asNormalizedPath(root_pth.chainPath(doc_tree.seg(fn_src))).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.seg(fn_src)).array, +        );        }        string fn_scroll(string fn_src) { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_scroll(fn_src))).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_scroll(fn_src)).array, +        );        }        string fn_seg(string fn_src, string seg_filename) { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_seg(fn_src, seg_filename))).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_seg(fn_src, seg_filename)).array, +        ); +      } +      string fn_scroll_obj_num(string fn_src, string obj_num) { +        return format(q"┃%s/%s#%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_scroll(fn_src)).array, +          obj_num, +        ); +      } +      string fn_seg_obj_num(string fn_src, string seg_filename, string obj_num) { +        return format(q"┃%s/%s#%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_seg(fn_src, seg_filename)).array, +          obj_num, +        );        }        string tail_seg(string fn_src) {          return doc_tree.tail_seg(fn_src); @@ -1258,9 +1259,9 @@ template DocReformUrlPathsHTML() {  template DocReformPathsEPUB() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformPathsEPUB(Po,Lng)( -    Po  output_pth_root, -    Lng lng, +  auto DocReformPathsEPUB()( +    string output_pth_root, +    string lng,    ) {      auto out_pth = DocReformOutPaths!()(output_pth_root, lng);      string base_dir = "epub"; @@ -1271,44 +1272,50 @@ template DocReformPathsEPUB() {        string base_filename(string fn_src) {          return fn_src.baseName.stripExtension ~ "." ~ lng;        } -      string epub_file(string fn_src) { -        return asNormalizedPath(base.chainPath(base_filename(fn_src) ~ ".epub")).array; +      string base_filename(string fn_src) { +        return fn_src.baseName.stripExtension;        } -      string dirtop() { -        return "".chainPath("").array; +      string base_filename_epub(string fn_src) { +        return base_filename(fn_src) ~ "." ~ lng;        } -      string doc_meta_inf(string fn_src) { -        return asNormalizedPath(dirtop.chainPath("META-INF")).array; +      string doc_meta_inf() { +        return asNormalizedPath("META-INF").array;        } -      string doc_oebps(string fn_src) { -        return asNormalizedPath(dirtop.chainPath("OEBPS")).array; +      string doc_oebps() { +        return asNormalizedPath("OEBPS").array;        } -      string doc_oebps_css(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("css")).array; +      string doc_oebps_css() { +        return asNormalizedPath(doc_oebps.chainPath("css")).array;        } -      string doc_oebps_image(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("image")).array; +      string doc_oebps_image() { +        return asNormalizedPath(doc_oebps.chainPath("image")).array;        } -      string fn_mimetypes(string fn_src) { +      string epub_file(string fn_src) { +        return asNormalizedPath(base.chainPath(base_filename(fn_src) ~ ".epub")).array; +      } +      string dirtop() { +        return "".chainPath("").array; +      } +      string fn_mimetypes() {          return asNormalizedPath(dirtop.chainPath("mimetypes")).array;        } -      string fn_dmi_container_xml(string fn_src) { -        return asNormalizedPath(doc_meta_inf(fn_src).chainPath("container.xml")).array; +      string fn_dmi_container_xml() { +        return asNormalizedPath(doc_meta_inf.chainPath("container.xml")).array;        } -      string fn_oebps_toc_nav_xhtml(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("toc_nav.xhtml")).array; +      string fn_oebps_toc_nav_xhtml() { +        return asNormalizedPath(doc_oebps.chainPath("toc_nav.xhtml")).array;        } -      string fn_oebps_toc_ncx(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("toc.ncx")).array; +      string fn_oebps_toc_ncx() { +        return asNormalizedPath(doc_oebps.chainPath("toc.ncx")).array;        } -      string fn_oebps_content_opf(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("content.opf")).array; +      string fn_oebps_content_opf() { +        return asNormalizedPath(doc_oebps.chainPath("content.opf")).array;        } -      string fn_oebps_content_xhtml(string fn_src, string seg_filename) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath(seg_filename ~ ".xhtml")).array; +      string fn_oebps_content_xhtml(string seg_filename) { +        return asNormalizedPath(doc_oebps.chainPath(seg_filename ~ ".xhtml")).array;        } -      string fn_oebps_css(string fn_src) { -        return asNormalizedPath(doc_oebps_css(fn_src).chainPath("epub.css")).array; +      string fn_oebps_css() { +        return asNormalizedPath(doc_oebps_css.chainPath("epub.css")).array;        }        /+ debug +/        string dbg_docdir(string fn_src) { @@ -1469,9 +1476,9 @@ template DocReformPathsLaTeX() {  template DocReformPathsSQLiteDiscrete() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformPathsSQLiteDiscrete(Po,Lng)( -    Po  output_pth_root, -    Lng lng, +  auto DocReformPathsSQLiteDiscrete()( +    string output_pth_root, +    string lng,    ) {      struct _PathsStruct {        string base_filename(string fn_src) { diff --git a/org/doc_reform.org b/org/doc_reform.org index 798d680..848291f 100644 --- a/org/doc_reform.org +++ b/org/doc_reform.org @@ -27,7 +27,7 @@ struct Version {    int minor;    int patch;  } -enum _ver = Version(0, 7, 3); +enum _ver = Version(0, 7, 4);  #+END_SRC  ** compilation restrictions (supported compilers) diff --git a/org/output_sqlite.org b/org/output_sqlite.org index 2dc29f7..fc2603d 100644 --- a/org/output_sqlite.org +++ b/org/output_sqlite.org @@ -29,7 +29,9 @@ module doc_reform.output.sqlite;  import d2sqlite3;  import std.typecons : Nullable;  mixin DocReformOutputRgxInit; +mixin InternalMarkup;  static auto rgx = Rgx(); +static auto mkup = InlineMarkup();  long _metadata_tid_lastrowid;  template SQLiteHubBuildTablesAndPopulate() {    void SQLiteHubBuildTablesAndPopulate(D,M)( @@ -64,6 +66,7 @@ template SQLiteHubDiscreteBuildTablesAndPopulate() {      const D    doc_abstraction,            M    doc_matters,    ) { +    auto url_html = DocReformUrlsHTML!()(doc_matters.conf_make_meta.conf.webserv_url_doc_root, doc_matters.src.language);      auto pth_sqlite = DocReformPathsSQLiteDiscrete!()(doc_matters.output_path, doc_matters.src.language);      pth_sqlite.base.mkdirRecurse;      auto db = Database(pth_sqlite.sqlite_file(doc_matters.src.filename)); @@ -163,6 +166,7 @@ template SQLiteTablesReCreate() {        <<sqlite_statement_drop_existing_index>>        <<sqlite_statement_drop_existing_tables>>        <<sqlite_statement_create_table_metadata_and_src_txt>> +      <<sqlite_statement_create_table_topic_register>>        <<sqlite_statement_create_table_objects>>        <<sqlite_statement_create_index>>      ┃",); @@ -192,6 +196,7 @@ template SQLiteInsertMetadata() {      M doc_matters,    ) {      <<sqlite_formatted_insertions_doc_matters_metadata>> +    <<sqlite_formatted_insertions_topic_register>>      return _insert_metadata;    }  } @@ -206,7 +211,7 @@ template SQLiteInsertDocObjectsLoop() {            M    doc_matters,    ) {      string _uid = SQLinsertDelimiter!()(doc_matters.src.doc_uid); -    auto site_url = DocReformPathsUrl!()(doc_matters); +    auto url_html = DocReformUrlsHTML!()(doc_matters.conf_make_meta.conf.webserv_url_doc_root, doc_matters.src.language);      string insertDocObjectsRow(O)(O obj) {        <<sqlite_formatted_insertions_doc_objects>>        return _insert_doc_objects_row; @@ -229,6 +234,7 @@ template SQLiteTablesCreate() {            <<sqlite_statement_drop_existing_index>>            <<sqlite_statement_drop_existing_tables>>            <<sqlite_statement_create_table_metadata_and_src_txt>> +          <<sqlite_statement_create_table_topic_register>>            <<sqlite_statement_create_table_objects>>            <<sqlite_statement_create_index>>          ┃",); @@ -1457,6 +1463,7 @@ DROP INDEX IF EXISTS idx_classify_topic_register;  #+name: sqlite_statement_drop_existing_tables  #+BEGIN_SRC sql  DROP TABLE IF EXISTS metadata_and_text; +DROP TABLE IF EXISTS topic_register;  DROP TABLE IF EXISTS doc_objects;  DROP TABLE IF EXISTS urls;  #+END_SRC @@ -1467,15 +1474,14 @@ DROP TABLE IF EXISTS urls;  #+name: sqlite_statement_create_table_metadata_and_src_txt  #+BEGIN_SRC sql  CREATE TABLE metadata_and_text ( -  uid                              VARCHAR(256)      UNIQUE, /* filename, language char, pod/txt (decide on delimiter [,;:/]) */ -  src_composite_id_per_txt         VARCHAR(256)  NOT NULL,   /* UNIQUE, /* z pod name if any + src filename + language code */ -  src_composite_id_per_pod         VARCHAR(256)  NOT NULL,   /* z pod name if any + src filename */ +  uid                              VARCHAR(256)      UNIQUE, -- filename, language char, pod/txt (decide on delimiter [,;:/]) +  src_composite_id_per_txt         VARCHAR(256)  NOT NULL,   -- UNIQUE, z pod name if any + src filename + language code +  src_composite_id_per_pod         VARCHAR(256)  NOT NULL,   -- z pod name if any + src filename    title                            VARCHAR(800)  NOT NULL,    title_main                       VARCHAR(400)  NOT NULL,    title_sub                        VARCHAR(400)      NULL,    title_short                      VARCHAR(400)      NULL,    title_edition                    VARCHAR(10)       NULL, -  title_note                       VARCHAR(2500)     NULL,    title_language                   VARCHAR(100)      NULL,    title_language_char              VARCHAR(6)        NULL,    creator_author                   VARCHAR(600)  NOT NULL, @@ -1505,14 +1511,13 @@ CREATE TABLE metadata_and_text (    date_translated                  VARCHAR(10)       NULL,    date_original_publication        VARCHAR(10)       NULL,    date_generated                   VARCHAR(10)       NULL, -  publisher                        VARCHAR(600)      NULL, +  original_title                   VARCHAR(800)      NULL,    original_publisher               VARCHAR(600)      NULL,    original_language                VARCHAR(100)      NULL,    original_language_char           VARCHAR(6)        NULL,    original_source                  VARCHAR(600)      NULL,    original_institution             VARCHAR(600)      NULL,    original_nationality             VARCHAR(100)      NULL, -  original_title                   VARCHAR(800)      NULL,    rights_copyright                 VARCHAR(2500)     NULL,    rights_copyright_audio           VARCHAR(2500)     NULL,    rights_copyright_cover           VARCHAR(2500)     NULL, @@ -1541,18 +1546,58 @@ CREATE TABLE metadata_and_text (    notes_prefix_a                   TEXT              NULL,    notes_prefix_b                   TEXT              NULL,    notes_suffix                     TEXT              NULL, +  publisher                        VARCHAR(600)      NULL,    src_filename                     VARCHAR(256)  NOT NULL,    src_fingerprint                  VARCHAR(256)      NULL,    src_filesize                     VARCHAR(10)       NULL,    src_wordcount                    VARCHAR(10)       NULL, -  pod_name                         VARCHAR(256)      NULL, /* zipped pod, work to be done here */ -  pod_fingerprint                  VARCHAR(256)      NULL, /* zipped pod, work to be done here */ -  pod_size                         VARCHAR(10)       NULL, /* zipped pod, work to be done here */ -  site_url_doc_root                VARCHAR(256)      NULL, /* url path to doc root */ +  pod_name                         VARCHAR(256)      NULL, -- zipped pod, work to be done here +  pod_fingerprint                  VARCHAR(256)      NULL, -- zipped pod, work to be done here +  pod_size                         VARCHAR(10)       NULL, -- zipped pod, work to be done here +  site_url_doc_root                VARCHAR(256)      NULL, -- url path to doc root +  site_url_html_toc                VARCHAR(256)      NULL, +  site_url_html_scroll             VARCHAR(256)      NULL, +  site_url_epub                    VARCHAR(256)      NULL,    links                            TEXT              NULL  );  #+END_SRC +**** CREATE TABLE topic_register + +#+name: sqlite_statement_create_table_topic_register +#+BEGIN_SRC sql +CREATE TABLE topic_register ( +  -- tid                              BIGINT            PRIMARY KEY, +  uid_metadata_and_text            VARCHAR(256)      REFERENCES metadata_and_text(uid) ON DELETE CASCADE, +  -- src_composite_id_per_txt         VARCHAR(256)  NOT NULL,  - UNIQUE, - z pod name if any + src filename + language code +  -- src_composite_id_per_pod         VARCHAR(256)  NOT NULL,  - z pod name if any + src filename +  topic_register_lv0               VARCHAR(250)  NOT NULL, +  topic_register_lv1               VARCHAR(250)      NULL, +  topic_register_lv2               VARCHAR(250)      NULL, +  topic_register_lv3               VARCHAR(250)      NULL, +  topic_register_lv4               VARCHAR(250)      NULL, +  site_url_doc_root                VARCHAR(256)      NULL, -- url path to doc root +  site_url_html_toc                VARCHAR(256)      NULL, +  site_url_html_scroll             VARCHAR(256)      NULL +); +#+END_SRC + + +**** CREATE TABLE site_urls ? + +#+name: sqlite_statement_create_table_site_urls +#+BEGIN_SRC sql +CREATE TABLE site_urls ( +  -- tid                              BIGINT            PRIMARY KEY, +  uid_metadata_and_text            VARCHAR(256)      REFERENCES metadata_and_text(uid) ON DELETE CASCADE, +  src_composite_id_per_txt         VARCHAR(256)  NOT NULL, -- UNIQUE, - z pod name if any + src filename + language code +  src_composite_id_per_pod         VARCHAR(256)  NOT NULL, -- z pod name if any + src filename +  site_url_doc_root                VARCHAR(256)      NULL, -- url path to doc root +  site_url_html_toc                VARCHAR(256)      NULL, +  site_url_html_scroll             VARCHAR(256)      NULL +); +#+END_SRC +  **** CREATE TABLE doc_objects  #+name: sqlite_statement_create_table_objects @@ -1571,7 +1616,7 @@ CREATE TABLE doc_objects (    lev                              SMALLINT          NULL,    node                             VARCHAR(16)       NULL,    parent                           VARCHAR(16)       NULL, -  last_decendant                   VARCHAR(16)       NULL, /* headings only */ +  last_decendant                   VARCHAR(16)       NULL, -- headings only    digest_clean                     CHAR(256),    digest_all                       CHAR(256),    html_seg_url                     CHAR(256), @@ -1628,73 +1673,6 @@ WHERE uid_metadata_and_text = '%s';  #+END_SRC  *** inserts -**** INSERT doc objects - -lid unique, increment by 1 per object, not ocn - -metadata tid document number unique -either: -- increment by adding 1 for each document, -- make hash of document filename or url and use? - -***** sql statement: dlang format - -#+name: sqlite_formatted_insertions_doc_objects -#+BEGIN_SRC d -string _insert_doc_objects_row = format(q"┃ -#+END_SRC - -***** INSERT INTO - -#+name: sqlite_formatted_insertions_doc_objects -#+BEGIN_SRC sql -  INSERT INTO doc_objects ( -    uid_metadata_and_text, -    ocn, -    obj_id, -    clean, -    body, -    lev, -    is_of_type, -    is_a, -    html_seg_url -  ) -#+END_SRC - -***** VALUES - -#+name: sqlite_formatted_insertions_doc_objects -#+BEGIN_SRC sql -  VALUES ( -    '%s', -    %s, -    '%s', -    '%s', -    '%s', -    %s, -    '%s', -    '%s', -    '%s' -  ); -#+END_SRC - -***** dlang values for formatting - -#+name: sqlite_formatted_insertions_doc_objects -#+BEGIN_SRC d -┃", -  _uid, -  obj.metainfo.ocn, -  obj.metainfo.identifier, -  SQLinsertDelimiter!()(obj_txt["text"]), -  SQLinsertDelimiter!()(obj_txt["html"]), -  obj.metainfo.heading_lev_markup, -  obj.metainfo.is_of_type, -  obj.metainfo.is_a, -  site_url.html_seg(obj.tags.html_segment_anchor_tag_is, obj.metainfo.identifier), -); -#+END_SRC -  **** INSERT doc matters & metadata  ***** sql statement: dlang format @@ -1719,15 +1697,12 @@ string _insert_metadata = format(q"┃      title_short,      title_edition,      title_language, -    classify_dewey, -    classify_keywords, -    classify_loc, -    classify_subject, -    classify_topic_register,      creator_author,      creator_author_email,      creator_illustrator,      creator_translator, +    language_document, +    language_document_char,      date_added_to_site,      date_available,      date_created, @@ -1735,18 +1710,6 @@ string _insert_metadata = format(q"┃      date_modified,      date_published,      date_valid, -    identifier_isbn, -    identifier_oclc, -    language_document, -    language_document_char, -    notes_abstract, -    notes_description, -    original_publisher, -    original_language, -    original_language_char, -    original_source, -    original_title, -    publisher,      rights_copyright,      rights_copyright_audio,      rights_copyright_cover, @@ -1756,6 +1719,21 @@ string _insert_metadata = format(q"┃      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    )  #+END_SRC @@ -1765,54 +1743,7 @@ string _insert_metadata = format(q"┃  #+name: sqlite_formatted_insertions_doc_matters_metadata  #+BEGIN_SRC sql    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', '%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'    );  #+END_SRC @@ -1831,15 +1762,12 @@ string _insert_metadata = format(q"┃    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.title_short),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.title_edition),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.title_language), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_dewey), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_keywords), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_loc), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_subject), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_topic_register),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_author),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_author_email),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_illustrator),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_translator), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document_char),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_added_to_site),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_available),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_created), @@ -1847,18 +1775,6 @@ string _insert_metadata = format(q"┃    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_modified),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_published),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_valid), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_isbn), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_oclc), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document_char), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_abstract), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_description), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_publisher), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language_char), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_source), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_title), -  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.publisher),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_audio),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_cover), @@ -1868,8 +1784,149 @@ string _insert_metadata = format(q"┃    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_translation),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_video),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_license), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_oclc), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_isbn), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_dewey), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_keywords), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_loc), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_subject), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_topic_register), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_abstract), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_description), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_title), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_publisher), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language_char), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_source), +  SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.publisher),    SQLinsertDelimiter!()(doc_matters.conf_make_meta.conf.webserv_url_doc_root)  );  #+END_SRC +**** INSERT topic register + +writeln(doc_matters.conf_make_meta.meta.classify_topic_register_arr); + +***** { if topic register then loop topic register array + +#+name: sqlite_formatted_insertions_topic_register +#+BEGIN_SRC d +if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) { + +  string _insert_topics; +  foreach (topic; doc_matters.conf_make_meta.meta.classify_topic_register_arr) { +    string[] subject_tree = topic.split(mkup.sep); +#+END_SRC + +***** sql statement: dlang format + +#+name: sqlite_formatted_insertions_topic_register +#+BEGIN_SRC d +_insert_topics ~= format(q"┃ +#+END_SRC + +***** INSERT INTO + +#+name: sqlite_formatted_insertions_topic_register +#+BEGIN_SRC sql +  INSERT INTO topic_register ( +    uid_metadata_and_text, +    topic_register_lv0, +    topic_register_lv1, +    topic_register_lv2, +    topic_register_lv3, +    topic_register_lv4 +  ) +#+END_SRC + +***** VALUES + +#+name: sqlite_formatted_insertions_topic_register +#+BEGIN_SRC sql +  VALUES ( +    '%s', '%s', '%s', '%s', '%s', '%s' +  ); +#+END_SRC + +***** dlang values for formatting + +#+name: sqlite_formatted_insertions_topic_register +#+BEGIN_SRC d +┃", +  _uid, +  (subject_tree.length > 0) ? subject_tree[0] : "", +  (subject_tree.length > 1) ? subject_tree[1] : "", +  (subject_tree.length > 2) ? subject_tree[2] : "", +  (subject_tree.length > 3) ? subject_tree[3] : "", +  (subject_tree.length > 4) ? subject_tree[4] : "" +); +#+END_SRC + +***** } close topic register & loop topic register array + +#+name: sqlite_formatted_insertions_topic_register +#+BEGIN_SRC d +  } +} +#+END_SRC + +**** INSERT doc objects + +lid unique, increment by 1 per object, not ocn + +metadata tid document number unique +either: +- increment by adding 1 for each document, +- make hash of document filename or url and use? + +***** sql statement: dlang format + +#+name: sqlite_formatted_insertions_doc_objects +#+BEGIN_SRC d +string _insert_doc_objects_row = format(q"┃ +#+END_SRC + +***** INSERT INTO + +#+name: sqlite_formatted_insertions_doc_objects +#+BEGIN_SRC sql +  INSERT INTO doc_objects ( +    uid_metadata_and_text, +    ocn, +    obj_id, +    clean, +    body, +    lev, +    is_of_type, +    is_a, +    html_seg_url +  ) +#+END_SRC + +***** VALUES + +#+name: sqlite_formatted_insertions_doc_objects +#+BEGIN_SRC sql +  VALUES ( +    '%s', %s, '%s', '%s', '%s', %s, '%s', '%s', '%s' +  ); +#+END_SRC + +***** dlang values for formatting + +#+name: sqlite_formatted_insertions_doc_objects +#+BEGIN_SRC d +┃", +  _uid, +  obj.metainfo.ocn, +  obj.metainfo.identifier, +  SQLinsertDelimiter!()(obj_txt["text"]), +  SQLinsertDelimiter!()(obj_txt["html"]), +  obj.metainfo.heading_lev_markup, +  obj.metainfo.is_of_type, +  obj.metainfo.is_a, +  url_html.fn_seg_obj_num(doc_matters.src.filename, obj.tags.html_segment_anchor_tag_is, obj.metainfo.identifier), +); +#+END_SRC +  * __END__ diff --git a/org/output_xmls.org b/org/output_xmls.org index 2eb0e48..5e312f2 100644 --- a/org/output_xmls.org +++ b/org/output_xmls.org @@ -2217,7 +2217,7 @@ string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) {      _uuid,      _uuid,      _uuid, -    (pth_epub3.fn_oebps_css(doc_matters.src.filename)).chompPrefix("OEBPS/"), +    (pth_epub3.fn_oebps_css).chompPrefix("OEBPS/"),    );    content ~= "    " ~ "<!-- Content Documents -->" ~ "\n  ";    content ~= parts["manifest_documents"]; @@ -2227,7 +2227,7 @@ string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) {      content ~= format(q"┃      <item id="%s" href="%s/%s" media-type="image/%s" />  ┃",        image.baseName.stripExtension, -      (pth_epub3.doc_oebps_image(doc_matters.src.filename)).chompPrefix("OEBPS/"), +      (pth_epub3.doc_oebps_image).chompPrefix("OEBPS/"),        image,        image.extension.chompPrefix("."),      ); @@ -2868,7 +2868,7 @@ void epub3_write_output_files(W,I)(      }      { /+ OEBPS/[segments].xhtml (the document contents) +/        foreach (seg_filename; doc_matters.has.segnames_lv_0_to_4) { -        string fn = pth_epub3.fn_oebps_content_xhtml(doc_matters.src.filename, seg_filename); +        string fn = pth_epub3.fn_oebps_content_xhtml(seg_filename);          auto zip_arc_member_file = new ArchiveMember();          zip_arc_member_file.name = fn;          auto zip_data = new OutBuffer(); @@ -2908,7 +2908,7 @@ void epub3_write_output_files(W,I)(            File(fn_dbg, "w").writeln(epub_write.mimetypes);          }        } -      fn = pth_epub3.fn_mimetypes(doc_matters.src.filename); +      fn = pth_epub3.fn_mimetypes;        EPUBzip(epub_write.mimetypes, fn);      }      { /+  META-INF/container.xml (identify doc root) +/ @@ -2918,7 +2918,7 @@ void epub3_write_output_files(W,I)(            File(fn_dbg, "w").writeln(epub_write.meta_inf_container_xml);          }        } -      fn = pth_epub3.fn_dmi_container_xml(doc_matters.src.filename); +      fn = pth_epub3.fn_dmi_container_xml;        EPUBzip(epub_write.meta_inf_container_xml, fn);      }      { /+ OEBPS/toc_nav.xhtml (navigation toc epub3) +/ @@ -2928,7 +2928,7 @@ void epub3_write_output_files(W,I)(            File(fn_dbg, "w").writeln(epub_write.oebps_toc_nav_xhtml);          }        } -      fn = pth_epub3.fn_oebps_toc_nav_xhtml(doc_matters.src.filename); +      fn = pth_epub3.fn_oebps_toc_nav_xhtml;        EPUBzip(epub_write.oebps_toc_nav_xhtml, fn);      }      { /+ OEBPS/toc.ncx (navigation toc epub2) +/ @@ -2938,7 +2938,7 @@ void epub3_write_output_files(W,I)(            File(fn_dbg, "w").writeln(epub_write.oebps_toc_ncx);          }        } -      fn = pth_epub3.fn_oebps_toc_ncx(doc_matters.src.filename); +      fn = pth_epub3.fn_oebps_toc_ncx;        EPUBzip(epub_write.oebps_toc_ncx, fn);      }      { /+ OEBPS/content.opf (doc manifest) +/ @@ -2948,7 +2948,7 @@ void epub3_write_output_files(W,I)(            File(fn_dbg, "w").writeln(epub_write.oebps_content_opf);          }        } -      fn = pth_epub3.fn_oebps_content_opf(doc_matters.src.filename); +      fn = pth_epub3.fn_oebps_content_opf;        EPUBzip(epub_write.oebps_content_opf, fn);      }      { /+ OEBPS/_sisu/image (images) +/ @@ -2968,7 +2968,7 @@ void epub3_write_output_files(W,I)(            }          }          auto fn_src = doc_matters.src.image_dir_path ~ "/" ~ image; -        auto fn_out =  pth_epub3.doc_oebps_image(doc_matters.src.filename.to!string) ~ "/" ~ image; +        auto fn_out =  pth_epub3.doc_oebps_image ~ "/" ~ image;          if (exists(fn_src)) {            {              auto zip_arc_member_file = new ArchiveMember(); @@ -2992,7 +2992,7 @@ void epub3_write_output_files(W,I)(            : File(fn_dbg, "w").writeln(css.dark.epub);          }        } -      fn = pth_epub3.fn_oebps_css(doc_matters.src.filename); +      fn = pth_epub3.fn_oebps_css;        auto zip_arc_member_file = new ArchiveMember();        zip_arc_member_file.name = fn;        auto zip_data = new OutBuffer(); diff --git a/src/doc_reform/output/epub3.d b/src/doc_reform/output/epub3.d index cdfd2a6..09dea3d 100644 --- a/src/doc_reform/output/epub3.d +++ b/src/doc_reform/output/epub3.d @@ -79,7 +79,7 @@ template outputEPub3() {        _uuid,        _uuid,        _uuid, -      (pth_epub3.fn_oebps_css(doc_matters.src.filename)).chompPrefix("OEBPS/"), +      (pth_epub3.fn_oebps_css).chompPrefix("OEBPS/"),      );      content ~= "    " ~ "<!-- Content Documents -->" ~ "\n  ";      content ~= parts["manifest_documents"]; @@ -89,7 +89,7 @@ template outputEPub3() {        content ~= format(q"┃      <item id="%s" href="%s/%s" media-type="image/%s" />    ┃",          image.baseName.stripExtension, -        (pth_epub3.doc_oebps_image(doc_matters.src.filename)).chompPrefix("OEBPS/"), +        (pth_epub3.doc_oebps_image).chompPrefix("OEBPS/"),          image,          image.extension.chompPrefix("."),        ); @@ -659,7 +659,7 @@ template outputEPub3() {        }        { /+ OEBPS/[segments].xhtml (the document contents) +/          foreach (seg_filename; doc_matters.has.segnames_lv_0_to_4) { -          string fn = pth_epub3.fn_oebps_content_xhtml(doc_matters.src.filename, seg_filename); +          string fn = pth_epub3.fn_oebps_content_xhtml(seg_filename);            auto zip_arc_member_file = new ArchiveMember();            zip_arc_member_file.name = fn;            auto zip_data = new OutBuffer(); @@ -699,7 +699,7 @@ template outputEPub3() {              File(fn_dbg, "w").writeln(epub_write.mimetypes);            }          } -        fn = pth_epub3.fn_mimetypes(doc_matters.src.filename); +        fn = pth_epub3.fn_mimetypes;          EPUBzip(epub_write.mimetypes, fn);        }        { /+  META-INF/container.xml (identify doc root) +/ @@ -709,7 +709,7 @@ template outputEPub3() {              File(fn_dbg, "w").writeln(epub_write.meta_inf_container_xml);            }          } -        fn = pth_epub3.fn_dmi_container_xml(doc_matters.src.filename); +        fn = pth_epub3.fn_dmi_container_xml;          EPUBzip(epub_write.meta_inf_container_xml, fn);        }        { /+ OEBPS/toc_nav.xhtml (navigation toc epub3) +/ @@ -719,7 +719,7 @@ template outputEPub3() {              File(fn_dbg, "w").writeln(epub_write.oebps_toc_nav_xhtml);            }          } -        fn = pth_epub3.fn_oebps_toc_nav_xhtml(doc_matters.src.filename); +        fn = pth_epub3.fn_oebps_toc_nav_xhtml;          EPUBzip(epub_write.oebps_toc_nav_xhtml, fn);        }        { /+ OEBPS/toc.ncx (navigation toc epub2) +/ @@ -729,7 +729,7 @@ template outputEPub3() {              File(fn_dbg, "w").writeln(epub_write.oebps_toc_ncx);            }          } -        fn = pth_epub3.fn_oebps_toc_ncx(doc_matters.src.filename); +        fn = pth_epub3.fn_oebps_toc_ncx;          EPUBzip(epub_write.oebps_toc_ncx, fn);        }        { /+ OEBPS/content.opf (doc manifest) +/ @@ -739,7 +739,7 @@ template outputEPub3() {              File(fn_dbg, "w").writeln(epub_write.oebps_content_opf);            }          } -        fn = pth_epub3.fn_oebps_content_opf(doc_matters.src.filename); +        fn = pth_epub3.fn_oebps_content_opf;          EPUBzip(epub_write.oebps_content_opf, fn);        }        { /+ OEBPS/_sisu/image (images) +/ @@ -759,7 +759,7 @@ template outputEPub3() {              }            }            auto fn_src = doc_matters.src.image_dir_path ~ "/" ~ image; -          auto fn_out =  pth_epub3.doc_oebps_image(doc_matters.src.filename.to!string) ~ "/" ~ image; +          auto fn_out =  pth_epub3.doc_oebps_image ~ "/" ~ image;            if (exists(fn_src)) {              {                auto zip_arc_member_file = new ArchiveMember(); @@ -783,7 +783,7 @@ template outputEPub3() {              : File(fn_dbg, "w").writeln(css.dark.epub);            }          } -        fn = pth_epub3.fn_oebps_css(doc_matters.src.filename); +        fn = pth_epub3.fn_oebps_css;          auto zip_arc_member_file = new ArchiveMember();          zip_arc_member_file.name = fn;          auto zip_data = new OutBuffer(); diff --git a/src/doc_reform/output/paths_output.d b/src/doc_reform/output/paths_output.d index 795da4c..0ca9fa7 100644 --- a/src/doc_reform/output/paths_output.d +++ b/src/doc_reform/output/paths_output.d @@ -77,45 +77,11 @@ template DocReformOutPathsFnPd() {      return _PathsStruct();    }  } -template DocReformPathsUrl() { -  import std.format; -  mixin DocReformRgxInit; -  static auto rgx = Rgx(); -  auto DocReformPathsUrl(M)(M doc_matters) { -    struct _UrlPathsStruct { -      string doc_root() { -        string _doc_root = (doc_matters.conf_make_meta.conf.webserv_url_doc_path.length > 0) -        ? doc_matters.conf_make_meta.conf.webserv_url_doc_root -        : "file://" ~ doc_matters.output_path; -        return _doc_root; -      } -      string html_seg(string html_segname, string obj_id) { // TODO bespoke for sqlite -        string _url = format(q"┃%s/%s/html/%s/%s.html#%s┃", -          doc_root, -          doc_matters.src.language, -          doc_matters.src.filename_base, -          html_segname, -          obj_id -        ); -        if (html_segname.empty || obj_id.empty) { -          if ( -            doc_matters.opt.action.debug_do -            && doc_matters.opt.action.verbose -          ) { -            writeln("sqlite object missing segname or object id: ", _url); -          } -          _url = ""; -        } -        return _url; -      } -    } -    return _UrlPathsStruct(); -  } -} +  template DocReformDocRootTreeHTML() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformDocRootTreeHTML(Lng)(Lng lng) { +  auto DocReformDocRootTreeHTML()(string lng) {      auto lng_pth = DocReformOutPaths!()("", lng);      string base_dir = "html";      string suffix = ".html"; @@ -129,7 +95,7 @@ template DocReformDocRootTreeHTML() {        string base_filename_seg(string fn_src) {          return base_filename(fn_src) ~ "." ~ lng;        } -      string docroot() { +      string doc_root() {          return asNormalizedPath(lng_pth.output_root).array;        }        string base() { @@ -172,19 +138,19 @@ template DocReformDocRootTreeHTML() {  template DocReformPathsHTML() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformPathsHTML(Po,Lng)( -    Po  root_pth, -    Lng lng, +  auto DocReformPathsHTML()( +    string root_pth, +    string lng,    ) {      auto doc_tree = DocReformDocRootTreeHTML!()(lng);      string base_dir = "html";      string suffix = ".html";      struct _PathsStruct { -      string docroot() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.docroot)).array; +      string doc_root() { +        return asNormalizedPath(root_pth.chainPath(doc_tree.doc_root)).array;        }        string harvest(string fn_harvest) { -        return docroot ~ "/" ~ fn_harvest; +        return doc_root ~ "/" ~ fn_harvest;        }        string base() {          return asNormalizedPath(root_pth.chainPath(doc_tree.base)).array; @@ -223,46 +189,88 @@ template DocReformPathsHTML() {      return _PathsStruct();    }  } -template DocReformUrlPathsHTML() { +template DocReformUrlsHTML() { +  import std.format;    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformUrlPathsHTML(Po,Lng)( -    Po  root_pth, -    Lng lng, +  auto DocReformUrlsHTML()( +    string url_doc_root, +    string lng,    ) {      auto doc_tree = DocReformDocRootTreeHTML!()(lng);      string base_dir = "html";      string suffix = ".html";      struct _PathsStruct { -      string docroot() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.docroot)).array; +      string doc_root() { +        return url_doc_root ~ asNormalizedPath(doc_tree.doc_root).array;        }        string harvest(string fn_harvest) { -        return docroot ~ "/" ~ fn_harvest; +        return format(q"┃%s/%s┃", +          doc_root, +          fn_harvest, +        );        }        string base() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.base)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.base).array, +        );        }        string image() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.image)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.image).array, +        );        }        string css() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.css)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.css).array, +        );        }        string fn_seg_css() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_seg_css)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_seg_css).array, +        );        }        string fn_scroll_css() { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_scroll_css)).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_scroll_css).array, +        );        }        string seg(string fn_src) { -        return asNormalizedPath(root_pth.chainPath(doc_tree.seg(fn_src))).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.seg(fn_src)).array, +        );        }        string fn_scroll(string fn_src) { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_scroll(fn_src))).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_scroll(fn_src)).array, +        );        }        string fn_seg(string fn_src, string seg_filename) { -        return asNormalizedPath(root_pth.chainPath(doc_tree.fn_seg(fn_src, seg_filename))).array; +        return format(q"┃%s/%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_seg(fn_src, seg_filename)).array, +        ); +      } +      string fn_scroll_obj_num(string fn_src, string obj_num) { +        return format(q"┃%s/%s#%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_scroll(fn_src)).array, +          obj_num, +        ); +      } +      string fn_seg_obj_num(string fn_src, string seg_filename, string obj_num) { +        return format(q"┃%s/%s#%s┃", +          url_doc_root, +          asNormalizedPath(doc_tree.fn_seg(fn_src, seg_filename)).array, +          obj_num, +        );        }        string tail_seg(string fn_src) {          return doc_tree.tail_seg(fn_src); @@ -280,9 +288,9 @@ template DocReformUrlPathsHTML() {  template DocReformPathsEPUB() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformPathsEPUB(Po,Lng)( -    Po  output_pth_root, -    Lng lng, +  auto DocReformPathsEPUB()( +    string output_pth_root, +    string lng,    ) {      auto out_pth = DocReformOutPaths!()(output_pth_root, lng);      string base_dir = "epub"; @@ -293,44 +301,50 @@ template DocReformPathsEPUB() {        string base_filename(string fn_src) {          return fn_src.baseName.stripExtension ~ "." ~ lng;        } -      string epub_file(string fn_src) { -        return asNormalizedPath(base.chainPath(base_filename(fn_src) ~ ".epub")).array; +      string base_filename(string fn_src) { +        return fn_src.baseName.stripExtension;        } -      string dirtop() { -        return "".chainPath("").array; +      string base_filename_epub(string fn_src) { +        return base_filename(fn_src) ~ "." ~ lng;        } -      string doc_meta_inf(string fn_src) { -        return asNormalizedPath(dirtop.chainPath("META-INF")).array; +      string doc_meta_inf() { +        return asNormalizedPath("META-INF").array;        } -      string doc_oebps(string fn_src) { -        return asNormalizedPath(dirtop.chainPath("OEBPS")).array; +      string doc_oebps() { +        return asNormalizedPath("OEBPS").array;        } -      string doc_oebps_css(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("css")).array; +      string doc_oebps_css() { +        return asNormalizedPath(doc_oebps.chainPath("css")).array;        } -      string doc_oebps_image(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("image")).array; +      string doc_oebps_image() { +        return asNormalizedPath(doc_oebps.chainPath("image")).array;        } -      string fn_mimetypes(string fn_src) { +      string epub_file(string fn_src) { +        return asNormalizedPath(base.chainPath(base_filename(fn_src) ~ ".epub")).array; +      } +      string dirtop() { +        return "".chainPath("").array; +      } +      string fn_mimetypes() {          return asNormalizedPath(dirtop.chainPath("mimetypes")).array;        } -      string fn_dmi_container_xml(string fn_src) { -        return asNormalizedPath(doc_meta_inf(fn_src).chainPath("container.xml")).array; +      string fn_dmi_container_xml() { +        return asNormalizedPath(doc_meta_inf.chainPath("container.xml")).array;        } -      string fn_oebps_toc_nav_xhtml(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("toc_nav.xhtml")).array; +      string fn_oebps_toc_nav_xhtml() { +        return asNormalizedPath(doc_oebps.chainPath("toc_nav.xhtml")).array;        } -      string fn_oebps_toc_ncx(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("toc.ncx")).array; +      string fn_oebps_toc_ncx() { +        return asNormalizedPath(doc_oebps.chainPath("toc.ncx")).array;        } -      string fn_oebps_content_opf(string fn_src) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath("content.opf")).array; +      string fn_oebps_content_opf() { +        return asNormalizedPath(doc_oebps.chainPath("content.opf")).array;        } -      string fn_oebps_content_xhtml(string fn_src, string seg_filename) { -        return asNormalizedPath(doc_oebps(fn_src).chainPath(seg_filename ~ ".xhtml")).array; +      string fn_oebps_content_xhtml(string seg_filename) { +        return asNormalizedPath(doc_oebps.chainPath(seg_filename ~ ".xhtml")).array;        } -      string fn_oebps_css(string fn_src) { -        return asNormalizedPath(doc_oebps_css(fn_src).chainPath("epub.css")).array; +      string fn_oebps_css() { +        return asNormalizedPath(doc_oebps_css.chainPath("epub.css")).array;        }        /+ debug +/        string dbg_docdir(string fn_src) { @@ -472,9 +486,9 @@ template DocReformPathsLaTeX() {  template DocReformPathsSQLiteDiscrete() {    mixin DocReformRgxInit;    static auto rgx = Rgx(); -  auto DocReformPathsSQLiteDiscrete(Po,Lng)( -    Po  output_pth_root, -    Lng lng, +  auto DocReformPathsSQLiteDiscrete()( +    string output_pth_root, +    string lng,    ) {      struct _PathsStruct {        string base_filename(string fn_src) { diff --git a/src/doc_reform/output/sqlite.d b/src/doc_reform/output/sqlite.d index 57c90e0..5bc1551 100644 --- a/src/doc_reform/output/sqlite.d +++ b/src/doc_reform/output/sqlite.d @@ -7,7 +7,9 @@ import  import d2sqlite3;  import std.typecons : Nullable;  mixin DocReformOutputRgxInit; +mixin InternalMarkup;  static auto rgx = Rgx(); +static auto mkup = InlineMarkup();  long _metadata_tid_lastrowid;  template SQLiteHubBuildTablesAndPopulate() {    void SQLiteHubBuildTablesAndPopulate(D,M)( @@ -61,6 +63,7 @@ template SQLiteHubDiscreteBuildTablesAndPopulate() {      const D    doc_abstraction,            M    doc_matters,    ) { +    auto url_html = DocReformUrlsHTML!()(doc_matters.conf_make_meta.conf.webserv_url_doc_root, doc_matters.src.language);      auto pth_sqlite = DocReformPathsSQLiteDiscrete!()(doc_matters.output_path, doc_matters.src.language);      pth_sqlite.base.mkdirRecurse;      auto db = Database(pth_sqlite.sqlite_file(doc_matters.src.filename)); @@ -867,18 +870,18 @@ template SQLiteTablesReCreate() {        DROP INDEX IF EXISTS idx_language_document_char;        DROP INDEX IF EXISTS idx_classify_topic_register;        DROP TABLE IF EXISTS metadata_and_text; +      DROP TABLE IF EXISTS topic_register;        DROP TABLE IF EXISTS doc_objects;        DROP TABLE IF EXISTS urls;        CREATE TABLE metadata_and_text ( -        uid                              VARCHAR(256)      UNIQUE, /* filename, language char, pod/txt (decide on delimiter [,;:/]) */ -        src_composite_id_per_txt         VARCHAR(256)  NOT NULL,   /* UNIQUE, /* z pod name if any + src filename + language code */ -        src_composite_id_per_pod         VARCHAR(256)  NOT NULL,   /* z pod name if any + src filename */ +        uid                              VARCHAR(256)      UNIQUE, -- filename, language char, pod/txt (decide on delimiter [,;:/]) +        src_composite_id_per_txt         VARCHAR(256)  NOT NULL,   -- UNIQUE, z pod name if any + src filename + language code +        src_composite_id_per_pod         VARCHAR(256)  NOT NULL,   -- z pod name if any + src filename          title                            VARCHAR(800)  NOT NULL,          title_main                       VARCHAR(400)  NOT NULL,          title_sub                        VARCHAR(400)      NULL,          title_short                      VARCHAR(400)      NULL,          title_edition                    VARCHAR(10)       NULL, -        title_note                       VARCHAR(2500)     NULL,          title_language                   VARCHAR(100)      NULL,          title_language_char              VARCHAR(6)        NULL,          creator_author                   VARCHAR(600)  NOT NULL, @@ -908,14 +911,13 @@ template SQLiteTablesReCreate() {          date_translated                  VARCHAR(10)       NULL,          date_original_publication        VARCHAR(10)       NULL,          date_generated                   VARCHAR(10)       NULL, -        publisher                        VARCHAR(600)      NULL, +        original_title                   VARCHAR(800)      NULL,          original_publisher               VARCHAR(600)      NULL,          original_language                VARCHAR(100)      NULL,          original_language_char           VARCHAR(6)        NULL,          original_source                  VARCHAR(600)      NULL,          original_institution             VARCHAR(600)      NULL,          original_nationality             VARCHAR(100)      NULL, -        original_title                   VARCHAR(800)      NULL,          rights_copyright                 VARCHAR(2500)     NULL,          rights_copyright_audio           VARCHAR(2500)     NULL,          rights_copyright_cover           VARCHAR(2500)     NULL, @@ -944,16 +946,34 @@ template SQLiteTablesReCreate() {          notes_prefix_a                   TEXT              NULL,          notes_prefix_b                   TEXT              NULL,          notes_suffix                     TEXT              NULL, +        publisher                        VARCHAR(600)      NULL,          src_filename                     VARCHAR(256)  NOT NULL,          src_fingerprint                  VARCHAR(256)      NULL,          src_filesize                     VARCHAR(10)       NULL,          src_wordcount                    VARCHAR(10)       NULL, -        pod_name                         VARCHAR(256)      NULL, /* zipped pod, work to be done here */ -        pod_fingerprint                  VARCHAR(256)      NULL, /* zipped pod, work to be done here */ -        pod_size                         VARCHAR(10)       NULL, /* zipped pod, work to be done here */ -        site_url_doc_root                VARCHAR(256)      NULL, /* url path to doc root */ +        pod_name                         VARCHAR(256)      NULL, -- zipped pod, work to be done here +        pod_fingerprint                  VARCHAR(256)      NULL, -- zipped pod, work to be done here +        pod_size                         VARCHAR(10)       NULL, -- zipped pod, work to be done here +        site_url_doc_root                VARCHAR(256)      NULL, -- url path to doc root +        site_url_html_toc                VARCHAR(256)      NULL, +        site_url_html_scroll             VARCHAR(256)      NULL, +        site_url_epub                    VARCHAR(256)      NULL,          links                            TEXT              NULL        ); +      CREATE TABLE topic_register ( +        -- tid                              BIGINT            PRIMARY KEY, +        uid_metadata_and_text            VARCHAR(256)      REFERENCES metadata_and_text(uid) ON DELETE CASCADE, +        -- src_composite_id_per_txt         VARCHAR(256)  NOT NULL,  - UNIQUE, - z pod name if any + src filename + language code +        -- src_composite_id_per_pod         VARCHAR(256)  NOT NULL,  - z pod name if any + src filename +        topic_register_lv0               VARCHAR(250)  NOT NULL, +        topic_register_lv1               VARCHAR(250)      NULL, +        topic_register_lv2               VARCHAR(250)      NULL, +        topic_register_lv3               VARCHAR(250)      NULL, +        topic_register_lv4               VARCHAR(250)      NULL, +        site_url_doc_root                VARCHAR(256)      NULL, -- url path to doc root +        site_url_html_toc                VARCHAR(256)      NULL, +        site_url_html_scroll             VARCHAR(256)      NULL +      );        CREATE TABLE doc_objects (          lid                              BIGINT            PRIMARY KEY,          uid_metadata_and_text            VARCHAR(256)      REFERENCES metadata_and_text(uid) ON DELETE CASCADE, @@ -968,7 +988,7 @@ template SQLiteTablesReCreate() {          lev                              SMALLINT          NULL,          node                             VARCHAR(16)       NULL,          parent                           VARCHAR(16)       NULL, -        last_decendant                   VARCHAR(16)       NULL, /* headings only */ +        last_decendant                   VARCHAR(16)       NULL, -- headings only          digest_clean                     CHAR(256),          digest_all                       CHAR(256),          html_seg_url                     CHAR(256), @@ -1022,15 +1042,12 @@ template SQLiteInsertMetadata() {          title_short,          title_edition,          title_language, -        classify_dewey, -        classify_keywords, -        classify_loc, -        classify_subject, -        classify_topic_register,          creator_author,          creator_author_email,          creator_illustrator,          creator_translator, +        language_document, +        language_document_char,          date_added_to_site,          date_available,          date_created, @@ -1038,18 +1055,6 @@ template SQLiteInsertMetadata() {          date_modified,          date_published,          date_valid, -        identifier_isbn, -        identifier_oclc, -        language_document, -        language_document_char, -        notes_abstract, -        notes_description, -        original_publisher, -        original_language, -        original_language_char, -        original_source, -        original_title, -        publisher,          rights_copyright,          rights_copyright_audio,          rights_copyright_cover, @@ -1059,57 +1064,25 @@ template SQLiteInsertMetadata() {          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', '%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, @@ -1122,15 +1095,12 @@ template SQLiteInsertMetadata() {        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.title_short),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.title_edition),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.title_language), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_dewey), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_keywords), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_loc), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_subject), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_topic_register),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_author),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_author_email),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_illustrator),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.creator_translator), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document_char),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_added_to_site),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_available),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_created), @@ -1138,18 +1108,6 @@ template SQLiteInsertMetadata() {        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_modified),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_published),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.date_valid), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_isbn), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_oclc), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.language_document_char), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_abstract), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_description), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_publisher), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language_char), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_source), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_title), -      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.publisher),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_audio),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_cover), @@ -1159,8 +1117,50 @@ template SQLiteInsertMetadata() {        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_translation),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_copyright_video),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.rights_license), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_oclc), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.identifier_isbn), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_dewey), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_keywords), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_loc), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_subject), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.classify_topic_register), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_abstract), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.notes_description), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_title), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_publisher), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_language_char), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.original_source), +      SQLinsertDelimiter!()(doc_matters.conf_make_meta.meta.publisher),        SQLinsertDelimiter!()(doc_matters.conf_make_meta.conf.webserv_url_doc_root)      ); +    if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) { +     +      string _insert_topics; +      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' +      ); +    ┃", +      _uid, +      (subject_tree.length > 0) ? subject_tree[0] : "", +      (subject_tree.length > 1) ? subject_tree[1] : "", +      (subject_tree.length > 2) ? subject_tree[2] : "", +      (subject_tree.length > 3) ? subject_tree[3] : "", +      (subject_tree.length > 4) ? subject_tree[4] : "" +    ); +      } +    }      return _insert_metadata;    }  } @@ -1170,7 +1170,7 @@ template SQLiteInsertDocObjectsLoop() {            M    doc_matters,    ) {      string _uid = SQLinsertDelimiter!()(doc_matters.src.doc_uid); -    auto site_url = DocReformPathsUrl!()(doc_matters); +    auto url_html = DocReformUrlsHTML!()(doc_matters.conf_make_meta.conf.webserv_url_doc_root, doc_matters.src.language);      string insertDocObjectsRow(O)(O obj) {        string _insert_doc_objects_row = format(q"┃          INSERT INTO doc_objects ( @@ -1185,15 +1185,7 @@ template SQLiteInsertDocObjectsLoop() {            html_seg_url          )          VALUES ( -          '%s', -          %s, -          '%s', -          '%s', -          '%s', -          %s, -          '%s', -          '%s', -          '%s' +          '%s', %s, '%s', '%s', '%s', %s, '%s', '%s', '%s'          );        ┃",          _uid, @@ -1204,7 +1196,7 @@ template SQLiteInsertDocObjectsLoop() {          obj.metainfo.heading_lev_markup,          obj.metainfo.is_of_type,          obj.metainfo.is_a, -        site_url.html_seg(obj.tags.html_segment_anchor_tag_is, obj.metainfo.identifier), +        url_html.fn_seg_obj_num(doc_matters.src.filename, obj.tags.html_segment_anchor_tag_is, obj.metainfo.identifier),        );        return _insert_doc_objects_row;      } @@ -1403,18 +1395,18 @@ template SQLiteTablesCreate() {            DROP INDEX IF EXISTS idx_language_document_char;            DROP INDEX IF EXISTS idx_classify_topic_register;            DROP TABLE IF EXISTS metadata_and_text; +          DROP TABLE IF EXISTS topic_register;            DROP TABLE IF EXISTS doc_objects;            DROP TABLE IF EXISTS urls;            CREATE TABLE metadata_and_text ( -            uid                              VARCHAR(256)      UNIQUE, /* filename, language char, pod/txt (decide on delimiter [,;:/]) */ -            src_composite_id_per_txt         VARCHAR(256)  NOT NULL,   /* UNIQUE, /* z pod name if any + src filename + language code */ -            src_composite_id_per_pod         VARCHAR(256)  NOT NULL,   /* z pod name if any + src filename */ +            uid                              VARCHAR(256)      UNIQUE, -- filename, language char, pod/txt (decide on delimiter [,;:/]) +            src_composite_id_per_txt         VARCHAR(256)  NOT NULL,   -- UNIQUE, z pod name if any + src filename + language code +            src_composite_id_per_pod         VARCHAR(256)  NOT NULL,   -- z pod name if any + src filename              title                            VARCHAR(800)  NOT NULL,              title_main                       VARCHAR(400)  NOT NULL,              title_sub                        VARCHAR(400)      NULL,              title_short                      VARCHAR(400)      NULL,              title_edition                    VARCHAR(10)       NULL, -            title_note                       VARCHAR(2500)     NULL,              title_language                   VARCHAR(100)      NULL,              title_language_char              VARCHAR(6)        NULL,              creator_author                   VARCHAR(600)  NOT NULL, @@ -1444,14 +1436,13 @@ template SQLiteTablesCreate() {              date_translated                  VARCHAR(10)       NULL,              date_original_publication        VARCHAR(10)       NULL,              date_generated                   VARCHAR(10)       NULL, -            publisher                        VARCHAR(600)      NULL, +            original_title                   VARCHAR(800)      NULL,              original_publisher               VARCHAR(600)      NULL,              original_language                VARCHAR(100)      NULL,              original_language_char           VARCHAR(6)        NULL,              original_source                  VARCHAR(600)      NULL,              original_institution             VARCHAR(600)      NULL,              original_nationality             VARCHAR(100)      NULL, -            original_title                   VARCHAR(800)      NULL,              rights_copyright                 VARCHAR(2500)     NULL,              rights_copyright_audio           VARCHAR(2500)     NULL,              rights_copyright_cover           VARCHAR(2500)     NULL, @@ -1480,16 +1471,34 @@ template SQLiteTablesCreate() {              notes_prefix_a                   TEXT              NULL,              notes_prefix_b                   TEXT              NULL,              notes_suffix                     TEXT              NULL, +            publisher                        VARCHAR(600)      NULL,              src_filename                     VARCHAR(256)  NOT NULL,              src_fingerprint                  VARCHAR(256)      NULL,              src_filesize                     VARCHAR(10)       NULL,              src_wordcount                    VARCHAR(10)       NULL, -            pod_name                         VARCHAR(256)      NULL, /* zipped pod, work to be done here */ -            pod_fingerprint                  VARCHAR(256)      NULL, /* zipped pod, work to be done here */ -            pod_size                         VARCHAR(10)       NULL, /* zipped pod, work to be done here */ -            site_url_doc_root                VARCHAR(256)      NULL, /* url path to doc root */ +            pod_name                         VARCHAR(256)      NULL, -- zipped pod, work to be done here +            pod_fingerprint                  VARCHAR(256)      NULL, -- zipped pod, work to be done here +            pod_size                         VARCHAR(10)       NULL, -- zipped pod, work to be done here +            site_url_doc_root                VARCHAR(256)      NULL, -- url path to doc root +            site_url_html_toc                VARCHAR(256)      NULL, +            site_url_html_scroll             VARCHAR(256)      NULL, +            site_url_epub                    VARCHAR(256)      NULL,              links                            TEXT              NULL            ); +          CREATE TABLE topic_register ( +            -- tid                              BIGINT            PRIMARY KEY, +            uid_metadata_and_text            VARCHAR(256)      REFERENCES metadata_and_text(uid) ON DELETE CASCADE, +            -- src_composite_id_per_txt         VARCHAR(256)  NOT NULL,  - UNIQUE, - z pod name if any + src filename + language code +            -- src_composite_id_per_pod         VARCHAR(256)  NOT NULL,  - z pod name if any + src filename +            topic_register_lv0               VARCHAR(250)  NOT NULL, +            topic_register_lv1               VARCHAR(250)      NULL, +            topic_register_lv2               VARCHAR(250)      NULL, +            topic_register_lv3               VARCHAR(250)      NULL, +            topic_register_lv4               VARCHAR(250)      NULL, +            site_url_doc_root                VARCHAR(256)      NULL, -- url path to doc root +            site_url_html_toc                VARCHAR(256)      NULL, +            site_url_html_scroll             VARCHAR(256)      NULL +          );            CREATE TABLE doc_objects (              lid                              BIGINT            PRIMARY KEY,              uid_metadata_and_text            VARCHAR(256)      REFERENCES metadata_and_text(uid) ON DELETE CASCADE, @@ -1504,7 +1513,7 @@ template SQLiteTablesCreate() {              lev                              SMALLINT          NULL,              node                             VARCHAR(16)       NULL,              parent                           VARCHAR(16)       NULL, -            last_decendant                   VARCHAR(16)       NULL, /* headings only */ +            last_decendant                   VARCHAR(16)       NULL, -- headings only              digest_clean                     CHAR(256),              digest_all                       CHAR(256),              html_seg_url                     CHAR(256), diff --git a/views/version.txt b/views/version.txt index ace7cb6..311e123 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,7 +4,7 @@ struct Version {    int minor;    int patch;  } -enum _ver = Version(0, 7, 3); +enum _ver = Version(0, 7, 4);  version (Posix) {    version (DigitalMars) {    } else version (LDC) { | 
