diff options
Diffstat (limited to 'org')
43 files changed, 3148 insertions, 1209 deletions
diff --git a/org/compile_time_info.org b/org/compile_time_info.org index 1332c2c..aca03d1 100644 --- a/org/compile_time_info.org +++ b/org/compile_time_info.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -42,14 +42,6 @@ template CompileTimeInfo() { } #+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 - ** complile time os OS type shows during compilation @@ -122,4 +114,29 @@ version(D_LP64) { } #+END_SRC +* org includes +** spine 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__ diff --git a/org/config_d_cfte.org b/org/config_d_cfte.org index 2797609..d74dd66 100644 --- a/org/config_d_cfte.org +++ b/org/config_d_cfte.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes diff --git a/org/config_dub.org b/org/config_dub.org index 043e62c..ccfc822 100644 --- a/org/config_dub.org +++ b/org/config_dub.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -17,14 +17,6 @@ - [[./doc-reform.org][doc-reform.org]] [[./][org/]] -** spine project VERSION :version:set:project: - -#+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 - ** dub - https://github.com/dlang/dub/ @@ -181,3 +173,30 @@ "defaultCompiler": "ldc" } #+END_SRC + +* org includes +** spine 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__ diff --git a/org/config_env.org b/org/config_env.org index 9913dce..2fa1f25 100644 --- a/org/config_env.org +++ b/org/config_env.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -33,12 +33,15 @@ fi #+NAME: envrc #+HEADER: :tangle ../.envrc +#+HEADER: :shebang "# -*- mode: sh -*-" #+BEGIN_SRC shell if [ -f .envrc-git-init ]; then source_env_if_exists .envrc-git-init || source .envrc-git-init fi if [ -f .envrc-local ]; then source_env_if_exists .envrc-local || source .envrc-local +elif [ -f .envrc-local_ ]; then + source_env_if_exists .envrc-local_ || source .envrc-local_ fi if [ -f .envrc-nix ]; then source_env_if_exists .envrc-nix || source .envrc-nix @@ -53,6 +56,7 @@ fi - ${NixDirEnvVersion} #+HEADER: :tangle ../.envrc-nix +#+HEADER: :shebang "# -*- mode: nix -*-" #+BEGIN_SRC shell NIX_ENFORCE_PURITY=1 # - https://github.com/nix-community/nix-direnv @@ -80,11 +84,11 @@ echo ' • nix develop ❯❯ nix develop ".#" --print-build-logs -c zsh • nix develop using nixpkgs - ❯❯ nix develop ".#dsh-nixpkgs-dmd-dub" --print-build-logs -c zsh - ❯❯ nix develop ".#dsh-nixpkgs-ldc-dub" --print-build-logs -c zsh - • nix develop using package overlays: (dmd-<<dmd_version>>, ldc-<<ldc_version>>, dub-<<dub_version>>) - ❯❯ nix develop ".#dsh-overlay-dmd-dub" --print-build-logs -c zsh - ❯❯ nix develop ".#dsh-overlay-ldc-dub" --print-build-logs -c zsh + ❯❯ nix develop ".#dsh-nixpkgs-dmd" --print-build-logs -c zsh + ❯❯ nix develop ".#dsh-nixpkgs-ldc" --print-build-logs -c zsh + • nix develop using package overlays: (dmd-<<dmd_version>>, ldc-<<ldc_version>>, dub-<<dub_version>>, dtools-<<dtools_version>>) + ❯❯ nix develop ".#dsh-overlay-dmd" --print-build-logs -c zsh + ❯❯ nix develop ".#dsh-overlay-ldc" --print-build-logs -c zsh ❯❯ nix flake show • to build project: @@ -96,16 +100,16 @@ echo ' • nix build using nixpkgs ❯❯ nix build ".#spine-nixpkgs-dmd" --print-build-logs ❯❯ nix build ".#spine-nixpkgs-ldc" --print-build-logs - • nix build using package overlays: (dmd-<<dmd_version>>, ldc-<<ldc_version>>, dub-<<dub_version>>) + • nix build using package overlays: (dmd-<<dmd_version>>, ldc-<<ldc_version>>, dub-<<dub_version>>, dtools-<<dtools_version>>) ❯❯ nix build ".#spine-overlay-dmd" --print-build-logs ❯❯ nix build ".#spine-overlay-ldc" --print-build-logs • to build using dub on nix (get dependencies by setting your development environment): - ❯❯ nix develop ".#dsh-nixpkgs-dmd-dub" --print-build-logs -c zsh + ❯❯ nix develop ".#dsh-nixpkgs-dmd" --print-build-logs -c zsh ❯❯ dub --verbose --compiler=dmd --config=dmd - ❯❯ nix develop ".#dsh-nixpkgs-ldc-dub" --print-build-logs -c zsh + ❯❯ nix develop ".#dsh-nixpkgs-ldc" --print-build-logs -c zsh ❯❯ dub --verbose --compiler=ldmd2 --config=ldmd2 • for develop environment & build options @@ -119,6 +123,11 @@ echo ' ❯❯ ${SpineBIN} -v --source --pod --epub --html --html-link-curate --html-link-markup --curate --output=${SpineOUT} ${SpinePOD}/* ❯❯ ${SpineBIN} -v --source --pod --latex --latex-init --epub --html --html-link-pdf --html-link-curate --html-link-markup --curate --output=${SpineOUT} ${SpinePOD}/* + + ❯❯ ${SpineBIN} -v --sqlite-db-create --sqlite-db-filename=${SpineSQLdb} --sqlite-db-path=./_tmp-db + ❯❯ ${SpineBIN} -v --sqlite-update --sqlite-db-filename=${SpineSQLdb} --sqlite-db-path=./_tmp-db ${SpinePOD}/* + + ❯❯ ${SpineBIN} --source --pod --curate --text --latex --epub --html --manifest --html-link-search --html-link-pdf --html-link-text --html-link-curate --html-link-markup --html-link-source --html-link-pod --html-link-metadata --cgi-sqlite-search-filename="${SpineCGIform}" --cgi-url-action="${SpineSearchActionRemote}" --sqlite-db-path="${SpineDBpath}" --sqlite-db-filename="${SpineSQLdb}" --www-url-doc-root=${SpineURLdocRoot} --set-papersize="a4,letter" --output=${SpineOUT} ${SpinePOD}/* ' echo "• ❯❯ ${SpineBIN} -v --source --pod --epub --html --html-link-curate --html-link-markup --curate --output=${SpineOUT} ${SpinePOD}/* @@ -129,6 +138,7 @@ echo "• ** .envrc-git-init #+HEADER: :tangle ../.envrc-git-init +#+HEADER: :shebang "# -*- mode: sh -*-" #+HEADER: :noweb yes #+BEGIN_SRC shell if [[ ! -d ./.git ]]; then @@ -137,11 +147,25 @@ if [[ ! -d ./.git ]]; then fi #+END_SRC +** ,version (project & git version info) + +#+HEADER: :tangle ../,version +#+HEADER: :noweb yes +#+HEADER: :tangle-mode (identity #o755) +#+HEADER: :shebang #!/usr/bin/env sh +#+BEGIN_SRC shell +SpineProjVer=`rg "Version\((\d+), (\d+), (\d+)\)" views/version.txt | sed -E 's/.*([0-9]+), ([0-9]+), ([0-9]+).*/spine-v\1.\2.\3/'` && \ + SpineGitVer=`git describe | sed "s/^[a-z_-]\+\([0-9.]\+\)/\1/" | sed "s/\([^-]*-g\)/r\1/" | sed "s/-/./g"` && \ + SpineGitBranch=`git branch --show-current` && \ + echo "❯❯ $SpineProjVer - ($SpineGitBranch: $SpineGitVer)" +#+END_SRC + ** .envrc-local CHECK MODIFY - bespoke modify appropriately and generate if needed #+HEADER: :tangle ../.envrc-local_ +#+HEADER: :shebang "# -*- mode: sh -*-" #+HEADER: :noweb yes #+BEGIN_SRC shell export SpineVER=$(git describe --long --tags | sed 's/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g') @@ -154,13 +178,17 @@ export SpineBIN=./result/bin/spine #export SpineBIN=./bin/spine-dmd # ❯❯ location of source files: export SpineDOC=../sisudoc-spine-samples +#export SpineDOC=./sisudoc-spine-samples # ❯❯ location of source files pod: -export SpinePOD=${SpineDOC}/markup/pod +export SpinePOD=${SpineDOC}/markup/pod-samples/pod # ❯❯ sisudoc-spine output processing path: export SpineOUT=./OUTPUT_TEST_sisudocSpine # ❯❯ sisudoc-spine output processing path (web server e.g.): #export SpineOUT=/srv/www/spine #export SpineOUTversioned=${SpineOUT}/${SpineVER} +# ❯❯ www url doc root +export SpineURLdocRoot='http://localhost' +# export SpineURLdocRoot='https://sisudoc.org' # ❯❯ path configured for cgi search form: export SpineSearchActionLocal='http://localhost/spine_search' export SpineSearchActionRemote='https://sisudoc.org/spine_search' @@ -175,7 +203,7 @@ export SpineDBpath=/var/www/sqlite #export SpineDBpath=/srv/www/spine/sqlite #+END_SRC -* SHARED versions +* org includes - versions GET ** direnv #+NAME: direnv_version @@ -190,14 +218,6 @@ export SpineDBpath=/var/www/sqlite <<./nix-develop-dlang-shared.org:direnv-hash()>> #+END_SRC -** spine project VERSION :version:set:project: - -#+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 - ** dlang overlays *** ldc @@ -231,4 +251,26 @@ export SpineDBpath=/var/www/sqlite <<./nix-develop-dlang-shared.org:dtools-version()>> #+END_SRC +** spine 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 + +#+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__ diff --git a/org/config_git.org b/org/config_git.org index b997923..771f7bc 100644 --- a/org/config_git.org +++ b/org/config_git.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -37,8 +37,6 @@ !.envrc !.envrc-nix !.envrc-git-init -!.env -!.env/** !nix-overlays !nix-overlays/** !README.md @@ -47,9 +45,11 @@ !CHANGELOG !makefile !version.txt +!,version !configuration.txt !*.json !*.sdl +!*.md !meson.build !tangle !*.org diff --git a/org/config_make.org b/org/config_make.org index 286842b..2509fa1 100644 --- a/org/config_make.org +++ b/org/config_make.org @@ -9,23 +9,13 @@ #+STARTUP: show4levels hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes - [[./doc-reform.org][doc-reform.org]] [[../org/][org/]] -* project -** version info SET VERSION :version:set:project: -*** 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 - *** build tools if specified - meson @@ -1360,3 +1350,29 @@ version_tag: tangle gitsnapshot #+END_SRC +* org includes +** spine 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__ diff --git a/org/config_meson.org b/org/config_meson.org index 60690cc..1079fb8 100644 --- a/org/config_meson.org +++ b/org/config_meson.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -19,14 +19,6 @@ * spine ** version info SET VERSION :version:set:project: -*** spine project VERSION :version:set:project: - -#+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 - *** subprojects - d2sqlite3 @@ -490,3 +482,30 @@ tinyendian_dep = declare_dependency( include_directories: [src_dir] ) #+END_SRC + +* org includes +** spine 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__ diff --git a/org/config_misc.org b/org/config_misc.org index cf79a58..c83a456 100644 --- a/org/config_misc.org +++ b/org/config_misc.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes diff --git a/org/config_nix.org b/org/config_nix.org index 54ec0ec..167a406 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -9,7 +9,7 @@ #+STARTUP: show4levels hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -44,9 +44,10 @@ runHook postCheck ''; localOverlay = (final: prev: { - ldc = prev.callPackage ./nix-overlays/ldc { }; - dmd = prev.callPackage ./nix-overlays/dmd { }; - dub = prev.callPackage ./nix-overlays/dub { }; + ldc = prev.callPackage ./nix-overlays/ldc { }; # -> ok <<ldc_version>> + dmd = prev.callPackage ./nix-overlays/dmd { }; # -> ok <<dmd_version>> + dub = prev.callPackage ./nix-overlays/dub { }; # -> ? <<dub_version>> + dtools = prev.callPackage ./nix-overlays/dtools { }; # -> ok <<dtools_version>> #gdc = prev.callPackage ./nix-overlays/gdc { }; }); pkgsForSystem = system: import nixpkgs { @@ -56,7 +57,8 @@ inherit system; }; preBuild = '' - export HOME=$(pwd) + export HOME=$TMPDIR + #export HOME=$(pwd) ''; installPhase = '' runHook preInstall @@ -65,7 +67,9 @@ runHook postInstall ''; postInstall = '' + echo "❯❯ ./result/bin/spine -v --source --pod --text --epub --html --html-link-pdf --html-link-curate --html-link-markup --curate --output=./OUTPUT_TEST_sisudocSpine ../sisu-spine-samples/markup/pod/*"; echo `ls -la $out/bin/spine` + echo "❯❯ spine-v${version} (rev: ${self.shortRev or "unknown"})" $out/bin/spine -v ''; in { @@ -230,68 +234,90 @@ pkgs-ovl = pkgsForSystem system; pkgs-nix = nixpkgsFor.${system}; shellHook = '' - export Date=`date "+%Y%m%d"` + #export Date=`date "+%Y%m%d"` ## set local values in .envrc-local (or here if you must) - echo " ❯❯ ./result/bin/spine -v --source --pod --epub --html --html-link-pdf --html-link-curate --html-link-markup --curate --output=./OUTPUT_TEST_sisudocSpine ../sisu-spine-samples/markup/pod/*"; + echo '❯❯ nix build'; + ## ImPure Nix environment + SpineGitVer=`git describe | sed "s/^[a-z_-]\+\([0-9.]\+\)/\1/" | sed "s/\([^-]*-g\)/r\1/" | sed "s/-/./g"` && \ + SpineGitBranch=`git branch --show-current` && \ + echo "❯❯ spine-v${version} - ($SpineGitBranch: $SpineGitVer)" + ## Pure Nix environment - version info from flake inputs + #echo "❯❯ spine-v${version} (rev: ${self.shortRev or "unknown"})" + echo '❯❯ $SpineBIN -v --source --pod --text --epub --html --html-link-pdf --html-link-curate --html-link-markup --curate --output=$SpineOUT $SpinePOD/*'; + echo "❯❯ $SpineBIN -v --source --pod --text --epub --html --html-link-pdf --html-link-curate --html-link-markup --curate --output=$SpineOUT $SpinePOD/*"; + echo '❯❯ nix flake update && nix flake check && nix flake show'; ''; in with pkgs-nix; { dsh-overlay = mkShell { - name = "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>>"; + name = "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>> - dtools-<<dtools_version>>"; inherit shell; inherit devEnv; packages = with pkgs-ovl; [ ldc #dmd dub + dtools gnumake sqlite + gnugrep gnused + ripgrep ]; inherit shellHook; }; - dsh-nixpkgs-dmd-dub = mkShell { + dsh-nixpkgs-dmd = mkShell { name = "spine-<<spine_version>> base dev shell"; inherit shell; inherit devEnv; packages = [ dmd dub + dtools gnumake sqlite + gnugrep gnused + ripgrep ]; inherit shellHook; }; - dsh-nixpkgs-ldc-dub = mkShell { + dsh-nixpkgs-ldc = mkShell { name = "spine-<<spine_version>> base dev shell"; inherit shell; inherit devEnv; packages = [ ldc dub + dtools gnumake sqlite + gnugrep gnused + ripgrep ]; inherit shellHook; }; - dsh-overlay-dmd-dub = mkShell { - name = "spine-<<spine_version>> base dev shell, dmd-<<dmd_version>>, dub-<<dub_version>>"; + dsh-overlay-dmd = mkShell { + name = "spine-<<spine_version>> base dev shell, dmd-<<dmd_version>>, dub-<<dub_version>> - dtools-<<dtools_version>>"; inherit shell; inherit devEnv; packages = with pkgs-ovl; [ dmd dub + dtools gnumake sqlite + gnugrep gnused + ripgrep ]; inherit shellHook; }; - dsh-overlay-ldc-dub = mkShell { - name = "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>>"; + dsh-overlay-ldc = mkShell { + name = "spine-<<spine_version>> base dev shell, ldc-<<ldc_version>>, dub-<<dub_version>> - dtools-<<dtools_version>>"; inherit shell; inherit devEnv; packages = with pkgs-ovl; [ ldc dub + dtools gnumake sqlite ]; @@ -305,6 +331,7 @@ ldc #dmd dub + dtools gnumake sqlite libxml2 @@ -322,6 +349,8 @@ calibre #(suite includes: ebook-viewer) koreader foliate + gnugrep gnused + ripgrep ]; inherit shellHook; }; @@ -333,6 +362,7 @@ ldc #dmd dub + dtools gnumake sqlite # ❯❯ text-mode web browsers @@ -342,6 +372,8 @@ w3m # ❯❯ light graphical #dillo + gnugrep gnused + ripgrep ]; inherit shellHook; }; @@ -353,11 +385,14 @@ ldc #dmd dub + dtools gnumake source-sans-pro source-serif-pro source-code-pro texlive.combined.scheme-full + gnugrep gnused + ripgrep ]; inherit shellHook; }; @@ -369,8 +404,11 @@ ldc #dmd dub + dtools gnumake sqlite + gnugrep gnused + ripgrep ]; inherit shellHook; }; @@ -382,9 +420,12 @@ ldc #dmd dub + dtools gnumake sqlite perl538Packages.Po4a + gnugrep gnused + ripgrep ]; inherit shellHook; }; @@ -499,6 +540,7 @@ with pkgs; # ❯❯❯ dev gnumake ps + dtools # ❯❯❯ d_build_related # ❯❯ package manager dub @@ -705,7 +747,7 @@ github:nixos/nixpkgs ** .env/echo-nixNote CHECK MODIFY *** notes on nix commands -#+HEADER: :tangle ../.env/nix-commands +#+HEADER: :tangle-NO ../.env/nix-commands #+BEGIN_SRC text - nix flake update && nix flake check --show-trace && nix flake show && nix develop .#devShell @@ -730,7 +772,7 @@ nix-shell '<nixpkgs>' -A nix --pure *** echo-nixNote -#+HEADER: :tangle ../.env/echo-nixNote +#+HEADER: :tangle-NO ../.env/echo-nixNote #+BEGIN_SRC shell echo '-*- mode: org -*- @@ -880,13 +922,13 @@ $SpineBIN/spine --show-config --output="$SpineOUTversioned" $SpinePOD ,#+BEGIN_SRC shell $SpineBIN/spine --very-verbose --sqlite-db-create --output="$SpineOUT" $SpinePOD/* -$SpineBIN/spine -v --cgi-search-form-codegen --output=$SpineOUT $SpinePOD/* +# CGI search form is built separately in sisudoc-spine-search-cgi/ $SpineBIN/spine -v --show-config --config=$SpinePOD/.dr $SpineBIN/spine --html $SpinePOD/* -$SpineBIN/spine -v --cgi-search-form-codegen --config=$SpinePOD/.dr/config_local_site +# See sisudoc-spine-search-cgi/README.md for CGI search form build instructions ,#+END_SRC ,*** generate html linked to search form @@ -955,7 +997,7 @@ webserv: ,*** make search form ,#+BEGIN_SRC shell -$SpineBIN/spine -v --cgi-search-form-codegen --config=$SpinePOD/.dr/config_local_site +# CGI search form is built separately - see sisudoc-spine-search-cgi/README.md ,#+END_SRC ,*** latex @@ -1020,18 +1062,9 @@ postInstall: echo `ls -la $${out}/bin/spine` #+END_SRC -* SHARED -** versions -*** spine project VERSION :version:set:project: - -#+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 - -*** dlang overlays -**** ldc +* versions GET +** dlang overlays +*** ldc #+NAME: ldc_version #+HEADER: :noweb yes @@ -1039,7 +1072,7 @@ postInstall: <<./nix-develop-dlang-shared.org:ldc-version()>> #+END_SRC -**** dmd +*** dmd #+NAME: dmd_version #+HEADER: :noweb yes @@ -1047,7 +1080,7 @@ postInstall: <<./nix-develop-dlang-shared.org:dmd-version()>> #+END_SRC -**** dub +*** dub #+NAME: dub_version #+HEADER: :noweb yes @@ -1055,7 +1088,7 @@ postInstall: <<./nix-develop-dlang-shared.org:dub-version()>> #+END_SRC -**** dtools +*** dtools #+NAME: dtools_version #+HEADER: :noweb yes @@ -1063,15 +1096,41 @@ postInstall: <<./nix-develop-dlang-shared.org:dtools-version()>> #+END_SRC -*** empty sha56 hash +** sha256 blank hash -#+NAME: blank_hash +#+NAME: sha256-blank #+BEGIN_SRC nix -sha256-0000000000000000000000000000000000000000000= +<<./nix-develop-dlang-shared.org:sha256-blank()>> #+END_SRC -#+NAME: assumed_hash +#+NAME: blank_hash #+BEGIN_SRC nix -sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= +<<./nix-develop-dlang-shared.org:sha256-blank()>> +#+END_SRC + +* org includes +** spine 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__ diff --git a/org/default_imports.org b/org/default_imports.org index d708124..b719d37 100644 --- a/org/default_imports.org +++ b/org/default_imports.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -32,20 +32,18 @@ module sisudoc.meta; #+NAME: imports_for_meta_general #+BEGIN_SRC d -public import - sisudoc.meta.defaults; +public import sisudoc.meta.defaults; /+ std +/ -public import - std.array, - std.exception, - std.range, - std.regex, - std.stdio, - std.string, - std.typecons, - // std.uni, - std.utf, - std.conv : to; +public import std.array; +public import std.exception; +public import std.range; +public import std.regex; +public import std.stdio; +public import std.string; +public import std.typecons; +// public import std.uni; +public import std.utf; +public import std.conv : to; #+END_SRC * imports for _output_ :output: @@ -63,28 +61,43 @@ module sisudoc.io_out; #+NAME: imports_for_output_general #+BEGIN_SRC d -public import - std.algorithm, - std.array, - std.container, - std.exception, - std.path, - std.process, - std.range, - std.regex, - std.stdio, - std.string, - std.typecons, - // std.uni, - std.utf; -public import - sisudoc.share.defaults, - sisudoc.io_in.paths_source, - sisudoc.io_out.defaults, - sisudoc.io_out.paths_output; +public import std.algorithm; +public import std.array; +public import std.container; +public import std.exception; +public import std.path; +public import std.process; +public import std.range; +public import std.regex; +public import std.stdio; +public import std.string; +public import std.typecons; +// public import std.uni; +public import std.utf; +public import sisudoc.share.defaults; +public import sisudoc.io_in.paths_source; +public import sisudoc.io_out.defaults; +public import sisudoc.io_out.paths_output; #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/default_misc.org b/org/default_misc.org index baa7a81..8fab9fc 100644 --- a/org/default_misc.org +++ b/org/default_misc.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -190,24 +190,23 @@ module sisudoc.io_out.defaults; #+NAME: defaults_imports #+BEGIN_SRC d -import - std.algorithm, - std.array, - std.container, - std.exception, - std.file, - std.getopt, - std.json, - std.path, - std.process, - std.range, - std.regex, - std.stdio, - std.string, - std.typecons, - std.uni, - std.utf, - std.conv : to; +import std.algorithm; +import std.array; +import std.container; +import std.exception; +import std.file; +import std.getopt; +import std.json; +import std.path; +import std.process; +import std.range; +import std.regex; +import std.stdio; +import std.string; +import std.typecons; +import std.uni; +import std.utf; +import std.conv : to; #+END_SRC ** defaults shared by meta & output (generic) @@ -360,7 +359,24 @@ template spineLanguageCodes() { } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/default_paths.org b/org/default_paths.org index 3cdb909..f73a9ef 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -31,16 +31,14 @@ +/ module sisudoc.io_in.paths_source; @safe: -import - std.array, - std.file, - std.path, - std.regex, - std.stdio, - std.conv : to; -import - sisudoc.meta.defaults, - sisudoc.meta.rgx_files; +import std.array; +import std.file; +import std.path; +import std.regex; +import std.stdio; +import std.conv : to; +import sisudoc.meta.defaults; +import sisudoc.meta.rgx_files; <<template_paths_src_0>> <<template_paths_src_1>> <<template_paths_src_2>> @@ -80,8 +78,10 @@ template PodManifest() { _manifest_path = m.captures["podpath"]; } } else { - if (_opt_action.vox_gt1 || _opt_action.debug_do) { - writeln("WARNING, src is not a pod, issue with manifest_path: ", _pth); // remove? unless can distinguish pod + if (_opt_action.vox_gt_3 || _opt_action.debug_do) { + if (exists(_pth) == 0 && (_pth.isFile)) { + writeln("WARNING, src file is not .sst or .ssm (nor is it a pod directory): ", _pth); // remove? unless can distinguish pod + } } _manifest_path = ""; } @@ -98,7 +98,7 @@ template PodManifest() { _k = pod_manifest_path; } if (exists(_k)==0) { - writeln("ERROR >> Processing Skipped! Manifest not found: ", _k); + // writeln("ERROR >> Processing Skipped! Manifest not found: ", _k); _k = null; } return _k; @@ -974,13 +974,11 @@ template spinePathsPods() { +/ module sisudoc.io_out.paths_output; @safe: -import - std.array, - std.path, - std.regex, - std.stdio; -import - sisudoc.meta.rgx_files; +import std.array; +import std.path; +import std.regex; +import std.stdio; +import sisudoc.meta.rgx_files; <<template_paths_out_0>> <<template_paths_out_1>> <<template_paths_url>> @@ -995,6 +993,8 @@ import <<template_paths_sqlite_0>> <<template_paths_sqlite_1>> <<template_paths_sqlite_2>> +<<template_paths_text>> +<<template_paths_skel>> #+END_SRC ** shared out path, base directory :out: @@ -1459,7 +1459,7 @@ template spinePathsODT() { auto spinePathsODT(M)( M doc_matters, ) { - auto out_pth = spineOutPaths!()( doc_matters.output_path, doc_matters.src.language); + auto out_pth = spineOutPaths!()(doc_matters.output_path, doc_matters.src.language); string base_dir = "odf"; struct _PathsStruct { string base_pth() { // dir will contain odt document file (also debug file tree) @@ -1520,6 +1520,7 @@ template spinePathsODT() { #+END_SRC ** _latex_ :latex: +*** latex #+NAME: template_paths_latex #+BEGIN_SRC d @@ -1569,6 +1570,8 @@ template spinePathsLaTeX() { } #+END_SRC +*** latex_sty + #+NAME: template_paths_latex_sty #+BEGIN_SRC d template spinePathsLaTeXsty() { @@ -1687,7 +1690,84 @@ template spinePathsSQLite() { } #+END_SRC -* document header including copyright & license +** _text_ :text: + +#+NAME: template_paths_text +#+BEGIN_SRC d +template spinePathsText() { + import std.conv; + auto spinePathsText(M)( + M doc_matters, + ) { + auto out_pth = spineOutPaths!()(doc_matters.output_path, doc_matters.src.language); + string base_dir = "text"; + struct _PathsStruct { + string base_pth() { + return (((out_pth.output_base).chainPath(base_dir)).asNormalizedPath).array; + } + string base_filename(string fn_src) { + return fn_src.baseName.stripExtension; + } + string text_file() { + return ((base_pth.chainPath(doc_matters.src.doc_uid_out ~ ".txt")).asNormalizedPath).array; + } + string dirtop() { + return "".chainPath("").array; + } + } + return _PathsStruct(); + } +} +#+END_SRC + +** _skel_ :skel: + +#+NAME: template_paths_skel +#+BEGIN_SRC d +template spinePathsSkel() { + import std.conv; + auto spinePathsSkel(M)( + M doc_matters, + ) { + auto out_pth = spineOutPaths!()(doc_matters.output_path, doc_matters.src.language); + string base_dir = "skel"; + struct _PathsStruct { + string base_pth() { + return (((out_pth.output_base).chainPath(base_dir)).asNormalizedPath).array; + } + string base_filename(string fn_src) { + return fn_src.baseName.stripExtension; + } + string skel_file() { + return ((base_pth.chainPath(doc_matters.src.doc_uid_out ~ ".skel")).asNormalizedPath).array; + } + string dirtop() { + return "".chainPath("").array; + } + } + return _PathsStruct(); + } +} +#+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 diff --git a/org/default_regex.org b/org/default_regex.org index dc70056..1c0ca2f 100644 --- a/org/default_regex.org +++ b/org/default_regex.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -308,9 +308,9 @@ static table_col_separator_nl = ctRegex!(`[┊]$`, "mg"); #+BEGIN_SRC d /+ inline markup footnotes endnotes +/ static inline_notes_curly_gen = ctRegex!(`~\{.+?\}~`, "m"); -static inline_notes_curly = ctRegex!(`~\{\s*(.+?)\}~`, "mg"); -static inline_notes_curly_sp_asterisk = ctRegex!(`~\{[*]+\s+(.+?)\}~`, "m"); -static inline_notes_curly_sp_plus = ctRegex!(`~\{[+]+\s+(.+?)\}~`, "m"); +static inline_notes_curly = ctRegex!(`~\{\s*(.+?)\s*\}~`, "mg"); +static inline_notes_curly_sp_asterisk = ctRegex!(`~\{[*]+\s+(.+?)\s*\}~`, "m"); +static inline_notes_curly_sp_plus = ctRegex!(`~\{[+]+\s+(.+?)\s*\}~`, "m"); static note_ref = ctRegex!(`^\S+?noteref_(?P<ref>[0-9]+)`, "mg"); // {^{73.}^}#noteref_73 #+END_SRC @@ -331,8 +331,8 @@ static smid_inline_url_generic = ctRegex!(`(?:^|[}(\[ ])( static smid_inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_]\S*)`, "mg"); static smid_inline_link_naked_url = ctRegex!(`(?P<pre>^|[ (\[])(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤)\S+?)(?=[.,;:?!'"]?([ )\]]|$))`, "mg"); static smid_inline_link_markup_regular = ctRegex!(`(?P<pre>^|[ (\[])\{\s*(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg"); -static smid_inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[.,;:?!]?([ ]|$))`, "mg"); -static smid_inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg"); +static smid_inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[.,;:?!]?([ ]|$))`, "mg"); +static smid_inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg"); #+END_SRC #+BEGIN_SRC d @@ -507,7 +507,6 @@ static make_breakcolumn = ctRegex!(`break=(?P<breakcolum #+END_SRC * 2. ctRegex defaults shared by meta & output (generic) - ** meta #+NAME: prgmkup_rgx_meta @@ -545,9 +544,9 @@ static middle_dot = ctRegex!(`·`, "mg"); static br_empty_line = ctRegex!(`\n[ ]*\n`, "mg"); static br_linebreaks_newlines = ctRegex!(`[\n┘┙]`, "mg"); static br_linebreaks = ctRegex!(`[┘┙]`, "mg"); -static br_line = ctRegex!(`┘`, "mg"); -static br_line_inline = ctRegex!(`┙`, "mg"); -static br_line_spaced = ctRegex!(`┚`, "mg"); +static br_line = ctRegex!(`\s*┘\s*`, "mg"); +static br_line_inline = ctRegex!(`\s*┙\s*`, "mg"); +static br_line_spaced = ctRegex!(`\s*┚\s*`, "mg"); #+END_SRC #+BEGIN_SRC d @@ -609,6 +608,7 @@ static inline_al_delimiter_open_regular = ctRegex!(`【\s`, "m"); static inline_al_delimiter_open_symbol_star = ctRegex!(`【[*]\s`, "m"); static inline_al_delimiter_open_symbol_plus = ctRegex!(`【[+]\s`, "m"); static inline_text_and_note_al_ = ctRegex!(`(.+?(?:【[*+]*\s+.+?】|.+))`, "mg"); +static endnote_section_note = ctRegex!(`┥\s*⑆\^┨(?P<notenumber>\d+)\.┣\^┝┤(?P<link>¤?.+?)├.+`, "mg"); #+END_SRC #+BEGIN_SRC d @@ -634,6 +634,7 @@ static inline_link_hash = ctRegex!(`┥(?P<text>.+?)┝ static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>(?P<seg>[^/#├]*)#(?P<hash>.+?))├`, "mg"); static inline_link_clean = ctRegex!(`┤(?:.+?)├|[┥┝]`, "mg"); static inline_link_toc_to_backmatter = ctRegex!(`┤#(?P<link>endnotes|bibliography|bookindex|glossary|blurb)├`, "mg"); +static find_bookindex_ocn_link_and_comma = ctRegex!(`[, ]*┥.+?┝┤#?\S+?├`, "mg"); static url = ctRegex!(`https?://`, "mg"); static uri = ctRegex!(`(?:https?|git)://`, "mg"); static uri_identify_components = ctRegex!(`(?P<type>(?:https?|git)://)(?P<path>\S+?/)(?P<file>[^/]+)$`, "mg"); @@ -711,7 +712,7 @@ static src_formalised_file_path_parts = ctRegex!(`(?P<pth>(?:[/a-zA-Z0 ** _module template yaml tags -#+HEADER: :tangle "../src/sisudoc/meta/rgx_yaml_tags.d" +#+HEADER: :tangle "../src/sisudoc/meta/rgx_yaml.d" #+HEADER: :noweb yes #+BEGIN_SRC d <<doc_header_including_copyright_and_license>> @@ -799,7 +800,24 @@ static latex_clean_internal_link = ctRegex!(`^(?:#|¤\S+?#)`, "m" static latex_clean_bookindex_linebreak = ctRegex!(`\s*\\\\\\\\\s*`, "m"); #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/default_shared_snippets.org b/org/default_shared_snippets.org index 3cdcb7d..96d7e2d 100644 --- a/org/default_shared_snippets.org +++ b/org/default_shared_snippets.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -27,16 +27,14 @@ module sisudoc.io_out.html_snippet; @safe: template htmlSnippet() { - import - std.file, - std.outbuffer, - std.format, - std.uri, - std.conv : to; - import - sisudoc.io_out.rgx, - sisudoc.meta.rgx_files, - sisudoc.io_out.rgx_xhtml; + import std.file; + import std.outbuffer; + import std.format; + import std.uri; + import std.conv : to; + import sisudoc.io_out.rgx; + import sisudoc.meta.rgx_files; + import sisudoc.io_out.rgx_xhtml; auto format_html_blank_page_guide_home()( string css_style, string home_url, @@ -104,12 +102,12 @@ template Msg() { auto Msg(I)(I doc_matters) { struct Msg_ { void v()(string message) { - if (doc_matters.opt.action.vox_gt1) { + if (doc_matters.opt.action.vox_gt_2) { writeln(message); } } void vv()(string message) { - if (doc_matters.opt.action.vox_gt2) { + if (doc_matters.opt.action.vox_gt_3) { writeln(message); } } @@ -119,7 +117,24 @@ template Msg() { } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/doc-reform.org b/org/doc-reform.org index ee39909..454209f 100644 --- a/org/doc-reform.org +++ b/org/doc-reform.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+OPTIONS: H:3 num:nil toc:t \n:t ::t |:t ^:nil -:t f:t *:t diff --git a/org/in_source_files.org b/org/in_source_files.org index cdd220f..bc70794 100644 --- a/org/in_source_files.org +++ b/org/in_source_files.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -31,14 +31,12 @@ +/ module sisudoc.io_in.read_config_files; @safe: -import - std.file, - std.path; -import - sisudoc.meta, - sisudoc.io_in.paths_source, - sisudoc.meta.rgx_files, - sisudoc.meta.rgx; +import std.file; +import std.path; +import sisudoc.meta; +import sisudoc.io_in.paths_source; +import sisudoc.meta.rgx_files; +import sisudoc.meta.rgx; <<meta_config_file_hub_read_site_config>> <<meta_config_file_hub_read_document_config>> <<meta_config_file_hub_read_site_yaml>> @@ -129,7 +127,7 @@ webserv: try { if (exists(conf_file)) { if (conf_file.getLinkAttributes.attrIsFile) { - if (_opt_action.vox_gt1 || _opt_action.debug_do) { + if (_opt_action.vox_gt_2 || _opt_action.debug_do) { writeln("config file used: \"", conf_file, "\" (cli flag settings override config file's individual settings)"); } config_file_str = conf_file.readText; @@ -186,14 +184,12 @@ webserv: #+HEADER: :noweb yes #+BEGIN_SRC d static template readConfigDoc() { - import - std.file, - std.path; - import - sisudoc.meta, - sisudoc.io_in.paths_source, - sisudoc.meta.rgx_files, - sisudoc.meta.rgx; + import std.file; + import std.path; + import sisudoc.meta; + import sisudoc.io_in.paths_source; + import sisudoc.meta.rgx_files; + import sisudoc.meta.rgx; @system final auto readConfigDoc(M,E)(M _manifested, E _env) { mixin spineRgxIn; static auto rgx = RgxI(); @@ -249,14 +245,12 @@ static template readConfigDoc() { #+HEADER: :noweb yes #+BEGIN_SRC d static template configReadSiteYAML() { - import - std.file, - std.path; - import - sisudoc.meta, - sisudoc.io_in.paths_source, - sisudoc.meta.rgx_files, - sisudoc.meta.rgx; + import std.file; + import std.path; + import sisudoc.meta; + import sisudoc.io_in.paths_source; + import sisudoc.meta.rgx_files; + import sisudoc.meta.rgx; final YAMLDocument configReadSiteYAML(M,E)(M _manifested, E _env) { string _configuration = configReadInSiteYAML!()(_manifested, _env); auto _conf_file_details = configFilePaths!()(_manifested, _env); @@ -266,12 +260,10 @@ static template configReadSiteYAML() { } } static template configReadDocYAML() { - import - std.file, - std.path; - import - sisudoc.meta, - sisudoc.io_in.paths_source; + import std.file; + import std.path; + import sisudoc.meta; + import sisudoc.io_in.paths_source; final YAMLDocument configReadDocYAML(M,E)(M _manifested, E _env) { string _configuration = configReadInDocYAML!()(_manifested, _env); auto _conf_file_details = configFilePaths!()(_manifested, _env); @@ -297,15 +289,13 @@ static template configReadDocYAML() { module sisudoc.io_in.read_source_files; @safe: template spineRawMarkupContent() { - import - std.digest.sha, - std.file, - std.path; - import - sisudoc.meta, - sisudoc.io_in.paths_source, - sisudoc.meta.rgx_files, - sisudoc.meta.rgx; + import std.digest.sha; + import std.file; + import std.path; + import sisudoc.meta; + import sisudoc.io_in.paths_source; + import sisudoc.meta.rgx_files; + import sisudoc.meta.rgx; mixin spineRgxIn; static auto rgx = RgxI(); mixin spineRgxFiles; @@ -374,7 +364,7 @@ template spineRawMarkupContent() { sourcefile_body_content = _cii.contents; insert_file_list_get = _cii.insert_files.dup; images_list_get = _cii.images.dup; - } else if (_opt_action.source || _opt_action.pod) { + } else if (_opt_action.source_or_pod) { auto ins = Inserts(); ST_contents_inserts_images _cii = ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src); @@ -399,9 +389,8 @@ template spineRawMarkupContent() { } } struct MarkupRawUnit { - import - std.digest.sha, - std.file; + import std.digest.sha; + import std.file; <<meta_markup_source_raw_read_file_source_string>> <<meta_markup_source_raw_doc_header_and_content_split>> <<meta_markup_source_raw_source_line_array>> @@ -630,7 +619,7 @@ if (code_block_status == codeBlock.curly) { markup_sourcesubfile_insert_content.length ); } - if (_opt_action.source || _opt_action.pod) { + if (_opt_action.source_or_pod) { _images ~= _extract_images(markup_sourcesubfile_insert_content); } auto ins = Inserts(); @@ -646,7 +635,7 @@ if (code_block_status == codeBlock.curly) { +/ } else { contents_insert ~= line; // images to extract for image list? - if (_opt_action.source || _opt_action.pod) { + if (_opt_action.source_or_pod) { string[] _image_linelist = _extract_images(line); if (_image_linelist.length > 0) { _images ~= _image_linelist; @@ -735,7 +724,7 @@ if (code_block_status == codeBlock.curly) { fn_src_insert.to!string ); contents ~= contents_insert_st.insert_contents; - if (_opt_action.source || _opt_action.pod) { + if (_opt_action.source_or_pod) { string[] _image_linelist = _extract_images(contents_insert_st.images); if (_image_linelist.length > 0) { _images ~= _image_linelist; @@ -753,7 +742,7 @@ if (code_block_status == codeBlock.curly) { +/ } else { contents ~= line; - if (_opt_action.source || _opt_action.pod) { + if (_opt_action.source_or_pod) { string[] _image_linelist = _extract_images(line); if (_image_linelist.length > 0) { _images ~= _image_linelist; @@ -783,7 +772,24 @@ ST_contents_inserts_images ret; return ret; #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/meta_conf_make_meta.org b/org/meta_conf_make_meta.org index 00bc3d3..71b0601 100644 --- a/org/meta_conf_make_meta.org +++ b/org/meta_conf_make_meta.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :noweb yes #+PROPERTY: header-args+ :exports code -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -197,24 +197,23 @@ webserv: #+NAME: meta_defaults_imports #+BEGIN_SRC d -import - std.algorithm, - std.array, - std.container, - std.exception, - std.file, - std.getopt, - std.json, - std.path, - std.process, - std.range, - std.regex, - std.stdio, - std.string, - std.typecons, - std.uni, - std.utf, - std.conv : to; +import std.algorithm; +import std.array; +import std.container; +import std.exception; +import std.file; +import std.getopt; +import std.json; +import std.path; +import std.process; +import std.range; +import std.regex; +import std.stdio; +import std.string; +import std.typecons; +import std.uni; +import std.utf; +import std.conv : to; import sisudoc.meta.conf_make_meta_structs; #+END_SRC @@ -239,20 +238,18 @@ module sisudoc.meta.conf_make_meta_structs; #+NAME: meta_defaults_template_structs_init #+BEGIN_SRC d -import - std.exception, - std.json, - std.path, - std.regex, - std.stdio, - std.string, - std.typecons, - std.utf, - std.conv : to; -import - sisudoc.meta.defaults, - sisudoc.meta.rgx_yaml, - sisudoc.meta.rgx; +import std.exception; +import std.json; +import std.path; +import std.regex; +import std.stdio; +import std.string; +import std.typecons; +import std.utf; +import std.conv : to; +import sisudoc.meta.defaults; +import sisudoc.meta.rgx_yaml; +import sisudoc.meta.rgx; mixin spineRgxIn; static auto rgx = RgxI(); mixin spineRgxYamlTags; @@ -621,22 +618,20 @@ string check_input_markup()( module sisudoc.meta.conf_make_meta_yaml; @safe: template contentYAMLtoSpineStruct() { - import - std.algorithm, - std.array, - std.exception, - std.path, - std.regex, - std.stdio, - std.string, - std.typecons, - std.utf, - std.conv : to; - import - sisudoc.meta.conf_make_meta_structs, - sisudoc.meta.defaults, - sisudoc.meta.rgx_yaml, - sisudoc.meta.rgx; + import std.algorithm; + import std.array; + import std.exception; + import std.path; + import std.regex; + import std.stdio; + import std.string; + import std.typecons; + import std.utf; + import std.conv : to; + import sisudoc.meta.conf_make_meta_structs; + import sisudoc.meta.defaults; + import sisudoc.meta.rgx_yaml; + import sisudoc.meta.rgx; ConfComposite _struct_composite; @system ConfComposite contentYAMLtoSpineStruct(C,Y,M,O,Cfg)( C _struct_composite, @@ -1448,21 +1443,19 @@ if ("rights" in _yaml module sisudoc.meta.conf_make_meta_json; @safe: static template contentJSONtoSpineStruct() { - import - std.algorithm, - std.array, - std.exception, - std.regex, - std.stdio, - std.string, - std.typecons, - std.utf, - std.conv : to; - import - sisudoc.meta.conf_make_meta_structs, - sisudoc.meta.conf_make_meta_json, - sisudoc.meta.defaults, - sisudoc.meta.rgx; + import std.algorithm; + import std.array; + import std.exception; + import std.regex; + import std.stdio; + import std.string; + import std.typecons; + import std.utf; + import std.conv : to; + import sisudoc.meta.conf_make_meta_structs; + import sisudoc.meta.conf_make_meta_json; + import sisudoc.meta.defaults; + import sisudoc.meta.rgx; ConfComposite _struct_composite; auto contentJSONtoSpineStruct(C,J,M)(C _struct_composite, J _json, M _manifested, string _identifier) { mixin spineRgxIn; @@ -2116,9 +2109,8 @@ if ("rights" in _json.object) { #+BEGIN_SRC d template configParseYAMLreturnSpineStruct() { import dyaml; - import - sisudoc.meta.conf_make_meta_structs, - sisudoc.meta.conf_make_meta_json; + import sisudoc.meta.conf_make_meta_structs; + import sisudoc.meta.conf_make_meta_json; mixin contentYAMLtoSpineStruct; @system ConfComposite configParseYAMLreturnSpineStruct(T,M,O,Cfg)( T _document_struct, @@ -2154,21 +2146,18 @@ template configParseYAMLreturnSpineStruct() { #+NAME: doc_header_convert_to_struct #+BEGIN_SRC d template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() { - import - std.exception, - std.regex, - std.stdio, - // std.traits, - std.typecons, - std.utf, - std.conv : to; - import - dyaml; - import - sisudoc.meta.conf_make_meta_structs, - sisudoc.meta.conf_make_meta_json, - sisudoc.meta.rgx_yaml, - sisudoc.meta.rgx; + import std.exception; + import std.regex; + import std.stdio; + // import std.traits; + import std.typecons; + import std.utf; + import std.conv : to; + import dyaml; + import sisudoc.meta.conf_make_meta_structs; + import sisudoc.meta.conf_make_meta_json; + import sisudoc.meta.rgx_yaml; + import sisudoc.meta.rgx; mixin spineRgxIn; mixin contentJSONtoSpineStruct; static auto rgx = RgxI(); @@ -2196,7 +2185,24 @@ template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() { } #+END_SRC -* document header including copyright & license +* 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 @@ -2286,7 +2292,11 @@ header. ** dlang rgx example #+BEGIN_SRC d -import std.conv, std.regex, std.range, std.file, std.stdio; +import std.conv; +import std.regex; +import std.range; +import std.file; +import std.stdio; import std.string : format; void main(string[] argv) { immutable ratio = 1.5824; // UK pounds to US dollar as of this writing diff --git a/org/meta_debugs.org b/org/meta_debugs.org index b5948eb..cd22061 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -52,24 +52,22 @@ template spineDebugs() { #+NAME: debug_imports #+BEGIN_SRC d -import - sisudoc.meta.defaults, - sisudoc.meta.rgx_files; -import - std.algorithm, - std.array, - std.container, - std.exception, - std.json, - std.stdio, - std.file, - std.path, - std.range, - std.regex, - std.string, - std.typecons, - std.utf, - std.conv : to; +import sisudoc.meta.defaults; +import sisudoc.meta.rgx_files; +import std.algorithm; +import std.array; +import std.container; +import std.exception; +import std.json; +import std.stdio; +import std.file; +import std.path; +import std.range; +import std.regex; +import std.string; +import std.typecons; +import std.utf; +import std.conv : to; #+END_SRC ** initialize :report: @@ -867,7 +865,24 @@ debug(checkdoc) { } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/nix-develop-dlang-shared.org b/org/nix-develop-dlang-shared.org index 5623f63..52f2ec3 100644 --- a/org/nix-develop-dlang-shared.org +++ b/org/nix-develop-dlang-shared.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :noweb yes #+PROPERTY: header-args+ :exports code -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -17,20 +17,51 @@ * nix ** direnv +*** NOTES to update direnv in .envrc-nix + +- https://github.com/nix-community/nix-direnv + +check for latest version: + +- https://github.com/nix-community/nix-direnv/releases + +update direnv version and sha hash: +- emacs org/nix-develop-dlang-shared.org + +re-tangle file: + +- emacs org/config_env.org + updates: .envrc-nix + +update flake.lock: +- nix flake update && nix flake check && nix flake show + *** version SET #+NAME: direnv-version #+BEGIN_SRC org -<<direnv_version_3_0_6>> +<<direnv_version_3_0_7>> #+END_SRC #+NAME: direnv-hash #+BEGIN_SRC org -<<direnv_hash_3_0_6>> +<<direnv_hash_3_0_7>> #+END_SRC *** versions +**** 3.0.7 + +#+NAME: direnv_version_3_0_7 +#+BEGIN_SRC org +3.0.7 +#+END_SRC + +#+NAME: direnv_hash_3_0_7 +#+BEGIN_SRC org +sha256-bn8WANE5a91RusFmRI7kS751ApelG02nMcwRekC/qzc= +#+END_SRC + **** 3.0.6 #+NAME: direnv_version_3_0_6 @@ -81,6 +112,40 @@ sha256-XQzUAvL6pysIJnRJyR7uVpmUSZfc7LSgWQwq/4mBr1U= * dlang ** ldc +*** tags link + +- https://github.com/ldc-developers/ldc/tags + +*** NOTES to update ldc + +check for latest version: + +update ldc version and sha hash: +- emacs ./org/nix-develop-dlang-shared.org + +re-tangle files: +- emacs ./org/nixpkgs_overlays_d_related.org + updates: nix-overlays/ldc/package.nix +- emacs ./org/config_nix.org + updates: flake.nix +- emacs ./org/config_env.org + updates: .envrc-nix + +update flake.lock: +- nix flake update && nix flake check && nix flake show + +build: +- nix build ".#spine-overlay-ldc" --print-build-logs + +adjust nix overlay if required (to get started): +- git clone --depth 1 https://github.com/NixOS/nixpkgs +- find ./nixpkgs/pkgs/ -type d -name "ldc" + ./nixpkgs/pkgs/by-name/ld/ldc +- compare with overlay: + ./nix-overlays/ldc +- overlay is tangled from: + emacs ./org/nixpkgs_overlays_d_related.org + *** version SET **** version & sha256 nix composite @@ -94,24 +159,65 @@ sha256 = "<<ldc-hash>>"; #+NAME: ldc-version #+BEGIN_SRC org -<<ldc_version_1_40_0>> +<<ldc_version_1_41_0>> #+END_SRC #+NAME: ldc-hash #+BEGIN_SRC org -<<ldc_hash_1_40_0>> +<<ldc_hash_1_41_0>> #+END_SRC #+NAME: ldc-llvm-set #+BEGIN_SRC org -<<ldc_llvm_set_1_40_0>> +<<ldc_llvm_set_1_41_0>> #+END_SRC *** versions +**** 1.41 OK ✓ +***** 1.41.0 OK ✓ + + - nix-prefetch-url --unpack https://github.com/ldc-developers/ldc/archive/refs/tags/v1.41.0.tar.gz + - nix-prefetch-url --unpack https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz + +#+NAME: ldc_version_1_41_0 +#+BEGIN_SRC nix +1.41.0 +#+END_SRC + +#+NAME: ldc_hash_1_41_0 +#+BEGIN_SRC nix +sha256-6LcpY3LSFK4KgEiGrFp/LONu5Vr+/+vI04wEEpF3s+s= +#+END_SRC + +#+NAME: ldc_llvm_set_1_41_0 +#+BEGIN_SRC nix +llvm_20 +#+END_SRC + **** 1.40 OK ✓ +***** 1.40.1 OK ✓ + + - nix-prefetch-url --unpack https://github.com/ldc-developers/ldc/archive/refs/tags/v1.40.1.tar.gz + - nix-prefetch-url --unpack https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz + +#+NAME: ldc_version_1_40_1 +#+BEGIN_SRC nix +1.40.1 +#+END_SRC + +#+NAME: ldc_hash_1_40_1 +#+BEGIN_SRC nix +sha256-WdnwdH25A5oMNNY3uWG2hxnaAT+S1hNuP7LElH3uuuk= +#+END_SRC + +#+NAME: ldc_llvm_set_1_40_1 +#+BEGIN_SRC nix +llvm_19 +#+END_SRC + ***** 1.40.0 OK ✓ - - nix-prefetch-url --unpack https://github.com/ldc-developers/ldc/archive/refs/tags/v1.40.0-beta6.tar.gz + - nix-prefetch-url --unpack https://github.com/ldc-developers/ldc/archive/refs/tags/v1.40.0.tar.gz - nix-prefetch-url --unpack https://github.com/ldc-developers/ldc/releases/download/v${version}/ldc-${version}-src.tar.gz #+NAME: ldc_version_1_40_0 @@ -222,24 +328,68 @@ sha256-/bs3bwgkLZF5IqaiKnc5gCF/r6MQBG/F1kWUkK8j2s0= #+END_SRC ** dmd +*** tags link + +- https://github.com/dlang/dmd/tags + *** version SET #+NAME: dmd-version #+BEGIN_SRC org -<<dmd_version_2_109_1>> +<<dmd_version_2_111_0>> #+END_SRC #+NAME: dmd-hash #+BEGIN_SRC org -<<dmd_hash_2_109_1>> +<<dmd_hash_2_111_0>> #+END_SRC #+NAME: phobos-hash #+BEGIN_SRC org -<<phobos_hash_2_109_1>> +<<phobos_hash_2_111_0>> #+END_SRC *** versions +**** 2.111.0 OK ✓ + +- nix-prefetch-url --unpack https://github.com/dlang/dmd/archive/refs/tags/v2.111.0.tar.gz +- nix-prefetch-url --unpack https://github.com/dlang/phobos/archive/refs/tags/v2.111.0.tar.gz + +#+NAME: dmd_version_2_111_0 +#+BEGIN_SRC nix +2.111.0 +#+END_SRC + +#+NAME: phobos_hash_2_111_0 +#+BEGIN_SRC nix +sha256-9jySZbODoL8sULhYKj/l4+c/uiG5xY2dO240k9XQtPk= +#+END_SRC + +#+NAME: dmd_hash_2_111_0 +#+BEGIN_SRC nix +sha256-2bjsGa9nTny818dLRV6LKkes+Ycq8W+PFjwhGVrD5TM= +#+END_SRC + +**** 2.110.0 OK ✓ + +- nix-prefetch-url --unpack https://github.com/dlang/dmd/archive/refs/tags/v2.110.0.tar.gz +- nix-prefetch-url --unpack https://github.com/dlang/phobos/archive/refs/tags/v2.110.0.tar.gz + +#+NAME: dmd_version_2_110_0 +#+BEGIN_SRC nix +2.110.0 +#+END_SRC + +#+NAME: phobos_hash_2_110_0 +#+BEGIN_SRC nix +sha256-CmJpcHM+sIsaYBlpALCFoQFG+93s8gUyWmM0tYqjXkk= +#+END_SRC + +#+NAME: dmd_hash_2_110_0 +#+BEGIN_SRC nix +sha256-icXp9xWF2AI2gp7z/lQFAChmXfQePe9b5pbpQ9Mn19Y= +#+END_SRC + **** 2.109.1 OK ✓ - nix-prefetch-url --unpack https://github.com/dlang/dmd/archive/refs/tags/v2.109.1.tar.gz @@ -356,20 +506,54 @@ sha256-yRL9ub3u4mREG9PVxBvgQ/LDXD57RadPTZ2h08qyh/s= #+END_SRC ** dub +*** tags link + +- https://github.com/dlang/dub/releases + *** version SET #+NAME: dub-version #+HEADER: :noweb yes #+BEGIN_SRC org -<<dub_version_1_38_1>> +<<dub_version_1_40_0>> #+END_SRC #+NAME: dub-hash #+BEGIN_SRC org -<<dub_hash_1_38_1>> +<<dub_hash_1_40_0>> #+END_SRC *** versions +**** 1.40 OK ✓ +***** 1.40.0 + +- nix-prefetch-url --unpack https://github.com/dlang/dub/archive/refs/tags/v1.40.0.tar.gz + +#+NAME: dub_version_1_40_0 +#+BEGIN_SRC nix +1.40.0 +#+END_SRC + +#+NAME: dub_hash_1_40_0 +#+BEGIN_SRC nix +sha256-OirchEKf66gis70gCSTOYcrHLyHhCsyt/rTEGT83Vcc= +#+END_SRC + +**** 1.39 OK ✓ +***** 1.39.0 + +- nix-prefetch-url --unpack https://github.com/dlang/dub/archive/refs/tags/v1.39.0.tar.gz + +#+NAME: dub_version_1_39_0 +#+BEGIN_SRC nix +1.39.0 +#+END_SRC + +#+NAME: dub_hash_1_39_0 +#+BEGIN_SRC nix +sha256-73b15A9+hClD6IbuxTy9QZKpTKjUFYBuqGOclUyhrnM= +#+END_SRC + **** 1.38 OK ✓ ***** 1.38.1 @@ -482,66 +666,71 @@ sha256-5pW3Fu3PQ1ZLJnsuh7fPpEBNbVQgGfFyiuMrAVOJKQA= #+NAME: dtools-version #+BEGIN_SRC org -<<dtools_version_2_103_1>> +<<dtools_version_2_110_0>> #+END_SRC #+NAME: dtools-hash #+BEGIN_SRC org -<<dtools_hash_2_103_1>> +<<dtools_hash_2_110_0>> #+END_SRC *** versions -**** 2.103.1 OK ✓ +**** 2.110.0 OK ✓ -- https://github.com/dlang/tools/releases/tag/v2.103.1 +- https://github.com/dlang/tools/releases/tag/v2.110.0 -#+NAME: dtools_version_2_103_1 +#+NAME: dtools_version_2_110_0 #+BEGIN_SRC nix -2.103.1 +2.110.0 #+END_SRC -#+NAME: dtools_hash_2_103_1 +#+NAME: dtools_hash_2_110_0 #+BEGIN_SRC nix -sha256-XM4gUxcarQCOBR8W/o0iWAI54PyLDkH6CsDce22Cnu4= +sha256-xMEHnrstL5hAkhp8+/z1I2KZWZ7eztWZnUGLTKCfbBI= #+END_SRC -**** 2.102.2 +**** 2.109.1 OK ✓ -- https://github.com/dlang/tools/releases/tag/v2.102.2 +- https://github.com/dlang/tools/releases/tag/v2.109.1 -#+NAME: dtools_version_2_102_2 +#+NAME: dtools_version_2_109_1 #+BEGIN_SRC nix -2.102.2 +2.109.1 #+END_SRC -#+NAME: dtools_hash_2_102_2 +#+NAME: dtools_hash_2_109_1 #+BEGIN_SRC nix -sha256-XM4gUxcarQCOBR8W/o0iWAI54PyLDkH6CsDce22Cnu4= +sha256-Pfj8Kwf5AlcrHhLs5A/0vIFWLZaNR3ro+esbs7oWN9I= #+END_SRC -**** 2.095.1 +**** 2.104.1 OK ✓ -- https://github.com/dlang/tools/releases/tag/v2.095.1 +- https://github.com/dlang/tools/releases/tag/v2.104.2 -#+NAME: dtools_version_2_095_1 +#+NAME: dtools_version_2_104_2 #+BEGIN_SRC nix -2.095.1 +2.104.2 #+END_SRC -#+NAME: dtools_hash_2_095_1 +#+NAME: dtools_hash_2_104_2 #+BEGIN_SRC nix -sha256:0rdfk3mh3fjrb0h8pr8skwlq6ac9hdl1fkrkdl7n1fa2806b740b +sha256-Pfj8Kwf5AlcrHhLs5A/0vIFWLZaNR3ro+esbs7oWN9I= #+END_SRC ** sha256 blank_hash #+NAME: blank_hash -#+BEGIN_SRC nix +#+BEGIN_SRC org +<<sha256-blank>> +#+END_SRC + +#+NAME: sha256-blank +#+BEGIN_SRC org sha256-0000000000000000000000000000000000000000000= #+END_SRC #+NAME: assumed_hash -#+BEGIN_SRC nix +#+BEGIN_SRC org sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= #+END_SRC diff --git a/org/nixpkgs_overlays_d_related.org b/org/nixpkgs_overlays_d_related.org index 665c448..b8a0144 100644 --- a/org/nixpkgs_overlays_d_related.org +++ b/org/nixpkgs_overlays_d_related.org @@ -10,7 +10,7 @@ #+STARTUP: show3levels hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -291,12 +291,6 @@ use flake . #use flake .#default #+END_SRC -#+BEGIN_SRC shell -- https://github.com/nix-community/nix-direnv -NixDirEnvSHA="sha256-0000000000000000000000000000000000000000000=" -direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc -#+END_SRC - ** .nix *** flake.nix @@ -356,32 +350,34 @@ direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${Nix inherit shell; inherit devEnv; packages = [ - gnumake ldc dub dtools + gnumake ]; inherit shellHook; }; dsh-overlay-ldc-dub = mkShell { - name = "overlay - ldc-<<ldc_version>> - dub-<<dub_version>>"; + name = "overlay - ldc-<<ldc_version>> - dub-<<dub_version>> - dtools-<<dtools_version>>"; inherit shell; inherit devEnv; packages = [ - gnumake ldc dub + dtools + gnumake ]; inherit shellHook; }; dsh-overlay-dmd-dub = mkShell { - name = "overlay - dmd-<<dmd_version>> - dub-<<dub_version>>"; + name = "overlay - dmd-<<dmd_version>> - dub-<<dub_version>> - dtools-<<dtools_version>>"; inherit shell; inherit devEnv; packages = [ - gnumake dmd dub + dtools + gnumake ]; inherit shellHook; }; @@ -390,11 +386,12 @@ direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${Nix inherit shell; inherit devEnv; packages = [ - gnumake ldc gtkd tilix dub + dtools + gnumake ]; inherit shellHook; }; @@ -403,9 +400,10 @@ direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${Nix # inherit shell; # inherit devEnv; # packages = [ - # gnumake # gdc # dub + # dtools + # gnumake # ]; # inherit shellHook; #}; @@ -416,6 +414,7 @@ direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${Nix packages = with pkgs-nix; [ ldc dub + dtools gnumake ]; inherit shellHook; @@ -427,6 +426,7 @@ direnv fetchurl https://raw.githubusercontent.com/nix-community/nix-direnv/${Nix packages = with pkgs-nix; [ dmd dub + dtools gnumake ]; inherit shellHook; @@ -503,45 +503,43 @@ pkgs.callPackage ./shell.nix {} - version in nixpkgs: - https://search.nixos.org/packages?channel=unstable&show=ldc&from=0&size=100&sort=relevance&type=packages&query=ldc -**** notes - -- OK ldc 1.32.2 tested - -*** overlays -**** default.nix OK ✓ +*** overlays OK ✓ +**** default.nix #+HEADER: :tangle "../nix-overlays/ldc/default.nix" #+BEGIN_SRC nix import ./package.nix #+END_SRC -**** package.nix OK ✓ (unaltered) +**** package.nix OK ✓ #+HEADER: :tangle "../nix-overlays/ldc/package.nix" #+BEGIN_SRC nix -{ lib -, stdenv -, fetchFromGitHub -, cmake -, ninja -, <<ldc_llvm_set>> -, curl -, tzdata -, lit -, gdb -, unzip -, darwin -, callPackage -, makeWrapper -, runCommand -, writeText -, targetPackages - -, ldcBootstrap ? callPackage ./bootstrap.nix { } +{ + lib, + stdenv, + fetchFromGitHub, + fetchpatch, + callPackage, + makeWrapper, + removeReferencesTo, + runCommand, + writeText, + targetPackages, + cmake, + ninja, + <<ldc_llvm_set>>, + curl, + tzdata, + lit, + gdb, + unzip, + + ldcBootstrap ? callPackage ./bootstrap.nix { }, }: let - pathConfig = runCommand "ldc-lib-paths" {} '' + pathConfig = runCommand "ldc-lib-paths" { } '' mkdir $out echo ${tzdata}/share/zoneinfo/ > $out/TZDatabaseDirFile echo ${curl.out}/lib/libcurl${stdenv.hostPlatform.extensions.sharedLibrary} > $out/LibcurlPathFile @@ -584,8 +582,6 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ cmake ldcBootstrap lit lit.python <<ldc_llvm_set>>.dev makeWrapper ninja unzip - ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ - darwin.apple_sdk.frameworks.Foundation ] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [ # https://github.com/NixOS/nixpkgs/pull/36378#issuecomment-385034818 gdb @@ -627,8 +623,7 @@ stdenv.mkDerivation (finalAttrs: { ''; # https://github.com/ldc-developers/ldc/issues/2497#issuecomment-459633746 - additionalExceptions = lib.optionalString stdenv.hostPlatform.isDarwin - "|druntime-test-shared"; + additionalExceptions = lib.optionalString stdenv.hostPlatform.isDarwin "|druntime-test-shared"; checkPhase = '' # Build default lib test runners @@ -656,6 +651,12 @@ stdenv.mkDerivation (finalAttrs: { --set-default CC ${targetPackages.stdenv.cc}/bin/cc ''; + preFixup = '' + find $out/bin -type f -exec ${removeReferencesTo}/bin/remove-references-to -t ${ldcBootstrap} '{}' + + ''; + + disallowedReferences = [ ldcBootstrap ]; + meta = with lib; { description = "LLVM-based D compiler"; homepage = "https://github.com/ldc-developers/ldc"; @@ -668,34 +669,35 @@ stdenv.mkDerivation (finalAttrs: { }; passthru.ldcBootstrap = ldcBootstrap; - passthru.tests = let - ldc = finalAttrs.finalPackage; - helloWorld = stdenv.mkDerivation (finalAttrs: { - name = "ldc-hello-world"; - src = writeText "hello_world.d" '' - module hello_world; - import std.stdio; - void main() { - writeln("Hello, world!"); - } - ''; - dontUnpack = true; - buildInputs = [ ldc ]; - dFlags = []; - buildPhase = '' - ldc2 ${lib.escapeShellArgs finalAttrs.dFlags} -of=test $src - ''; - installPhase = '' - mkdir -p $out/bin - mv test $out/bin - ''; - }); - in { - # Without -shared, built binaries should not contain - # references to the compiler binaries. - no-references-to-compiler = helloWorld.overrideAttrs { - disallowedReferences = [ ldc ]; - dFlags = ["-g"]; + passthru.tests = + let + ldc = finalAttrs.finalPackage; + helloWorld = stdenv.mkDerivation (finalAttrs: { + name = "ldc-hello-world"; + src = writeText "hello_world.d" '' + module hello_world; + import std.stdio; + void main() { + writeln("Hello, world!"); + } + ''; + dontUnpack = true; + buildInputs = [ ldc ]; + dFlags = [ ]; + buildPhase = '' + ldc2 ${lib.escapeShellArgs finalAttrs.dFlags} -of=test $src + ''; + installPhase = '' + mkdir -p $out/bin + mv test $out/bin + ''; + }); + in { + # Without -shared, built binaries should not contain + # references to the compiler binaries. + no-references-to-compiler = helloWorld.overrideAttrs { + disallowedReferences = [ ldc ]; + dFlags = ["-g"]; }; }; }) @@ -707,13 +709,22 @@ stdenv.mkDerivation (finalAttrs: { #+HEADER: :tangle "../nix-overlays/ldc/bootstrap.nix" #+BEGIN_SRC nix -{ lib, stdenv, fetchurl, curl, tzdata, autoPatchelfHook, fixDarwinDylibNames, libxml2 }: +{ + lib, + stdenv, + fetchurl, + curl, + tzdata, + autoPatchelfHook, + fixDarwinDylibNames, + libxml2, +}: let inherit (stdenv) hostPlatform; OS = if hostPlatform.isDarwin then "osx" else hostPlatform.parsed.kernel.name; ARCH = if hostPlatform.isDarwin && hostPlatform.isAarch64 then "arm64" else hostPlatform.parsed.cpu.name; - <<ldc_bootstrap_1-25-0_hashes>> + <<ldc_bootstrap_1-41-0_hashes>> in stdenv.mkDerivation { pname = "ldc-bootstrap"; inherit version; @@ -753,17 +764,17 @@ in stdenv.mkDerivation { #+END_SRC ***** bootstrap.nix version SELECT -****** bootstrap.nix ldc2-1.25.0 +****** bootstrap.nix ldc2-1.41.0 -#+NAME: ldc_bootstrap_1-25-0_hashes +#+NAME: ldc_bootstrap_1-41-0_hashes #+BEGIN_SRC nix -version = "1.25.0"; +version = "1.41.0"; hashes = { - # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.25.0/ldc2-1.25.0-osx-x86_64.tar.xz` etc.. - osx-x86_64 = "sha256-6iKnbS+oalLKmyS8qYD/wS21b7+O+VgsWG2iT4PrWPU="; - linux-x86_64 = "sha256-sfg47RdlsIpryc3iZvE17OtLweh3Zw6DeuNJYgpuH+o="; - linux-aarch64 = "sha256-UDZ43x4flSo+SfsPeE8juZO2Wtk2ZzwySk0ADHnvJBI="; - osx-arm64 = "sha256-O/x0vy0wwQFaDc4uWSeMhx+chJKqbQb6e5QNYf+7DCw="; + # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.41.0/ldc2-1.41.0-osx-x86_64.tar.xz` etc.. + osx-x86_64 = "sha256-W8/0i2PFakXbqs2wxb3cjqa+htSgx7LHyDGOBH9yEYE="; + linux-x86_64 = "sha256-SkOUV/D+WeadAv1rV1Sfw8h60PVa2fueQlB7b44yfI8="; + linux-aarch64 = "sha256-HEuVChPVM3ntT1ZDZsJ+xW1iYeIWhogNcMdIaz6Me6g="; + osx-arm64 = "sha256-FXJnBC8QsEchBhkxSqcZtPC/iHYB6TscY0qh7LPFRuQ="; }; #+END_SRC @@ -781,6 +792,20 @@ hashes = { }; #+END_SRC +****** bootstrap.nix ldc2-1.25.0 + +#+NAME: ldc_bootstrap_1-25-0_hashes +#+BEGIN_SRC nix +version = "1.25.0"; +hashes = { + # Get these from `nix store prefetch-file https://github.com/ldc-developers/ldc/releases/download/v1.25.0/ldc2-1.25.0-osx-x86_64.tar.xz` etc.. + osx-x86_64 = "sha256-6iKnbS+oalLKmyS8qYD/wS21b7+O+VgsWG2iT4PrWPU="; + linux-x86_64 = "sha256-sfg47RdlsIpryc3iZvE17OtLweh3Zw6DeuNJYgpuH+o="; + linux-aarch64 = "sha256-UDZ43x4flSo+SfsPeE8juZO2Wtk2ZzwySk0ADHnvJBI="; + osx-arm64 = "sha256-O/x0vy0wwQFaDc4uWSeMhx+chJKqbQb6e5QNYf+7DCw="; +}; +#+END_SRC + ** dmd OK ✓ *** info **** links @@ -795,18 +820,19 @@ hashes = { - version in nixpkgs: - https://search.nixos.org/packages?channel=unstable&show=dmd&from=0&size=100&sort=relevance&type=packages&query=dmd -**** notes KO ✗ - -- dmd nixpkg modified and appears to build ok - -- ISSUES dmd on nixos FAILS to build (my working projects), appears not to find parts of itself - *** overlays **** default.nix -***** default.nix >=2.108.0) #+HEADER: :tangle "../nix-overlays/dmd/default.nix" #+BEGIN_SRC nix +import ./package.nix +#+END_SRC + +**** package.nix OK ✓ +***** package.nix >=2.108.0) + +#+HEADER: :tangle "../nix-overlays/dmd/package.nix" +#+BEGIN_SRC nix import ./generic.nix { version = "<<dmd_version>>"; dmdHash = "<<dmd_hash>>"; @@ -814,10 +840,9 @@ import ./generic.nix { } #+END_SRC -***** default.nix < 2.108.0) - +***** package.nix < 2.108.0) -#+HEADER: :tangle-NO "../nix-overlays/dmd/default.nix" +#+HEADER: :tangle-NO "../nix-overlays/dmd/package.nix" #+BEGIN_SRC nix import ./generic.nix { version = "<<dmd_version>>"; @@ -830,31 +855,33 @@ import ./generic.nix { #+HEADER: :tangle "../nix-overlays/dmd/generic.nix" #+BEGIN_SRC nix -{ version -, dmdHash -, phobosHash +{ + version, + dmdHash, + phobosHash, }: -{ stdenv -, lib -, fetchFromGitHub -, removeReferencesTo -, makeWrapper -, which -, writeTextFile -, curl -, tzdata -, gdb -#, Foundation -, callPackage -, targetPackages -, fetchpatch -, bash -, installShellFiles -, git -, unzip -, dmdBootstrap ? callPackage ./bootstrap.nix { } -, dmdBin ? "${dmdBootstrap}/bin" +{ + stdenv, + lib, + fetchFromGitHub, + removeReferencesTo, + makeWrapper, + which, + writeTextFile, + curl, + tzdata, + gdb, + # Foundation, + callPackage, + targetPackages, + fetchpatch, + bash, + installShellFiles, + git, + unzip, + dmdBootstrap ? callPackage ./bootstrap.nix { }, + dmdBin ? "${dmdBootstrap}/bin", }: let @@ -868,11 +895,8 @@ let }; bits = builtins.toString stdenv.hostPlatform.parsed.cpu.bits; - osname = - if stdenv.hostPlatform.isDarwin then - "osx" - else - stdenv.hostPlatform.parsed.kernel.name; + osname = if stdenv.hostPlatform.isDarwin then "osx" + else stdenv.hostPlatform.parsed.kernel.name; pathToDmd = "\${NIX_BUILD_TOP}/dmd/generated/${osname}/release/${bits}/dmd"; in @@ -929,7 +953,9 @@ stdenv.mkDerivation (finalAttrs: { rm dmd/compiler/test/runnable/gdb4149.d rm dmd/compiler/test/runnable/gdb4181.d rm dmd/compiler/test/compilable/ddocYear.d - rm dmd/compiler/test/fail_compilation/needspkgmod.d + rm dmd/compiler/test/compilable/sarif_success_test.d + rm dmd/compiler/test/fail_compilation/sarif_test.d + rm dmd/compiler/test/fail_compilation/sarifmultiple_test.d # Disable tests that rely on objdump whitespace until fixed upstream: # https://issues.dlang.org/show_bug.cgi?id=23317 @@ -941,9 +967,9 @@ stdenv.mkDerivation (finalAttrs: { substituteInPlace dmd/compiler/test/dshell/test6952.d --replace-fail "/usr/bin/env bash" "${bash}/bin/bash" '' + lib.optionalString stdenv.hostPlatform.isLinux '' substituteInPlace phobos/std/socket.d --replace-fail "assert(ih.addrList[0] == 0x7F_00_00_01);" "" - '' + lib.optionalString stdenv.hostPlatform.isDarwin '' - substituteInPlace phobos/std/socket.d --replace-fail "foreach (name; names)" "names = []; foreach (name; names)" - ''; + ''; # + lib.optionalString stdenv.hostPlatform.isDarwin '' + # substituteInPlace phobos/std/socket.d --replace-fail "foreach (name; names)" "names = []; foreach (name; names)" + #''; nativeBuildInputs = [ makeWrapper @@ -1173,37 +1199,27 @@ stdenv.mkDerivation { - version in nixpkgs: - https://search.nixos.org/packages?channel=unstable&show=dub&from=0&size=100&sort=relevance&type=packages&query=dub -**** notes - -- OK dub == current OK ✓ - -- NOTES for dub 1.33.0 >= 1.31.0 KO ✗ - - dub builds test tilix which calls in gtkd - - ISSUES dub FAILS to build project from local disk that has built without issue - since dub v1.23.0 - - BROKEN breaks on subproject ends up in nix: Error /homeless-shelter: - Permission denied - -- OK dub == 1.30.0 OK ✓ - *** overlays -**** default.nix OK ✓ +**** default.nix #+HEADER: :tangle "../nix-overlays/dub/default.nix" #+BEGIN_SRC nix import ./package.nix #+END_SRC +**** package.nix OK ✓ + #+HEADER: :tangle "../nix-overlays/dub/package.nix" #+BEGIN_SRC nix -{ lib -, stdenv -, fetchFromGitHub -, curl -, <<dcompiler>> -, dcompiler ? <<dcompiler>> -, libevent -, rsync +{ + lib, + stdenv, + fetchFromGitHub, + curl, + <<dcompiler>>, + dcompiler ? <<dcompiler>>, + libevent, + rsync, }: assert dcompiler != null; @@ -1267,6 +1283,7 @@ stdenv.mkDerivation (finalAttrs: { rm -rf test/pr2642-cache-db # added to build v1.34.0 rm -rf test/pr2644-describe-artifact-path # added to build v1.36.0 rm -rf test/pr2647-build-deep # added to build v1.36.0 + rm -rf test/issue2698-cimportpaths-broken-with-dmd-ldc # added to build v1.40.0 ./test/run-unittest.sh runHook postCheck @@ -1289,7 +1306,7 @@ stdenv.mkDerivation (finalAttrs: { }) #+END_SRC -*** dcompiler SET +*** dcompiler #+NAME: dcompiler #+BEGIN_SRC nix @@ -1323,62 +1340,188 @@ dmd #+HEADER: :tangle "../nix-overlays/dtools/default.nix" #+BEGIN_SRC nix -{ stdenv, lib, fetchFromGitHub, fetchpatch, ldc, curl, gnumake42 }: +import ./package.nix +#+END_SRC + +**** package.nix -stdenv.mkDerivation rec { +#+HEADER: :tangle "../nix-overlays/dtools/package.nix" +#+BEGIN_SRC nix +{ + lib, + stdenv, + fetchFromGitHub, + ldc, + curl, +}: + +stdenv.mkDerivation (finalAttrs: { pname = "dtools"; version = "<<dtools_version>>"; src = fetchFromGitHub { owner = "dlang"; repo = "tools"; - rev = "v${version}"; - sha256 = "<<dtools_hash>>"; + rev = "v${finalAttrs.version}"; + hash = "<<dtools_hash>>"; name = "dtools"; }; patches = [ - (fetchpatch { - # part of https://github.com/dlang/tools/pull/441 - url = "https://github.com/dlang/tools/commit/6c6a042d1b08e3ec1790bd07a7f69424625ee866.patch"; # Fix LDC arm64 build - sha256 = "sha256-x6EclTYN1Y5FG57KLhbBK0BZicSYcZoWO7MTVcP4T18="; - }) + # Disable failing tests + ./disabled-tests.diff + # Fix LDC arm64 build + ./fix-ldc-arm64.diff ]; - nativeBuildInputs = [ ldc gnumake42 ]; # fails with make 4.4 + nativeBuildInputs = [ ldc ]; buildInputs = [ curl ]; - makeCmd = '' - make -f posix.mak all DMD_DIR=dmd DMD=${ldc.out}/bin/ldmd2 CC=${stdenv.cc}/bin/cc - ''; + makeFlags = [ + "CC=${stdenv.cc}/bin/cc" + "DMD=${ldc.out}/bin/ldmd2" + "INSTALL_DIR=$(out)" + ]; - buildPhase = '' - $makeCmd - ''; + enableParallelBuilding = true; doCheck = true; - - checkPhase = '' - $makeCmd test_rdmd - ''; - - installPhase = '' - $makeCmd INSTALL_DIR=$out install - ''; + checkTarget = "test_rdmd"; meta = with lib; { - description = "Ancillary tools for the D programming language compiler"; + description = "Ancillary tools for the D programming language"; homepage = "https://github.com/dlang/tools"; - license = lib.licenses.boost; - maintainers = with maintainers; [ ThomasMader ]; - platforms = lib.platforms.unix; + license = licenses.boost; + maintainers = with maintainers; [ jtbx ]; + platforms = platforms.unix; }; -} +}) +#+END_SRC + +#+HEADER: :tangle "../nix-overlays/dtools/disabled-tests.diff" +#+BEGIN_SRC diff +--- a/rdmd_test.d ++++ b/rdmd_test.d +@@ -616,7 +616,7 @@ void runTests(string rdmdApp, string compiler, string model) + enforce(res.status == 1, res.output); + } + +- version (Posix) ++ version (none) + { + import std.conv : to; + auto makeVersion = execute(["make", "--version"]).output.splitLines()[0]; +#+END_SRC + +#+HEADER: :tangle "../nix-overlays/dtools/fix-ldc-arm64.diff" +#+BEGIN_SRC diff +Adapted from https://github.com/dlang/tools/commit/6c6a042d1b08e3ec1790bd07a7f69424625ee866.patch +--- /dev/null ++++ b/osmodel.mak +@@ -0,0 +1,75 @@ ++# osmodel.mak ++# ++# Detects and sets the macros: ++# ++# OS = one of {osx,linux,freebsd,openbsd,netbsd,dragonflybsd,solaris} ++# MODEL = one of { 32, 64 } ++# MODEL_FLAG = one of { -m32, -m64 } ++# ARCH = one of { x86, x86_64, aarch64 } ++# ++# Note: ++# Keep this file in sync between druntime, phobos, and dmd repositories! ++# Source: https://github.com/dlang/dmd/blob/master/src/osmodel.mak ++ ++ ++ifeq (,$(OS)) ++ uname_S:=$(shell uname -s) ++ ifeq (Darwin,$(uname_S)) ++ OS:=osx ++ endif ++ ifeq (Linux,$(uname_S)) ++ OS:=linux ++ endif ++ ifeq (FreeBSD,$(uname_S)) ++ OS:=freebsd ++ endif ++ ifeq (OpenBSD,$(uname_S)) ++ OS:=openbsd ++ endif ++ ifeq (NetBSD,$(uname_S)) ++ OS:=netbsd ++ endif ++ ifeq (DragonFly,$(uname_S)) ++ OS:=dragonflybsd ++ endif ++ ifeq (Solaris,$(uname_S)) ++ OS:=solaris ++ endif ++ ifeq (SunOS,$(uname_S)) ++ OS:=solaris ++ endif ++ ifeq (,$(OS)) ++ $(error Unrecognized or unsupported OS for uname: $(uname_S)) ++ endif ++endif ++ ++# When running make from XCode it may set environment var OS=MACOS. ++# Adjust it here: ++ifeq (MACOS,$(OS)) ++ OS:=osx ++endif ++ ++ifeq (,$(MODEL)) ++ ifeq ($(OS), solaris) ++ uname_M:=$(shell isainfo -n) ++ else ++ uname_M:=$(shell uname -m) ++ endif ++ ifneq (,$(findstring $(uname_M),x86_64 amd64)) ++ MODEL:=64 ++ ARCH:=x86_64 ++ endif ++ ifneq (,$(findstring $(uname_M),aarch64 arm64)) ++ MODEL:=64 ++ ARCH:=aarch64 ++ endif ++ ifneq (,$(findstring $(uname_M),i386 i586 i686)) ++ MODEL:=32 ++ ARCH:=x86 ++ endif ++ ifeq (,$(MODEL)) ++ $(error Cannot figure 32/64 model and arch from uname -m: $(uname_M)) ++ endif ++endif ++ ++MODEL_FLAG:=-m$(MODEL) +--- a/Makefile ++++ b/Makefile +@@ -9,9 +9,8 @@ DUB=dub + WITH_DOC = no + DOC = ../dlang.org + +-# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile from dmd +-$(shell [ ! -d $(DMD_DIR) ] && git clone --depth=1 https://github.com/dlang/dmd $(DMD_DIR)) +-include $(DMD_DIR)/compiler/src/osmodel.mak ++# Load operating system $(OS) (e.g. linux, osx, ...) and $(MODEL) (e.g. 32, 64) detection Makefile ++include osmodel.mak + + ifeq (windows,$(OS)) + DOTEXE:=.exe +@@ -30,7 +29,7 @@ DFLAGS = $(MODEL_FLAG) $(if $(findstring windows,$(OS)),,-fPIC) -preview=dip1000 + DFLAGS += $(WARNINGS) + + # Default DUB flags (DUB uses a different architecture format) +-DUBFLAGS = --arch=$(subst 32,x86,$(subst 64,x86_64,$(MODEL))) ++DUBFLAGS = --arch=$(ARCH) + + TOOLS = \ + $(ROOT)/catdoc$(DOTEXE) \ #+END_SRC -** versions SET +** versions GET *** direnv -***** select version SET OK ✓ +***** select version #+NAME: direnv_version #+HEADER: :noweb yes @@ -1399,7 +1542,7 @@ stdenv.mkDerivation rec { <<./nix-develop-dlang-shared.org:ldc-version-info()>> #+END_SRC -***** select version SET OK ✓ +***** selected version #+NAME: ldc_version #+HEADER: :noweb yes @@ -1418,6 +1561,7 @@ stdenv.mkDerivation rec { #+END_SRC *** dmd +**** selected version #+NAME: dmd_version #+HEADER: :noweb yes @@ -1436,6 +1580,7 @@ stdenv.mkDerivation rec { #+END_SRC *** dub +**** selected version #+NAME: dub_version #+HEADER: :noweb yes @@ -1449,6 +1594,7 @@ stdenv.mkDerivation rec { #+END_SRC *** dtools +**** selected version #+NAME: dtools_version #+HEADER: :noweb yes @@ -1461,4 +1607,16 @@ stdenv.mkDerivation rec { <<./nix-develop-dlang-shared.org:dtools-hash()>> #+END_SRC +** sha256 blank_hash + +#+NAME: sha256-blank +#+BEGIN_SRC emacs-lisp +<<./nix-develop-dlang-shared.org:sha256-blank()>> +#+END_SRC + +#+NAME: blank_hash +#+BEGIN_SRC emacs-lisp +<<./nix-develop-dlang-shared.org:sha256-blank()>> +#+END_SRC + * __END__ diff --git a/org/ocda.org b/org/ocda.org index 148edf8..ee24570 100644 --- a/org/ocda.org +++ b/org/ocda.org @@ -1,6 +1,7 @@ -*- mode: org -*- #+TITLE: sisudoc spine (doc_reform) object-centric document abstraction #+DESCRIPTION: documents - structuring, publishing in multiple formats & search +#+SUMMARY: process markup document, create document abstraction #+FILETAGS: :spine:abstraction: #+AUTHOR: Ralph Amissah #+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] @@ -9,7 +10,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :noweb yes #+PROPERTY: header-args+ :exports code -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -18,7 +19,8 @@ - [[./doc-reform.org][doc-reform.org]] [[./][org/]] * (Object-Centric) Document Abstraction -Process markup document, create document abstraction. + +- Process markup document, create document abstraction ** _module template_ :module:metadoc_from_src: @@ -51,25 +53,23 @@ template docAbstraction() { #+HEADER: :noweb yes #+BEGIN_SRC d // ↓ abstraction imports -import - std.algorithm, - std.container, - std.digest.sha, - std.file, - std.json, - std.path; -import - sisudoc.meta, - sisudoc.meta.defaults, - sisudoc.meta.rgx, - sisudoc.meta.metadoc_object_setter, - sisudoc.meta.rgx; +import std.algorithm; +import std.container; +import std.digest.sha; +import std.file; +import std.json; +import std.path; +import sisudoc.meta; +import sisudoc.meta.defaults; +import sisudoc.meta.rgx; +import sisudoc.meta.metadoc_object_setter; +import sisudoc.meta.rgx; public import sisudoc.meta.metadoc_from_src_functions; mixin docAbstractionFunctions; #+END_SRC ** docAbstraction -*** abstraction summary +*** _toc_ abstraction summary #+NAME: docAbstraction #+HEADER: :noweb yes @@ -219,7 +219,7 @@ int cnt1 = 1; int cnt2 = 1; int cnt3 = 1; // abstraction init ↑ #+END_SRC -*** abstraction init substitutions +*** debug abstraction init substitutions #+NAME: docAbstractionInitSubstitutionsDebug #+HEADER: :noweb yes @@ -231,8 +231,8 @@ debug (substitutions) { } if (conf_make_meta.make.substitute) { foreach(substitution_pair; conf_make_meta.make.substitute) { - writeln("regex to match: ", substitution_pair[Substitute.match]); - writeln("substitution to make: ", substitution_pair[Substitute.markup]); + writeln("regex to match: ", substitution_pair[Substitute.match]); + writeln("substitution to make: ", substitution_pair[Substitute.markup]); } } if (conf_make_meta.make.bold) { @@ -250,7 +250,7 @@ debug (substitutions) { } #+END_SRC -*** loop source by line (large block) +*** _loop_ source by line (large block) #+NAME: docAbstractionMainLoopSrcByLine #+HEADER: :noweb yes @@ -796,7 +796,7 @@ _loopMarkupSrcByLineStruct loopMarkupSrcByLine( comp_obj_.has.inline_links = substantive_obj_misc_struct.has_links; comp_obj_.has.image_without_dimensions = substantive_obj_misc_struct.has_images_without_dimensions; the_document_body_section ~= comp_obj_; - tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); + tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); { ST_txt_by_line_common_reset _get = txt_by_line_common_reset_(line_occur, an_object, pith); { @@ -883,7 +883,7 @@ _loopMarkupSrcByLineStruct loopMarkupSrcByLine( } #+END_SRC -*** post loop (consider and segment/break up further in code & org) +*** _post loop_ (consider and segment/break up further in code & org) #+NAME: docAbstractionPostMainLoop #+HEADER: :noweb yes @@ -972,7 +972,7 @@ ST_endnotes en_st = note_section.backmatter_endnote_objects(obj_cite_digits, opt } { // document segnames ST_segnames get_segnames; - get_segnames = the_document_body_section.after_doc_determine_segnames(the_document_endnotes_section, the_document_glossary_section, the_document_bibliography_section, the_document_bookindex_section, the_document_blurb_section, segnames, html_segnames_ptr_cntr, html_segnames_ptr); // + get_segnames = the_document_body_section.after_doc_determine_segnames(the_document_endnotes_section, the_document_glossary_section, the_document_bibliography_section, the_document_bookindex_section, the_document_blurb_section, segnames, html_segnames_ptr_cntr, html_segnames_ptr); segnames = get_segnames.segnames; html_segnames_ptr_cntr = get_segnames.html_segnames_ptr_cntr; html_segnames_ptr = get_segnames.html_segnames_ptr; @@ -1409,36 +1409,42 @@ string[][string] document_section_keys_sequenced = [ "scroll": ["head", "toc", "body",], "seg": ["head", "toc", "body",], "sql": ["head", "body",], - "latex": ["head", "toc", "body",] + "latex": ["head", "toc", "body",], + "text": ["head", "toc", "body",], ]; if (document_the["endnotes"].length > 1) { document_section_keys_sequenced["scroll"] ~= "endnotes"; document_section_keys_sequenced["seg"] ~= "endnotes"; document_section_keys_sequenced["latex"] ~= "endnotes"; + document_section_keys_sequenced["text"] ~= "endnotes"; } if (document_the["glossary"].length > 1) { document_section_keys_sequenced["scroll"] ~= "glossary"; document_section_keys_sequenced["seg"] ~= "glossary"; document_section_keys_sequenced["sql"] ~= "glossary"; document_section_keys_sequenced["latex"] ~= "glossary"; + document_section_keys_sequenced["text"] ~= "glossary"; } if (document_the["bibliography"].length > 1) { document_section_keys_sequenced["scroll"] ~= "bibliography"; document_section_keys_sequenced["seg"] ~= "bibliography"; document_section_keys_sequenced["sql"] ~= "bibliography"; document_section_keys_sequenced["latex"] ~= "bibliography"; + document_section_keys_sequenced["text"] ~= "bibliography"; } if (document_the["bookindex"].length > 1) { document_section_keys_sequenced["scroll"] ~= "bookindex"; document_section_keys_sequenced["seg"] ~= "bookindex"; document_section_keys_sequenced["sql"] ~= "bookindex"; document_section_keys_sequenced["latex"] ~= "bookindex"; + document_section_keys_sequenced["text"] ~= "bookindex"; } if (document_the["blurb"].length > 1) { document_section_keys_sequenced["scroll"] ~= "blurb"; document_section_keys_sequenced["seg"] ~= "blurb"; document_section_keys_sequenced["sql"] ~= "blurb"; document_section_keys_sequenced["latex"] ~= "blurb"; + document_section_keys_sequenced["text"] ~= "blurb"; } if ((opt_action.html) || (opt_action.html_scroll) @@ -1456,7 +1462,7 @@ debug(segnames) { } #+END_SRC -*** return structure +*** _return structure_ #+NAME: docAbstractionReturnsStruct #+HEADER: :noweb yes @@ -1550,7 +1556,24 @@ ST_docAbstraction ret; return ret; #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/ocda_functions.org b/org/ocda_functions.org index baae83e..0b997b7 100644 --- a/org/ocda_functions.org +++ b/org/ocda_functions.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :noweb yes #+PROPERTY: header-args+ :exports code -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -2747,10 +2747,8 @@ static struct ObjInlineMarkup { CMM conf_make_meta, Flag!"_new_doc" _new_doc ) { - obj_txt["munge"] = obj_[obj_key_].dup; - obj_txt["munge"] = (obj_["is"].match(ctRegex!(`verse|code`))) - ? obj_txt["munge"] - : obj_txt["munge"].strip; + obj_txt["munge"] = obj_[obj_key_].dup; + obj_txt["munge"] = (obj_["is"].match(ctRegex!(`verse|code`))) ? obj_txt["munge"] : obj_txt["munge"].strip; if (_new_doc) { anchor_tag = ""; } @@ -2769,8 +2767,8 @@ static struct ObjInlineMarkup { || (obj_["is"] == "group") || (obj_["is"] == "block") || (obj_["is"] == "verse")) { - obj_txt["munge"] = (obj_txt["munge"]).inline_markup_faces; - obj_txt["munge"] = (obj_txt["munge"]).links_and_images; + obj_txt["munge"] = (obj_txt["munge"]).inline_markup_faces; + obj_txt["munge"] = (obj_txt["munge"]).links_and_images; } switch (obj_["is"]) { case "heading": @@ -3553,8 +3551,8 @@ ubyte[32] obj_digest()( // ↓ - endnotes struct NotesSection { string[string] object_notes; - int previous_count; - int mkn; + int previous_count; + int mkn; static auto rgx = RgxI(); private auto gather_notes_for_endnote_section( ObjGenericComposite[] contents_am, @@ -4455,11 +4453,31 @@ ST_the_section build_the_blurb_section(Opt) ( int html_segnames_ptr_cntr, int html_segnames_ptr, ) { + string[string][string] notes_; + if (the_document_body_section.length > 1) { + string _notes; + foreach (ref obj; the_document_body_section) { + if (obj.has.inline_notes_reg) { + if ((obj.text).matchFirst(rgx.inline_notes_al_gen)) { + foreach (m; (obj.text).matchAll(rgx.inline_notes_al_regular_number_note)) { + _notes ~= "\n\n" ~ m["num"] ~ ". " ~ m["note"]; + notes_[(m["num"])]["ocn"] = obj.metainfo.ocn.to!string; + } + } + } + } + } if (the_document_endnotes_section.length > 1) { segnames["html"] ~= "endnotes"; segnames["epub"] ~= "endnotes"; html_segnames_ptr = html_segnames_ptr_cntr; foreach (ref obj; the_document_endnotes_section) { + auto matches = (obj.text).matchAll(rgx.endnote_section_note); + foreach (m; matches) { + obj.metainfo.parent_ocn = notes_[(m["notenumber"])]["ocn"].to!int; + } + } + foreach (ref obj; the_document_endnotes_section) { if (obj.metainfo.is_a == "heading") { obj.metainfo.parent_ocn = obj.metainfo.markedup_ancestors[obj.metainfo.parent_lev_markup]; } @@ -5652,12 +5670,32 @@ auto docSectKeysSeq(string[][string] document_section_keys_sequenced) { string[] latex() { return document_section_keys_sequenced["latex"]; } + string[] text() { + return document_section_keys_sequenced["text"]; + } } return doc_sect_keys_seq(); } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/ocda_obj_setter.org b/org/ocda_obj_setter.org index f37df13..f90f44c 100644 --- a/org/ocda_obj_setter.org +++ b/org/ocda_obj_setter.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :noweb yes #+PROPERTY: header-args+ :exports code -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -50,23 +50,23 @@ template ObjectSetter() { #+NAME: meta_structs_docObjectMeta #+BEGIN_SRC d struct DocObj_MetaInfo_ { - string is_of_part = ""; // frontmatter, body, backmatter - string is_of_section = ""; // toc, body, glossary, biography, book index, blurb - string is_of_type = ""; // para, block ? - string is_a = ""; // heading, para, table, code block, group, verse/poem ... - alias of_part = is_of_part; - alias of_section = is_of_section; - alias is_of = is_of_type; - string attrib = ""; - string lang = ""; // blocks: group, block, quote; not codeblock; - string syntax = ""; // codeblock only + string is_of_part = ""; // frontmatter, body, backmatter + string is_of_section = ""; // toc, body, glossary, biography, book index, blurb + string is_of_type = ""; // para, block ? + string is_a = ""; // heading, para, table, code block, group, verse/poem ... + alias of_part = is_of_part; + alias of_section = is_of_section; + alias is_of = is_of_type; + string attrib = ""; + string lang = ""; // blocks: group, block, quote; not codeblock; + string syntax = ""; // codeblock only /+ o_n +/ - int o_n_substantive = 0; - int o_n_non_substantive = 0; - int o_n_glossary = 0; - int o_n_bibliography = 0; - int o_n_book_index = 0; - int o_n_blurb = 0; + int o_n_substantive = 0; + int o_n_non_substantive = 0; + int o_n_glossary = 0; + int o_n_bibliography = 0; + int o_n_book_index = 0; + int o_n_blurb = 0; string object_number_substantive() const @property { return (o_n_substantive == 0) ? "" : o_n_substantive.to!string; } @@ -130,49 +130,49 @@ struct DocObj_MetaInfo_ { #+NAME: meta_structs_docObjects #+BEGIN_SRC d struct DocObj_TxtAttrib_ { - int indent_base = 0; - int indent_hang = 0; - bool bullet = false; - string language = ""; + int indent_base = 0; + int indent_hang = 0; + bool bullet = false; + string language = ""; } struct DocObj_Has_ { - bool inline_links = false; - bool inline_notes_reg = false; - bool inline_notes_star = false; - bool images = false; - bool image_without_dimensions = false; + bool inline_links = false; + bool inline_notes_reg = false; + bool inline_notes_star = false; + bool images = false; + bool image_without_dimensions = false; } struct DocObj_Table_ { - int number_of_columns = 0; - double[] column_widths = []; - string[] column_aligns = []; - bool heading = false; - bool walls = false; + int number_of_columns = 0; + double[] column_widths = []; + string[] column_aligns = []; + bool heading = false; + bool walls = false; } struct DocObj_CodeBlock_ { - string syntax = ""; - bool linenumbers = false; + string syntax = ""; + bool linenumbers = false; } struct DocObj_Stow_ { - string[] link = []; + string[] link = []; } struct DocObj_Pointer_ { - int doc_object = 0; - int html_segnames = 0; - int heading = 0; + int doc_object = 0; + int html_segnames = 0; + int heading = 0; } struct DocObj_Tags_ { - string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ]; - string anchor_tag_html = ""; - string in_segment_html = ""; - string segment_anchor_tag_epub = ""; - string html_segment_anchor_tag_is = ""; - string epub_segment_anchor_tag_is = ""; - string heading_lev_anchor_tag = ""; - string segname_prev = ""; - string segname_next = ""; - string[] lev4_subtoc = []; - string[] anchor_tags = []; + string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ]; + string anchor_tag_html = ""; + string in_segment_html = ""; + string segment_anchor_tag_epub = ""; + string html_segment_anchor_tag_is = ""; + string epub_segment_anchor_tag_is = ""; + string heading_lev_anchor_tag = ""; + string segname_prev = ""; + string segname_next = ""; + string[] lev4_subtoc = []; + string[] anchor_tags = []; } #+END_SRC @@ -181,7 +181,7 @@ struct DocObj_Tags_ { #+NAME: meta_structs_doc #+BEGIN_SRC d struct ObjGenericComposite { - string text = ""; + string text = ""; DocObj_MetaInfo_ metainfo; DocObj_TxtAttrib_ attrib; DocObj_Tags_ tags; @@ -444,7 +444,24 @@ static auto eN() { } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_curate_metadata.org b/org/out_curate_metadata.org index f01229a..e61b546 100644 --- a/org/out_curate_metadata.org +++ b/org/out_curate_metadata.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -50,19 +50,17 @@ template spineMetaDocCurate() { #+NAME: metadoc_curate_imports #+BEGIN_SRC d -import - sisudoc.meta.defaults, - sisudoc.meta.rgx; -import - std.array, - std.exception, - std.regex, - std.stdio, - std.string, - std.typecons, - std.uni, - std.utf, - std.conv : to; +import sisudoc.meta.defaults; +import sisudoc.meta.rgx; +import std.array; +import std.exception; +import std.regex; +import std.stdio; +import std.string; +import std.typecons; +import std.uni; +import std.utf; +import std.conv : to; #+END_SRC *** initialize :report: @@ -127,17 +125,15 @@ return hvst.curate; <<doc_header_including_copyright_and_license>> module sisudoc.meta.metadoc_curate_topics; @safe: - import - std.algorithm, - std.array, - std.exception, - std.regex, - std.stdio, - std.string, - std.conv : to; - import - sisudoc.meta.defaults, - sisudoc.meta.rgx; + import std.algorithm; + import std.array; + import std.exception; + import std.regex; + import std.stdio; + import std.string; + import std.conv : to; + import sisudoc.meta.defaults; + import sisudoc.meta.rgx; mixin spineCurateMetadata; mixin InternalMarkup; template spineMetaDocCuratesTopics() { @@ -472,17 +468,15 @@ try { <<doc_header_including_copyright_and_license>> module sisudoc.meta.metadoc_curate_authors; @safe: - import - std.algorithm, - std.array, - std.exception, - std.regex, - std.stdio, - std.string, - std.conv : to; - import - sisudoc.meta.defaults, - sisudoc.meta.rgx; + import std.algorithm; + import std.array; + import std.exception; + import std.regex; + import std.stdio; + import std.string; + import std.conv : to; + import sisudoc.meta.defaults; + import sisudoc.meta.rgx; mixin spineCurateMetadata; mixin InternalMarkup; template spineMetaDocCuratesAuthors() { @@ -1018,7 +1012,24 @@ string inline_search_form(M)( ┃") ~ "\n"; #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_latex.org b/org/out_latex.org index 9767286..1d5336e 100644 --- a/org/out_latex.org +++ b/org/out_latex.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -41,9 +41,8 @@ module sisudoc.io_out.latex; #+HEADER: :noweb yes #+BEGIN_SRC d template paperLaTeX() { - import - std.format, - std.conv : to; + import std.format; + import std.conv : to; auto paperLaTeX() { <<Struct_shared_geometry_paper_dimensions>> return PaperType(); @@ -73,6 +72,7 @@ template outputLaTeX() { <<Function_shared_para>> <<Function_shared_bookindex>> <<Function_shared_heading>> +<<Function_shared_quote>> <<Function_shared_group>> <<Function_shared_block>> <<Function_shared_verse>> @@ -192,7 +192,7 @@ void writeOutputLaTeX(T,M)( try { { /+ debug +/ if (doc_matters.opt.action.debug_do_latex - && doc_matters.opt.action.vox_gt1) { + && doc_matters.opt.action.vox_gt_2) { writeln(latex_content.head); writeln(latex_content.content); writeln(latex_content.tail); @@ -201,7 +201,7 @@ void writeOutputLaTeX(T,M)( if (!exists(pth_latex.latex_path_stuff)) { (pth_latex.latex_path_stuff).mkdirRecurse; } - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pth_latex.latex_file_with_path(paper_size_orientation)); } { @@ -274,7 +274,7 @@ void outputLaTeX(D,M)( string content; string tail; } - auto latex = LaTeX(); + LaTeX latex = LaTeX(); foreach (paper_size_orientation; doc_matters.conf_make_meta.conf.set_papersize) { latex.head = latex_head(doc_matters, paper_size_orientation); latex.content = latex_body(doc_abstraction, doc_matters, paper_size_orientation); @@ -289,9 +289,8 @@ void outputLaTeX(D,M)( #+NAME: Initialize_output_style #+BEGIN_SRC d -import - std.format, - std.conv : to; +import std.format; +import std.conv : to; #+END_SRC **** write latex styles output :latex:out: @@ -663,15 +662,13 @@ fonts to try: #+NAME: ImportsAndMixins_imports #+BEGIN_SRC d -import - std.file, - std.outbuffer, - std.uri, - std.conv : to; -import - sisudoc.io_out, - sisudoc.io_out.rgx, - sisudoc.io_out.rgx_latex; +import std.file; +import std.outbuffer; +import std.uri; +import std.conv : to; +import sisudoc.io_out; +import sisudoc.io_out.rgx; +import sisudoc.io_out.rgx_latex; mixin spineRgxOut; static auto rgx = RgxO(); mixin spineRgxLSC; @@ -1566,6 +1563,30 @@ string bullets_and_indentation(O)( #+END_SRC *** grouped text +**** quote + +#+NAME: Function_shared_quote +#+BEGIN_SRC d + string quote(O,M)( + string _txt, + O obj, + M doc_matters, + ) { + if (obj.metainfo.is_a == "quote") { + string _tex_para; + _tex_para = q"┃\ocn{%s}\objBlockOpen +"%s" +\objBlockClose +┃"; + _txt = format(_tex_para, + obj.metainfo.object_number, + _txt.nbsp_char.footnotes.split(rgx.br_linebreaks_newlines).join("\\br\n").strip + ).strip; + } + return _txt; + } +#+END_SRC + **** group - (hardspace not honored) clear hardspace marker @@ -1585,7 +1606,7 @@ string bullets_and_indentation(O)( ┃"; _txt = format(_tex_para, obj.metainfo.object_number, - _txt.footnotes.split(rgx.br_line_spaced).join("\\brl{1}").strip // provides more control (more noise, not as tidy) + _txt.footnotes.split(rgx.br_line_spaced).join(" \\brl{1} ").strip // provides more control (more noise, not as tidy) // _txt.footnotes.split(rgx.br_line_spaced).join("") // this works using a line-space, looks tidy, keep ref. ).strip; } @@ -2232,7 +2253,9 @@ case "body": assert(part == "body" || "head"); // surprise case "block": switch (obj.metainfo.is_a) { case "quote": - goto default; // TODO + _txt = _txt.quote(obj, doc_matters) + .links_and_images(obj, doc_matters); + goto default; case "group": /+ (hardspaces not honored) [remove any hardspace marker] +/ _txt = _txt.group(obj, doc_matters) .links_and_images(obj, doc_matters); @@ -2331,7 +2354,7 @@ case "backmatter": default: { /+ debug +/ if (doc_matters.opt.action.debug_do_latex - && doc_matters.opt.action.vox_gt1) { + && doc_matters.opt.action.vox_gt_2) { writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part); writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a); writeln(__FILE__, ":", __LINE__, ": ", obj.text); @@ -2401,7 +2424,24 @@ string _latex_tail = format(q"┃ } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_metadata.org b/org/out_metadata.org index 92f3eda..d92ff92 100644 --- a/org/out_metadata.org +++ b/org/out_metadata.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -47,11 +47,10 @@ template outputMetadata() { #+NAME: output_imports #+BEGIN_SRC d -import - std.digest.crc, - std.digest.sha, - std.file, - std.format; +import std.digest.crc; +import std.digest.sha; +import std.file; +import std.format; import sisudoc.io_out; mixin InternalMarkup; char[] metadata_; @@ -84,6 +83,7 @@ if (doc_matters.opt.action.debug_do) { } auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language); auto pth_epub = spinePathsEPUB!()(doc_matters.output_path, doc_matters.src.language); +auto pth_text = spinePathsText!()(doc_matters); auto pth_pdf = spinePathsPDF!()(doc_matters); auto pth_pod = spinePathsPods!()(doc_matters); metadata_ ~= format(q"┃<body lang="en" xml:lang="en"> @@ -109,7 +109,7 @@ if (doc_matters.opt.action.html_link_curate) { metadata_ ~= "</div>" ~ inline_search_form(doc_matters) ~ "</div><hr />"; if (!(doc_matters.conf_make_meta.meta.title_full.empty)) { metadata_ ~= "<p class=\"lev0\">Title: <b><a href=\"" ~ doc_matters.src.filename_base ~ "/toc.html\">" ~ doc_matters.conf_make_meta.meta.title_full ~ "</a></b></p>"; -} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) { +} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { writeln("ERROR no Title information provided in document header ", doc_matters.src.filename_base); } if (!(doc_matters.conf_make_meta.meta.creator_author.empty)) { @@ -120,18 +120,18 @@ if (!(doc_matters.conf_make_meta.meta.creator_author.empty)) { metadata_ ~= "<p class=\"lev1\">Author: <b>" ~ doc_matters.conf_make_meta.meta.creator_author ~ "</b></p>"; } -} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) { +} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { writeln("ERROR no Author information provided in document header ", doc_matters.src.filename_base); } metadata_ ~= "<p class=\"lev1\">Published: " ~ doc_matters.conf_make_meta.meta.date_published ~ "</p>"; if (!(doc_matters.conf_make_meta.meta.rights_copyright.empty)) { metadata_ ~= "<p class=\"lev1\">Copyright: " ~ special_characters_text(doc_matters.conf_make_meta.meta.rights_copyright) ~ "</p>"; -} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) { +} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { writeln("WARNING no Copyright information provided in document header ", doc_matters.src.filename_base); } if (!(doc_matters.conf_make_meta.meta.rights_license.empty)) { metadata_ ~= "<p class=\"lev1\">License: " ~ special_characters_text(doc_matters.conf_make_meta.meta.rights_license) ~ "</p>"; -} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) { +} else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { writeln("WARNING no License information provided in document header ", doc_matters.src.filename_base); } if (!(doc_matters.conf_make_meta.meta.notes_summary.empty)) { @@ -165,6 +165,10 @@ if ((doc_matters.opt.action.html_link_pdf) || (doc_matters.opt.action.html_link_ ~ "." ~ doc_matters.src.language ~ ".letter.portrait.pdf\" class=\"lnkicon\">" ~ " □ pdf (U.S. letter) </a>] "; } +if (doc_matters.opt.action.html_link_text) { + metadata_ ~= " [<a href=\"../" ~ "text/" ~ doc_matters.src.filename_base ~ "." ~ doc_matters.src.language ~ ".txt\" class=\"lnkicon\">" + ~ " □ txt </a>] "; +} metadata_ ~= "</p>"; if (doc_matters.opt.action.html_link_markup_source) { metadata_ ~= "<hr /><p class=\"lev1\">source: " ~ doc_matters.src.filename_base ~ "</p>"; @@ -319,7 +323,7 @@ void metadata_write_output(M)(M doc_matters, char[] metadata_) { } catch (ErrnoException ex) { // Handle error } - if (doc_matters.opt.action.vox_gt0) { writeln(" ", pth_html.fn_scroll("metadata." ~ doc_matters.src.filename)); } + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pth_html.fn_scroll("metadata." ~ doc_matters.src.filename)); } } #+END_SRC @@ -688,7 +692,24 @@ string inline_search_form(M)( } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_odt.org b/org/out_odt.org index 75ea565..363218d 100644 --- a/org/out_odt.org +++ b/org/out_odt.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -48,7 +48,7 @@ #+HEADER: :tangle "../src/sisudoc/io_out/odt.d" :noweb yes #+HEADER: :noweb yes -#+BEGIN_SRC d +#+BEGIN_SRC org <<doc_header_including_copyright_and_license>> module sisudoc.io_out.odt; @safe: @@ -100,10 +100,10 @@ template outputODT() { <<output_odt_variable_content_xml_3>> <<output_odt_variable_content_xml_4>> <<output_odt_variable_content_xml_5>> - <<output_odt_variable_content_xml_6>> - <<output_odt_variable_content_xml_7>> - <<output_odt_variable_content_xml_8>> - <<output_odt_variable_content_xml_9>> + <<output_odt_variable_content_xml_6>> + <<output_odt_variable_content_xml_7>> + <<output_odt_variable_content_xml_8>> + <<output_odt_variable_content_xml_9>> <<output_odt_variable_content_xml_10>> <<output_odt_variable_content_xml_11>> <<output_odt_variable_content_xml_12>> @@ -969,7 +969,7 @@ string table(O,M)( } } } - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pth_odt.odt_file); } } @@ -1041,20 +1041,17 @@ void outputODT(D,I)( #+NAME: output_imports #+BEGIN_SRC d -import - sisudoc.io_out, - sisudoc.io_out.rgx, - sisudoc.io_out.rgx_xhtml; -import - std.file, - std.outbuffer, - std.uri, - std.zip, - std.conv : to; -import - sisudoc.io_out.create_zip_file, - sisudoc.io_out.xmls, - sisudoc.io_out.xmls_css; +import sisudoc.io_out; +import sisudoc.io_out.rgx; +import sisudoc.io_out.rgx_xhtml; +import std.file; +import std.outbuffer; +import std.uri; +import std.zip; +import std.conv : to; +import sisudoc.io_out.create_zip_file; +import sisudoc.io_out.xmls; +import sisudoc.io_out.xmls_css; #+END_SRC *** make directory tree @@ -2323,135 +2320,135 @@ string odt_body(D,I)( #+NAME: output_odt_variable_content_xml_6 #+BEGIN_SRC d - foreach (part; doc_matters.has.keys_seq.scroll) { - foreach (obj; doc_abstraction[part]) { - switch (obj.metainfo.is_of_part) { +foreach (part; doc_matters.has.keys_seq.scroll) { + foreach (obj; doc_abstraction[part]) { + switch (obj.metainfo.is_of_part) { #+END_SRC ****** frontmatter #+NAME: output_odt_variable_content_xml_7 #+BEGIN_SRC d - case "frontmatter": assert(part == "head" || "toc"); - switch (obj.metainfo.is_of_type) { - case "para": - switch (obj.metainfo.is_a) { - case "heading": - _txt = delimit ~ odt_format.heading(obj, doc_matters); - goto default; - case "toc": - _txt = odt_format.para(obj, doc_matters); - goto default; - default: - doc_odt ~= _txt; - _txt = ""; - break; - } - break; - default: break; - } - break; +case "frontmatter": assert(part == "head" || "toc"); + switch (obj.metainfo.is_of_type) { + case "para": + switch (obj.metainfo.is_a) { + case "heading": + _txt = delimit ~ odt_format.heading(obj, doc_matters); + goto default; + case "toc": + _txt = odt_format.para(obj, doc_matters); + goto default; + default: + doc_odt ~= _txt; + _txt = ""; + break; + } + break; + default: break; + } + break; #+END_SRC ****** body #+NAME: output_odt_variable_content_xml_8 #+BEGIN_SRC d - case "body": assert(part == "body" || "head"); // surprise - switch (obj.metainfo.is_of_type) { - case "para": - switch (obj.metainfo.is_a) { - case "heading": - _txt = delimit ~ odt_format.heading(obj, doc_matters); - goto default; - case "para": - _txt = odt_format.para(obj, doc_matters); - goto default; - default: - doc_odt ~= _txt; - _txt = ""; - break; - } - break; - case "block": - switch (obj.metainfo.is_a) { - case "quote": - _txt = odt_format.quote(obj, doc_matters); - goto default; - case "group": - _txt = odt_format.group(obj, doc_matters); - goto default; - case "block": - _txt = odt_format.block(obj, doc_matters); - goto default; - case "verse": - _txt = odt_format.verse(obj, doc_matters); - goto default; - case "code": - _txt = odt_format.code(obj, doc_matters); - goto default; - case "table": - _txt = odt_format.table(obj, doc_matters); - goto default; - default: - doc_odt ~= _txt; - _txt = ""; - break; - } - break; - default: break; - } - break; +case "body": assert(part == "body" || "head"); // surprise + switch (obj.metainfo.is_of_type) { + case "para": + switch (obj.metainfo.is_a) { + case "heading": + _txt = delimit ~ odt_format.heading(obj, doc_matters); + goto default; + case "para": + _txt = odt_format.para(obj, doc_matters); + goto default; + default: + doc_odt ~= _txt; + _txt = ""; + break; + } + break; + case "block": + switch (obj.metainfo.is_a) { + case "quote": + _txt = odt_format.quote(obj, doc_matters); + goto default; + case "group": + _txt = odt_format.group(obj, doc_matters); + goto default; + case "block": + _txt = odt_format.block(obj, doc_matters); + goto default; + case "verse": + _txt = odt_format.verse(obj, doc_matters); + goto default; + case "code": + _txt = odt_format.code(obj, doc_matters); + goto default; + case "table": + _txt = odt_format.table(obj, doc_matters); + goto default; + default: + doc_odt ~= _txt; + _txt = ""; + break; + } + break; + default: break; + } + break; #+END_SRC ****** backmatter #+NAME: output_odt_variable_content_xml_9 #+BEGIN_SRC d - case "backmatter": - assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); - switch (obj.metainfo.is_of_type) { - case "para": - switch (obj.metainfo.is_a) { - case "heading": - _txt = delimit ~ odt_format.heading(obj, doc_matters); - goto default; - case "endnote": assert(part == "endnotes"); - _txt = odt_format.para(obj, doc_matters); - goto default; - case "glossary": assert(part == "glossary"); - _txt = odt_format.para(obj, doc_matters); - goto default; - case "bibliography": assert(part == "bibliography"); - _txt = odt_format.para(obj, doc_matters); - goto default; - case "bookindex": assert(part == "bookindex"); - _txt = odt_format.para(obj, doc_matters); - goto default; - case "blurb": assert(part == "blurb"); - _txt = odt_format.para(obj, doc_matters); - goto default; - default: - doc_odt ~= _txt; - _txt = ""; - break; - } - break; - default: break; - } - break; - case "comment": - break; - default: - { /+ debug +/ - if (doc_matters.opt.action.debug_do - && doc_matters.opt.action.vox_gt1) { - writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part); - writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a); - writeln(__FILE__, ":", __LINE__, ": ", obj.text); - } - } - break; +case "backmatter": + assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); + switch (obj.metainfo.is_of_type) { + case "para": + switch (obj.metainfo.is_a) { + case "heading": + _txt = delimit ~ odt_format.heading(obj, doc_matters); + goto default; + case "endnote": assert(part == "endnotes"); + _txt = odt_format.para(obj, doc_matters); + goto default; + case "glossary": assert(part == "glossary"); + _txt = odt_format.para(obj, doc_matters); + goto default; + case "bibliography": assert(part == "bibliography"); + _txt = odt_format.para(obj, doc_matters); + goto default; + case "bookindex": assert(part == "bookindex"); + _txt = odt_format.para(obj, doc_matters); + goto default; + case "blurb": assert(part == "blurb"); + _txt = odt_format.para(obj, doc_matters); + goto default; + default: + doc_odt ~= _txt; + _txt = ""; + break; + } + break; + default: break; + } + break; +case "comment": + break; +default: + { /+ debug +/ + if (doc_matters.opt.action.debug_do + && doc_matters.opt.action.vox_gt_2) { + writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part); + writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.text); + } + } + break; #+END_SRC ***** closings & post loop @@ -2602,7 +2599,24 @@ void images_cp(M)( } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_skel.org b/org/out_skel.org new file mode 100644 index 0000000..43be371 --- /dev/null +++ b/org/out_skel.org @@ -0,0 +1,324 @@ +-*- mode: org -*- +#+TITLE: sisudoc spine (doc_reform) output xmls +#+DESCRIPTION: documents - structuring, publishing in multiple formats & search +#+FILETAGS: :spine:output:skel: +#+AUTHOR: Ralph Amissah +#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] +#+COPYRIGHT: Copyright (C) 2015 - 2025 Ralph Amissah +#+LANGUAGE: en +#+STARTUP: content hideblocks hidestars noindent entitiespretty +#+PROPERTY: header-args :exports code +#+PROPERTY: header-args+ :noweb yes +#+PROPERTY: header-args+ :results output none +#+PROPERTY: header-args+ :cache no +#+PROPERTY: header-args+ :padline no +#+PROPERTY: header-args+ :mkdirp yes +#+OPTIONS: H:3 num:nil toc:t \n:t ::t |:t ^:nil -:t f:t *:t + +- [[./doc-reform.org][doc-reform.org]] [[./][org/]] +- [[./output_hub.org][output_hub]] + +* Skel +** outputSkel template + +#+HEADER: :tangle "../src/sisudoc/io_out/skel.d" +#+HEADER: :noweb yes +#+BEGIN_SRC d +<<doc_header_including_copyright_and_license>> +module sisudoc.io_out.skel; +@safe: +template outputSkel() { + <<munge>> + <<the_document>> + void outputSkel(D,M) ( + const D doc_abstraction, + M doc_matters, + ) { + import std.stdio; + import sisudoc.io_out; + <<skel_out>> + skel_out(doc_abstraction, doc_matters); + } +} +#+END_SRC + +** Output + +#+NAME: skel_out +#+HEADER: :noweb yes +#+BEGIN_SRC d +void skel_out(D,M)( + const D doc_abstraction, + M doc_matters, +) { + struct Skel { + string head; + string content; + string tail; + } + auto skel = Skel(); + skel.head = theDocument!().skel_head(doc_matters); + skel.content = theDocument!().skel_body(doc_abstraction, doc_matters); + skel.tail = theDocument!().skel_tail(doc_matters); + auto pth_skel = spinePathsSkel(doc_matters); + try { + import std.file; + if (!exists(pth_skel.base_pth)) { + (pth_skel.base_pth).mkdirRecurse; + } + } catch (ErrnoException ex) { + } + if (doc_matters.opt.action.vox_gt_1) { + writeln(" ", pth_skel.skel_file); + } + // writeln(pth_skel.base_pth); + auto f = File(pth_skel.skel_file, "w"); + f.writeln(skel.head); + f.writeln(skel.content); + f.writeln(skel.tail); +} +#+END_SRC + +* The Document +** theDocument template + +#+NAME: the_document +#+HEADER: :noweb yes +#+BEGIN_SRC d +template theDocument() { + import std.stdio; + import sisudoc.io_out; + <<skel_head>> + <<skel_body_assign_munge>> + <<skel_tail>> +} +#+END_SRC + +** the Document (assign munge) +*** Head + +#+NAME: skel_head +#+HEADER: :noweb yes +#+BEGIN_SRC d +// static auto rgx = RgxO(); +string skel_head(M)( + M doc_matters, +) { + return "head"; +} +#+END_SRC + +*** Body munge assign + +#+NAME: skel_body_assign_munge +#+HEADER: :noweb yes +#+BEGIN_SRC d +string skel_body(D,M)( + const D doc_abstraction, + M doc_matters, +) { + string doc_object = ""; + foreach (section; doc_matters.has.keys_seq.scroll) { + foreach (obj; doc_abstraction[section]) { + if (obj.metainfo.is_a == "toc") { doc_object ~= munge!().toc(obj); } + if (obj.metainfo.is_a == "heading") { doc_object ~= munge!().heading(obj); } + if (obj.metainfo.is_a == "para") { doc_object ~= munge!().para(obj); } + if (obj.metainfo.is_a == "group") { doc_object ~= munge!().group(obj); } + if (obj.metainfo.is_a == "block") { doc_object ~= munge!().block(obj); } + if (obj.metainfo.is_a == "poem") { doc_object ~= munge!().poem(obj); } + if (obj.metainfo.is_a == "verse") { doc_object ~= munge!().verse(obj); } + if (obj.metainfo.is_a == "code") { doc_object ~= munge!().code(obj); } + if (obj.metainfo.is_a == "quote") { doc_object ~= munge!().quote(obj); } + if (obj.metainfo.is_a == "table") { doc_object ~= munge!().table(obj); } + if (obj.metainfo.is_a == "endnote") { doc_object ~= munge!().endnote(obj); } + if (obj.metainfo.is_a == "bookindex") { doc_object ~= munge!().bookindex(obj); } + if (obj.metainfo.is_a == "bibliography") { doc_object ~= munge!().bibliography(obj); } + if (obj.metainfo.is_a == "glossary") { doc_object ~= munge!().glossary(obj); } + if (obj.metainfo.is_a == "blurb") { doc_object ~= munge!().blurb(obj); } + if (obj.metainfo.is_a == "comment") { doc_object ~= munge!().comment(obj); } + } + } + return doc_object; +} +#+END_SRC + +*** Tail + +#+NAME: skel_tail +#+HEADER: :noweb yes +#+BEGIN_SRC d +string skel_tail(M)( + M doc_matters, +) { + return "tail"; +} +#+END_SRC + +* Munge + +#+NAME: munge +#+HEADER: :noweb yes +#+BEGIN_SRC d +template munge() { + import std.stdio; + import std.conv; + void puts(string _obj_is) { + writeln(__FILE__, ":", __LINE__, ": ", _obj_is); + } + string newline = "\n"; + string newlines = "\n\n"; + string toc(O)(O obj) { + // puts(obj.metainfo.is_a); + // return "toc\n"; + return obj.text ~ newline; + } + string heading(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string para(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string group(O)(O obj) { + /+ + The "group" is different from the "block" mark in that "group" does not + preserve whitespace, the "block" mark does. The text falling within the + block is a single object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string block(O)(O obj) { + /+ + The "block" is different from the "group" mark in that the "block" mark + (like the "poem" mark) preserves whitespace, the "group" mark does not. + The text falling within the "block" is a single object, which is different + from the "poem" mark where each identified verse is an object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string poem(O)(O obj) { + /+ + The "poem" mark like the "block" preserves whitespace. Text followed by + two newlines are identified as verse and each verse is an object i.e. a + poem may consist of multiple verse each of which is identified as an + object, unlike a text "block" which is identified as a single object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + // return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + return obj.text ~ newlines; + } + string verse(O)(O obj) { + /+ + See description of poem, the poem is demarkated but the verse is the + object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string code(O)(O obj) { + /+ + "Code" blocks are a single text object, in which the original text is + preserved. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string quote(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string table(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string endnote(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } + string bookindex(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } + string bibliography(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } + string glossary(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } + string blurb(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } + string comment(O)(O obj) { + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } +} +#+END_SRC + +* org includes +** spine 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__ diff --git a/org/out_sqlite.org b/org/out_sqlite.org index b9ab903..4564f9b 100644 --- a/org/out_sqlite.org +++ b/org/out_sqlite.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -95,7 +95,7 @@ template SQLiteHubBuildTablesAndPopulate() { D doc ) { <<sqlite_db_statement_composite_collection>> - if (doc.matters.opt.action.vox_gt0) { + if (doc.matters.opt.action.vox_gt_1) { writeln(" ", pth_sqlite.sqlite_file); } } @@ -177,7 +177,7 @@ template SQLiteHubDiscreteBuildTablesAndPopulate() { import core.runtime; core.runtime.Runtime.terminate(); } - if (doc.matters.opt.action.vox_gt0) { + if (doc.matters.opt.action.vox_gt_1) { writeln(" ", pth_sqlite.sqlite_file(doc.matters.src.filename)); } } @@ -215,7 +215,7 @@ template SQLiteDbRun() { { /+ debug +/ if (opt_action.debug_do_sqlite) { writeln(note); - if (opt_action.vox_gt2) { + if (opt_action.vox_gt_3) { writeln(db_statement); } } @@ -436,12 +436,12 @@ if (opt_action.sqlite_db_create) { ? config.conf.w_srv_db_sqlite_path : ""; if (db_filename.length > 0 && db_path.length > 0) { - if (opt_action.vox_gt2) { + if (opt_action.vox_gt_3) { writeln("db name: ", db_filename); writeln("db path: ", db_path); writeln("db name & path: ", db_path, "/", db_filename); } - if (opt_action.vox_gt1) { + if (opt_action.vox_gt_2) { writeln("attempting to create db: ", db_path, "/", db_filename); } auto pth_sqlite = spinePathsSQLite!()(db_filename, db_path); @@ -560,13 +560,12 @@ db.close; #+NAME: sqlite_imports #+BEGIN_SRC d -import - sisudoc.io_out, - sisudoc.io_out.rgx, - sisudoc.io_out.rgx_xhtml; -import - std.file, - std.uri; +import sisudoc.io_out; +import sisudoc.io_out.rgx; +import sisudoc.io_out.rgx_xhtml; +import std.file; +import std.uri; +// import std.digest.sha; import std.conv : to; import std.typecons : Nullable; import d2sqlite3; @@ -873,7 +872,7 @@ string inline_links(M,O)( ); } } else { - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln( "WARNING on internal document links, anchor to link <<" ~ m.captures["hash"] @@ -2163,7 +2162,24 @@ VALUES ( ); #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_src_pod.org b/org/out_src_pod.org index e72d332..3bf8f87 100644 --- a/org/out_src_pod.org +++ b/org/out_src_pod.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -31,7 +31,7 @@ template spinePod() { <<output_imports>> void spinePod(T)(T doc_matters) { <<source_pod_init>> - if (doc_matters.opt.action.pod) { + if (doc_matters.opt.action.source_or_pod) { try { { podArchive_directory_tree(doc_matters, pths_pod); @@ -69,18 +69,15 @@ template spinePod() { #+NAME: output_imports #+BEGIN_SRC d -import - sisudoc.meta.rgx_files, - sisudoc.io_out; -import - std.digest.sha, - std.file, - std.outbuffer, - std.zip, - std.conv : to; -import - sisudoc.io_out.create_zip_file, - sisudoc.io_out.xmls; +import std.digest.sha; +import std.file; +import std.outbuffer; +import std.zip; +import std.conv : to; +import sisudoc.meta.rgx_files; +import sisudoc.io_out; +import sisudoc.io_out.create_zip_file; +import sisudoc.io_out.xmls; #+END_SRC *** init @@ -105,8 +102,8 @@ assert (doc_matters.src.filename.match(rgx_files.src_fn)); #+BEGIN_SRC d auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { auto pth_dr_doc_src = doc_matters.src_path_info; - if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) { - writeln(__LINE__, ": ", + if (doc_matters.opt.action.vox_gt_3) { // correct + writeln(__LINE__, ":", __FILE__, ":\n", doc_matters.src.filename, " -> ", pths_pod.fn_doc(doc_matters.src.filename, doc_matters.src.language).filesystem_open_zpod ); @@ -116,7 +113,7 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { string[string][string] _digests; { // bundle images - get digest foreach (image; doc_matters.srcs.image_list) { - debug(podimages) { + if (doc_matters.opt.action.vox_gt_3) { writeln( pth_dr_doc_src.image_root.to!string, "/", image, " -> ", pths_pod.image_root(doc_matters.src.filename).zpod, "/", image @@ -139,11 +136,11 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { if (doc_matters.opt.action.source_or_pod) { fn_src_in.copy(fn_src_out_filesystem); } - if (doc_matters.opt.action.pod) { + if (doc_matters.opt.action.source_or_pod) { zip = podArchive("file_path_bin", fn_src_in, fn_src_out_pod_zip_base, zip); } } else { - if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) { + if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) { writeln("WARNING (io) src out NOT found (image): ", fn_src_in); } } @@ -163,11 +160,11 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { if (doc_matters.opt.action.source_or_pod) { fn_src_in.copy(fn_src_out_filesystem); } - if (doc_matters.opt.action.pod) { + if (doc_matters.opt.action.source_or_pod) { zip = podArchive("file_path_text", fn_src_in, fn_src_out_pod_zip_base, zip); } } else { - if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) { + if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) { writeln("WARNING (io) src out NOT found (document make): ", fn_src_in); } } @@ -191,7 +188,7 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { = File(pths_pod.fn_pod_filelist(doc_matters.src.filename).filesystem_open_zpod, "w"); Node _pmy; string _pm = "doc:\n filename: " ~ doc_matters.src.filename ~ "\n language: " ~ doc_matters.pod.manifest_list_of_languages.to!string ~ "\n"; - if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) { + if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) { try { _pmy = Loader.fromString(_pm).load(); } catch (ErrnoException ex) { @@ -208,7 +205,7 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { if (doc_matters.opt.action.source_or_pod) { pod_filelist_yaml_string.writeln(_pm); } - if (doc_matters.opt.action.pod) { + if (doc_matters.opt.action.source_or_pod) { zip = podArchive("string", _pm, fn_src_out_pod_zip_base, zip); } } @@ -228,11 +225,14 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { string fn_src_out_filesystem_lng = pths_pod.fn_doc(doc_matters.src.filename, _lang).filesystem_open_zpod.to!string; string _sstm = (doc_matters.pod.manifest_path ~ "/media/text/" ~ _lang ~ "/" ~ doc_matters.src.filename); - // writeln(_sstm); - if (exists(_sstm)) { // what of language? - debug(io) { writeln("(io debug) src in found: ", _sstm); } + string _pth_file_sstm; + if (exists(_sstm)) { _pth_file_sstm = _sstm; + } else if (exists(fn_src_in)) { _pth_file_sstm = fn_src_in; + } + if (exists(_pth_file_sstm)) { // what of language? + debug(io) { writeln("(io debug) src in found: ", _pth_file_sstm); } { // take DIGEST write to pod file digests.txt - auto data = (cast(byte[]) (_sstm).read); + auto data = (cast(byte[]) (_pth_file_sstm).read); _digests[_lang]["sstm"] ~= data.sha256Of.toHexString ~ "::" ~ data.length.to!string ~ " - " ~ doc_matters.src.filename ~ " - [" ~ _lang ~ "]"; // writeln(data.sha256Of.toHexString, "::", data.length, " - ", doc_matters.src.filename); } @@ -240,11 +240,11 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { filelist_src_zpod_arr ~= fn_src_out_inside_pod; string _pod_to_markup_file = doc_matters.src.pod_name ~ "/" ~ "media/text/" ~ _lang ~ "/" ~ doc_matters.src.filename; if (doc_matters.opt.action.source_or_pod) { - _sstm.copy(fn_src_out_filesystem_lng); + _pth_file_sstm.copy(fn_src_out_filesystem_lng); } - if (doc_matters.opt.action.pod) { + if (doc_matters.opt.action.source_or_pod) { auto _rgx_sstm = regex(r"(?P<path_to_pod>\S+?)(?P<podname>[a-z_-]+)/(?P<from_root>media/text/)(?P<language>\S+?)/(?P<filename>\S+?\.ss[mt])"); - if (auto _x = _sstm.match(_rgx_sstm)){ + if (auto _x = _pth_file_sstm.match(_rgx_sstm)){ if (doc_matters.src.lng == doc_matters.pod.manifest_list_of_languages[$-1]) { // again wait until all language versions of .ssm parsed string _path_to_pod = _x.captures["path_to_pod"]; string _podname = _x.captures["podname"]; @@ -259,12 +259,12 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { } } } else { - zip = podArchive("file_path_text", _sstm, fn_src_out_pod_zip_base, zip); + zip = podArchive("file_path_text", _pth_file_sstm, fn_src_out_pod_zip_base, zip); } } } else { - if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) { - writeln("WARNING (io) src in NOT found (markup source): ", _sstm); + if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) { + writeln("WARNING (io) src in NOT found (markup source): \n", _sstm, "or in", fn_src_in); } } } @@ -308,11 +308,11 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { ).filesystem_open_zpod.to!string; _pth_mkup_src_in.copy(fn_src_out_filesystem); // check why here, thought dealt with elsewhere } - if (doc_matters.opt.action.pod) { + if (doc_matters.opt.action.source_or_pod) { zip = podArchive("file_path_text", _pth_mkup_src_in, _pth_mkup_src_out, zip); } } else { - if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) { + if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) { writeln("WARNING (io) src out NOT found (insert file): ", _pth_mkup_src_in); } } @@ -342,11 +342,11 @@ auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) { if (doc_matters.opt.action.source_or_pod) { fn_src_in.copy(fn_src_out_filesystem); } - if (doc_matters.opt.action.pod) { + if (doc_matters.opt.action.source_or_pod) { zip = podArchive("file_path_text", fn_src_in, fn_src_out_pod_zip_base, zip); } } else { - if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) { + if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) { writeln("WARNING (io) src out NOT found (insert file): ", fn_src_in); } } @@ -375,7 +375,7 @@ void podArchive_directory_tree(M,P)(M doc_matters, P pths_pod) { // create direc pths_pod.pod_dir_().mkdirRecurse; } if (doc_matters.opt.action.source_or_pod) { - // if (doc_matters.opt.action.vox_gt0) { writeln(" ", pths_pod.fn_pod_filelist(doc_matters.src.filename).filesystem_open_zpod); } + // if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pths_pod.fn_pod_filelist(doc_matters.src.filename).filesystem_open_zpod); } if (!exists(pths_pod.text_root(doc_matters.src.filename).filesystem_open_zpod)) { pths_pod.text_root(doc_matters.src.filename).filesystem_open_zpod.mkdirRecurse; } @@ -477,19 +477,19 @@ void zipArchiveDigest(M,F,D)(M doc_matters, F fn_pod, D _digests) { // Handle error } try { - // if (doc_matters.opt.action.vox_gt1) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, ".digests.txt"); } + // if (doc_matters.opt.action.vox_gt_2) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, ".digests.txt"); } string _digest_fn = pths_pod.pod_dir_() ~ "/" ~ doc_matters.src.filename_base ~ ".digests.txt"; - // if (doc_matters.opt.action.vox_gt1) { writeln(_digest_fn); } + // if (doc_matters.opt.action.vox_gt_2) { writeln(_digest_fn); } auto f = File(_digest_fn, "w"); if (exists(fn_pod)) { try { auto data = (cast(byte[]) (fn_pod).read); - // if (doc_matters.opt.action.vox_gt1) { writeln(" ", doc_matters.src.filename, " > ", doc_matters.src.filename_base, ".zip"); } + // if (doc_matters.opt.action.vox_gt_2) { writeln(" ", doc_matters.src.filename, " > ", doc_matters.src.filename_base, ".zip"); } if (doc_matters.opt.action.pod) { _zip_digest = (data.sha256Of.toHexString ~ "::" ~ data.length.to!string ~ " - " ~ doc_matters.src.filename_base ~ ".zip"); - if (doc_matters.opt.action.vox_gt0) { writeln(" ", _zip_digest); } - if (doc_matters.opt.action.vox_gt0) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, "/"); } - if (doc_matters.opt.action.vox_gt0) { writeln(" ", _digest_fn); } + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", _zip_digest); } + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, "/"); } + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", _digest_fn); } f.writeln(_zip_digest); } } catch (ErrnoException ex) { @@ -499,18 +499,18 @@ void zipArchiveDigest(M,F,D)(M doc_matters, F fn_pod, D _digests) { foreach (_lang; doc_matters.pod.manifest_list_of_languages) { if (_lang in _digests) { if (("sstm" in _digests[_lang]) && (_digests[_lang]["sstm"].length > 0)) { - // if (doc_matters.opt.action.vox_gt1) { writeln(_digests[_lang]["sstm"]); } + // if (doc_matters.opt.action.vox_gt_2) { writeln(_digests[_lang]["sstm"]); } f.writeln(_digests[_lang]["sstm"]); } if (("ssi" in _digests[_lang]) && (_digests[_lang]["ssi"].length > 0)) { - // if (doc_matters.opt.action.vox_gt1) { writeln(_digests[_lang]["ssi"]); } + // if (doc_matters.opt.action.vox_gt_2) { writeln(_digests[_lang]["ssi"]); } f.writeln(_digests[_lang]["ssi"]); } } } if ("shared" in _digests) { if (("images" in _digests["shared"]) && (_digests["shared"]["images"].length > 0)) { - // if (doc_matters.opt.action.vox_gt1) { writeln(_digests["shared"]["images"]); } + // if (doc_matters.opt.action.vox_gt_2) { writeln(_digests["shared"]["images"]); } f.writeln(_digests["shared"]["images"]); } } @@ -520,7 +520,24 @@ void zipArchiveDigest(M,F,D)(M doc_matters, F fn_pod, D _digests) { } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_text.org b/org/out_text.org new file mode 100644 index 0000000..02d6294 --- /dev/null +++ b/org/out_text.org @@ -0,0 +1,565 @@ +-*- mode: org -*- +#+TITLE: sisudoc spine (doc_reform) output xmls +#+DESCRIPTION: documents - structuring, publishing in multiple formats & search +#+FILETAGS: :spine:output:text: +#+AUTHOR: Ralph Amissah +#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] +#+COPYRIGHT: Copyright (C) 2015 - 2025 Ralph Amissah +#+LANGUAGE: en +#+STARTUP: content hideblocks hidestars noindent entitiespretty +#+PROPERTY: header-args :exports code +#+PROPERTY: header-args+ :noweb yes +#+PROPERTY: header-args+ :results output none +#+PROPERTY: header-args+ :cache no +#+PROPERTY: header-args+ :padline no +#+PROPERTY: header-args+ :mkdirp yes +#+OPTIONS: H:3 num:nil toc:t \n:t ::t |:t ^:nil -:t f:t *:t + +- [[./doc-reform.org][doc-reform.org]] [[./][org/]] +- [[./output_hub.org][output_hub]] + +* Text +** outputText template + +#+HEADER: :tangle "../src/sisudoc/io_out/text.d" +#+HEADER: :noweb yes +#+BEGIN_SRC d +<<doc_header_including_copyright_and_license>> +module sisudoc.io_out.text; +@safe: +template outputText() { + <<munge>> + <<the_document>> + void outputText(D,M) ( + const D doc_abstraction, + M doc_matters, + ) { + import std.stdio; + import sisudoc.io_out; + <<text_out>> + text_out(doc_abstraction, doc_matters); + } +} +#+END_SRC + +** Output + +#+NAME: text_out +#+HEADER: :noweb yes +#+BEGIN_SRC d +void text_out(D,M)( + const D doc_abstraction, + M doc_matters, +) { + struct Text { + string head; + string content; + string tail; + } + auto text = Text(); + // text.head = theDocument!().text_head(doc_matters); + text.content = theDocument!().text_body(doc_abstraction, doc_matters); + text.tail = theDocument!().text_tail(doc_matters); + auto pth_text = spinePathsText(doc_matters); + try { + import std.file; + if (!exists(pth_text.base_pth)) { + (pth_text.base_pth).mkdirRecurse; + } + } catch (ErrnoException ex) { + } + if (doc_matters.opt.action.vox_gt_1) { + writeln(" ", pth_text.text_file); + } + // writeln(pth_text.base_pth); + auto f = File(pth_text.text_file, "w"); + // f.writeln(text.head); + f.writeln(text.content); + f.writeln(text.tail); +} +#+END_SRC + +* The Document +** theDocument template + +#+NAME: the_document +#+HEADER: :noweb yes +#+BEGIN_SRC d +template theDocument() { + import std.stdio; + import sisudoc.io_out; + <<text_head>> + <<text_body_assign_munge>> + <<text_tail>> +} +#+END_SRC + +** the Document (assign munge) +*** Head SKIP + +#+NAME: text_head +#+HEADER: :noweb yes +#+BEGIN_SRC d +string text_head(M)( + M doc_matters, +) { + return "head"; +} +#+END_SRC + +*** Body munge assign + +#+NAME: text_body_assign_munge +#+HEADER: :noweb yes +#+BEGIN_SRC d +string text_body(D,M)( + const D doc_abstraction, + M doc_matters, +) { + string doc_object = ""; + foreach (section; doc_matters.has.keys_seq.scroll) { + foreach (obj; doc_abstraction[section]) { + if (obj.metainfo.is_a == "toc") { doc_object ~= munge!().toc(obj, doc_matters); } + if (obj.metainfo.is_a == "heading") { doc_object ~= munge!().heading(obj, doc_matters); } + if (obj.metainfo.is_a == "para") { doc_object ~= munge!().para(obj, doc_matters); } + if (obj.metainfo.is_a == "group") { doc_object ~= munge!().group(obj, doc_matters); } + if (obj.metainfo.is_a == "block") { doc_object ~= munge!().block(obj, doc_matters); } + if (obj.metainfo.is_a == "poem") { doc_object ~= munge!().poem(obj, doc_matters); } // CHECK + if (obj.metainfo.is_a == "verse") { doc_object ~= munge!().verse(obj, doc_matters); } // CHECK + if (obj.metainfo.is_a == "code") { doc_object ~= munge!().code(obj, doc_matters); } + if (obj.metainfo.is_a == "quote") { doc_object ~= munge!().quote(obj, doc_matters); } // LATER + if (obj.metainfo.is_a == "table") { doc_object ~= munge!().table(obj, doc_matters); } + if (obj.metainfo.is_a == "endnote") { doc_object ~= munge!().endnote(obj, doc_matters); } + if (obj.metainfo.is_a == "bookindex") { doc_object ~= munge!().bookindex(obj, doc_matters); } // CHECK + if (obj.metainfo.is_a == "bibliography") { doc_object ~= munge!().bibliography(obj, doc_matters); } // CHECK + if (obj.metainfo.is_a == "glossary") { doc_object ~= munge!().glossary(obj, doc_matters); } // CHECK + if (obj.metainfo.is_a == "blurb") { doc_object ~= munge!().blurb(obj, doc_matters); } // CHECK + if (obj.metainfo.is_a == "comment") { doc_object ~= munge!().comment(obj, doc_matters); } // LATER + } + } + return doc_object; +} +#+END_SRC + +*** Tail + +#+NAME: text_tail +#+HEADER: :noweb yes +#+BEGIN_SRC d +string text_tail(M)( + M doc_matters, +) { + string metadata_; + if (doc_matters.opt.action.debug_do) { + writeln(doc_matters.src.filename_base); + writeln("Title: ", doc_matters.conf_make_meta.meta.title_full); + writeln(" Author: ", doc_matters.conf_make_meta.meta.creator_author); + writeln(" Published: ", doc_matters.conf_make_meta.meta.date_published); + writeln(" Copyright: ", doc_matters.conf_make_meta.meta.rights_copyright); + writeln(" License: ", doc_matters.conf_make_meta.meta.rights_license); + } + if (!(doc_matters.conf_make_meta.meta.title_full.empty)) { + metadata_ ~= "Title: " ~ doc_matters.conf_make_meta.meta.title_full ~ "\n\n"; + } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { + writeln("ERROR no Title information provided in document header ", doc_matters.src.filename_base); + } + if (!(doc_matters.conf_make_meta.meta.creator_author.empty)) { + if (doc_matters.opt.action.html_link_curate) { + metadata_ ~= "Author: " ~ doc_matters.conf_make_meta.meta.creator_author_surname.translate([' ' : "_"]) + ~ doc_matters.conf_make_meta.meta.creator_author ~ "\n\n"; + } else { + metadata_ ~= "Author: " + ~ doc_matters.conf_make_meta.meta.creator_author ~ "\n\n"; + } + } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { + writeln("ERROR no Author information provided in document header ", doc_matters.src.filename_base); + } + metadata_ ~= "Published: " ~ doc_matters.conf_make_meta.meta.date_published ~ "\n\n"; + if (!(doc_matters.conf_make_meta.meta.rights_copyright.empty)) { + metadata_ ~= "Copyright: " ~ doc_matters.conf_make_meta.meta.rights_copyright ~ "\n\n"; + } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { + writeln("WARNING no Copyright information provided in document header ", doc_matters.src.filename_base); + } + if (!(doc_matters.conf_make_meta.meta.rights_license.empty)) { + metadata_ ~= "License: " ~ doc_matters.conf_make_meta.meta.rights_license ~ "\n\n"; + } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) { + writeln("WARNING no License information provided in document header ", doc_matters.src.filename_base); + } + metadata_ ~= doc_matters.generator_program.project_name.strip ~ "\n"; + metadata_ ~= doc_matters.generator_program.url_home.strip; + return metadata_; +} +#+END_SRC + +* Munge + +#+NAME: munge +#+HEADER: :noweb yes +#+BEGIN_SRC d +template munge() { + import sisudoc.io_out; + import sisudoc.io_out.rgx; + import std.stdio; + import std.conv; + import std.conv : to; + import std.typecons : Nullable; + mixin spineRgxOut; + static auto rgx = RgxO(); + void puts(string _obj_is) { + writeln(__FILE__, ":", __LINE__, ": ", _obj_is); + } + string newline = "\n"; + string newlines = "\n\n"; + template special_characters_and_font_face() { + string code(string _txt){ + _txt = _txt.replaceAll(rgx.nbsp_char, " "); + return _txt; + } + string general(string _txt) { + _txt = _txt + .replaceAll(rgx.nbsp_char, " ") + .replaceAll(rgx.br_line, "\n") + .replaceAll(rgx.br_line_inline, "\n") + .replaceAll(rgx.br_line_spaced, "\n\n") + .replaceAll(rgx.inline_strike, "-{$1}-") + .replaceAll(rgx.inline_insert, "+{$1}+") + .replaceAll(rgx.inline_cite, "\"{$1}\"") + .replaceAll(rgx.inline_emphasis, "!{$1}!") + .replaceAll(rgx.inline_bold, "*{$1}*") + .replaceAll(rgx.inline_italics, "/{$1}/") + .replaceAll(rgx.inline_underscore, "_{$1}_") + .replaceAll(rgx.inline_superscript, "^{$1}^") + .replaceAll(rgx.inline_subscript, ",{$1},") + .replaceAll(rgx.inline_mono, "#{$1}#"); + return _txt; + } + string links_and_images(string _txt){ + if (_txt.match(rgx.inline_link)) { + foreach (m; _txt.matchAll(rgx.inline_link)) { + _txt = (m.captures[3] == "0") + ? _txt.replaceFirst(rgx.inline_link, (m.captures[1])) + : _txt.replaceFirst(rgx.inline_link, (m.captures[1] ~ " ≫" ~ m.captures[3])); + } + } + if (_txt.matchFirst(rgx.inline_image)) { + foreach (m; _txt.matchAll(rgx.inline_image)) { + _txt = _txt.replaceFirst(rgx.inline_image, (m.captures[3])); + } + } + return _txt; + } + } + string generalMunge(O,M)(O obj, M doc_matters) { + string _txt = obj.text; + string _notes; + string _ocn; + string general_munge; + _ocn = (obj.metainfo.ocn == 0 || doc_matters.opt.action.ocn_off) + ? "" : "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newline; + if (_txt.matchFirst(rgx.inline_notes_al_gen)) { + foreach (m; _txt.matchAll(rgx.inline_notes_al_regular_number_note)) { + _notes ~= newlines ~ m["num"] ~ ". " + ~ special_characters_and_font_face!().general(m["note"].replaceAll(rgx.inline_link, ("$1"))); + } + } + _txt = _txt.replaceAll(rgx.inline_notes_al_regular_number_note, "[$1]"); + _txt = (obj.metainfo.is_a == "code") + ? special_characters_and_font_face!().code(_txt) + : special_characters_and_font_face!().general(_txt); + _txt = special_characters_and_font_face!().links_and_images(_txt); + general_munge = (obj.metainfo.is_a == "heading") + ? newline ~ _txt ~ _notes ~ newline ~ _ocn ~ newline + : _txt ~ _notes ~ newline ~ _ocn ~ newline; + return general_munge; + } + string toc(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return "toc\n"; + // _txt = _special_characters_and_font_face(obj.text); + string _txt = special_characters_and_font_face!().general(obj.text); + string _spaces; + switch (obj.attrib.indent_hang) { + case 1: _spaces = ""; + break; + case 2: _spaces = ":"; + break; + case 3: _spaces = "∴"; + break; + case 4: _spaces = " "; + break; + case 5: _spaces = " "; + break; + case 6: _spaces = " "; + break; + case 7: _spaces = " "; + break; + case 8: _spaces = " "; + break; + default: + break; + } + _txt = (doc_matters.opt.action.ocn_off) + ? _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1")) + : _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1 ≫ $3")); + return _txt ~ newline; + } + string heading(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _general_munge = generalMunge(obj,doc_matters); + return _general_munge; + } + string para(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _general_munge = generalMunge(obj,doc_matters); + return _general_munge; + } + string group(O,M)(O obj, M doc_matters) { + /+ + The "group" is different from the "block" mark in that "group" does not + preserve whitespace, the "block" mark does. The text falling within the + block is a single object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _general_munge = generalMunge(obj,doc_matters); + return _general_munge; + } + string block(O,M)(O obj, M doc_matters) { + /+ + The "block" is different from the "group" mark in that the "block" mark + (like the "poem" mark) preserves whitespace, the "group" mark does not. + The text falling within the "block" is a single object, which is different + from the "poem" mark where each identified verse is an object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _general_munge = generalMunge(obj,doc_matters); + return _general_munge; + } + string poem(O,M)(O obj, M doc_matters) { // LATER + /+ + The "poem" mark like the "block" preserves whitespace. Text followed by + two newlines are identified as verse and each verse is an object i.e. a + poem may consist of multiple verse each of which is identified as an + object, unlike a text "block" which is identified as a single object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } + string verse(O,M)(O obj, M doc_matters) { + /+ + See description of poem, the poem is demarkated but the verse is the + object. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _general_munge = generalMunge(obj,doc_matters); + return _general_munge; + } + string code(O,M)(O obj, M doc_matters) { + /+ + "Code" blocks are a single text object, in which the original text is + preserved. + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _general_munge = generalMunge(obj,doc_matters); + return _general_munge; + } + string quote(O,M)(O obj, M doc_matters) { // LATER + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string table(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + auto tablarize(O)( + string _txt, + const O obj, + ) { + string[] _table_rows = (_txt).split(rgx.table_delimiter_row); + string[] _table_cols; + string _table = ""; + string _tablenote = ""; + int[] _col_width; + _col_width.length = obj.table.number_of_columns.to!ulong; + foreach(row_idx, row; _table_rows) { + _table_cols = row.split(rgx.table_delimiter_col); + _table ~= ""; + foreach(col_idx, cell; _table_cols) { + if (!((_table_cols.length == 1) + && (_table_rows.length <= row_idx+2))) { + if (_col_width[col_idx] < (cell.length.to!int)) { + _col_width[col_idx] = cell.length.to!int; + } + } + } + } + foreach(row_idx, row; _table_rows) { + _table_cols = row.split(rgx.table_delimiter_col); + foreach(col_idx, cell; _table_cols) { + if ((_table_cols.length == 1) + && (_table_rows.length <= row_idx+2)) { // check row_idx+2 (rather than == ++row_idx) + _tablenote ~= cell ~ newline; + } else { + if (obj.table.column_aligns[col_idx] == "l") { + _table ~= format(q"┃%-*s%s┃", + _col_width[col_idx], + cell, + (_table_cols.length > (col_idx + 1)) ? " ┊ " : "" + ); + } else { + _table ~= format(q"┃%*s%s┃", + _col_width[col_idx], + cell, + (_table_cols.length > (col_idx + 1)) ? " ┊ " : "" + ); + } + _table = _table + .replaceAll(regex("\\s*$"), ""); + } + } + _table ~= newline; + } + Tuple!(string, string) t = tuple( + _table, + _tablenote, + ); + return t; + } + // string _txt = obj.text; + // writeln(obj.table.column_widths); + auto _t = tablarize(obj.text, obj); + string _txt = _t[0]; + string _tablenote = _t[1]; + return _txt ~ _tablenote ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines; + } + string endnote(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _ocn; + _ocn = "「" ~ obj.metainfo.ocn.to!string ~ "」"; + string _txt = obj.text; + string _parent_ocn; + _txt = _txt + .replaceAll(rgx.inline_link, ("$1")) // consider + .replaceFirst(rgx.inline_superscript, ("$1")); + _parent_ocn = (obj.metainfo.parent_ocn == 0 || doc_matters.opt.action.ocn_off) + ? "" : " ≫" ~ obj.metainfo.parent_ocn.to!string; + _txt = special_characters_and_font_face!().general(_txt) ~ _parent_ocn; + return _txt ~ newlines; + } + string bookindex(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _txt = obj.text; + _txt = (doc_matters.opt.action.ocn_off) + ? _txt.replaceAll(rgx.find_bookindex_ocn_link_and_comma, "") + .replaceAll(regex("\\s*\\\\"), "") + : _txt.replaceAll(rgx.inline_link, ("≫$1")) + .replaceAll(regex("\\s*\\\\"), ""); + _txt = special_characters_and_font_face!().general(_txt); + return _txt ~ newlines; + } + string bibliography(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _txt = obj.text; + _txt = special_characters_and_font_face!().general(_txt); + return _txt ~ newlines; + // ALT: + // string _general_munge = generalMunge(obj,doc_matters); + // return _general_munge; + } + string glossary(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _txt = obj.text; + _txt = special_characters_and_font_face!().general(_txt); + return _txt; + } + string blurb(O,M)(O obj, M doc_matters) { + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + string _general_munge = generalMunge(obj,doc_matters); + return _general_munge; + } + string comment(O,M)(O obj, M doc_matters) { // LATER + /+ + +/ + // puts(obj.metainfo.is_a); + // return obj.metainfo.is_a; + return obj.text ~ newlines; + } +} +#+END_SRC + +* org includes +** spine 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__ +* TODO WORKON + +#+BEGIN_SRC org +TODO + PRIORITY + LATER +- object types + - comment + - quote +- images ? remove?? (currently with inline links) +- anchor tags (for internal links)? + +WISH +- underline headings? +- break para text at set width? +- text wrap at text-line-width specified option + +DONE +- line breaks +- font face: bold, italics etc. +- object types + - toc + - inline_link /[┥┝┤├] + - indents + obj.metainfo.heading_lev_markup < 4 + - group + - block + - code + - verse + - table + - endnote section + - point back to object number of origin, use parent_ocn (used e.g. in text output: endnote info on calling object ≫\d+) + - bookindex + - bibliography + - glossary + - blurb +- inline_link /[┥┝┤├] +#+END_SRC + diff --git a/org/out_xmls.org b/org/out_xmls.org index 8d0b475..0d510b5 100644 --- a/org/out_xmls.org +++ b/org/out_xmls.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -18,11 +18,6 @@ - [[./doc-reform.org][doc-reform.org]] [[./][org/]] - [[./output_hub.org][output_hub]] -#+NAME: year -#+BEGIN_SRC text -2025 -#+END_SRC - * xml offspring (xhtml html epub) ** format xhtml objects :format: *** _module template_ :module: @@ -91,38 +86,34 @@ template outputXHTMLs() { #+NAME: output_imports_xml #+BEGIN_SRC d -import - std.file, - std.outbuffer, - std.uri, - std.conv : to; -import - sisudoc.io_out, - sisudoc.io_out.rgx, - sisudoc.meta.rgx_files, - sisudoc.io_out.rgx_xhtml, - sisudoc.io_out.create_zip_file, - sisudoc.io_out.xmls, - sisudoc.io_out.xmls_css; +import std.file; +import std.outbuffer; +import std.uri; +import std.conv : to; +import sisudoc.io_out; +import sisudoc.io_out.rgx; +import sisudoc.meta.rgx_files; +import sisudoc.io_out.rgx_xhtml; +import sisudoc.io_out.create_zip_file; +import sisudoc.io_out.xmls; +import sisudoc.io_out.xmls_css; #+END_SRC **** epub3 #+NAME: output_imports_epub #+BEGIN_SRC d -import - std.file, - std.outbuffer, - std.uri, - std.zip, - std.conv : to; -import - sisudoc.io_out, - sisudoc.io_out.rgx, - sisudoc.io_out.rgx_xhtml, - sisudoc.io_out.create_zip_file, - sisudoc.io_out.xmls, - sisudoc.io_out.xmls_css; +import std.file; +import std.outbuffer; +import std.uri; +import std.zip; +import std.conv : to; +import sisudoc.io_out; +import sisudoc.io_out.rgx; +import sisudoc.io_out.rgx_xhtml; +import sisudoc.io_out.create_zip_file; +import sisudoc.io_out.xmls; +import sisudoc.io_out.xmls_css; #+END_SRC *** misc @@ -729,7 +720,7 @@ string inline_links(O,M)( ); } } else { - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln( "WARNING on internal document links, anchor to link <<" ~ m.captures["hash"] @@ -2030,7 +2021,7 @@ scroll_write_output(doc_out, doc.matters); } catch (ErrnoException ex) { // Handle error } - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pth_html.fn_scroll(doc_matters.src.filename)); } } @@ -2366,7 +2357,7 @@ seg_write_output(doc_html, doc_html_endnotes, doc.matters); } catch (ErrnoException ex) { // handle error } - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pth_html.fn_seg(doc_matters.src.filename, "toc")); } } @@ -2426,7 +2417,7 @@ void css(M)(M doc_matters) { if (exists(fn_src_in)) { fn_src_in.copy(fn_src_out); } else { - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln("WARNING image not found: ", fn_src_in); } } @@ -3275,7 +3266,7 @@ zip -0 file.epub mimetype && zip -r -9 file.epub META-INF OEBPS foreach (image; doc_matters.srcs.image_list) { { /+ debug +/ if (doc_matters.opt.action.debug_do_epub) { - if (doc_matters.opt.action.vox_gt2) { + if (doc_matters.opt.action.vox_gt_3) { writeln( doc_matters.src.image_dir_path, "/", image, " -> ", pth_epub3.dbg_doc_oebps_image(doc_matters.src.filename), "/", image @@ -3322,7 +3313,7 @@ zip -0 file.epub mimetype && zip -r -9 file.epub META-INF OEBPS } catch (ErrnoException ex) { // Handle error } - if (doc_matters.opt.action.vox_gt0) { + if (doc_matters.opt.action.vox_gt_1) { writeln(" ", fn_epub); } #+END_SRC @@ -3347,7 +3338,24 @@ zip -0 file.epub mimetype && zip -r -9 file.epub META-INF OEBPS } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/out_xmls_css.org b/org/out_xmls_css.org index 1ba12d0..d827616 100644 --- a/org/out_xmls_css.org +++ b/org/out_xmls_css.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -2502,7 +2502,16 @@ p[indent="h9i9"] { ┃"); #+END_SRC -* document header including copyright & license +* org includes +** 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 diff --git a/org/out_zip.org b/org/out_zip.org index 5bd503b..7464c37 100644 --- a/org/out_zip.org +++ b/org/out_zip.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -28,11 +28,10 @@ module sisudoc.io_out.create_zip_file; @safe: template createZipFile() { - import - std.file, - std.outbuffer, - std.string, - std.zip; + import std.file; + import std.outbuffer; + import std.string; + import std.zip; void createZipFile( string zip_file_name, void[] compressed_zip_data, @@ -46,7 +45,24 @@ template createZipFile() { } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/output_hub.org b/org/output_hub.org index c87c757..47123b2 100644 --- a/org/output_hub.org +++ b/org/output_hub.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -35,7 +35,7 @@ template outputHub() { @system void outputHub(D)(D doc) { mixin Msg; auto msg = Msg!()(doc.matters); - enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff } + enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff, text, skel } void Scheduled(D)(int sched, D doc) { auto msg = Msg!()(doc.matters); <<output_scheduled_task_source_or_pod>> @@ -45,10 +45,12 @@ template outputHub() { <<output_scheduled_task_html_seg>> <<output_scheduled_task_html_out>> <<output_scheduled_task_latex>> + <<output_scheduled_task_text>> <<output_scheduled_task_odt>> <<output_scheduled_task_sqlite>> + <<output_scheduled_task_skel>> } - if (doc.matters.opt.action.vox_gt0) { writeln(doc.matters.src.filename_base); } + if (doc.matters.opt.action.vox_gt_1) { writeln(doc.matters.src.filename_base); } if (!(doc.matters.opt.action.parallelise_subprocesses)) { foreach(schedule; doc.matters.opt.action.output_task_scheduler) { Scheduled!()(schedule, doc); @@ -230,6 +232,18 @@ if (sched == outTask.latex) { } #+END_SRC +**** text :text:txt: + +#+NAME: output_scheduled_task_text +#+BEGIN_SRC d +if (sched == outTask.text) { + msg.v("text processing... "); + import sisudoc.io_out.text; + outputText!()(doc.abstraction, doc.matters); + msg.vv("text done"); +} +#+END_SRC + **** odf / odt :odf:odt: #+NAME: output_scheduled_task_odt @@ -242,6 +256,18 @@ if (sched == outTask.odt) { } #+END_SRC +**** skel :skel:text: + +#+NAME: output_scheduled_task_skel +#+BEGIN_SRC d +if (sched == outTask.skel) { + msg.v("skel processing... "); + import sisudoc.io_out.skel; + outputSkel!()(doc.abstraction, doc.matters); + msg.vv("skel done"); +} +#+END_SRC + **** sqlite discrete :sqlite: #+NAME: output_scheduled_task_sqlite @@ -279,12 +305,12 @@ if (doc.matters.opt.action.sqlite_update) { #+NAME: output_options_op_sqlite_db_drop #+BEGIN_SRC d if ((opt_action.sqlite_db_drop)) { - if ((opt_action.vox_gt1)) { + if ((opt_action.vox_gt_2)) { writeln("sqlite drop db..."); } import sisudoc.io_out.sqlite; SQLiteDbDrop!()(opt_action, config); - if ((opt_action.vox_gt2)) { + if ((opt_action.vox_gt_3)) { writeln("sqlite drop db done"); } } @@ -295,19 +321,36 @@ if ((opt_action.sqlite_db_drop)) { #+NAME: output_options_op_sqlite_db_create #+BEGIN_SRC d if ((opt_action.sqlite_db_create)) { - if ((opt_action.vox_gt1)) { + if ((opt_action.vox_gt_2)) { auto pth_sqlite_db = spinePathsSQLite!()(opt_action.cgi_sqlite_search_filename, opt_action.output_dir_set); writeln("sqlite create table..."); } import sisudoc.io_out.sqlite; SQLiteTablesCreate!()(env, opt_action, config); - if ((opt_action.vox_gt2)) { + if ((opt_action.vox_gt_3)) { writeln("sqlite create table done"); } } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/output_show.org b/org/output_show.org index 6f54451..2a8070f 100644 --- a/org/output_show.org +++ b/org/output_show.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -34,7 +34,7 @@ template spineMetaDocSummary() { <<metadoc_show_imports_shared>> mixin InternalMarkup; <<metadoc_show_initialize>> - if (doc_matters.opt.action.vox_gt1 + if (doc_matters.opt.action.vox_gt_2 || doc_matters.opt.action.show_summary) { <<meta_metadoc_show_summary_document_check_counts>> <<meta_metadoc_show_summary_document>> @@ -532,27 +532,25 @@ writefln( #+NAME: metadoc_show_imports_shared #+BEGIN_SRC d -import - std.array, - std.digest.crc, - std.digest.sha, - std.exception, - std.regex, - std.stdio, - std.string, - std.typecons, - std.uni, - std.utf, - std.conv : to; +import std.array; +import std.digest.crc; +import std.digest.sha; +import std.exception; +import std.regex; +import std.stdio; +import std.string; +import std.typecons; +import std.uni; +import std.utf; +import std.conv : to; #+END_SRC *** imports #+NAME: metadoc_show_summary_imports #+BEGIN_SRC d -import - sisudoc.meta.defaults, - sisudoc.meta.rgx; +import sisudoc.meta.defaults; +import sisudoc.meta.rgx; #+END_SRC *** initialize :report: @@ -568,7 +566,24 @@ char_repeat_number = (char_repeat_number > min_repeat_number) : min_repeat_number; #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org b/org/sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org index b536386..fb03fea 100644 --- a/org/sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org +++ b/org/sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :noweb yes #+PROPERTY: header-args+ :exports code -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -108,6 +108,13 @@ 0 #+END_SRC +* year + +#+NAME: year +#+BEGIN_SRC org +2025 +#+END_SRC + * sisudoc spine git source SET ** sisudoc-spine src diff --git a/org/spine.org b/org/spine.org index 51c649c..9971dc2 100644 --- a/org/spine.org +++ b/org/spine.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -37,7 +37,6 @@ - by zip filename #+HEADER: :tangle "../src/sisudoc/spine.d" -#+HEADER: :shebang "#!/usr/bin/env rdmd" #+HEADER: :noweb yes #+BEGIN_SRC d <<doc_header_including_copyright_and_license>> @@ -85,7 +84,7 @@ string program_name = "spine"; } } else { // note cannot parallelise sqlite shared db foreach(manifest; _manifests[1..$]) { - if (_opt_action.vox_gt2) { writeln("parallelisation off: actions include sqlite shared db"); } + if (_opt_action.vox_gt_3) { writeln("parallelisation off: actions include sqlite shared db"); } if (!empty(manifest.src.filename)) { <<spine_each_file_do_scope>> <<spine_each_file_do_abstraction>> @@ -105,7 +104,7 @@ string program_name = "spine"; if (_opt_action.curate_authors) { spineMetaDocCuratesAuthors!()(hvst.curates, _make_and_meta_struct, _opt_action); } - if (_opt_action.vox_gt0) { + if (_opt_action.vox_gt_1) { import sisudoc.io_out.paths_output; auto out_pth = spinePathsHTML!()(_make_and_meta_struct.conf.output_path, ""); if (_opt_action.curate_authors) { @@ -126,52 +125,48 @@ string program_name = "spine"; #+NAME: imports_spine #+BEGIN_SRC d -import - std.algorithm, - std.datetime, - std.getopt, - std.file, - std.path, - std.process; -import - sisudoc.conf.compile_time_info, - sisudoc.meta, - sisudoc.meta.metadoc, - sisudoc.meta.metadoc_curate, - sisudoc.meta.metadoc_curate_authors, - sisudoc.meta.metadoc_curate_topics, - sisudoc.meta.metadoc_from_src, - sisudoc.meta.conf_make_meta_structs, - sisudoc.meta.conf_make_meta_json, - sisudoc.meta.defaults, - sisudoc.meta.doc_debugs, - sisudoc.meta.rgx, - sisudoc.meta.rgx_yaml, - sisudoc.meta.rgx_files, - sisudoc.io_in.paths_source, - sisudoc.io_in.read_config_files, - sisudoc.io_in.read_source_files, - sisudoc.io_out.hub; +import std.algorithm; +import std.datetime; +import std.getopt; +import std.file; +import std.path; +import std.process; +import sisudoc.conf.compile_time_info; +import sisudoc.meta; +import sisudoc.meta.metadoc; +import sisudoc.meta.metadoc_curate; +import sisudoc.meta.metadoc_curate_authors; +import sisudoc.meta.metadoc_curate_topics; +import sisudoc.meta.metadoc_from_src; +import sisudoc.meta.conf_make_meta_structs; +import sisudoc.meta.conf_make_meta_json; +import sisudoc.meta.defaults; +import sisudoc.meta.doc_debugs; +import sisudoc.meta.rgx; +import sisudoc.meta.rgx_yaml; +import sisudoc.meta.rgx_files; +import sisudoc.io_in.paths_source; +import sisudoc.io_in.read_config_files; +import sisudoc.io_in.read_source_files; +import sisudoc.io_out.hub; #+END_SRC ***** spine metadoc :spine: #+NAME: imports_spine_metadoc #+BEGIN_SRC d -import - std.datetime, - std.digest.crc, - std.digest.sha; -import - sisudoc.meta, - sisudoc.meta.metadoc_from_src, - sisudoc.meta.conf_make_meta_structs, - sisudoc.meta.conf_make_meta_json, - sisudoc.meta.defaults, - sisudoc.io_in.paths_source, - sisudoc.io_in.read_config_files, - sisudoc.io_in.read_source_files, - sisudoc.io_out.hub; +import std.datetime; +import std.digest.crc; +import std.digest.sha; +import sisudoc.meta; +import sisudoc.meta.metadoc_from_src; +import sisudoc.meta.conf_make_meta_structs; +import sisudoc.meta.conf_make_meta_json; +import sisudoc.meta.defaults; +import sisudoc.io_in.paths_source; +import sisudoc.io_in.read_config_files; +import sisudoc.io_in.read_source_files; +import sisudoc.io_out.hub; #+END_SRC ****** notes @@ -316,6 +311,7 @@ bool[string] opts = [ "html-link-pdf-a4" : false, "html-link-pdf-letter" : false, "html-link-search" : false, + "html-link-text" : false, "html-seg" : false, "html-scroll" : false, "latex" : false, @@ -325,6 +321,7 @@ bool[string] opts = [ "light" : false, "manifest" : false, "hide-ocn" : false, + "no-ocn" : false, "ocn-off" : false, "odf" : false, "odt" : false, @@ -348,6 +345,7 @@ bool[string] opts = [ "show-pod" : false, "show-sqlite" : false, "show-summary" : false, + "skel" : false, "source" : false, "sqlite-discrete" : false, "sqlite-db-create" : false, @@ -357,9 +355,11 @@ bool[string] opts = [ "sqlite-insert" : false, "sqlite-update" : false, "text" : false, - "vox_is0" : false, - "vox_gt1" : false, - "vox_gt2" : false, + "vox_is0" : false, // silent + "vox_is1" : false, // quiet + "vox_is2" : false, // default (unset) + "vox_is3" : false, // verbose + "vox_is4" : false, // very verbose "xhtml" : false, "section_toc" : true, "section_body" : true, @@ -434,6 +434,7 @@ auto helpInfo = getopt(args, "html-link-pdf", "provide html link to pdf a4 & letter output", &opts["html-link-pdf"], "html-link-pdf-a4", "provide html link to pdf a4 output", &opts["html-link-pdf-a4"], "html-link-pdf-letter", "provide html link to pdf letter size output", &opts["html-link-pdf-letter"], + "html-link-text", "provide html link to text output", &opts["html-link-text"], "html-link-search", "html embedded search submission", &opts["html-link-search"], "html-seg", "process html output", &opts["html-seg"], "html-scroll", "process html output", &opts["html-scroll"], @@ -444,6 +445,7 @@ auto helpInfo = getopt(args, "latex-header-sty", "latex document header sty files", &opts["latex-header-sty"], "light", "default light theme", &opts["light"], "manifest", "process manifest output", &opts["manifest"], + "no-ocn", "object cite numbers", &opts["no-ocn"], "ocn-off", "object cite numbers", &opts["ocn-off"], "odf", "open document format text (--odt)", &opts["odf"], "odt", "open document format text", &opts["odt"], @@ -454,7 +456,7 @@ auto helpInfo = getopt(args, "pdf-color-links", "mono or color links for pdfs", &opts["pdf-color-links"], "pdf-init", "initialise latex shared files (see latex-header-sty)", &opts["pdf-init"], "pod", "spine (doc reform) pod source content bundled", &opts["pod"], - "quiet|q", "output to terminal", &opts["vox_is0"], + "quiet|q", "output to terminal", &opts["vox_is1"], "section-backmatter", "document backmatter (default)" , &opts["backmatter"], "section-biblio", "document biblio (default)", &opts["section_biblio"], "section-blurb", "document blurb (default)", &opts["section_blurb"], @@ -479,9 +481,11 @@ auto helpInfo = getopt(args, "show-sqlite", "show sqlite", &opts["show-sqlite"], "show-summary", "show summary", &opts["show-summary"], "source", "document markup source", &opts["source"], + "silent", "output to terminal", &opts["vox_is0"], "set-digest", "default hash digest type (e.g. sha256)", &settings["set-digest"], "set-papersize", "default papersize (latex pdf eg. a4 or a5 or b4 or letter)", &settings["set-papersize"], "set-textwrap", "default textwrap (e.g. 80 (characters)", &settings["set-textwrap"], + "skel", "skel (dummy outline)", &opts["skel"], "sqlite-discrete", "process discrete sqlite output", &opts["sqlite-discrete"], "sqlite-db-create", "create db, create tables", &opts["sqlite-db-create"], "sqlite-db-drop", "drop tables & db", &opts["sqlite-db-drop"], @@ -491,16 +495,16 @@ auto helpInfo = getopt(args, "sqlite-delete", "sqlite output", &opts["sqlite-delete"], "sqlite-insert", "sqlite output", &opts["sqlite-insert"], "sqlite-update", "sqlite output", &opts["sqlite-update"], + "text", "text output", &opts["text"], + "txt", "text output", &opts["text"], "www-http", "http or https", &settings["www-http"], "www-host", "web server host (domain) name", &settings["www-host"], "www-host-doc-root", "web host host (domain) name with path to doc root", &settings["www-host-doc-root"], "www-url-doc-root", "e.g. http://localhost", &settings["www-url-doc-root"], - "text", "text output", &opts["text"], "theme-dark", "alternative dark theme", &opts["theme-dark"], "theme-light", "default light theme", &opts["theme-light"], - "txt", "text output", &opts["text"], - "verbose|v", "output to terminal", &opts["vox_gt1"], - "very-verbose", "output to terminal", &opts["vox_gt2"], + "verbose|v", "output to terminal", &opts["vox_is3"], + "very-verbose", "output to terminal", &opts["vox_is4"], "workon", "(reserved for some matters under development & testing)", &opts["workon"], "xhtml", "xhtml output", &opts["xhtml"], "config", "=/path/to/config/file/including/filename", &settings["config"], @@ -529,7 +533,7 @@ if (helpInfo.helpWanted) { #+NAME: spine_args_get_options_aa2str #+BEGIN_SRC d -enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff } +enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff, text, skel } struct OptActions { @trusted bool allow_downloads() { return opts["allow-downloads"]; @@ -633,6 +637,12 @@ struct OptActions { @trusted bool html_link_pdf_letter() { return (opts["html-link-pdf-letter"]) ? true : false; } + @trusted bool html_link_text() { + return (opts["html-link-text"]) ? true : false; + } + @trusted bool text_link_curate() { + return (opts["text-link-curate"]) ? true : false; + } @trusted bool html_link_search() { return (opts["html-link-search"]) ? true : false; } @@ -667,7 +677,7 @@ struct OptActions { return opts["hide-ocn"]; } @trusted bool ocn_off() { - return opts["ocn-off"]; + return ((opts["ocn-off"]) || (opts["no-ocn"])) ? true : false; } @trusted bool pod() { return opts["pod"]; @@ -679,10 +689,10 @@ struct OptActions { return opts["show-curate"]; } @trusted bool show_curate_authors() { - return (opts["show-curate"] || opts["show-curate-authors"] || opts["vox_gt1"] || opts["vox_gt2"]) ? true : false; + return (opts["show-curate"] || opts["show-curate-authors"] || vox_gt_2) ? true : false; } @trusted bool show_curate_topics() { - return (opts["show-curate"] || opts["show-curate-topics"] || opts["vox_gt2"]) ? true : false; + return (opts["show-curate"] || opts["show-curate-topics"] || vox_gt_3) ? true : false; } @trusted bool show_epub() { return opts["show-epub"]; @@ -706,10 +716,10 @@ struct OptActions { return opts["show-pod"]; } @trusted bool show_sqlite() { - return (opts["show-sqlite"] || opts["vox_gt2"]) ? true : false; + return (opts["show-sqlite"] || vox_gt_3) ? true : false; } @trusted bool show_summary() { - return (opts["show-summary"] || opts["vox_gt1"] || opts["vox_gt2"]) ? true : false; + return (opts["show-summary"] || vox_gt_2) ? true : false; } @trusted bool source() { return opts["source"]; @@ -741,21 +751,48 @@ struct OptActions { || opts["sqlite-update"] ) ? true : false; } - @trusted bool vox_is0() { // --quiet -q + @trusted bool skel() { + return opts["skel"]; + } + @trusted bool text() { + return opts["text"]; + } + @trusted bool vox_0() { // --silent return opts["vox_is0"]; } - @trusted bool vox_gt0() { // normal, minimal, without flag - return (!(opts["vox_is0"]) || opts["vox_gt1"] || opts["vox_gt2"]) ? true : false; + @trusted bool vox_1() { // --quiet -q + return opts["vox_is1"]; } - @trusted bool vox_gt1() { // -- verbose -v - return (opts["vox_gt1"] || opts["vox_gt2"]) ? true : false; + @trusted bool vox_2() { // normal, minimal, without flag + bool _vox_default = true; + if (opts["vox_is0"] || opts["vox_is1"] || opts["vox_is3"] || opts["vox_is4"]) { _vox_default = false; + } else { _vox_default = true; + } + return _vox_default; } - @trusted bool vox_gt2() { // --very-verbose - return opts["vox_gt2"]; + @trusted bool vox_3() { // --verbose -v + return opts["vox_is3"]; } - @trusted bool text() { - return opts["text"]; + @trusted bool vox_4() { // --very-verbose + return opts["vox_is4"]; + } + @trusted bool vox_gt_0() { // --quiet -q and above + return ( vox_1 || vox_2 || vox_3 || vox_4) ? true : false; + } + @trusted bool vox_gt_1() { // normal, and above + return (vox_2 || vox_3 || vox_4) ? true : false; } + @trusted bool vox_gt_2() { // --verbose -v and above + return ( vox_3 || vox_4) ? true : false; + } + @trusted bool vox_gt_3() { // --very-verbose + return (vox_4) ? true : false; + } + @trusted bool vox_silent() { return vox_0; } // --silent + @trusted bool vox_quiet() { return vox_gt_0; } // --quiet -q & above + @trusted bool vox_default() { return vox_gt_1; } // defalt, & above + @trusted bool vox_verbose() { return vox_gt_2; } // --verbose -v & above + @trusted bool vox_very_verbose() { return vox_gt_3; } // --very-verbose @trusted bool xhtml() { return opts["xhtml"]; } @@ -869,6 +906,8 @@ struct OptActions { || latex || manifest || sqlite_discrete + || text + || skel ) { _is = true; } else { _is = false; } @@ -879,30 +918,16 @@ struct OptActions { } auto output_task_scheduler() { int[] schedule; - if (source_or_pod) { - schedule ~= outTask.source_or_pod; - } - if (sqlite_discrete) { - schedule ~= outTask.sqlite; - } - if (epub) { - schedule ~= outTask.epub; - } - if (html_scroll) { - schedule ~= outTask.html_scroll; - } - if (html_seg) { - schedule ~= outTask.html_seg; - } - if (html_stuff) { - schedule ~= outTask.html_stuff; - } - if (odt) { - schedule ~= outTask.odt; - } - if (latex) { - schedule ~= outTask.latex; - } + if (source_or_pod) { schedule ~= outTask.source_or_pod; } + if (sqlite_discrete) { schedule ~= outTask.sqlite; } + if (epub) { schedule ~= outTask.epub; } + if (html_scroll) { schedule ~= outTask.html_scroll; } + if (html_seg) { schedule ~= outTask.html_seg; } + if (html_stuff) { schedule ~= outTask.html_stuff; } + if (odt) { schedule ~= outTask.odt; } + if (latex) { schedule ~= outTask.latex; } + if (text) { schedule ~= outTask.text; } + if (skel) { schedule ~= outTask.skel; } return schedule.sort().uniq; } @trusted bool abstraction() { @@ -919,6 +944,8 @@ struct OptActions { || sqlite_discrete || sqlite_delete || sqlite_update + || text + || skel ) ? true : false; } @trusted bool require_processing_files() { @@ -940,6 +967,7 @@ struct OptActions { || sqlite_update || text || xhtml + || skel ) ? true : false; } @trusted bool meta_processing_general() { @@ -952,6 +980,8 @@ struct OptActions { || latex || sqlite_discrete || sqlite_update + || text + || skel ) ? true :false; } @trusted bool meta_processing_xml_dom() { @@ -1100,94 +1130,53 @@ foreach(arg; args[1..$]) { ); if (exists(sisudoc_txt_)) { try { - if (exists(sisudoc_txt_)) { - import dyaml; - try { - Node pod_manifest_yaml; - try { - pod_manifest_yaml = Loader.fromFile(sisudoc_txt_).load(); - } catch (ErrnoException ex) { - } catch (FileException ex) { - writeln("ERROR failed to read config file"); - } catch (Throwable) { - writeln("ERROR failed to read config file content, not parsed as yaml"); - } - if ("doc" in pod_manifest_yaml) { - if (pod_manifest_yaml["doc"].type.mapping - && pod_manifest_yaml["doc"].tag.match(rgx_y.yaml_tag_is_map) - ) { - if ("path" in pod_manifest_yaml["doc"]) { - if (pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_seq)) { - foreach (string _path; pod_manifest_yaml["doc"]["path"]) { - markup_contents_location_ ~= _path ~ "\n"; - pod_manifest_root_content_paths_to_markup_location_raw_ ~= - _path ~ "\n"; - } - } else if ( - pod_manifest_yaml["doc"]["path"].type.string - && pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_str) - ) { - markup_contents_location_ = pod_manifest_yaml["doc"]["path"].get!string; - pod_manifest_root_content_paths_to_markup_location_raw_ = - pod_manifest_yaml["doc"]["path"].get!string; - } + import dyaml; + Node pod_manifest_yaml; + try { + pod_manifest_yaml = Loader.fromFile(sisudoc_txt_).load(); + } catch (ErrnoException ex) { + } catch (FileException ex) { + writeln("ERROR failed to read config file"); + } catch (Throwable) { + writeln("ERROR failed to read config file content, not parsed as yaml"); + } + if ("doc" in pod_manifest_yaml) { + if (pod_manifest_yaml["doc"].type.mapping + && pod_manifest_yaml["doc"].tag.match(rgx_y.yaml_tag_is_map) + ) { + if ("path" in pod_manifest_yaml["doc"]) { + if (pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_seq)) { + foreach (string _path; pod_manifest_yaml["doc"]["path"]) { + markup_contents_location_ ~= _path ~ "\n"; + pod_manifest_root_content_paths_to_markup_location_raw_ ~= + _path ~ "\n"; } - if ("filename" in pod_manifest_yaml["doc"]) { - if (pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_seq)) { - foreach (string _filename; pod_manifest_yaml["doc"]["filename"]) { - if ("language" in pod_manifest_yaml["doc"]) { - if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) { - foreach (string _lang; pod_manifest_yaml["doc"]["language"]) { - markup_contents_location_ ~= - "media/text/" - ~ _lang ~ "/" - ~ _filename ~ "\n"; - } - } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str) - ) { - markup_contents_location_ = - "media/text/" - ~ pod_manifest_yaml["doc"]["language"].get!string - ~ "/" ~ _filename ~ "\n"; - } else { - string _lang_default = "en"; - markup_contents_location_ ~= - "media/text/" - ~ _lang_default ~ "/" - ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; - } - } else { - string _lang_default = "en"; - markup_contents_location_ ~= - "media/text/" - ~ _lang_default ~ "/" - ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; - } - } - } else if ( - pod_manifest_yaml["doc"]["filename"].type.string - && pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_str) - ) { - if ("language" in pod_manifest_yaml["doc"]) { - if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) { - foreach (string _lang; pod_manifest_yaml["doc"]["language"]) { - markup_contents_location_ ~= - "media/text/" - ~ _lang ~ "/" - ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; - } - } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str)) { - markup_contents_location_ = - "media/text/" - ~ pod_manifest_yaml["doc"]["language"].get!string - ~ "/" ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; - } else { - string _lang_default = "en"; + } else if ( + pod_manifest_yaml["doc"]["path"].type.string + && pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_str) + ) { + markup_contents_location_ = pod_manifest_yaml["doc"]["path"].get!string; + pod_manifest_root_content_paths_to_markup_location_raw_ = + pod_manifest_yaml["doc"]["path"].get!string; + } + } + if ("filename" in pod_manifest_yaml["doc"]) { + if (pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_seq)) { + foreach (string _filename; pod_manifest_yaml["doc"]["filename"]) { + if ("language" in pod_manifest_yaml["doc"]) { + if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) { + foreach (string _lang; pod_manifest_yaml["doc"]["language"]) { markup_contents_location_ ~= "media/text/" - ~ _lang_default ~ "/" - ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; + ~ _lang ~ "/" + ~ _filename ~ "\n"; } + } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str) + ) { + markup_contents_location_ = + "media/text/" + ~ pod_manifest_yaml["doc"]["language"].get!string + ~ "/" ~ _filename ~ "\n"; } else { string _lang_default = "en"; markup_contents_location_ ~= @@ -1195,11 +1184,47 @@ foreach(arg; args[1..$]) { ~ _lang_default ~ "/" ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; } + } else { + string _lang_default = "en"; + markup_contents_location_ ~= + "media/text/" + ~ _lang_default ~ "/" + ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; } } + } else if ( + pod_manifest_yaml["doc"]["filename"].type.string + && pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_str) + ) { + if ("language" in pod_manifest_yaml["doc"]) { + if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) { + foreach (string _lang; pod_manifest_yaml["doc"]["language"]) { + markup_contents_location_ ~= + "media/text/" + ~ _lang ~ "/" + ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; + } + } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str)) { + markup_contents_location_ = + "media/text/" + ~ pod_manifest_yaml["doc"]["language"].get!string + ~ "/" ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; + } else { + string _lang_default = "en"; + markup_contents_location_ ~= + "media/text/" + ~ _lang_default ~ "/" + ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; + } + } else { + string _lang_default = "en"; + markup_contents_location_ ~= + "media/text/" + ~ _lang_default ~ "/" + ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n"; + } } } - } catch (ErrnoException ex) { } } } catch (ErrnoException ex) { @@ -1260,7 +1285,7 @@ foreach(arg; args[1..$]) { #+NAME: spine_each_file_do_scope #+BEGIN_SRC d scope(success) { - if (_opt_action.vox_gt0) { writeln("-- ~ document complete, ok ~ ------------------------------------"); } + if (_opt_action.vox_gt_1) { writeln("-- ~ document complete, ok ~ ------------------------------------"); } } scope(failure) { debug(checkdoc) { @@ -1377,7 +1402,7 @@ if (doc.matters.opt.action.curate) { } else { if ((doc.matters.opt.action.debug_do) || (_opt_action.debug_do_curate) - || (doc.matters.opt.action.vox_gt2) + || (doc.matters.opt.action.vox_gt_3) ) { writeln("WARNING curate: document header yaml does not contain information related to: title or author: ", _hvst.path_html_segtoc); } @@ -1426,7 +1451,7 @@ if (!(doc.matters.opt.action.skip_output)) { #+NAME: spine_each_file_do_scope_exit #+BEGIN_SRC d scope(exit) { - if (_opt_action.vox_gt0) { + if (_opt_action.vox_gt_1) { writefln( "processed file: %s [%s]", manifest.src.filename, @@ -1825,7 +1850,24 @@ if ((_opt_action.debug_do) } #+END_SRC -* document header including copyright & license +* 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 diff --git a/org/spine_info.org b/org/spine_info.org index a2078fe..7459672 100644 --- a/org/spine_info.org +++ b/org/spine_info.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -77,7 +77,7 @@ <<sisudoc_spine_README_command_examples_populate_db_text>> -,*** generate a cgi search form in d +,*** generate a cgi search form <<sisudoc_spine_README_command_examples_search_db_cgi_text>> @@ -85,7 +85,7 @@ <<sisudoc_spine_README_command_examples_compile_search_db_cgi_text>> -,*** create db & search form +,*** create db <<sisudoc_spine_README_command_examples_create_db_and_search_form_text>> @@ -129,7 +129,7 @@ ,#+PROPERTY: header-args :exports code ,#+PROPERTY: header-args+ :noweb yes ,#+PROPERTY: header-args+ :eval no -,#+PROPERTY: header-args+ :results no +,#+PROPERTY: header-args+ :results output none ,#+PROPERTY: header-args+ :cache no ,#+PROPERTY: header-args+ :padline no #+END_SRC @@ -196,7 +196,7 @@ <<sisudoc_spine_README_command_examples_compile_search_db_cgi_text>> -### create db & search form +### create db <<sisudoc_spine_README_command_examples_create_db_and_search_form_text>> @@ -299,7 +299,7 @@ Make a directory and clone the sisudoc-spine project git clone --depth 1 git://git.sisudoc.org/software/sisudoc-spine-search-cgi && \ git clone --depth 1 git://git.sisudoc.org/markup/sisudoc-spine-samples -such a relative directory layout will be assumed in the examples that provided +such a relative directory layout will be assumed in the examples provided all work in this installation of and use of sisudoc-spine will take place in the directory: sisudoc-spine @@ -624,23 +624,16 @@ for a document collection you can point to the document collection: #+NAME: sisudoc_spine_README_command_examples_search_db_cgi_text #+BEGIN_SRC text -spine -v --cgi-search-form-codegen \ - --output=/var/www/html \ - ~spineMarkupSamples/pod - -spine -v --cgi-search-form-codegen --config=~spineMarkupSamples/pod - -spine -v --cgi-search-form-codegen --config=~spineMarkupSamples/pod/.dr/config_local_site - -spine --cgi-search-form-codegen --output=`echo ~webDocRoot` ~spineMarkupSamples/pod +The CGI search form is built separately in the sisudoc-spine-search-cgi/ directory. -spine --cgi-search-form-codegen --cgi-sqlite-search-filename="spine_search" --output=`echo ~webDocRoot` +Steps: +1. Clone the sisudoc-spine-search-cgi repository +2. Configure views/configuration.txt with your web server settings +3. Build the CGI binary using Nix or dub +4. Deploy the CGI binary to your web server's cgi-bin directory -spine -v --cgi-search-form-codegen \ - --sqlite-db-filename="spine.search.db" \ - --cgi-sqlite-search-filename="spine-search" \ - --output=/var/www/html \ - ~spineMarkupSamples/pod +For detailed instructions, see: + sisudoc-spine-search-cgi/README.md #+END_SRC #+NAME: sisudoc_spine_README_command_examples_compile_search_db_cgi_text @@ -676,9 +669,10 @@ cgi-bin directory #+BEGIN_SRC text spine -v \ --sqlite-db-create --sqlite-db-filename="spine.search.db" \ - --cgi-search-form-codegen --cgi-sqlite-search-filename="spine-search" \ --output=/var/www/html \ ~spineMarkupSamples/pod/* + +Note: The CGI search form is built separately in the sisudoc-spine-search-cgi/ directory. #+END_SRC #+NAME: sisudoc_spine_README_command_examples_html_with_links_to_search_form_text @@ -1166,3 +1160,30 @@ git log --pretty=format:'-_-%+s %+as %ae%+h%d%+b' --no-merges \ git log --pretty=format:"-_-_%+s %+as %ae%+h%d%+b" --no-merges \ > ${CHL} && sed -i '/^$/d; s/^\([ ]\)*\*/\1-/; s/ \+$//; s/^-_-_//' ${CHL} #+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__ diff --git a/org/spine_markup_sample.org b/org/spine_markup_sample.org index d0381ac..60c6272 100644 --- a/org/spine_markup_sample.org +++ b/org/spine_markup_sample.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes @@ -1300,7 +1300,7 @@ code(number){ 3~ Tables ={ SiSU markup:tables;tables } -Tables may be prepared in two either of two forms +Tables may be prepared in either of two forms !_ resulting output: diff --git a/org/util_spine_markup_conversion_from_sisu.org b/org/util_spine_markup_conversion_from_sisu.org index 56f79dd..5122032 100644 --- a/org/util_spine_markup_conversion_from_sisu.org +++ b/org/util_spine_markup_conversion_from_sisu.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes diff --git a/org/util_spine_syntax_highlighting_emacs.org b/org/util_spine_syntax_highlighting_emacs.org index 7272faf..cde92fb 100644 --- a/org/util_spine_syntax_highlighting_emacs.org +++ b/org/util_spine_syntax_highlighting_emacs.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes diff --git a/org/util_spine_syntax_highlighting_vim.org b/org/util_spine_syntax_highlighting_vim.org index b66b67d..c62fc1e 100644 --- a/org/util_spine_syntax_highlighting_vim.org +++ b/org/util_spine_syntax_highlighting_vim.org @@ -9,7 +9,7 @@ #+STARTUP: content hideblocks hidestars noindent entitiespretty #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes -#+PROPERTY: header-args+ :results no +#+PROPERTY: header-args+ :results output none #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes |
