template SiSUpod() {
  struct SDPsisupod {
    
    void sisupod_assemble(S)(
      S fn_src,
    ) {
      debug(asserts){
        static assert(is(typeof(fn_src) == string));
      }
      mixin SiSUpaths;
      auto pth_sisupod = SiSUpodPaths();
      mixin SiSUlanguageCodes;
      auto lang = Lang();
      auto rgx = Rgx();
      /+
        dir structure
        /tmp/_sisu_processing_/ralph/en/sisupod
          ├── doc
          │   └── en
          └── image
    
        - create directory structure
    
      +/
      assert (match(fn_src, rgx.src_fn));
      try {
        /+ create directory structure +/
        mkdirRecurse(pth_sisupod.doc(fn_src));
        mkdirRecurse(pth_sisupod.conf(fn_src));
        mkdirRecurse(pth_sisupod.css(fn_src));
        mkdirRecurse(pth_sisupod.image(fn_src));
        /+ copy relevant files +/
        auto f_out = pth_sisupod.fn_doc(fn_src, "en"); // you need fn without path and then to insert back language code for output sub-directory
        debug(sisupod) {
          writeln(__LINE__, ": ", fn_src, " -> ", f_out);
        }
        mkdirRecurse(pth_sisupod.doc_lng(fn_src, "en")); // need to extract language code directories (from directory structure or filenames & have a default)
        copy(fn_src, f_out);
      }
      catch (ErrnoException ex) {
        // Handle error
      }
    }
    
    
  }
}