-*- mode: org -*- #+TITLE: sisudoc spine (doc_reform) shared #+DESCRIPTION: documents - structuring, publishing in multiple formats & search #+FILETAGS: :spine:default:shared: #+AUTHOR: Ralph Amissah #+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] #+COPYRIGHT: Copyright (C) 2015 (continuously updated, current 2026) Ralph Amissah #+LANGUAGE: en #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args+ :eval never-export :exports code #+PROPERTY: header-args+ :noweb yes :padline no #+PROPERTY: header-args+ :results silent :cache no #+PROPERTY: header-args+ :mkdirp yes #+OPTIONS: H:3 num:nil toc:t \n:t ::t |:t ^:nil -:t f:t *:t - magic single double-quote → " ← FIX changes hilighting behavior (occuring after it) in org document. INVESTIGATE (org-mode CONFIG?) FIND & FIX - [[./doc-reform.org][doc-reform.org]] [[./][org/]] * html snippet ** _module template_ :module: #+HEADER: :tangle "../src/sisudoc/outputs/io_out/html_snippet.d" #+HEADER: :noweb yes #+BEGIN_SRC d <> module sisudoc.outputs.io_out.html_snippet; @safe: /+ ↓ these are at template scope, so they are visible in every scope this template is mixed into: twelve of them, across the output writers. Removing them leaves one consumer that was relying on the leak rather than on its own imports, and that one now imports what it uses. They stay here because the template's own functions need them, and narrowing them to those functions is a change of its own rather than a cleanup. FIX later. +/ template htmlSnippet() { import std.file; import std.outbuffer; import std.format; import std.uri; import std.conv : to; import sisudoc.outputs.io_out.rgx; import sisudoc.ocda.meta.rgx_files; import sisudoc.outputs.io_out.rgx_xhtml; auto format_html_blank_page_guide_home()( string css_style, string home_url, string collection_home_path ) { auto html_blank_default = format(q"┃

⟰    ≅ 

┃", css_style, home_url, collection_home_path ); return html_blank_default; } string special_characters_text(string _txt) { mixin spineRgxOut; mixin spineRgxXHTML; static auto rgx = RgxO(); static auto rgx_xhtml = RgxXHTML(); _txt = _txt .replaceAll(rgx_xhtml.ampersand, "&") // "&" .replaceAll(rgx_xhtml.quotation, """) // """ .replaceAll(rgx_xhtml.less_than, "<") // "<" .replaceAll(rgx_xhtml.greater_than, ">") // ">" .replaceAll(rgx.br_line, "
") .replaceAll(rgx.br_line_inline, "
") .replaceAll(rgx.br_line_spaced, "
\n
") .replaceAll(rgx.nbsp_char, " "); return _txt; } } #+END_SRC * shared ** _module template_ :module:shared: #+HEADER: :tangle "../src/sisudoc/outputs/share/defaults.d" #+HEADER: :noweb yes #+BEGIN_SRC d <> /++ shared default settings +/ module sisudoc.outputs.share.defaults; @safe: <> #+END_SRC ** template: messages :messages: #+NAME: shared_messages #+BEGIN_SRC d template Msg() { import std.stdio; auto Msg(I)(I doc_matters) { struct Msg_ { void v()(string message) { if (doc_matters.opt.action.vox_gt_2) { writeln(message); } } void vv()(string message) { if (doc_matters.opt.action.vox_gt_3) { writeln(message); } } } return Msg_(); } } #+END_SRC * org includes ** project version #+NAME: spine_version #+HEADER: :noweb yes #+BEGIN_SRC emacs-lisp <<./sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org:spine_project_version()>> #+END_SRC ** year #+NAME: year #+HEADER: :noweb yes #+BEGIN_SRC emacs-lisp <<./sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org:year()>> #+END_SRC ** document header including copyright & license #+NAME: doc_header_including_copyright_and_license #+HEADER: :noweb yes #+BEGIN_SRC emacs-lisp <<./sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org:spine_doc_header_including_copyright_and_license()>> #+END_SRC * __END__