diff options
Diffstat (limited to 'src/sdp/meta')
| -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 | 
5 files changed, 134 insertions, 52 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"); | 
