diff options
Diffstat (limited to 'org')
-rw-r--r-- | org/config_env.org | 20 | ||||
-rw-r--r-- | org/config_git.org | 1 | ||||
-rw-r--r-- | org/config_nix.org | 28 | ||||
-rw-r--r-- | org/default_regex.org | 7 | ||||
-rw-r--r-- | org/ocda_functions.org | 4 | ||||
-rw-r--r-- | org/out_text.org | 69 | ||||
-rw-r--r-- | org/spine.org | 4 |
7 files changed, 87 insertions, 46 deletions
diff --git a/org/config_env.org b/org/config_env.org index 73a478a..3e622ee 100644 --- a/org/config_env.org +++ b/org/config_env.org @@ -39,6 +39,8 @@ if [ -f .envrc-git-init ]; then 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 @@ -122,6 +124,8 @@ echo ' ❯❯ ${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 ./markup/pod/* + + ❯❯ $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}/* @@ -140,6 +144,19 @@ 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 @@ -164,6 +181,9 @@ 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' diff --git a/org/config_git.org b/org/config_git.org index fd0f037..771f7bc 100644 --- a/org/config_git.org +++ b/org/config_git.org @@ -45,6 +45,7 @@ !CHANGELOG !makefile !version.txt +!,version !configuration.txt !*.json !*.sdl diff --git a/org/config_nix.org b/org/config_nix.org index 9454cb3..d7e0e92 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -66,6 +66,7 @@ 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` $out/bin/spine -v ''; @@ -233,7 +234,14 @@ shellHook = '' 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'; + 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)" + 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; { @@ -248,6 +256,8 @@ dtools gnumake sqlite + gnused + ripgrep ]; inherit shellHook; }; @@ -261,6 +271,8 @@ dtools gnumake sqlite + gnused + ripgrep ]; inherit shellHook; }; @@ -274,6 +286,8 @@ dtools gnumake sqlite + gnused + ripgrep ]; inherit shellHook; }; @@ -287,6 +301,8 @@ dtools gnumake sqlite + gnused + ripgrep ]; inherit shellHook; }; @@ -329,6 +345,8 @@ calibre #(suite includes: ebook-viewer) koreader foliate + gnused + ripgrep ]; inherit shellHook; }; @@ -350,6 +368,8 @@ w3m # ❯❯ light graphical #dillo + gnused + ripgrep ]; inherit shellHook; }; @@ -367,6 +387,8 @@ source-serif-pro source-code-pro texlive.combined.scheme-full + gnused + ripgrep ]; inherit shellHook; }; @@ -381,6 +403,8 @@ dtools gnumake sqlite + gnused + ripgrep ]; inherit shellHook; }; @@ -396,6 +420,8 @@ gnumake sqlite perl538Packages.Po4a + gnused + ripgrep ]; inherit shellHook; }; diff --git a/org/default_regex.org b/org/default_regex.org index 5a1842f..1c0ca2f 100644 --- a/org/default_regex.org +++ b/org/default_regex.org @@ -601,10 +601,8 @@ static inline_notes_al = ctRegex!(`【(?:[*+]\s+|\s*)(. static inline_notes_al_special = ctRegex!(`【(?:[*+]\s+)(.+?)】`, "mg"); // TODO remove match when special footnotes are implemented static inline_notes_al_gen = ctRegex!(`【.+?】`, "m"); static inline_notes_al_gen_text = ctRegex!(`【(?P<text>.+?)】`, "m"); -static inline_notes_al_all_note = ctRegex!(`【(?P<num>\d+|(?:[*]|[+])+)\s+(?P<note>.+?)\s*(≫\s\d+)?\s*】`, "mg"); // ocn of origin would be useful in endnote section -static inline_notes_al_regular_number_note = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)\s*(≫\s\d+)?\s*】`, "mg"); // ocn of origin would be useful in endnote section -// static inline_notes_al_all_note = ctRegex!(`【(?P<num>\d+|(?:[*]|[+])+)\s+(?P<note>.+?)\s*】`, "mg"); -// static inline_notes_al_regular_number_note = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)\s*】`, "mg"); +static inline_notes_al_all_note = ctRegex!(`【(?P<num>\d+|(?:[*]|[+])+)\s+(?P<note>.+?)\s*】`, "mg"); +static inline_notes_al_regular_number_note = ctRegex!(`【(?P<num>\d+)\s+(?P<note>.+?)\s*】`, "mg"); static inline_notes_al_special_char_note = ctRegex!(`【(?P<char>(?:[*]|[+])+)\s+(?P<note>.+?)】`, "mg"); static inline_al_delimiter_open_regular = ctRegex!(`【\s`, "m"); static inline_al_delimiter_open_symbol_star = ctRegex!(`【[*]\s`, "m"); @@ -636,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"); diff --git a/org/ocda_functions.org b/org/ocda_functions.org index 16de3f0..0b997b7 100644 --- a/org/ocda_functions.org +++ b/org/ocda_functions.org @@ -4460,7 +4460,7 @@ ST_the_section build_the_blurb_section(Opt) ( 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"] ~ " ≫" ~ obj.metainfo.ocn.to!string; + _notes ~= "\n\n" ~ m["num"] ~ ". " ~ m["note"]; notes_[(m["num"])]["ocn"] = obj.metainfo.ocn.to!string; } } @@ -4474,7 +4474,7 @@ ST_the_section build_the_blurb_section(Opt) ( foreach (ref obj; the_document_endnotes_section) { auto matches = (obj.text).matchAll(rgx.endnote_section_note); foreach (m; matches) { - obj.text = m.hit ~ " ≫" ~ notes_[(m["notenumber"])]["ocn"]; + obj.metainfo.parent_ocn = notes_[(m["notenumber"])]["ocn"].to!int; } } foreach (ref obj; the_document_endnotes_section) { diff --git a/org/out_text.org b/org/out_text.org index df5ccb2..02d6294 100644 --- a/org/out_text.org +++ b/org/out_text.org @@ -212,8 +212,7 @@ template munge() { string newlines = "\n\n"; template special_characters_and_font_face() { string code(string _txt){ - _txt = _txt - .replaceAll(rgx.nbsp_char, " "); + _txt = _txt.replaceAll(rgx.nbsp_char, " "); return _txt; } string general(string _txt) { @@ -235,21 +234,16 @@ template munge() { return _txt; } string links_and_images(string _txt){ - if (_txt.matchFirst(rgx.inline_link)) { + if (_txt.match(rgx.inline_link)) { foreach (m; _txt.matchAll(rgx.inline_link)) { - if (m.captures[3] == "0") { - _txt = _txt - .replaceFirst(rgx.inline_link, (m.captures[1])); - } else { - _txt = _txt - .replaceFirst(rgx.inline_link, (m.captures[1] ~ " ≫" ~ m.captures[3])); - } + _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])); + _txt = _txt.replaceFirst(rgx.inline_image, (m.captures[3])); } } return _txt; @@ -260,28 +254,22 @@ template munge() { string _notes; string _ocn; string general_munge; - if (obj.metainfo.ocn == 0 || doc_matters.opt.action.ocn_off) { - _ocn = ""; - } else { - _ocn = "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newline; - } + _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"] ~ ". " ~ m["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]"); - if (obj.metainfo.is_a == "code") { - _txt = special_characters_and_font_face!().code(_txt); - } else { - _txt = special_characters_and_font_face!().general(_txt); - } + _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); - if (obj.metainfo.is_a == "heading") { - general_munge = newline ~ _txt ~ _notes ~ newline ~ _ocn ~ newline; - } else { - general_munge = _txt ~ _notes ~ newline ~ _ocn ~ newline; - } + 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) { @@ -310,7 +298,9 @@ template munge() { default: break; } - _txt = _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1 ≫ $3")); + _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) { @@ -454,19 +444,24 @@ template munge() { string _ocn; _ocn = "「" ~ obj.metainfo.ocn.to!string ~ "」"; string _txt = obj.text; + string _parent_ocn; _txt = _txt - .replaceFirst(rgx.inline_link, ("$1")) - .replaceFirst(rgx.inline_superscript, ("$1")); - _txt = special_characters_and_font_face!().general(_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 = _txt - .replaceAll(rgx.inline_link, ("≫$1")) - .replaceAll(regex("\\s*\\\\"), ""); + _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; } @@ -543,7 +538,6 @@ TODO WISH - underline headings? -- endnote info on calling object ≫\d+ - break para text at set width? - text wrap at text-line-width specified option @@ -561,8 +555,7 @@ DONE - verse - table - endnote section - - CAVEAT: would like to, but do not point back to object number of origin - REDO gathering of endnotes, (get/tie calling ocn) + - 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 diff --git a/org/spine.org b/org/spine.org index 8f0af14..9971dc2 100644 --- a/org/spine.org +++ b/org/spine.org @@ -321,6 +321,7 @@ bool[string] opts = [ "light" : false, "manifest" : false, "hide-ocn" : false, + "no-ocn" : false, "ocn-off" : false, "odf" : false, "odt" : false, @@ -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"], @@ -675,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"]; |