diff options
-rw-r--r-- | org/default_regex.org | 4 | ||||
-rw-r--r-- | org/doc_reform.org | 112 | ||||
-rw-r--r-- | org/meta_abstraction.org | 49 | ||||
-rw-r--r-- | org/output_sqlite.org | 6 | ||||
-rw-r--r-- | org/output_xmls.org | 8 | ||||
-rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 27 | ||||
-rw-r--r-- | src/doc_reform/meta/object_setter.d | 4 | ||||
-rw-r--r-- | src/doc_reform/meta/rgx.d | 4 | ||||
-rw-r--r-- | src/doc_reform/output/epub3.d | 1 | ||||
-rw-r--r-- | src/doc_reform/output/html.d | 1 | ||||
-rw-r--r-- | src/doc_reform/output/rgx.d | 4 | ||||
-rw-r--r-- | src/doc_reform/output/sqlite.d | 6 | ||||
-rw-r--r-- | src/doc_reform/output/xmls.d | 8 | ||||
-rw-r--r-- | views/version.txt | 2 |
14 files changed, 174 insertions, 62 deletions
diff --git a/org/default_regex.org b/org/default_regex.org index c237239..5705fb2 100644 --- a/org/default_regex.org +++ b/org/default_regex.org @@ -505,9 +505,11 @@ static inline_image = ctRegex!(`(?P<pre>β₯)β 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"); static inline_link_anchor = ctRegex!(`β(?P<anchor>\S+?)β`, "mg"); static inline_link = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>\S+?)β`, "mg"); +static inline_link_number_only = ctRegex!(`(β₯.+?β)β€(?P<num>[0-9]+)β`, "mg"); +static inline_link_stow_uri = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>[^ 0-9#β₯ββ€β][^ 0-9β₯ββ€β]+)β`, "mg"); // will not stow (stowed links) or object number internal links static inline_link_hash = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>#(?P<segname>\S+?))β`, "mg"); static inline_link_clean = ctRegex!(`β€(?:.+?)β|[β₯β]`, "mg"); -static inline_a_url = ctRegex!(`(β€)(\S+?)(β)`, "mg"); +static inline_a_url = ctRegex!(`(β€)([^\sβ₯ββ€β]+)(β)`, "mg"); static url = ctRegex!(`https?://`, "mg"); static inline_link_subtoc = ctRegex!(`^(?P<level>[5-7])~ β₯(?P<text>.+?)ββ€(?P<link>.+?)β`, "mg"); static fn_suffix = ctRegex!(`\.fnSuffix`, "mg"); diff --git a/org/doc_reform.org b/org/doc_reform.org index 55bd41d..fe66011 100644 --- a/org/doc_reform.org +++ b/org/doc_reform.org @@ -26,7 +26,7 @@ struct Version { int minor; int patch; } -enum _ver = Version(0, 4, 2); +enum _ver = Version(0, 4, 3); #+END_SRC ** compilation restrictions (supported compilers) @@ -1369,61 +1369,61 @@ dev notes *** document objects (table) - check, keep up to date -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| doc object | doc object | attributes | inline | appended | structure | delimiters | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| is_of | is_a | | | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| para/heading | heading | - level | - font face | - object number off | - level | - delimiter == two newlines | -| | | - object number | - endnotes | - book index meta | (document structure) | | -| | | - object number off | | | | | -| | | - dummy (toc & seg) | | | | | -| | | - tags (internal links) | | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | toc | - level | - font face | | | - auto generated from headings | -| | | | - links (auto) | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| para | para | - bullet | - font face | - object number off | | - delimiter == two newlines | -| | | - indent | - links/urls * | - book index meta | | | -| | | - object number | - images* | | | | -| | | - object number off | - endnotes | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | toc | - indent | - font face | | | - delimiter == two newlines | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | endnote | | - font face | | | (generated from | -| | | | | | | inline markup tags) | -| | | | | | | - delimiter == two newlines | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | bookindex | - auto indent | - font face | | | - delimiter == two newlines | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | blurb | - bullet | - font face | - object number off | | - delimiter == two newlines | -| | | - indent | - links/urls * | - book index meta | | | -| | | - object number | - images* | | | | -| | | - object number off | - endnotes | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| group | group | - object number | - font face | - book index meta | - para break | - delimiter tags (group) | -| | | - object number off | - links/urls * | | | | -| | | | - images* | | | | -| | | | - endnotes | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | block | - object number | - font face | - book index meta | - new line | - delimiter tags (block) | -| | | - object number off | - links/urls * | | | | -| | | | - images* | | | | -| | | | - endnotes | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | quote | - object number | - font face | - book index meta | | - delimiter tags (quote) | -| | | | - endnotes | | | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | poem (see verse) | | | - book index meta | | - delimiter tags (poem) | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| | verse (of poem) | - object number | - font face | | - new line | - (see poem delimiter) | -| | | | - endnotes | | - preceeding spaces | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| group/code | code | - syntax | | | - new line | - delimiter tags (code) | -| | | - numbered | | | - preceeding spaces | | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| -| group/table | table | - object number | | | | - delimiter tags (table) | -|--------------+------------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| doc object | doc object | attributes | inline | appended | structure | delimiters | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| is_a | is_of_type | | | | | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| heading | para | - level | - font face | - object number off | - level | - two newlines | +| | | - object number | - endnotes | - book index meta | (document structure) | | +| | | - object number off | | | | | +| | | - dummy (toc & seg) | | | | | +| | | - tags (internal links) | | | | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| toc | para | - level | - font face | | | - auto generated from headings | +| | | (auto-indent) | - links (auto) | | | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| para | para | - bullet | - font face | - object number off | | - two newlines | +| | | - indent | - links/urls * | - book index meta | | | +| | | - object number | - images* | | | | +| | | - object number off | - endnotes | | | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| bookindex | para | - auto indent | - font face | | | - two newlines | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| blurb | para | - bullet | - font face | - object number off | | - two newlines | +| | | - indent | - links/urls * | - book index meta | | | +| | | - object number | - images* | | | | +| | | - object number off | - endnotes | | | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| group | block | - object number | - font face | - book index meta | - para break | - block tags | +| | | - object number off | - links/urls * | | | (group) | +| | | | - images* | | | | +| | | | - endnotes | | | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| block | block | - object number | - font face | - book index meta | - new line | - block tags | +| | | - object number off | - links/urls * | | | (block) | +| | | | - images* | | | | +| | | | - endnotes | | | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| quote | block | - object number | - font face | - book index meta | | - block tags | +| | | | - endnotes | | | (quote) | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| poem (see verse) | block | | | - book index meta | | - block tags | +| | | | | | | (poem) | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| verse (of poem) | | - object number | - font face | | - new line | - (see poem delimiter) | +| | | | - endnotes | | - preceeding spaces | | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| code | block | - syntax | | | - new line | - block tags | +| | | - numbered | | | - preceeding spaces | (code) | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| table | block | - object number | | | | - block tags (table) | +| | | | | | | (table) | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| +| endnote | | | - font face | | | (generated from | +| | | | | | | inline markup tags) | +| | | | | | | - two newlines | +|------------------+------------+-------------------------+----------------+---------------------+----------------------+--------------------------------| - consider special treatment for links/urls (& for images?) take them out of document munge (for various outputs), by storing in own array (within each diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index 4c98f66..5249df1 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -2294,6 +2294,37 @@ auto _image_dimensions(M,O)(M manifest_matter, O obj) { } #+END_SRC +***** links: think about!!! +- move actual links to an array in object struct so they cannot be regex munged within text block + - you may wish to exclude certain types of internal document link + - object number links + - toc + - book index + - footnotes and footnote numbers + +#+name: abs_post +#+BEGIN_SRC d +auto _links(O)(O obj) { + if (auto m = obj.text.match(rgx.inline_link_stow_uri)) { + debug(links) { + writeln("number of link matches to stow: ", (obj.text.match(rgx.inline_link_stow_uri)).count); + writeln("links to stow: ", (obj.text.match(rgx.inline_link_stow_uri))); + } + int _n_matches = (obj.text.match(rgx.inline_link_stow_uri)).count.to!int; + for(int i=0; i < _n_matches; ++i) { + if (obj.text.match(rgx.inline_link_stow_uri)) { + obj.stow.link ~= obj.text.matchFirst(rgx.inline_link_stow_uri)[2]; + obj.text = obj.text.replaceFirst( + rgx.inline_link_stow_uri, + format(q"ΒΆβ₯%sββ€%sβΒΆ", "$1", i) + ); + } + } + } + return obj; +} +#+END_SRC + ***** β» Loop section: head #+name: abs_post @@ -2327,6 +2358,7 @@ foreach (ref obj; the_document_head_section) { } obj = obj_heading_ancestors(obj, lv_ancestors_txt); } + obj = _links(obj); } #+END_SRC @@ -2360,6 +2392,7 @@ if (the_table_of_contents_section.length > 1) { } obj = obj_heading_ancestors(obj, lv_ancestors_txt); } + obj = _links(obj); } } #+END_SRC @@ -2412,6 +2445,7 @@ if (the_document_body_section.length > 1) { _images ~= extract_images(obj.text); obj = _image_dimensions(manifest_matter, obj); } + obj = _links(obj); } } auto images=uniq(_images.sort()); @@ -2460,6 +2494,7 @@ if (the_endnotes_section.length > 1) { } obj = obj_heading_ancestors(obj, lv_ancestors_txt); } + obj = _links(obj); } } #+END_SRC @@ -2507,6 +2542,7 @@ if (the_glossary_section.length > 1) { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; } + obj = _links(obj); } } #+END_SRC @@ -2554,6 +2590,7 @@ if (the_bibliography_section.length > 1) { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; } + obj = _links(obj); } } #+END_SRC @@ -2610,6 +2647,7 @@ if (the_bookindex_section.length > 1) { obj.metainfo.o_n_book_index = obj_cite_digits.bkidx; obj.metainfo.object_number_type = OCNtype.bkidx; } + obj = _links(obj); } /+ TODO assert failure, reinstate assert(obj_cite_digit_bkidx == ocn_bidx_ @@ -2659,6 +2697,7 @@ if (the_blurb_section.length > 1) { obj.metainfo.object_number_off = obj_cite_digits.off; obj.metainfo.object_number_type = OCNtype.non; } + obj = _links(obj); } } #+END_SRC @@ -7861,6 +7900,15 @@ struct DocObj_CodeBlock_ { } #+END_SRC +**** stow (things to be protected from regular text transformations, so far links) + +#+name: meta_structs_init +#+BEGIN_SRC d +struct DocObj_Stow_ { + string[] link = []; +} +#+END_SRC + **** pointers #+name: meta_structs_init @@ -7903,6 +7951,7 @@ struct ObjGenericComposite { DocObj_Has_ has; DocObj_Table_ table; DocObj_CodeBlock_ code_block; + DocObj_Stow_ stow; DocObj_Pointer_ ptr; } #+END_SRC diff --git a/org/output_sqlite.org b/org/output_sqlite.org index b1c9cf4..bdb2ca7 100644 --- a/org/output_sqlite.org +++ b/org/output_sqlite.org @@ -322,6 +322,7 @@ template SQLiteDbDrop() { import doc_reform.output; import std.file, + std.uri, std.conv : to; #+END_SRC @@ -534,6 +535,11 @@ auto inline_links(M,O)( string _xml_type = "seg", ) { if (obj.has.inline_links) { + if (obj.metainfo.is_a != "code") { + _txt = replaceAll!(hit => + hit[1] ~ "β€" ~ to!string((obj.stow.link[hit[2].to!ulong])).encode ~ "β" + )(_txt, rgx.inline_link_number_only); + } if ((_txt.match(rgx.mark_internal_site_lnk)) && (_xml_type == "scroll")) { // conditions reversed to avoid: gdc compiled program run segfault _txt = _txt.replaceAll( diff --git a/org/output_xmls.org b/org/output_xmls.org index b9302bd..45a1c3c 100644 --- a/org/output_xmls.org +++ b/org/output_xmls.org @@ -42,6 +42,7 @@ import std.digest.sha, std.file, std.outbuffer, + std.uri, std.zip, std.conv : to; import @@ -193,7 +194,7 @@ auto header_metadata(M)( doc_matters.conf_make_meta.meta.date_modified, doc_matters.src.language, doc_matters.conf_make_meta.meta.rights_copyright, - doc_matters.generator_program.name_and_version, + doc_matters.opt.action.debug_do ? "" : doc_matters.generator_program.name_and_version, doc_matters.generator_program.url_home, ); return o; @@ -466,6 +467,11 @@ auto inline_links(M,O)( ) { string seg_lvs; if (obj.has.inline_links) { + if (obj.metainfo.is_a != "code") { + _txt = replaceAll!(hit => + hit[1] ~ "β€" ~ to!string((obj.stow.link[hit[2].to!ulong])).encode ~ "β" + )(_txt, rgx.inline_link_number_only); + } if ((_txt.match(rgx.mark_internal_site_lnk)) && (_xml_type == "scroll")) { // conditions reversed to avoid: gdc compiled program run segfault _txt = _txt.replaceAll( diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 9d2935c..de2df2b 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -1731,6 +1731,25 @@ template DocReformDocAbstraction() { } return obj; } + auto _links(O)(O obj) { + if (auto m = obj.text.match(rgx.inline_link_stow_uri)) { + debug(links) { + writeln("number of link matches to stow: ", (obj.text.match(rgx.inline_link_stow_uri)).count); + writeln("links to stow: ", (obj.text.match(rgx.inline_link_stow_uri))); + } + int _n_matches = (obj.text.match(rgx.inline_link_stow_uri)).count.to!int; + for(int i=0; i < _n_matches; ++i) { + if (obj.text.match(rgx.inline_link_stow_uri)) { + obj.stow.link ~= obj.text.matchFirst(rgx.inline_link_stow_uri)[2]; + obj.text = obj.text.replaceFirst( + rgx.inline_link_stow_uri, + format(q"ΒΆβ₯%sββ€%sβΒΆ", "$1", i) + ); + } + } + } + return obj; + } foreach (ref obj; the_document_head_section) { if (obj.metainfo.is_a == "heading") { debug(dom) { @@ -1760,6 +1779,7 @@ template DocReformDocAbstraction() { } obj = obj_heading_ancestors(obj, lv_ancestors_txt); } + obj = _links(obj); } if (the_table_of_contents_section.length > 1) { /+ scroll +/ @@ -1787,6 +1807,7 @@ template DocReformDocAbstraction() { } obj = obj_heading_ancestors(obj, lv_ancestors_txt); } + obj = _links(obj); } } /+ multiple 1~ levels, loop through document body +/ @@ -1833,6 +1854,7 @@ template DocReformDocAbstraction() { _images ~= extract_images(obj.text); obj = _image_dimensions(manifest_matter, obj); } + obj = _links(obj); } } auto images=uniq(_images.sort()); @@ -1873,6 +1895,7 @@ template DocReformDocAbstraction() { } obj = obj_heading_ancestors(obj, lv_ancestors_txt); } + obj = _links(obj); } } /+ optional only one 1~ level +/ @@ -1912,6 +1935,7 @@ template DocReformDocAbstraction() { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; } + obj = _links(obj); } } /+ optional only one 1~ level +/ @@ -1951,6 +1975,7 @@ template DocReformDocAbstraction() { obj.metainfo.ocn = obj_cite_digits.object_number; obj.metainfo.identifier = obj_cite_digits.identifier; } + obj = _links(obj); } } /+ optional only one 1~ level +/ @@ -1999,6 +2024,7 @@ template DocReformDocAbstraction() { obj.metainfo.o_n_book_index = obj_cite_digits.bkidx; obj.metainfo.object_number_type = OCNtype.bkidx; } + obj = _links(obj); } /+ TODO assert failure, reinstate assert(obj_cite_digit_bkidx == ocn_bidx_ @@ -2042,6 +2068,7 @@ template DocReformDocAbstraction() { obj.metainfo.object_number_off = obj_cite_digits.off; obj.metainfo.object_number_type = OCNtype.non; } + obj = _links(obj); } } if (the_document_body_section.length > 1) { diff --git a/src/doc_reform/meta/object_setter.d b/src/doc_reform/meta/object_setter.d index a4eaaf6..7b94027 100644 --- a/src/doc_reform/meta/object_setter.d +++ b/src/doc_reform/meta/object_setter.d @@ -98,6 +98,9 @@ template ObjectSetter() { struct DocObj_CodeBlock_ { string syntax = ""; } + struct DocObj_Stow_ { + string[] link = []; + } struct DocObj_Pointer_ { int doc_object = 0; int html_segnames = 0; @@ -124,6 +127,7 @@ template ObjectSetter() { DocObj_Has_ has; DocObj_Table_ table; DocObj_CodeBlock_ code_block; + DocObj_Stow_ stow; DocObj_Pointer_ ptr; } struct TheObjects { diff --git a/src/doc_reform/meta/rgx.d b/src/doc_reform/meta/rgx.d index c43390d..dcfc245 100644 --- a/src/doc_reform/meta/rgx.d +++ b/src/doc_reform/meta/rgx.d @@ -257,9 +257,11 @@ static template DocReformRgxInit() { 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"); static inline_link_anchor = ctRegex!(`β(?P<anchor>\S+?)β`, "mg"); static inline_link = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>\S+?)β`, "mg"); + static inline_link_number_only = ctRegex!(`(β₯.+?β)β€(?P<num>[0-9]+)β`, "mg"); + static inline_link_stow_uri = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>[^ 0-9#β₯ββ€β][^ 0-9β₯ββ€β]+)β`, "mg"); // will not stow (stowed links) or object number internal links static inline_link_hash = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>#(?P<segname>\S+?))β`, "mg"); static inline_link_clean = ctRegex!(`β€(?:.+?)β|[β₯β]`, "mg"); - static inline_a_url = ctRegex!(`(β€)(\S+?)(β)`, "mg"); + static inline_a_url = ctRegex!(`(β€)([^\sβ₯ββ€β]+)(β)`, "mg"); static url = ctRegex!(`https?://`, "mg"); static inline_link_subtoc = ctRegex!(`^(?P<level>[5-7])~ β₯(?P<text>.+?)ββ€(?P<link>.+?)β`, "mg"); static fn_suffix = ctRegex!(`\.fnSuffix`, "mg"); diff --git a/src/doc_reform/output/epub3.d b/src/doc_reform/output/epub3.d index 026a2b5..1df1216 100644 --- a/src/doc_reform/output/epub3.d +++ b/src/doc_reform/output/epub3.d @@ -5,6 +5,7 @@ template outputEPub3() { std.digest.sha, std.file, std.outbuffer, + std.uri, std.zip, std.conv : to; import diff --git a/src/doc_reform/output/html.d b/src/doc_reform/output/html.d index 97ba0ce..dee5d53 100644 --- a/src/doc_reform/output/html.d +++ b/src/doc_reform/output/html.d @@ -5,6 +5,7 @@ template outputHTML() { std.digest.sha, std.file, std.outbuffer, + std.uri, std.zip, std.conv : to; import diff --git a/src/doc_reform/output/rgx.d b/src/doc_reform/output/rgx.d index 0bcb2b6..bfd2a4e 100644 --- a/src/doc_reform/output/rgx.d +++ b/src/doc_reform/output/rgx.d @@ -65,9 +65,11 @@ static template DocReformOutputRgxInit() { 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"); static inline_link_anchor = ctRegex!(`β(?P<anchor>\S+?)β`, "mg"); static inline_link = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>\S+?)β`, "mg"); + static inline_link_number_only = ctRegex!(`(β₯.+?β)β€(?P<num>[0-9]+)β`, "mg"); + static inline_link_stow_uri = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>[^ 0-9#β₯ββ€β][^ 0-9β₯ββ€β]+)β`, "mg"); // will not stow (stowed links) or object number internal links static inline_link_hash = ctRegex!(`β₯(?P<text>.+?)ββ€(?P<link>#(?P<segname>\S+?))β`, "mg"); static inline_link_clean = ctRegex!(`β€(?:.+?)β|[β₯β]`, "mg"); - static inline_a_url = ctRegex!(`(β€)(\S+?)(β)`, "mg"); + static inline_a_url = ctRegex!(`(β€)([^\sβ₯ββ€β]+)(β)`, "mg"); static url = ctRegex!(`https?://`, "mg"); static inline_link_subtoc = ctRegex!(`^(?P<level>[5-7])~ β₯(?P<text>.+?)ββ€(?P<link>.+?)β`, "mg"); static fn_suffix = ctRegex!(`\.fnSuffix`, "mg"); diff --git a/src/doc_reform/output/sqlite.d b/src/doc_reform/output/sqlite.d index 0e424e6..e0c9390 100644 --- a/src/doc_reform/output/sqlite.d +++ b/src/doc_reform/output/sqlite.d @@ -2,6 +2,7 @@ module doc_reform.output.sqlite; import doc_reform.output; import std.file, + std.uri, std.conv : to; import d2sqlite3; import std.typecons : Nullable; @@ -284,6 +285,11 @@ template SQLiteFormatAndLoadObject() { string _xml_type = "seg", ) { if (obj.has.inline_links) { + if (obj.metainfo.is_a != "code") { + _txt = replaceAll!(hit => + hit[1] ~ "β€" ~ to!string((obj.stow.link[hit[2].to!ulong])).encode ~ "β" + )(_txt, rgx.inline_link_number_only); + } if ((_txt.match(rgx.mark_internal_site_lnk)) && (_xml_type == "scroll")) { // conditions reversed to avoid: gdc compiled program run segfault _txt = _txt.replaceAll( diff --git a/src/doc_reform/output/xmls.d b/src/doc_reform/output/xmls.d index 58cfb4e..41787ae 100644 --- a/src/doc_reform/output/xmls.d +++ b/src/doc_reform/output/xmls.d @@ -5,6 +5,7 @@ template outputXHTMLs() { std.digest.sha, std.file, std.outbuffer, + std.uri, std.zip, std.conv : to; import @@ -121,7 +122,7 @@ template outputXHTMLs() { doc_matters.conf_make_meta.meta.date_modified, doc_matters.src.language, doc_matters.conf_make_meta.meta.rights_copyright, - doc_matters.generator_program.name_and_version, + doc_matters.opt.action.debug_do ? "" : doc_matters.generator_program.name_and_version, doc_matters.generator_program.url_home, ); return o; @@ -350,6 +351,11 @@ template outputXHTMLs() { ) { string seg_lvs; if (obj.has.inline_links) { + if (obj.metainfo.is_a != "code") { + _txt = replaceAll!(hit => + hit[1] ~ "β€" ~ to!string((obj.stow.link[hit[2].to!ulong])).encode ~ "β" + )(_txt, rgx.inline_link_number_only); + } if ((_txt.match(rgx.mark_internal_site_lnk)) && (_xml_type == "scroll")) { // conditions reversed to avoid: gdc compiled program run segfault _txt = _txt.replaceAll( diff --git a/views/version.txt b/views/version.txt index d7e1dee..2c68044 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,7 +4,7 @@ struct Version { int minor; int patch; } -enum _ver = Version(0, 4, 2); +enum _ver = Version(0, 4, 3); version (Posix) { version (DigitalMars) { } else version (LDC) { |