diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2025-02-21 12:42:55 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2025-02-21 12:42:57 -0500 | 
| commit | 0b2bb143e4512e0c78d4e2efdb9161772d54459c (patch) | |
| tree | fdc5b0230674c6f1d69ab39b2ce22324a7ad8e87 /src/sisudoc/meta | |
| parent | 0.18.0 (diff) | |
triple single-quote marks block identifier added
- tics a bit cumbersome where single quotes work
  just as well
- testing required (special cases not covered)
- diverges from sisu markup which will need an
  update sometime
Diffstat (limited to 'src/sisudoc/meta')
| -rw-r--r-- | src/sisudoc/meta/metadoc_from_src_functions.d | 200 | ||||
| -rw-r--r-- | src/sisudoc/meta/metadoc_object_setter.d | 1 | ||||
| -rw-r--r-- | src/sisudoc/meta/rgx.d | 12 | 
3 files changed, 211 insertions, 2 deletions
| diff --git a/src/sisudoc/meta/metadoc_from_src_functions.d b/src/sisudoc/meta/metadoc_from_src_functions.d index 781227f..3ae10d1 100644 --- a/src/sisudoc/meta/metadoc_from_src_functions.d +++ b/src/sisudoc/meta/metadoc_from_src_functions.d @@ -453,6 +453,62 @@ template docAbstractionFunctions() {        pith["block_is"]                = eN.blk_is.table;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.curly_special; +    } else if (auto m = line.matchFirst(rgx.block_quotemarks_code_open)) { +      dochas["codeblock"]++; +      an_object["lang"]               = ""; +      an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : ""; +      an_object["syntax"]             = (m["syntax"]) ? m["syntax"].to!string : ""; +      debug(codequotemarks) { writefln( "* [code quotemarks] %s", line); } +      pith["block_is"]                = eN.blk_is.code; +      pith["block_state"]             = eN.blk_state.on; +      pith["block_delim"]             = eN.blk_delim.quotemarks; // +    } else if (auto m = line.matchFirst(rgx.block_quotemarks_poem_open)) { +      dochas["poem"]++; +      an_object["syntax"]             = ""; +      an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : ""; +      an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; +      debug(poem) { writefln( "* [poem quotemarks] %s", line); } +      object_number_poem["start"]     = obj_cite_digits.object_number.to!string; +      pith["block_is"]                = eN.blk_is.poem; +      pith["block_state"]             = eN.blk_state.on; +      pith["block_delim"]             = eN.blk_delim.quotemarks; // +      pith["verse_new"]               = eN.bi.on; +    } else if (auto m = line.matchFirst(rgx.block_quotemarks_group_open)) { +      dochas["group"]++; +      an_object["syntax"]             = ""; +      an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : ""; +      an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; +      debug(group) { writefln( "* [group quotemarks] %s", line); } +      pith["block_is"]                = eN.blk_is.group; +      pith["block_state"]             = eN.blk_state.on; +      pith["block_delim"]             = eN.blk_delim.quotemarks; +    } else if (auto m = line.matchFirst(rgx.block_quotemarks_block_open)) { +      dochas["block"]++; +      an_object["syntax"]             = ""; +      an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : ""; +      an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; +      debug(block) { writefln( "* [block quotemarks] %s", line); } +      pith["block_is"]                = eN.blk_is.block; +      pith["block_state"]             = eN.blk_state.on; +      pith["block_delim"]             = eN.blk_delim.quotemarks; +    } else if (auto m = line.matchFirst(rgx.block_quotemarks_quote_open)) { +      dochas["quote"]++; +      an_object["syntax"]             = ""; +      an_object["attrib"]             = m["attrib"].to!string; +      an_object["lang"]               = m["lang"].to!string; +      debug(quote) { writefln( "* [quote quotemarks] %s", line);                        // quote (quotemarks) open +      } +      pith["block_is"]                = eN.blk_is.quote; +      pith["block_state"]             = eN.blk_state.on; +      pith["block_delim"]             = eN.blk_delim.quotemarks; +    } else if (auto m = line.matchFirst(rgx.block_quotemarks_table_open)) {             // quotemarks table open +      debug(table) { writefln( "* [table quotemarks] %s", line); } +      dochas["table"] ++; +      an_object["table_head"]         = m["attrib"].to!string; +      an_object["block_type"]         = "quotemarks"; +      pith["block_is"]                = eN.blk_is.table; +      pith["block_state"]             = eN.blk_state.on; +      pith["block_delim"]             = eN.blk_delim.quotemarks;      } else if (auto m = line.matchFirst(rgx.block_tic_code_open)) {        dochas["codeblock"]++;        an_object["lang"]               = ""; @@ -536,6 +592,17 @@ template docAbstractionFunctions() {            debug(group) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          } +      } else if (pith["block_delim"] == eN.blk_delim.quotemarks) { +        if (line.matchFirst(rgx.block_quotemarks_close)) { +          debug(group) { writeln(line); } +          an_object[an_object_key]    = an_object[an_object_key].stripRight; +          pith["block_is"]            = eN.blk_is.group; +          pith["block_state"]         = eN.blk_state.closing; +          pith["block_delim"]         = eN.blk_delim.off; +        } else { +          debug(group) { writeln(line); } +          an_object[an_object_key] ~= line ~= "\n"; +        }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) {            debug(group) { writeln(line); } @@ -574,6 +641,17 @@ template docAbstractionFunctions() {            debug(block) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          } +      } else if (pith["block_delim"] == eN.blk_delim.quotemarks) { +        if (line.matchFirst(rgx.block_quotemarks_close)) { +          debug(block) { writeln(line); } +          an_object[an_object_key]    = an_object[an_object_key].stripRight; +          pith["block_is"]            = eN.blk_is.block; +          pith["block_state"]         = eN.blk_state.closing; +          pith["block_delim"]         = eN.blk_delim.off; +        } else { +          debug(block) { writeln(line); } +          an_object[an_object_key] ~= line ~= "\n"; +        }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) {            debug(block) { writeln(line); } @@ -698,6 +776,94 @@ template docAbstractionFunctions() {              ++cntr;            }          } +      } else if (pith["block_delim"] == eN.blk_delim.quotemarks) { +        if (auto m = line.matchFirst(rgx.block_quotemarks_close)) { +          an_object[an_object_key] = "verse"; +          debug(poem) { writefln( "* [poem quotemarks] %s", line); } +          if (processing.length > 0) { +            an_object[an_object_key]  = processing["verse"]; +          } +          if (an_object.length > 0) { +            debug(poem) { writeln(__LINE__); writeln(obj_cite_digits.object_number, line); } +            processing.remove("verse"); +            an_object["is"]                                     = "verse"; +            ST_txtAndAnchorTagPlusHasFootnotesUrlsImages substantive_obj_misc_struct +              = 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_struct.obj_txt; +            anchor_tag                                          = substantive_obj_misc_struct.anchor_tag; +            comp_obj_                                           = set_object_generic("body", "body", "block", "verse", an_object["substantive"], obj_cite_digits.object_number); +            comp_obj_.metainfo.identifier                       = obj_cite_digits.identifier; +            comp_obj_.metainfo.object_number_off                = obj_cite_digits.off; +            comp_obj_.metainfo.o_n_book_index                   = obj_cite_digits.bkidx; +            comp_obj_.metainfo.object_number_type               = obj_cite_digits.type; +            comp_obj_.tags.html_segment_anchor_tag_is           = tag_in_seg["seg_lv4"]; +            comp_obj_.tags.epub_segment_anchor_tag_is           = tag_in_seg["seg_lv1to4"]; +            comp_obj_.has.inline_notes_reg                      = substantive_obj_misc_struct.has_notes_reg; +            comp_obj_.has.inline_notes_star                     = substantive_obj_misc_struct.has_notes_star; +            comp_obj_.has.inline_links                          = substantive_obj_misc_struct.has_links; +            the_document_body_section                           ~= comp_obj_; +            tag_assoc                                           = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +            object_number_poem["end"]                           = obj_cite_digits.object_number.to!string; +            object_reset(an_object); +            processing.remove("verse"); +            ++cntr; +          } +          pith["block_is"]            = eN.blk_is.poem; +          pith["block_state"]         = eN.blk_state.closing; +          pith["block_delim"]         = eN.blk_delim.off; +        } else { +          processing["verse"]         ~= line ~= "\n"; +          if (pith["verse_new"] == eN.bi.on) { +            obj_cite_digits           = ocn_emit(pith["ocn"]); +            pith["verse_new"]         = eN.bi.off; +          } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) { +            processing["verse"]       = processing["verse"].stripRight; +            pith["verse_new"]         = eN.bi.on; +            verse_line                = eN.bi.off; +          } +          if (pith["verse_new"] == eN.bi.on) { +            verse_line = 1; +            an_object[an_object_key]  = processing["verse"]; +            debug(poem) { writefln( +                "* %s tic\n%s", +                obj_cite_digits.object_number, +                an_object[an_object_key] +              ); +            } +            processing.remove("verse"); +            an_object["is"]                                     = "verse"; +            auto comp_obj_location +              = node_construct.node_location_emitter( +                content_non_header, +                tag_in_seg, +                lev_anchor_tag, +                tag_assoc, +                obj_cite_digits, +                cntr, +                heading_ptr-1, +                an_object["is"] +              ); +            ST_txtAndAnchorTagPlusHasFootnotesUrlsImages substantive_obj_misc_struct +              = 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_struct.obj_txt; +            anchor_tag                                          = substantive_obj_misc_struct.anchor_tag; +            comp_obj_                                           = set_object_generic("body", "body", "block", "verse", an_object["substantive"], obj_cite_digits.object_number); +            comp_obj_.metainfo.identifier                       = obj_cite_digits.identifier; +            comp_obj_.metainfo.object_number_off                = obj_cite_digits.off; +            comp_obj_.metainfo.o_n_book_index                   = obj_cite_digits.bkidx; +            comp_obj_.metainfo.object_number_type               = obj_cite_digits.type; +            comp_obj_.tags.html_segment_anchor_tag_is           = tag_in_seg["seg_lv4"]; +            comp_obj_.tags.epub_segment_anchor_tag_is           = tag_in_seg["seg_lv1to4"]; +            comp_obj_.has.inline_notes_reg                      = substantive_obj_misc_struct.has_notes_reg; +            comp_obj_.has.inline_notes_star                     = substantive_obj_misc_struct.has_notes_star; +            comp_obj_.has.inline_links                          = substantive_obj_misc_struct.has_links; +            the_document_body_section                           ~= comp_obj_; +            tag_assoc                                           = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); +            object_reset(an_object); +            processing.remove("verse"); +            ++cntr; +          } +        }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (auto m = line.matchFirst(rgx.block_tic_close)) {            an_object[an_object_key] = "verse"; @@ -816,6 +982,19 @@ template docAbstractionFunctions() {            debug(codecurly) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          } +      } else if (pith["block_delim"] == eN.blk_delim.quotemarks) { +        if (line.matchFirst(rgx.block_quotemarks_close)) { +          debug(codequotemarks) { writeln(line); } +          an_object[an_object_key] = an_object[an_object_key] +            .replaceFirst(rgx.newline_eol_delimiter_only, "") +            .stripRight; +          pith["block_is"]            = eN.blk_is.code; +          pith["block_state"]         = eN.blk_state.closing; +          pith["block_delim"]         = eN.blk_delim.off; +        } else { +          debug(codequotemarks) { writeln(line); } +          an_object[an_object_key] ~= line ~= "\n"; +        }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) {            debug(codetic) { writeln(line); } @@ -884,6 +1063,16 @@ template docAbstractionFunctions() {            debug(table) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          } +      } else if (pith["block_delim"] == eN.blk_delim.quotemarks) { +        if (line.matchFirst(rgx.block_quotemarks_close)) { +          debug(table) { writeln(line); } +          pith["block_is"]            = eN.blk_is.table; +          pith["block_state"]         = eN.blk_state.closing; +          pith["block_delim"]         = eN.blk_delim.off; +        } else { +          debug(table) { writeln(line); } +          an_object[an_object_key] ~= line ~= "\n"; +        }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) {            debug(table) { writeln(line); } @@ -927,6 +1116,17 @@ template docAbstractionFunctions() {            debug(quote) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          } +      } else if (pith["block_delim"] == eN.blk_delim.quotemarks) { +        if (line.matchFirst(rgx.block_quotemarks_close)) { +          debug(quote) { writeln(line); } +          an_object[an_object_key]    = an_object[an_object_key].stripRight; +          pith["block_is"]            = eN.blk_is.quote; +          pith["block_state"]         = eN.blk_state.closing; +          pith["block_delim"]         = eN.blk_delim.off; +        } else { +          debug(quote) { writeln(line); } +          an_object[an_object_key] ~= line ~= "\n"; +        }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) {            debug(quote) { writeln(line); } diff --git a/src/sisudoc/meta/metadoc_object_setter.d b/src/sisudoc/meta/metadoc_object_setter.d index 89ef856..e0e896e 100644 --- a/src/sisudoc/meta/metadoc_object_setter.d +++ b/src/sisudoc/meta/metadoc_object_setter.d @@ -420,6 +420,7 @@ template ObjectSetter() {          tic,          curly_special,          tic_special, +        quotemarks,        }      }      return _e(); diff --git a/src/sisudoc/meta/rgx.d b/src/sisudoc/meta/rgx.d index eb6fc04..259ab82 100644 --- a/src/sisudoc/meta/rgx.d +++ b/src/sisudoc/meta/rgx.d @@ -108,8 +108,8 @@ static template spineRgxIn() {      static para_attribs                             = ctRegex!(`^_(?:(?:[0-9])(?:_([0-9]))?|(?:[1-9])?[*]) `);      static para_inline_link_anchor                  = ctRegex!(`\*[~](?P<anchor>[a-z0-9_.-]+)(?= |$)`,"i");      /+ blocked markup +/ -    static block_open                               = ctRegex!("^((code(?:[.][a-z][0-9a-z#+_]+)?|(?:poem|group|block|quote)(?:[.][a-z][0-9a-z_]+)?|table)(?:[(][ a-zA-Z0-9;:,]*[)])?[{][ ]*$)|^`{3} (code(?:[.][a-z][0-9a-z#+_]+)?|(?:poem|group|block|quote)(?:[.][a-z][0-9a-z_]+)?|table)(?:[(][ a-zA-Z0-9;:,]*[)])?|^[{]table[(](?:h;)?(?P<columns>(?:[ ,]+[0-9]+)+)[)][}]"); -    static block_poem_open                          = ctRegex!("^((poem(?:[(][ a-zA-Z0-9;:,]*[)])?[{][ ]*$)|`{3} poem(?:[(][ a-zA-Z0-9;:,]*[)])?)"); +    static block_open                               = ctRegex!("^((code(?:[.][a-z][0-9a-z#+_]+)?|(?:poem|group|block|quote)(?:[.][a-z][0-9a-z_]+)?|table)(?:[(][ a-zA-Z0-9;:,]*[)])?[{][ ]*$)|^[`']{3} (code(?:[.][a-z][0-9a-z#+_]+)?|(?:poem|group|block|quote)(?:[.][a-z][0-9a-z_]+)?|table)(?:[(][ a-zA-Z0-9;:,]*[)])?|^[{]table[(](?:h;)?(?P<columns>(?:[ ,]+[0-9]+)+)[)][}]"); +    static block_poem_open                          = ctRegex!("^((poem(?:[(][ a-zA-Z0-9;:,]*[)])?[{][ ]*$)|[`']{3} poem(?:[(][ a-zA-Z0-9;:,]*[)])?)");      /+ blocked markup tics +/      static block_tic_code_open                      = ctRegex!("^`{3} code(?:[.](?P<syntax>[a-z][0-9a-z#+_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?");      static block_tic_poem_open                      = ctRegex!("^`{3} poem(?:[.](?P<lang>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?"); @@ -118,6 +118,14 @@ static template spineRgxIn() {      static block_tic_quote_open                     = ctRegex!("^`{3} quote(?:[.](?P<lang>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?");      static block_tic_table_open                     = ctRegex!("^`{3} table(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?"); // ctRegex!("^`{3} table(?:\(.*?\))?");      static block_tic_close                          = ctRegex!("^(`{3})$","m"); +    /+ blocked markup tics +/ +    static block_quotemarks_code_open               = ctRegex!(`^'{3} code(?:[.](?P<syntax>[a-z][0-9a-z#+_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?`); +    static block_quotemarks_poem_open               = ctRegex!(`^'{3} poem(?:[.](?P<lang>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?`); +    static block_quotemarks_group_open              = ctRegex!(`^'{3} group(?:[.](?P<lang>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?`); +    static block_quotemarks_block_open              = ctRegex!(`^'{3} block(?:[.](?P<lang>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?`); +    static block_quotemarks_quote_open              = ctRegex!(`^'{3} quote(?:[.](?P<lang>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?`); +    static block_quotemarks_table_open              = ctRegex!(`^'{3} table(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?`); // ctRegex!("^'{3} table(?:\(.*?\))?"); +    static block_quotemarks_close                   = ctRegex!(`^('{3})$`,"m");      /+ blocked markup curly +/      static block_curly_code_open                    = ctRegex!(`^(?:code(?:[.](?P<syntax>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?[{][ ]*$)`);      static block_curly_code_close                   = ctRegex!(`^([}]code)`); | 
