diff options
Diffstat (limited to 'org')
| -rw-r--r-- | org/default_misc.org | 1 | ||||
| -rw-r--r-- | org/default_paths.org | 33 | ||||
| -rw-r--r-- | org/default_regex.org | 50 | ||||
| -rw-r--r-- | org/doc_reform.org | 38 | ||||
| -rw-r--r-- | org/meta_abstraction.org | 310 | ||||
| -rw-r--r-- | org/meta_debugs.org | 16 | ||||
| -rw-r--r-- | org/output_sqlite.org | 12 | ||||
| -rw-r--r-- | org/output_xmls.org | 28 | 
8 files changed, 289 insertions, 199 deletions
| diff --git a/org/default_misc.org b/org/default_misc.org index 320021e..769f4db 100644 --- a/org/default_misc.org +++ b/org/default_misc.org @@ -224,6 +224,7 @@ template InternalMarkup() {    static struct InlineMarkup {      auto en_a_o = "【";      auto en_a_c = "】";      auto en_b_o = "〖";      auto en_b_c = "〗"; +    auto quote_o = "“";      auto quote_c = "”";      auto ff_o = "┨";         auto ff_c = "┣"; // fontface      auto lnk_o = "┥";        auto lnk_c = "┝";      auto url_o = "┤";        auto url_c = "├"; diff --git a/org/default_paths.org b/org/default_paths.org index 68c7da8..55ee430 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -166,7 +166,7 @@ template PathMatters() {            string manifest_path() {              return _manifest.pod_manifest_path;            } -          string pod_name() { +          string pod_name_with_path() {              return _manifest.pod_manifest_path.baseName;            }            string manifest_file_with_path() { @@ -213,9 +213,12 @@ template PathMatters() {            string path_and_fn() {              return _fns;            } -          string pod_name() { +          string pod_name_with_path() {              return (is_pod) ? _manifest.pod_manifest_path : "";            } +          string pod_name() { +            return pod_name_with_path.baseName; +          }            string filename() {              return path_and_fn.baseName;            } @@ -234,11 +237,11 @@ template PathMatters() {            }            string doc_uid() {              string _uid; -            if (is_pod && !(pod_name.empty)) { -              if (pod_name.baseName == filename_base) { +            if (is_pod && !(pod_name_with_path.empty)) { +              if (pod_name_with_path.baseName == filename_base) {                  _uid = filename_base ~ "." ~ filename_extension ~ _sep ~ lng;                } else { -                _uid = pod_name.baseName ~ _sep ~ filename_base ~ "." ~ filename_extension ~ _sep ~ lng; +                _uid = pod_name_with_path.baseName ~ _sep ~ filename_base ~ "." ~ filename_extension ~ _sep ~ lng;                }              } else {                _uid = _sep ~ filename_base ~ "." ~ filename_extension ~ _sep ~ lng; @@ -254,10 +257,10 @@ template PathMatters() {               - sqlite discrete index (multilingual, each language of a document)            +/              string _fn; -            if (pod_name.baseName == filename_base) { +            if (pod_name_with_path.baseName == filename_base) {                _fn = filename_base ~ _sep ~ filename_extension ~ _sep ~ lng; -            } else if (!(pod_name.empty)) { -              _fn = pod_name.baseName ~ _sep ~ filename_base ~ _sep ~ filename_extension ~ _sep ~ lng; +            } else if (!(pod_name_with_path.empty)) { +              _fn = pod_name_with_path.baseName ~ _sep ~ filename_base ~ _sep ~ filename_extension ~ _sep ~ lng;              } else {                _fn = "_" ~ _sep ~ filename_base ~ _sep ~ filename_extension ~ _sep ~ lng;              } @@ -273,10 +276,10 @@ template PathMatters() {               - sqlite discrete index (multilingual collection)            +/              string _fn; -            if (pod_name.baseName == filename_base) { +            if (pod_name_with_path.baseName == filename_base) {                _fn = filename_base ~ _sep ~ filename_extension; -            } else if (!(pod_name.empty)) { -              _fn = pod_name.baseName ~ _sep ~ filename_base ~ _sep ~ filename_extension; +            } else if (!(pod_name_with_path.empty)) { +              _fn = pod_name_with_path.baseName ~ _sep ~ filename_base ~ _sep ~ filename_extension;              } else {                _fn = "_" ~ _sep ~ filename_base ~ _sep ~ filename_extension;              } @@ -978,7 +981,7 @@ template DocReformOutPathsFnPd() {    /+ TODO stuff to work out here +/    auto DocReformOutPathsFnPd(Fn,Pn)(      Fn  fn_src_pth, -    Pn  pod_name +    Pn  pod_name_with_path    ) {      struct _PathsStruct {        string base_filename() { @@ -996,11 +999,11 @@ template DocReformOutPathsFnPd() {          +/          string _fn_src = fn_src_pth.baseName.stripExtension;          string _output_base_name; -        if (!(pod_name.empty)) { -          if (pod_name == _fn_src) { +        if (!(pod_name_with_path.empty)) { +          if (pod_name_with_path == _fn_src) {              _output_base_name = _fn_src;            } else { -            _output_base_name = pod_name ~ "." ~ _fn_src; +            _output_base_name = pod_name_with_path ~ "." ~ _fn_src;            }          } else {            _output_base_name = _fn_src; diff --git a/org/default_regex.org b/org/default_regex.org index b20c564..f95be72 100644 --- a/org/default_regex.org +++ b/org/default_regex.org @@ -162,8 +162,8 @@ static heading_biblio_blurb                           = ctRegex!(`^:?(?:(1)[~][!  static heading_blurb_glossary                         = ctRegex!(`^:?(?:(1)[~][!](?:blurb|glossary)|[A-D1][~])`);  static para_bullet                                    = ctRegex!(`^_[*] `);  static para_bullet_indent                             = ctRegex!(`^_([1-9])[*] `); -static para_indent                                    = ctRegex!(`^_([1-9]) `); -static para_indent_hang                               = ctRegex!(`^_([0-9])_([0-9]) `); +static para_indent                                    = ctRegex!(`^_(?P<indent>[1-9])[ ]`); +static para_indent_hang                               = ctRegex!(`^_(?P<hang>[0-9])_(?P<indent>[0-9])[ ]`);  static para_attribs                                   = ctRegex!(`^_(?:(?:[0-9])(?:_([0-9]))?|(?:[1-9])?[*]) `);  static para_inline_link_anchor                        = ctRegex!(`\*[~](?P<anchor>[a-z0-9_.-]+)(?= |$)`,"i");  #+END_SRC @@ -280,10 +280,18 @@ static smid_inline_link_endnote_url_helper            = ctRegex!(`\{~\^\s+(?P<co  #+name: meta_rgx  #+BEGIN_SRC d  static image                                           = ctRegex!(`([a-zA-Z0-9._-]+?\.(?:png|gif|jpg))`, "mg"); -static smid_image                                      = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[{┥](?:~\^\s+|\s*))(?P<image>\S+\.(?:png|gif|jpg))(?P<post>(?:.*?)\s*[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg"); +static smid_image                                      = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[{┥](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))(?P<post>(?:.*?)\s*[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg");  static smid_image_generic                              = ctRegex!(`(?:^|[ ]|[^\S]?)[{┥](?:~\^\s+|\s*)\S+\.(?:png|gif|jpg).*?[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg"); -static smid_image_with_dimensions                      = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[{┥](?:~\^\s+|\s*))(?P<image>\S+\.(?:png|gif|jpg))\s+(?P<width>\d+)x(?P<height>\d+)\s*(?P<post>(?:.*?)\s*[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg"); +static smid_image_with_dimensions                      = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[{┥](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))\s+(?P<width>\d+)x(?P<height>\d+)\s*(?P<post>(?:.*?)\s*[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg");  static smid_mod_image_without_dimensions               = ctRegex!(`[{┥](?:~\^\s+|\s*)☼\S+\.(?:png|gif|jpg),w0h0.*[}┝](?:image|┤.*?├|(?:https?|git):\/\/\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg"); +static smid_a_image                                    = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[{](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))(?P<post>(?:.*?)\s*[}](?:image|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg"); +static smid_a_image_generic                            = ctRegex!(`(?:^|[ ]|[^\S]?)[{](?:~\^\s+|\s*)\S+\.(?:png|gif|jpg).*?[}](?:image|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg"); +static smid_a_image_with_dimensions                    = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[{](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))\s+(?P<width>\d+)x(?P<height>\d+)\s*(?P<post>(?:.*?)\s*[}](?:image|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg"); +static smid_a_mod_image_without_dimensions             = ctRegex!(`[{](?:~\^\s+|\s*)☼\S+\.(?:png|gif|jpg),w0h0.*[}](?:image|(?:https?|git):\/\/\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg"); +static smid_b_image                                    = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[┥](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))(?P<post>(?:.*?)\s*[┝](?:┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg"); +static smid_b_image_generic                            = ctRegex!(`(?:^|[ ]|[^\S]?)[┥](?:~\^\s+|\s*)\S+\.(?:png|gif|jpg).*?[┝](?:┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg"); +static smid_b_image_with_dimensions                    = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[┥](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))\s+(?P<width>\d+)x(?P<height>\d+)\s*(?P<post>(?:.*?)\s*[┝](?:┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg"); +static smid_b_mod_image_without_dimensions             = ctRegex!(`[┥](?:~\^\s+|\s*)☼\S+\.(?:png|gif|jpg),w0h0.*[┝](?:┤.*?├|(?:https?|git):\/\/\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg");  static smid_image_delimit                              = ctRegex!(`(?P<pre>^|[ ]|[^\S]?)\{\s*(?P<text>.+?)\s*\}(?:image)(?=[;:!,?.]?([ )\]]|$))`, "mg");  #+END_SRC @@ -297,6 +305,22 @@ static book_index_open                                = ctRegex!(`^=\{\s*([^}]*?  static book_index_close                               = ctRegex!(`^(.*?)\}$`, "m");  #+END_SRC +** switch +*** switch off auto-heading number + +#+name: meta_rgx +#+BEGIN_SRC d +static auto_heading_numbering_lv1                    = ctRegex!(`^1~`, "m"); +static auto_heading_numbering_lv2                    = ctRegex!(`^2~`, "m"); +static auto_heading_numbering_lv3                    = ctRegex!(`^3~`, "m"); +static auto_heading_numbering_lv4                    = ctRegex!(`^4~`, "m"); +static auto_heading_numbering_off                    = ctRegex!(`^[A-D1-4]~\S*?-\s`, "m"); +static auto_heading_numbering_off_lv1                = ctRegex!(`^1~\S*?-\s`, "m"); +static auto_heading_numbering_off_lv2                = ctRegex!(`^2~\S*?-\s`, "m"); +static auto_heading_numbering_off_lv3                = ctRegex!(`^3~\S*?-\s`, "m"); +static auto_heading_numbering_off_lv4                = ctRegex!(`^4~\S*?-\s`, "m"); +#+END_SRC +  ** no object_number object                                :ocn:off:object:  #+name: meta_rgx @@ -305,6 +329,7 @@ static book_index_close                               = ctRegex!(`^(.*?)\}$`, "m  static object_number_off                            = ctRegex!(`~#[ ]*$`, "m");  static object_number_off_dh                         = ctRegex!(`-#$`, "m");  static object_number_off_all                        = ctRegex!(`[~-]#$`, "m"); +static repeated_character_line_separator            = ctRegex!(`^(?:(?:(?:[.][ ]?){4,}|(?:[-][ ]?|[~][ ]?|[*][ ]?|[$][ ]?|[#][ ]?|[\\][ ]?|[/][ ]?){2,})\s*?)*$`);  #+END_SRC  ** no object_number block                                  :ocn:off:block: @@ -467,6 +492,11 @@ static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a  #+name: prgmkup_rgx  #+BEGIN_SRC d  /+ line breaks +/ +static empty_line                                     = ctRegex!(`^\s*$`); +static empty_block                                    = ctRegex!(`^\s*$`, "mg"); +static br_line_natural                                = ctRegex!(`\n`, "mg"); +static br_empty_line                                  = ctRegex!(`\n[ ]*\n`, "mg"); +static br_newlines_linebreaks                         = ctRegex!(`[\n┘┙]`, "mg");  static br_line                                        = ctRegex!(`┘`, "mg");  static br_nl                                          = ctRegex!(`┙`, "mg");  static br_paragraph                                   = ctRegex!(`┚`, "mg"); @@ -483,15 +513,15 @@ static br_page_new                                    = ctRegex!(`╂`, "mg");  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_regular                        = ctRegex!(`【(.+?)】`, "mg");  static inline_notes_al_gen_text                       = ctRegex!(`【(?P<text>.+?)】`, "m");  static inline_notes_al_gen_ref                        = ctRegex!(`【(?P<ref>[*+]\s+)\s*(?P<text>.+?)】`, "mg"); +static inline_notes_al_regular_number_note            = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)\s*】`, "mg");  static inline_al_delimiter_open_regular               = ctRegex!(`【\s`, "m");  static inline_al_delimiter_open_symbol_star           = ctRegex!(`【[*]\s`, "m");  static inline_al_delimiter_open_symbol_plus           = ctRegex!(`【[+]\s`, "m");  static inline_al_delimiter_close_regular              = ctRegex!(`】`, "m");  static inline_al_delimiter_open_and_close_regular     = ctRegex!(`【|】`, "m"); -static inline_notes_delimiter_al_regular              = ctRegex!(`【(.+?)】`, "mg"); -static inline_notes_delimiter_al_regular_number_note  = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)】`, "mg");  static inline_al_delimiter_open_asterisk              = ctRegex!(`【\*`, "m");  static inline_al_delimiter_open_plus                  = ctRegex!(`【\+`, "m");  static inline_text_and_note_al                        = ctRegex!(`(?P<text>.+?)【(?:[*+ ]*)(?P<note>.+?)】`, "mg"); @@ -502,9 +532,10 @@ static inline_text_and_note_al_                       = ctRegex!(`(.+?(?:【[*+]  #+name: prgmkup_rgx  #+BEGIN_SRC d -/+ inline markup footnotes endnotes +/ -static inline_image                                   = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>\S+?\.(?:jpg|gif|png)),w(?P<width>\d+)h(?P<height>\d+))\s*(?P<post>.*?┝┤.*?├)`, "mg"); -static inline_image_without_dimensions                = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>\S+?\.(?:jpg|gif|png)),w(?P<width>0)h(?P<height>0))\s*(?P<post>.*?┝┤.*?├)`, "mg"); +/+ inline markup links +/ +static inline_image                                   = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>\d+)h(?P<height>\d+))\s*(?P<post>.*?┝┤.*?├)`, "mg"); +static inline_image_without_dimensions                = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>0)h(?P<height>0))\s*(?P<post>.*?┝┤.*?├)`, "mg"); +static inline_image_info                              = ctRegex!(`☼?(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>\d+)h(?P<height>\d+)`, "mg");  static inline_link_anchor                             = ctRegex!(`┋(?P<anchor>\S+?)┋`, "mg"); // TODO *~text_link_anchor  static inline_link_                                   = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>.+?)├`, "mg");  static inline_link                                    = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>\S+?)├`, "mg"); @@ -516,6 +547,7 @@ static inline_link_hash                               = ctRegex!(`┥(?P<text>.+  static inline_link_clean                              = ctRegex!(`┤(?:.+?)├|[┥┝]`, "mg");  static inline_a_url                                   = ctRegex!(`(┤)([^\s┥┝┤├]+)(├)`, "mg");  static url                                            = ctRegex!(`https?://`, "mg"); +static uri                                            = ctRegex!(`(?:https?|git)://`, "mg");  static inline_link_subtoc                             = ctRegex!(`^(?P<level>[5-7])~ ┥(?P<text>.+?)┝┤(?P<link>.+?)├`, "mg");  static fn_suffix                                      = ctRegex!(`\.fnSuffix`, "mg");  static inline_link_fn_suffix                          = ctRegex!(`¤(.+?)(\.fnSuffix)`, "mg"); diff --git a/org/doc_reform.org b/org/doc_reform.org index d7ea680..2fd11ac 100644 --- a/org/doc_reform.org +++ b/org/doc_reform.org @@ -69,7 +69,8 @@ version (Posix) {  module doc_reform.sisu_document_parser;  import    doc_reform.conf.compile_time_info, -  doc_reform.meta.metadoc; +  doc_reform.meta.metadoc, +  doc_reform.meta.metadochead;  <<imports_doc_reform>>  import std.algorithm;  import std.parallelism; @@ -832,8 +833,39 @@ writeln("no recognized filename");  break; // terminate, stop  #+END_SRC -* 2. _document abstraction functions_           :module:doc_reform:abstraction: -** 0. module template +* 2. pre-processing +** Harvest _get document head_ for harvest (separate thread) +*** 0 module template +- harvest, get document head + +#+BEGIN_SRC d  :tangle "../src/doc_reform/meta/metadochead.d" +module doc_reform.meta.metadochead; +template DocReformHarvestGetFromHead() { // TODO +  <<imports_doc_reform>> +  <<doc_reform_mixin>> +  enum headBody { header, body_content, insert_file_list, image_list } +  enum makeMeta { make, meta } +  enum docAbst  { doc_abstraction, section_keys, segnames, segnames_0_4, images } +  static auto rgx = Rgx(); +  auto DocReformHarvestGetFromHead(E,O,M)( // TODO +    E _env, +    O _opt_action, +    M _manifest +  ){ +    <<doc_reform_conf_files_in_toml>> +    <<doc_reform_each_file_do_read_and_split_sisu_markup_file_content_into_header_and_body>> +    <<doc_reform_each_file_do_split_sisu_markup_file_header_into_make_and_meta_structs>> +    <<doc_reform_each_file_do_document_matters_abridged>> +    auto t = tuple(doc_matters_shared, doc_matters_abridged_collected); +    static assert(t.length==2); +    return t; +  } +} +#+END_SRC + +** Output _document abstraction functions_            :module:doc_reform:abstraction: +*** 0 module template +- abstraction template  #+BEGIN_SRC d  :tangle "../src/doc_reform/meta/metadoc.d"  module doc_reform.meta.metadoc; diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index 6ea5d5d..1121d15 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -415,6 +415,7 @@ static auto ocn_emit(int ocn_status_flag) {  static auto inline_markup_faces(L)(L line) {    static auto rgx = Rgx();    static auto mkup = InlineMarkup(); +  line = replaceAll!(m => mkup.quote_o ~ m[1] ~ mkup.quote_c)(line, rgx.within_quotes);    line = replaceAll!(m => mkup.mono ~ mkup.ff_o ~ m[2] ~ mkup.ff_c ~ mkup.mono)(line, rgx.inline_mark_mono);    line = replaceAll!(m => mkup.cite ~ mkup.ff_o ~ m[2] ~ mkup.ff_c ~ mkup.cite)(line, rgx.inline_mark_cite);    foreach (regx; [rgx.inline_mark_emphasis, rgx.inline_mark_bold, rgx.inline_mark_underscore, rgx.inline_mark_italics, rgx.inline_mark_superscript, rgx.inline_mark_subscript, rgx.inline_mark_strike, rgx.inline_mark_insert]) { @@ -663,10 +664,6 @@ scope(failure) {      line,    );  } -line = line.replaceAll(rgx.true_dollar, "$$$$"); -  /+ dollar represented as $$ needed to stop submatching on $ -     (substitutions using ${identifiers} must take into account (i.e. happen earlier)) -   +/  debug(source) {    writeln(line);  } @@ -884,8 +881,8 @@ if there is a blurb section you need to:        debug(paraindent) {          writeln(line);        } -      indent["hang_position"] = (m.captures[1]).to!int; -      indent["base_position"] = 0; +      indent["hang_position"] = (m[1]).to!int; +      indent["base_position"] = (m[1]).to!int;      } else if (line.matchFirst(rgx.para_bullet)) {        debug(parabullet) {          writeln(line); @@ -896,16 +893,16 @@ if there is a blurb section you need to:          writeln(line);        }        indent=[ -        "hang_position" : (m.captures[1]).to!int, -        "base_position" : (m.captures[2]).to!int, +        "hang_position" : (m[1]).to!int, +        "base_position" : (m[2]).to!int,        ];      } else if (auto m = line.matchFirst(rgx.para_bullet_indent)) {        debug(parabulletindent) {          writeln(line);        }        indent=[ -        "hang_position" : (m.captures[1]).to!int, -        "base_position" : 0, +        "hang_position" : (m[1]).to!int, +        "base_position" : (m[1]).to!int,        ];        bullet = true;      } @@ -1290,7 +1287,7 @@ if ((obj_type_status["heading"] == State.on)    an_object["is"] = "heading";    an_object_key="body_nugget";    auto substantive_object_and_anchor_tags_tuple -    = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, _new_doc); +    = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, ((_new_doc) ? Yes._new_doc : No._new_doc));    an_object["substantive"] = substantive_object_and_anchor_tags_tuple[sObj.content];    anchor_tag = substantive_object_and_anchor_tags_tuple[sObj.anchor_tag];    if (_new_doc) { @@ -1412,6 +1409,10 @@ if ((obj_type_status["heading"] == State.on)  } else if ((obj_type_status["para"] == State.on)  && (line_occur["para"] > State.off)) {    /+ paragraph object (current line empty) +/ +  /+ repeated character paragraph separator +/ +  if ((an_object[an_object_key].to!string).matchFirst(rgx.repeated_character_line_separator)) { +    obj_type_status["ocn_status"]                          = OCNstatus.off; +  }    obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);    an_object["bookindex_nugget"]      = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -1430,7 +1431,7 @@ if ((obj_type_status["heading"] == State.on)        an_object["is"],      );    auto substantive_obj_misc_tuple -    = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +    = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);    an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];    anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];    comp_obj_para                                             = comp_obj_para.init; @@ -1493,7 +1494,7 @@ if (the_document_body_section.length > 0) {        foreach (i; previous_length .. the_document_body_section.length) {          if (the_document_body_section[i].metainfo.is_a == "verse") {            if ((the_document_body_section[i].text).match( -            rgx.inline_notes_delimiter_al_regular_number_note +            rgx.inline_notes_al_regular_number_note            )) {              note_section.gather_notes_for_endnote_section(                the_document_body_section, @@ -1507,7 +1508,7 @@ if (the_document_body_section.length > 0) {        /+ scan object for endnotes +/        previous_length = the_document_body_section.length.to!int;        if ((the_document_body_section[$-1].text).match( -        rgx.inline_notes_delimiter_al_regular_number_note +        rgx.inline_notes_al_regular_number_note        )) {          previous_count=(the_document_body_section.length -1).to!int;          note_section.gather_notes_for_endnote_section( @@ -2269,20 +2270,20 @@ auto get_decendants(S)(S document_sections) {    foreach (_lg, ref obj; document_sections) {      if (obj.metainfo.is_a == "heading") {        foreach (_dts_lv, dom_tag_status; obj.metainfo.dom_structure_markedup_tags_status) { -        switch (dom_tag_status) { -        case DomTags.none: break; -        case DomTags.open: +        switch (dom_tag_status) with (DomTags) { +        case none: break; +        case open:              _ocn_open_key[_dts_lv] = (obj.metainfo.ocn).to!string;              _heading_ocn_decendants[_ocn_open_key[_dts_lv]] = obj.metainfo.ocn;            break; -        case DomTags.close: +        case close:            if (_ocn_open_key[_dts_lv].empty) {              _ocn_open_key[_dts_lv] = "0";            }            _heading_ocn_decendants[_ocn_open_key[_dts_lv]] = obj.metainfo.ocn - 1;            _ocn_open_key[_dts_lv] = (0).to!string;            break; -        case DomTags.close_and_open: +        case close_and_open:            if (_ocn_open_key[_dts_lv].empty) {              _ocn_open_key[_dts_lv] = "0";            } @@ -2290,7 +2291,7 @@ auto get_decendants(S)(S document_sections) {            _ocn_open_key[_dts_lv] = (obj.metainfo.ocn).to!string;            _heading_ocn_decendants[_ocn_open_key[_dts_lv]] = obj.metainfo.ocn;            break; -        case DomTags.open_still: break; +        case open_still: break;          default: break;          }        } @@ -2338,9 +2339,9 @@ auto _image_dimensions(O,M)(O obj, M manifest_matter) {      int max_width = 640;      foreach (m; obj.text.matchAll(rgx.inline_image_without_dimensions)) {        debug(images) { -        writeln(manifest_matter.src.image_dir_path ~ "/" ~ m.captures["img"]); +        writeln(manifest_matter.src.image_dir_path ~ "/" ~ m["img"]);        } -      read_image_info(manifest_matter.src.image_dir_path ~ "/" ~ m.captures["img"], w, h, chans); +      read_image_info(manifest_matter.src.image_dir_path ~ "/" ~ m["img"], w, h, chans);        // calculate, decide max width and proportionally reduce to keep w & h within it        debug(images) {          writeln("width: ", w, ", height: ", h); @@ -2939,40 +2940,40 @@ auto document_the = [  #+name: abs_post  #+BEGIN_SRC d  string[][string] document_section_keys_sequenced = [ -  "seg":    ["head", "toc", "body",],    "scroll": ["head", "toc", "body",], +  "seg":    ["head", "toc", "body",],    "sql":    ["head", "body",]  ];  if (document_the["endnotes"].length > 1) { -  document_section_keys_sequenced["seg"]    ~= "endnotes";    document_section_keys_sequenced["scroll"] ~= "endnotes"; +  document_section_keys_sequenced["seg"]    ~= "endnotes";  }  if (document_the["glossary"].length > 1) { -  document_section_keys_sequenced["seg"]    ~= "glossary";    document_section_keys_sequenced["scroll"] ~= "glossary"; +  document_section_keys_sequenced["seg"]    ~= "glossary";    document_section_keys_sequenced["sql"]    ~= "glossary";  }  if (document_the["bibliography"].length > 1) { -  document_section_keys_sequenced["seg"]    ~= "bibliography";    document_section_keys_sequenced["scroll"] ~= "bibliography"; +  document_section_keys_sequenced["seg"]    ~= "bibliography";    document_section_keys_sequenced["sql"]    ~= "bibliography";  }  if (document_the["bookindex"].length > 1) { -  document_section_keys_sequenced["seg"]    ~= "bookindex";    document_section_keys_sequenced["scroll"] ~= "bookindex"; +  document_section_keys_sequenced["seg"]    ~= "bookindex";    document_section_keys_sequenced["sql"]    ~= "bookindex";  }  if (document_the["blurb"].length > 1) { -  document_section_keys_sequenced["seg"]    ~= "blurb";    document_section_keys_sequenced["scroll"] ~= "blurb"; +  document_section_keys_sequenced["seg"]    ~= "blurb";    document_section_keys_sequenced["sql"]    ~= "blurb";  }  if ((opt_action.html)  || (opt_action.html_scroll)  || (opt_action.html_seg)  || (opt_action.epub)) { -  document_section_keys_sequenced["seg"]    ~= "tail";    document_section_keys_sequenced["scroll"] ~= "tail"; +  document_section_keys_sequenced["seg"]    ~= "tail";  }  auto sequenced_document_keys = docSectKeysSeq!()(document_section_keys_sequenced);  #+END_SRC @@ -3230,8 +3231,8 @@ void _start_block_(L,T,N)(  #+BEGIN_SRC d    if (auto m = line.matchFirst(rgx.block_curly_code_open)) {      /+ curly code open +/ -    code_block_syntax = (m.captures[1]) ? m.captures[1].to!string : ""; -    code_block_numbered = (m.captures[2].matchFirst(rgx.code_numbering)) +    code_block_syntax = (m[1]) ? m[1].to!string : ""; +    code_block_numbered = (m[2].matchFirst(rgx.code_numbering))        ? true : false;      debug(codecurly) {                              // code (curly) open        writefln( @@ -3326,7 +3327,7 @@ void _start_block_(L,T,N)(          line        );      } -    an_object["table_head"]        = m.captures[1].to!string; +    an_object["table_head"]        = m[1].to!string;      an_object["block_type"]        = "curly";      obj_type_status["blocks"]      = TriState.on;      obj_type_status["table"]       = TriState.on; @@ -3339,7 +3340,7 @@ void _start_block_(L,T,N)(  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_curly_table_special_markup)) {      /+ table: special table block markup syntax! +/ -    an_object["table_head"]                       = m.captures[1].to!string; +    an_object["table_head"]                       = m[1].to!string;      an_object["block_type"]                       = "special";      obj_type_status["blocks"]                     = TriState.on;      obj_type_status["table"]                      = TriState.on; @@ -3353,8 +3354,8 @@ void _start_block_(L,T,N)(  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_code_open)) {      /+ tic code open +/ -    code_block_syntax = (m.captures[1]) ? m.captures[1].to!string : ""; -    code_block_numbered = (m.captures[2].matchFirst(rgx.code_numbering)) +    code_block_syntax = (m[1]) ? m[1].to!string : ""; +    code_block_numbered = (m[2].matchFirst(rgx.code_numbering))        ? true : false;      debug(codetic) {                              // code (tic) open        writefln( @@ -3449,7 +3450,7 @@ void _start_block_(L,T,N)(          line        );      } -    an_object["table_head"]      = m.captures[1].to!string; +    an_object["table_head"]      = m[1].to!string;      an_object["block_type"]      = "tic";      obj_type_status["blocks"]    = TriState.on;      obj_type_status["table"]     = TriState.on; @@ -3919,7 +3920,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(            }            an_object["is"]                           = "verse";            auto substantive_obj_misc_tuple -            = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +            = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);            an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];            anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];            comp_obj_block                                 = comp_obj_block.init; @@ -3982,7 +3983,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(            an_object["is"]          );          auto substantive_obj_misc_tuple -          = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +          = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);          an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];          anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];          comp_obj_block                                 = comp_obj_block.init; @@ -4028,7 +4029,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(          processing.remove("verse");          an_object["is"]                                = "verse";          auto substantive_obj_misc_tuple -          = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +          = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);          an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];          anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];          comp_obj_block                                 = comp_obj_block.init; @@ -4091,7 +4092,7 @@ void _poem_block_(L,O,T,C,N,CMM,Ts)(              an_object["is"]            );          auto substantive_obj_misc_tuple -          = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +          = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);          an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];          anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];          comp_obj_block                                 = comp_obj_block.init; @@ -4241,7 +4242,7 @@ void _table_closed_make_special_notation_table_(N,CMM)(        );      an_object["is"] = "table";      auto substantive_obj_misc_tuple -      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", conf_make_meta, false); +      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", conf_make_meta, No._new_doc);      an_object["substantive"]                       = substantive_obj_misc_tuple[sObj.content];      comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;      comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier; @@ -4318,7 +4319,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(          an_object["is"]        );      auto substantive_obj_misc_tuple -      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);      an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];      anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];      comp_obj_block                                 = comp_obj_block.init; @@ -4373,7 +4374,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(          an_object["is"]        );      auto substantive_obj_misc_tuple -      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);      an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];      anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];      comp_obj_block                                 = comp_obj_block.init; @@ -4428,7 +4429,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(          an_object["is"]        );      auto substantive_obj_misc_tuple -      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);      an_object["substantive"]                       = substantive_obj_misc_tuple[sObj.content];      // anchor_tag                                  = substantive_obj_misc_tuple[sObj.anchor_tag];      comp_obj_block                                 = comp_obj_block.init; @@ -4525,7 +4526,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(          an_object["is"]        );      auto substantive_obj_misc_tuple -      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);      an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];      anchor_tag = substantive_obj_misc_tuple[sObj.anchor_tag];      comp_obj_code                                 = comp_obj_code.init; @@ -4580,7 +4581,7 @@ void _block_flag_line_empty_(B,N,CMM,Ts)(          an_object["is"]        );      auto substantive_obj_misc_tuple -      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, false); +      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc);      an_object["substantive"]                       = substantive_obj_misc_tuple[sObj.content];      comp_obj_block                                 = comp_obj_block.init;      comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number; @@ -4631,7 +4632,7 @@ auto _book_index_(L,I,O,T,B)(      debug(bookindexmatch) {        writefln(          "* [bookindex] %s\n", -        m.captures[1].to!string, +        m[1].to!string,        );      }      an_object["bookindex_nugget"] = m.captures[1].to!string; @@ -5033,8 +5034,8 @@ void _para_match_(L,O,K,I,B,T,C)(        debug(paraindent) {          writeln(line);        } -      indent["hang_position"] = (m.captures[1]).to!int; -      indent["base_position"] = 0; +      indent["hang_position"] = (m[1]).to!int; +      indent["base_position"] = (m[1]).to!int;      } else if (line.matchFirst(rgx.para_bullet)) {        debug(parabullet) {          writeln(line); @@ -5045,16 +5046,16 @@ void _para_match_(L,O,K,I,B,T,C)(          writeln(line);        }        indent=[ -        "hang_position" : (m.captures[1]).to!int, -        "base_position" : (m.captures[2]).to!int, +        "hang_position" : (m[1]).to!int, +        "base_position" : (m[2]).to!int,        ];      } else if (auto m = line.matchFirst(rgx.para_bullet_indent)) {        debug(parabulletindent) {          writeln(line);        }        indent=[ -        "hang_position" : (m.captures[1]).to!int, -        "base_position" : 0, +        "hang_position" : (m[1]).to!int, +        "base_position" : (m[1]).to!int,        ];        bullet = true;      } @@ -5338,28 +5339,28 @@ pure struct OCNemitter {      ocn_object_number = ocn_bkidx = 0;      object_identifier = "";      ocn_is_off = false; -    switch(ocn_status_flag) { -    case OCNstatus.reset: +    switch(ocn_status_flag) with (OCNstatus) { +    case reset:        ocn_digit = ocn_on_ = 1;        object_identifier = "1";        ocn_is_off = false;        ocn_off_ = ocn_bkidx_ = 0;        break; -    case OCNstatus.on: +    case on:        ocn_digit = ocn_object_number = ++ocn_on_;        object_identifier = ocn_digit.to!string;        ocn_is_off = false;        break; -    case OCNstatus.off: +    case off:        ocn_digit = 0;        ocn_off_ = ++ocn_off_;        object_identifier = "a" ~ ocn_off_.to!string;        ocn_is_off = true;        break; -    case OCNstatus.bkidx: +    case bkidx:        ocn_bkidx = ++ocn_bkidx_;        break; -    case OCNstatus.closing: +    case closing:        break;      default:        ocn_digit = 0; @@ -5560,7 +5561,7 @@ static struct ObjInlineMarkupMunge {      debug(footnotesdone) {        foreach(m; matchAll(obj_txt_out,        (mkup.en_a_o ~ `\s*(.+?)` ~ mkup.en_a_c))) { -        writeln(m.captures[1]); +        writeln(m[1]);          writeln(m.hit);        }      } @@ -5827,7 +5828,7 @@ static struct ObjInlineMarkup {      O   obj_,      K   obj_key_,      CMM conf_make_meta, -    bool _new_doc +    Flag!"_new_doc" _new_doc    )    in {      debug(asserts) { @@ -5993,26 +5994,6 @@ static struct ObjInlineMarkup {        comp_obj_toc.text                        = toc_txt_.to!string.strip;        comp_obj_toc.has.inline_links            = true;        the_table_of_contents_section            ~= comp_obj_toc; -    } else { -      indent=[ -        "hang_position" : 0, -        "base_position" : 0, -      ]; -      comp_obj_toc                             = comp_obj_toc.init; -      comp_obj_toc.metainfo.is_of_part         = "frontmatter"; -      comp_obj_toc.metainfo.is_of_section      = "toc"; -      comp_obj_toc.metainfo.is_of_type         = "para"; -      comp_obj_toc.metainfo.is_a               = "toc"; -      comp_obj_toc.metainfo.ocn                = 0; -      comp_obj_toc.metainfo.identifier         = ""; -      comp_obj_toc.metainfo.object_number_off  = true; -      comp_obj_toc.metainfo.object_number_type = 0; -      comp_obj_toc.attrib.indent_hang          = indent["hang_position"]; -      comp_obj_toc.attrib.indent_base          = indent["base_position"]; -      comp_obj_toc.attrib.bullet               = false; -      comp_obj_toc.text                        = "Table of Contents"; -      comp_obj_toc.has.inline_links            = true; -      the_table_of_contents_section            ~= comp_obj_toc;      }      comp_obj_toc                               = comp_obj_toc.init;      comp_obj_toc.metainfo.is_of_part           = "frontmatter"; @@ -6065,11 +6046,12 @@ private:    static int[] heading_num = [ 0, 0, 0, 0 ];    static string heading_number_auto_composite = "";    static string heading_number_auto_composite_segname = ""; +  static bool[] auto_heading_numbering = [ true, true, true, true];    static string _configured_auto_heading_numbering_and_segment_anchor_tags(M,O,CMM)( -    M   munge_, -    O   obj_, -    CMM conf_make_meta, -    bool _new_doc +    M    munge_, +    O    obj_, +    CMM  conf_make_meta, +    bool _new_doc,    ) {      debug(asserts) {        static assert(is(typeof(munge_)          == string)); @@ -6078,6 +6060,7 @@ private:      if (_new_doc) {        heading_num = [ 0, 0, 0, 0 ];        heading_number_auto_composite = ""; +      auto_heading_numbering = [ true, true, true, true];      }      if (conf_make_meta.make.auto_num_top_lv) {        if (obj_["lev_markup_number"].to!int == 0) { @@ -6100,7 +6083,11 @@ private:          conf_make_meta.make.auto_num_top_lv            == obj_["lev_markup_number"].to!uint        ) { -        heading_num[0] ++; +        auto_heading_numbering[0] = +          (munge_.match(rgx.auto_heading_numbering_off_lv1)) ? false : true; +        if (auto_heading_numbering[0]) { +          heading_num[0] ++; +        }          heading_num[1] = 0;          heading_num[2] = 0;          heading_num[3] = 0; @@ -6108,55 +6095,86 @@ private:          conf_make_meta.make.auto_num_top_lv            == (obj_["lev_markup_number"].to!uint - 1)        ) { -        heading_num[1] ++; +        auto_heading_numbering[1] = +          (munge_.match(rgx.auto_heading_numbering_off_lv2)) ? false : true; +        if (auto_heading_numbering[0] +        && auto_heading_numbering[1]) { +          heading_num[1] ++; +        }          heading_num[2] = 0;          heading_num[3] = 0;        } else if (          conf_make_meta.make.auto_num_top_lv            == (obj_["lev_markup_number"].to!uint - 2)        ) { -        heading_num[2] ++; +        auto_heading_numbering[2] = +          (munge_.match(rgx.auto_heading_numbering_off_lv3)) ? false : true; +        if (auto_heading_numbering[0] +        && auto_heading_numbering[1] +        && auto_heading_numbering[2]) { +          heading_num[2] ++; +        }          heading_num[3] = 0;        } else if (          conf_make_meta.make.auto_num_top_lv            == (obj_["lev_markup_number"].to!uint - 3)        ) { -        heading_num[3] ++; -      } -      if (heading_num[3] > 0) { -        heading_number_auto_composite -          = (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 ~ "." -              ~ heading_num[3].to!string -            ) -          : ""; -      } else if (heading_num[2] > 0) { -        heading_number_auto_composite -          = ((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 -             ) -          : ""; -      } else if (heading_num[1] > 0) { -        heading_number_auto_composite -          = ((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.auto_num_depth.to!uint >= 0) -          && (conf_make_meta.make.auto_num_depth.to!uint <= 3)) -          ?  (heading_num[0].to!string) -          : ""; -      } else { -        heading_number_auto_composite = ""; +        auto_heading_numbering[3] = +          (munge_.match(rgx.auto_heading_numbering_off_lv4)) ? false : true; +        if (auto_heading_numbering[0] +        && auto_heading_numbering[1] +        && auto_heading_numbering[2] +        && auto_heading_numbering[3]) { +          heading_num[3] ++; +        } +      } +      if (auto_heading_numbering[0]) { +        if (heading_num[3] > 0) { +          heading_number_auto_composite +            = (conf_make_meta.make.auto_num_depth.to!uint == 3 +              && auto_heading_numbering[3]) +            ? (format(q"┋%s.%s.%s.%s┋", +                heading_num[0].to!string, +                heading_num[1].to!string, +                heading_num[2].to!string, +                heading_num[3].to!string +              )) +            : ""; +        } else if (heading_num[2] > 0) { +          heading_number_auto_composite +            = ((conf_make_meta.make.auto_num_depth.to!uint >= 2) +              && (conf_make_meta.make.auto_num_depth.to!uint <= 3) +              && auto_heading_numbering[2]) +            ? (format(q"┋%s.%s.%s┋", +                heading_num[0].to!string, +                heading_num[1].to!string, +                heading_num[2].to!string +              )) +            : ""; +        } else if (heading_num[1] > 0) { +          heading_number_auto_composite +            = ((conf_make_meta.make.auto_num_depth.to!uint >= 1) +              && (conf_make_meta.make.auto_num_depth.to!uint <= 3) +              && auto_heading_numbering[1]) +            ? (format(q"┋%s.%s┋", +                heading_num[0].to!string, +                heading_num[1].to!string +              )) +            : ""; +        } else if (heading_num[0] > 0 +          && munge_.match(rgx.auto_heading_numbering_lv1) +        ) { +          heading_number_auto_composite +            = ((conf_make_meta.make.auto_num_depth.to!uint >= 0) +              && (conf_make_meta.make.auto_num_depth.to!uint <= 3) +              && auto_heading_numbering[0]) +            ? (format(q"┋%s┋", +                heading_num[0].to!string +              )) +            : ""; +        } else { +          heading_number_auto_composite = ""; +        }        }        heading_number_auto_composite_segname =          (heading_number_auto_composite.empty) @@ -6388,16 +6406,16 @@ struct ObjAttributes {        ~ " \"indent_base\": 0,";      } else if (auto m = obj_txt_in.matchFirst(rgx.para_bullet_indent)) {        _obj_attributes =" \"bullet\": \"true\"," -      ~ " \"indent_hang\": " ~ m.captures[1].to!string ~ "," -      ~ " \"indent_base\": " ~ m.captures[1].to!string ~ ","; +      ~ " \"indent_hang\": " ~ m[1].to!string ~ "," +      ~ " \"indent_base\": " ~ m[1].to!string ~ ",";      } else if (auto m = obj_txt_in.matchFirst(rgx.para_indent_hang)) {        _obj_attributes =" \"bullet\": \"false\"," -      ~ " \"indent_hang\": " ~ m.captures[1].to!string ~ "," -      ~ " \"indent_base\": " ~ m.captures[2].to!string ~ ","; +      ~ " \"indent_hang\": " ~ m[1].to!string ~ "," +      ~ " \"indent_base\": " ~ m[2].to!string ~ ",";      } else if (auto m = obj_txt_in.matchFirst(rgx.para_indent)) {        _obj_attributes =" \"bullet\": \"false\"," -      ~ " \"indent_hang\": " ~ m.captures[1].to!string ~ "," -      ~ " \"indent_base\": " ~ m.captures[1].to!string ~ ","; +      ~ " \"indent_hang\": " ~ m[1].to!string ~ "," +      ~ " \"indent_base\": " ~ m[1].to!string ~ ",";      } else {        _obj_attributes =" \"bullet\": \"false\","        ~ " \"indent_hang\": 0," @@ -6987,7 +7005,7 @@ struct NotesSection {      assert(cntr >= previous_count);      assert(        (contents_am[cntr].text).match( -      rgx.inline_notes_delimiter_al_regular_number_note) +      rgx.inline_notes_al_regular_number_note)      );    }    body { @@ -6997,31 +7015,31 @@ struct NotesSection {      static auto munge = ObjInlineMarkupMunge();      foreach(m;        (contents_am[cntr].text).matchAll( -        rgx.inline_notes_delimiter_al_regular_number_note) +        rgx.inline_notes_al_regular_number_note)      ) {        debug(endnotes_build) {          writeln( -          "{^", mkup.ff_o, m.captures[1], ".", mkup.ff_c, "^}" +          "{^", mkup.ff_o, m[1], ".", mkup.ff_c, "^}"            ~ mkup.mark_internal_site_lnk,            tag_in_seg["seg_lv4"], -            ".fnSuffix#noteref_\n  ", m.captures[1], " ", -          m.captures[2]); // sometimes need segment name (segmented html & epub) +            ".fnSuffix#noteref_\n  ", m[1], " ", +          m[2]); // sometimes need segment name (segmented html & epub)        }        // you need anchor for segments at this point -> -      object_notes["anchor"] ~= "note_" ~ m.captures[1] ~ "』"; +      object_notes["anchor"] ~= "note_" ~ m[1] ~ "』";        object_notes["notes"]  ~= (tag_in_seg["seg_lv4"].empty)        ? (links_and_images( -          "{" ~ mkup.superscript  ~ mkup.ff_o ~ m.captures[1] ~ "." ~ mkup.ff_c  ~ mkup.superscript  ~ "}#noteref_" -          ~ m.captures[1]) ~ " " -          ~ m.captures[2] ~ "』" +          "{" ~ mkup.superscript  ~ mkup.ff_o ~ m[1] ~ "." ~ mkup.ff_c  ~ mkup.superscript  ~ "}#noteref_" +          ~ m[1]) ~ " " +          ~ m[2] ~ "』"          )        : (links_and_images( -          "{" ~ mkup.superscript ~ mkup.ff_o ~ m.captures[1] ~ "." ~ mkup.ff_c  ~ mkup.superscript ~ "}" +          "{" ~ mkup.superscript ~ mkup.ff_o ~ m[1] ~ "." ~ mkup.ff_c  ~ mkup.superscript ~ "}"             ~ mkup.mark_internal_site_lnk             ~ tag_in_seg["seg_lv4"]             ~ ".fnSuffix#noteref_" -           ~ m.captures[1]) ~ " " -           ~ m.captures[2] ~ "』" +           ~ m[1]) ~ " " +           ~ m[2] ~ "』"          );      }      return object_notes; @@ -7145,7 +7163,7 @@ struct NotesSection {        comp_obj_endnote_.attrib.bullet                  = false;        foreach (i, endnote; endnotes_["notes"]) {          auto     m                                     = endnote.matchFirst(rgx.note_ref); -        string   notenumber                            = m.captures[1].to!string; +        string   notenumber                            = m[1].to!string;          string   anchor_tag                            = "note_" ~ notenumber;          comp_obj_endnote_.tags.anchor_tags             = [ endnotes_["anchor"][i] ];          comp_obj_endnote_.has.inline_links             = true; @@ -7824,12 +7842,12 @@ pure void assertions_flag_types_block_status_none_or_closed(T)(T obj_type_status  template docSectKeysSeq() {    auto docSectKeysSeq(string[][string] document_section_keys_sequenced) {      struct doc_sect_keys_seq { -      auto seg() { -        return document_section_keys_sequenced["seg"]; -      }        auto scroll() {          return document_section_keys_sequenced["scroll"];        } +      auto seg() { +        return document_section_keys_sequenced["seg"]; +      }        auto sql() {          return document_section_keys_sequenced["sql"];        } diff --git a/org/meta_debugs.org b/org/meta_debugs.org index 8412048..735085f 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -289,17 +289,17 @@ debug(toc_nav_dom) {      foreach (obj; contents[sect]) {        if (obj.metainfo.is_a == "heading") {          foreach_reverse (k; 0 .. 7) { -          switch (obj.dom_structure_markedup_tags_status[k]) { -          case DomTags.close : +          switch (obj.dom_structure_markedup_tags_status[k]) with (DomTags) { +          case close :              writeln(markup.indent_by_spaces_provided(k), "</", k, ">");              break; -          case DomTags.close_and_open : +          case close_and_open :              writeln(markup.indent_by_spaces_provided(k), "</", k, ">");              writeln(markup.indent_by_spaces_provided(k),                "<", k, ">", obj.text,                " file: ", obj.segment_anchor_tag_html, ".xhtml#", obj.ocn);              break; -          case DomTags.open : +          case open :              writeln(markup.indent_by_spaces_provided(k),                "<", k, ">", obj.text,                " file: ", obj.segment_anchor_tag_html, ".xhtml#", obj.ocn); @@ -316,17 +316,17 @@ debug(toc_nav_dom) {      foreach (obj; contents[sect]) {        if (obj.metainfo.is_a == "heading") {          foreach_reverse (k; 0 .. 7) { -          switch (obj.dom_structure_collapsed_tags_status[k]) { -          case DomTags.close : +          switch (obj.dom_structure_collapsed_tags_status[k]) with (DomTags) { +          case close :              writeln(markup.indent_by_spaces_provided(k), "</", k, ">");              break; -          case DomTags.close_and_open : +          case close_and_open :              writeln(markup.indent_by_spaces_provided(k), "</", k, ">");              writeln(markup.indent_by_spaces_provided(k),                "<", k, ">", obj.text,                " file: ", obj.segment_anchor_tag_html, ".xhtml#", obj.ocn);              break; -          case DomTags.open : +          case open :              writeln(markup.indent_by_spaces_provided(k),                "<", k, ">", obj.text,                " file: ", obj.segment_anchor_tag_html, ".xhtml#", obj.ocn); diff --git a/org/output_sqlite.org b/org/output_sqlite.org index 52839d3..5a1b090 100644 --- a/org/output_sqlite.org +++ b/org/output_sqlite.org @@ -644,17 +644,17 @@ auto inline_notes_scroll(M,O)(    if (obj.has.inline_notes_reg) {      // _txt = font_face(_txt);      _txt = _txt.replaceAll( -      rgx.inline_notes_delimiter_al_regular_number_note, +      rgx.inline_notes_al_regular_number_note,        ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>")      );    }    debug(markup_endnotes) { -    if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { +    if (_txt.match(rgx.inline_notes_al_regular_number_note)) {        writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);      }    }    debug(markup) { -    if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { +    if (_txt.match(rgx.inline_notes_al_regular_number_note)) {        writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);      }    } @@ -674,7 +674,7 @@ auto inline_notes_seg(M,O)(    string[] _endnotes;    if (obj.has.inline_notes_reg) {      /+ need markup for text, and separated footnote +/ -    foreach(m; _txt.matchAll(rgx.inline_notes_delimiter_al_regular_number_note)) { +    foreach(m; _txt.matchAll(rgx.inline_notes_al_regular_number_note)) {        _endnotes ~= format(          "%s%s%s%s\n  %s%s%s%s%s\n  %s\n%s",          "<p class=\"endnote\">", @@ -691,10 +691,10 @@ auto inline_notes_seg(M,O)(        );      }      _txt = _txt.replaceAll( -      rgx.inline_notes_delimiter_al_regular_number_note, +      rgx.inline_notes_al_regular_number_note,        ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>")      ); -  } else if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { +  } else if (_txt.match(rgx.inline_notes_al_regular_number_note)) {      debug(markup) {        writeln(__LINE__, " endnote: ", obj.metainfo.is_a, ": ", obj.text);      } diff --git a/org/output_xmls.org b/org/output_xmls.org index 1e4f91a..4a40323 100644 --- a/org/output_xmls.org +++ b/org/output_xmls.org @@ -103,7 +103,7 @@ string special_characters_text(string _txt){  }  #+END_SRC -**** special characters text +**** special characters  #+name: xhtml_format_objects  #+BEGIN_SRC d @@ -413,7 +413,7 @@ auto epub3_seg_head(M)(  #+BEGIN_SRC d  auto tail() {    string o; -  o = format(q"┋  </div> +  o = format(q"┋    <a name="bottom" id="bottom"></a>    <a name="end" id="end"></a>  </body> @@ -443,8 +443,8 @@ auto inline_images(O,M)(      _img_pth = "../../../image/";    }    if (_txt.match(rgx.inline_image)) { -    _txt = _txt.replaceAll( -        rgx.inline_image, +    _txt = _txt +      .replaceAll(rgx.inline_image,          ("$1<img src=\""            ~ _img_pth            ~ "$3\" width=\"$4\" height=\"$5\" naturalsizeflag=\"0\" align=\"bottom\" border=\"0\" /> $6")) @@ -563,17 +563,17 @@ auto inline_notes_scroll(O,M)(    if (obj.has.inline_notes_reg) {      _txt = font_face(_txt);      _txt = _txt.replaceAll( -      rgx.inline_notes_delimiter_al_regular_number_note, +      rgx.inline_notes_al_regular_number_note,        ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>")      );    }    debug(markup_endnotes) { -    if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { +    if (_txt.match(rgx.inline_notes_al_regular_number_note)) {        writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);      }    }    debug(markup) { -    if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { +    if (_txt.match(rgx.inline_notes_al_regular_number_note)) {        writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);      }    } @@ -594,7 +594,7 @@ auto inline_notes_seg(O,M)(    if (obj.has.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)) { +    foreach(m; _txt.matchAll(rgx.inline_notes_al_regular_number_note)) {        _endnotes ~= format(          "%s%s%s%s\n  %s%s%s%s%s\n  %s\n%s",          "<p class=\"endnote\">", @@ -611,10 +611,10 @@ auto inline_notes_seg(O,M)(        );      }      _txt = _txt.replaceAll( -      rgx.inline_notes_delimiter_al_regular_number_note, +      rgx.inline_notes_al_regular_number_note,        ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>")      ); -  } else if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { +  } else if (_txt.match(rgx.inline_notes_al_regular_number_note)) {      debug(markup) {        writeln(__LINE__, " endnote: ", obj.metainfo.is_a, ": ", obj.text);      } @@ -2426,7 +2426,11 @@ string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) {        }      }    } -  toc ~= format(q"┋  </navMap> +  toc ~= format(q"┋ +    </navPoint> +    </navPoint> +    </navPoint> +  </navMap>  </ncx>┋");    return toc;  } @@ -2822,7 +2826,7 @@ void epub3_write_output_files(W,I)(      ? zip_data.write(contents.dup)      : zip_data.write(contents.dup        .replaceAll(rgx.spaces_line_start, "") -      .replaceAll(rgx.newline, "") +      .replaceAll(rgx.newline, " ")        .strip      );      zip_arc_member_file.expandedData = zip_data.toBytes(); | 
