diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/sdp.d | 104 | ||||
| -rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 316 | ||||
| -rw-r--r-- | src/sdp/ao_rgx.d | 3 | 
3 files changed, 235 insertions, 188 deletions
| @@ -88,52 +88,68 @@ void main(string[] args) {      }    }    bool[string] opt_action_bool = [ -    "assertions"      : false, -    "concordance"     : false, -    "digest"          : false, -    "docbook"         : false, -    "epub"            : false, -    "html"            : false, -    "manifest"        : false, -    "no_ocn"          : false, -    "odt"             : false, -    "pdf"             : false, -    "postgresql"      : false, -    "qrcode"          : false, -    "sisupod"         : false, -    "source"          : false, -    "sqlite"          : false, -    "text"            : false, -    "verbose"         : false, -    "xhtml"           : false, -    "xml_dom"         : false, -    "xml_sax"         : false, +    "assertions"         : false, +    "concordance"        : false, +    "digest"             : false, +    "docbook"            : false, +    "epub"               : false, +    "html"               : false, +    "manifest"           : false, +    "ocn"                : true, +    "odt"                : false, +    "pdf"                : false, +    "postgresql"         : false, +    "qrcode"             : false, +    "sisupod"            : false, +    "source"             : false, +    "sqlite"             : false, +    "text"               : false, +    "verbose"            : false, +    "xhtml"              : false, +    "xml_dom"            : false, +    "xml_sax"            : false, +    "section_toc"        : true, +    "section_body"       : true, +    "section_endnotes"   : true, +    "section_glossary"   : true, +    "section_biblio"     : true, +    "section_bookindex"  : true, +    "section_blurb"      : true, +    "backmatter"         : true,    ];    auto helpInfo = getopt(args,      std.getopt.config.passThrough, -    "assert",         "--assert set optional assertions on",       &opt_action_bool["assertions"], -    "concordance",    "--concordance file for document",           &opt_action_bool["concordance"], -    "digest",         "--digest hash digest for each object",      &opt_action_bool["digest"], -    "docbook",        "--docbook process docbook output",          &opt_action_bool["docbook"], -    "epub",           "--epub process epub output",                &opt_action_bool["epub"], -    "html",           "--html process html output",                &opt_action_bool["html"], -    "manifest",       "--manifest process manifest output",        &opt_action_bool["manifest"], -    "no-ocn",         "--no-ocn suppress object cite numbers",     &opt_action_bool["no_ocn"], -    "odf",            "--odf process odf:odt output",              &opt_action_bool["odt"], -    "odt",            "--odt process odf:odt output",              &opt_action_bool["odt"], -    "pdf",            "--pdf process pdf output",                  &opt_action_bool["pdf"], -    "pg",             "--pg process postgresql output",            &opt_action_bool["postgresql"], -    "postgresql",     "--postgresql process postgresql output",    &opt_action_bool["postgresql"], -    "qrcode",         "--qrcode with document metadata",           &opt_action_bool["qrcode"], -    "sisupod",        "--sisupod sisupod source content bundled",  &opt_action_bool["sisupod"], -    "source",         "--source markup source text content",       &opt_action_bool["source"], -    "sqlite",         "--sqlite process sqlite output",            &opt_action_bool["sqlite"], -    "text",           "--text process text output",                &opt_action_bool["text"], -    "txt",            "--txt process text output",                 &opt_action_bool["text"], -    "verbose|v",      "--verbose output to terminal",              &opt_action_bool["verbose"], -    "xhtml",          "--xhtml process xhtml output",              &opt_action_bool["xhtml"], -    "xml-dom",        "--xml-dom process xml dom output",          &opt_action_bool["xml_dom"], -    "xml-sax",        "--xml-sax process xml sax output",          &opt_action_bool["xml_sax"], +    "assert",             "--assert set optional assertions on",                        &opt_action_bool["assertions"], +    "concordance",        "--concordance file for document",                            &opt_action_bool["concordance"], +    "digest",             "--digest hash digest for each object",                       &opt_action_bool["digest"], +    "docbook",            "--docbook process docbook output",                           &opt_action_bool["docbook"], +    "epub",               "--epub process epub output",                                 &opt_action_bool["epub"], +    "html",               "--html process html output",                                 &opt_action_bool["html"], +    "manifest",           "--manifest process manifest output",                         &opt_action_bool["manifest"], +    "ocn",                "--ocn object cite numbers (default)",                        &opt_action_bool["ocn"], +    "odf",                "--odf process odf:odt output",                               &opt_action_bool["odt"], +    "odt",                "--odt process odf:odt output",                               &opt_action_bool["odt"], +    "pdf",                "--pdf process pdf output",                                   &opt_action_bool["pdf"], +    "pg",                 "--pg process postgresql output",                             &opt_action_bool["postgresql"], +    "postgresql",         "--postgresql process postgresql output",                     &opt_action_bool["postgresql"], +    "qrcode",             "--qrcode with document metadata",                            &opt_action_bool["qrcode"], +    "sisupod",            "--sisupod sisupod source content bundled",                   &opt_action_bool["sisupod"], +    "source",             "--source markup source text content",                        &opt_action_bool["source"], +    "sqlite",             "--sqlite process sqlite output",                             &opt_action_bool["sqlite"], +    "text",               "--text process text output",                                 &opt_action_bool["text"], +    "txt",                "--txt process text output",                                  &opt_action_bool["text"], +    "verbose|v",          "--verbose output to terminal",                               &opt_action_bool["verbose"], +    "xhtml",              "--xhtml process xhtml output",                               &opt_action_bool["xhtml"], +    "xml-dom",            "--xml-dom process xml dom output",                           &opt_action_bool["xml_dom"], +    "xml-sax",            "--xml-sax process xml sax output",                           &opt_action_bool["xml_sax"], +    "section-toc",        "--section-toc process table of contents (default)",          &opt_action_bool["section_toc"], +    "section-body",       "--section-body process document body (default)",             &opt_action_bool["section_body"], +    "section-endnotes",   "--section-endnotes process document endnotes (default)",     &opt_action_bool["section_endnotes"], +    "section-glossary",   "--section-glossary process document glossary (default)",     &opt_action_bool["section_glossary"], +    "section-biblio",     "--section-biblio process document biblio (default)",         &opt_action_bool["section_biblio"], +    "section-bookindex",  "--section-bookindex process document bookindex (default)",   &opt_action_bool["section_bookindex"], +    "section-blurb",      "--section-blurb process document blurb (default)",           &opt_action_bool["section_blurb"], +    "backmatter",         "--section-backmatter process document backmatter (default)", &opt_action_bool["backmatter"],    );    if (helpInfo.helpWanted) {      defaultGetoptPrinter("Some information about the program.", helpInfo.options); @@ -194,7 +210,7 @@ void main(string[] args) {        string[string][string] dochead_make = header_make_and_meta_tuple[0];        string[string][string] dochead_meta = header_make_and_meta_tuple[1];        /+ ↓ document abstraction: process document, return abstraction as tuple +/ -      auto t = abs.abstract_doc_source(content_body, dochead_make, dochead_meta); +      auto t = abs.abstract_doc_source(content_body, dochead_make, dochead_meta, opt_action_bool);        static assert(!isTypeTuple!(t));        auto doc_ao_contents = t[0]; // head ~ toc ~ contents ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~blurb;        auto doc_ao_bookindex_unordered_hashes = t[1]; // redundant? diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index 51089cd..cc39ea1 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -75,9 +75,10 @@ template SiSUdocAbstraction() {      auto node_construct = NodeStructureMetadata();      /+ ↓ abstract marked up document +/      auto abstract_doc_source( -      char[][] markup_sourcefile_content, +      char[][]               markup_sourcefile_content,        string[string][string] dochead_make_aa, -      string[string][string] dochead_meta_aa +      string[string][string] dochead_meta_aa, +      bool[string]           opt_action_bool,      ) {        /+ ↓ abstraction init +/        scope(success) { @@ -214,21 +215,25 @@ template SiSUdocAbstraction() {            /+ object other than "code block" object               (includes regular text paragraph, headings & blocks other than code) +/            if ((matchFirst(line, rgx.heading_biblio) -          || (type["biblio_section"] == State.on)) +          || (type["biblio_section"] == State.on +          && (!matchFirst(line, rgx.heading_blurb_glossary))))            && (!matchFirst(line, rgx.heading))            && (!matchFirst(line, rgx.comment))) {              /+ within section (block object): biblio +/ -            _biblio_block_(line, type, bib_entry, biblio_entry_str_json, biblio_arr_json);              type["glossary_section"] = State.off;              type["biblio_section"] = State.on;              type["blurb_section"] = State.off; -            debug(bibliobuild) { -              writeln("-  ", biblio_entry_str_json); -              writeln("-> ", biblio_arr_json.length); +            if (opt_action_bool["backmatter"] && opt_action_bool["section_biblio"]) { +              _biblio_block_(line, type, bib_entry, biblio_entry_str_json, biblio_arr_json); // +              debug(bibliobuild) { +                writeln("-  ", biblio_entry_str_json); +                writeln("-> ", biblio_arr_json.length); +              }              }              continue;            } else if ((matchFirst(line, rgx.heading_glossary) -          || (type["glossary_section"] == State.on)) +          || (type["glossary_section"] == State.on +          && (!matchFirst(line, rgx.heading_biblio_blurb))))            && (!matchFirst(line, rgx.heading))            && (!matchFirst(line, rgx.comment))) {              /+ within section (block object): glossary +/ @@ -240,53 +245,56 @@ template SiSUdocAbstraction() {              type["glossary_section"] = State.on;              type["biblio_section"] = State.off;              type["blurb_section"] = State.off; -            indent=[ -              "hang_position" : 0, -              "base_position" : 0, -            ]; -            bullet = false; -            type["para"] = State.on; -            line_occur["para"] = State.off; -            an_object_key="glossary_nugget"; // -            if (matchFirst(line, rgx.heading_glossary)) { -              the_glossary_section ~= -                set_abstract_object.contents_heading( -                  "Glossary",       // nugget/object -                  "",               // attrib -                  0,                // obj_cite_number -                  [""],             // anchor tag -                  "B",              // lev -                  1,                // lev_markup_number -                  1,                // lev_collapsed_number -                ); -              the_glossary_section ~= -                set_abstract_object.contents_heading( -                  "Glossary",       // nugget/object -                  "",               // attrib -                  0,                // obj_cite_number -                  ["glossary"],     // anchor tag -                  "1",              // lev -                  4,                // lev_markup_number -                  2,                // lev_collapsed_number -                ); -            // } else if (matchFirst(line, rgx.heading)) { -            //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? -            } else { -              _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); -              the_glossary_section ~= -                set_abstract_object.contents_para( -                  "para",                    // an_object["is"], -                  to!string(line),           // an_object["substantive"], -                  "",                        // attrib -                  0,                         // obj_cite_number, -                  indent, -                  bullet -                ); +            if (opt_action_bool["backmatter"] && opt_action_bool["section_glossary"]) { +              indent=[ +                "hang_position" : 0, +                "base_position" : 0, +              ]; +              bullet = false; +              type["para"] = State.on; +              line_occur["para"] = State.off; +              an_object_key="glossary_nugget"; // +              if (matchFirst(line, rgx.heading_glossary)) { +                the_glossary_section ~= +                  set_abstract_object.contents_heading( +                    "Glossary",       // nugget/object +                    "",               // attrib +                    0,                // obj_cite_number +                    [""],             // anchor tag +                    "B",              // lev +                    1,                // lev_markup_number +                    1,                // lev_collapsed_number +                  ); +                the_glossary_section ~= +                  set_abstract_object.contents_heading( +                    "Glossary",       // nugget/object +                    "",               // attrib +                    0,                // obj_cite_number +                    ["glossary"],     // anchor tag +                    "1",              // lev +                    4,                // lev_markup_number +                    2,                // lev_collapsed_number +                  ); +              // } else if (matchFirst(line, rgx.heading)) { +              //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? +              } else { +                _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); +                the_glossary_section ~= +                  set_abstract_object.contents_para( +                    "para",                    // an_object["is"], +                    to!string(line),           // an_object["substantive"], +                    "",                        // attrib +                    0,                         // obj_cite_number, +                    indent, +                    bullet +                  ); +              } +              type["obj_cite_number_status"] = TriState.off;              } -            type["obj_cite_number_status"] = TriState.off;              continue;            } else if ((matchFirst(line, rgx.heading_blurb) -          || (type["blurb_section"] == State.on)) +          || (type["blurb_section"] == State.on +          && (!matchFirst(line, rgx.heading_biblio_glossary))))            && (!matchFirst(line, rgx.heading))            && (!matchFirst(line, rgx.comment))) {              /+ within section (block object): blurb +/ @@ -298,60 +306,63 @@ template SiSUdocAbstraction() {              type["glossary_section"] = State.off;              type["biblio_section"] = State.off;              type["blurb_section"] = State.on; -            indent=[ -              "hang_position" : 0, -              "base_position" : 0, -            ]; -            bullet = false; -            type["para"] = State.on; -            line_occur["para"] = State.off; -            an_object_key="blurb_nugget"; -            if (matchFirst(line, rgx.heading_blurb)) { -              the_blurb_section ~= -                set_abstract_object.contents_heading( -                  "Blurb",          // nugget/object -                  "",               // attrib -                  0,                // obj_cite_number -                  [""],             // anchor tag -                  "B",              // lev -                  1,                // lev_markup_number -                  1,                // lev_collapsed_number -                ); -              the_blurb_section ~= -                set_abstract_object.contents_heading( -                  "Blurb",          // nugget/object -                  "",               // attrib -                  0,                // obj_cite_number -                  ["blurb"],        // anchor tag -                  "1",              // lev -                  4,                // lev_markup_number -                  2,                // lev_collapsed_number -                ); -            } else if (matchFirst(line, rgx.heading)) { -              _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); -              the_blurb_section ~= -                set_abstract_object.contents_heading( -                  to!string(line),           //  an_object["substantive"], -                  "",                        // attrib -                  0,                         // obj_cite_number -                  [""],                      // anchor tag -                  to!string(an_object["lev"]), -                  to!int(an_object["lev_markup_number"]), -                  to!int(an_object["lev_collapsed_number"]), -                ); -            } else { -              _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); -              the_blurb_section ~= -                set_abstract_object.contents_para( -                  "para",                    // an_object["is"], -                  to!string(line),           //  an_object["substantive"], -                  "",                        // attrib -                  obj_cite_number, -                  indent, -                  bullet -                ); +            if (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"]) { +              indent=[ +                "hang_position" : 0, +                "base_position" : 0, +              ]; +              bullet = false; +              type["para"] = State.on; +              line_occur["para"] = State.off; +              an_object_key="blurb_nugget"; +              if (matchFirst(line, rgx.heading_blurb)) { +                the_blurb_section ~= +                  set_abstract_object.contents_heading( +                    "Blurb",          // nugget/object +                    "",               // attrib +                    0,                // obj_cite_number +                    [""],             // anchor tag +                    "B",              // lev +                    1,                // lev_markup_number +                    1,                // lev_collapsed_number +                  ); +                the_blurb_section ~= +                  set_abstract_object.contents_heading( +                    "Blurb",          // nugget/object +                    "",               // attrib +                    0,                // obj_cite_number +                    ["blurb"],        // anchor tag +                    "1",              // lev +                    4,                // lev_markup_number +                    2,                // lev_collapsed_number +                  ); +              } else if ((matchFirst(line, rgx.heading)) +                && (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"])) { +                _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? +                the_blurb_section ~= +                  set_abstract_object.contents_heading( +                    to!string(line),           //  an_object["substantive"], +                    "",                        // attrib +                    0,                         // obj_cite_number +                    [""],                      // anchor tag +                    to!string(an_object["lev"]), +                    to!int(an_object["lev_markup_number"]), +                    to!int(an_object["lev_collapsed_number"]), +                  ); +              } else { +                _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); +                the_blurb_section ~= +                  set_abstract_object.contents_para( +                    "para",                    // an_object["is"], +                    to!string(line),           //  an_object["substantive"], +                    "",                        // attrib +                    obj_cite_number, +                    indent, +                    bullet +                  ); +              } +              type["obj_cite_number_status"] = TriState.off;              } -            type["obj_cite_number_status"] = TriState.off;              continue;            } else if (type["poem"] == TriState.on) {              /+ within block object: poem +/ @@ -419,7 +430,7 @@ template SiSUdocAbstraction() {                || (matchFirst(line, rgx.book_index_open))                || (type["book_index"] == State.on ))  {                  /+ book_index +/ -                _book_index_(line, book_idx_tmp, an_object, type); +                _book_index_(line, book_idx_tmp, an_object, type, opt_action_bool);                } else {                  /+ not book_index +/                  an_object_key="body_nugget"; @@ -655,15 +666,16 @@ template SiSUdocAbstraction() {        }        /+          Backmatter: -        * endnotes -        * glossary -        * references / bibliography -        * book index +        - endnotes +        - glossary +        - bibliography / references +        - book index +        - blurb        +/        // TODO FIGURE OUT, you need this possibility        // obj_im.obj_inline_markup_and_anchor_tags("doc_end_reset", an_object_key, "", dochead_make_aa);        auto en_tuple = -        note_section.endnote_objects(obj_cite_number); +        note_section.endnote_objects(obj_cite_number, opt_action_bool);        static assert(!isTypeTuple!(en_tuple));        auto the_endnotes_section = en_tuple[0];        obj_cite_number = en_tuple[1]; @@ -771,7 +783,8 @@ template SiSUdocAbstraction() {          bi.bookindex_build_section(            bookindex_unordered_hashes,            obj_cite_number, -          segment_object_belongs_to +          segment_object_belongs_to, +          opt_action_bool,          );        static assert(!isTypeTuple!(bi_tuple));        auto the_bookindex_section = bi_tuple[0]; @@ -1945,10 +1958,11 @@ template SiSUdocAbstraction() {        }      }      auto _book_index_( -      char[] line, -      ref string book_idx_tmp, +      char[]             line, +      ref string         book_idx_tmp,        ref string[string] an_object, -      ref int[string] type +      ref int[string]    type, +      bool[string]       opt_action_bool,      ) {        if (auto m = match(line, rgx.book_index)) {          /+ match book_index +/ @@ -1962,27 +1976,33 @@ template SiSUdocAbstraction() {        } else if (auto m = match(line, rgx.book_index_open))  {          /+ match open book_index +/          type["book_index"] = State.on; -        book_idx_tmp = to!string(m.captures[1]); -        debug(bookindexmatch) {                       // book index -          writefln( -            "* [bookindex] %s\n", -            book_idx_tmp, -          ); +        if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { +          book_idx_tmp = to!string(m.captures[1]); +          debug(bookindexmatch) {                       // book index +            writefln( +              "* [bookindex] %s\n", +              book_idx_tmp, +            ); +          }          }        } else if (type["book_index"] == State.on )  {          /+ book_index flag set +/          if (auto m = match(line, rgx.book_index_close))  {            type["book_index"] = State.off; -          an_object["bookindex_nugget"] = book_idx_tmp ~ to!string(m.captures[1]); -          debug(bookindexmatch) {                     // book index -            writefln( -              "* [bookindex] %s\n", -              book_idx_tmp, -            ); +          if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { +            an_object["bookindex_nugget"] = book_idx_tmp ~ to!string(m.captures[1]); +            debug(bookindexmatch) {                     // book index +              writefln( +                "* [bookindex] %s\n", +                book_idx_tmp, +              ); +            }            }            book_idx_tmp = "";          } else { -          book_idx_tmp ~= line; +          if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { +            book_idx_tmp ~= line; +          }          }        }      } @@ -3297,8 +3317,9 @@ template SiSUdocAbstraction() {        }        auto bookindex_build_section(          string[][string][string] bookindex_unordered_hashes, -        int obj_cite_number, -        string segment_object_belongs_to, +        int                      obj_cite_number, +        string                   segment_object_belongs_to, +        bool[string]             opt_action_bool,        ) {          string type;          string lev; @@ -3309,7 +3330,8 @@ template SiSUdocAbstraction() {          auto mainkeys =            bookindex_unordered_hashes.byKey.array.sort().release;          ObjComposite[][string] bookindex_section; -        if (mainkeys.length > 0) { +        if ((mainkeys.length > 0) +        && (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"])) {            string bi_tmp_seg, bi_tmp_scroll;            attrib="";            lev="B"; @@ -3455,8 +3477,8 @@ template SiSUdocAbstraction() {        auto rgx = Rgx();        private auto gather_notes_for_endnote_section(          ObjComposite[] contents_am, -        string segment_object_belongs_to, -        ulong counter +        string         segment_object_belongs_to, +        ulong          counter,        )        in {          // endnotes/ footnotes for @@ -3521,7 +3543,10 @@ template SiSUdocAbstraction() {          }          return endnotes_;        } -      private auto endnote_objects(int obj_cite_number) +      private auto endnote_objects( +        int            obj_cite_number, +        bool[string]   opt_action_bool, +      )        in {        }        body { @@ -3532,7 +3557,8 @@ template SiSUdocAbstraction() {          string lev, lev_markup_number, lev_collapsed_number;          string attrib;          int[string] indent; -        if (endnotes_["seg"].length > 0) { +        if ((endnotes_["seg"].length > 0) +        && (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"])) {            attrib="";            lev="B";            lev_markup_number="1"; @@ -3607,15 +3633,17 @@ template SiSUdocAbstraction() {                1              );          } -        foreach (i, endnote; endnotes_["seg"]) { -          attrib=""; -          the_endnotes_section["seg"] ~= -            set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); -        } -        foreach (i, endnote; endnotes_["scroll"]) { -          attrib=""; -          the_endnotes_section["scroll"] ~= -            set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +        if (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"]) { +          foreach (i, endnote; endnotes_["seg"]) { +            attrib=""; +            the_endnotes_section["seg"] ~= +              set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +          } +          foreach (i, endnote; endnotes_["scroll"]) { +            attrib=""; +            the_endnotes_section["scroll"] ~= +              set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +          }          }          auto t = tuple(the_endnotes_section, obj_cite_number);          return t; diff --git a/src/sdp/ao_rgx.d b/src/sdp/ao_rgx.d index f320867..aa4cd58 100644 --- a/src/sdp/ao_rgx.d +++ b/src/sdp/ao_rgx.d @@ -74,6 +74,9 @@ template RgxInit() {      static heading_biblio                                 = ctRegex!(`^:?(1)[~][!](biblio(?:graphy)?|references?)`);      static heading_glossary                               = ctRegex!(`^:?(1)[~][!](glossary)`);      static heading_blurb                                  = ctRegex!(`^:?(1)[~][!](blurb)`); +    static heading_biblio_glossary                        = ctRegex!(`^:?(?:(1)[~][!](?:(?:biblio(?:graphy)?|references?)|glossary)|[A-D1][~])`); +    static heading_biblio_blurb                           = ctRegex!(`^:?(?:(1)[~][!](?:(?:biblio(?:graphy)?|references?)|blurb)|[A-D1][~])`); +    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]) `); | 
