diff options
author | Ralph Amissah <ralph.amissah@gmail.com> | 2020-01-05 20:17:17 -0500 |
---|---|---|
committer | Ralph Amissah <ralph.amissah@gmail.com> | 2020-02-11 13:08:49 -0500 |
commit | de02319cfa7b4bbff8c111bda02be1a7c6591555 (patch) | |
tree | 732c11d10bc2699cd1b72d00b3be943284eea130 /src/doc_reform/io_out | |
parent | reduce use of auto, much with tuples (diff) |
dlang safe default imminent, look ahead
- @safe @trusted & @system, reconsider @trusted
Diffstat (limited to 'src/doc_reform/io_out')
-rw-r--r-- | src/doc_reform/io_out/create_zip_file.d | 2 | ||||
-rw-r--r-- | src/doc_reform/io_out/defaults.d | 8 | ||||
-rw-r--r-- | src/doc_reform/io_out/epub3.d | 18 | ||||
-rw-r--r-- | src/doc_reform/io_out/html.d | 22 | ||||
-rw-r--r-- | src/doc_reform/io_out/hub.d | 7 | ||||
-rw-r--r-- | src/doc_reform/io_out/latex.d | 58 | ||||
-rw-r--r-- | src/doc_reform/io_out/metadata.d | 4 | ||||
-rw-r--r-- | src/doc_reform/io_out/odt.d | 102 | ||||
-rw-r--r-- | src/doc_reform/io_out/source_pod.d | 2 | ||||
-rw-r--r-- | src/doc_reform/io_out/xmls.d | 150 | ||||
-rw-r--r-- | src/doc_reform/io_out/xmls_css.d | 4 |
11 files changed, 190 insertions, 187 deletions
diff --git a/src/doc_reform/io_out/create_zip_file.d b/src/doc_reform/io_out/create_zip_file.d index 09b481a..0ad8ada 100644 --- a/src/doc_reform/io_out/create_zip_file.d +++ b/src/doc_reform/io_out/create_zip_file.d @@ -4,7 +4,7 @@ template createZipFile() { import std.outbuffer; import std.string; import std.zip; - void createZipFile( + @safe void createZipFile( string zip_file_name, void[] compressed_zip_data, ) { diff --git a/src/doc_reform/io_out/defaults.d b/src/doc_reform/io_out/defaults.d index 4dd8021..84bac73 100644 --- a/src/doc_reform/io_out/defaults.d +++ b/src/doc_reform/io_out/defaults.d @@ -50,7 +50,7 @@ template InternalMarkup() { template spineLanguageCodes() { /+ language codes +/ struct Lang { - static string[string][string] codes() { + @safe static string[string][string] codes() { auto _lang_codes = [ "am": [ "c": "am", "n": "Amharic", "t": "Amharic", "xlp": "amharic" ], "bg": [ "c": "bg", "n": "Bulgarian", "t": "Български (Bəlgarski)", "xlp": "bulgarian" ], @@ -117,15 +117,15 @@ template spineLanguageCodes() { ]; return _lang_codes; } - static string[] code_arr_ptr() { + @safe static string[] code_arr_ptr() { string[] _lang_codes = ["am", "bg", "bn", "br", "ca", "cs", "cy", "da", "de", "el", "en", "eo", "es", "et", "eu", "fi", "fr", "ga", "gl", "he", "hi", "hr", "hy", "ia", "is", "it", "ja", "ko", "la", "lo", "lt", "lv", "ml", "mr", "nl", "no", "nn", "oc", "pl", "pt", "pt_BR", "ro", "ru", "sa", "se", "sk", "sl", "sq", "sr", "sv", "ta", "te", "th", "tk", "tr", "uk", "ur", "us", "vi", "zh", "en", "xx",]; return _lang_codes; } - static string[] code_arr() { + @safe static string[] code_arr() { string[] _lang_codes = ["am", "bg", "bn", "br", "ca", "cs", "cy", "da", "de", "el", "en", "eo", "es", "et", "eu", "fi", "fr", "ga", "gl", "he", "hi", "hr", "hy", "ia", "is", "it", "ja", "ko", "la", "lo", "lt", "lv", "ml", "mr", "nl", "no", "nn", "oc", "pl", "pt", "pt_BR", "ro", "ru", "sa", "se", "sk", "sl", "sq", "sr", "sv", "ta", "te", "th", "tk", "tr", "uk", "ur", "vi", "zh"]; return _lang_codes; } - static auto codes_() { + @safe static auto codes_() { return "(" ~ join(code_arr,"|") ~ ")"; } static auto codes_regex() { diff --git a/src/doc_reform/io_out/epub3.d b/src/doc_reform/io_out/epub3.d index 4de98a1..f8f5ba4 100644 --- a/src/doc_reform/io_out/epub3.d +++ b/src/doc_reform/io_out/epub3.d @@ -14,12 +14,12 @@ template outputEPub3() { doc_reform.io_out.xmls_css; mixin InternalMarkup; mixin outputXHTMLs; - string epub3_mimetypes() @safe { + @safe string epub3_mimetypes() { string o; o = format(q"┃application/epub+zip┃") ~ "\n"; return o; } - string epub3_container_xml() @safe { + @safe string epub3_container_xml() { string o; o = format(q"┃<?xml version='1.0' encoding='utf-8'?>┃") ~ "\n"; o ~= format(q"┃<container version="1.0" @@ -30,7 +30,7 @@ template outputEPub3() { </rootfiles>┃") ~ "\n</container>\n"; return o; } - string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) @safe { + @safe string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) { auto xhtml_format = outputXHTMLs(); auto pth_epub3 = spinePathsEPUB!()(doc_matters.output_path, doc_matters.src.language); string _uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO sort uuid in doc_matters! @@ -128,7 +128,7 @@ template outputEPub3() { } return content; } - string epub3_oebps_toc_nav_xhtml(D,I)(D doc_abstraction, I doc_matters) @safe { + @safe string epub3_oebps_toc_nav_xhtml(D,I)(D doc_abstraction, I doc_matters) { enum DomTags { none, open, close, close_and_open, open_still, } auto markup = InlineMarkup(); static auto rgx = Rgx(); @@ -207,7 +207,7 @@ template outputEPub3() { </html>\n"; return toc; } - string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) @safe { + @safe string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) { int counter = 0; string _uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere auto markup = InlineMarkup(); @@ -297,10 +297,10 @@ template outputEPub3() { return toc; } - void outputEPub3(D,I)( + @system void outputEPub3(D,I)( const D doc_abstraction, I doc_matters, - ) { // @trusted + ) { mixin spineOutputRgxInit; auto xhtml_format = outputXHTMLs(); static auto rgx = Rgx(); @@ -606,10 +606,10 @@ template outputEPub3() { epubWrite.oebps_content_opf = doc_abstraction.epub3_oebps_content(doc_matters, oepbs_content_parts); epubWrite.epub3_write_output_files(doc_matters); } - void epub3_write_output_files(W,M)( + @system void epub3_write_output_files(W,M)( W epub_write, M doc_matters, - ) { // @trusted + ) { debug(asserts) { static assert(is(typeof(epub_write.doc_epub3) == string[][string])); static assert(is(typeof(epub_write.mimetypes) == string)); diff --git a/src/doc_reform/io_out/html.d b/src/doc_reform/io_out/html.d index 8598ca5..637b007 100644 --- a/src/doc_reform/io_out/html.d +++ b/src/doc_reform/io_out/html.d @@ -13,10 +13,10 @@ template outputHTML() { doc_reform.io_out.xmls, doc_reform.io_out.xmls_css; mixin outputXHTMLs; - void scroll(D,M)( + @safe void scroll(D,M)( const D doc_abstraction, M doc_matters, - ) @safe { + ) { mixin spineOutputRgxInit; auto xhtml_format = outputXHTMLs(); static auto rgx = Rgx(); @@ -183,10 +183,10 @@ template outputHTML() { doc = xhtml_format.html_head(doc_matters, "scroll") ~ doc_html ~ xhtml_format.tail; scroll_write_output(doc, doc_matters); } - void scroll_write_output(D,M)( + @trusted void scroll_write_output(D,M)( D doc, M doc_matters, - ) @trusted { + ) { debug(asserts) { static assert(is(typeof(doc) == string[])); } @@ -206,10 +206,10 @@ template outputHTML() { writeln(" ", pth_html.fn_scroll(doc_matters.src.filename)); } } - void seg(D,M)( + @safe void seg(D,M)( const D doc_abstraction, M doc_matters, - ) @safe { + ) { mixin spineOutputRgxInit; static auto rgx = Rgx(); auto xhtml_format = outputXHTMLs(); @@ -459,11 +459,11 @@ template outputHTML() { } seg_write_output(doc_html, doc_html_endnotes, doc_matters); } - void seg_write_output(D,E,M)( + @trusted void seg_write_output(D,E,M)( // @system? D doc_html, E doc_html_endnotes, M doc_matters, - ) @trusted { // @system? + ) { debug(asserts) { static assert(is(typeof(doc_html) == string[][string])); } @@ -493,7 +493,7 @@ template outputHTML() { writeln(" ", pth_html.fn_seg(doc_matters.src.filename, "toc")); } } - void css(M)(M doc_matters) @safe { + @safe void css(M)(M doc_matters) { auto css = spineCss(doc_matters); auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language); try { @@ -508,9 +508,9 @@ template outputHTML() { // Handle error } } - void images_cp(M)( + @trusted void images_cp(M)( // @system M doc_matters, - ) @trusted { // @system + ) { { /+ (copy html images) +/ auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language); diff --git a/src/doc_reform/io_out/hub.d b/src/doc_reform/io_out/hub.d index a43c28a..df3d28c 100644 --- a/src/doc_reform/io_out/hub.d +++ b/src/doc_reform/io_out/hub.d @@ -11,7 +11,10 @@ template outputHub() { doc_reform.io_out.create_zip_file, doc_reform.io_out.paths_output; import std.parallelism; - void outputHub(D,I)(const D doc_abstraction, I doc_matters) { + @system void outputHub(D,I)( + const D doc_abstraction, + I doc_matters + ) { mixin spineOutputRgxInit; mixin Msg; auto msg = Msg!()(doc_matters); @@ -114,7 +117,7 @@ template outputHubOp() { doc_reform.io_out.odt, doc_reform.io_out.create_zip_file, doc_reform.io_out.paths_output; - void outputHubOp(E,O)(E env, O opt_action) { + @system void outputHubOp(E,O)(E env, O opt_action) { mixin spineOutputRgxInit; static auto rgx = Rgx(); if ((opt_action.sqlite_db_drop)) { diff --git a/src/doc_reform/io_out/latex.d b/src/doc_reform/io_out/latex.d index cfa347c..b8e33f4 100644 --- a/src/doc_reform/io_out/latex.d +++ b/src/doc_reform/io_out/latex.d @@ -14,7 +14,7 @@ template outputLaTeX() { auto lang = Lang(); auto paper() { struct PaperType { - auto a4() @safe { + @safe auto a4() { struct A4 { auto portrait() { struct V { @@ -35,7 +35,7 @@ template outputLaTeX() { } return A4(); } - auto a5() @safe { + @safe auto a5() { struct A5 { auto portrait() { struct V { @@ -56,7 +56,7 @@ template outputLaTeX() { } return A5(); } - auto b4() @safe { + @safe auto b4() { struct B4 { auto portrait() { struct V { @@ -77,7 +77,7 @@ template outputLaTeX() { } return B4(); } - auto letter() @safe { + @safe auto letter() { struct Letter { auto portrait() { struct V { @@ -98,7 +98,7 @@ template outputLaTeX() { } return Letter(); } - auto legal() @safe { + @safe auto legal() { struct Legal { auto portrait() { struct V { @@ -122,10 +122,10 @@ template outputLaTeX() { } return PaperType(); } - string sp_char_esc(O)( + @safe string sp_char_esc(O)( string _txt, const O obj, - ) @safe { + ) { string _unescape_sp_char_esc()(string _txt) { _txt = _txt .replaceAll(rgx.latex_special_char_escaped, @@ -147,9 +147,9 @@ template outputLaTeX() { } return _txt; } - string sp_char_esc_txt()( + @safe string sp_char_esc_txt()( string _txt, - ) @safe { + ) { string _unescape_sp_char_esc()(string _txt) { _txt = _txt .replaceAll(rgx.latex_special_char_escaped, @@ -169,9 +169,9 @@ template outputLaTeX() { _txt = replaceAll!(m => _unescape_fontface_esc(m[0]))(_txt, rgx.latex_identify_inline_fontface); return _txt; } - string fontface()( + @safe string fontface()( string _txt, - ) @safe { + ) { _txt = _txt .replaceAll(rgx.inline_emphasis, format(q"┃\begin{bfseries}%s\end{bfseries}┃", "$1")) .replaceAll(rgx.inline_bold, format(q"┃\begin{bfseries}%s\end{bfseries}┃", "$1")) @@ -185,9 +185,9 @@ template outputLaTeX() { .replaceAll(rgx.inline_italics, format(q"┃``%s''┃", "$1")); return _txt; } - string leading_hardspaces()( + @safe string leading_hardspaces()( string _txt, - ) @safe { + ) { string hardspaces(string _spaces) { _spaces = _spaces .replaceAll(rgx.space, "\\hardspace "); @@ -196,23 +196,23 @@ template outputLaTeX() { _txt = replaceAll!(m => hardspaces(m[0]))(_txt, rgx.spaces_line_start); return _txt; } - string nbsp_char()(string _txt) @safe { + @safe string nbsp_char()(string _txt) { if (_txt.match(rgx.nbsp_char)) { _txt = _txt.replaceAll(rgx.nbsp_char, "\\hardspace "); } return _txt; } - string nbsp_char_to_space()(string _txt) @safe { + @safe string nbsp_char_to_space()(string _txt) { if (_txt.match(rgx.nbsp_char)) { _txt = _txt.replaceAll(rgx.nbsp_char, " "); } return _txt; } - string links_and_images(O,M)( + @safe string links_and_images(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { if (obj.has.inline_links) { // TODO some images do not have inline links ... image without link string _width_adjust(string _width) { if (_width.to!int > 300) { _width = "300"; } // will need to vary max with papersize & orientation @@ -253,9 +253,9 @@ template outputLaTeX() { } return _txt; } - string footnotes()( + @safe string footnotes()( string _txt, - ) @safe { + ) { if (_txt.match(rgx.inline_notes_al_gen)) { string _tex_note = q"┃\hypertarget{noteref_%s}{}\footnote[%s]{%% \label{note_%s}%s}┃"; @@ -268,18 +268,18 @@ template outputLaTeX() { } return _txt; } - string remove_footnotes()( + @safe string remove_footnotes()( string _txt, - ) @safe { + ) { if (_txt.match(rgx.inline_notes_al_gen)) { _txt = replaceAll!(m => "")(_txt, rgx.inline_notes_al_gen); } return _txt; } - string para(O)( + @safe string para(O)( string _txt, O obj, - ) @safe { + ) { if (obj.metainfo.is_of_type == "para") { string _tex_para; _tex_para = q"┃\begin{tiny}\hspace{0mm}\end{tiny}{\marginpar{\begin{tiny}\hspace{0mm}\hypertarget{%s}{%s}\end{tiny}}}%s┃"; @@ -291,10 +291,10 @@ template outputLaTeX() { } return _txt; } - string bookindex(O)( + @safe string bookindex(O)( string _txt, O obj, - ) @safe { + ) { if (obj.metainfo.is_of_type == "para" && obj.metainfo.is_a == "bookindex" ) { @@ -306,12 +306,12 @@ template outputLaTeX() { } return _txt; } - string heading(O,M)( + @safe string heading(O,M)( string _txt, O obj, M doc_matters, string _part = "" - ) @safe { + ) { if (obj.metainfo.is_a == "heading") { string _tex_para; string _pg_break; @@ -641,10 +641,10 @@ string table(O,M)( } return _txt; } - string bullets_and_indentation(O)( + @safe string bullets_and_indentation(O)( string _txt, O obj, - ) @safe { + ) { string _tex_para; string _hang; string _indent; int _paper_margin = -10; diff --git a/src/doc_reform/io_out/metadata.d b/src/doc_reform/io_out/metadata.d index 8201926..5dfdfe2 100644 --- a/src/doc_reform/io_out/metadata.d +++ b/src/doc_reform/io_out/metadata.d @@ -1,6 +1,6 @@ module doc_reform.io_out.metadata; template outputMetadata() { - void outputMetadata(T)( T doc_matters) @safe { + @safe void outputMetadata(T)( T doc_matters) { import std.file; import std.format; import doc_reform.io_out; @@ -185,7 +185,7 @@ string theme_light_1 = format(q"┃ doc_matters.opt.action.css_theme_default ? theme_light_0 : theme_dark_0, doc_matters.opt.action.css_theme_default ? theme_light_1 : theme_dark_1, ) ~ "\n"; - void metadata_write_output(M)(M doc_matters, string[] metadata_) @trusted { + @safe void metadata_write_output(M)(M doc_matters, string[] metadata_) { auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language); try { if (!exists(pth_html.base)) { diff --git a/src/doc_reform/io_out/odt.d b/src/doc_reform/io_out/odt.d index 23eb947..67b34ba 100644 --- a/src/doc_reform/io_out/odt.d +++ b/src/doc_reform/io_out/odt.d @@ -15,7 +15,7 @@ template formatODT() { mixin spineOutputRgxInit; struct formatODT { static auto rgx = Rgx(); - string _tags(O)(const O obj) @safe { + @safe string _tags(O)(const O obj) { string _tags = ""; if (obj.tags.anchor_tags.length > 0) { foreach (tag_; obj.tags.anchor_tags) { @@ -33,7 +33,7 @@ template formatODT() { } return _tags; } - string _xhtml_anchor_tags(O)(O obj) @safe { + @safe string _xhtml_anchor_tags(O)(O obj) { const(string[]) anchor_tags = obj.tags.anchor_tags; string tags=""; if (anchor_tags.length > 0) { @@ -45,7 +45,7 @@ template formatODT() { } return tags; } - string obj_num(O)(const O obj) @safe { // TODO + @safe string obj_num(O)(const O obj) { // TODO string _on; _on = (obj.metainfo.object_number.empty) ? "" @@ -55,7 +55,7 @@ template formatODT() { )); return _on; } - string _footnotes()(string _txt) @safe { + @safe string _footnotes()(string _txt) { static auto rgx = Rgx(); _txt = _txt.replaceAll( rgx.inline_notes_al_regular_number_note, @@ -74,14 +74,14 @@ template formatODT() { ); return _txt; } - string _bullet(O)(const O obj) @safe { + @safe string _bullet(O)(const O obj) { string _b = ""; if (obj.attrib.bullet) { _b = format(q"┃● ┃",); } return _b; } - string _indent(O)(string _txt, const O obj) @safe { // TODO + @safe string _indent(O)(string _txt, const O obj) { // TODO // if (obj.attrib.indent_base > 0 || // obj.attrib.indent_hang > 0 // ) { @@ -189,7 +189,7 @@ template formatODT() { } return _txt; } - string _block_type_delimiters(O)(string[] _block_lines, const O obj) @safe { // TODO + @safe string _block_type_delimiters(O)(string[] _block_lines, const O obj) { // TODO string _block = ""; foreach (i, _line; _block_lines) { _line = _footnotes(_line); @@ -222,7 +222,7 @@ template formatODT() { obj_num(obj)); return _block; } - string _special_characters(O)(string _txt, const O obj) @safe { + @safe string _special_characters(O)(string _txt, const O obj) { _txt = _txt .replaceAll(rgx.xhtml_ampersand, "&") .replaceAll(rgx.xhtml_quotation, """) @@ -231,7 +231,7 @@ template formatODT() { .replaceAll(rgx.nbsp_char, " "); return _txt; } - string _preserve_white_spaces(O)(string _txt, const O obj) @safe { + @safe string _preserve_white_spaces(O)(string _txt, const O obj) { if (obj.metainfo.is_a == "code" || obj.metainfo.is_a == "verse" || obj.metainfo.is_a == "block") { _txt = _txt .replaceAll(rgx.space, " "); @@ -252,9 +252,9 @@ template formatODT() { .replaceAll(rgx.inline_mono, format(q"┃<text:span text:style-name="Span_monospace">%s</text:span>┃", "$1")); return _txt; } - auto _obj_num(O)(O obj) @safe { // NOT USED YET + @safe auto _obj_num(O)(O obj) { // NOT USED YET struct objNum { - string reference() @safe { + @safe string reference() { return format(q"┃<text:span text:style-name="Span_subscript"> <text:bookmark-start text:name="%s"/> <text:bookmark-end text:name="%s"/> @@ -263,7 +263,7 @@ template formatODT() { obj.object_number, ); } - string display() @safe { + @safe string display() { return format(q"┃<text:span text:style-name="Span_subscript"> %s%s%s </text:span>┃", @@ -275,20 +275,20 @@ template formatODT() { } return objNum(); } - string _break_page()() @safe { + @safe string _break_page()() { return format(q"┃ <text:p text:style-name="P_normal_page_new"/> ┃", ); } - string _empty_line_break(O)(string _txt, const O obj) @safe { + @safe string _empty_line_break(O)(string _txt, const O obj) { if (obj.metainfo.is_a == "code" || obj.metainfo.is_a == "verse" || obj.metainfo.is_a == "block") { _txt = _txt .replaceAll(rgx.br_empty_line, "<br />"); } return _txt; } - string _links(O)(string _txt, const O obj) @safe { + @safe string _links(O)(string _txt, const O obj) { if (obj.metainfo.is_a != "code") { if (obj.metainfo.is_a == "toc") { _txt = replaceAll!(m => @@ -328,7 +328,7 @@ template formatODT() { } return _txt; } - string _images(O)(string _txt, const O obj) @safe { + @safe string _images(O)(string _txt, const O obj) { if (_txt.match(rgx.inline_image)) { _txt = _txt .replaceAll(rgx.inline_image, @@ -339,7 +339,7 @@ template formatODT() { } return _txt; } - string markup(O)(const O obj) @safe { + @safe string markup(O)(const O obj) { /+ markup TODO +/ string _txt = obj.text; _txt = _special_characters(_txt, obj); // TODO & why both obj & obj.text, consider also in output_xmls.org @@ -353,10 +353,10 @@ template formatODT() { _txt = _empty_line_break(_txt, obj); // (obj.metainfo.is_a == "code" || obj.metainfo.is_a == "verse" || obj.metainfo.is_a == "block") return _txt; } - string heading(O,M)( + @safe string heading(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body" || "frontmatter" || "backmatter"); assert(obj.metainfo.is_of_section == "body" || "toc" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "para"); @@ -397,10 +397,10 @@ template formatODT() { } return _o_txt_odt; } - string para(O,M)( + @safe string para(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body" || "frontmatter" || "backmatter"); assert(obj.metainfo.is_of_section == "body" || "toc" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "para"); @@ -416,10 +416,10 @@ template formatODT() { } return _o_txt_odt; } - string quote(O,M)( + @safe string quote(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -428,10 +428,10 @@ template formatODT() { _o_txt_odt = _footnotes(_o_txt_odt); // decide return _o_txt_odt; } - string group(O,M)( + @safe string group(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -446,10 +446,10 @@ template formatODT() { _o_txt_odt = _block_type_delimiters(_block_lines, obj); return _o_txt_odt; } - string block(O,M)( + @safe string block(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -459,10 +459,10 @@ template formatODT() { _o_txt_odt = _block_type_delimiters(_block_lines, obj); return _o_txt_odt; } - string verse(O,M)( + @safe string verse(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -472,10 +472,10 @@ template formatODT() { _o_txt_odt = _block_type_delimiters(_block_lines, obj); return _o_txt_odt; } - string code(O,M)( + @safe string code(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body"); assert(obj.metainfo.is_of_type == "block"); @@ -519,10 +519,10 @@ template formatODT() { _o_txt_odt = _block; return _o_txt_odt; } - Tuple!(string, string) tablarize(O)( + @safe Tuple!(string, string) tablarize(O)( const O obj, string _txt, - ) @safe { + ) { string[] _table_rows = (_txt).split(rgx.table_delimiter_row); string[] _table_cols; string _table; @@ -554,10 +554,10 @@ template formatODT() { return t; } int _table_number = 0; - string table(O,M)( + @safe string table(O,M)( const O obj, const M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body"); assert(obj.metainfo.is_of_type == "block"); @@ -606,7 +606,7 @@ template outputODT() { mixin spineOutputRgxInit; static auto rgx = Rgx(); // mixin outputXmlODT; - string odt_head(I)(I doc_matters) @safe { + @safe string odt_head(I)(I doc_matters) { string _has_tables = format(q"┃ <style:style style:name="Table1" style:family="table"> <style:table-properties style:width="16.999cm" table:align="margins"/> @@ -714,10 +714,10 @@ template outputODT() { ); return _odt_head; } - string odt_body(D,I)( + @safe string odt_body(D,I)( const D doc_abstraction, I doc_matters, - ) @safe { + ) { mixin formatODT; auto odt_format = formatODT(); string delimit = ""; @@ -840,15 +840,15 @@ template outputODT() { return doc_odt; } - string odt_tail() @safe { + @safe string odt_tail() { string _odt_tail = format(q"┃<text:p text:style-name="P_normal">spine: <<text:a xl:type="simple" xl:href="http://www.doc_reform.org">www.doc_reform.org</text:a>> and <<text:a xl:type="simple" xl:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p> </office:text></office:body></office:document-content>┃",); return _odt_tail; } - string content_xml(D,I)( + @safe string content_xml(D,I)( const D doc_abstraction, I doc_matters, - ) @safe { + ) { string _content_xml; string break_line = (doc_matters.opt.action.debug_do) ? "\n" : ""; string odt_break_page = format(q"┃<text:p text:style-name="P_normal_page_new"/>┃",); @@ -858,9 +858,9 @@ template outputODT() { _content_xml ~= odt_tail; return _content_xml; } - string manifest_xml(M)( + @safe string manifest_xml(M)( auto ref M doc_matters, - ) @safe { + ) { string _bullet = format(q"┃<manifest:file-entry manifest:media-type="" manifest:full-path="Pictures/bullet_09.png"/>┃"); string[] _images = [ _bullet ]; foreach (image; doc_matters.srcs.image_list) { @@ -882,9 +882,9 @@ template outputODT() { ); return _manifest_xml; } - void images_cp(M)( + @safe void images_cp(M)( auto ref M doc_matters, - ) @safe { + ) { { /+ (copy odt images) +/ auto pth_odt = spinePathsODT!()(doc_matters); foreach (image; doc_matters.srcs.image_list) { @@ -902,9 +902,9 @@ template outputODT() { } // return 0; } - string meta_xml(M)( + @safe string meta_xml(M)( auto ref M doc_matters, - ) @safe { + ) { /+ (meta_xml includes output time-stamp) +/ string _meta_xml = format(q"┃<?xml version="1.0" encoding="UTF-8"?> <office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:grddl="http://www.w3.org/2003/g/data-view#" office:version="1.2"> @@ -939,11 +939,11 @@ template outputODT() { } // return 0; } - string mimetype() @safe { + @safe string mimetype() { string mimetype_ = format(q"┃application/vnd.oasis.opendocument.text┃"); return mimetype_; } - string manifest_rdf() @safe { + @safe string manifest_rdf() { string _manifest_rdf = format(q"┃<?xml version="1.0" encoding="utf-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="styles.xml"> @@ -965,7 +965,7 @@ template outputODT() { ┃"); return _manifest_rdf; } - string settings_xml() @safe { + @safe string settings_xml() { string _settings_xml = format(q"┃<?xml version="1.0" encoding="UTF-8"?> <office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" office:version="1.2"> <office:settings> @@ -1065,7 +1065,7 @@ template outputODT() { ┃"); return _settings_xml; } - string styles_xml() @safe { + @safe string styles_xml() { string _styles_xml = format(q"┃<?xml version="1.0" encoding="UTF-8"?> <office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2"> <office:font-face-decls> diff --git a/src/doc_reform/io_out/source_pod.d b/src/doc_reform/io_out/source_pod.d index 31c0b45..59746de 100644 --- a/src/doc_reform/io_out/source_pod.d +++ b/src/doc_reform/io_out/source_pod.d @@ -23,7 +23,7 @@ template spinePod() { auto lang = Lang(); static auto rgx = Rgx(); assert (doc_matters.src.filename.match(rgx.src_fn)); - auto pod_archive(Z)( + @system auto pod_archive(Z)( string _source_type, string _data_in, string _pth_out, diff --git a/src/doc_reform/io_out/xmls.d b/src/doc_reform/io_out/xmls.d index 1d58e27..1b038a9 100644 --- a/src/doc_reform/io_out/xmls.d +++ b/src/doc_reform/io_out/xmls.d @@ -15,10 +15,10 @@ template outputXHTMLs() { mixin spineOutputRgxInit; struct outputXHTMLs { static auto rgx = Rgx(); - string div_delimit( + @safe string div_delimit( string part, return ref string previous_part - ) @safe { + ) { string delimit = ""; string delimit_ = ""; if (part != previous_part) { @@ -45,7 +45,7 @@ template outputXHTMLs() { // you also need to close the last div, introduce a footer? return delimit; } - string special_characters_text(string _txt) @safe { + @safe string special_characters_text(string _txt) { _txt = _txt .replaceAll(rgx.xhtml_ampersand, "&") .replaceAll(rgx.xhtml_quotation, """) @@ -54,9 +54,9 @@ template outputXHTMLs() { .replaceAll(rgx.nbsp_char, " "); return _txt; } - string special_characters(O)( + @safe string special_characters(O)( const O obj, - ) @safe { + ) { string _txt = special_characters_text(obj.text); if (!(obj.metainfo.is_a == "code")) { _txt = (_txt) @@ -64,7 +64,7 @@ template outputXHTMLs() { } return _txt; } - string font_face(string _txt) @safe { + @safe string font_face(string _txt) { _txt = _txt .replaceAll(rgx.inline_emphasis, ("<em>$1</em>")) .replaceAll(rgx.inline_bold, ("<b>$1</b>")) @@ -78,7 +78,7 @@ template outputXHTMLs() { .replaceAll(rgx.inline_cite, ("<cite>$1</cite>")); return _txt; } - string _xhtml_anchor_tags(O)(O obj) @safe { + @safe string _xhtml_anchor_tags(O)(O obj) { const(string[]) anchor_tags = obj.tags.anchor_tags; string tags=""; if (anchor_tags.length > 0) { @@ -90,9 +90,9 @@ template outputXHTMLs() { } return tags; } - string header_metadata(M)( + @safe string header_metadata(M)( M doc_matters, - ) @safe { + ) { string _publisher="Publisher"; // TODO string o; o = format(q"┃<!-- spine DocReform header metadata --> @@ -127,9 +127,9 @@ template outputXHTMLs() { ); return o; } - string site_info_button(M)( + @safe string site_info_button(M)( M doc_matters, - ) @safe { + ) { string _locations; if (doc_matters.conf_make_meta.make.home_button_text.length > 0) { _locations = (doc_matters.conf_make_meta.make.home_button_text) @@ -151,9 +151,9 @@ template outputXHTMLs() { ); return o; } - string inline_search_form(M)( + @safe string inline_search_form(M)( M doc_matters, - ) @safe { + ) { string _action="http://www.sisudoc.org/cgi-bin/search.cgi"; string _db="spine.7a.manual"; string o; @@ -182,7 +182,7 @@ template outputXHTMLs() { } return o; } - string html_head(M)( + @safe string html_head(M)( M doc_matters, string type, ) { @@ -232,9 +232,9 @@ template outputXHTMLs() { ); return o; } - string epub3_seg_head(M)( + @safe string epub3_seg_head(M)( M doc_matters, - ) @safe { + ) { string html_base = format(q"┃<!DOCTYPE html> <html>┃", ); @@ -300,7 +300,7 @@ template outputXHTMLs() { ); return o; } - string tail() @safe { + @safe string tail() { string o; o = format(q"┃ <a name="bottom" id="bottom"></a> @@ -309,13 +309,13 @@ template outputXHTMLs() { </html>┃"); return o; } - string inline_images(O,M)( + @safe string inline_images(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "seg", - ) @safe { + ) { string _img_pth; switch (_xml_type) { case "epub": _img_pth = "image/"; break; @@ -335,13 +335,13 @@ template outputXHTMLs() { } return _txt; } - string inline_links(O,M)( + @safe string inline_links(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "seg", - ) @safe { + ) { string seg_lvs; if (obj.has.inline_links) { if (obj.metainfo.is_a != "code") { @@ -426,11 +426,11 @@ template outputXHTMLs() { } return _txt; } - string inline_notes_scroll(O,M)( + @safe string inline_notes_scroll(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { if (obj.has.inline_notes_reg) { _txt = font_face(_txt); _txt = _txt.replaceAll( @@ -457,11 +457,11 @@ template outputXHTMLs() { } return _txt; } - Tuple!(string, string[]) inline_notes_seg(O,M)( + @safe Tuple!(string, string[]) inline_notes_seg(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { string[] _endnotes; if (obj.has.inline_notes_star) { _txt = font_face(_txt); @@ -521,12 +521,12 @@ template outputXHTMLs() { ); return t; } - string inline_markup_scroll(O,M)( + @safe string inline_markup_scroll(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", - ) @safe { + ) { if (obj.metainfo.dummy_heading && (obj.metainfo.is_a == "toc" || obj.metainfo.is_a == "heading")) { _txt = ""; @@ -537,13 +537,13 @@ template outputXHTMLs() { } return _txt; } - auto inline_markup_seg(O,M)( + @safe auto inline_markup_seg(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "seg", - ) @safe { + ) { if (obj.metainfo.dummy_heading && ((_xml_type == "epub" && (obj.metainfo.is_a == "toc" || obj.metainfo.is_a == "heading")) @@ -557,10 +557,10 @@ template outputXHTMLs() { Tuple!(string, string[]) t = inline_notes_seg(_txt, obj, doc_matters); return t; } - string lev4_heading_subtoc(O,M)( + @safe string lev4_heading_subtoc(O,M)( const O obj, M doc_matters, - ) @safe { + ) { char[] lev4_subtoc; lev4_subtoc ~= " <div class=\"nav\">\n"; foreach (subtoc; obj.tags.lev4_subtoc) { @@ -584,10 +584,10 @@ template outputXHTMLs() { lev4_subtoc ~= " </div>\n"; return lev4_subtoc.to!string; } - auto nav_pre_next_svg(O,M)( + @safe auto nav_pre_next_svg(O,M)( const O obj, M doc_matters, - ) @safe { + ) { string prev, next, toc; if (obj.tags.segment_anchor_tag_epub == "toc") { toc = ""; @@ -660,12 +660,12 @@ template outputXHTMLs() { } return bar(); } - string heading(O,M)( + @safe string heading(O,M)( string _txt, const O obj, M doc_matters, string _xml_type = "html", - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body" || "frontmatter" || "backmatter"); assert(obj.metainfo.is_of_section == "body" || "toc" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "para"); @@ -725,23 +725,23 @@ template outputXHTMLs() { } return o; } - string heading_scroll(O,M)( + @safe string heading_scroll(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", - ) @safe { + ) { _txt = inline_markup_scroll(_txt, obj, doc_matters, _suffix); string o = heading(_txt, obj, doc_matters); return o; } - Tuple!(string, string[]) heading_seg(O,M)( + @safe Tuple!(string, string[]) heading_seg(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { auto t = inline_markup_seg(_txt, obj, doc_matters, _suffix, _xml_type); _txt = t[0]; string[] _endnotes = t[1]; @@ -752,11 +752,11 @@ template outputXHTMLs() { ); return u; } - string para(O,M)( + @safe string para(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body" || "frontmatter" || "backmatter"); assert(obj.metainfo.is_of_section == "body" || "toc" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "para"); @@ -802,12 +802,12 @@ template outputXHTMLs() { } return o; } - string para_scroll(O,M)( + @safe string para_scroll(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", - ) @safe { + ) { if (obj.metainfo.is_a == "toc" && _txt.match(rgx.inline_link_toc_to_backmatter)) { _txt = _txt.replaceAll(rgx.inline_link_toc_to_backmatter, "┤#section_$1├"); } @@ -815,13 +815,13 @@ template outputXHTMLs() { string o = para(_txt, obj, doc_matters); return o; } - Tuple!(string, string[]) para_seg(O,M)( + @safe Tuple!(string, string[]) para_seg(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { auto t = inline_markup_seg(_txt, obj, doc_matters, _suffix, _xml_type); _txt = t[0].to!string; string[] _endnotes = t[1]; @@ -832,11 +832,11 @@ template outputXHTMLs() { ); return u; } - string quote(O,M)( + @safe string quote(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -868,23 +868,23 @@ template outputXHTMLs() { } return o; } - string quote_scroll(O,M)( + @safe string quote_scroll(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", - ) @safe { + ) { _txt = inline_markup_scroll(_txt, obj, doc_matters, _suffix); string o = quote(_txt, obj, doc_matters); return o; } - Tuple!(string, string[]) quote_seg(O,M)( + @safe Tuple!(string, string[]) quote_seg(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { auto t = inline_markup_seg(_txt, obj, doc_matters, _suffix, _xml_type); _txt = t[0].to!string; string[] _endnotes = t[1]; @@ -895,11 +895,11 @@ template outputXHTMLs() { ); return u; } - string group(O,M)( + @safe string group(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -931,24 +931,24 @@ template outputXHTMLs() { } return o; } - string group_scroll(O,M)( + @safe string group_scroll(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { _txt = inline_markup_scroll(_txt, obj, doc_matters, _suffix); string o = group(_txt, obj, doc_matters); return o; } - Tuple!(string, string[]) group_seg(O,M)( + @safe Tuple!(string, string[]) group_seg(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { auto t = inline_markup_seg(_txt, obj, doc_matters, _suffix, _xml_type); _txt = t[0].to!string; string[] _endnotes = t[1]; @@ -959,11 +959,11 @@ template outputXHTMLs() { ); return u; } - string block(O,M)( + @safe string block(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -991,24 +991,24 @@ template outputXHTMLs() { } return o; } - string block_scroll(O,M)( + @safe string block_scroll(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { _txt = inline_markup_scroll(_txt, obj, doc_matters, _suffix); string o = block(_txt, obj, doc_matters); return o; } - Tuple!(string, string[]) block_seg(O,M)( + @safe Tuple!(string, string[]) block_seg(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { auto t = inline_markup_seg(_txt, obj, doc_matters, _suffix, _xml_type); _txt = t[0].to!string; string[] _endnotes = t[1]; @@ -1019,11 +1019,11 @@ template outputXHTMLs() { ); return u; } - string verse(O,M)( + @safe string verse(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body" || "glossary" || "bibliography" || "bookindex" || "blurb"); assert(obj.metainfo.is_of_type == "block"); @@ -1051,24 +1051,24 @@ template outputXHTMLs() { } return o; } - string verse_scroll(O,M)( + @safe string verse_scroll(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { _txt = inline_markup_scroll(_txt, obj, doc_matters, _suffix); string o = verse(_txt, obj, doc_matters); return o; } - Tuple!(string, string[]) verse_seg(O,M)( + @safe Tuple!(string, string[]) verse_seg(O,M)( string _txt, const O obj, M doc_matters, string _suffix = ".html", string _xml_type = "html", - ) @safe { + ) { auto t = inline_markup_seg(_txt, obj, doc_matters, _suffix, _xml_type); _txt = t[0].to!string; string[] _endnotes = t[1]; @@ -1079,10 +1079,10 @@ template outputXHTMLs() { ); return u; } - Tuple!(string, string) tablarize(O)( + @safe Tuple!(string, string) tablarize(O)( string _txt, const O obj, - ) @safe { + ) { string[] _table_rows = (_txt).split(rgx.table_delimiter_row); string[] _table_cols; string _table; @@ -1112,11 +1112,11 @@ template outputXHTMLs() { ); return t; } - string table(O,M)( + @safe string table(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body"); assert(obj.metainfo.is_of_type == "block"); @@ -1146,11 +1146,11 @@ template outputXHTMLs() { ); return o; } - string code(O,M)( + @safe string code(O,M)( string _txt, const O obj, M doc_matters, - ) @safe { + ) { assert(obj.metainfo.is_of_part == "body"); assert(obj.metainfo.is_of_section == "body"); assert(obj.metainfo.is_of_type == "block"); diff --git a/src/doc_reform/io_out/xmls_css.d b/src/doc_reform/io_out/xmls_css.d index 0974637..88af237 100644 --- a/src/doc_reform/io_out/xmls_css.d +++ b/src/doc_reform/io_out/xmls_css.d @@ -4,7 +4,7 @@ module doc_reform.io_out.xmls_css; template spineCss() { import std.format; - auto spineCss(M)(M doc_matters) @safe { + @safe auto spineCss(M)(M doc_matters) { string _css_indent = format(q"┃ /* indent */ p.norm { } @@ -4162,7 +4162,7 @@ template spineCss() { _css_indent, _color_ocn_dark, ); - auto css_() @safe { + @safe auto css_() { struct _CSS { string html_seg = "/* spine css html seg stylesheet */\n"; string html_scroll = "/* spine css html scroll stylesheet */\n"; |