diff options
| author | Ralph Amissah <ralph@amissah.com> | 2018-03-08 16:58:10 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2019-04-10 15:14:14 -0400 | 
| commit | bdb43e4e7d34ba178ec3bbc351d059c63e162d4b (patch) | |
| tree | 138c149ef8919ec7b6a19e77946304238edc3a8e /src | |
| parent | make auto numbering related (diff) | |
footnotes fontface; home button text and links
Diffstat (limited to 'src')
| -rw-r--r-- | src/sdp/meta/conf_make_meta_json.d | 50 | ||||
| -rw-r--r-- | src/sdp/meta/conf_make_meta_structs.d | 65 | ||||
| -rw-r--r-- | src/sdp/meta/defaults.d | 1 | ||||
| -rw-r--r-- | src/sdp/meta/metadoc_from_src.d | 67 | ||||
| -rw-r--r-- | src/sdp/meta/rgx.d | 3 | ||||
| -rw-r--r-- | src/sdp/output/defaults.d | 1 | ||||
| -rw-r--r-- | src/sdp/output/hub.d | 2 | ||||
| -rw-r--r-- | src/sdp/output/rgx.d | 1 | ||||
| -rw-r--r-- | src/sdp/output/source_sisupod.d | 59 | ||||
| -rw-r--r-- | src/sdp/output/xmls.d | 62 | 
10 files changed, 206 insertions, 105 deletions
| diff --git a/src/sdp/meta/conf_make_meta_json.d b/src/sdp/meta/conf_make_meta_json.d index e192c70..3a47f20 100644 --- a/src/sdp/meta/conf_make_meta_json.d +++ b/src/sdp/meta/conf_make_meta_json.d @@ -66,7 +66,17 @@ static template contentJSONtoSiSUstruct() {        if ("footer" in _json.object["make"]          && (_json.object["make"]["footer"].type().to!string == "STRING")        ) { -        _struct_composite.make_str.footer = _json.object["make"]["footer"].str; +       char[][] __match_footer_array +          = (cast(char[]) _json.object["make"]["footer"].str) +            .split(_rgx.make_heading_delimiter); +        _struct_composite.make_str.footer = __match_footer_array.to!(string[]); +      } else if ("footer" in _json.object["make"] +        && _json.object["make"]["footer"].type().to!string == "ARRAY") { +        string[] _match_footer_array; +        foreach (_match_heading; _json.object["make"]["footer"].arrayNoRef) { +          _match_footer_array ~= _match_heading.str; +        } +        _struct_composite.make_str.footer = _match_footer_array;        }        if ("headings" in _json.object["make"]          && (_json.object["make"]["headings"].type().to!string == "STRING") @@ -86,12 +96,32 @@ static template contentJSONtoSiSUstruct() {        if ("home_button_image" in _json.object["make"]          && (_json.object["make"]["home_button_image"].type().to!string == "STRING")        ) { -        _struct_composite.make_str.home_button_image = _json.object["make"]["home_button_image"].str; +       char[][] __match_home_button_image_array +          = (cast(char[]) _json.object["make"]["home_button_image"].str) +            .split(_rgx.make_heading_delimiter); +        _struct_composite.make_str.home_button_image = __match_home_button_image_array.to!(string[]); +      } else if ("home_button_image" in _json.object["make"] +        && _json.object["make"]["home_button_image"].type().to!string == "ARRAY") { +        string[] _match_home_button_image_array; +        foreach (_match_heading; _json.object["make"]["home_button_image"].arrayNoRef) { +          _match_home_button_image_array ~= _match_heading.str; +        } +        _struct_composite.make_str.home_button_image = _match_home_button_image_array;        }        if ("home_button_text" in _json.object["make"]          && (_json.object["make"]["home_button_text"].type().to!string == "STRING")        ) { -        _struct_composite.make_str.home_button_text = _json.object["make"]["home_button_text"].str; +       char[][] __match_home_button_text_array +          = (cast(char[]) _json.object["make"]["home_button_text"].str) +            .split(_rgx.make_heading_delimiter); +        _struct_composite.make_str.home_button_text = __match_home_button_text_array.to!(string[]); +      } else if ("home_button_text" in _json.object["make"] +        && _json.object["make"]["home_button_text"].type().to!string == "ARRAY") { +        string[] _match_home_button_text_array; +        foreach (_match_heading; _json.object["make"]["home_button_text"].arrayNoRef) { +          _match_home_button_text_array ~= _match_heading.str; +        } +        _struct_composite.make_str.home_button_text = _match_home_button_text_array;        }        if ("italics" in _json.object["make"]          && (_json.object["make"]["italics"].type().to!string == "STRING") @@ -130,14 +160,14 @@ static template contentJSONtoSiSUstruct() {            break;          }        } -      if ("num_depth" in _json.object["make"] -        && (_json.object["make"]["num_depth"].type().to!string == "INTEGER") +      if ("auto_num_depth" in _json.object["make"] +        && (_json.object["make"]["auto_num_depth"].type().to!string == "INTEGER")        ) { -        _struct_composite.make_str.num_depth = _json.object["make"]["num_depth"].integer.to!int; -      } else if ("num_depth" in _json.object["make"] -        && (_json.object["make"]["num_depth"].type().to!string == "STRING") +        _struct_composite.make_str.auto_num_depth = _json.object["make"]["auto_num_depth"].integer.to!int; +      } else if ("auto_num_depth" in _json.object["make"] +        && (_json.object["make"]["auto_num_depth"].type().to!string == "STRING")        ) { -        _struct_composite.make_str.num_depth = _json.object["make"]["num_depth"].str.to!int; +        _struct_composite.make_str.auto_num_depth = _json.object["make"]["auto_num_depth"].str.to!int;        }        if ("substitute" in _json.object["make"]) {          string[][] _sub; @@ -180,7 +210,7 @@ static template contentJSONtoSiSUstruct() {        _struct_composite.make.italics                        = _mk.italics(_struct_composite.make_str.italics);        _struct_composite.make.auto_num_top_at_level          = _mk.auto_num_top_at_level(_struct_composite.make_str.auto_num_top_at_level);        _struct_composite.make.auto_num_top_lv                = _mk.auto_num_top_lv(_struct_composite.make_str.auto_num_top_lv); -      _struct_composite.make.num_depth                      = _mk.num_depth(_struct_composite.make_str.num_depth); +      _struct_composite.make.auto_num_depth                 = _mk.auto_num_depth(_struct_composite.make_str.auto_num_depth);        _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);      } diff --git a/src/sdp/meta/conf_make_meta_structs.d b/src/sdp/meta/conf_make_meta_structs.d index 41af6ba..a5d2c15 100644 --- a/src/sdp/meta/conf_make_meta_structs.d +++ b/src/sdp/meta/conf_make_meta_structs.d @@ -9,20 +9,45 @@ import    std.typecons,    std.utf,    std.conv : to; +import +  sdp.meta.defaults, +  sdp.meta.rgx; +mixin SiSUrgxInit; +static auto _rgx = Rgx(); +mixin InternalMarkup; +auto _mkup = InlineMarkup(); +auto url_markup(string line) { +  auto line_ = (line) +    .replaceAll( +      _rgx.inline_link_markup_regular, +      ("$1" +        ~ _mkup.lnk_o ~ "$2" ~ _mkup.lnk_c +        ~  _mkup.url_o ~ "$3" ~  _mkup.url_c +        ~ "$4")            // ("$1{ $2 }$3$4") +      ) +    .replaceAll( +        _rgx.inline_link_naked_url, +        ("$1" +          ~ _mkup.lnk_o ~ "$2" ~ _mkup.lnk_c +          ~  _mkup.url_o ~ "$2" ~  _mkup.url_c +          ~ "$3")            // ("$1{ $2 }$2$3") +      ); +  return line_; +}  struct ConfCompositeMakeStr {    string bold;    string breaks;    string cover_image;    string css;    string emphasis; -  string footer; +  string[] footer;    string[] headings; -  string home_button_image; -  string home_button_text; +  string[] home_button_image; +  string[] home_button_text;    string italics;    string auto_num_top_at_level;    int auto_num_top_lv               = 9; -  int num_depth                     = 2; +  int auto_num_depth                = 2;    string[][] substitute;    string texpdf_font;  } @@ -50,17 +75,27 @@ struct confCompositeMakeBuild {      }      return _out;    } -  auto footer(string _mk) { -    return _mk; +  auto footer(string[] _mk) { +    string line_; +    string[] _mk2; +    foreach (line; _mk) { +      _mk2 ~= url_markup(line); +    } +    return _mk2;    }    auto headings(string[] _mk) {      return _mk;    } -  auto home_button_image(string _mk) { +  auto home_button_image(string[] _mk) {      return _mk;    } -  auto home_button_text(string _mk) { -    return _mk; +  auto home_button_text(string[] _mk) { +    string line_; +    string[] _mk2; +    foreach (line; _mk) { +      _mk2 ~= url_markup(line); +    } +    return _mk2;    }    auto italics(string _mk) {      string[] _out; @@ -75,7 +110,7 @@ struct confCompositeMakeBuild {    auto auto_num_top_lv(int _mk) {      return _mk;    } -  auto num_depth(int _mk) { +  auto auto_num_depth(int _mk) {      return _mk;    }    auto substitute(string[][] _mk) { @@ -91,14 +126,14 @@ struct ConfCompositeMakeInit {    string cover_image;    string css;    string[] emphasis; -  string footer; +  string[] footer;    string[] headings; -  string home_button_image; -  string home_button_text; +  string[] home_button_image; +  string[] home_button_text;    string[] italics;    string auto_num_top_at_level;    int auto_num_top_lv               = 9; -  int num_depth                     = 2; +  int auto_num_depth                = 2;    string[][] substitute;    string texpdf_font;  } @@ -248,7 +283,7 @@ static auto ptr_head_sub_make      "home_button_image",      "home_button_text",      "footer", "headings", -    "auto_num_top_at_level", "auto_num_top_lv", "num_depth", +    "auto_num_top_at_level", "auto_num_top_lv", "auto_num_depth",      "breaks",      "substitute",      "bold", diff --git a/src/sdp/meta/defaults.d b/src/sdp/meta/defaults.d index 13bf312..f0137cb 100644 --- a/src/sdp/meta/defaults.d +++ b/src/sdp/meta/defaults.d @@ -122,6 +122,7 @@ template SiSUbiblio() {    }  }  template InternalMarkup() { +  import std.array;    static struct InlineMarkup {      auto en_a_o = "【";      auto en_a_c = "】";      auto en_b_o = "〖";      auto en_b_c = "〗"; diff --git a/src/sdp/meta/metadoc_from_src.d b/src/sdp/meta/metadoc_from_src.d index 6035825..784991c 100644 --- a/src/sdp/meta/metadoc_from_src.d +++ b/src/sdp/meta/metadoc_from_src.d @@ -3767,7 +3767,7 @@ template SiSUdocAbstraction() {    static struct ObjInlineMarkupMunge {      string[string] obj_txt;      int n_foot, n_foot_reg, n_foot_sp_asterisk, n_foot_sp_plus; -    string asterisks_; +    string asterisks_, plus_;      string obj_txt_out, tail, note;      static auto rgx = Rgx();      static auto mkup = InlineMarkup(); @@ -3785,6 +3785,7 @@ template SiSUdocAbstraction() {        static auto mng = InlineMarkup();        obj_txt_in = obj_txt_in.replaceAll(rgx.inline_mono, (mng.mono ~ "{$1}" ~ mng.mono));        /+ url matched +/ +      obj_txt_in = obj_txt_in.replaceAll(rgx.inline_notes_al_special, ""); // TODO reinstate when special footnotes are implemented        if (obj_txt_in.match(rgx.inline_url_generic)) {          /+ link: naked url: http://url +/          if (obj_txt_in.match(rgx.inline_link_naked_url)) { @@ -3802,22 +3803,23 @@ template SiSUdocAbstraction() {               { link which includes url as footnote }http://url~{ { http://url }http://url }~          +/          if (obj_txt_in.match(rgx.inline_link_endnote_url_helper)) { -          obj_txt_in = (obj_txt_in).replaceAll( -            rgx.inline_link_endnote_url_helper_punctuated, -            (mkup.lnk_o ~ "$1" ~ mkup.lnk_c -              ~ mkup.url_o ~ "$2" ~ mkup.url_c -              ~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c -              ~ mkup.url_o ~ "$2" ~ mkup.url_c -              ~  " }~$3") // ("{ $1 }$2~{ { $2 }$2 }~$3") -          ); -          obj_txt_in = (obj_txt_in).replaceAll( -            rgx.inline_link_endnote_url_helper, -            (mkup.lnk_o ~ "$1" ~ mkup.lnk_c -              ~ mkup.url_o ~ "$2" ~ mkup.url_c -              ~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c -              ~ mkup.url_o ~ "$2" ~ mkup.url_c -              ~  " }~") // ("{ $1 }$2~{ { $2 }$2 }~") -          ); +          obj_txt_in = (obj_txt_in) +            .replaceAll( +              rgx.inline_link_endnote_url_helper_punctuated, +              (mkup.lnk_o ~ "$1" ~ mkup.lnk_c +                ~ mkup.url_o ~ "$2" ~ mkup.url_c +                ~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c +                ~ mkup.url_o ~ "$2" ~ mkup.url_c +                ~  " }~$3") // ("{ $1 }$2~{ { $2 }$2 }~$3") +            ) +            .replaceAll( +              rgx.inline_link_endnote_url_helper, +              (mkup.lnk_o ~ "$1" ~ mkup.lnk_c +                ~ mkup.url_o ~ "$2" ~ mkup.url_c +                ~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c +                ~ mkup.url_o ~ "$2" ~ mkup.url_c +                ~  " }~") // ("{ $1 }$2~{ { $2 }$2 }~") +            );          }          /+ link with regular markup:             { linked text or image }http://url @@ -3842,6 +3844,7 @@ template SiSUdocAbstraction() {        /+ endnotes (regular) +/        bool flg_notes_reg  = false;        bool flg_notes_star = false; +      bool flg_notes_plus = false;        obj_txt_in = (obj_txt_in).replaceAll(          rgx.inline_notes_curly,          (mkup.en_a_o ~ " $1" ~ mkup.en_a_c) @@ -3868,6 +3871,15 @@ template SiSUdocAbstraction() {                  rgx.inline_al_delimiter_open_symbol_star,                  (mkup.en_a_o ~ replicate(asterisks_, n_foot_sp_asterisk) ~ " ")                ) ~ "\n"; +            } else if (n.hit.to!string.match(rgx.inline_al_delimiter_open_symbol_plus)) { +              flg_notes_plus =  true; +              ++n_foot_sp_plus; +              plus_ = "*"; +              n_foot=n_foot_sp_plus; +              obj_txt_out ~= n.hit.to!string.replaceFirst( +                rgx.inline_al_delimiter_open_symbol_plus, +                (mkup.en_a_o ~ replicate(plus_, n_foot_sp_plus) ~ " ") +              ) ~ "\n";              } else if (n.hit.to!string.match(rgx.inline_al_delimiter_open_regular)) {                flg_notes_reg =  true;                ++n_foot_reg; @@ -3888,6 +3900,7 @@ template SiSUdocAbstraction() {          obj_txt_out,          flg_notes_reg,          flg_notes_star, +        flg_notes_plus,        );        return t;      } @@ -3933,6 +3946,7 @@ template SiSUdocAbstraction() {          obj_txt_out,          ftn[1],          ftn[2], +        ftn[3],          urls,        );        return t; @@ -4143,7 +4157,8 @@ template SiSUdocAbstraction() {          obj_txt["munge"]                  = x[0];          obj_notes_and_links["notes_reg"]  = x[1];          obj_notes_and_links["notes_star"] = x[2]; -        obj_notes_and_links["links"]      = x[3]; +        obj_notes_and_links["notes_plus"] = x[3]; +        obj_notes_and_links["links"]      = x[4];          break;        }        auto t = tuple( @@ -4360,7 +4375,7 @@ template SiSUdocAbstraction() {            heading_num[3] = 0;            heading_number_auto_composite = "";          } -        /+ num_depth minimum 0 +        /+ auto_num_depth minimum 0             (1.) default 2 (1.1.1) max 3 (1.1.1.1) implement +/          if (            conf_make_meta.make.auto_num_top_lv @@ -4398,7 +4413,7 @@ template SiSUdocAbstraction() {          }          if (heading_num[3] > 0) {            heading_number_auto_composite -            = (conf_make_meta.make.num_depth.to!uint == 3) +            = (conf_make_meta.make.auto_num_depth.to!uint == 3)              ? ( heading_num[0].to!string ~ "."                  ~ heading_num[1].to!string ~ "."                  ~ heading_num[2].to!string ~ "." @@ -4407,8 +4422,8 @@ template SiSUdocAbstraction() {              : "";          } else if (heading_num[2] > 0) {            heading_number_auto_composite -            = ((conf_make_meta.make.num_depth.to!uint >= 2) -            && (conf_make_meta.make.num_depth.to!uint <= 3)) +            = ((conf_make_meta.make.auto_num_depth.to!uint >= 2) +            && (conf_make_meta.make.auto_num_depth.to!uint <= 3))              ?  ( heading_num[0].to!string ~ "."                   ~ heading_num[1].to!string ~ "."                   ~ heading_num[2].to!string @@ -4416,16 +4431,16 @@ template SiSUdocAbstraction() {              : "";          } else if (heading_num[1] > 0) {            heading_number_auto_composite -            = ((conf_make_meta.make.num_depth.to!uint >= 1) -            && (conf_make_meta.make.num_depth.to!uint <= 3)) +            = ((conf_make_meta.make.auto_num_depth.to!uint >= 1) +            && (conf_make_meta.make.auto_num_depth.to!uint <= 3))              ? ( heading_num[0].to!string ~ "."                   ~ heading_num[1].to!string                 )              : "";          } else if (heading_num[0] > 0) {            heading_number_auto_composite -            = ((conf_make_meta.make.num_depth.to!uint >= 0) -            && (conf_make_meta.make.num_depth.to!uint <= 3)) +            = ((conf_make_meta.make.auto_num_depth.to!uint >= 0) +            && (conf_make_meta.make.auto_num_depth.to!uint <= 3))              ?  (heading_num[0].to!string)              : "";          } else { diff --git a/src/sdp/meta/rgx.d b/src/sdp/meta/rgx.d index 4cc1fe1..9fdcb99 100644 --- a/src/sdp/meta/rgx.d +++ b/src/sdp/meta/rgx.d @@ -64,7 +64,7 @@ static template SiSUrgxInit() {      static native_subhead_identifier                      = ctRegex!(`^(?:oclc|pg|isbn)$`, "m");      static native_subhead_notes                           = ctRegex!(`^(?:abstract|description)$`, "m");      static native_subhead_publisher                       = ctRegex!(`^(?:name)$`, "m"); -    static native_subhead_make                            = ctRegex!(`^(?:cover_image|home_button_image|home_button_text|footer|headings|num_top|num_depth|breaks|substitute|bold|italics|emphasis|texpdf_font|css)$`, "m"); +    static native_subhead_make                            = ctRegex!(`^(?:cover_image|home_button_image|home_button_text|footer|headings|num_top|auto_num_depth|breaks|substitute|bold|italics|emphasis|texpdf_font|css)$`, "m");      /+ heading & paragraph operators +/      static heading_a                                      = ctRegex!(`^:?[A][~] `, "m");      static heading                                        = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?)\s+`,"i"); @@ -220,6 +220,7 @@ static template SiSUrgxInit() {      static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a-zA-Z0-9._-]+?)(?P<dir>[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure      /+ inline markup footnotes endnotes +/      static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg"); +    static inline_notes_al_special                        = ctRegex!(`【(?:[*+]\s+)(.+?)】`, "mg"); // TODO remove match when special footnotes are implemented      static inline_notes_al_gen                            = ctRegex!(`【.+?】`, "m");      static inline_notes_al_gen_text                       = ctRegex!(`【(?P<text>.+?)】`, "m");      static inline_notes_al_gen_ref                        = ctRegex!(`【(?P<ref>[*+]\s+)\s*(?P<text>.+?)】`, "mg"); diff --git a/src/sdp/output/defaults.d b/src/sdp/output/defaults.d index a15d438..418a334 100644 --- a/src/sdp/output/defaults.d +++ b/src/sdp/output/defaults.d @@ -4,6 +4,7 @@  module sdp.output.defaults;  template InternalMarkup() { +  import std.array;    static struct InlineMarkup {      auto en_a_o = "【";      auto en_a_c = "】";      auto en_b_o = "〖";      auto en_b_c = "〗"; diff --git a/src/sdp/output/hub.d b/src/sdp/output/hub.d index 7f03360..830c6d0 100644 --- a/src/sdp/output/hub.d +++ b/src/sdp/output/hub.d @@ -16,7 +16,7 @@ template outputHub() {    void outputHub(D,I)(D doc_abstraction, I doc_matters) {      mixin SiSUoutputRgxInit;      static auto rgx = Rgx(); -    if ((doc_matters.opt.action.verbose)) { +    if (doc_matters.opt.action.verbose) {        writeln(doc_matters.xml.keys_seq.seg);      }      if ((doc_matters.opt.action.source) diff --git a/src/sdp/output/rgx.d b/src/sdp/output/rgx.d index c125b7e..ee654f6 100644 --- a/src/sdp/output/rgx.d +++ b/src/sdp/output/rgx.d @@ -37,6 +37,7 @@ static template SiSUoutputRgxInit() {      static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a-zA-Z0-9._-]+?)(?P<dir>[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure      /+ inline markup footnotes endnotes +/      static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg"); +    static inline_notes_al_special                        = ctRegex!(`【(?:[*+]\s+)(.+?)】`, "mg"); // TODO remove match when special footnotes are implemented      static inline_notes_al_gen                            = ctRegex!(`【.+?】`, "m");      static inline_notes_al_gen_text                       = ctRegex!(`【(?P<text>.+?)】`, "m");      static inline_notes_al_gen_ref                        = ctRegex!(`【(?P<ref>[*+]\s+)\s*(?P<text>.+?)】`, "mg"); diff --git a/src/sdp/output/source_sisupod.d b/src/sdp/output/source_sisupod.d index 3f95b62..d0e4e11 100644 --- a/src/sdp/output/source_sisupod.d +++ b/src/sdp/output/source_sisupod.d @@ -97,36 +97,35 @@ template SiSUpod() {            }          }        } { /+ bundle sisu_document_make +/ -        foreach (extension; [".sdl", ".toml"]) { -          auto fn_src_in = ((doc_matters.src.is_pod) -            ? doc_matters.src.conf_dir_path -            : pth_sisudoc_src.conf_root).to!string -            ~ "/" ~ "sisu_document_make" ~ extension; -          auto fn_src_out_sisupod_zip_base -            = pths_sisupod.conf_root(doc_matters.src.filename).zpod.to!string ~ "/" ~ "sisu_document_make"; -          auto fn_src_out_filesystem -            = pths_sisupod.conf_root(doc_matters.src.filename).filesystem_open_zpod.to!string -            ~ "/" ~ "sisu_document_make" ~ extension; // TODO -          if (exists(fn_src_in)) { -            debug(io) { -              writeln("WARNING (io debug) src out found: ", fn_src_in); -            } -            if (doc_matters.opt.action.source) { -              fn_src_in.copy(fn_src_out_filesystem); -            } -            if (doc_matters.opt.action.sisupod) { -              auto zip_arc_member_file = new ArchiveMember(); -              zip_arc_member_file.name = fn_src_out_sisupod_zip_base; -              auto zip_data = new OutBuffer(); -              zip_data.write((fn_src_in).readText); -              zip_arc_member_file.expandedData = zip_data.toBytes(); -              zip.addMember(zip_arc_member_file); -            } -          } else { -            if (doc_matters.opt.action.verbose -            || doc_matters.opt.action.debug_do) { -              writeln("WARNING (io) src out NOT found (document make): ", fn_src_in); -            } +        auto extension = ".toml"; +        auto fn_src_in = ((doc_matters.src.is_pod) +          ? doc_matters.src.conf_dir_path +          : pth_sisudoc_src.conf_root).to!string +          ~ "/" ~ "sisu_document_make" ~ extension; +        auto fn_src_out_sisupod_zip_base +          = pths_sisupod.conf_root(doc_matters.src.filename).zpod.to!string ~ "/" ~ "sisu_document_make"; +        auto fn_src_out_filesystem +          = pths_sisupod.conf_root(doc_matters.src.filename).filesystem_open_zpod.to!string +          ~ "/" ~ "sisu_document_make" ~ extension; // TODO +        if (exists(fn_src_in)) { +          debug(io) { +            writeln("WARNING (io debug) src out found: ", fn_src_in); +          } +          if (doc_matters.opt.action.source) { +            fn_src_in.copy(fn_src_out_filesystem); +          } +          if (doc_matters.opt.action.sisupod) { +            auto zip_arc_member_file = new ArchiveMember(); +            zip_arc_member_file.name = fn_src_out_sisupod_zip_base; +            auto zip_data = new OutBuffer(); +            zip_data.write((fn_src_in).readText); +            zip_arc_member_file.expandedData = zip_data.toBytes(); +            zip.addMember(zip_arc_member_file); +          } +        } else { +          if (doc_matters.opt.action.verbose +          || doc_matters.opt.action.debug_do) { +            writeln("WARNING (io) src out NOT found (document make): ", fn_src_in);            }          }        } { /+ TODO bundle primary file +/ diff --git a/src/sdp/output/xmls.d b/src/sdp/output/xmls.d index 5e7f2e9..dd2ec67 100644 --- a/src/sdp/output/xmls.d +++ b/src/sdp/output/xmls.d @@ -152,12 +152,31 @@ template outputXHTMLs() {      auto site_info_button(Dm)(        Dm doc_matters,      ) { -      string _location_1_url ="http://www.sisudoc.org"; -      string _location_1_lnk ="SiSU"; -      string _location_2_url ="http://www.sisudoc.org"; -      string _location_2_lnk ="www.sisudoc.org"; -      string _location_3_url ="http://www.sisudoc.org"; -      string _location_3_lnk ="sisu"; +      string[string][] _location = [ +        [ "url" : "", "lnk" : "" ], +        [ "url" : "", "lnk" : "" ], +        [ "url" : "", "lnk" : "" ] +      ]; +      if (doc_matters.conf_make_meta.make.home_button_text.length > 0) { +        foreach(int key, string line; doc_matters.conf_make_meta.make.home_button_text) { +          if (auto m = line.match(rgx.inline_link)) { +            if (key < 3) { +              _location[key] = [ "url" : m.captures[2], "lnk" : m.captures[1] ]; +            } else { +              writeln("WARNING markup error info button content too long (max length 3 used), length: ", +                doc_matters.conf_make_meta.make.home_button_text.length, +                " button: ", doc_matters.conf_make_meta.make.home_button_text); +            } +          } else { +            _location[key]["url"] = ""; +            _location[key]["lnk"] = line; +          } +        } +      } else { +        _location[0]["url"] = "http://www.sisudoc.org"; _location[0]["lnk"] = "SiSU"; +        _location[1]["url"] = "http://www.sisudoc.org"; _location[1]["lnk"] = "www.sisudoc.org"; +        _location[2]["url"] = "http://www.sisudoc.org"; _location[2]["lnk"] = "sisu"; +      }        string o;        o = format(q"¶<div class="flex-menu-option">            <p class="tiny_left"><a href="%s" target="_top"> @@ -170,12 +189,9 @@ template outputXHTMLs() {              %s            </a></p>          </div>¶", -      _location_1_url, -      _location_1_lnk, -      _location_2_url, -      _location_2_lnk, -      _location_3_url, -      _location_3_lnk, +      _location[0]["url"], _location[0]["lnk"], +      _location[1]["url"], _location[1]["lnk"], +      _location[2]["url"], _location[2]["lnk"],        );        return o;      } @@ -330,16 +346,16 @@ template outputXHTMLs() {              rgx.inline_seg_link,              "$1");          } -        _txt = (_txt).replaceAll( -          rgx.inline_link_fn_suffix, -          ("$1" ~ _suffix)); -        _txt = (_txt).replaceAll( -          rgx.inline_link, -          ("<a href=\"$2\">$1</a>")); -        _txt = (_txt).replaceAll( -          rgx.mark_internal_site_lnk, -          "" -        ); +        _txt = (_txt) +          .replaceAll( +            rgx.inline_link_fn_suffix, +            ("$1" ~ _suffix)) +          .replaceAll( +            rgx.inline_link, +            ("<a href=\"$2\">$1</a>")) +          .replaceAll( +            rgx.mark_internal_site_lnk, +            "");        }        debug(markup_links) {          if (_txt.match(rgx.inline_link)) { @@ -368,6 +384,7 @@ template outputXHTMLs() {        string                    _txt,      ) {        if (obj.inline_notes_reg) { +        _txt = font_face(_txt);          _txt = (_txt).replaceAll(            rgx.inline_notes_delimiter_al_regular_number_note,            ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>") @@ -391,6 +408,7 @@ template outputXHTMLs() {      ) {        string[] _endnotes;        if (obj.inline_notes_reg) { +        _txt = font_face(_txt);          /+ need markup for text, and separated footnote +/          foreach(m; _txt.matchAll(rgx.inline_notes_delimiter_al_regular_number_note)) {            _endnotes ~= format( | 
