#+TITLE: sdp default paths
#+AUTHOR: Ralph Amissah
#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]]
#+DESCRIPTION for documents - structuring, publishing in multiple formats and search
#+KEYWORDS
#+LANGUAGE: en
#+STARTUP: indent content
#+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+OPTIONS: author:nil email:nil creator:nil timestamp:nil
#+PROPERTY: header-args :padline no :exports code :noweb yes
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+FILETAGS: :sdp:rel:path:file:
#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)

[[./sdp.org][sdp]]  [[./][org/]]
* 0. source paths                                   :module:sdp:paths_source:
** 0. module template

#+BEGIN_SRC d :tangle ../src/sdp/output/paths_source.d
/++
  read configuration files<BR>
  - read config files<BR>
  meta_config_files.d
+/
module sdp.output.paths_source;
import std.array,
  std.path,
  std.regex,
  std.stdio;
import sdp.meta.rgx;
template SiSUpathsSRC() {
  mixin SiSUrgxInit;
  static auto rgx = Rgx();
  auto SiSUpathsSRC(D,Fn)(
    D   _pwd,
    Fn  _fn_src_and_relative_path,
  ) {
    struct SisuSrcPaths {
      auto pwd() {
        return _pwd;
      }
      auto language() {
        // use command line info as well?
        string _k;
        if (auto m = _fn_src_and_relative_path.match(rgx.language_code_and_filename)) {
          _k = m.captures[1];
        } else {
          _k = "xx"; // original default was "en" but is not known
        }
        return _k;
      }
      auto doc_root() {
        return "sisudoc";
      }
      auto text_root() {
        return doc_root.chainPath("text").array;
      }
      auto media_root() {
        return doc_root.chainPath("docmedia").array;
      }
      auto conf_root() {
        return doc_root.chainPath("conf").array;
      }
      auto image_root() {
        return media_root.chainPath("image").array;
      }
      auto doc_src_fn_with_path_for_text_root_and_lng() {
        return text_root.chainPath(language).array;
      }
      auto doc_src_with_relative_path() {
        return pwd.chainPath(_fn_src_and_relative_path).array;
      }
      auto doc_src_fn() {
        return _fn_src_and_relative_path.baseName.array;
      }
    }
    return SisuSrcPaths();
  }
}
#+END_SRC

* 1. output paths                                   :module:sdp:paths_output:
** 0. module template

#+BEGIN_SRC d :tangle ../src/sdp/output/paths_output.d
/++
  default settings
+/
module sdp.output.paths_output;
import std.array,
  std.path,
  std.regex,
  std.stdio;
import sdp.meta.rgx;
<<template_paths_sisupod>>
<<template_paths_sisupod_zipped_archive>>
<<template_paths_sisupod_unzipped_filesystem>>
<<template_paths_out>>
<<template_paths_html>>
<<template_paths_epub>>
#+END_SRC

** _sisupod_ (output bundled source)                                 :sisupod:

tree sisupod
sisupod
└── sisudoc
    ├── conf
    │   └── sisu_document_make
    ├── docmedia
    │   ├── audio
    │   ├── image
    │   └── video
    ├── sisudoc.txt
    └── text
        └── en

_replace:_

doc
├── en
│   └── the_wealth_of_networks.yochai_benkler.sst
└── _sisu
    └── sisu_document_make

*** pod archive

#+name: template_paths_sisupod
#+BEGIN_SRC d
template SiSUpathsSisupod() {
  mixin SiSUrgxInit;
  static auto rgx = Rgx();
  string base_dir = "sisupod";
  string suffix = ".zip";
  auto SiSUpathsSisupod()() {
    struct _PathsStruct {
      string base_filename(string fn_src) {
        return fn_src.baseName.stripExtension;
      }
      string sisupod_filename(string fn_src) {
        return base_dir.chainPath(base_filename(fn_src) ~ suffix).array;
      }
      string base(string fn_src) {
        return base_dir.chainPath(base_filename(fn_src)).array;
      }
    }
    return _PathsStruct();
  }
}
#+END_SRC

*** pod zipped archive

#+name: template_paths_sisupod_zipped_archive
#+BEGIN_SRC d
template SiSUpathsSisupodZipped() {
  mixin SiSUrgxInit;
  static auto rgx = Rgx();
  auto SiSUpathsSisupodZipped(Ps,Lng)(
    Ps  src_pth_info,
    Lng lng,
  ) {
    struct _PathsStruct {
      auto spod_pths = SiSUpathsSisupod!()();
      string base_filename(string fn_src) {
        return spod_pths.base_filename(fn_src);
      }
      string sisupod_filename(string fn_src) {
        return spod_pths.sisupod_filename(fn_src);
      }
      string base(string fn_src) {
        return spod_pths.base(fn_src);
      }
      auto pod_root(string fn_src) {
        return "sisudoc";
      }
      auto text_root(string fn_src) {
        return pod_root(fn_src).chainPath("text").array;
      }
      auto media_root(string fn_src) {
        return pod_root(fn_src).chainPath("docmedia").array;
      }
      auto conf_root(string fn_src) {
        return pod_root(fn_src).chainPath("conf").array;
      }
      auto doc(string fn_src) {
        return text_root(fn_src);
      }
      auto doc_lng(string fn_src) {
        return text_root(fn_src).chainPath(lng).array;
      }
      auto image_root(string fn_src) {
        return media_root(fn_src).chainPath("image").array;
      }
      auto css(string fn_src) {
        return conf_root(fn_src).chainPath("css").array;
      }
      auto fn_doc(string fn_src) {
        return (doc_lng(fn_src)).chainPath(fn_src.baseName).array;
      }
      auto fn_doc_insert(string fn_src, string fn_insert) {
        return (doc_lng(fn_src)).chainPath(fn_insert.baseName).array;
      }
    }
    return _PathsStruct();
  }
}
#+END_SRC

*** pod unzipped (sisusrc), archive on filesystem

#+name: template_paths_sisupod_unzipped_filesystem
#+BEGIN_SRC d
template SiSUpathsSisupodFileSystem() {
  mixin SiSUrgxInit;
  static auto rgx = Rgx();
  auto SiSUpathsSisupodFileSystem(Ps,Lng)(
    Ps  src_pth_info,
    Lng lng,
  ) {
    struct _PathsStruct {
      auto spod_pths = SiSUpathsSisupod!()();
      string base_filename(string fn_src) {
        return spod_pths.base_filename(fn_src);
      }
      string sisupod_filename(string fn_src) {
        return spod_pths.sisupod_filename(fn_src);
      }
      string base(string fn_src) {
        return spod_pths.base(fn_src);
      }
      auto pod_root(string fn_src) {
        return base(fn_src).chainPath("sisudoc").array;
      }
      auto text_root(string fn_src) {
        return pod_root(fn_src).chainPath("text").array;
      }
      auto media_root(string fn_src) {
        return pod_root(fn_src).chainPath("docmedia").array;
      }
      auto conf_root(string fn_src) {
        return pod_root(fn_src).chainPath("conf").array;
      }
      auto doc(string fn_src) {
        return pod_root(fn_src);
      }
      auto doc_lng(string fn_src) {
        return text_root(fn_src).chainPath(lng).array;
      }
      auto image_root(string fn_src) {
        return media_root(fn_src).chainPath("image").array;
      }
      auto css(string fn_src) {
        return conf_root(fn_src).chainPath("css").array;
      }
      auto fn_doc(string fn_src) {
        return (doc_lng(fn_src)).chainPath(fn_src.baseName).array;
      }
      auto fn_doc_insert(string fn_src, string fn_insert) {
        return (doc_lng(fn_src)).chainPath(fn_insert.baseName).array;
      }
    }
    return _PathsStruct();
  }
}
#+END_SRC

** shared out path, base directory                                     :out:

#+name: template_paths_out
#+BEGIN_SRC d
template SiSUoutPaths() {
  auto SiSUoutPaths(Ps,Lng)(
    Ps  src_pth_info,
    Lng lng,
  ) {
    struct _PathsStruct {
      string output_root() {
        return "sisugen";
      }
      string output_base() {
        return output_root.chainPath(lng).array;
      }
    }
    return _PathsStruct();
  }
}
#+END_SRC

** _html_                                                               :html:

#+name: template_paths_html
#+BEGIN_SRC d
template SiSUpathsHTML() {
  mixin SiSUrgxInit;
  static auto rgx = Rgx();
  auto SiSUpathsHTML(Ps,Lng)(
    Ps  src_pth_info,
    Lng lng,
  ) {
    auto out_pth = SiSUoutPaths!()(src_pth_info, lng);
    string base_dir = "html";
    string suffix = ".html";
    struct _PathsStruct {
      string base_filename(string fn_src) {
        return fn_src.baseName.stripExtension;
      }
      string base() {
        return (out_pth.output_base).chainPath(base_dir).array;
      }
      string image() {
        return (out_pth.output_root).chainPath("image").array;
      }
      string css() {
        return (out_pth.output_root).chainPath("css").array;
      }
      string fn_css() {
        return css.chainPath("html.css").array;
      }
      string seg(string fn_src) {
        return base.chainPath(base_filename(fn_src)).array;
      }
      string fn_scroll(string fn_src) {
        return base.chainPath(base_filename(fn_src) ~ suffix).array;
      }
      string fn_seg(string fn_src, string seg_filename) {
        return seg(fn_src).chainPath(seg_filename ~ suffix).array;
      }
    }
    return _PathsStruct();
  }
}
#+END_SRC

** _epub_                                                               :epub:

#+name: template_paths_epub
#+BEGIN_SRC d
template SiSUpathsEPUB() {
  mixin SiSUrgxInit;
  static auto rgx = Rgx();
  auto SiSUpathsEPUB(Ps,Lng)(
    Ps  src_pth_info,
    Lng lng,
  ) {
    auto out_pth = SiSUoutPaths!()(src_pth_info, lng);
    string base_dir = "epub";
    struct _PathsStruct {
      string base() {
        return (out_pth.output_base).chainPath(base_dir).array;
      }
      string base_filename(string fn_src) {
        return fn_src.baseName.stripExtension;
      }
      string epub_file(string fn_src) {
        return base.chainPath(base_filename(fn_src) ~ ".epub").array;
      }
      string dirtop() {
        return "".chainPath("").array;
      }
      string doc_meta_inf(string fn_src) {
        return dirtop.chainPath("META-INF").array;
      }
      string doc_oebps(string fn_src) {
        return dirtop.chainPath("OEBPS").array;
      }
      string doc_oebps_css(string fn_src) {
        return doc_oebps(fn_src).chainPath("css").array;
      }
      string doc_oebps_image(string fn_src) {
        return doc_oebps(fn_src).chainPath("image").array;
      }
      string fn_mimetypes(string fn_src) {
        return dirtop.chainPath("mimetypes").array;
      }
      string fn_dmi_container_xml(string fn_src) {
        return doc_meta_inf(fn_src).chainPath("container.xml").array;
      }
      string fn_oebps_toc_nav_xhtml(string fn_src) {
        return doc_oebps(fn_src).chainPath("toc_nav.xhtml").array;
      }
      string fn_oebps_toc_ncx(string fn_src) {
        return doc_oebps(fn_src).chainPath("toc.ncx").array;
      }
      string fn_oebps_content_opf(string fn_src) {
        return doc_oebps(fn_src).chainPath("content.opf").array;
      }
      string fn_oebps_content_xhtml(string fn_src, string seg_filename) {
        return doc_oebps(fn_src).chainPath(seg_filename ~ ".xhtml").array;
      }
      string fn_oebps_css(string fn_src) {
        return doc_oebps_css(fn_src).chainPath("epub.css").array;
      }
      debug(epub_output) {
        string dbg_docdir(string fn_src) {
          return base.chainPath(base_filename(fn_src)).array;
        }
        string dbg_docdir_oebps(string fn_src) {
          return dbg_docdir(fn_src).chainPath("OEBPS").array;
        }
        string dbg_doc_meta_inf(string fn_src) {
          return dbg_docdir(fn_src).chainPath("META-INF").array;
        }
        string dbg_doc_oebps(string fn_src) {
          return dbg_docdir(fn_src).chainPath("OEBPS").array;
        }
        string dbg_doc_oebps_css(string fn_src) {
          return dbg_doc_oebps(fn_src).chainPath("css").array;
        }
        string dbg_doc_oebps_image(string fn_src) {
          return dbg_doc_oebps(fn_src).chainPath("image").array;
        }
        string dbg_fn_mimetypes(string fn_src) {
          return dbg_docdir(fn_src).chainPath("mimetypes").array;
        }
        string dbg_fn_dmi_container_xml(string fn_src) {
          return dbg_doc_meta_inf(fn_src).chainPath("container.xml").array;
        }
        string dbg_fn_oebps_toc_nav_xhtml(string fn_src) {
          return dbg_docdir_oebps(fn_src).chainPath("toc_nav.xhtml").array;
        }
        string dbg_fn_oebps_toc_ncx(string fn_src) {
          return dbg_docdir_oebps(fn_src).chainPath("toc.ncx").array;
        }
        string dbg_fn_oebps_content_opf(string fn_src) {
          return dbg_docdir_oebps(fn_src).chainPath("content.opf").array;
        }
        string dbg_fn_oebps_content_xhtml(string fn_src, string seg_filename) {
          return dbg_docdir_oebps(fn_src).chainPath(seg_filename ~ ".xhtml").array;
        }
        string dbg_fn_oebps_css(string fn_src) {
          return dbg_doc_oebps_css(fn_src).chainPath("epub.css").array;
        }
      }
    }
    return _PathsStruct();
  }
}
#+END_SRC