diff options
41 files changed, 1530 insertions, 5297 deletions
| @@ -2,8 +2,9 @@  #./.dub/**  *  !.gitignore +!README.md  !COPYRIGHT -!README +!CHANGELOG  !makefile  !version.txt  !dub.json @@ -43,6 +43,110 @@    - Hompages:      [http://www.sisudoc.org] +- Dependencies [check dub.json or dub.sdl] + +  - Name: d2sqlite3 +    - Description: +      This is a small wrapper around SQLite for the D programming language. + +    - Author: +      [Nicolas Sicard] +      [https://github.com/dlang-community/d2sqlite3/graphs/contributors] + +    - Copyright: (C) 2011-2018, Nicolas Sicard + +    - code: +      - License: BSL-1.0 +        Boost Software License 1.0 +        [http://www.boost.org/LICENSE_1_0.txt] + +    - Hompages: +      [https://github.com/dlang-community/d2sqlite3] +      [https://code.dlang.org/packages/d2sqlite3] + +  - Name: dyaml +    - Description: +      D:YAML is an open source YAML parser and emitter library for the D programming language. + +    - Author: +      [Ferdinand Majerech] + +    - Copyright: (C) 2011-2018, Ferdinand Majerech + +    - code: +      - License: BSL-1.0 +        Boost Software License 1.0 +        [http://www.boost.org/LICENSE_1_0.txt] + +    - Hompages: +      [https://github.com/dlang-community/D-YAML] +      [https://code.dlang.org/packages/dyaml] + +  - Name: imageformats +    - Description: + +    - Author: +      [Tero Hänninen] + +    - Copyright: (C) Tero Hänninen + +    - code: +      - License: BSL-1.0 +        Boost Software License 1.0 +        [http://www.boost.org/LICENSE_1_0.txt] + +    - Hompages: +      [https://github.com/lgvz/imageformats] +      [https://code.dlang.org/packages/imageformats] + +  - Name: tinyendian (dyaml dependency) +    - Description: +      TinyEndian is a minimal endianness library for the D programming language. + +    - Author: +      [Ferdinand Majerech] + +    - Copyright: (C) 2014, Ferdinand Majerech + +    - code: +      - License: BSL-1.0 +        Boost Software License 1.0 +        [http://www.boost.org/LICENSE_1_0.txt] + +    - Hompages: +      [https://github.com/dlang-community/tinyendian] +      [http://code.dlang.org/packages/tinyendian] + +- Name: cgi.d +  - Description: + +  - Author: +    [Adam D. Ruppe] + +  - Copyright: (C) Adam D. Ruppe 2008 - 2020 + +  - code: cgi.d (copy in ./misc/ext_lib/src/arsd/) +    aria2c https://raw.githubusercontent.com/adamdruppe/arsd/master/cgi.d + +    - License: BSL-1.0 +      Boost Software License 1.0 +      [http://www.boost.org/LICENSE_1_0.txt] +      (Check the bottom of the file for details) + +  - Hompages: +    [https://github.com/adamdruppe/arsd] + + +- Name: dub2nix +  - Description: + +  - Author: +    [] + +  - Copyright: (C) + +  - code: mkDub.nix (modified as needed) +    - License:  - Spine, Doc Reform (SiSU) markup samples    Individual document content Copyright (Author) [as stated in document header] @@ -1,4 +1,5 @@  project_name:  Spine, Doc Reform +    description: [        "documents, structuring, processing, publishing",        search, @@ -78,9 +78,6 @@ data/sisudir/media/text/through_the_looking_glass.lewis_carroll.sst \  data/sisudir/media/text/two_bits.christopher_kelty.sst \  data/sisudir/media/text/un_contracts_international_sale_of_goods_convention_1980.sst \  data/sisudir/media/text/viral_spiral.david_bollier.sst -dub_upgrade: -	$(DUB) upgrade -default: ldc  markup_samples:  	find data/pod -name pod.manifest | cut -f 1-3 -d / | sort; \  find data/sisudir/media/text -name *.ss[tm] | sort @@ -88,6 +85,9 @@ markup_pod_samples:  	find data/pod -name pod.manifest | cut -f 1-3 -d / | sort  markup_dir_samples:  	find data/sisudir/media/text -name *.ss[tm] | sort +dub_upgrade: +	$(DUB) upgrade +default: ldc  all: dmd ldc gdc  all_ver: dmd_ver ldc_ver gdc_ver  all_debug: dmd_debug gdc_debug ldc_debug diff --git a/org/compile_time_info.org b/org/compile_time_info.org index e09409e..59ea6a4 100644 --- a/org/compile_time_info.org +++ b/org/compile_time_info.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -30,7 +31,8 @@ version(Windows) {} else { ... }  +/  module doc_reform.conf.compile_time_info;  template CompileTimeInfo() { -  <<spine_compile_time_info>> +  <<spine_compile_time_info_0>> +  <<spine_compile_time_info_1>>  }  #+END_SRC @@ -39,7 +41,7 @@ OS type shows during compilation  *** set os flags -#+NAME: spine_compile_time_info +#+NAME: spine_compile_time_info_0  #+BEGIN_SRC d  version(Windows) {    pragma(msg, "[ Windows compilation ]"); @@ -97,7 +99,7 @@ static if(sysWindows) {  ** 64 bit compilation? -#+NAME: spine_compile_time_info +#+NAME: spine_compile_time_info_1  #+BEGIN_SRC d  version(D_LP64) {    enum bits = "64 bit"; diff --git a/org/default_misc.org b/org/default_misc.org index 615f480..eb58fb2 100644 --- a/org/default_misc.org +++ b/org/default_misc.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/default_paths.org b/org/default_paths.org index f0881da..5c4e15e 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -35,7 +36,10 @@ import  import    doc_reform.meta.defaults,    doc_reform.meta.rgx; -<<template_paths_src>> +<<template_paths_src_0>> +<<template_paths_src_1>> +<<template_paths_src_2>> +<<template_paths_src_3>>  <<template_paths_pod>>  <<template_paths_pod_shallow>>  <<template_paths_pods>> @@ -43,7 +47,7 @@ import  ** _manifest_                                                        :manifest: -#+NAME: template_paths_src +#+NAME: template_paths_src_0  #+BEGIN_SRC d  template PodManifest() {    mixin spineRgxIn; @@ -118,7 +122,7 @@ pod      │   └── video      └── pod.manifest -#+NAME: template_paths_src +#+NAME: template_paths_src_1  #+BEGIN_SRC d  template PathMatters() {    mixin spineRgxIn; @@ -466,7 +470,7 @@ template PathMatters() {  ** _config_ (dr_document_make & config_local_site)                         :config: -#+NAME: template_paths_src +#+NAME: template_paths_src_2  #+BEGIN_SRC d  template configFilePaths() {    mixin spineRgxIn; @@ -639,7 +643,7 @@ filelist for processing [things to ponder]  *** manual source -#+NAME: template_paths_src +#+NAME: template_paths_src_3  #+BEGIN_SRC d  template spinePathsSRC() {    mixin spineRgxIn; @@ -971,13 +975,18 @@ import    std.regex,    std.stdio;  import doc_reform.meta.rgx; -<<template_paths_out>> +<<template_paths_out_0>> +<<template_paths_out_1>>  <<template_paths_url>> -<<template_paths_html>> +<<template_paths_html_0>> +<<template_paths_html_1>> +<<template_paths_html_2>>  <<template_paths_epub>>  <<template_paths_odf>>  <<template_paths_latex>> -<<template_paths_sqlite>> +<<template_paths_sqlite_0>> +<<template_paths_sqlite_1>> +<<template_paths_sqlite_2>>  #+END_SRC  ** shared out path, base directory                                      :out: @@ -990,7 +999,7 @@ import doc_reform.meta.rgx;    - if pod and file have same name, keep name (makes no sense to repeat pod      name) NO dr_markup.sisu_markup should be sisu_markup -#+NAME: template_paths_out +#+NAME: template_paths_out_0  #+BEGIN_SRC d  template spineOutPaths() {    auto spineOutPaths()( @@ -1048,7 +1057,7 @@ template spineOutPathSQLiteCGI() {  ** set -#+NAME: template_paths_out +#+NAME: template_paths_out_1  #+BEGIN_SRC d  template spineOutPathsFnPd() {    /+ TODO stuff to work out here +/ @@ -1092,7 +1101,7 @@ template spineOutPathsFnPd() {  ** _html_                                                                :html:  *** relative -#+NAME: template_paths_html +#+NAME: template_paths_html_0  #+BEGIN_SRC d  template spineDocRootTreeHTML() {    mixin spineRgxIn; @@ -1158,7 +1167,7 @@ template spineDocRootTreeHTML() {  *** absolute disk path -#+NAME: template_paths_html +#+NAME: template_paths_html_1  #+BEGIN_SRC d  template spinePathsHTML() {    mixin spineRgxIn; @@ -1224,7 +1233,7 @@ template spinePathsHTML() {  *** urls -#+NAME: template_paths_html +#+NAME: template_paths_html_2  #+BEGIN_SRC d  template spineUrlsHTML() {    import std.format; @@ -1553,7 +1562,7 @@ template spinePathsLaTeX() {  ** _sqlite_                                                            :sqlite:  *** discrete -#+NAME: template_paths_sqlite +#+NAME: template_paths_sqlite_0  #+BEGIN_SRC d  template spinePathsSQLiteDiscrete() {    mixin spineRgxIn; @@ -1585,7 +1594,7 @@ template spinePathsSQLiteDiscrete() {  *** TODO collection -#+NAME: template_paths_sqlite +#+NAME: template_paths_sqlite_1  #+BEGIN_SRC d  template spinePathsSQLite() {    mixin spineRgxIn; @@ -1614,7 +1623,7 @@ template spinePathsSQLite() {  *** TODO cgi search form -#+NAME: template_paths_sqlite +#+NAME: template_paths_sqlite_2  #+BEGIN_SRC d  template spinePathsSQLiteCGI() {    mixin spineRgxIn; diff --git a/org/default_regex.org b/org/default_regex.org index d9020d4..d78409e 100644 --- a/org/default_regex.org +++ b/org/default_regex.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -37,15 +38,45 @@ http://dlang.org/phobos/std_regex.html  module doc_reform.meta.rgx;  static template spineRgxIn() {    static struct RgxI { -    <<meta_rgx>> -    <<prgmkup_rgx>> +    <<meta_rgx_0>> +    <<meta_rgx_1>> +    <<meta_rgx_2>> +    <<meta_rgx_3>> +    <<meta_rgx_4>> +    <<meta_rgx_5>> +    <<meta_rgx_6>> +    <<meta_rgx_7>> +    <<meta_rgx_8>> +    <<meta_rgx_9>> +    <<meta_rgx_10>> +    <<meta_rgx_11>> +    <<meta_rgx_12>> +    <<meta_rgx_13>> +    <<meta_rgx_14>> +    <<meta_rgx_15>> +    <<meta_rgx_16>> +    <<meta_rgx_17>> +    <<meta_rgx_18>> +    <<meta_rgx_19>> +    <<meta_rgx_20>> +    <<meta_rgx_21>> +    <<meta_rgx_22>> +    <<prgmkup_rgx_0>> +    <<prgmkup_rgx_1>> +    <<prgmkup_rgx_2>> +    <<prgmkup_rgx_3>> +    <<prgmkup_rgx_4>> +    <<prgmkup_rgx_5>> +    <<prgmkup_rgx_6>> +    <<prgmkup_rgx_7>> +    <<prgmkup_rgx_8>>    }  }  #+END_SRC  ** misc                                                                :misc: -#+NAME: meta_rgx +#+NAME: meta_rgx_0  #+BEGIN_SRC d  /+ misc +/  // static true_dollar                                    = ctRegex!(`\$`, "gm"); @@ -84,7 +115,7 @@ static numeric_col                                    = ctRegex!(`^[ 0-9,.%$£  ** comments                                                         :comment: -#+NAME: meta_rgx +#+NAME: meta_rgx_1  #+BEGIN_SRC d  /+ comments +/  static comment                                        = ctRegex!(`^%+ `); @@ -92,7 +123,7 @@ static comment                                        = ctRegex!(`^%+ `);  ** config -#+NAME: meta_rgx +#+NAME: meta_rgx_2  #+BEGIN_SRC d  /+ header +/  #+END_SRC @@ -100,7 +131,7 @@ static comment                                        = ctRegex!(`^%+ `);  ** native headers  *** native header                                             :native:header: -#+NAME: meta_rgx +#+NAME: meta_rgx_3  #+BEGIN_SRC d  /+ header +/  static variable_doc_title                             = ctRegex!(`@title`); @@ -112,7 +143,7 @@ static yaml_config                                    = ctRegex!(`^[a-z]+\s*:\s*  ** heading & paragraph operators                         :paragraph:operator: -#+NAME: meta_rgx +#+NAME: meta_rgx_4  #+BEGIN_SRC d  /+ heading & paragraph operators +/  static heading_a                                      = ctRegex!(`^:?[A][~] `, "m"); @@ -141,7 +172,7 @@ static para_inline_link_anchor                        = ctRegex!(`\*[~](?P<ancho  ** blocked markup  *** blocked markup curly & tic                                        :block: -#+NAME: meta_rgx +#+NAME: meta_rgx_5  #+BEGIN_SRC d  /+ blocked markup +/  static block_open                                     = ctRegex!("^((code(?:[.][a-z][0-9a-z#+_]+)?|(?:poem|group|block|quote)(?:[.][a-z][0-9a-z_]+)?|table)(?:[(][ a-zA-Z0-9;:,]*[)])?[{][ ]*$)|^`{3} (code(?:[.][a-z][0-9a-z#+_]+)?|(?:poem|group|block|quote)(?:[.][a-z][0-9a-z_]+)?|table)(?:[(][ a-zA-Z0-9;:,]*[)])?|^[{]table[(](?:h;)?(?P<columns>(?:[ ,]+[0-9]+)+)[)][}]"); @@ -150,7 +181,7 @@ static block_poem_open                                = ctRegex!("^((poem(?:[(][  *** blocked markup tic                                            :block:tic: -#+NAME: meta_rgx +#+NAME: meta_rgx_6  #+BEGIN_SRC d  /+ blocked markup tics +/  static block_tic_code_open                            = ctRegex!("^`{3} code(?:[.](?P<syntax>[a-z][0-9a-z#+_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?"); @@ -164,7 +195,7 @@ static block_tic_close                                = ctRegex!("^(`{3})$","m")  *** blocked markup curly                                        :block:curly: -#+NAME: meta_rgx +#+NAME: meta_rgx_7  #+BEGIN_SRC d  /+ blocked markup curly +/  static block_curly_code_open                          = ctRegex!(`^(?:code(?:[.](?P<syntax>[a-z][0-9a-z_]+))?(?:[(](?P<attrib>[ a-zA-Z0-9;:,]*)[)])?[{][ ]*$)`); @@ -185,14 +216,14 @@ static block_curly_table_special_markup               = ctRegex!(`^[{]table[(](?  *** block sub-matches                                                 :block:  **** code -#+NAME: meta_rgx +#+NAME: meta_rgx_8  #+BEGIN_SRC d  static code_numbering                                 = ctRegex!(`(?P<number>\blinenumber\b|\bnumber\b|\blnr\b)`);  #+END_SRC  **** table -#+NAME: meta_rgx +#+NAME: meta_rgx_9  #+BEGIN_SRC d  static table_head_instructions                        = ctRegex!(`(?:(?P<c_heading>h);)?(?:[ ]+c(?P<c_num>[0-9]):)?(?P<c_widths>(?:[, ]+[0-9]+[lr]?)+)`);  static table_col_widths_and_alignment                 = ctRegex!(`(?P<width>[0-9]+)(?P<align>[lr]?)`); @@ -206,7 +237,7 @@ static table_col_separator_nl                         = ctRegex!(`[┊]$`, "mg")  ** inline markup                                            :inline:footnote:  *** footnotes & endnotes -#+NAME: meta_rgx +#+NAME: meta_rgx_10  #+BEGIN_SRC d  /+ inline markup footnotes endnotes +/  static inline_notes_curly_gen                         = ctRegex!(`~\{.+?\}~`, "m"); @@ -224,7 +255,7 @@ static note_ref                                       = ctRegex!(`^\S+?noteref_(  *** links/ urls                                             :inline:footnote: -#+NAME: meta_rgx +#+NAME: meta_rgx_11  #+BEGIN_SRC d  static webserv_url_doc_root                           = ctRegex!(`(?P<url>(?P<domain>https?:\/\/[^ /]+)\/(?P<path>\S*))`, "mg");  static smid_inline_url_generic                        = ctRegex!(`(?:^|[}(\[ ])(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_#]`, "mg"); @@ -237,7 +268,7 @@ static smid_inline_link_endnote_url_helper            = ctRegex!(`\{~\^\s+(?P<co  *** images                                                           :images: -#+NAME: meta_rgx +#+NAME: meta_rgx_12  #+BEGIN_SRC d  static image                                           = ctRegex!(`([a-zA-Z0-9._-]+?\.(?:png|gif|jpg))`, "mg");  static smid_image                                      = ctRegex!(`(?P<pre>(?:^|[ ]|[^\S]?)[{┥](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))(?P<post>(?:.*?)\s*[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg"); @@ -250,7 +281,7 @@ static smid_image_delimit                              = ctRegex!(`(?P<pre>^|[ ]  *** inline markup book index                               :inline:bookindex: -#+NAME: meta_rgx +#+NAME: meta_rgx_13  #+BEGIN_SRC d  /+ inline markup book index +/  static book_index_item                                = ctRegex!(`^=\{\s*(?P<bookindex>.+?)\}$`, "m"); @@ -261,7 +292,7 @@ static book_index_item_close                          = ctRegex!(`^(.*?)\}$`, "m  ** switch  *** switch off auto-heading number -#+NAME: meta_rgx +#+NAME: meta_rgx_14  #+BEGIN_SRC d  static auto_heading_numbering_lv1                    = ctRegex!(`^1~`, "m");  static auto_heading_numbering_lv2                    = ctRegex!(`^2~`, "m"); @@ -276,7 +307,7 @@ static auto_heading_numbering_off_lv4                = ctRegex!(`^4~\S*?-\s`, "m  ** no object_number object                                    :ocn:off:object: -#+NAME: meta_rgx +#+NAME: meta_rgx_15  #+BEGIN_SRC d  /+ no object_number object +/  static object_number_off                            = ctRegex!(`~#[ ]*$`, "m"); @@ -287,7 +318,7 @@ static repeated_character_line_separator            = ctRegex!(`^(?:[ ]*(?:(?:[.  ** no object_number block                                      :ocn:off:block: -#+NAME: meta_rgx +#+NAME: meta_rgx_16  #+BEGIN_SRC d  /+ no object_number block +/  static object_number_off_block                      = ctRegex!(`^--~#$`); @@ -298,7 +329,7 @@ static object_number_block_marks                    = ctRegex!(`^--[+~-]#$`);  ** ignore outside code blocks                                    :block:code: -#+NAME: meta_rgx +#+NAME: meta_rgx_17  #+BEGIN_SRC d  /+ ignore outside code blocks +/  static skip_from_regular_parse    = ctRegex!(`^(--[+~-]#|-[\\]{2}-|=[.\\]{2}=)$`); @@ -306,7 +337,7 @@ static skip_from_regular_parse    = ctRegex!(`^(--[+~-]#|-[\\]{2}-|=[.\\]{2}=)$`  ** line & page breaks                                                 :break: -#+NAME: meta_rgx +#+NAME: meta_rgx_18  #+BEGIN_SRC d  /+ line & page breaks +/  static break_string                                   = ctRegex!(`』`); @@ -314,7 +345,7 @@ static break_string                                   = ctRegex!(`』`);  ** biblio tags                                                  :biblio:tags: -#+NAME: meta_rgx +#+NAME: meta_rgx_19  #+BEGIN_SRC d  /+ biblio tags +/  static biblio_tags                                    = ctRegex!(`^(is|au|author_raw|author|author_arr|editor_raw|ed|editor_arr|ti|title|subtitle|fulltitle|lng|language|trans|src|jo|journal|in|vol|volume|edn|edition|yr|year|pl|place|pb|pub|publisher|url|pg|pages|note|short_name|id):\s+(.+)`); @@ -323,7 +354,7 @@ static biblio_abbreviations                           = ctRegex!(`^(au|ed|ti|lng  ** bookindex split                                          :bookindex:split: -#+NAME: meta_rgx +#+NAME: meta_rgx_20  #+BEGIN_SRC d  /+ bookindex split +/  static bi_main_terms_split                            = ctRegex!(`\s*;\s*`); @@ -334,7 +365,7 @@ static bi_term_and_object_numbers_match               = ctRegex!(`^(.+?)\+(\d+)`  ** topic register split (document classify) -#+NAME: meta_rgx +#+NAME: meta_rgx_21  #+BEGIN_SRC d  static topic_register_main_terms_split                = ctRegex!(`\s*;\s*`);  static topic_register_main_term_plus_rest_split       = ctRegex!(`\s*:\s*`); @@ -344,7 +375,7 @@ static topic_register_multiple_sub_terms_split        = ctRegex!(`␣([^|␣]+(?  ** language codes                                            :language:codes: -#+NAME: meta_rgx +#+NAME: meta_rgx_22  #+BEGIN_SRC d  /+ language codes +/  auto language_code_and_filename                                    = @@ -367,8 +398,17 @@ http://dlang.org/phobos/std_regex.html  module doc_reform.io_out.rgx;  static template spineRgxOut() {    static struct RgxO { -    <<prgmkup_rgx>> -    <<sp_ch_xhtml_rgx>> +    <<prgmkup_rgx_0>> +    <<prgmkup_rgx_1>> +    <<prgmkup_rgx_2>> +    <<prgmkup_rgx_3>> +    <<prgmkup_rgx_4>> +    <<prgmkup_rgx_5>> +    <<prgmkup_rgx_6>> +    <<prgmkup_rgx_7>> +    <<prgmkup_rgx_8>> +    <<sp_ch_xhtml_rgx_0>> +    <<sp_ch_xhtml_rgx_1>>    }  }  #+END_SRC @@ -376,7 +416,7 @@ static template spineRgxOut() {  ** special characters  *** xhtml special characters -#+NAME: sp_ch_xhtml_rgx +#+NAME: sp_ch_xhtml_rgx_0  #+BEGIN_SRC d  static xhtml_ampersand                            = ctRegex!(`[&]`, "m");      // &  static xhtml_quotation                            = ctRegex!(`["]`, "m");      // " @@ -387,7 +427,7 @@ static xhtml_line_break                           = ctRegex!(` [\\]{2}`, "m"); /  *** latex special characters -#+NAME: sp_ch_xhtml_rgx +#+NAME: sp_ch_xhtml_rgx_1  #+BEGIN_SRC d  static latex_special_char                         = ctRegex!(`([%${}_#&\\])`);  static latex_special_char_for_escape              = ctRegex!(`([%${}_#\\])`); @@ -404,7 +444,7 @@ static latex_clean_bookindex_linebreak            = ctRegex!(`\s*\\\\\\\\\s*`, "  * 2. ctRegex defaults shared by meta & output (generic)  ** misc generic -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_0  #+BEGIN_SRC d  static newline                                        = ctRegex!("\n", "mg");  static space                                          = ctRegex!(`[ ]`, "mg"); @@ -415,7 +455,7 @@ static nbsp_char                                      = ctRegex!(`░`, "mg");  ** filename (& path) (including insert file)      :insert:file:path:filename: -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_1  #+BEGIN_SRC d  static src_pth_sst_or_ssm                             = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.](?P<extension>ss[tm]))$`);  static src_pth_pod_sst_or_ssm                         = ctRegex!(`^(?P<podpath>[/]?(?:[a-zA-Z0-9._-]+/)*)media/text/[a-z]{2}/(?P<filename>[a-zA-Z0-9][a-zA-Z0-9._-]*?[.]ss[tm])$`); @@ -436,7 +476,7 @@ static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a  *** inline breaks -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_2  #+BEGIN_SRC d  /+ line breaks +/  static br_empty_line                                  = ctRegex!(`\n[ ]*\n`, "mg"); @@ -447,7 +487,7 @@ static br_nl                                          = ctRegex!(`┙`, "mg");  *** inline (internal program) markup footnotes endnotes     :inline:footnote: -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_3  #+BEGIN_SRC d  /+ inline markup footnotes endnotes +/  static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg"); @@ -467,7 +507,7 @@ static inline_text_and_note_al_                       = ctRegex!(`(.+?(?:【[*+]  *** inline links -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_4  #+BEGIN_SRC d  /+ inline markup links +/  static inline_image                                   = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>\d+)h(?P<height>\d+))\s*(?P<post>.*?┝┤.*?├)`, "mg"); @@ -495,7 +535,7 @@ static quotation_mark_sql_insert_delimiter            = ctRegex!("[']", "mg");  *** inline markup font face mod                            :inline:font:face: -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_5  #+BEGIN_SRC d  /+ inline markup font face mod +/  static inline_mark_emphasis                         = ctRegex!(`(?P<mark>[*])\{(?P<text>.+?)\}[*]`, "mg"); @@ -510,7 +550,7 @@ static inline_mark_mono                             = ctRegex!(`(?P<mark>[#])\{(  static inline_mark_cite                             = ctRegex!(`(?P<mark>["])\{(?P<text>.+?)\}["]`, "mg");  #+END_SRC -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_6  #+BEGIN_SRC d  static inline_faces_line                              = ctRegex!(`^[*!/_]_ (?P<text>.+?)((?: [\\]{2}|[~]#){0,2}$)`);  static inline_emphasis_line                           = ctRegex!(`^\*_ (?P<text>.+?)(?P<tail>(?: [\\]{2}|[~]#){0,2}$)`); @@ -519,7 +559,7 @@ static inline_italics_line                            = ctRegex!(`^/_ (?P<text>.  static inline_underscore_line                         = ctRegex!(`^__ (?P<text>.+?)(?P<tail>(?: [\\]{2}|[~]#){0,2}$)`);  #+END_SRC -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_7  #+BEGIN_SRC d  /+ inline markup font face mod +/  static inline_emphasis                                = ctRegex!(`[*]┨(?P<text>.+?)┣[*]`, "mg"); @@ -538,7 +578,7 @@ static inline_fontface_clean                          = ctRegex!(`[*!_/^,+■‖  *** table related -#+NAME: prgmkup_rgx +#+NAME: prgmkup_rgx_8  #+BEGIN_SRC d  /+ table delimiters +/  static table_delimiter_col                           = ctRegex!("[ ]*[┊][ ]*", "mg"); diff --git a/org/default_shared.org b/org/default_shared.org index c776725..5b81f84 100644 --- a/org/default_shared.org +++ b/org/default_shared.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/imports.org b/org/imports.org index 0d8e20f..06ea0ff 100644 --- a/org/imports.org +++ b/org/imports.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/in_source_files.org b/org/in_source_files.org index db433b0..86b0607 100644 --- a/org/in_source_files.org +++ b/org/in_source_files.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -47,13 +48,15 @@ import    <<imports_spine>>,    doc_reform.meta.rgx;  <<meta_config_file_in>> -<<meta_config_file_hub>> +<<meta_config_file_hub_0>> +<<meta_config_file_hub_1>> +<<meta_config_file_hub_2>>  #+END_SRC  *** 0. read config files (config local site & dr document make) (yaml)  **** 1. site configuration -#+NAME: meta_config_file_hub +#+NAME: meta_config_file_hub_0  #+BEGIN_SRC d  template readConfigSite() {    @system final auto readConfigSite(C,O)(C _conf_file_details, O _opt_action) { @@ -167,7 +170,7 @@ webserv:  **** 2. document make/config -#+NAME: meta_config_file_hub +#+NAME: meta_config_file_hub_1  #+BEGIN_SRC d  static template readConfigDoc() {    import @@ -223,7 +226,7 @@ static template readConfigDoc() {  *** YAML config (config local site & dr document make)      :file:config:hub: -#+NAME: meta_config_file_hub +#+NAME: meta_config_file_hub_2  #+BEGIN_SRC d  static template configReadSiteYAML() {    import diff --git a/org/meta_conf_make_meta.org b/org/meta_conf_make_meta.org index dbe3cc9..d1e21bc 100644 --- a/org/meta_conf_make_meta.org +++ b/org/meta_conf_make_meta.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -84,12 +85,18 @@ import doc_reform.meta.conf_make_meta_structs;  #+BEGIN_SRC d :tangle "../src/doc_reform/meta/conf_make_meta_structs.d"  module doc_reform.meta.conf_make_meta_structs; -<<meta_defaults_template_structs>> +<<meta_defaults_template_structs_0>> +<<meta_defaults_template_structs_1>> +<<meta_defaults_template_structs_2>> +<<meta_defaults_template_structs_3>> +<<meta_defaults_template_structs_4>> +<<meta_defaults_template_structs_5>> +<<meta_defaults_template_structs_6>>  #+END_SRC  ** initialize, imports etc. -#+NAME: meta_defaults_template_structs +#+NAME: meta_defaults_template_structs_0  #+BEGIN_SRC d  import    std.exception, @@ -112,7 +119,7 @@ static auto mkup = InlineMarkup();  ** struct Generic ConfComposite -#+NAME: meta_defaults_template_structs +#+NAME: meta_defaults_template_structs_1  #+BEGIN_SRC d  @safe string url_markup(string line) {    string line_ = line @@ -224,7 +231,7 @@ struct confCompositeMakeBuild {  ** initialize make & meta  *** composite make -#+NAME: meta_defaults_template_structs +#+NAME: meta_defaults_template_structs_2  #+BEGIN_SRC d  struct ConfCompositeMakeInit {    string[]   bold; @@ -249,7 +256,7 @@ struct ConfCompositeMakeInit {  *** struct: conf site local -#+NAME: meta_defaults_template_structs +#+NAME: meta_defaults_template_structs_3  #+BEGIN_SRC d  struct ConfCompositeSiteLocal {    string   w_srv_http; @@ -308,7 +315,7 @@ struct ConfCompositeSiteLocal {  *** struct: composite meta -#+NAME: meta_defaults_template_structs +#+NAME: meta_defaults_template_structs_4  #+BEGIN_SRC d  struct MetaComposite {    string   classify_dewey; @@ -368,7 +375,7 @@ struct MetaComposite {  *** composite structs -#+NAME: meta_defaults_template_structs +#+NAME: meta_defaults_template_structs_5  #+BEGIN_SRC d  struct ConfComposite {    MetaComposite               meta; @@ -380,7 +387,7 @@ struct ConfComposite {  *** JSONValue -#+NAME: meta_defaults_template_structs +#+NAME: meta_defaults_template_structs_6  #+BEGIN_SRC d  JSONValue config_jsonstr = `{  }`; @@ -1451,7 +1458,9 @@ static template contentJSONtoSpineStruct() {        writeln("<< --------------------------- <<");      }      confCompositeMakeBuild _mk; -    <<json_objects>> +    <<json_objects_0>> +    <<json_objects_1>> +    <<json_objects_2>>      return _struct_composite;    }  } @@ -1459,7 +1468,7 @@ static template contentJSONtoSpineStruct() {  **  make -#+NAME: json_objects +#+NAME: json_objects_0  #+BEGIN_SRC d  /+ make ------------------------------------------------------------------- +/  if ("make" in _json.object) { @@ -1624,7 +1633,7 @@ if ("make" in _json.object) {  **  conf -#+NAME: json_objects +#+NAME: json_objects_1  #+BEGIN_SRC d  /+ conf ------------------------------------------------------------------- +/  if ("webserv" in _json.object) { @@ -1795,7 +1804,7 @@ if ("search" in _json.object) {  **  meta -#+NAME: json_objects +#+NAME: json_objects_2  #+BEGIN_SRC d  /+ meta ------------------------------------------------------------------- +/  if (_struct_composite.meta.creator_author.empty) { diff --git a/org/meta_debugs.org b/org/meta_debugs.org index 6dc2ecf..7a2247f 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/metaverse.org b/org/metaverse.org index 697dd5e..668ac15 100644 --- a/org/metaverse.org +++ b/org/metaverse.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -34,7 +35,12 @@ template docAbstraction() {                                                                                  /+ ↓ abstraction mixins +/    <<abs_top_mixins>>                                                                                  /+ ↓ abstraction struct init +/ -  <<abs_top_init_struct>> +  <<abs_top_init_struct_0>> +  <<abs_top_init_struct_1>> +  <<abs_top_init_struct_2>> +  <<abs_top_init_struct_3>> +  <<abs_top_init_struct_4>> +  <<abs_top_init_struct_5>>    <<abs_inline_para_tag_associations>>                                                                                  /+ ↓ abstract marked up document +/    @system auto docAbstraction(CMM,Opt,Mf) ( @@ -46,14 +52,16 @@ template docAbstraction() {    ) {      static auto rgx = RgxI();                                                                                  /+ ↓ abstraction init +/ -    <<abs_init_rest>> +    <<abs_init_rest_0>> +    <<abs_init_rest_1>>                                                                                  /+ abstraction init ↑ +/      <<make_tests>>                                                                                  /+ ↓ ↻ loop markup document/text line by line +/      srcDocLoop:      foreach (line; markup_sourcefile_content) {                                 /+ ↓ markup document/text line by line +/                                                                                  // "line" variable can be empty but should never be null -      <<abs_in_loop_body_00>> +      <<abs_in_loop_body_00_0>> +      <<abs_in_loop_body_00_1>>        if ( pith["block_is"] == eN.blk_is.code          && pith["block_state"] == eN.blk_state.on        ) { @@ -61,25 +69,76 @@ template docAbstraction() {        } else if (!matchFirst(line, rgx.skip_from_regular_parse)) {              /+ object other than "code block" object +/                                                                                  /+ (includes regular text paragraph, headings & blocks other than code) +/                                                                                  /+ heading, glossary, blurb, poem, group, block, quote, table +/ -        <<abs_in_loop_body_non_code_obj>> +        <<abs_in_loop_body_non_code_obj_0>> +        <<abs_in_loop_body_non_code_obj_1>> +        <<abs_in_loop_body_non_code_obj_2>> +        <<abs_in_loop_body_non_code_obj_3>> +        <<abs_in_loop_body_non_code_obj_4>> +        <<abs_in_loop_body_non_code_obj_5>> +        <<abs_in_loop_body_non_code_obj_6>> +        <<abs_in_loop_body_non_code_obj_7>> +        <<abs_in_loop_body_non_code_obj_8>> +        <<abs_in_loop_body_non_code_obj_9>>          } else {                                                                /+ not within a block group +/            <<abs_in_loop_body_open_block_obj_assert>>            if (line.matchFirst(rgx.block_open)) {              <<abs_in_loop_body_open_block_obj>>            } else if (!line.empty) {                                             /+ line not empty +/                                                                                  /+ non blocks (headings, paragraphs) & closed blocks +/ -            <<abs_in_loop_body_not_block_obj>> +            <<abs_in_loop_body_not_block_obj_0>> +            <<abs_in_loop_body_not_block_obj_1>> +            <<abs_in_loop_body_not_block_obj_2>> +            <<abs_in_loop_body_not_block_obj_3>> +            <<abs_in_loop_body_not_block_obj_4>> +            <<abs_in_loop_body_not_block_obj_5>> +            <<abs_in_loop_body_not_block_obj_6>>            } else if (pith["block_state"] == eN.blk_state.closing) {             /+ line empty, with blocks flag +/              <<abs_in_loop_body_not_block_obj_line_empty_blocks_flags>>            } else {                                                              /+ line.empty, post contents, empty variables: +/ -            <<abs_in_loop_body_not_block_obj_line_empty>> +            <<abs_in_loop_body_not_block_obj_line_empty_0>> +            <<abs_in_loop_body_not_block_obj_line_empty_1>> +            <<abs_in_loop_body_not_block_obj_line_empty_2>>            }                                                                     // close else for line empty          }                                                                       // close else for not the above        }                                                                         // close after non code, other blocks or regular text        <<abs_in_loop_body_01>>      }                                                                           /+ ← srcDocLoop closed: loop markup document/text line by line +/                                                                                  /+ ↓ post loop markup document/text +/ -    <<abs_post>> +    <<abs_post_0>> +    <<abs_post_1>> +    <<abs_post_2>> +    <<abs_post_3>> +    <<abs_post_4>> +    <<abs_post_5>> +    <<abs_post_6>> +    <<abs_post_7>> +    <<abs_post_8>> +    <<abs_post_9>> +    <<abs_post_10>> +    <<abs_post_11>> +    <<abs_post_12>> +    <<abs_post_13>> +    <<abs_post_14>> +    <<abs_post_15>> +    <<abs_post_16>> +    <<abs_post_17>> +    <<abs_post_18>> +    <<abs_post_19>> +    <<abs_post_20>> +    <<abs_post_21>> +    <<abs_post_22>> +    <<abs_post_23>> +    <<abs_post_24>> +    <<abs_post_25>> +    <<abs_post_26>> +    <<abs_post_27>> +    <<abs_post_28>> +    <<abs_post_29>> +    <<abs_post_30>> +    <<abs_post_31>> +    <<abs_post_32>> +    <<abs_post_33>> +    <<abs_post_34>>      <<abs_post_doc_reloop_processing>>      <<abs_struct_doc_has>>      <<abs_return_tuple>> @@ -89,48 +148,117 @@ template docAbstraction() {    <<abs_functions_object_reset>>    <<abs_functions_header_set_common>>    <<abs_functions_ocn_status>> -  <<abs_functions_substitutions>> -  <<abs_functions_block>> +  <<abs_functions_substitutions_0>> +  <<abs_functions_substitutions_1>> +  <<abs_functions_block_0>> +  <<abs_functions_block_1>> +  <<abs_functions_block_2>> +  <<abs_functions_block_3>> +  <<abs_functions_block_4>> +  <<abs_functions_block_5>> +  <<abs_functions_block_6>> +  <<abs_functions_block_7>> +  <<abs_functions_block_8>> +  <<abs_functions_block_9>> +  <<abs_functions_block_10>> +  <<abs_functions_block_11>> +  <<abs_functions_block_12>> +  <<abs_functions_block_13>> +  <<abs_functions_block_14>> +  <<abs_functions_block_15>>    <<abs_functions_block_quote>>    <<abs_functions_block_group>>    <<abs_functions_block_block>>    <<abs_functions_block_poem>>    <<abs_functions_block_code>>    <<abs_functions_block_table>> -  <<abs_functions_block_biblio>> -  <<abs_functions_block_line_status_empty>> +  <<abs_functions_block_biblio_0>> +  <<abs_functions_block_biblio_1>> +  <<abs_functions_block_line_status_empty_0>> +  <<abs_functions_block_line_status_empty_1>> +  <<abs_functions_block_line_status_empty_2>> +  <<abs_functions_block_line_status_empty_3>> +  <<abs_functions_block_line_status_empty_4>> +  <<abs_functions_block_line_status_empty_5>> +  <<abs_functions_block_line_status_empty_6>> +  <<abs_functions_block_line_status_empty_7>> +  <<abs_functions_block_line_status_empty_8>>    <<abs_functions_book_index>> -  <<abs_functions_heading>> -  <<abs_functions_para>> -  <<abs_functions_table>> +  <<abs_functions_heading_0>> +  <<abs_functions_heading_1>> +  <<abs_functions_heading_2>> +  <<abs_functions_para_0>> +  <<abs_functions_para_1>> +  <<abs_functions_table_0>> +  <<abs_functions_table_1>> +  <<abs_functions_table_2>> +  <<abs_functions_table_3>>                                                                                  /+ abstraction functions ↑ +/                                                                                  /+ ↓ abstraction function emitters +/    <<meta_emitters_ocn>>                                                                                  /+ +/ -  <<meta_emitters_obj_inline_markup_munge>> +  <<meta_emitters_obj_inline_markup_munge_0>> +  <<meta_emitters_obj_inline_markup_munge_1>> +  <<meta_emitters_obj_inline_markup_munge_2>> +  <<meta_emitters_obj_inline_markup_munge_3>> +  <<meta_emitters_obj_inline_markup_munge_4>> +  <<meta_emitters_obj_inline_markup_munge_5>> +  <<meta_emitters_obj_inline_markup_munge_6>> +  <<meta_emitters_obj_inline_markup_munge_7>> +  <<meta_emitters_obj_inline_markup_munge_8>> +  <<meta_emitters_obj_inline_markup_munge_9>> +  <<meta_emitters_obj_inline_markup_munge_10>> +  <<meta_emitters_obj_inline_markup_munge_11>> +  <<meta_emitters_obj_inline_markup_munge_12>> +  <<meta_emitters_obj_inline_markup_munge_13>>    <<meta_emitters_obj_inline_markup>>    <<meta_emitters_obj_inline_markup_and_anchor_tags_and_misc>>    <<meta_emitters_obj_inline_markup_table_of_contents>>    <<meta_emitters_obj_inline_markup_private>> -  <<meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags>> +  <<meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags_0>> +  <<meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags_1>>    <<meta_emitters_obj_inline_markup_close>>                                                                                  /+ +/    <<meta_emitters_obj_attributes>>    <<meta_emitters_obj_attributes_public>>    <<meta_emitters_obj_attributes_private>> -  <<meta_emitters_obj_attributes_private_an_attribute>> +  <<meta_emitters_obj_attributes_private_an_attribute_0>> +  <<meta_emitters_obj_attributes_private_an_attribute_1>> +  <<meta_emitters_obj_attributes_private_an_attribute_2>> +  <<meta_emitters_obj_attributes_private_an_attribute_3>> +  <<meta_emitters_obj_attributes_private_an_attribute_4>> +  <<meta_emitters_obj_attributes_private_an_attribute_5>> +  <<meta_emitters_obj_attributes_private_an_attribute_6>> +  <<meta_emitters_obj_attributes_private_an_attribute_7>> +  <<meta_emitters_obj_attributes_private_an_attribute_8>> +  <<meta_emitters_obj_attributes_private_an_attribute_9>>    <<meta_emitters_obj_attributes_private_json>>    <<meta_emitters_obj_attributes_private_close>>                                                                                  /+ +/    <<meta_emitters_book_index_nugget>>    <<meta_emitters_book_index_report_indented>> -  <<meta_emitters_book_index_report_section>> +  <<meta_emitters_book_index_report_section_0>> +  <<meta_emitters_book_index_report_section_1>> +  <<meta_emitters_book_index_report_section_2>> +  <<meta_emitters_book_index_report_section_3>>                                                                                  /+ +/ -  <<meta_emitters_endnotes>> +  <<meta_emitters_endnotes_0>> +  <<meta_emitters_endnotes_1>> +  <<meta_emitters_endnotes_2>> +  <<meta_emitters_endnotes_3>> +  <<meta_emitters_endnotes_4>>                                                                                  /+ +/ -  <<meta_emitters_bibliography>> +  <<meta_emitters_bibliography_0>> +  <<meta_emitters_bibliography_1>> +  <<meta_emitters_bibliography_2>> +  <<meta_emitters_bibliography_3>> +  <<meta_emitters_bibliography_4>> +  <<meta_emitters_bibliography_5>>                                                                                  /+ +/ -  <<meta_emitters_metadata>> +  <<meta_emitters_metadata_0>> +  <<meta_emitters_metadata_1>> +  <<meta_emitters_metadata_2>> +  <<meta_emitters_metadata_3>>                                                                                  /+ abstraction functions emitters ↑ +/                                                                                  /+ ↓ abstraction functions assertions +/    <<abs_functions_assertions>> @@ -170,7 +298,7 @@ mixin spineRgxIn;  *** initialize                                                   :initialize:  **** declare enum -#+NAME: abs_top_init_struct +#+NAME: abs_top_init_struct_0  #+BEGIN_SRC d  @safe static auto eN() {    struct _e { @@ -228,7 +356,7 @@ mixin spineRgxIn;  **** initialize general -#+NAME: abs_top_init_struct +#+NAME: abs_top_init_struct_1  #+BEGIN_SRC d  /+ initialize +/  ObjGenericComposite[] the_table_of_contents_section; @@ -320,7 +448,7 @@ enum DomTags { none, open, close, close_and_open, open_still, }  **** method heading ancestors -#+NAME: abs_top_init_struct +#+NAME: abs_top_init_struct_2  #+BEGIN_SRC d  @safe pure ObjGenericComposite obj_heading_ancestors()(    ObjGenericComposite  obj, @@ -379,7 +507,7 @@ enum DomTags { none, open, close, close_and_open, open_still, }  **** method dom markup tags -#+NAME: abs_top_init_struct +#+NAME: abs_top_init_struct_3  #+BEGIN_SRC d  @safe pure ObjGenericComposite obj_dom_structure_set_markup_tags()(    ObjGenericComposite  obj, @@ -429,7 +557,7 @@ enum DomTags { none, open, close, close_and_open, open_still, }  **** method dom collapsed tags -#+NAME: abs_top_init_struct +#+NAME: abs_top_init_struct_4  #+BEGIN_SRC d  @safe pure ObjGenericComposite obj_dom_set_collapsed_tags()(    ObjGenericComposite  obj, @@ -479,7 +607,7 @@ enum DomTags { none, open, close, close_and_open, open_still, }  **** method ocn emit -#+NAME: abs_top_init_struct +#+NAME: abs_top_init_struct_5  #+BEGIN_SRC d  @safe static auto ocn_emit(int ocn_status_flag) {    return object_citation_number.ocn_emitter(ocn_status_flag); @@ -568,7 +696,7 @@ enum sObj { content, anchor_tag, notes_reg, notes_star, links, image_no_dimensio  *** scope -#+NAME: abs_init_rest +#+NAME: abs_init_rest_0  #+BEGIN_SRC d  scope(success) {  } @@ -589,7 +717,7 @@ scope(exit) {  *** init rest -#+NAME: abs_init_rest +#+NAME: abs_init_rest_1  #+BEGIN_SRC d  mixin spineNode;  auto node_para_int_    = node_metadata_para_int; @@ -747,7 +875,7 @@ debug (substitutions) {  ** 2. ↻ *LOOP* _loop: process document body_ [+6]                          :loop:  *** Loop scope                                                        :scope: -#+NAME: abs_in_loop_body_00 +#+NAME: abs_in_loop_body_00_0  #+BEGIN_SRC d  /+ scope +/  scope(exit) { @@ -775,7 +903,7 @@ debug(srclines) {  *** check whether object number is on or turned off                     :ocn: -#+NAME: abs_in_loop_body_00 +#+NAME: abs_in_loop_body_00_1  #+BEGIN_SRC d  if (!line.empty) {    pith = line._check_ocn_status_(pith); @@ -795,7 +923,7 @@ continue;  **** _non code objects_ (non-code blocks & regular text: by line) [+4] :non_code:  ***** inline fontface markup -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_0  #+BEGIN_SRC d  line = line.inline_markup_faces; // by text line (rather than by text object), linebreaks in para problematic  #+END_SRC @@ -803,7 +931,7 @@ line = line.inline_markup_faces; // by text line (rather than by text object), l  ***** in section (biblio, glossary, blurb) +(block group)+ [+1]  :block:active:  ****** in section: biblio                                            :biblio: -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_1  #+BEGIN_SRC d  if (line.matchFirst(rgx.heading_biblio)  || (pith["section"] == eN.sect.bibliography @@ -832,7 +960,7 @@ if there is a glossary section you need to:    - need indentation and regular paragraph inline markup  - reconstitute the document with the glossary section following the endnotes -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_2  #+BEGIN_SRC d  } else if (line.matchFirst(rgx.heading_glossary)  || (pith["section"] == eN.sect.glossary @@ -940,7 +1068,7 @@ if there is a blurb section you need to:    - need regular paragraph inline markup  - reconstitute the document with the blurb section at the very end of the doucment -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_3  #+BEGIN_SRC d  } else if (line.matchFirst(rgx.heading_blurb)  || (pith["section"] == eN.sect.blurb @@ -1093,14 +1221,14 @@ if there is a blurb section you need to:  ***** in blocks [+1]                                           :block:active: -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_4  #+BEGIN_SRC d  } else if (pith["block_state"] == eN.blk_state.on) {  #+END_SRC  ****** in block: quote                                                :quote: -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_5  #+BEGIN_SRC d    if (pith["block_is"]    == eN.blk_is.quote) {      line = line @@ -1112,7 +1240,7 @@ if there is a blurb section you need to:  ****** in block: group                                                :group: -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_6  #+BEGIN_SRC d    } else if (pith["block_is"]    == eN.blk_is.group) {      line = line @@ -1125,7 +1253,7 @@ if there is a blurb section you need to:  ****** in block: block                                                :block: -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_7  #+BEGIN_SRC d    } else if (pith["block_is"]    == eN.blk_is.block) {      line = line @@ -1141,7 +1269,7 @@ if there is a blurb section you need to:  ****** in block: poem                                                  :poem: -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_8  #+BEGIN_SRC d    } else if (pith["block_is"]    == eN.blk_is.poem) {      an_object = line.flow_txt_block_poem(an_object, pith, cntr, object_number_poem, conf_make_meta, tag_in_seg); @@ -1150,7 +1278,7 @@ if there is a blurb section you need to:  ****** in block: table                                                :table: -#+NAME: abs_in_loop_body_non_code_obj +#+NAME: abs_in_loop_body_non_code_obj_9  #+BEGIN_SRC d    } else if (pith["block_is"]    == eN.blk_is.table) {      an_object = line.flow_txt_block_table(an_object, pith, conf_make_meta); @@ -1186,7 +1314,7 @@ continue;  ****** line not empty [+2]  ******* asserts                                                      :assert: -#+NAME: abs_in_loop_body_not_block_obj +#+NAME: abs_in_loop_body_not_block_obj_0  #+BEGIN_SRC d  assert(    !line.empty, @@ -1214,7 +1342,7 @@ if (pith["block_state"] == eN.blk_state.closing) {  ******* book index                                                :bookindex: -#+NAME: abs_in_loop_body_not_block_obj +#+NAME: abs_in_loop_body_not_block_obj_1  #+BEGIN_SRC d  if (line.matchFirst(rgx.book_index_item)  || line.matchFirst(rgx.book_index_item_open) @@ -1224,14 +1352,14 @@ if (line.matchFirst(rgx.book_index_item)  ******* not book index [+1] -#+NAME: abs_in_loop_body_not_block_obj +#+NAME: abs_in_loop_body_not_block_obj_2  #+BEGIN_SRC d  } else {                                                                       /+ not book_index +/  #+END_SRC  ******** matched: comment                                     :comment:match: -#+NAME: abs_in_loop_body_not_block_obj +#+NAME: abs_in_loop_body_not_block_obj_3  #+BEGIN_SRC d    an_object_key = "body_nugget";    if (auto m = line.matchFirst(rgx.comment)) {                                 /+ matched comment +/ @@ -1253,7 +1381,7 @@ if (line.matchFirst(rgx.book_index_item)  ******** flag !set & line !exist: heading or para         :heading:paragraph: -#+NAME: abs_in_loop_body_not_block_obj +#+NAME: abs_in_loop_body_not_block_obj_4  #+BEGIN_SRC d    } else if ((line_occur["para"] == eN.bi.off      && line_occur["heading"] == eN.bi.off) @@ -1298,7 +1426,7 @@ if (line.matchFirst(rgx.book_index_item)  ******** line exist: heading                                        :heading: -#+NAME: abs_in_loop_body_not_block_obj +#+NAME: abs_in_loop_body_not_block_obj_5  #+BEGIN_SRC d    } else if (line_occur["heading"] > eN.bi.off) {                              /+ heading +/      debug(heading) { @@ -1310,7 +1438,7 @@ if (line.matchFirst(rgx.book_index_item)  ******** line exist: para                                              :para: -#+NAME: abs_in_loop_body_not_block_obj +#+NAME: abs_in_loop_body_not_block_obj_6  #+BEGIN_SRC d    } else if (line_occur["para"] > eN.bi.off) {                                 /+ paragraph +/      debug(para) { @@ -1347,7 +1475,7 @@ an_object = line.flow_block_flag_line_empty_(  ****** line empty [+1]  ******* assert line empty                                            :assert: -#+NAME: abs_in_loop_body_not_block_obj_line_empty +#+NAME: abs_in_loop_body_not_block_obj_line_empty_0  #+BEGIN_SRC d  assert(    line.empty, @@ -1362,7 +1490,7 @@ assert(  ******* heading object                                       :heading:object: -#+NAME: abs_in_loop_body_not_block_obj_line_empty +#+NAME: abs_in_loop_body_not_block_obj_line_empty_1  #+BEGIN_SRC d  if (_new_doc) {    tag_assoc = tag_assoc.init; @@ -1496,7 +1624,7 @@ if (pith["txt_is"] == eN.txt_is.heading  ******* paragraph object                                   :paragraph:object: -#+NAME: abs_in_loop_body_not_block_obj_line_empty +#+NAME: abs_in_loop_body_not_block_obj_line_empty_2  #+BEGIN_SRC d  } else if (pith["txt_is"] == eN.txt_is.para    && line_occur["para"] > eN.bi.off @@ -1627,7 +1755,7 @@ if (the_document_body_section.length > 0) {  *** tie up preparation of document sections  **** endnotes section (scroll & seg)                               :endnotes: -#+NAME: abs_post +#+NAME: abs_post_0  #+BEGIN_SRC d  auto en_tuple    = note_section.endnote_objects(obj_cite_digits, opt_action); @@ -1647,7 +1775,7 @@ debug(endnotes) {  **** no glossary section?                                          :glossary: -#+NAME: abs_post +#+NAME: abs_post_1  #+BEGIN_SRC d  if (an_object["glossary_nugget"].length == 0) {    comp_obj_heading_                                   = comp_obj_heading_.init; @@ -1676,7 +1804,7 @@ debug(glossary) {  **** bibliography section (objects)                            :bibliography: -#+NAME: abs_post +#+NAME: abs_post_2  #+BEGIN_SRC d  auto biblio_unsorted_incomplete = biblio_arr_json.dup;  auto biblio = Bibliography(); @@ -1684,7 +1812,7 @@ auto biblio_ordered    = biblio.flow_bibliography_(biblio_unsorted_incomplete, bib_arr_json);  #+END_SRC -#+NAME: abs_post +#+NAME: abs_post_3  #+BEGIN_SRC d  if (biblio_ordered.length > 0) {    { @@ -1792,7 +1920,7 @@ if (biblio_ordered.length > 0) {  }  #+END_SRC -#+NAME: abs_post +#+NAME: abs_post_4  #+BEGIN_SRC d  debug(bibliosection) {    foreach (o; the_bibliography_section) { @@ -1837,7 +1965,7 @@ JSONValue biblio_entry_tags_jsonstr =  `{  **** bookindex section (scroll & seg)                            :book:index: -#+NAME: abs_post +#+NAME: abs_post_5  #+BEGIN_SRC d  auto bi = BookIndexReportSection();  auto bi_tuple @@ -1858,7 +1986,7 @@ debug(bookindex) {  **** no blurb section?                                                :blurb: -#+NAME: abs_post +#+NAME: abs_post_6  #+BEGIN_SRC d  if (an_object["blurb_nugget"].length == 0) {    comp_obj_heading_                                   = comp_obj_heading_.init; @@ -1889,7 +2017,7 @@ debug(blurb) {  **** toc backmatter, table of contents backmatter (scroll & seg)   :contents: -#+NAME: abs_post +#+NAME: abs_post_7  #+BEGIN_SRC d  indent = [    "hang_position" : 1, @@ -1990,7 +2118,7 @@ debug(toc) {  **** doc head (separate document head from body, make space for toc) -#+NAME: abs_post +#+NAME: abs_post_8  #+BEGIN_SRC d  the_document_head_section ~= the_document_body_section[0];  the_document_body_section = the_document_body_section[1..$]; @@ -2014,7 +2142,7 @@ NOTE there are issues attempting to do this on first pass as:  ***** Methods  ****** get ancestors markup -#+NAME: abs_post +#+NAME: abs_post_9  #+BEGIN_SRC d  @safe int[] _get_ancestors_markup(O)(O obj, ref int[] _ancestors_markup) {    if (obj.metainfo.is_a == "heading") { @@ -2107,7 +2235,7 @@ NOTE there are issues attempting to do this on first pass as:  ****** get ancestors collapsed -#+NAME: abs_post +#+NAME: abs_post_10  #+BEGIN_SRC d  @safe int[] _get_ancestors_collapsed(O)(O obj, ref int[] _ancestors_collapsed) {    if (obj.metainfo.is_a == "heading") { @@ -2200,7 +2328,7 @@ NOTE there are issues attempting to do this on first pass as:  - substantive object numbers already exist  - number un-numbered non-substantive text -#+NAME: abs_post +#+NAME: abs_post_11  #+BEGIN_SRC d  /+ multiple 1~ levels, loop through document body +/  if (the_document_body_section.length > 1) { @@ -2228,7 +2356,7 @@ if (the_document_body_section.length > 1) {  ***** ↻ Loop section: endnotes [en] -#+NAME: abs_post +#+NAME: abs_post_12  #+BEGIN_SRC d  if (the_endnotes_section.length > 1) {    segnames["html"] ~= "endnotes"; @@ -2249,7 +2377,7 @@ if (the_endnotes_section.length > 1) {  ***** ↻ Loop section: glossary [gl] -#+NAME: abs_post +#+NAME: abs_post_13  #+BEGIN_SRC d  if (the_glossary_section.length > 1) {    segnames["html"] ~= "glossary"; @@ -2270,7 +2398,7 @@ if (the_glossary_section.length > 1) {  ***** ↻ Loop section: bibliography [bb] -#+NAME: abs_post +#+NAME: abs_post_14  #+BEGIN_SRC d  if (the_bibliography_section.length > 1) {    segnames["html"] ~= "bibliography"; @@ -2291,7 +2419,7 @@ if (the_bibliography_section.length > 1) {  ***** ↻ Loop section: book index [bi] -#+NAME: abs_post +#+NAME: abs_post_15  #+BEGIN_SRC d  if (the_bookindex_section.length > 1) {    segnames["html"] ~= "bookindex"; @@ -2312,7 +2440,7 @@ if (the_bookindex_section.length > 1) {  ***** ↻ Loop section: blurb [bl] -#+NAME: abs_post +#+NAME: abs_post_16  #+BEGIN_SRC d  if (the_blurb_section.length > 1) {    segnames["html"] ~= "blurb"; @@ -2372,7 +2500,7 @@ Build here:  ***** Methods  ****** decendants -#+NAME: abs_post +#+NAME: abs_post_17  #+BEGIN_SRC d  @safe auto get_decendants()(ObjGenericComposite[] document_sections) {    int[string] _heading_ocn_decendants; @@ -2425,7 +2553,7 @@ Build here:  ****** images: extract -#+NAME: abs_post +#+NAME: abs_post_18  #+BEGIN_SRC d  string[] _images;  @safe string[] extract_images()(string content_block) { @@ -2440,7 +2568,7 @@ string[] segnames_0_to_4;  ****** images: dimensions -#+NAME: abs_post +#+NAME: abs_post_19  #+BEGIN_SRC d  @system auto _image_dimensions(O,M)(O obj, M manifested) {    if (obj.has.image_without_dimensions) { @@ -2493,7 +2621,7 @@ string[] segnames_0_to_4;        - book index      - footnotes and footnote numbers -#+NAME: abs_post +#+NAME: abs_post_20  #+BEGIN_SRC d  @safe auto _links(O)(O obj) {    if (auto m = obj.text.match(rgx.inline_link_stow_uri)) { @@ -2518,7 +2646,7 @@ string[] segnames_0_to_4;  ***** ↻ Loop section: head -#+NAME: abs_post +#+NAME: abs_post_21  #+BEGIN_SRC d  foreach (ref obj; the_document_head_section) {    if (obj.metainfo.is_a == "heading") { @@ -2550,7 +2678,7 @@ foreach (ref obj; the_document_head_section) {  ***** ↻ Loop section: toc [to] -#+NAME: abs_post +#+NAME: abs_post_22  #+BEGIN_SRC d  if (the_table_of_contents_section.length > 1) {    /+ scroll +/ @@ -2580,7 +2708,7 @@ if (the_table_of_contents_section.length > 1) {  ***** ↻ Loop section: document body [bd] -#+NAME: abs_post +#+NAME: abs_post_23  #+BEGIN_SRC d  /+ multiple 1~ levels, loop through document body +/  if (the_document_body_section.length > 1) { @@ -2631,7 +2759,7 @@ auto image_list = (_images.sort()).uniq;  - endnotes have their own number, (also use in node) and they belong to calling object -#+NAME: abs_post +#+NAME: abs_post_24  #+BEGIN_SRC d  /+ optional only one 1~ level +/  if (the_endnotes_section.length > 1) { @@ -2676,7 +2804,7 @@ if (the_endnotes_section.length > 1) {  - add glossary numbering, (also use in node) no need to show in text -#+NAME: abs_post +#+NAME: abs_post_25  #+BEGIN_SRC d  /+ optional only one 1~ level +/  if (the_glossary_section.length > 1) { @@ -2721,7 +2849,7 @@ if (the_glossary_section.length > 1) {  - add bibliography numbering, (also use in node) no need to show in text -#+NAME: abs_post +#+NAME: abs_post_26  #+BEGIN_SRC d  /+ optional only one 1~ level +/  if (the_bibliography_section.length > 1) { @@ -2766,7 +2894,7 @@ if (the_bibliography_section.length > 1) {  - add book index numbering?, (also use in node) no need to show in text -#+NAME: abs_post +#+NAME: abs_post_27  #+BEGIN_SRC d  /+ optional only one 1~ level +/  int ocn_       = obj_cite_digits.object_number; @@ -2821,7 +2949,7 @@ if (the_bookindex_section.length > 1) {                                        /  ***** ↻ Loop section: blurb [bl] -#+NAME: abs_post +#+NAME: abs_post_28  #+BEGIN_SRC d  /+ optional only one 1~ level +/  if (the_blurb_section.length > 1) { @@ -2864,7 +2992,7 @@ if (the_blurb_section.length > 1) {  ***** ↻ Loop sections: get decendants -#+NAME: abs_post +#+NAME: abs_post_29  #+BEGIN_SRC d  if (the_document_body_section.length > 1) {    auto pairs = get_decendants( @@ -2962,7 +3090,7 @@ if (the_document_body_section.length > 1) {  **** TODO update BUG? -#+NAME: abs_post +#+NAME: abs_post_30  #+BEGIN_SRC d    /+ TODO      - note create/insert heading object sole purpose eof close all open tags @@ -3000,7 +3128,7 @@ comp_obj_heading_ = comp_obj_heading_.obj_heading_ancestors(lv_ancestors_txt);  ** 4. _return document tuple_                                            :post:  *** _the document_                                                   :document: -#+NAME: abs_post +#+NAME: abs_post_31  #+BEGIN_SRC d  ObjGenericComposite[][string] document_the = [    "head":             the_document_head_section, @@ -3020,7 +3148,7 @@ ObjGenericComposite[][string] document_the = [  *** document _section keys_ sequence -#+NAME: abs_post +#+NAME: abs_post_32  #+BEGIN_SRC d  string[][string] document_section_keys_sequenced = [    "scroll": ["head", "toc", "body",], @@ -3068,7 +3196,7 @@ if ((opt_action.html)  *** dup -#+NAME: abs_post +#+NAME: abs_post_33  #+BEGIN_SRC d  string[] segnames_4                 = segnames["html"].dup;  string[] segnames_lv1_to_4          = segnames["epub"].dup; @@ -3080,7 +3208,7 @@ debug(segnames) {  *** clean out structure -#+NAME: abs_post +#+NAME: abs_post_34  #+BEGIN_SRC d  destroy(the_document_head_section);  destroy(the_table_of_contents_section); @@ -3270,7 +3398,7 @@ functions used in document abstraction  *** make substitutions  **** project -#+NAME: abs_functions_substitutions +#+NAME: abs_functions_substitutions_0  #+BEGIN_SRC d  @safe char[] _doc_header_and_make_substitutions_(CMM)(    char[]  line, @@ -3291,7 +3419,7 @@ functions used in document abstraction  **** fontface -#+NAME: abs_functions_substitutions +#+NAME: abs_functions_substitutions_1  #+BEGIN_SRC d  @safe char[] _doc_header_and_make_substitutions_fontface_(CMM)(    char[]  line, @@ -3324,7 +3452,7 @@ functions used in document abstraction  **** block start (open) block                                         :start:  ***** { block starts function -#+NAME: abs_functions_block +#+NAME: abs_functions_block_0  #+BEGIN_SRC d  @safe void flow_txt_block_start()(               char[]         line, @@ -3336,14 +3464,14 @@ functions used in document abstraction  ****** block (various) curly open                                     :curly: -#+NAME: abs_functions_block +#+NAME: abs_functions_block_1  #+BEGIN_SRC d    static auto rgx = RgxI();  #+END_SRC  ******* code -#+NAME: abs_functions_block +#+NAME: abs_functions_block_2  #+BEGIN_SRC d    if (auto m = line.matchFirst(rgx.block_curly_code_open)) {      dochas["codeblock"]++; @@ -3363,7 +3491,7 @@ functions used in document abstraction  ******* poem -#+NAME: abs_functions_block +#+NAME: abs_functions_block_3  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_curly_poem_open)) {      dochas["poem"]++; @@ -3385,7 +3513,7 @@ functions used in document abstraction  ******* group -#+NAME: abs_functions_block +#+NAME: abs_functions_block_4  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_curly_group_open)) {      dochas["group"]++; @@ -3405,7 +3533,7 @@ functions used in document abstraction  ******* block -#+NAME: abs_functions_block +#+NAME: abs_functions_block_5  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_curly_block_open)) {      dochas["block"]++; @@ -3425,7 +3553,7 @@ functions used in document abstraction  ******* quote -#+NAME: abs_functions_block +#+NAME: abs_functions_block_6  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_curly_quote_open)) {      dochas["quote"]++; @@ -3445,7 +3573,7 @@ functions used in document abstraction  ******* table -#+NAME: abs_functions_block +#+NAME: abs_functions_block_7  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_curly_table_open)) {           /+ curly table open +/      debug(table) {                             // table (curly) open @@ -3464,7 +3592,7 @@ functions used in document abstraction  ******* table special -#+NAME: abs_functions_block +#+NAME: abs_functions_block_8  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_curly_table_special_markup)) { /+ table: special table block markup syntax! +/      dochas["table"]++; @@ -3478,7 +3606,7 @@ functions used in document abstraction  ****** block (various) tic open                                         :tic:  ******* code -#+NAME: abs_functions_block +#+NAME: abs_functions_block_9  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_code_open)) {      dochas["codeblock"]++; @@ -3498,7 +3626,7 @@ functions used in document abstraction  ******* poem -#+NAME: abs_functions_block +#+NAME: abs_functions_block_10  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_poem_open)) {      dochas["poem"]++; @@ -3520,7 +3648,7 @@ functions used in document abstraction  ******* group -#+NAME: abs_functions_block +#+NAME: abs_functions_block_11  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_group_open)) {      dochas["group"]++; @@ -3540,7 +3668,7 @@ functions used in document abstraction  ******* block -#+NAME: abs_functions_block +#+NAME: abs_functions_block_12  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_block_open)) {      dochas["block"]++; @@ -3560,7 +3688,7 @@ functions used in document abstraction  ******* quote -#+NAME: abs_functions_block +#+NAME: abs_functions_block_13  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_quote_open)) {      dochas["quote"]++; @@ -3580,7 +3708,7 @@ functions used in document abstraction  ******* table -#+NAME: abs_functions_block +#+NAME: abs_functions_block_14  #+BEGIN_SRC d    } else if (auto m = line.matchFirst(rgx.block_tic_table_open)) {             /+ tic table open +/      debug(table) {                             // table (tic) open @@ -3600,7 +3728,7 @@ functions used in document abstraction  ***** } -#+NAME: abs_functions_block +#+NAME: abs_functions_block_15  #+BEGIN_SRC d  }  #+END_SRC @@ -3659,7 +3787,7 @@ functions used in document abstraction  ***** biblio block                                                   :biblio:  ****** biblio tag map -#+NAME: abs_functions_block_biblio +#+NAME: abs_functions_block_biblio_0  #+BEGIN_SRC d  @safe final string biblio_tag_map()(string abr) {    auto btm = [ @@ -3711,7 +3839,7 @@ final string biblio_tag_map_()(string abr) {  ****** biblio block -#+NAME: abs_functions_block_biblio +#+NAME: abs_functions_block_biblio_1  #+BEGIN_SRC d  @system void flow_txt_block_biblio(    char[]                  line, @@ -4325,7 +4453,7 @@ process and use an_object["table_head"] (then empty it)    - table_column_widths, int[] column widths (as given or calculate average)    - show table walls, bool -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_0  #+BEGIN_SRC d  @system void flow_table_closed_make_special_notation_table_(N,CMM)(               char[]                line, @@ -4374,7 +4502,7 @@ process and use an_object["table_head"] (then empty it)  ***** { line empty, _make block_ -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_1  #+BEGIN_SRC d  @system string[string] flow_block_flag_line_empty_(B,N,CMM,Ts)(               char[]                   line, @@ -4404,7 +4532,7 @@ process and use an_object["table_head"] (then empty it)  ****** make: quote block -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_2  #+BEGIN_SRC d    if (pith["block_state"] == eN.blk_state.closing) {      if (pith["block_is"] == eN.blk_is.quote) { @@ -4463,7 +4591,7 @@ process and use an_object["table_head"] (then empty it)  ****** make: group block -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_3  #+BEGIN_SRC d      } else if (pith["block_is"] == eN.blk_is.group) {        obj_cite_digits = ocn_emit(pith["ocn"]); @@ -4521,7 +4649,7 @@ process and use an_object["table_head"] (then empty it)  ****** make: block -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_4  #+BEGIN_SRC d      } else if (pith["block_is"] == eN.blk_is.block) {        obj_cite_digits = ocn_emit(pith["ocn"]); @@ -4578,7 +4706,7 @@ process and use an_object["table_head"] (then empty it)  ****** make: poem -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_5  #+BEGIN_SRC d      } else if (pith["block_is"] == eN.blk_is.poem) {        an_object["bookindex_nugget"] @@ -4622,7 +4750,7 @@ process and use an_object["table_head"] (then empty it)  ****** make: code block -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_6  #+BEGIN_SRC d      } else if (pith["block_is"] == eN.blk_is.code) {        obj_cite_digits = ocn_emit(pith["ocn"]); @@ -4680,7 +4808,7 @@ process and use an_object["table_head"] (then empty it)  ****** make: table -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_7  #+BEGIN_SRC d      } else if (pith["block_is"]    == eN.blk_is.table) {        comp_obj_block = comp_obj_block.init; @@ -4730,7 +4858,7 @@ process and use an_object["table_head"] (then empty it)  ***** } -#+NAME: abs_functions_block_line_status_empty +#+NAME: abs_functions_block_line_status_empty_8  #+BEGIN_SRC d    }    return an_object; @@ -4796,7 +4924,7 @@ process and use an_object["table_head"] (then empty it)  *** heading or paragraph                                  :heading:paragraph:  **** heading found                                                  :heading: -#+NAME: abs_functions_heading +#+NAME: abs_functions_heading_0  #+BEGIN_SRC d  @safe string[string] flow_heading_found_()(               char[]                line, @@ -4883,7 +5011,7 @@ process and use an_object["table_head"] (then empty it)  **** heading make set                                               :heading: -#+NAME: abs_functions_heading +#+NAME: abs_functions_heading_1  #+BEGIN_SRC d  @safe char[] flow_heading_make_set_()(               char[]                line, @@ -4945,7 +5073,7 @@ process and use an_object["table_head"] (then empty it)  **** heading match                                                  :heading: -#+NAME: abs_functions_heading +#+NAME: abs_functions_heading_2  #+BEGIN_SRC d  @safe string[string] flow_heading_matched_(CMM)(               char[]          line, @@ -5101,7 +5229,7 @@ process and use an_object["table_head"] (then empty it)  **** para match                                                        :para: -#+NAME: abs_functions_para +#+NAME: abs_functions_para_0  #+BEGIN_SRC d  @safe string[string] flow_para_match_()(               char[]         line, @@ -5160,7 +5288,7 @@ process and use an_object["table_head"] (then empty it)  **** text font face -#+NAME: abs_functions_para +#+NAME: abs_functions_para_1  #+BEGIN_SRC d  @safe char[] font_faces_line()(    char[]  textline, @@ -5197,7 +5325,7 @@ process and use an_object["table_head"] (then empty it)  ***** table instructions -#+NAME: abs_functions_table +#+NAME: abs_functions_table_0  #+BEGIN_SRC d  @safe ObjGenericComposite flow_table_instructions(H)(    return ref ObjGenericComposite  table_object, @@ -5228,7 +5356,7 @@ process and use an_object["table_head"] (then empty it)  ***** table array munge -#+NAME: abs_functions_table +#+NAME: abs_functions_table_1  #+BEGIN_SRC d  @safe ObjGenericComposite flow_table_array_munge(T)(    return ref ObjGenericComposite  table_object, @@ -5358,7 +5486,7 @@ process and use an_object["table_head"] (then empty it)  ***** table substantive munge -#+NAME: abs_functions_table +#+NAME: abs_functions_table_2  #+BEGIN_SRC d  @system ObjGenericComposite flow_table_substantive_munge(T)(    return ref ObjGenericComposite  table_object, @@ -5380,7 +5508,7 @@ process and use an_object["table_head"] (then empty it)  ***** table substantive munge special -#+NAME: abs_functions_table +#+NAME: abs_functions_table_3  #+BEGIN_SRC d  @system ObjGenericComposite flow_table_substantive_munge_special(T)(    return ref ObjGenericComposite  table_object, @@ -5460,7 +5588,7 @@ process and use an_object["table_head"] (then empty it)  ****** { struct, inline markup munge -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_0  #+BEGIN_SRC d  @safe static struct ObjInlineMarkupMunge {    string[string] obj_txt; @@ -5478,7 +5606,7 @@ process and use an_object["table_head"] (then empty it)    }  #+END_SRC -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_1  #+BEGIN_SRC d    @safe static auto images()(string obj_txt_in) {      static auto mng = InlineMarkup(); @@ -5514,7 +5642,7 @@ process and use an_object["table_head"] (then empty it)  ******* footnotes endnotes markup -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_2  #+BEGIN_SRC d    @safe TxtPlusHasFootnotes footnotes_endnotes_markup_and_number_or_stars()(string obj_txt_in, bool reset_note_numbers) {      /+ endnotes (regular) +/ @@ -5591,7 +5719,7 @@ process and use an_object["table_head"] (then empty it)  ******* object notes and links -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_3  #+BEGIN_SRC d    @safe private TxtPlusHasFootnotesUrlsImages object_notes_and_links_()(      string obj_txt_in, @@ -5662,7 +5790,7 @@ process and use an_object["table_head"] (then empty it)  - identified text by heading level marker followed by text until two new lines  - general markup -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_4  #+BEGIN_SRC d    @safe auto munge_heading()(      string obj_txt_in, @@ -5693,7 +5821,7 @@ process and use an_object["table_head"] (then empty it)    - footnotes/endnotes    - links -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_5  #+BEGIN_SRC d    @safe auto munge_para()(string obj_txt_in) {      obj_txt["munge"] = (obj_txt_in) @@ -5712,7 +5840,7 @@ process and use an_object["table_head"] (then empty it)  ******* quote -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_6  #+BEGIN_SRC d    @safe string munge_quote()(string obj_txt_in) {      obj_txt["munge"] = obj_txt_in; @@ -5732,7 +5860,7 @@ process and use an_object["table_head"] (then empty it)  - drop spaces  - keep newlines? -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_7  #+BEGIN_SRC d    @safe auto munge_group(string obj_txt_in) {      TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt_in.split("\n\n").join(" \\\\\n \\\\\n")); @@ -5753,7 +5881,7 @@ process and use an_object["table_head"] (then empty it)  - keep newlines  - newlines detected and kept? -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_8  #+BEGIN_SRC d    @safe auto munge_block()(string obj_txt_in) {      TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt_in); @@ -5772,7 +5900,7 @@ process and use an_object["table_head"] (then empty it)    - footnotes/endnotes    - links? -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_9  #+BEGIN_SRC d    @safe auto munge_verse()(string obj_txt_in) {      TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt_in); @@ -5790,7 +5918,7 @@ process and use an_object["table_head"] (then empty it)  - no general markup  - one special character represented by mkup.nbsp ░ -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_10  #+BEGIN_SRC d    @safe string munge_code()(string obj_txt_in) {      obj_txt_in = obj_txt_in.replaceAll(rgx.space, mkup.nbsp); @@ -5805,7 +5933,7 @@ process and use an_object["table_head"] (then empty it)  - table block identified by open an close tags  - table markup -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_11  #+BEGIN_SRC d    @safe string munge_table()(string obj_txt_in) {      obj_txt["munge"] = obj_txt_in; @@ -5817,7 +5945,7 @@ process and use an_object["table_head"] (then empty it)  ******* comment -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_12  #+BEGIN_SRC d    @safe string munge_comment()(string obj_txt_in) {      obj_txt["munge"] = obj_txt_in; @@ -5829,7 +5957,7 @@ process and use an_object["table_head"] (then empty it)  ****** } -#+NAME: meta_emitters_obj_inline_markup_munge +#+NAME: meta_emitters_obj_inline_markup_munge_13  #+BEGIN_SRC d  }  #+END_SRC @@ -6054,7 +6182,7 @@ private:  ******** make heading number & segment anchor tags if instructed :markup:inline:segment:anchor:tags: -#+NAME: meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags +#+NAME: meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags_0  #+BEGIN_SRC d    static int[] heading_num = [ 0, 0, 0, 0 ];    static string heading_number_auto_composite = ""; @@ -6207,7 +6335,7 @@ private:  ******** make segment anchor tags if not provided :markup:inline:segment:anchor:tags: -#+NAME: meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags +#+NAME: meta_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags_1  #+BEGIN_SRC d    static int heading_num_lev1 = 0;    @safe static string _make_segment_anchor_tags_if_none_provided()( @@ -6338,7 +6466,7 @@ struct ObjAttributes {  ******** para & blocks -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_0  #+BEGIN_SRC d    @safe string txt_para_and_blocks()(string obj_txt_in) {      if (obj_txt_in.matchFirst(rgx.para_bullet)) { @@ -6368,7 +6496,7 @@ struct ObjAttributes {  ******** heading -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_1  #+BEGIN_SRC d    @safe string txt_heading()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6382,7 +6510,7 @@ struct ObjAttributes {  ******** para -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_2  #+BEGIN_SRC d    @safe string txt_para()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6396,7 +6524,7 @@ struct ObjAttributes {  ******** quote -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_3  #+BEGIN_SRC d    @safe string txt_quote()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6410,7 +6538,7 @@ struct ObjAttributes {  ******** group -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_4  #+BEGIN_SRC d    @safe string txt_group()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6424,7 +6552,7 @@ struct ObjAttributes {  ******** block -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_5  #+BEGIN_SRC d    @safe string txt_block()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6438,7 +6566,7 @@ struct ObjAttributes {  ******** verse -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_6  #+BEGIN_SRC d    @safe string txt_verse()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6452,7 +6580,7 @@ struct ObjAttributes {  ******** code -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_7  #+BEGIN_SRC d    @safe string txt_code()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6466,7 +6594,7 @@ struct ObjAttributes {  ******** table -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_8  #+BEGIN_SRC d    @safe string txt_table()(string obj_txt_in) {      _obj_attributes = " \"use\": \"content\"," @@ -6480,7 +6608,7 @@ struct ObjAttributes {  ******** comment -#+NAME: meta_emitters_obj_attributes_private_an_attribute +#+NAME: meta_emitters_obj_attributes_private_an_attribute_9  #+BEGIN_SRC d    @safe string txt_comment()(string obj_txt_in) {      _obj_attributes = " \"use\": \"comment\"," @@ -6642,7 +6770,7 @@ struct BookIndexReportIndent {  ***** book index (sort &) report section                     :report:section:  ****** { book index struct open -#+NAME: meta_emitters_book_index_report_section +#+NAME: meta_emitters_book_index_report_section_0  #+BEGIN_SRC d  struct BookIndexReportSection {    int  mkn, skn; @@ -6652,7 +6780,7 @@ struct BookIndexReportSection {  ******* bookindex write section -#+NAME: meta_emitters_book_index_report_section +#+NAME: meta_emitters_book_index_report_section_1  #+BEGIN_SRC d    @safe void bookindex_write_section()(      string[][string][string] bookindex_unordered_hashes @@ -6687,7 +6815,7 @@ struct BookIndexReportSection {  ******* book index (sort &) build section                    :report:section: -#+NAME: meta_emitters_book_index_report_section +#+NAME: meta_emitters_book_index_report_section_2  #+BEGIN_SRC d    @system auto bookindex_build_abstraction_section(N,B)(      string[][string][string] bookindex_unordered_hashes, @@ -6850,14 +6978,14 @@ struct BookIndexReportSection {  ****** } -#+NAME: meta_emitters_book_index_report_section +#+NAME: meta_emitters_book_index_report_section_3  #+BEGIN_SRC d  }  #+END_SRC  **** (end)notes section                                    :endnotes:section: -#+NAME: meta_emitters_endnotes +#+NAME: meta_emitters_endnotes_0  #+BEGIN_SRC d  struct NotesSection {    string[string] object_notes; @@ -6868,7 +6996,7 @@ struct NotesSection {  ***** { gather notes for endnote section struct open -#+NAME: meta_emitters_endnotes +#+NAME: meta_emitters_endnotes_1  #+BEGIN_SRC d    @safe private auto gather_notes_for_endnote_section(      ObjGenericComposite[] contents_am, @@ -6954,7 +7082,7 @@ struct NotesSection {  ****** gathered notes -#+NAME: meta_emitters_endnotes +#+NAME: meta_emitters_endnotes_2  #+BEGIN_SRC d    @safe private auto gathered_notes() {      string[][string] endnotes_; @@ -6971,7 +7099,7 @@ struct NotesSection {  ****** endnote objects -#+NAME: meta_emitters_endnotes +#+NAME: meta_emitters_endnotes_3  #+BEGIN_SRC d    @safe private auto endnote_objects(N,O)(      N              obj_cite_digits, @@ -7087,7 +7215,7 @@ struct NotesSection {  ***** } -#+NAME: meta_emitters_endnotes +#+NAME: meta_emitters_endnotes_4  #+BEGIN_SRC d  }  #+END_SRC @@ -7095,14 +7223,14 @@ struct NotesSection {  **** bibliography                                              :bibliography:  ***** { biblio struct -#+NAME: meta_emitters_bibliography +#+NAME: meta_emitters_bibliography_0  #+BEGIN_SRC d  struct Bibliography {  #+END_SRC  ****** biblio -#+NAME: meta_emitters_bibliography +#+NAME: meta_emitters_bibliography_1  #+BEGIN_SRC d  @system public JSONValue[] flow_bibliography_()(      return ref string[]    biblio_unsorted_incomplete, @@ -7133,7 +7261,7 @@ struct Bibliography {  ****** biblio unsorted complete -#+NAME: meta_emitters_bibliography +#+NAME: meta_emitters_bibliography_2  #+BEGIN_SRC d    @system final private JSONValue[] biblio_make_unsorted_array_of_json_objects()(      string[]      biblio_unordered, @@ -7167,7 +7295,7 @@ struct Bibliography {  ****** biblio sort -#+NAME: meta_emitters_bibliography +#+NAME: meta_emitters_bibliography_3  #+BEGIN_SRC d    @system final private JSONValue[] biblio_sort()(JSONValue[] biblio_unordered) {      JSONValue[] biblio_sorted_; @@ -7188,7 +7316,7 @@ struct Bibliography {  ****** biblio debug -#+NAME: meta_emitters_bibliography +#+NAME: meta_emitters_bibliography_4  #+BEGIN_SRC d    @system void biblio_debug()(JSONValue[] biblio_sorted) {      debug(biblio0) { @@ -7203,7 +7331,7 @@ struct Bibliography {  ***** } -#+NAME: meta_emitters_bibliography +#+NAME: meta_emitters_bibliography_5  #+BEGIN_SRC d  }  #+END_SRC @@ -7211,7 +7339,7 @@ struct Bibliography {  **** node structure metadata                        :structure:metadata:node:  ***** { metadata node struct -#+NAME: meta_emitters_metadata +#+NAME: meta_emitters_metadata_0  #+BEGIN_SRC d  struct NodeStructureMetadata {    int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7; @@ -7222,7 +7350,7 @@ struct NodeStructureMetadata {  ****** node metadata emitter -#+NAME: meta_emitters_metadata +#+NAME: meta_emitters_metadata_1  #+BEGIN_SRC d    @safe ObjGenericComposite node_location_emitter(La,Ta,N)(      string         lev_markup_number, @@ -7282,7 +7410,7 @@ struct NodeStructureMetadata {  ****** node metadata emitter heading, (including most segnames & their pointers) -#+NAME: meta_emitters_metadata +#+NAME: meta_emitters_metadata_2  #+BEGIN_SRC d    @safe ObjGenericComposite node_emitter_heading(Hd,TaL,TA,N,fNr,fNs,fL)(      string         _text, @@ -7484,7 +7612,7 @@ struct NodeStructureMetadata {  ***** } -#+NAME: meta_emitters_metadata +#+NAME: meta_emitters_metadata_3  #+BEGIN_SRC d  }  #+END_SRC @@ -7711,7 +7839,16 @@ set abstracted objects for downstream processing  module doc_reform.meta.metadoc_object_setter;  template ObjectSetter() {    /+ structs +/ -  <<meta_structs_init>> +  <<meta_structs_init_0>> +  <<meta_structs_init_1>> +  <<meta_structs_init_2>> +  <<meta_structs_init_3>> +  <<meta_structs_init_4>> +  <<meta_structs_init_5>> +  <<meta_structs_init_6>> +  <<meta_structs_init_7>> +  <<meta_structs_init_8>> +  <<meta_structs_init_9>>  }  #+END_SRC @@ -7732,7 +7869,7 @@ struct HeadingAttrib {  *** _composite object_ [#A] -#+NAME: meta_structs_init +#+NAME: meta_structs_init_0  #+BEGIN_SRC d  struct DocObj_MetaInfo_ {    string                 is_of_part                           = ""; // frontmatter, body, backmatter @@ -7811,7 +7948,7 @@ struct DocObj_MetaInfo_ {  **** object text attributes -#+NAME: meta_structs_init +#+NAME: meta_structs_init_1  #+BEGIN_SRC d  struct DocObj_TxtAttrib_ {    int                    indent_base                         = 0; @@ -7823,7 +7960,7 @@ struct DocObj_TxtAttrib_ {  **** object has within it -#+NAME: meta_structs_init +#+NAME: meta_structs_init_2  #+BEGIN_SRC d  struct DocObj_Has_ {    bool                   inline_links                        = false; @@ -7836,7 +7973,7 @@ struct DocObj_Has_ {  **** table attributes -#+NAME: meta_structs_init +#+NAME: meta_structs_init_3  #+BEGIN_SRC d  struct DocObj_Table_ {    int                    number_of_columns                   = 0; @@ -7849,7 +7986,7 @@ struct DocObj_Table_ {  **** code attributes -#+NAME: meta_structs_init +#+NAME: meta_structs_init_4  #+BEGIN_SRC d  struct DocObj_CodeBlock_ {    string                 syntax                              = ""; @@ -7859,7 +7996,7 @@ struct DocObj_CodeBlock_ {  **** stow (things to be protected from regular text transformations, so far links) -#+NAME: meta_structs_init +#+NAME: meta_structs_init_5  #+BEGIN_SRC d  struct DocObj_Stow_ {    string[]               link                               = []; @@ -7868,7 +8005,7 @@ struct DocObj_Stow_ {  **** pointers -#+NAME: meta_structs_init +#+NAME: meta_structs_init_6  #+BEGIN_SRC d  struct DocObj_Pointer_ {    int                    doc_object                          = 0; @@ -7879,7 +8016,7 @@ struct DocObj_Pointer_ {  **** tags -#+NAME: meta_structs_init +#+NAME: meta_structs_init_7  #+BEGIN_SRC d  struct DocObj_Tags_ {    string[]               heading_ancestors_text              = [ "", "", "", "", "", "", "", "", ]; @@ -7898,7 +8035,7 @@ struct DocObj_Tags_ {  **** composite object the parts -#+NAME: meta_structs_init +#+NAME: meta_structs_init_8  #+BEGIN_SRC d  struct ObjGenericComposite {    string                 text                                = ""; @@ -7915,7 +8052,7 @@ struct ObjGenericComposite {  *** The Objects: generic composite object array -#+NAME: meta_structs_init +#+NAME: meta_structs_init_9  #+BEGIN_SRC d  struct TheObjects {    ObjGenericComposite[] oca; diff --git a/org/out_cgi_search_sqlite.org b/org/out_cgi_search_sqlite.org index f9b90d0..df98ed9 100644 --- a/org/out_cgi_search_sqlite.org +++ b/org/out_cgi_search_sqlite.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -99,21 +100,33 @@ void cgi_function_intro(Cgi cgi) {    <<cgi_sqlite_initialize_text>>    <<cgi_sqlite_initialize_rgx>>    <<cgi_sqlite_initialize_fields>> -  <<cgi_sqlite_initialize_env>> +  <<cgi_sqlite_initialize_env_0>> +  <<cgi_sqlite_initialize_env_1>>    <<cgi_sqlite_initialize_tail>>    <<cgi_sqlite_initialize_sql_select>>    <<cgi_sqlite_initialize_canned_url>>    <<cgi_sqlite_initialize_regex_for_canned_search>>    <<cgi_sqlite_initialize_show_matched_objects>>    <<cgi_sqlite_initialize_previous_next>> -<<cgi_sqlite_header>> +<<cgi_sqlite_header_0>> +<<cgi_sqlite_header_1>> +<<cgi_sqlite_header_2>>  <<cgi_sqlite_table>> -<<cgi_sqlite_form>> +<<cgi_sqlite_form_0>> +<<cgi_sqlite_form_1>> +<<cgi_sqlite_form_2>> +<<cgi_sqlite_form_3>>        "%s", -<<cgi_sqlite_form_post>> +<<cgi_sqlite_form_post_0>> +<<cgi_sqlite_form_post_1>>    <<cgi_sqlite_write>>    <<cgi_sqlite_set_db>>  <<cgi_sqlite_select_statement_0>> +<<cgi_sqlite_select_statement_1>> +<<cgi_sqlite_select_statement_2>> +<<cgi_sqlite_select_statement_3>> +<<cgi_sqlite_select_statement_4>> +<<cgi_sqlite_select_statement_5>>    <<cgi_sqlite_db_close>>  <<cgi_sqlite_db_tail>>  } @@ -409,7 +422,7 @@ auto text_fields() {  ***** env  ****** POST -#+NAME: cgi_sqlite_initialize_env +#+NAME: cgi_sqlite_initialize_env_0  #+BEGIN_SRC d    if (environment.get("REQUEST_METHOD", "POST") == "POST") {      if ("sf" in cgi.post) { @@ -559,7 +572,7 @@ auto text_fields() {  ****** GET -#+NAME: cgi_sqlite_initialize_env +#+NAME: cgi_sqlite_initialize_env_1  #+BEGIN_SRC d    } else if (environment.get("REQUEST_METHOD", "POST") == "GET") {      got.canned_query = environment.get("QUERY_STRING", ""); @@ -814,7 +827,7 @@ string show_matched_objects (string fn) {  **** format -#+NAME: cgi_sqlite_header +#+NAME: cgi_sqlite_header_0  #+BEGIN_SRC d    {      header = format(q"┃ @@ -822,7 +835,7 @@ string show_matched_objects (string fn) {  **** html -#+NAME: cgi_sqlite_header +#+NAME: cgi_sqlite_header_1  #+BEGIN_SRC html  <!DOCTYPE html>  <html> @@ -839,7 +852,7 @@ string show_matched_objects (string fn) {  **** css -#+NAME: cgi_sqlite_header +#+NAME: cgi_sqlite_header_2  #+BEGIN_SRC css     *{      padding                  : 0px; @@ -1667,7 +1680,7 @@ string show_matched_objects (string fn) {  *** cgi html form -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_0  #+BEGIN_SRC d    {      string post_value(string field_name, string type="box", string set="on") { @@ -1710,7 +1723,7 @@ string show_matched_objects (string fn) {  **** canned search -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_1  #+BEGIN_SRC d      string the_can(string fv) {        string show_the_can = post_value("url"); @@ -1748,7 +1761,7 @@ string show_matched_objects (string fn) {  **** provide tip -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_2  #+BEGIN_SRC d      string provide_tip() {        string searched_tip = post_value("se"); @@ -1785,7 +1798,7 @@ string show_matched_objects (string fn) {  **** the form  ***** form html -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_3  #+BEGIN_SRC html      form = format(q"┃  <form action="%%s" id="SubmitForm" method="post" accept-charset="UTF-8"> @@ -1823,7 +1836,7 @@ string show_matched_objects (string fn) {  ***** form values -#+NAME: cgi_sqlite_form_post +#+NAME: cgi_sqlite_form_post_0  #+BEGIN_SRC d        (post_value("ec") == "checked") ? post_value("sf", "field") : "",        provide_tip, @@ -1843,7 +1856,7 @@ string show_matched_objects (string fn) {  **** set value (debug) -#+NAME: cgi_sqlite_form_post +#+NAME: cgi_sqlite_form_post_1  #+BEGIN_SRC d      {        string set_value(string field_name, string default_val) { @@ -2008,7 +2021,7 @@ auto db = Database(conf.db_path ~ cv.db_selected);  **** db SELECT statement, the body -#+NAME: cgi_sqlite_select_statement_0 +#+NAME: cgi_sqlite_select_statement_1  #+BEGIN_SRC sql        sql_select.the_body ~= format(q"┃  SELECT @@ -2051,7 +2064,7 @@ LIMIT %%s OFFSET %%s  **** html write selected  ***** head -#+NAME: cgi_sqlite_select_statement_0 +#+NAME: cgi_sqlite_select_statement_2  #+BEGIN_SRC d        (cv.checked_sql)        ? cgi.write(previous_next @@ -2100,7 +2113,7 @@ LIMIT %%s OFFSET %%s  ***** text found -#+NAME: cgi_sqlite_select_statement_0 +#+NAME: cgi_sqlite_select_statement_3  #+BEGIN_SRC d            if (cv.results_type == "txt") {              if (row["ocn"].as!string != "0") { @@ -2143,7 +2156,7 @@ LIMIT %%s OFFSET %%s  ***** ocn index -#+NAME: cgi_sqlite_select_statement_0 +#+NAME: cgi_sqlite_select_statement_4  #+BEGIN_SRC d            } else {              if (row["ocn"].as!string != "0") { @@ -2176,7 +2189,7 @@ LIMIT %%s OFFSET %%s  ***** tail -#+NAME: cgi_sqlite_select_statement_0 +#+NAME: cgi_sqlite_select_statement_5  #+BEGIN_SRC d          }          cgi.write( previous_next); diff --git a/org/out_harvest_metadata.org b/org/out_harvest_metadata.org index 424803f..4c32e37 100644 --- a/org/out_harvest_metadata.org +++ b/org/out_harvest_metadata.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -138,7 +139,8 @@ template spineMetaDocHarvestsTopics() {    ) {        <<harvested_html_search>>        <<harvested_topics>> -<<harvested_html_themes>> +<<harvested_html_themes_0>> +<<harvested_html_themes_1>>  <<harvested_topics_html_head_1>>  <<harvested_html_head>>  <<harvested_topics_html_head_2>> @@ -477,7 +479,8 @@ template spineMetaDocHarvestsAuthors() {      O  _opt_action,    ) {        <<harvested_html_search>> -<<harvested_html_themes>> +<<harvested_html_themes_0>> +<<harvested_html_themes_1>>  <<harvested_authors_html_head_1>>  <<harvested_html_head>>  <<harvested_authors_html_head_2>> @@ -621,7 +624,7 @@ if (_opt_action.verbose  *** themes  **** head -#+NAME: harvested_html_themes +#+NAME: harvested_html_themes_0  #+BEGIN_SRC d  string theme_dark_0 = format(q"┃    body { @@ -717,7 +720,7 @@ string theme_light_0 = format(q"┃  **** levels -#+NAME: harvested_html_themes +#+NAME: harvested_html_themes_1  #+BEGIN_SRC d  string theme_dark_1 = format(q"┃    h1 { diff --git a/org/out_latex.org b/org/out_latex.org index c9610c3..ff56f47 100644 --- a/org/out_latex.org +++ b/org/out_latex.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -29,26 +30,89 @@ template outputLaTeX() {    static auto rgx = RgxO();    mixin spineLanguageCodes;    auto lang = Lang(); -  <<output_latex_shared>> -<<output_latex_shared_0>> -  <<output_latex_head>> -<<output_latex_head_1_tex>> -  <<output_latex_head_1_format_string_variables>> -  <<output_latex_head_0_format_string>> -<<output_latex_head_0_tex>> -  <<output_latex_head_0_format_string_variables>> +  <<output_latex_shared_a_0>> +  <<output_latex_shared_a_1>> +  <<output_latex_shared_a_2>> +  <<output_latex_shared_a_3>> +  <<output_latex_shared_a_4>> +  <<output_latex_shared_a_5>> +  <<output_latex_shared_a_6>> +  <<output_latex_shared_a_7>> +  <<output_latex_shared_a_8>> +  <<output_latex_shared_a_9>> +  <<output_latex_shared_a_10>> +  <<output_latex_shared_a_11>> +<<output_latex_shared_b_0>> +<<output_latex_shared_b_1>> +<<output_latex_shared_b_2>> +<<output_latex_shared_b_3>> +<<output_latex_shared_b_4>> +<<output_latex_shared_b_5>> +<<output_latex_shared_b_6>> +  <<output_latex_head_0>> +  <<output_latex_head_1>> +  <<output_latex_head_2>> +  <<output_latex_head_3>> +<<output_latex_head_b_tex_0>> +<<output_latex_head_b_tex_1>> +<<output_latex_head_b_tex_2>> +<<output_latex_head_b_tex_3>> +<<output_latex_head_b_tex_4>> +<<output_latex_head_b_tex_5>> +<<output_latex_head_b_tex_6>> +<<output_latex_head_b_tex_7>> +<<output_latex_head_b_tex_8>> +<<output_latex_head_b_tex_9>> +<<output_latex_head_b_tex_10>> +<<output_latex_head_b_tex_11>> +<<output_latex_head_b_tex_12>> +<<output_latex_head_b_tex_13>> +<<output_latex_head_b_tex_14>> +<<output_latex_head_b_tex_15>> +<<output_latex_head_b_tex_16>> +<<output_latex_head_b_tex_17>> +  <<output_latex_head_b_format_string_variables>> +  <<output_latex_head_format_string_0>> +  <<output_latex_head_format_string_1>> +  <<output_latex_head_format_string_2>> +  <<output_latex_head_format_string_3>> +<<output_latex_head_tex_0>> +<<output_latex_head_tex_1>> +<<output_latex_head_tex_2>> +<<output_latex_head_tex_3>> +<<output_latex_head_tex_4>> +<<output_latex_head_tex_5>> +<<output_latex_head_tex_6>> +<<output_latex_head_tex_7>> +<<output_latex_head_tex_8>> +<<output_latex_head_tex_9>> +<<output_latex_head_tex_10>> +<<output_latex_head_tex_11>> +<<output_latex_head_tex_12>> +<<output_latex_head_tex_13>> +<<output_latex_head_tex_14>> +  <<output_latex_head_a_format_string_variables>>    <<output_latex_head_close>> -  <<output_latex_body>> -  <<output_latex_tail>> +  <<output_latex_body_0>> +  <<output_latex_body_1>> +  <<output_latex_body_2>> +  <<output_latex_body_3>> +  <<output_latex_body_4>> +  <<output_latex_body_5>> +  <<output_latex_body_6>> +  <<output_latex_tail_0>> +  <<output_latex_tail_1>>  <<output_latex_tail_tex>> -  <<output_latex_tail_close>> -  <<output_latex>> +  <<output_latex_tail_close_0>> +  <<output_latex_tail_close_1>> +  <<output_latex_0>> +  <<output_latex_1>>  }  #+END_SRC  ** write latex output                                             :latex:out: -#+NAME: output_latex +#+NAME: output_latex_0  #+BEGIN_SRC d  void writeOutputLaTeX(T,M)(    const T      latex_content, @@ -90,7 +154,7 @@ void writeOutputLaTeX(T,M)(  ** latex output hub [#A]                                      :latex:pdf:out: -#+NAME: output_latex +#+NAME: output_latex_1  #+BEGIN_SRC d  void outputLaTeX(D,M)(    const    D   doc_abstraction, @@ -128,7 +192,7 @@ import doc_reform.io_out;  ** shared  *** paper dimensions (struct) -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_0  #+BEGIN_SRC d      auto paper() {        struct PaperType { @@ -295,7 +359,7 @@ import doc_reform.io_out;  *** latex \escape special characters  **** general -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_1  #+BEGIN_SRC d  @safe string sp_char_esc(O)(    string      _txt, @@ -324,7 +388,7 @@ import doc_reform.io_out;  }  #+END_SRC -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_2  #+BEGIN_SRC d  @safe string sp_char_esc_txt()(    string      _txt, @@ -366,7 +430,7 @@ import doc_reform.io_out;  - bold, italics, underscore, strikethrough -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_3  #+BEGIN_SRC d  @safe string fontface()(    string      _txt, @@ -389,7 +453,7 @@ _txt = _txt  **** spaces  ***** leading hardspace -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_4  #+BEGIN_SRC d  @safe string leading_hardspaces()(    string      _txt, @@ -406,7 +470,7 @@ _txt = _txt  ***** nbsp character -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_5  #+BEGIN_SRC d  @safe string nbsp_char()(string _txt) {    if (_txt.match(rgx.nbsp_char)) { @@ -418,7 +482,7 @@ _txt = _txt  ***** remove nbsp character -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_6  #+BEGIN_SRC d  @safe string nbsp_char_to_space()(string _txt) {    if (_txt.match(rgx.nbsp_char)) { @@ -431,7 +495,7 @@ _txt = _txt  **** links and images  ***** links / urls -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_7  #+BEGIN_SRC d  @safe string links_and_images(O,M)(    string      _txt, @@ -483,7 +547,7 @@ _txt = _txt  *** footnotes  **** footnotes -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_8  #+BEGIN_SRC d  @safe string footnotes()(    string      _txt, @@ -504,7 +568,7 @@ _txt = _txt  **** footnote remove -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_9  #+BEGIN_SRC d  @safe string remove_footnotes()(    string      _txt, @@ -519,7 +583,7 @@ _txt = _txt  *** para  **** para -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_10  #+BEGIN_SRC d  @safe string para(O)(    string      _txt, @@ -540,7 +604,7 @@ _txt = _txt  **** bookindex para -#+NAME: output_latex_shared +#+NAME: output_latex_shared_a_11  #+BEGIN_SRC d  @safe string bookindex(O)(    string      _txt, @@ -561,7 +625,7 @@ _txt = _txt  *** bullets & indentation -#+NAME: output_latex_head +#+NAME: output_latex_head_0  #+BEGIN_SRC d  @safe string bullets_and_indentation(O)(    string      _txt, @@ -606,7 +670,7 @@ _txt = _txt  *** heading -#+NAME: output_latex_shared_0 +#+NAME: output_latex_shared_b_0  #+BEGIN_SRC d    @safe string heading(O,M)(      string      _txt, @@ -780,7 +844,7 @@ _txt = _txt  - (hardspace not honored) clear hardspace marker -#+NAME: output_latex_shared_0 +#+NAME: output_latex_shared_b_1  #+BEGIN_SRC d  string group(O,M)(    string      _txt, @@ -808,7 +872,7 @@ string group(O,M)(  - (hardspace honored) \hardspace -#+NAME: output_latex_shared_0 +#+NAME: output_latex_shared_b_2  #+BEGIN_SRC d  string block(O,M)(    string      _txt, @@ -840,7 +904,7 @@ string block(O,M)(  - (hardspace honored) \hardspace -#+NAME: output_latex_shared_0 +#+NAME: output_latex_shared_b_3  #+BEGIN_SRC d  string verse(O,M)(    string      _txt, @@ -872,7 +936,7 @@ string verse(O,M)(  - (hardspace honored) \begin{lstlisting} clear hardspace marker -#+NAME: output_latex_shared_0 +#+NAME: output_latex_shared_b_4  #+BEGIN_SRC d  string codeblock(O,M)(    string      _txt, @@ -904,7 +968,7 @@ string codeblock(O,M)(  ***** tablarize -#+NAME: output_latex_shared_0 +#+NAME: output_latex_shared_b_5  #+BEGIN_SRC d  auto tablarize(O)(    string            _txt, @@ -943,7 +1007,7 @@ auto tablarize(O)(  ***** table -#+NAME: output_latex_shared_0 +#+NAME: output_latex_shared_b_6  #+BEGIN_SRC d  string table(O,M)(    string      _txt, @@ -1003,7 +1067,7 @@ string table(O,M)(  *** latex head                                                         :head:  **** latex head function -#+NAME: output_latex_head +#+NAME: output_latex_head_1  #+BEGIN_SRC d  string latex_head(M)(    M      doc_matters, @@ -1015,7 +1079,7 @@ string latex_head(M)(  ***** paper type dimensions  ****** struct -#+NAME: output_latex_head +#+NAME: output_latex_head_2  #+BEGIN_SRC d    struct paperTypeLatex {      string a4_portrait; @@ -1034,7 +1098,7 @@ string latex_head(M)(  ****** footer -#+NAME: output_latex_head +#+NAME: output_latex_head_3  #+BEGIN_SRC d    string _footer(M)(M doc_matters) {      string _ft = "\\lfoot[\\textrm{\\thepage}]"; @@ -1069,7 +1133,7 @@ string latex_head(M)(  ***** paper margins  ****** struct -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_0  #+BEGIN_SRC d    struct paperMargins {      string portrait; @@ -1080,19 +1144,19 @@ string latex_head(M)(  ****** portrait -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_1  #+BEGIN_SRC d    margins.portrait    = format(q"┃  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_2  #+BEGIN_SRC latex  \setlength{\oddsidemargin}{0mm} \setlength{\evensidemargin}{0mm}  \setlength{\topmargin}{-12pt} \setlength{\headheight}{12pt}  \setlength{\headsep}{35pt}  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_3  #+BEGIN_SRC d  ┃",    ); @@ -1100,19 +1164,19 @@ string latex_head(M)(  ****** landscape -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_4  #+BEGIN_SRC d    margins.landscape    = format(q"┃  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_5  #+BEGIN_SRC latex  \setlength{\oddsidemargin}{6mm} \setlength{\evensidemargin}{6mm}  \setlength{\topmargin}{-12mm} \setlength{\headheight}{12pt}  \setlength{\headsep}{20pt}  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_6  #+BEGIN_SRC d  ┃",    ); @@ -1121,7 +1185,7 @@ string latex_head(M)(  ***** multicol  ****** struct -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_7  #+BEGIN_SRC d    struct columnsMulti {      string portrait; @@ -1132,17 +1196,17 @@ string latex_head(M)(  ****** portrait -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_8  #+BEGIN_SRC d    multicol.portrait    = format(q"┃  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_9  #+BEGIN_SRC latex  \usepackage{multicol}  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_10  #+BEGIN_SRC d  ┃",    ); @@ -1150,7 +1214,7 @@ string latex_head(M)(  ****** landscape -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_11  #+BEGIN_SRC d    multicol.landscape    = "";  #+END_SRC @@ -1158,7 +1222,7 @@ string latex_head(M)(  ***** color links  ****** struct -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_12  #+BEGIN_SRC d    struct colorLinks {      string mono; @@ -1169,12 +1233,12 @@ string latex_head(M)(  ****** mono -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_13  #+BEGIN_SRC d    links.mono    = format(q"┃  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_14  #+BEGIN_SRC latex  \usepackage[xetex,    colorlinks=true, @@ -1183,7 +1247,7 @@ string latex_head(M)(    linkcolor=myblack,  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_15  #+BEGIN_SRC d  ┃",    ); @@ -1191,12 +1255,12 @@ string latex_head(M)(  ****** color -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_16  #+BEGIN_SRC d    links.color    = format(q"┃  #+END_SRC -#+NAME: output_latex_head_1_tex +#+NAME: output_latex_head_b_tex_17  #+BEGIN_SRC latex  \usepackage[xetex,    colorlinks=true, @@ -1205,7 +1269,7 @@ string latex_head(M)(    linkcolor=myred,    %% \href{...} and \pageref{...}  #+END_SRC -#+NAME: output_latex_head_1_format_string_variables +#+NAME: output_latex_head_b_format_string_variables  #+BEGIN_SRC d  ┃",    ); @@ -1215,7 +1279,7 @@ string latex_head(M)(  ***** dimensions & orientation  ****** set -#+NAME: output_latex_head_0_format_string +#+NAME: output_latex_head_format_string_0  #+BEGIN_SRC d      string set_paper(P)(P paper_set,) {        string paper_type_description; @@ -1246,7 +1310,7 @@ string latex_head(M)(  ***** (a4, a5, b4, letter, legal) * (portrait & landscape) -#+NAME: output_latex_head_0_format_string +#+NAME: output_latex_head_format_string_1  #+BEGIN_SRC d    string paper_size_orientation_latex;    switch (paper_size_orientation) { @@ -1266,7 +1330,7 @@ string latex_head(M)(  ***** set color links -#+NAME: output_latex_head_0_format_string +#+NAME: output_latex_head_format_string_2  #+BEGIN_SRC d    string links_mono_or_color_set = links.mono.strip;    if ( @@ -1284,14 +1348,14 @@ string latex_head(M)(  ***** format latex head, open -#+NAME: output_latex_head_0_format_string +#+NAME: output_latex_head_format_string_3  #+BEGIN_SRC d    string _latex_head = format(q"┃%%%% spine LaTeX output  #+END_SRC  ***** description comment -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_0  #+BEGIN_SRC latex  %%%% Generated by: %s  %%%% D version: %s @@ -1308,7 +1372,7 @@ string latex_head(M)(  - paper_type_latex.us_letter_portrait  - paper_type_latex.us_letter_landscape -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_1  #+BEGIN_SRC latex  %s  #+END_SRC @@ -1318,14 +1382,14 @@ string latex_head(M)(  - margins.portrait  - margins.landscape -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_2  #+BEGIN_SRC latex  %s  #+END_SRC  ***** margin shared -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_3  #+BEGIN_SRC latex  \setlength{\marginparsep}{4mm}  \setlength{\marginparwidth}{8mm} @@ -1333,14 +1397,14 @@ string latex_head(M)(  ***** multicol (portrait | landscape) -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_4  #+BEGIN_SRC latex  %s  #+END_SRC  ***** language & font -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_5  #+BEGIN_SRC latex  \usepackage{polyglossia, ucs, fontspec, xltxtra, xunicode}  \setmainlanguage{%s} @@ -1354,7 +1418,7 @@ string latex_head(M)(  ***** latex head -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_6  #+BEGIN_SRC latex  \usepackage{alltt}  \usepackage{thumbpdf} @@ -1362,14 +1426,14 @@ string latex_head(M)(  ***** color links: no = mono | yes = color -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_7  #+BEGIN_SRC latex  %s  #+END_SRC  ***** metadata -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_8  #+BEGIN_SRC latex    pdftitle={%s},    pdfauthor={%s}, @@ -1403,7 +1467,7 @@ string latex_head(M)(  ***** define colors -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_9  #+BEGIN_SRC latex  \usepackage[usenames]{color}  \definecolor{myblack}{rgb}{0,0,0} @@ -1415,7 +1479,7 @@ string latex_head(M)(  ***** latex head -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_10  #+BEGIN_SRC latex  \usepackage{url}  \urlstyle{sf} @@ -1425,7 +1489,7 @@ string latex_head(M)(  ***** latex head -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_11  #+BEGIN_SRC latex  \usepackage{textcomp}  \usepackage[parfill]{parskip} @@ -1447,7 +1511,7 @@ string latex_head(M)(  ***** indent, bullet, list -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_12  #+BEGIN_SRC latex  \usepackage[multiple,ragged]{footmisc}  \setlength\footnotemargin{12pt} @@ -1491,7 +1555,7 @@ string latex_head(M)(  ***** part, section, subsection, paragraph, subparagraph -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_13  #+BEGIN_SRC latex  \usepackage{fancyhdr}  \lhead{} @@ -1525,7 +1589,7 @@ string latex_head(M)(  ***** latex head misc. including defined commands -#+NAME: output_latex_head_0_tex +#+NAME: output_latex_head_tex_14  #+BEGIN_SRC latex  \selectlanguage{%s}  \lhead[ ]{ } @@ -1586,7 +1650,7 @@ string latex_head(M)(  **** latex head format inclusions -#+NAME: output_latex_head_0_format_string_variables +#+NAME: output_latex_head_a_format_string_variables  #+BEGIN_SRC d  ┃",    doc_matters.opt.action.debug_do ? "" : doc_matters.generator_program.name_and_version.strip, @@ -1619,7 +1683,7 @@ string latex_head(M)(  *** ↻ latex body                                               :content:body:  **** latex body function -#+NAME: output_latex_body +#+NAME: output_latex_body_0  #+BEGIN_SRC d  string latex_body(D,M)(    const  D      doc_abstraction, @@ -1633,7 +1697,7 @@ string latex_body(D,M)(  **** ↻ loop open -#+NAME: output_latex_body +#+NAME: output_latex_body_1  #+BEGIN_SRC d    foreach (part; doc_matters.has.keys_seq.latex) {      foreach (obj; doc_abstraction[part]) { @@ -1643,7 +1707,7 @@ string latex_body(D,M)(  **** ↻ within loop  ***** frontmatter -#+NAME: output_latex_body +#+NAME: output_latex_body_2  #+BEGIN_SRC d        case "frontmatter":              assert(part == "head" || "toc");          _txt = obj.text @@ -1670,7 +1734,7 @@ string latex_body(D,M)(  ***** body -#+NAME: output_latex_body +#+NAME: output_latex_body_3  #+BEGIN_SRC d        case "body":                     assert(part == "body" || "head"); // surprise          _txt = obj.text @@ -1732,7 +1796,7 @@ string latex_body(D,M)(  ***** backmatter -#+NAME: output_latex_body +#+NAME: output_latex_body_4  #+BEGIN_SRC d        case "backmatter":          assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -1792,7 +1856,7 @@ string latex_body(D,M)(  ***** after -#+NAME: output_latex_body +#+NAME: output_latex_body_5  #+BEGIN_SRC d        case "comment":          break; @@ -1817,7 +1881,7 @@ string latex_body(D,M)(  **** latex body return -#+NAME: output_latex_body +#+NAME: output_latex_body_6  #+BEGIN_SRC d    return _latex_body;  } @@ -1826,7 +1890,7 @@ string latex_body(D,M)(  *** latex tail                                                         :tail:  **** latex tail function -#+NAME: output_latex_tail +#+NAME: output_latex_tail_0  #+BEGIN_SRC d  string latex_tail(M)(    M      doc_matters, @@ -1836,7 +1900,7 @@ string latex_tail(M)(  **** latex tail starts -#+NAME: output_latex_tail +#+NAME: output_latex_tail_1  #+BEGIN_SRC d    string _latex_tail = format(q"┃  #+END_SRC @@ -1854,7 +1918,7 @@ string latex_tail(M)(  **** latex tail format inclusions -#+NAME: output_latex_tail_close +#+NAME: output_latex_tail_close_0  #+BEGIN_SRC d  ┃",    // doc_matters.conf_make_meta.meta.title_full, @@ -1864,7 +1928,7 @@ string latex_tail(M)(  **** latex tail return -#+NAME: output_latex_tail_close +#+NAME: output_latex_tail_close_1  #+BEGIN_SRC d    return _latex_tail;  } diff --git a/org/out_metadata.org b/org/out_metadata.org index 3b5bbc5..594eb72 100644 --- a/org/out_metadata.org +++ b/org/out_metadata.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -24,7 +25,8 @@ template outputMetadata() {    @safe void outputMetadata(T)( T  doc_matters) {      <<harvested_html_search>>      <<output_imports>> -<<harvested_html_themes>> +<<harvested_html_themes_0>> +<<harvested_html_themes_1>>  <<harvested_topics_html_head_1>>  <<harvested_html_head>>  <<harvested_topics_html_head_2>> @@ -258,7 +260,7 @@ metadata_write_output(doc_matters, metadata_);  *** themes  **** head -#+NAME: harvested_html_themes +#+NAME: harvested_html_themes_0  #+BEGIN_SRC css  string theme_dark_0 = format(q"┃    body { @@ -324,7 +326,7 @@ string theme_light_0 = format(q"┃  **** levels -#+NAME: harvested_html_themes +#+NAME: harvested_html_themes_1  #+BEGIN_SRC css  string theme_dark_1 = format(q"┃    h1 { diff --git a/org/out_odt.org b/org/out_odt.org index 027816d..fe83c68 100644 --- a/org/out_odt.org +++ b/org/out_odt.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -52,7 +53,31 @@ template formatODT() {    mixin spineRgxOut;    struct formatODT {      static auto rgx = RgxO(); -    <<odt_format_objects>> +    <<odt_format_objects_0>> +    <<odt_format_objects_1>> +    <<odt_format_objects_2>> +    <<odt_format_objects_3>> +    <<odt_format_objects_4>> +    <<odt_format_objects_5>> +    <<odt_format_objects_6>> +    <<odt_format_objects_7>> +    <<odt_format_objects_8>> +    <<odt_format_objects_9>> +    <<odt_format_objects_10>> +    <<odt_format_objects_11>> +    <<odt_format_objects_12>> +    <<odt_format_objects_13>> +    <<odt_format_objects_14>> +    <<odt_format_objects_15>> +    <<odt_format_objects_16>> +    <<odt_format_objects_17>> +    <<odt_format_objects_18>> +    <<odt_format_objects_19>> +    <<odt_format_objects_20>> +    <<odt_format_objects_21>> +    <<odt_format_objects_22>> +    <<odt_format_objects_23>> +    <<odt_format_objects_24>>    }  }  template outputODT() { @@ -61,16 +86,40 @@ template outputODT() {    mixin spineRgxOut;    static auto rgx = RgxO();    // mixin outputXmlODT; -  <<output_odt_variable_content_xml>> -  <<output_odt_variable_manifest_xml>> +  <<output_odt_variable_content_xml_0>> +  <<output_odt_variable_content_xml_1>> +  <<output_odt_variable_content_xml_2>> +  <<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_10>> +  <<output_odt_variable_content_xml_11>> +  <<output_odt_variable_content_xml_12>> +  <<output_odt_variable_content_xml_13>> +  <<output_odt_variable_manifest_xml_0>> +  <<output_odt_variable_manifest_xml_1>> +  <<output_odt_variable_manifest_xml_2>>    <<output_odt_variable_copy_odt_images>> -  <<output_odt_variable_meta_xml>> +  <<output_odt_variable_meta_xml_0>> +  <<output_odt_variable_meta_xml_1>> +  <<output_odt_variable_meta_xml_2>>    <<output_odt_fixed_dirtree>>    <<output_odt_fixed_mimetype>> -  <<output_odt_fixed_manifest_rdf>> -  <<output_odt_fixed_settings_xml>> -  <<output_odt_fixed_styles_xml>> -  <<output_odt>> +  <<output_odt_fixed_manifest_rdf_0>> +  <<output_odt_fixed_manifest_rdf_1>> +  <<output_odt_fixed_manifest_rdf_2>> +  <<output_odt_fixed_settings_xml_0>> +  <<output_odt_fixed_settings_xml_1>> +  <<output_odt_fixed_settings_xml_2>> +  <<output_odt_fixed_styles_xml_0>> +  <<output_odt_fixed_styles_xml_1>> +  <<output_odt_fixed_styles_xml_2>> +  <<output_odt_0>> +  <<output_odt_1>>  }  #+END_SRC @@ -87,7 +136,7 @@ template outputODT() {  **** object attrib  ***** tags -#+NAME: odt_format_objects +#+NAME: odt_format_objects_0  #+BEGIN_SRC d  @safe string _tags(O)(const O obj) {    string _tags = ""; @@ -111,7 +160,7 @@ template outputODT() {  ****** anchor tags -#+NAME: odt_format_objects +#+NAME: odt_format_objects_1  #+BEGIN_SRC d  @safe string _xhtml_anchor_tags(O)(O obj) {    const(string[]) anchor_tags = obj.tags.anchor_tags; @@ -129,7 +178,7 @@ template outputODT() {  ***** ocn object number display -#+NAME: odt_format_objects +#+NAME: odt_format_objects_2  #+BEGIN_SRC d  @safe string obj_num(O)(const O obj) { // TODO    string _on; @@ -145,7 +194,7 @@ template outputODT() {  ***** footnotes -#+NAME: odt_format_objects +#+NAME: odt_format_objects_3  #+BEGIN_SRC d  @safe string _footnotes()(string _txt) {    static auto rgx = RgxO(); @@ -170,7 +219,7 @@ template outputODT() {  ***** bullet -#+NAME: odt_format_objects +#+NAME: odt_format_objects_4  #+BEGIN_SRC d  @safe string _bullet(O)(const O obj) {    string _b = ""; @@ -183,7 +232,7 @@ template outputODT() {  ***** para (with bullet, indent levels, footnotes extracted) -#+NAME: odt_format_objects +#+NAME: odt_format_objects_5  #+BEGIN_SRC d  @safe string _indent(O)(string _txt, const O obj) { // TODO    // if (obj.attrib.indent_base > 0 || @@ -297,7 +346,7 @@ template outputODT() {  ***** block type -#+NAME: odt_format_objects +#+NAME: odt_format_objects_6  #+BEGIN_SRC d  @safe string _block_type_delimiters(O)(string[] _block_lines, const O obj) { // TODO    string _block = ""; @@ -338,7 +387,7 @@ template outputODT() {  ***** special characters -#+NAME: odt_format_objects +#+NAME: odt_format_objects_7  #+BEGIN_SRC d  @safe string _special_characters(O)(string _txt, const O obj) {    _txt = _txt @@ -353,7 +402,7 @@ template outputODT() {  ***** preserve white space -#+NAME: odt_format_objects +#+NAME: odt_format_objects_8  #+BEGIN_SRC d  @safe string _preserve_white_spaces(O)(string _txt, const O obj) {    if (obj.metainfo.is_a == "code" || obj.metainfo.is_a == "verse" || obj.metainfo.is_a == "block") { @@ -366,7 +415,7 @@ template outputODT() {  ***** font_face -#+NAME: odt_format_objects +#+NAME: odt_format_objects_9  #+BEGIN_SRC d  string _font_face(string _txt){    _txt = _txt @@ -386,7 +435,7 @@ string _font_face(string _txt){  ***** object number -#+NAME: odt_format_objects +#+NAME: odt_format_objects_10  #+BEGIN_SRC d  @safe auto _obj_num(O)(O obj) { // NOT USED YET    struct objNum { @@ -415,7 +464,7 @@ string _font_face(string _txt){  ***** break page -#+NAME: odt_format_objects +#+NAME: odt_format_objects_11  #+BEGIN_SRC d  @safe string _break_page()() {    return format(q"┃ @@ -436,7 +485,7 @@ string _font_face(string _txt){  ***** empty lines break -#+NAME: odt_format_objects +#+NAME: odt_format_objects_12  #+BEGIN_SRC d  @safe string _empty_line_break(O)(string _txt, const O obj) {    if (obj.metainfo.is_a == "code" || obj.metainfo.is_a == "verse" || obj.metainfo.is_a == "block") { @@ -449,7 +498,7 @@ string _font_face(string _txt){  ***** links: url, mail -#+NAME: odt_format_objects +#+NAME: odt_format_objects_13  #+BEGIN_SRC d  @safe string _links(O)(string _txt, const O obj) {    if (obj.metainfo.is_a != "code") { @@ -495,7 +544,7 @@ string _font_face(string _txt){  ***** image -#+NAME: odt_format_objects +#+NAME: odt_format_objects_14  #+BEGIN_SRC d  @safe string _images(O)(string _txt, const O obj) {    if (_txt.match(rgx.inline_image)) { @@ -512,7 +561,7 @@ string _font_face(string _txt){  **** markup hub (including font face) -#+NAME: odt_format_objects +#+NAME: odt_format_objects_15  #+BEGIN_SRC d  @safe string markup(O)(const O obj) {    /+ markup TODO +/ @@ -534,7 +583,7 @@ string _font_face(string _txt){  **** para type  ***** heading -#+NAME: odt_format_objects +#+NAME: odt_format_objects_16  #+BEGIN_SRC d  @safe string heading(O,M)(    const        O  obj, @@ -584,7 +633,7 @@ string _font_face(string _txt){  ***** para -#+NAME: odt_format_objects +#+NAME: odt_format_objects_17  #+BEGIN_SRC d  @safe string para(O,M)(    const        O  obj, @@ -610,7 +659,7 @@ string _font_face(string _txt){  **** block type  ***** quote -#+NAME: odt_format_objects +#+NAME: odt_format_objects_18  #+BEGIN_SRC d  @safe string quote(O,M)(    const        O  obj, @@ -631,7 +680,7 @@ string _font_face(string _txt){    - preserves double newlines (paragraph delimiter)  - the "group" delimiter is different from the "block" delimiter in that groups do not preserve whitespace, the "block" mark does -#+NAME: odt_format_objects +#+NAME: odt_format_objects_19  #+BEGIN_SRC d  @safe string group(O,M)(    const        O  obj, @@ -666,7 +715,7 @@ string _font_face(string _txt){      - "^[ ]"        - count number only at beginning of line and replace each -#+NAME: odt_format_objects +#+NAME: odt_format_objects_20  #+BEGIN_SRC d  @safe string block(O,M)(    const        O  obj, @@ -689,7 +738,7 @@ string _font_face(string _txt){    - preserves spaces    - preserves newlines -#+NAME: odt_format_objects +#+NAME: odt_format_objects_21  #+BEGIN_SRC d  @safe string verse(O,M)(    const        O  obj, @@ -708,7 +757,7 @@ string _font_face(string _txt){  ***** code -#+NAME: odt_format_objects +#+NAME: odt_format_objects_22  #+BEGIN_SRC d  @safe string code(O,M)(    const        O  obj, @@ -762,7 +811,7 @@ string _font_face(string _txt){  ***** table  ****** tablarize -#+NAME: odt_format_objects +#+NAME: odt_format_objects_23  #+BEGIN_SRC d  @safe Tuple!(string, string) tablarize(O)(    const        O    obj, @@ -802,7 +851,7 @@ string _font_face(string _txt){  ****** table -#+NAME: odt_format_objects +#+NAME: odt_format_objects_24  #+BEGIN_SRC d  int _table_number = 0;  @safe string table(O,M)( @@ -842,7 +891,7 @@ int _table_number = 0;  ** write odt output                                             :odf:odt:out: -#+NAME: output_odt +#+NAME: output_odt_0  #+BEGIN_SRC d  void writeOutputODT(W,I)(    const W    odt_content, @@ -931,7 +980,7 @@ void writeOutputODT(W,I)(  ** odt output hub [#A]                                          :odf:odt:out: -#+NAME: output_odt +#+NAME: output_odt_1  #+BEGIN_SRC d  void outputODT(D,I)(    const    D   doc_abstraction, @@ -1019,13 +1068,13 @@ void dirtree(I)(  *** manifest.rdf                                               :manifest_rdf: -#+NAME: output_odt_fixed_manifest_rdf +#+NAME: output_odt_fixed_manifest_rdf_0  #+BEGIN_SRC d  @safe string manifest_rdf() {    string _manifest_rdf = format(q"┃<?xml version="1.0" encoding="utf-8"?>  #+END_SRC -#+NAME: output_odt_fixed_manifest_rdf +#+NAME: output_odt_fixed_manifest_rdf_1  #+BEGIN_SRC xml  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">    <rdf:Description rdf:about="styles.xml"> @@ -1046,7 +1095,7 @@ void dirtree(I)(  </rdf:RDF>  #+END_SRC -#+NAME: output_odt_fixed_manifest_rdf +#+NAME: output_odt_fixed_manifest_rdf_2  #+BEGIN_SRC d  ┃");    return _manifest_rdf; @@ -1055,13 +1104,13 @@ void dirtree(I)(  *** settings.xml                                                   :settings: -#+NAME: output_odt_fixed_settings_xml +#+NAME: output_odt_fixed_settings_xml_0  #+BEGIN_SRC d  @safe string settings_xml() {    string _settings_xml = format(q"┃<?xml version="1.0" encoding="UTF-8"?>  #+END_SRC -#+NAME: output_odt_fixed_settings_xml +#+NAME: output_odt_fixed_settings_xml_1  #+BEGIN_SRC xml  <office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" office:version="1.2">    <office:settings> @@ -1160,7 +1209,7 @@ void dirtree(I)(  </office:document-settings>  #+END_SRC -#+NAME: output_odt_fixed_settings_xml +#+NAME: output_odt_fixed_settings_xml_2  #+BEGIN_SRC d  ┃");    return _settings_xml; @@ -1169,13 +1218,13 @@ void dirtree(I)(  *** styles.xml                                                   :styles_xml: -#+NAME: output_odt_fixed_styles_xml +#+NAME: output_odt_fixed_styles_xml_0  #+BEGIN_SRC d  @safe string styles_xml() {    string _styles_xml = format(q"┃<?xml version="1.0" encoding="UTF-8"?>  #+END_SRC -#+NAME: output_odt_fixed_styles_xml +#+NAME: output_odt_fixed_styles_xml_1  #+BEGIN_SRC xml  <office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2">    <office:font-face-decls> @@ -2070,7 +2119,7 @@ void dirtree(I)(  </office:document-styles>  #+END_SRC -#+NAME: output_odt_fixed_styles_xml +#+NAME: output_odt_fixed_styles_xml_2  #+BEGIN_SRC d  ┃");    return _styles_xml; @@ -2082,7 +2131,7 @@ void dirtree(I)(  **** content head  ***** head open -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_0  #+BEGIN_SRC d  @safe string odt_head(I)(I doc_matters) {    string _has_tables = format(q"┃ @@ -2090,7 +2139,7 @@ void dirtree(I)(  ***** if table include within head -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_1  #+BEGIN_SRC xml    <style:style style:name="Table1" style:family="table">      <style:table-properties style:width="16.999cm" table:align="margins"/> @@ -2168,7 +2217,7 @@ void dirtree(I)(  ***** head -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_2  #+BEGIN_SRC d  ┃",);    string _odt_head = format(q"┃<?xml version="1.0" encoding="UTF-8"?> @@ -2176,7 +2225,7 @@ void dirtree(I)(  ***** head xml -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_3  #+BEGIN_SRC xml  <office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2">  <office:scripts/> @@ -2209,7 +2258,7 @@ void dirtree(I)(  ***** head close -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_4  #+BEGIN_SRC d  ┃",    (doc_matters.has.tables > 0) ? _has_tables : "", @@ -2221,7 +2270,7 @@ void dirtree(I)(  **** ↻ content body  ***** body open -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_5  #+BEGIN_SRC d  @safe string odt_body(D,I)(    const D    doc_abstraction, @@ -2236,7 +2285,7 @@ void dirtree(I)(  ***** ↻ the loop & outer switch (sections & objects) format output -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_6  #+BEGIN_SRC d    foreach (part; doc_matters.has.keys_seq.scroll) {      foreach (obj; doc_abstraction[part]) { @@ -2245,7 +2294,7 @@ void dirtree(I)(  ****** frontmatter -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_7  #+BEGIN_SRC d        case "frontmatter":              assert(part == "head" || "toc");          switch (obj.metainfo.is_of_type) { @@ -2270,7 +2319,7 @@ void dirtree(I)(  ****** body -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_8  #+BEGIN_SRC d        case "body":                     assert(part == "body" || "head"); // surprise          switch (obj.metainfo.is_of_type) { @@ -2321,7 +2370,7 @@ void dirtree(I)(  ****** backmatter -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_9  #+BEGIN_SRC d        case "backmatter":          assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -2371,7 +2420,7 @@ void dirtree(I)(  ***** closings & post loop -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_10  #+BEGIN_SRC d        }      } @@ -2382,13 +2431,13 @@ void dirtree(I)(  **** content book index? -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_11  #+BEGIN_SRC d  #+END_SRC  **** content tail -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_12  #+BEGIN_SRC d  @safe string odt_tail() {    string _odt_tail = format(q"┃<text:p text:style-name="P_normal">spine: <<text:a xl:type="simple" xl:href="http://www.doc_reform.org">www.doc_reform.org</text:a>> and <<text:a xl:type="simple" xl:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p> @@ -2399,7 +2448,7 @@ void dirtree(I)(  **** hub -#+NAME: output_odt_variable_content_xml +#+NAME: output_odt_variable_content_xml_13  #+BEGIN_SRC d  @safe string content_xml(D,I)(    const D    doc_abstraction, @@ -2420,7 +2469,7 @@ void dirtree(I)(      - META-INF/manifest.xml        - image list changes -#+NAME: output_odt_variable_manifest_xml +#+NAME: output_odt_variable_manifest_xml_0  #+BEGIN_SRC d  @safe string manifest_xml(M)(    auto ref              M    doc_matters, @@ -2433,7 +2482,7 @@ void dirtree(I)(    string _manifest_xml = format(q"┃<?xml version="1.0" encoding="UTF-8"?>  #+END_SRC -#+NAME: output_odt_variable_manifest_xml +#+NAME: output_odt_variable_manifest_xml_1  #+BEGIN_SRC xml  <manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">    <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text" manifest:version="1.2" manifest:full-path="/"/> @@ -2447,7 +2496,7 @@ void dirtree(I)(  </manifest:manifest>  #+END_SRC -#+NAME: output_odt_variable_manifest_xml +#+NAME: output_odt_variable_manifest_xml_2  #+BEGIN_SRC d  ┃",  _images.join("\n"), @@ -2458,7 +2507,7 @@ _images.join("\n"),  *** meta.xml (time stamp)                                          :meta_xml: -#+NAME: output_odt_variable_meta_xml +#+NAME: output_odt_variable_meta_xml_0  #+BEGIN_SRC d  @safe string meta_xml(M)(    auto ref              M    doc_matters, @@ -2467,7 +2516,7 @@ _images.join("\n"),    string _meta_xml = format(q"┃<?xml version="1.0" encoding="UTF-8"?>  #+END_SRC -#+NAME: output_odt_variable_meta_xml +#+NAME: output_odt_variable_meta_xml_1  #+BEGIN_SRC xml  <office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:grddl="http://www.w3.org/2003/g/data-view#" office:version="1.2">    <office:meta> @@ -2479,7 +2528,7 @@ _images.join("\n"),  </office:document-meta>  #+END_SRC -#+NAME: output_odt_variable_meta_xml +#+NAME: output_odt_variable_meta_xml_2  #+BEGIN_SRC d  ┃",  doc_matters.generator_program.name_and_version, diff --git a/org/out_sqlite.org b/org/out_sqlite.org index a35bcf1..a71a4ec 100644 --- a/org/out_sqlite.org +++ b/org/out_sqlite.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -183,10 +184,33 @@ template SQLiteFormatAndLoadObject() {      mixin spineRgxOut;      struct sqlite_format_and_load_objects {        <<sanitize_text_for_search>> -      <<sanitize_and_munge_inline_html>> -      <<html_objects>> -      <<sqlite_load_object>> -      <<hub_format_and_sqlite_load_objects>> +      <<sanitize_and_munge_inline_html_0>> +      <<sanitize_and_munge_inline_html_1>> +      <<sanitize_and_munge_inline_html_2>> +      <<sanitize_and_munge_inline_html_3>> +      <<sanitize_and_munge_inline_html_4>> +      <<sanitize_and_munge_inline_html_5>> +      <<sanitize_and_munge_inline_html_6>> +      <<sanitize_and_munge_inline_html_7>> +      <<html_objects_0>> +      <<html_objects_1>> +      <<html_objects_2>> +      <<html_objects_3>> +      <<html_objects_4>> +      <<html_objects_5>> +      <<html_objects_6>> +      <<html_objects_7>> +      <<sqlite_load_object_0>> +      <<sqlite_load_object_1>> +      <<sqlite_load_object_2>> +      <<hub_format_and_sqlite_load_objects_0>> +      <<hub_format_and_sqlite_load_objects_1>> +      <<hub_format_and_sqlite_load_objects_2>> +      <<hub_format_and_sqlite_load_objects_3>> +      <<hub_format_and_sqlite_load_objects_4>> +      <<hub_format_and_sqlite_load_objects_5>> +      <<hub_format_and_sqlite_load_objects_6>> +      <<hub_format_and_sqlite_load_objects_7>>      }      return sqlite_format_and_load_objects();    } @@ -222,7 +246,9 @@ template SQLiteDeleteDocument() {    string SQLiteDeleteDocument(M)(      M doc_matters,    ) { -    <<sqlite_formatted_delete>> +    <<sqlite_formatted_delete_0>> +    <<sqlite_formatted_delete_1>> +    <<sqlite_formatted_delete_2>>      return _delete_uid;    }  } @@ -236,8 +262,16 @@ template SQLiteInsertMetadata() {    string SQLiteInsertMetadata(M)(      M doc_matters,    ) { -    <<sqlite_formatted_insertions_doc_matters_metadata>> -    <<sqlite_formatted_insertions_topic_register>> +    <<sqlite_formatted_insertions_doc_matters_metadata_0>> +    <<sqlite_formatted_insertions_doc_matters_metadata_1>> +    <<sqlite_formatted_insertions_doc_matters_metadata_2>> +    <<sqlite_formatted_insertions_doc_matters_metadata_3>> +    <<sqlite_formatted_insertions_topic_register_0>> +    <<sqlite_formatted_insertions_topic_register_1>> +    <<sqlite_formatted_insertions_topic_register_2>> +    <<sqlite_formatted_insertions_topic_register_3>> +    <<sqlite_formatted_insertions_topic_register_4>> +    <<sqlite_formatted_insertions_topic_register_5>>      return _insert_metadata;    }  } @@ -255,7 +289,10 @@ template SQLiteInsertDocObjectsLoop() {      string _uid = SQLinsertDelimiter!()(doc_matters.src.doc_uid);      auto url_html = spineUrlsHTML!()(doc_matters.conf_make_meta.conf.w_srv_data_root_url_html, doc_matters.src.language);      string insertDocObjectsRow(O)(O obj) { -      <<sqlite_formatted_insertions_doc_objects>> +      <<sqlite_formatted_insertions_doc_objects_0>> +      <<sqlite_formatted_insertions_doc_objects_1>> +      <<sqlite_formatted_insertions_doc_objects_2>> +      <<sqlite_formatted_insertions_doc_objects_3>>        return _insert_doc_objects_row;      }      <<sqlite_objects_loop>> @@ -477,7 +514,7 @@ light html objects  ***** munge  ****** general munge (special characters, inline markup, move notes) -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_0  #+BEGIN_SRC d  string munge_html(M,O)(          M    doc_matters, @@ -522,7 +559,7 @@ string munge_html(M,O)(  ****** special characters -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_1  #+BEGIN_SRC d  string html_special_characters(string _txt){    _txt = _txt @@ -538,7 +575,7 @@ string html_special_characters(string _txt){  ****** special characters for code -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_2  #+BEGIN_SRC d  string html_special_characters_code(string _txt){    _txt = _txt @@ -553,7 +590,7 @@ string html_special_characters_code(string _txt){  ****** font_face -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_3  #+BEGIN_SRC d  string html_font_face(string _txt){    _txt = _txt @@ -574,7 +611,7 @@ string html_font_face(string _txt){  ****** inline markup  ******* images -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_4  #+BEGIN_SRC d  string inline_images(M,O)(                 M  doc_matters, @@ -605,7 +642,7 @@ string inline_images(M,O)(  ******* links  ******** scroll, seg, epub -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_5  #+BEGIN_SRC d  string inline_links(M,O)(                 M doc_matters, @@ -715,7 +752,7 @@ string inline_links(M,O)(  ******* notes  ******** scroll -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_6  #+BEGIN_SRC d  string inline_notes_scroll(M,O)(                 M   doc_matters, @@ -751,7 +788,7 @@ string inline_notes_scroll(M,O)(  ******* inline markup -#+NAME: sanitize_and_munge_inline_html +#+NAME: sanitize_and_munge_inline_html_7  #+BEGIN_SRC d  string xml_type="seg"; /+ set html document type to be linked to here (seg|scroll) +/  string inline_markup(M,O)( @@ -769,7 +806,7 @@ string inline_markup(M,O)(  ***** objects  ****** heading -#+NAME: html_objects +#+NAME: html_objects_0  #+BEGIN_SRC d  string html_heading(M,O)(          M   doc_matters, @@ -815,7 +852,7 @@ string html_heading(M,O)(  ****** para -#+NAME: html_objects +#+NAME: html_objects_1  #+BEGIN_SRC d  string html_para(M,O)(          M   doc_matters, @@ -842,7 +879,7 @@ string html_para(M,O)(  ****** quote -#+NAME: html_objects +#+NAME: html_objects_2  #+BEGIN_SRC d  string html_quote(M,O)(          M   doc_matters, @@ -865,7 +902,7 @@ string html_quote(M,O)(  ****** group -#+NAME: html_objects +#+NAME: html_objects_3  #+BEGIN_SRC d  string html_group(M,O)(          M   doc_matters, @@ -888,7 +925,7 @@ string html_group(M,O)(  ****** block -#+NAME: html_objects +#+NAME: html_objects_4  #+BEGIN_SRC d  string html_block(M,O)(          M   doc_matters, @@ -910,7 +947,7 @@ string html_block(M,O)(  ****** verse -#+NAME: html_objects +#+NAME: html_objects_5  #+BEGIN_SRC d  string html_verse(M,O)(          M   doc_matters, @@ -931,7 +968,7 @@ string html_verse(M,O)(  ****** code -#+NAME: html_objects +#+NAME: html_objects_6  #+BEGIN_SRC d  string html_code(O)(    const O   obj, @@ -951,7 +988,7 @@ string html_code(O)(  ****** table -#+NAME: html_objects +#+NAME: html_objects_7  #+BEGIN_SRC d  string html_table(M,O)(          M   doc_matters, @@ -1023,7 +1060,7 @@ string html_table(M,O)(  *** 2. hub (sqlite_format_and_load_objects)  **** sql related -#+NAME: sqlite_load_object +#+NAME: sqlite_load_object_0  #+BEGIN_SRC d  string sqlite_load_string(M,O)(          M   doc_matters, @@ -1034,7 +1071,7 @@ string sqlite_load_string(M,O)(  }  #+END_SRC -#+NAME: sqlite_load_object +#+NAME: sqlite_load_object_1  #+BEGIN_SRC d  string postgresql_load_string(M,O)(          M   doc_matters, @@ -1045,7 +1082,7 @@ string postgresql_load_string(M,O)(  }  #+END_SRC -#+NAME: sqlite_load_object +#+NAME: sqlite_load_object_2  #+BEGIN_SRC d  string sqlite_statement(O)(    const O          obj, @@ -1065,7 +1102,7 @@ string sqlite_statement(O)(  **** heading -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_0  #+BEGIN_SRC d  string[string] heading(M,O)(          M   doc_matters, @@ -1094,7 +1131,7 @@ string[string] heading(M,O)(  **** para -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_1  #+BEGIN_SRC d  string[string] para(M,O)(          M   doc_matters, @@ -1123,7 +1160,7 @@ string[string] para(M,O)(  **** quote -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_2  #+BEGIN_SRC d  string[string] quote(M,O)(          M   doc_matters, @@ -1151,7 +1188,7 @@ string[string] quote(M,O)(  #+END_SRC  **** group -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_3  #+BEGIN_SRC d  string[string] group(M,O)(          M   doc_matters, @@ -1180,7 +1217,7 @@ string[string] group(M,O)(  **** block -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_4  #+BEGIN_SRC d  string[string] block(M,O)(          M   doc_matters, @@ -1209,7 +1246,7 @@ string[string] block(M,O)(  **** verse -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_5  #+BEGIN_SRC d  string[string] verse(M,O)(          M   doc_matters, @@ -1238,7 +1275,7 @@ string[string] verse(M,O)(  **** code -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_6  #+BEGIN_SRC d  string[string] code(M,O)(          M   doc_matters, @@ -1267,7 +1304,7 @@ string[string] code(M,O)(  **** table -#+NAME: hub_format_and_sqlite_load_objects +#+NAME: hub_format_and_sqlite_load_objects_7  #+BEGIN_SRC d  string[string] table(M,O)(          M   doc_matters, @@ -1682,7 +1719,7 @@ CREATE INDEX idx_topics       ON metadata_and_text(classify_topic_register);  **** DELETE uid rows doc matters & metadata  ***** sql statement: dlang format -#+NAME: sqlite_formatted_delete +#+NAME: sqlite_formatted_delete_0  #+BEGIN_SRC d  string _uid = doc_matters.src.doc_uid;  string _delete_uid = format(q"┃ @@ -1690,7 +1727,7 @@ string _delete_uid = format(q"┃  ***** DELETE FROM ... WHERE -#+NAME: sqlite_formatted_delete +#+NAME: sqlite_formatted_delete_1  #+BEGIN_SRC sql  DELETE FROM metadata_and_text  WHERE uid = '%s'; @@ -1700,7 +1737,7 @@ WHERE uid_metadata_and_text = '%s';  ***** VALUES -#+NAME: sqlite_formatted_delete +#+NAME: sqlite_formatted_delete_2  #+BEGIN_SRC d  ┃",    _uid, @@ -1712,7 +1749,7 @@ WHERE uid_metadata_and_text = '%s';  **** INSERT doc matters & metadata  ***** sql statement: dlang format -#+NAME: sqlite_formatted_insertions_doc_matters_metadata +#+NAME: sqlite_formatted_insertions_doc_matters_metadata_0  #+BEGIN_SRC d  string _uid = SQLinsertDelimiter!()(doc_matters.src.doc_uid);  string _insert_metadata = format(q"┃ @@ -1720,7 +1757,7 @@ string _insert_metadata = format(q"┃  ***** INSERT INTO -#+NAME: sqlite_formatted_insertions_doc_matters_metadata +#+NAME: sqlite_formatted_insertions_doc_matters_metadata_1  #+BEGIN_SRC sql    INSERT INTO metadata_and_text (      uid, @@ -1778,7 +1815,7 @@ string _insert_metadata = format(q"┃  ***** VALUES -#+NAME: sqlite_formatted_insertions_doc_matters_metadata +#+NAME: sqlite_formatted_insertions_doc_matters_metadata_2  #+BEGIN_SRC sql    VALUES (      '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' @@ -1787,7 +1824,7 @@ string _insert_metadata = format(q"┃  ***** dlang values for formatting -#+NAME: sqlite_formatted_insertions_doc_matters_metadata +#+NAME: sqlite_formatted_insertions_doc_matters_metadata_3  #+BEGIN_SRC d  ┃",    _uid, @@ -1849,7 +1886,7 @@ writeln(doc_matters.conf_make_meta.meta.classify_topic_register_arr);  ***** { if topic register then loop topic register array -#+NAME: sqlite_formatted_insertions_topic_register +#+NAME: sqlite_formatted_insertions_topic_register_0  #+BEGIN_SRC d  if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) {    string _insert_topics; @@ -1859,14 +1896,14 @@ if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) {  ***** sql statement: dlang format -#+NAME: sqlite_formatted_insertions_topic_register +#+NAME: sqlite_formatted_insertions_topic_register_1  #+BEGIN_SRC d  _insert_topics ~= format(q"┃  #+END_SRC  ***** INSERT INTO -#+NAME: sqlite_formatted_insertions_topic_register +#+NAME: sqlite_formatted_insertions_topic_register_2  #+BEGIN_SRC sql    INSERT INTO topic_register (      uid_metadata_and_text, @@ -1880,7 +1917,7 @@ _insert_topics ~= format(q"┃  ***** VALUES -#+NAME: sqlite_formatted_insertions_topic_register +#+NAME: sqlite_formatted_insertions_topic_register_3  #+BEGIN_SRC sql    VALUES (      '%s', '%s', '%s', '%s', '%s', '%s' @@ -1889,7 +1926,7 @@ _insert_topics ~= format(q"┃  ***** dlang values for formatting -#+NAME: sqlite_formatted_insertions_topic_register +#+NAME: sqlite_formatted_insertions_topic_register_4  #+BEGIN_SRC d  ┃",    _uid, @@ -1903,7 +1940,7 @@ _insert_topics ~= format(q"┃  ***** } close topic register & loop topic register array -#+NAME: sqlite_formatted_insertions_topic_register +#+NAME: sqlite_formatted_insertions_topic_register_5  #+BEGIN_SRC d    }  } @@ -1920,14 +1957,14 @@ either:  ***** sql statement: dlang format -#+NAME: sqlite_formatted_insertions_doc_objects +#+NAME: sqlite_formatted_insertions_doc_objects_0  #+BEGIN_SRC d  string _insert_doc_objects_row = format(q"┃  #+END_SRC  ***** INSERT INTO -#+NAME: sqlite_formatted_insertions_doc_objects +#+NAME: sqlite_formatted_insertions_doc_objects_1  #+BEGIN_SRC sql    INSERT INTO doc_objects (      uid_metadata_and_text, @@ -1944,7 +1981,7 @@ string _insert_doc_objects_row = format(q"┃  ***** VALUES -#+NAME: sqlite_formatted_insertions_doc_objects +#+NAME: sqlite_formatted_insertions_doc_objects_2  #+BEGIN_SRC sql    VALUES (      '%s', %s, '%s', '%s', '%s', %s, '%s', '%s', '%s' @@ -1953,7 +1990,7 @@ string _insert_doc_objects_row = format(q"┃  ***** dlang values for formatting -#+NAME: sqlite_formatted_insertions_doc_objects +#+NAME: sqlite_formatted_insertions_doc_objects_3  #+BEGIN_SRC d  ┃",    _uid, diff --git a/org/out_src_pod.org b/org/out_src_pod.org index 3fc6d82..e7d761b 100644 --- a/org/out_src_pod.org +++ b/org/out_src_pod.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -29,7 +30,8 @@ template spinePod() {      <<source_pod_archive>>      try {        <<source_pod_mkdirs>> -      <<source_pod_copy>> +      <<source_pod_copy_0>> +      <<source_pod_copy_1>>        <<source_pod_zip>>      } catch (ErrnoException ex) {        // Handle error @@ -140,7 +142,7 @@ if (doc_matters.opt.action.source) {  ** copy                                                                :copy: -#+NAME: source_pod_copy +#+NAME: source_pod_copy_0  #+BEGIN_SRC d  debug(pod) {    writeln(__LINE__, ": ", @@ -393,7 +395,7 @@ auto fn_pod = pths_pod.pod_filename(doc_matters.src.filename).zpod;  ** sha256 of pod.zip, zip debug, read zip archive -#+NAME: source_pod_copy +#+NAME: source_pod_copy_1  #+BEGIN_SRC d  if (exists(fn_pod)) {    try { diff --git a/org/out_xmls.org b/org/out_xmls.org index c76e44b..eb83196 100644 --- a/org/out_xmls.org +++ b/org/out_xmls.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -28,7 +29,45 @@ template outputXHTMLs() {    mixin spineRgxOut;    struct outputXHTMLs {      static auto rgx = RgxO(); -    <<xhtml_format_objects>> +    <<xhtml_format_objects_0>> +    <<xhtml_format_objects_1>> +    <<xhtml_format_objects_2>> +    <<xhtml_format_objects_3>> +    <<xhtml_format_objects_4>> +    <<xhtml_format_objects_5>> +    <<xhtml_format_objects_6>> +    <<xhtml_format_objects_7>> +    <<xhtml_format_objects_8>> +    <<xhtml_format_objects_9>> +    <<xhtml_format_objects_10>> +    <<xhtml_format_objects_11>> +    <<xhtml_format_objects_12>> +    <<xhtml_format_objects_13>> +    <<xhtml_format_objects_14>> +    <<xhtml_format_objects_15>> +    <<xhtml_format_objects_16>> +    <<xhtml_format_objects_17>> +    <<xhtml_format_objects_18>> +    <<xhtml_format_objects_19>> +    <<xhtml_format_objects_20>> +    <<xhtml_format_objects_21>> +    <<xhtml_format_objects_22>> +    <<xhtml_format_objects_23>> +    <<xhtml_format_objects_24>> +    <<xhtml_format_objects_25>> +    <<xhtml_format_objects_26>> +    <<xhtml_format_objects_27>> +    <<xhtml_format_objects_28>> +    <<xhtml_format_objects_29>> +    <<xhtml_format_objects_30>> +    <<xhtml_format_objects_31>> +    <<xhtml_format_objects_32>> +    <<xhtml_format_objects_33>> +    <<xhtml_format_objects_34>> +    <<xhtml_format_objects_35>> +    <<xhtml_format_objects_36>> +    <<xhtml_format_objects_37>> +    <<xhtml_format_objects_38>>      <<xhtml_format_objects_code>>    }  } @@ -71,7 +110,7 @@ import  *** misc  **** div delimiter -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_0  #+BEGIN_SRC d  @safe string div_delimit(               string  part, @@ -107,7 +146,7 @@ import  **** special characters text -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_1  #+BEGIN_SRC d  @safe string special_characters_text(string _txt) {    _txt = _txt @@ -122,7 +161,7 @@ import  **** special characters -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_2  #+BEGIN_SRC d  @safe string special_characters(O)(    const  O         obj, @@ -138,7 +177,7 @@ import  **** font_face -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_3  #+BEGIN_SRC d  @safe string font_face(string _txt) {    _txt = _txt @@ -158,7 +197,7 @@ import  **** anchor tags -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_4  #+BEGIN_SRC d  @safe string _xhtml_anchor_tags(O)(O obj) {    const(string[]) anchor_tags = obj.tags.anchor_tags; @@ -177,7 +216,7 @@ import  **** doc head & tails  ***** metadata -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_5  #+BEGIN_SRC d  @safe string header_metadata(M)(    M  doc_matters, @@ -220,7 +259,7 @@ import  ***** site info button -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_6  #+BEGIN_SRC d  @safe string site_info_button(M)(    M  doc_matters, @@ -250,7 +289,7 @@ import  ***** search form -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_7  #+BEGIN_SRC d  @safe string inline_search_form(M)(    M  doc_matters, @@ -289,7 +328,7 @@ import  ***** html head & head banner -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_8  #+BEGIN_SRC d  @safe string html_head(M)(    M  doc_matters, @@ -346,7 +385,7 @@ import  ***** epub seg head -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_9  #+BEGIN_SRC d  @safe string epub3_seg_head(M)(    M  doc_matters, @@ -420,7 +459,7 @@ import  ***** xhtml tail -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_10  #+BEGIN_SRC d  @safe string tail() {    string o; @@ -436,7 +475,7 @@ import  *** inline markup  **** images -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_11  #+BEGIN_SRC d  @safe string inline_images(O,M)(    string          _txt, @@ -469,7 +508,7 @@ import  **** links  ***** scroll, seg, epub -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_12  #+BEGIN_SRC d  @safe string inline_links(O,M)(    string          _txt, @@ -567,7 +606,7 @@ import  **** notes  ***** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_13  #+BEGIN_SRC d  @safe string inline_notes_scroll(O,M)(    string          _txt, @@ -604,7 +643,7 @@ import  ***** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_14  #+BEGIN_SRC d  @safe Tuple!(string, string[]) inline_notes_seg(O,M)(              string  _txt, @@ -675,7 +714,7 @@ import  **** inline markup  ***** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_15  #+BEGIN_SRC d  @safe string inline_markup_scroll(O,M)(    string          _txt, @@ -697,7 +736,7 @@ import  ***** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_16  #+BEGIN_SRC d  @safe auto inline_markup_seg(O,M)(    string          _txt, @@ -724,7 +763,7 @@ import  *** toc  **** subtoc -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_17  #+BEGIN_SRC d  @safe string lev4_heading_subtoc(O,M)(    const        O  obj, @@ -757,7 +796,7 @@ import  **** navigation pre next svg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_18  #+BEGIN_SRC d  @safe auto nav_pre_next_svg(O,M)(    const        O  obj, @@ -838,7 +877,7 @@ import  *** heading  **** heading -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_19  #+BEGIN_SRC d  @safe string heading(O,M)(          string _txt, @@ -909,7 +948,7 @@ import  **** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_20  #+BEGIN_SRC d  @safe string heading_scroll(O,M)(    string          _txt, @@ -925,7 +964,7 @@ import  **** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_21  #+BEGIN_SRC d  @safe Tuple!(string, string[]) heading_seg(O,M)(    string          _txt, @@ -949,7 +988,7 @@ import  *** para  **** para -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_22  #+BEGIN_SRC d  @safe string para(O,M)(          string _txt, @@ -1005,7 +1044,7 @@ import  **** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_23  #+BEGIN_SRC d  @safe string para_scroll(O,M)(    string          _txt, @@ -1024,7 +1063,7 @@ import  **** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_24  #+BEGIN_SRC d  @safe Tuple!(string, string[]) para_seg(O,M)(    string          _txt, @@ -1048,7 +1087,7 @@ import  *** quote  **** quote -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_25  #+BEGIN_SRC d  @safe string quote(O,M)(          string _txt, @@ -1090,7 +1129,7 @@ import  **** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_26  #+BEGIN_SRC d  @safe string quote_scroll(O,M)(    string          _txt, @@ -1106,7 +1145,7 @@ import  **** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_27  #+BEGIN_SRC d  @safe Tuple!(string, string[]) quote_seg(O,M)(    string          _txt, @@ -1130,7 +1169,7 @@ import  *** group  **** group -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_28  #+BEGIN_SRC d  @safe string group(O,M)(          string _txt, @@ -1174,7 +1213,7 @@ import  **** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_29  #+BEGIN_SRC d  @safe string group_scroll(O,M)(    string          _txt, @@ -1191,7 +1230,7 @@ import  **** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_30  #+BEGIN_SRC d  @safe Tuple!(string, string[]) group_seg(O,M)(    string          _txt, @@ -1215,7 +1254,7 @@ import  *** block  **** block -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_31  #+BEGIN_SRC d  @safe string block(O,M)(          string _txt, @@ -1255,7 +1294,7 @@ import  **** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_32  #+BEGIN_SRC d  @safe string block_scroll(O,M)(    string          _txt, @@ -1272,7 +1311,7 @@ import  **** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_33  #+BEGIN_SRC d  @safe Tuple!(string, string[]) block_seg(O,M)(    string          _txt, @@ -1296,7 +1335,7 @@ import  *** poem verse  **** verse -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_34  #+BEGIN_SRC d  @safe string verse(O,M)(          string _txt, @@ -1334,7 +1373,7 @@ import  **** scroll -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_35  #+BEGIN_SRC d  @safe string verse_scroll(O,M)(    string          _txt, @@ -1351,7 +1390,7 @@ import  **** seg -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_36  #+BEGIN_SRC d  @safe Tuple!(string, string[]) verse_seg(O,M)(    string          _txt, @@ -1446,7 +1485,7 @@ align="left|right|center"  "style=\"text-align:"  ~ "right\"" -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_37  #+BEGIN_SRC d  @safe Tuple!(string, string) tablarize(O)(    string            _txt, @@ -1485,7 +1524,7 @@ align="left|right|center"  **** table -#+NAME: xhtml_format_objects +#+NAME: xhtml_format_objects_38  #+BEGIN_SRC d  @safe string table(O,M)(          string _txt, @@ -1531,8 +1570,22 @@ module doc_reform.io_out.html;  template outputHTML() {    <<output_imports_xml>>    mixin outputXHTMLs; -  <<output_html_scroll>> -  <<output_html_seg>> +  <<output_html_scroll_0>> +  <<output_html_scroll_1>> +  <<output_html_scroll_2>> +  <<output_html_scroll_3>> +  <<output_html_scroll_4>> +  <<output_html_scroll_5>> +  <<output_html_scroll_6>> +  <<output_html_seg_0>> +  <<output_html_seg_1>> +  <<output_html_seg_2>> +  <<output_html_seg_3>> +  <<output_html_seg_4>> +  <<output_html_seg_5>> +  <<output_html_seg_6>> +  <<output_html_seg_7>> +  <<output_html_seg_8>>    <<output_html_css>>    <<copy_html_images>>  } @@ -1541,7 +1594,7 @@ template outputHTML() {  ** scroll                                                            :scroll:  *** ↻ loop & switch (sections & objects) format html output -#+NAME: output_html_scroll +#+NAME: output_html_scroll_0  #+BEGIN_SRC d  @safe void scroll(D,M)(    const        D    doc_abstraction, @@ -1559,7 +1612,7 @@ template outputHTML() {  **** ↻ the loops & outer switch (sections & objects) format output -#+NAME: output_html_scroll +#+NAME: output_html_scroll_1  #+BEGIN_SRC d    foreach (part; doc_matters.has.keys_seq.scroll) {      foreach (obj; doc_abstraction[part]) { @@ -1570,7 +1623,7 @@ template outputHTML() {  ***** frontmatter -#+NAME: output_html_scroll +#+NAME: output_html_scroll_2  #+BEGIN_SRC d        case "frontmatter":              assert(part == "head" || "toc");          switch (obj.metainfo.is_of_type) { @@ -1606,7 +1659,7 @@ template outputHTML() {  ***** body -#+NAME: output_html_scroll +#+NAME: output_html_scroll_3  #+BEGIN_SRC d        case "body":                     assert(part == "body" || "head");          switch (obj.metainfo.is_of_type) { @@ -1674,7 +1727,7 @@ template outputHTML() {  ***** backmatter -#+NAME: output_html_scroll +#+NAME: output_html_scroll_4  #+BEGIN_SRC d        case "backmatter":          assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -1735,7 +1788,7 @@ template outputHTML() {  ***** closings & post loop -#+NAME: output_html_scroll +#+NAME: output_html_scroll_5  #+BEGIN_SRC d        }      } @@ -1747,7 +1800,7 @@ template outputHTML() {  *** write output file -#+NAME: output_html_scroll +#+NAME: output_html_scroll_6  #+BEGIN_SRC d  @trusted void scroll_write_output(D,M)(    D doc, @@ -1777,7 +1830,7 @@ template outputHTML() {  ** seg                                                                  :seg:  *** ↻ loop & switch (sections & objects) format html output -#+NAME: output_html_seg +#+NAME: output_html_seg_0  #+BEGIN_SRC d  @safe void seg(D,M)(    const D    doc_abstraction, @@ -1799,7 +1852,7 @@ template outputHTML() {  **** ↻ the loop (sections & objects) format output -#+NAME: output_html_seg +#+NAME: output_html_seg_1  #+BEGIN_SRC d    foreach (part; doc_matters.has.keys_seq.seg) {      foreach (obj; doc_abstraction[part]) { @@ -1809,7 +1862,7 @@ template outputHTML() {  ***** all headings -#+NAME: output_html_seg +#+NAME: output_html_seg_2  #+BEGIN_SRC d        if (obj.metainfo.is_a == "heading") {          assert(part == "head" || "toc" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -1882,7 +1935,7 @@ template outputHTML() {  ***** non-heading -#+NAME: output_html_seg +#+NAME: output_html_seg_3  #+BEGIN_SRC d        } else {          assert(part == "head" || "toc" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -1891,7 +1944,7 @@ template outputHTML() {  ****** frontmatter -#+NAME: output_html_seg +#+NAME: output_html_seg_4  #+BEGIN_SRC d          case "frontmatter":             assert(part == "head" || "toc");            switch (obj.metainfo.is_of_type) { @@ -1925,7 +1978,7 @@ template outputHTML() {  ****** body -#+NAME: output_html_seg +#+NAME: output_html_seg_5  #+BEGIN_SRC d          case "body":                    assert(part == "body");            switch (obj.metainfo.is_of_type) { @@ -2001,7 +2054,7 @@ template outputHTML() {  ****** backmatter -#+NAME: output_html_seg +#+NAME: output_html_seg_6  #+BEGIN_SRC d          case "backmatter":            assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -2067,7 +2120,7 @@ template outputHTML() {  ***** closings & post loop -#+NAME: output_html_seg +#+NAME: output_html_seg_7  #+BEGIN_SRC d        }      } @@ -2078,7 +2131,7 @@ template outputHTML() {  *** write output files -#+NAME: output_html_seg +#+NAME: output_html_seg_8  #+BEGIN_SRC d  @trusted void seg_write_output(D,E,M)( // @system?    D doc_html, @@ -2194,10 +2247,22 @@ template outputEPub3() {    <<output_imports_epub>>    mixin InternalMarkup;    mixin outputXHTMLs; -  <<output_epub3_fixed>> -  <<output_epub3_constructs>> +  <<output_epub3_fixed_0>> +  <<output_epub3_fixed_1>> +  <<output_epub3_constructs_0>> +  <<output_epub3_constructs_1>> +  <<output_epub3_constructs_2>>    <<output_epub3_xhtml>> -  <<output_epub3_xhtml_seg>> +  <<output_epub3_xhtml_seg_0>> +  <<output_epub3_xhtml_seg_1>> +  <<output_epub3_xhtml_seg_2>> +  <<output_epub3_xhtml_seg_3>> +  <<output_epub3_xhtml_seg_4>> +  <<output_epub3_xhtml_seg_5>> +  <<output_epub3_xhtml_seg_6>> +  <<output_epub3_xhtml_seg_7>> +  <<output_epub3_xhtml_seg_8>> +  <<output_epub3_xhtml_seg_9>>    <<output_epub3_css>>  }  #+END_SRC @@ -2208,7 +2273,7 @@ template outputEPub3() {  - mimetype file indicating that zip file contains an EPUB -#+NAME: output_epub3_fixed +#+NAME: output_epub3_fixed_0  #+BEGIN_SRC d  @safe string epub3_mimetypes() {    string o; @@ -2221,7 +2286,7 @@ template outputEPub3() {  - identifies the root package document (so systems can find it), [unchanged from epub2] -#+NAME: output_epub3_fixed +#+NAME: output_epub3_fixed_1  #+BEGIN_SRC d  @safe string epub3_container_xml() {    string o; @@ -2243,7 +2308,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  - provides the default reading order  - identifies the navigation document -#+NAME: output_epub3_constructs +#+NAME: output_epub3_constructs_0  #+BEGIN_SRC d  @safe string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) {    auto xhtml_format = outputXHTMLs(); @@ -2349,7 +2414,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  - toc_nav.xhtml declared as nav file in content.opf (epub3 navigation document) -#+NAME: output_epub3_constructs +#+NAME: output_epub3_constructs_1  #+BEGIN_SRC d  @safe string epub3_oebps_toc_nav_xhtml(D,I)(D doc_abstraction, I doc_matters) {    enum DomTags { none, open, close, close_and_open, open_still, } @@ -2437,7 +2502,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  - toc.ncx (epub2 navigation document)    - (replaced in epub3 by a declared xhtml nav file, in our case toc_nav.xhtml) -#+NAME: output_epub3_constructs +#+NAME: output_epub3_constructs_2  #+BEGIN_SRC d  @safe string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) {    int counter = 0; @@ -2533,7 +2598,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ** the document contents                                                :seg:  *** ↻ loop & switch (sections & objects) format epub3 xhtml output -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_0  #+BEGIN_SRC d  @system void outputEPub3(D,I)(    const D    doc_abstraction, @@ -2564,7 +2629,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  **** ↻ the loop (sections & objects) format output -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_1  #+BEGIN_SRC d    foreach (part; doc_matters.has.keys_seq.seg) {      foreach (obj; doc_abstraction[part]) { @@ -2573,7 +2638,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ***** all headings -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_2  #+BEGIN_SRC d        if (obj.metainfo.is_a == "heading") {          assert(part == "head" || "toc" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -2642,7 +2707,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ***** non-heading -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_3  #+BEGIN_SRC d        } else {          assert(part == "head" || "toc" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -2651,7 +2716,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ****** frontmatter -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_4  #+BEGIN_SRC d          case "frontmatter":             assert(part == "head" || "toc");            switch (obj.metainfo.is_of_type) { @@ -2686,7 +2751,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ****** body -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_5  #+BEGIN_SRC d          case "body":                    assert(part == "body");            switch (obj.metainfo.is_of_type) { @@ -2762,7 +2827,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ****** backmatter -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_6  #+BEGIN_SRC d          case "backmatter":            assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex" || "blurb" || "tail"); @@ -2873,7 +2938,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ***** closings & post loop -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_7  #+BEGIN_SRC d        }      } @@ -2890,7 +2955,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ** write output files                                             :write:zip: -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_8  #+BEGIN_SRC d  @system void epub3_write_output_files(W,M)(    W epub_write, @@ -3086,7 +3151,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">  ** zip debug, read zip  archive                                         :zip: -#+NAME: output_epub3_xhtml_seg +#+NAME: output_epub3_xhtml_seg_9  #+BEGIN_SRC d    debug(epub_archive) {      if (exists(fn_epub)) { diff --git a/org/out_xmls_css.org b/org/out_xmls_css.org index be358a6..38bb73d 100644 --- a/org/out_xmls_css.org +++ b/org/out_xmls_css.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -31,39 +32,90 @@ template spineCss() {  <<css_insert_shared_insert_variable_indent_values>>  <<css_insert_shared_insert_variable_ocn_color_values>>      string _css_light_html_seg = format(q"┃ -<<css_light_shared>> -<<css_light_html_seg>> +<<css_light_shared_0>> +<<css_light_shared_1>> +<<css_light_shared_2>> +<<css_light_shared_3>> +<<css_light_shared_4>> +<<css_light_shared_5>> +<<css_light_shared_6>> +<<css_light_shared_7>> +<<css_light_shared_8>> +<<css_light_shared_9>> +<<css_light_html_seg_0>> +<<css_light_html_seg_1>> +<<css_light_html_seg_2>>  ┃",      _color_ocn_light,      _css_indent,      _color_ocn_light,  );      string _css_dark_html_seg = format(q"┃ -<<css_dark_shared>> -<<css_dark_html_seg>> +<<css_dark_shared_0>> +<<css_dark_shared_1>> +<<css_dark_shared_2>> +<<css_dark_shared_3>> +<<css_dark_shared_4>> +<<css_dark_shared_5>> +<<css_dark_shared_6>> +<<css_dark_shared_7>> +<<css_dark_shared_8>> +<<css_dark_shared_9>> +<<css_dark_html_seg_0>> +<<css_dark_html_seg_1>> +<<css_dark_html_seg_2>>  ┃",      _color_ocn_dark,      _css_indent,      _color_ocn_dark,  );      string _css_light_html_scroll = format(q"┃ -<<css_light_shared>> -<<css_light_html_scroll>> +<<css_light_shared_0>> +<<css_light_shared_1>> +<<css_light_shared_2>> +<<css_light_shared_3>> +<<css_light_shared_4>> +<<css_light_shared_5>> +<<css_light_shared_6>> +<<css_light_shared_7>> +<<css_light_shared_8>> +<<css_light_shared_9>> +<<css_light_html_scroll_0>> +<<css_light_html_scroll_1>>  ┃",      _color_ocn_light,      _css_indent,      _color_ocn_light,  );      string _css_dark_html_scroll = format(q"┃ -<<css_dark_shared>> -<<css_dark_html_scroll>> +<<css_dark_shared_0>> +<<css_dark_shared_1>> +<<css_dark_shared_2>> +<<css_dark_shared_3>> +<<css_dark_shared_4>> +<<css_dark_shared_5>> +<<css_dark_shared_6>> +<<css_dark_shared_7>> +<<css_dark_shared_8>> +<<css_dark_shared_9>> +<<css_dark_html_scroll_0>> +<<css_dark_html_scroll_1>>  ┃",      _color_ocn_dark,      _css_indent,      _color_ocn_dark,  );      string _css_light_epub = format(q"┃ -<<css_light_shared>> +<<css_light_shared_0>> +<<css_light_shared_1>> +<<css_light_shared_2>> +<<css_light_shared_3>> +<<css_light_shared_4>> +<<css_light_shared_5>> +<<css_light_shared_6>> +<<css_light_shared_7>> +<<css_light_shared_8>> +<<css_light_shared_9>>  <<css_light_epub>>  ┃",      _color_ocn_light, @@ -71,7 +123,16 @@ template spineCss() {      _color_ocn_light,  );      string _css_dark_epub = format(q"┃ -<<css_dark_shared>> +<<css_dark_shared_0>> +<<css_dark_shared_1>> +<<css_dark_shared_2>> +<<css_dark_shared_3>> +<<css_dark_shared_4>> +<<css_dark_shared_5>> +<<css_dark_shared_6>> +<<css_dark_shared_7>> +<<css_dark_shared_8>> +<<css_dark_shared_9>>  <<css_dark_epub>>  ┃",      _color_ocn_dark, @@ -105,7 +166,7 @@ template spineCss() {  *** html shared  **** general -#+NAME: css_light_shared +#+NAME: css_light_shared_0  #+BEGIN_SRC css    *{      padding                  : 0px; @@ -124,7 +185,7 @@ template spineCss() {  **** link -#+NAME: css_light_shared +#+NAME: css_light_shared_1  #+BEGIN_SRC css    a:link {      color                    : #003399; @@ -165,7 +226,7 @@ template spineCss() {  **** div -#+NAME: css_light_shared +#+NAME: css_light_shared_2  #+BEGIN_SRC css    div {      margin-left              : 0; @@ -283,7 +344,7 @@ template spineCss() {  **** paragraphs headings blocks  ***** misc -#+NAME: css_light_shared +#+NAME: css_light_shared_3  #+BEGIN_SRC css    .norm, .bold, .verse, .group, .block, .alt {      line-height              : 133%%; @@ -309,7 +370,7 @@ template spineCss() {    }  #+END_SRC -#+NAME: css_light_shared +#+NAME: css_light_shared_4  #+BEGIN_SRC css    img {      max-width                : 100%%; @@ -319,7 +380,7 @@ template spineCss() {  ***** code block -#+NAME: css_light_shared +#+NAME: css_light_shared_5  #+BEGIN_SRC css    pre {      width                    : auto; @@ -386,7 +447,7 @@ template spineCss() {  ***** paragraph general -#+NAME: css_light_shared +#+NAME: css_light_shared_6  #+BEGIN_SRC css    p.spaced { white-space     : pre; }    p.block { @@ -502,14 +563,14 @@ template spineCss() {  ***** paragraph indent -#+NAME: css_light_shared +#+NAME: css_light_shared_7  #+BEGIN_SRC css  %s  #+END_SRC  ***** misc including tables & lists -#+NAME: css_light_shared +#+NAME: css_light_shared_8  #+BEGIN_SRC css    note { white-space         : pre; }    label.ocn { @@ -578,7 +639,7 @@ template spineCss() {  ***** headings -#+NAME: css_light_shared +#+NAME: css_light_shared_9  #+BEGIN_SRC css    h0, h1, h2, h3, h4, h5, h6, h7 {      font-weight              : bold; @@ -683,7 +744,7 @@ template spineCss() {  *** html seg  **** previous next -#+NAME: css_light_html_seg +#+NAME: css_light_html_seg_0  #+BEGIN_SRC css    .icon-bar {      width                    : 100%%; @@ -763,7 +824,7 @@ template spineCss() {  **** flex -#+NAME: css_light_html_seg +#+NAME: css_light_html_seg_1  #+BEGIN_SRC css    /* flex */    .flex-menu-bar { @@ -800,7 +861,7 @@ template spineCss() {  Consider what if anything should be used here -#+NAME: css_light_html_seg +#+NAME: css_light_html_seg_2  #+BEGIN_SRC css    /* grid */    .wrapper { @@ -889,7 +950,7 @@ Consider what if anything should be used here  *** html scroll  **** flex -#+NAME: css_light_html_scroll +#+NAME: css_light_html_scroll_0  #+BEGIN_SRC css    /* flex */    .flex-menu-bar { @@ -924,7 +985,7 @@ Consider what if anything should be used here  **** grid -#+NAME: css_light_html_scroll +#+NAME: css_light_html_scroll_1  #+BEGIN_SRC css    /* grid */    .wrapper { @@ -1020,7 +1081,7 @@ Consider what if anything should be used here  *** html shared  **** general -#+NAME: css_dark_shared +#+NAME: css_dark_shared_0  #+BEGIN_SRC css    *{      padding                  : 0px; @@ -1039,7 +1100,7 @@ Consider what if anything should be used here  **** link -#+NAME: css_dark_shared +#+NAME: css_dark_shared_1  #+BEGIN_SRC css    a:link {      color                    : #FFFFFF; @@ -1080,7 +1141,7 @@ Consider what if anything should be used here  **** div -#+NAME: css_dark_shared +#+NAME: css_dark_shared_2  #+BEGIN_SRC css    div {      margin-left              : 0; @@ -1198,7 +1259,7 @@ Consider what if anything should be used here  **** paragraphs headings blocks  ***** misc -#+NAME: css_dark_shared +#+NAME: css_dark_shared_3  #+BEGIN_SRC css    .norm, .bold, .verse, .group, .block, .alt {      line-height              : 133%%; @@ -1224,7 +1285,7 @@ Consider what if anything should be used here    }  #+END_SRC -#+NAME: css_dark_shared +#+NAME: css_dark_shared_4  #+BEGIN_SRC css    img {      max-width                : 100%%; @@ -1234,7 +1295,7 @@ Consider what if anything should be used here  ***** code block -#+NAME: css_dark_shared +#+NAME: css_dark_shared_5  #+BEGIN_SRC css    pre {      width                    : auto; @@ -1300,7 +1361,7 @@ Consider what if anything should be used here  ***** paragraph general -#+NAME: css_dark_shared +#+NAME: css_dark_shared_6  #+BEGIN_SRC css    p.spaced { white-space     : pre; }    p.block { @@ -1416,14 +1477,14 @@ Consider what if anything should be used here  ***** paragraph indent -#+NAME: css_dark_shared +#+NAME: css_dark_shared_7  #+BEGIN_SRC css  %s  #+END_SRC  ***** misc including tables & lists -#+NAME: css_dark_shared +#+NAME: css_dark_shared_8  #+BEGIN_SRC css    note { white-space         : pre; }    label.ocn { @@ -1492,7 +1553,7 @@ Consider what if anything should be used here  ***** headings -#+NAME: css_dark_shared +#+NAME: css_dark_shared_9  #+BEGIN_SRC css    h0, h1, h2, h3, h4, h5, h6, h7 {      font-weight              : bold; @@ -1597,7 +1658,7 @@ Consider what if anything should be used here  *** html seg  **** previous next -#+NAME: css_dark_html_seg +#+NAME: css_dark_html_seg_0  #+BEGIN_SRC css    .icon-bar {      width                    : 100%%; @@ -1677,7 +1738,7 @@ Consider what if anything should be used here  **** flex -#+NAME: css_dark_html_seg +#+NAME: css_dark_html_seg_1  #+BEGIN_SRC css    /* flex */    .flex-menu-bar { @@ -1714,7 +1775,7 @@ Consider what if anything should be used here  Consider what if anything should be used here -#+NAME: css_dark_html_seg +#+NAME: css_dark_html_seg_2  #+BEGIN_SRC css    /* grid */    .wrapper { @@ -1803,7 +1864,7 @@ Consider what if anything should be used here  *** html scroll  **** flex -#+NAME: css_dark_html_scroll +#+NAME: css_dark_html_scroll_0  #+BEGIN_SRC css    /* flex */    .flex-menu-bar { @@ -1838,7 +1899,7 @@ Consider what if anything should be used here  **** grid -#+NAME: css_dark_html_scroll +#+NAME: css_dark_html_scroll_1  #+BEGIN_SRC css    /* grid */    .wrapper { diff --git a/org/out_zip.org b/org/out_zip.org index 8a98638..8af05f8 100644 --- a/org/out_zip.org +++ b/org/out_zip.org @@ -6,6 +6,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/output_hub.org b/org/output_hub.org index 5116c7c..7b8b96c 100644 --- a/org/output_hub.org +++ b/org/output_hub.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -38,7 +39,15 @@ template outputHub() {      enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff }      void Scheduled(D,I)(int sched, D doc_abstraction, I doc_matters) {        auto msg = Msg!()(doc_matters); -      <<output_scheduled_task>> +      <<output_scheduled_task_source_or_pod>> +      <<output_scheduled_task_epub>> +      <<output_scheduled_task_html_meta>> +      <<output_scheduled_task_html_scroll>> +      <<output_scheduled_task_html_seg>> +      <<output_scheduled_task_html_out>> +      <<output_scheduled_task_latex>> +      <<output_scheduled_task_odt>> +      <<output_scheduled_task_sqlite>>      }      if (!(doc_matters.opt.action.quiet)) {        writeln(" ", doc_matters.src.filename_base); @@ -61,7 +70,9 @@ template outputHubOp() {    @system void outputHubOp(E,O,C)(E env, O opt_action, C config) {      mixin spineRgxOut;      static auto rgx = RgxO(); -    <<output_options_op>> +    <<output_options_op_sqlite_db_drop>> +    <<output_options_op_sqlite_db_create>> +    <<output_options_op_cgi_search_form_codegen>>    }  }  #+END_SRC @@ -82,7 +93,7 @@ import doc_reform.io_out,  **** source: _dr_src_ &/or _pod_                                     :source:pod:  - [[./output_pod.org][output_pod]] -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_source_or_pod  #+BEGIN_SRC d  if (sched == outTask.source_or_pod) {    if (doc_matters.opt.action.source) { @@ -104,7 +115,7 @@ if (sched == outTask.source_or_pod) {  **** epub                                                              :epub: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_epub  #+BEGIN_SRC d  if (sched == outTask.epub) {    msg.v("epub3 processing... "); @@ -117,7 +128,7 @@ if (sched == outTask.epub) {  **** html                                                              :html:  ***** metadata                                                     :metadata: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_html_meta  #+BEGIN_SRC d  if (sched == outTask.html_stuff) {    outputMetadata!()(doc_matters); @@ -127,7 +138,7 @@ if (sched == outTask.html_stuff) {  ***** scroll                                                         :scroll: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_html_scroll  #+BEGIN_SRC d  if (sched == outTask.html_scroll) {    msg.v("html scroll processing... "); @@ -139,7 +150,7 @@ if (sched == outTask.html_scroll) {  ***** seg                                                               :seg: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_html_seg  #+BEGIN_SRC d  if (sched == outTask.html_seg) {    msg.v("html seg processing... "); @@ -151,7 +162,7 @@ if (sched == outTask.html_seg) {  ***** css, images etc                                            :css:images: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_html_out  #+BEGIN_SRC d  if (sched == outTask.html_stuff) {    import doc_reform.io_out.html; @@ -163,7 +174,7 @@ if (sched == outTask.html_stuff) {  **** latex / pdf                                                  :latex:pdf: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_latex  #+BEGIN_SRC d  if (sched == outTask.latex) {    msg.v("latex processing... (available for downstream processing & pdf output"); @@ -175,7 +186,7 @@ if (sched == outTask.latex) {  **** odf / odt                                                      :odf:odt: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_odt  #+BEGIN_SRC d  if (sched == outTask.odt) {    msg.v("odf:odt processing... "); @@ -187,7 +198,7 @@ if (sched == outTask.odt) {  **** sqlite discrete                                                 :sqlite: -#+NAME: output_scheduled_task +#+NAME: output_scheduled_task_sqlite  #+BEGIN_SRC d  if (sched == outTask.sqlite) {    msg.v("sqlite processing... "); @@ -219,7 +230,7 @@ if (doc_matters.opt.action.sqlite_update) {  ***** no markup source files to process  ******  drop                                                           :drop: -#+NAME: output_options_op +#+NAME: output_options_op_sqlite_db_drop  #+BEGIN_SRC d  if ((opt_action.sqlite_db_drop)) {    if ((opt_action.verbose)) { @@ -235,7 +246,7 @@ if ((opt_action.sqlite_db_drop)) {  ******  create                                                       :create: -#+NAME: output_options_op +#+NAME: output_options_op_sqlite_db_create  #+BEGIN_SRC d  if ((opt_action.sqlite_db_create)) {    if ((opt_action.verbose)) { @@ -252,7 +263,7 @@ if ((opt_action.sqlite_db_create)) {  ****  cgi sqlite search form -#+NAME: output_options_op +#+NAME: output_options_op_cgi_search_form_codegen  #+BEGIN_SRC d  if ((opt_action.cgi_search_form_codegen)) {    if ((opt_action.verbose)) { diff --git a/org/output_show.org b/org/output_show.org index ff33803..8550f53 100644 --- a/org/output_show.org +++ b/org/output_show.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/spine.org b/org/spine.org index 82cdeb7..5f39984 100644 --- a/org/spine.org +++ b/org/spine.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -96,8 +97,16 @@ string project_name = "spine";  string program_name = "spine";  @system void main(string[] args) {    <<spine_mixin>> -  <<spine_init>> -  <<spine_args>> +  <<spine_init_0>> +  <<spine_init_1>> +  <<spine_init_2>> +  <<spine_args_0>> +  <<spine_args_1>> +  <<spine_args_2>> +  <<spine_args_3>> +  <<spine_args_4>> +  <<spine_args_5>> +  <<spine_args_6>>    if (_manifests.length > 1                            // _manifests[0] initialized dummy element    && _opt_action.abstraction) {      if (_opt_action.parallelise) {                     // see else @@ -106,7 +115,12 @@ string program_name = "spine";          if (!empty(manifest.src.filename)) {            <<spine_each_file_do_scope>>            <<spine_each_file_do_abstraction>> -          <<spine_each_file_do_debugs_checkdoc>> +          <<spine_each_file_do_debugs_checkdoc_0>> +          <<spine_each_file_do_debugs_checkdoc_1>> +          <<spine_each_file_do_debugs_checkdoc_2>> +          <<spine_each_file_do_debugs_checkdoc_3>> +          <<spine_each_file_do_debugs_checkdoc_4>> +          <<spine_each_file_do_debugs_checkdoc_5>>            <<spine_each_file_do_selected_output>>            <<spine_each_file_do_scope_exit>>          } else { @@ -121,7 +135,12 @@ string program_name = "spine";          if (!empty(manifest.src.filename)) {            <<spine_each_file_do_scope>>            <<spine_each_file_do_abstraction>> -          <<spine_each_file_do_debugs_checkdoc>> +          <<spine_each_file_do_debugs_checkdoc_0>> +          <<spine_each_file_do_debugs_checkdoc_1>> +          <<spine_each_file_do_debugs_checkdoc_2>> +          <<spine_each_file_do_debugs_checkdoc_3>> +          <<spine_each_file_do_debugs_checkdoc_4>> +          <<spine_each_file_do_debugs_checkdoc_5>>            <<spine_each_file_do_selected_output>>            <<spine_each_file_do_scope_exit>>          } else { @@ -307,14 +326,14 @@ mixin outputHub;  **** init                                                              :init: -#+NAME: spine_init +#+NAME: spine_init_0  #+BEGIN_SRC d  auto hvst = spineHarvest!();  #+END_SRC  **** args                                                              :args: -#+NAME: spine_init +#+NAME: spine_init_1  #+BEGIN_SRC d  string flag_action;  string arg_unrecognized; @@ -324,7 +343,7 @@ static auto rgx = RgxI();  *** scope (run complete)                                              :scope: -#+NAME: spine_init +#+NAME: spine_init_2  #+BEGIN_SRC d  scope(success) {    writefln( @@ -349,7 +368,7 @@ scope(failure) {  - set getopt options  ***** initialize -#+NAME: spine_args +#+NAME: spine_args_0  #+BEGIN_SRC d  bool[string] opts = [    "abstraction"                 : false, @@ -427,7 +446,7 @@ string[string] settings = [  ***** set & describe -#+NAME: spine_args +#+NAME: spine_args_1  #+BEGIN_SRC d  auto helpInfo = getopt(args,    std.getopt.config.passThrough, @@ -509,7 +528,7 @@ if (helpInfo.helpWanted) {  **** getopt hash to struct  - move getopt options to struct -#+NAME: spine_args +#+NAME: spine_args_2  #+BEGIN_SRC d  enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff }  struct OptActions { @@ -830,7 +849,7 @@ OptActions _opt_action = OptActions();  **** env  - environmental info -#+NAME: spine_args +#+NAME: spine_args_3  #+BEGIN_SRC d  @safe auto program_info() {    struct ProgramInfo { @@ -862,7 +881,7 @@ auto _env = [  *** get/read site config -#+NAME: spine_args +#+NAME: spine_args_4  #+BEGIN_SRC d  auto _manifested = PathMatters!()(_opt_action, _env, "");  auto _manifests = [ _manifested ]; @@ -897,7 +916,7 @@ if (_opt_action.show_config) {  *** use config for operations that do not require file processing -#+NAME: spine_args +#+NAME: spine_args_5  #+BEGIN_SRC d  if (!(_opt_action.skip_output)) {    if ((_opt_action.debug_do) @@ -916,7 +935,7 @@ if (!(_opt_action.skip_output)) {  *** opt action on processing files (loop args) -#+NAME: spine_args +#+NAME: spine_args_6  #+BEGIN_SRC d  ConfComposite _make_and_meta_struct = _config;  destroy(_config); @@ -1153,7 +1172,7 @@ if ((doc_matters.opt.action.debug_do)  ***** show document summary - abstraction _print summary_ (to screen) :abstraction:summary:  --show-summary (abstraction summary) -#+NAME: spine_each_file_do_debugs_checkdoc +#+NAME: spine_each_file_do_debugs_checkdoc_0  #+BEGIN_SRC d  /+ ↓ debugs +/  if (doc_matters.opt.action.verbose @@ -1167,7 +1186,7 @@ if (doc_matters.opt.action.verbose  ***** show metadata (doc headers metadata)  --show-metadata -#+NAME: spine_each_file_do_debugs_checkdoc +#+NAME: spine_each_file_do_debugs_checkdoc_1  #+BEGIN_SRC d  /+ ↓ debugs +/  if (doc_matters.opt.action.show_metadata) { @@ -1179,7 +1198,7 @@ if (doc_matters.opt.action.show_metadata) {  ***** show make (make files & doc headers)  --show-make -#+NAME: spine_each_file_do_debugs_checkdoc +#+NAME: spine_each_file_do_debugs_checkdoc_2  #+BEGIN_SRC d  /+ ↓ debugs +/  if (doc_matters.opt.action.show_make) { @@ -1191,7 +1210,7 @@ if (doc_matters.opt.action.show_make) {  ***** show config (config files & doc headers)  --show-config -#+NAME: spine_each_file_do_debugs_checkdoc +#+NAME: spine_each_file_do_debugs_checkdoc_3  #+BEGIN_SRC d  /+ ↓ debugs +/  if (doc_matters.opt.action.show_config) { @@ -1203,7 +1222,7 @@ if (doc_matters.opt.action.show_config) {  ***** abstraction harvest                               :abstraction:harvest:  - abstraction harvest -#+NAME: spine_each_file_do_debugs_checkdoc +#+NAME: spine_each_file_do_debugs_checkdoc_4  #+BEGIN_SRC d  if (doc_matters.opt.action.harvest) {    auto _hvst = spineMetaDocHarvest!()(doc_matters, hvst); @@ -1225,7 +1244,7 @@ if (doc_matters.opt.action.harvest) {  **** 1. _debug_ (document parts, checkdoc)                     :debug:checkdoc:  - [[./meta_output_debugs.org][meta_output_debugs]] -#+NAME: spine_each_file_do_debugs_checkdoc +#+NAME: spine_each_file_do_debugs_checkdoc_5  #+BEGIN_SRC d  /+ ↓ debugs +/  if (doc_matters.opt.action.debug_do) { @@ -1304,6 +1323,14 @@ template spineAbstraction() {      <<spine_each_file_do_split_dr_markup_file_header_into_make_and_meta_structs>>      <<spine_each_file_do_document_abstraction>>      <<spine_each_file_do_document_matters>> +    <<spine_each_file_do_document_matters_0>> +    <<spine_each_file_do_document_matters_1>> +    <<spine_each_file_do_document_matters_2>> +    <<spine_each_file_do_document_matters_3>> +    <<spine_each_file_do_document_matters_4>> +    <<spine_each_file_do_document_matters_5>> +    <<spine_each_file_do_document_matters_6>> +    <<spine_each_file_do_document_matters_7>>      auto t = tuple(doc_abstraction, doc_matters);      return t;    } @@ -1454,14 +1481,14 @@ if ((_opt_action.debug_do)  **** DocumentMatters struct { -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_0  #+BEGIN_SRC d  struct DocumentMatters {  #+END_SRC  **** generator related -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_1  #+BEGIN_SRC d    @safe auto generator_program() {      struct Prog_ { @@ -1510,7 +1537,7 @@ struct DocumentMatters {  **** config make & meta -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_2  #+BEGIN_SRC d    @safe auto conf_make_meta() {      return _make_and_meta_struct; @@ -1522,7 +1549,7 @@ struct DocumentMatters {  **** env related -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_3  #+BEGIN_SRC d    @safe auto env() {      struct Env_ { @@ -1539,7 +1566,7 @@ struct DocumentMatters {  **** opt -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_4  #+BEGIN_SRC d    @safe auto opt() {      struct Opt_ { @@ -1557,7 +1584,7 @@ struct DocumentMatters {  **** output related -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_5  #+BEGIN_SRC d    @safe auto src() {      return _manifest.src; @@ -1618,7 +1645,7 @@ struct DocumentMatters {  **** } close -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_6  #+BEGIN_SRC d  }  auto doc_matters = DocumentMatters(); @@ -1626,7 +1653,7 @@ auto doc_matters = DocumentMatters();  **** step complete message -#+NAME: spine_each_file_do_document_matters +#+NAME: spine_each_file_do_document_matters_7  #+BEGIN_SRC d  if ((_opt_action.debug_do)  || (_opt_action.very_verbose) diff --git a/org/spine_build_scaffold.org b/org/spine_build_scaffold.org index c18b599..542e8e3 100644 --- a/org/spine_build_scaffold.org +++ b/org/spine_build_scaffold.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -14,27 +15,86 @@  #+PROPERTY:    header-args+ :cache no  #+PROPERTY:    header-args+ :padline no -[[./org/spine.org][spine.org]]  [[./org/][org/]] +[[./spine.org][spine.org]]  [[../org/][org/]] +[[./spine_info.org][spine_info.org]]  * makefile                                                         :makefile: +** tangle + +#+BEGIN_SRC makefile :tangle ../makefile +<<makefile_var_0>> +<<makefile_var_1>> +<<makefile_var_2>> +<<makefile_var_3>> +<<makefile_var_4>> +<<makefile_var_5>> +<<makefile_a_0>> +<<makefile_a_1>> +<<makefile_a_2>> +<<makefile_b_0>> +<<makefile_b_1>> +<<makefile_b_2>> +<<makefile_b_3>> +<<makefile_b_4>> +<<makefile_meson>> +<<makefile_c_0>> +<<makefile_c_1>> +<<makefile_c_2>> +<<makefile_dmd_0>> +<<makefile_dmd_1>> +<<makefile_dmd_2>> +<<makefile_dmd_3>> +<<makefile_gdc_0>> +<<makefile_gdc_1>> +<<makefile_gdc_2>> +<<makefile_gdc_3>> +<<makefile_ldc_0>> +<<makefile_ldc_1>> +<<makefile_ldc_2>> +<<makefile_ldc_3>> +<<makefile_d_0>> +<<makefile_d_1>> +<<makefile_d_2>> +<<makefile_testrun_0>> +<<makefile_testrun_1>> +<<makefile_testrun_2>> +<<makefile_testrun_3>> +<<makefile_testrun_4>> +<<makefile_testrun_5>> +<<makefile_testrun_6>> +<<makefile_testrun_7>> +<<makefile_testrun_8>> +<<makefile_testrun_9>> +<<makefile_testrun_10>> +<<makefile_testrun_11>> +<<makefile_testrun_12>> +<<makefile_tangle_0>> +<<makefile_tangle_1>> +<<makefile_git_snapshot>> +<<makefile_phony>> +#+END_SRC +  ** settings [+2]                                                   :settings:  *** git version stamp                                           :git:version: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_var_0 +#+BEGIN_SRC makefile  PROG_VER_GIT :=$(shell echo `git describe --long --tags | sed -e "s/^[ a-z_-]\+\([0-9.]\+\)/\1/;s/\([^-]*-g\)/r\1/;s/-/./g"`)  PROG_VER_DECLARED :=$(shell echo `cat ./views/version.txt | grep --color=never "enum" | sed 's/.\+(\([0-9]\+\),[ \t]\+\([0-9]\+\),[ \t]\+\([0-9]\+\)[ \t]*).\+/\1.\2.\3/g'`)  #+END_SRC  *** dub (build tool)                                                    :dub: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_var_1 +#+BEGIN_SRC makefile  DUB=dub  DUB_FLAGS=-v --force --compiler=  #+END_SRC  *** Project Details                                           :project:spine: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_var_2 +#+BEGIN_SRC makefile  PRG_NAME=doc-reform  PRG_NICKAME=spine  PRG_NAME_DIR=$(shell echo `echo $(PRG_NAME) | sed -e "s/-/_/g"`) @@ -47,7 +107,8 @@ PRG_DOCDIR=./docs  *** Emacs Org settings                            :settings:emacs:org:tangle: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_var_3 +#+BEGIN_SRC makefile  EMACSLISP=/usr/share/emacs/site-lisp  ORG_VER_AVAILABLE=$(shell echo `ls -d ~/.emacs.d/elpa/org-???????? | cut -d '-' -f2`)  EMACSLISP_ORG=~/.emacs.d/elpa/org-$($(shell echo $(ORG_VER_AVAILABLE))) @@ -61,7 +122,8 @@ ORGDIR :=$(shell echo `pwd`)  *** Markup Samples  **** pods -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_var_4 +#+BEGIN_SRC makefile  SiSU_MARKUP_SAMPLES_FIND_PODS= \  find data/pod -maxdepth 2 -name pod.manifest | cut -f 1-3 -d / | sort @@ -96,7 +158,8 @@ data/pod/viral_spiral.david_bollier  **** dir -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_var_5 +#+BEGIN_SRC makefile  SiSU_MARKUP_SAMPLES_DIR_FILES_FOUND = \  find data/sisudir/media/text -name *.ss[tm] | sort | xargs @@ -129,6 +192,27 @@ data/sisudir/media/text/un_contracts_international_sale_of_goods_convention_1980  data/sisudir/media/text/viral_spiral.david_bollier.sst  #+END_SRC +******* sample markup file list + +#+NAME: makefile_a_0 +#+BEGIN_SRC makefile +markup_samples: +	find data/pod -name pod.manifest | cut -f 1-3 -d / | sort; \ +find data/sisudir/media/text -name *.ss[tm] | sort +#+END_SRC + +#+NAME: makefile_a_1 +#+BEGIN_SRC makefile +markup_pod_samples: +	find data/pod -name pod.manifest | cut -f 1-3 -d / | sort +#+END_SRC + +#+NAME: makefile_a_2 +#+BEGIN_SRC makefile +markup_dir_samples: +	find data/sisudir/media/text -name *.ss[tm] | sort +#+END_SRC +  ** _make_ commands [+2]                                         :make:commands:  - build commands @@ -152,49 +236,36 @@ data/sisudir/media/text/viral_spiral.david_bollier.sst  ****** all builds  ******* default -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_b_0 +#+BEGIN_SRC makefile  dub_upgrade:  	$(DUB) upgrade  #+END_SRC -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_b_1 +#+BEGIN_SRC makefile  default: ldc  #+END_SRC -******* sample markup file list - -#+BEGIN_SRC makefile :tangle ../makefile -markup_samples: -	find data/pod -name pod.manifest | cut -f 1-3 -d / | sort; \ -find data/sisudir/media/text -name *.ss[tm] | sort -#+END_SRC - -#+BEGIN_SRC makefile :tangle ../makefile -markup_pod_samples: -	find data/pod -name pod.manifest | cut -f 1-3 -d / | sort -#+END_SRC - -#+BEGIN_SRC makefile :tangle ../makefile -markup_dir_samples: -	find data/sisudir/media/text -name *.ss[tm] | sort -#+END_SRC -  ******* quick                                                         :quick:  ******** default                                                    :default: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_b_2 +#+BEGIN_SRC makefile  all: dmd ldc gdc  #+END_SRC  ******** version                                                    :version: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_b_3 +#+BEGIN_SRC makefile  all_ver: dmd_ver ldc_ver gdc_ver  #+END_SRC  ******** debug                                                        :debug: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_b_4 +#+BEGIN_SRC makefile  all_debug: dmd_debug gdc_debug ldc_debug  #+END_SRC @@ -204,7 +275,8 @@ meson using dub  - works & looks pretty clean  - but subprojects built externally & not suitable for debian packaging -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_meson +#+BEGIN_SRC makefile  meson_clean_build_dir:  	rm -r build; mkdir build  meson_build: meson_clean_build_dir @@ -219,19 +291,22 @@ meson: meson_clean_build_dir dub_upgrade meson_build  ******* clean & tangle                                         :clean:tangle:  ******** default                                                    :default: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_c_0 +#+BEGIN_SRC makefile  all_clean: clean tangle dmd ldc gdc  #+END_SRC  ******** version                                                    :version: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_c_1 +#+BEGIN_SRC makefile  all_ver_clean: clean tangle dmd_ver ldc_ver gdc_ver  #+END_SRC  ******** debug                                                        :debug: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_c_2 +#+BEGIN_SRC makefile  all_debug_ver: dmd_debug_ver gdc_debug_ver ldc_debug_ver  all_debug_clean_ver: clean tangle dmd_debug_ver gdc_debug_ver ldc_debug_ver  #+END_SRC @@ -241,7 +316,8 @@ all_debug_clean_ver: clean tangle dmd_debug_ver gdc_debug_ver ldc_debug_ver  ******* quick                                                         :quick:  ******** default                                                    :default: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_dmd_0 +#+BEGIN_SRC makefile  dmd: dub_upgrade  	$(DUB) --compiler=dmd --config=dmd --build=release-nobounds  	notify-send -t 0 'D dmd compiled test release executable ready' 'spine-dmd' @@ -249,7 +325,8 @@ dmd: dub_upgrade  ******** debug                                                        :debug: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_dmd_1 +#+BEGIN_SRC makefile  dmd_debug:  	$(DUB) --compiler=dmd --config=dmd --build=debug  #+END_SRC @@ -258,7 +335,8 @@ dmd_debug:  - assumes git tags with program version -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_dmd_2 +#+BEGIN_SRC makefile  dmd_ver: dub_upgrade  	$(DUB) --compiler=dmd --config=dmd-version  	mv bin/spine-dmd-ver bin-archive/spine-$(PROG_VER_DECLARED)-tag-$(PROG_VER_GIT)-dmd @@ -268,7 +346,8 @@ dmd_clean_ver: clean tangle dmd_ver  ******* clean & tangle                                         :clean:tangle: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_dmd_3 +#+BEGIN_SRC makefile  dmd_rel: expunge skel tangle  	$(DUB) --compiler=dmd --config=spine-release  dmd_rel_tangle: tangle @@ -282,7 +361,8 @@ dmd_debug_tangle: tangle  ******* quick                                                         :quick:  ******** default                                                    :default: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_gdc_0 +#+BEGIN_SRC makefile  gdc: dub_upgrade  	$(DUB) --compiler=gdc --config=gdc  	notify-send -t 0 'D gdc compiled test release executable ready' 'spine-gdc' @@ -290,7 +370,8 @@ gdc: dub_upgrade  ******** debug                                                        :debug: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_gdc_1 +#+BEGIN_SRC makefile  gdc_debug:  	$(DUB) --compiler=gdc --config=gdc --build=debug  #+END_SRC @@ -299,7 +380,8 @@ gdc_debug:  - assumes git tags with program version -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_gdc_2 +#+BEGIN_SRC makefile  gdc_ver: dub_upgrade  	$(DUB) --compiler=gdc --config=gdc-version  	mv bin/spine-gdc-ver bin-archive/spine-$(PROG_VER_DECLARED)-tag-$(PROG_VER_GIT)-gdc @@ -309,7 +391,8 @@ gdc_clean_ver: clean tangle gdc_ver  ******* clean & tangle                                         :clean:tangle: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_gdc_3 +#+BEGIN_SRC makefile  gdc_rel: expunge skel tangle  	$(DUB) --compiler=gdc --config=spine-release  gdc_rel_tangle: tangle @@ -323,7 +406,8 @@ gdc_debug_tangle: tangle  ******* quick                                                         :quick:  ******** default                                                    :default: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_ldc_0 +#+BEGIN_SRC makefile  ldc: dub_upgrade  	$(DUB) --compiler=ldc2 --config=ldc --build=release  	notify-send -t 0 'D ldc compiled test release executable ready' 'spine-ldc' @@ -331,7 +415,8 @@ ldc: dub_upgrade  ******** debug                                                        :debug: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_ldc_1 +#+BEGIN_SRC makefile  ldc_debug:  	$(DUB) --compiler=ldc2 --config=ldc --build=debug  #+END_SRC @@ -340,7 +425,8 @@ ldc_debug:  - assumes git tags with program version -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_ldc_2 +#+BEGIN_SRC makefile  ldc_ver: dub_upgrade  	$(DUB) --compiler=ldc2 --config=ldc-version  	mv bin/spine-ldc-ver bin-archive/spine-$(PROG_VER_DECLARED)-tag-$(PROG_VER_GIT)-ldc @@ -350,7 +436,8 @@ ldc_clean_ver: clean tangle ldc_ver  ******* clean & tangle                                         :clean:tangle: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_ldc_3 +#+BEGIN_SRC makefile  ldc_rel: expunge skel tangle  	$(DUB) --compiler=ldc2 --config=spine-release  ldc_rel_tangle: tangle @@ -363,7 +450,8 @@ ldc_debug_tangle: tangle  ***** generic  ****** init clean distclean etc.                                      :clean: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_d_0 +#+BEGIN_SRC makefile  reinit: clean skel tangle  skel:  	mkdir -p $(PRG_BINDIR); \ @@ -420,14 +508,16 @@ distclean_and_init: expunge  ****** version                                                      :version: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_d_1 +#+BEGIN_SRC makefile  ver:  	echo spine-$(PROG_VER_DECLARED)-tag-$(PROG_VER_GIT)  #+END_SRC  ****** tangle build rebuild                              :clean:tangle:build: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_d_2 +#+BEGIN_SRC makefile  clean_tangle_build: clean tangle build  tangle_build: tangle build  build: $(PRG_SRCDIR)/$(PRG_SRC) @@ -444,7 +534,8 @@ restart: clean tangle  **** pods  ****** find files -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_0 +#+BEGIN_SRC makefile  find_pods:  	$(SiSU_MARKUP_SAMPLES_FIND_PODS)  #+END_SRC @@ -452,7 +543,8 @@ find_pods:  ***** dmd  ****** find files -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_1 +#+BEGIN_SRC makefile  dmd_testrun_find:  	./bin/spine-dmd -v --source --html --epub --sqlite-discrete \  --sqlite-create --sqlite-update \ @@ -483,7 +575,8 @@ dmd_testrun_find_pod_all:  ****** path list -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_2 +#+BEGIN_SRC makefile  dmd_testrun_paths_pod_source:  	./bin/spine-dmd -v --source \  --output-dir=tmp/program_output_pod \ @@ -510,7 +603,8 @@ $(SiSU_MARKUP_SAMPLES_POD)  ***** gdc  ****** find files -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_3 +#+BEGIN_SRC makefile  gdc_testrun_find:  	./bin/spine-gdc -v --source --html --epub --sqlite-discrete \  --sqlite-create --sqlite-update \ @@ -541,7 +635,8 @@ gdc_testrun_find_pod_all:  ****** path list -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_4 +#+BEGIN_SRC makefile  gdc_testrun_paths:  	./bin/spine-gdc -v --source --html --epub --sqlite-discrete \  --sqlite-create --sqlite-update \ @@ -573,7 +668,8 @@ $(SiSU_MARKUP_SAMPLES_POD)  ***** ldc  ****** find files -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_5 +#+BEGIN_SRC makefile  ldc_testrun_find:  	./bin/spine-ldc -v --source --html --epub --sqlite-discrete \  --sqlite-create --sqlite-update \ @@ -604,7 +700,8 @@ ldc_testrun_find_pod_all:  ****** path list -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_6 +#+BEGIN_SRC makefile  ldc_testrun_paths:  	./bin/spine-ldc -v --source --html --epub --sqlite-discrete \  --sqlite-create --sqlite-update \ @@ -637,7 +734,8 @@ $(SiSU_MARKUP_SAMPLES_POD)  ***** dmd  ****** find files -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_7 +#+BEGIN_SRC makefile  dmd_testrun_find_dir_source:  	$(SiSU_MARKUP_SAMPLES_DIR_FILES_FOUND) \  ./bin/spine-dmd -v --source \ @@ -663,7 +761,8 @@ dmd_testrun_find_dir_all:  ****** file list -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_8 +#+BEGIN_SRC makefile  dmd_testrun_filelist_dir_source:  	./bin/spine-dmd -v --source \  --output-dir=tmp/program_output_dir \ @@ -690,7 +789,8 @@ $(SiSU_MARKUP_SAMPLES_DIR)  ***** gdc  ****** find files -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_9 +#+BEGIN_SRC makefile  gdc_testrun_find_dir_source:  	./bin/spine-gdc -v --source \  --output-dir=tmp/program_output_dir \ @@ -716,7 +816,8 @@ gdc_testrun_find_dir_all:  ****** file list -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_10 +#+BEGIN_SRC makefile  gdc_testrun_filelist_dir_source:  	./bin/spine-gdc -v --source \  --output-dir=tmp/program_output_dir \ @@ -743,7 +844,8 @@ $(SiSU_MARKUP_SAMPLES_DIR)  ***** ldc  ****** find files -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_11 +#+BEGIN_SRC makefile  ldc_testrun_find_dir_source:  	$(SiSU_MARKUP_SAMPLES_DIR_FILES_FOUND) \  ./bin/spine-ldc -v --source \ @@ -769,7 +871,8 @@ ldc_testrun_find_dir_all:  ****** file list -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_testrun_12 +#+BEGIN_SRC makefile  ldc_testrun_filelist_dir_source:  	./bin/spine-ldc -v --source \  --output-dir=tmp/program_output_dir \ @@ -796,7 +899,8 @@ $(SiSU_MARKUP_SAMPLES_DIR)  *** org babel tangle batch process command                           :tangle:  **** tangle: org babel tangle *.org -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_tangle_0 +#+BEGIN_SRC makefile  tangle: skel  	for f in $(ORGFILELIST); do \  		ORGFILES="$$ORGFILES \"$$f\""; \ @@ -819,7 +923,8 @@ tangle: skel  **** tangle maker: org babel tangle maker.org, makefile new -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_tangle_1 +#+BEGIN_SRC makefile  tangle_maker:  	for f in $(ORGFILELIST); do \  		ORGFILES="\"org/dr_build_scaffold.org\""; \ @@ -842,14 +947,16 @@ tangle_maker:  *** git snapshot -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_git_snapshot +#+BEGIN_SRC makefile  gitsnapshot: distclean tangle  	git commit -a  #+END_SRC  ** phony                                                              :phony: -#+BEGIN_SRC makefile :tangle ../makefile +#+NAME: makefile_phony +#+BEGIN_SRC makefile  .PHONY : all build rebuild debug release \  	distclean init \  	tangle gitsnapshot @@ -1406,8 +1513,9 @@ tinyendian_dep = declare_dependency(  #./.dub/**  *  !.gitignore +!README.md  !COPYRIGHT -!README +!CHANGELOG  !makefile  !version.txt  !dub.json diff --git a/org/spine_doc.org b/org/spine_doc.org deleted file mode 100644 index 49e7313..0000000 --- a/org/spine_doc.org +++ /dev/null @@ -1,4548 +0,0 @@ --*- mode: org -*- -#+TITLE:       spine (doc_reform) hub -#+DESCRIPTION: documents - structuring, various output representations & search -#+FILETAGS:    :spine:hub: -#+AUTHOR:      Ralph Amissah -#+EMAIL:       [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] -#+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah -#+LANGUAGE:    en -#+STARTUP:     content hideblocks hidestars noindent entitiespretty -#+PROPERTY:    header-args  :exports code -#+PROPERTY:    header-args+ :noweb yes -#+PROPERTY:    header-args+ :eval no -#+PROPERTY:    header-args+ :results no -#+PROPERTY:    header-args+ :cache no -#+PROPERTY:    header-args+ :padline no - -* README -** tangle - -#+BEGIN_SRC text  :tangle "../README" -<<sisu_spine_readme_info>> -<<sisu_spine_readme_description>> -<<sisu_spine_readme_install>> -<<sisu_spine_readme_configuration>> -<<sisu_spine_readme_commands>> -<<sisu_spine_readme_examples>> -#+END_SRC - -** project name - -#+NAME: sisu_spine_readme_info -#+BEGIN_SRC text -project_name:  Spine, Doc Reform -  description: [ -      "documents, structuring, processing, publishing", -      search, -      object numbering, -      static content generator, -      sisu markup -    ] - -    author: -      name:    Ralph Amissah -      email:   ralph.amissah@gmail.com - -    copyright: "(C) 2015 - 2020 Ralph Amissah, All Rights Reserved." - -    license:   "AGPL 3 or later" - -    hompage: [ -        "http://www.doc_reform.org", -        "http://www.sisudoc.org" -      ] -#+END_SRC - -** short description - -#+NAME: sisu_spine_readme_description -#+BEGIN_SRC text -#+END_SRC - -** installation - -#+NAME: sisu_spine_readme_install -#+BEGIN_SRC text -# Installation, Compilation - -SiSU spine is written in the programming language D for which there are 3 compilers: - -- dmd -- ldc -- gdc - -D projects tend to use dub as project manager -https://code.dlang.org/packages/dub -https://code.dlang.org/packages/dub -https://github.com/dlang/dub/blob/master/source/dub/commandline.d - -  dub --compiler=ldc2 -color --config=ldc -b release - -  dub --compiler=dmd -color --config=dmd - -  dub --compiler=gdc-10 -color --config=gdc -b release - -  make ldc - -  make dmd - -there has been some coalescence around the Meson build system -https://mesonbuild.com/ - -  meson - -  ninja -C build - -  meson setup --wipe build && ninja -v -C build - -  make meson - -dub --force --compiler=ldc2 && sudo cp -v cgi-bin/spine-search /usr/lib/cgi-bin/. - -#+END_SRC - -** configuration - -#+NAME: sisu_spine_readme_configuration -#+BEGIN_SRC text -# Configuration - -Configuration files are yaml files - -The following paths are searched: - -  ~/.dr/config_local_site -  ~/path_to_pod_root/.dr/config_local_site - -e.g. processing - -  ~spineMarkupSamples/pod/* - -will search: - -  ~spineMarkupSamples/pod/.dr/config_local_site - -  ~/.dr/config_local_site - -to specify an alternative configuration file to use on the command line (in this -example named "my_config"): - -  spine -v --html --config=~spineMarkupSamples/pod/.dr/my_config - -here is a sample configuration file: - -flag: -  act0:                        "--html" -  act1:                        "--html --epub" -output: -  path:                        "/var/www/html" -default: -  language:                    "en" -  papersize:                   "a4" -  text_wrap:                   "80" -  digest:                      "sha256" -webserv: -  http:                        "http" -  domain:                      "localhost" -  data_http:                   "http" -  data_domain:                 "localhost" -  data_root_url:               "http://localhost" -  data_root_path:              "/var/www/html" -  data_root_part:              "" -  images_root_part:            "image" -  cgi_title:                   "≅ SiSU Spine search" -  cgi_http:                    "http" -  cgi_domain:                  "localhost" -  cgi_bin_url:                 "http://localhost/cgi-bin" -  cgi_bin_part:                "cgi-bin" -  cgi_bin_path:                "/usr/lib/cgi-bin" -  cgi_search_script:           "spine-search" -  cgi_search_script_raw_fn_d:  "spine_search.d" -  cgi_port:                    "" -  cgi_user:                    "" -  cgi_action:                  "http://localhost/cgi-bin/spine-search" -  db_sqlite:                   "spine.search.db" -  db_pg_table:                 "" -  db_pg_user:                  "" - -#+END_SRC - -** commands help - -#+NAME: sisu_spine_readme_commands -#+BEGIN_SRC text -# Commands - -for a list of commands from the program type: - -  spine -h - -at the time of writing this provides the following output: - -                  --abstraction document abstraction -                       --assert set optional assertions on -      --cgi-search-form-codegen generates (pre-compiled) d code for search of specified db -   --cgi-sqlite-search-filename =[filename] -                  --concordance file for document -                       --config =/path/to/config/file/including/filename -                         --dark alternative dark theme -                        --debug debug -                       --digest hash digest for each object -                         --epub process epub output -                      --harvest extract info on authors & topics from document header metadata -              --harvest-authors extract info on authors from document header metadata -               --harvest-topics extract info on topics from document header metadata -                     --hide-ocn object cite numbers -                         --html process html output -            --html-link-harvest place links back to harvest in segmented html -             --html-link-search html embedded search submission -                     --html-seg process html output -                  --html-scroll process html output -                         --lang =[lang code e.g. =en or =en,es] -                        --latex output for pdfs -            --latex-color-links mono or color links for pdfs -                        --light default light theme -                     --manifest process manifest output -                      --ocn-off object cite numbers -                          --odf open document format text (--odt) -                          --odt open document format text -                       --output =/path/to/output/dir specify where to place output -                     --parallel parallelisation -        --parallel-subprocesses nested parallelisation -                          --pdf latex output for pdfs -              --pdf-color-links mono or color links for pdfs -                          --pod spine (doc reform) pod source content bundled --q                      --quiet output to terminal -           --section-backmatter document backmatter (default) -               --section-biblio document biblio (default) -                --section-blurb document blurb (default) -                 --section-body document body (default) -            --section-bookindex document bookindex (default) -             --section-endnotes document endnotes (default) -             --section-glossary document glossary (default) -                  --section-toc table of contents (default) -                       --serial serial processing -                  --skip-output skip output -                  --show-config show config -                    --show-make show make -                --show-metadata show metadata -                 --show-summary show summary -                       --source document markup source -              --sqlite-discrete process discrete sqlite output -             --sqlite-db-create create db, create tables -               --sqlite-db-drop drop tables & db -           --sqlite-db-recreate create db, create tables -                --sqlite-delete sqlite output -              --sqlite-db-filename =[filename].sql.db -                --sqlite-insert sqlite output -                --sqlite-update sqlite output -                         --text text output -                   --theme-dark alternative dark theme -                  --theme-light default light theme -                          --txt text output --v                    --verbose output to terminal -                 --very-verbose output to terminal -                       --workon (reserved for some matters under development & testing) -                        --xhtml xhtml output --h                       --help This help information. - -#+END_SRC - -** command examples - -#+NAME: sisu_spine_readme_examples -#+BEGIN_SRC text -# Examples - -if configuartion has been set specify just -- the desired output and -- the markup document/pod(s) to process - -  spine -v --html ~spineMarkupSamples/markup/pod/sisu-manual - -if configuartion has not been set or to overide the set configration specify -- the output path as well as -- the desired output and -- the markup document/pod(s) to process - -note: ~webDocRoot should be the path to web doc root, provide a suitable output path. - -  spine -v --html --html-link-search --html-link-harvest  --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -  spine -v --html --html-link-search --html-link-harvest --epub --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -  spine -v --html --epub --latex --odt --harvest --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -## harvest - -if you have a document collection with documents that have metadata headers a -summary of the collection can be made using the harvest command - -  spine -v --harvest --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -  spine -v --harvest ~spineMarkupSamples/pod/* - -  spine -v --html --html-link-search --html-link-harvest --harvest --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -  spine -v --html --html-link-search --html-link-harvest --harvest ~spineMarkupSamples/pod/* - -## sqlite - -### create db - -if there is no sqlite db you first need to create one, to do so -- the name of the db and -- the root path for document output -must be specified: - -  spine -v \ -    --sqlite-db-create --sqlite-db-filename="spine.search.db" \ -    --output=/var/www/html \ -    ~spineMarkupSamples/pod/* - -  spine -v --sqlite-db-create --sqlite-db-filename="spine.search.db" --output=`echo ~webDocRoot` - -if you have a configration file providing this information that is to be used -for a document collection you can point to the document collection: - -  spine -v --sqlite-db-create ~spineMarkupSamples/pod - -### populate db - -must specify: -- the name of the db and -- the root path for document output - -  spine -v --sqlite-update \ -    --sqlite-db-filename="spine.search.db" \ -    --output=/var/www/html \ -    ~spineMarkupSamples/pod/* - -  spine -v --sqlite-update --sqlite-db-filename="spine.search.db" --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -if you have a configration file providing this information that is to be used -for a document collection you can point to the document collection: - -  spine -v --sqlite-update ~spineMarkupSamples/pod/* - -### generate a cgi search form in d - -  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 - -  spine --cgi-search-form-codegen --cgi-sqlite-search-filename="spine_search" --output=`echo ~webDocRoot` - -  spine -v --cgi-search-form-codegen \ -    --sqlite-db-filename="spine.search.db" \ -    --cgi-sqlite-search-filename="spine-search" \ -    --output=/var/www/html \ -    ~spineMarkupSamples/pod - -#### compile the cgi search form - -  cd /var/www/html/cgi # /var/www/html (default document root) - -  cd ~webDocRoot/cgi - -the directory ~webDocRoot/cgi/src should contain two files -- spine_search.d (or whatever you named it) -- cgi.d (by Adam Rupee) - -  dub --force --compiler=ldc2 && sudo cp -v cgi-bin/spine-search /usr/lib/cgi-bin/. - -should compile spine-search in ~webDocRoot/cgi/cgi-bin and copy it to the -cgi-bin directory - -  spine -v  --sqlite-db-create --sqlite-db-filename="spine.search.db" --cgi-sqlite-search-filename="spine-search" --output=`echo ~webDocRoot` - -  spine -v  --sqlite-db-create  ~spineMarkupSamples/pod - -  spine -v --html --html-link-search --cgi-sqlite-search-filename="spine-search" --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -  spine -v --html --html-link-search --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -  spine -v --html --html-link-search --cgi-sqlite-search-filename="spine-search" --html-link-harvest --harvest --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* - -### create db & search form - -  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/* - -### html with links to search form - -  spine -v --html \ -    --html-link-search \ -    --output=`echo ~webDocRoot` \ -    ~spineMarkupSamples/pod/* - -#+END_SRC - -* manpage -** tangle - -#+BEGIN_SRC  man  :tangle "../doc/man/man1/spine.1" -<<sisu_spine_manpage_head>> -<<sisu_spine_manpage_description>> -<<sisu_spine_manpage_flags>> -<<sisu_spine_manpage_flags_db>> -<<sisu_spine_manpage_config>> -<<sisu_spine_manpage_pod_dir_structure>> -<<sisu_spine_manpage_cli_examples>> -<<sisu_spine_manpage_docs>> -<<sisu_spine_manpage_markup>> -#+END_SRC - -** manpage -*** head - -#+NAME: sisu_spine_manpage_head -#+BEGIN_SRC  man -.TH "spine" "1" "2020-04-05" "0.10.0" "Spine" -.br -.SH NAME -.br -sisu - documents: markup, structuring, publishing in multiple standard formats, and search -.br -.SH SYNOPSIS -.br -sisu [--options] [filename/wildcard] - -.br -sisu --txt --html --epub --odt --pdf --wordmap --sqlite --manpage --texinfo --sisupod --source --qrcode [filename/wildcard] - -.br -sisu --pg (--createdb|update [filename/wildcard]|--dropall) - -#+END_SRC - -*** description - -#+NAME: sisu_spine_manpage_description -#+BEGIN_SRC  man -.SH SISU - MANUAL, -RALPH AMISSAH - -.SH WHAT IS SISU? - -.SH INTRODUCTION - WHAT IS SISU? - -.BR - -.B SiSU -is a lightweight markup based document creation and publishing framework that -is controlled from the command line. Prepare documents for -.B SiSU -using your text editor of choice, then use -.B SiSU -to generate various output document formats. - -.BR -From a single lightly prepared document (plain-text -.I UTF-8 -) sisu custom builds several standard output formats which share a common (text -object) numbering system for citation of content within a document (that also -has implications for search). The sisu engine works with an abstraction of the -document's structure and content from which it is possible to generate -different forms of representation of the document. -.B SiSU -produces: plain-text, -.I HTML, -.I XHTML, -.I XML, -.I EPUB, -.I ODF: -.I ODT -(Opendocument), -.I LaTeX, -.I PDF, -and populates an -.I SQL -database ( -.I PostgreSQL -or -.I SQLite -) with text objects, roughly, paragraph sized chunks so that document searches -are done at this level of granularity. - -.BR -Outputs share a common citation numbering system, associated with text objects -and any semantic meta-data provided about the document. - -.BR - -.B SiSU -also provides concordance files, document content certificates and manifests of -generated output. Book indexes may be made. - -.BR -Some document markup samples are provided in the package sisu -markup-samples. -Homepages: - -- <http://www.sisudoc.org/> - -- <http://www.jus.uio.no/sisu> - -.SH COMMANDS SUMMARY - -.SH DESCRIPTION - -.BR - -.B SiSU -is a document publishing system, that from a simple single marked-up document, -produces multiple output formats including: -.I plaintext, -.I HTML, -.I XHTML, -.I XML, -.I EPUB, -.I ODT -( -.I OpenDocument -( -.I ODF -) text), -.I LaTeX, -.I PDF, -info, and -.I SQL -( -.I PostgreSQL -and -.I SQLite -) , which share text object numbers ("object citation numbering") and the same -document structure information. For more see: <http://sisudoc.org> or -<http://www.jus.uio.no/sisu> -#+END_SRC - -** flags -*** general - -#+NAME: sisu_spine_manpage_flags -#+BEGIN_SRC  man -.SH DOCUMENT PROCESSING COMMAND FLAGS - -.TP -.B --abstraction [path + filename] -run document abstraction -.TP -.B --act[s0-9] [path + filename] ---act0 to --act9 configurable shortcuts for multiple flags, -0 to -9 synonyms, -configure in sisurc.yml; sisu default action on a specified file where no flag -is provided is --act0; --act or --acts for information on current actions -ascribed to --act0 to --act9 -.TP -.B --asciidoc [path + filename] -asciidoc, smart text (not available) -.TP -.B --cgi-search-form-codegen - generate d code search form to search db specfied needs --output=[path] and ---sqlite-db-filename=[cgi search form name] or path to configuration file ---config=[full path to config file] -.TP -.B --cgi-sqlite-search-filename=[filename] -name to give cgi-search form, (it generates a [filename].d file that requires -subsequent compilation) also required is the name of the sqlite db to be -searched by the form. -.TP -.B --concordance [path + filename] -(not implemented) -.TP -.B --config=[path to config file + filename] -.TP -.B --dark - alternative theme for html and epub output, a light (default) theme is - also provided -.TP -.B --digest (not implemented) -.TP -.B --delete [path + filename] -see --zap -.TP -.B --digests [path + filename] -not implemented -.TP -.B --epub [path + filename] -produces an epub document -.TP -.B --harvest [path to files] -extract and present info on authors & topics from document header metadata. -makes two lists of sisu output based on the sisu markup documents in a -directory: list of author and authors works (year and titles), and; list by -topic with titles and author. Makes use of header metadata fields (author, -title, date, topic_register). -.TP -.B --harvest-authors [path to files] -extract and present info on authors from metadata in document headers -.TP -.B --harvest-topics [path to files] -extract and present info on topics from metadata in document headers -.TP -.B --hide-ocn -turn visibility of object numbers off -.TP -.B --html [path + filename] -produces html output in two forms (i) segmented text with table of contents -(toc.html and index.html) and (ii) the document in a single file (scroll.html). -.TP -.B --html-link-harvest -within html output creates link to the document set metadata harvest output -part of --html output instruction and assumes that --harvest has been or will - be run -.TP -.B --html-link-search -within html output creates a search form for submission, requires information -on the name of the search form --search part of --html output instruction it -assumes there is a cgi search form and related document database -.TP -.B --html-scroll [path + filename] -produces html output, the document in a single file (scroll.html) only. Compare ---html-seg and --html -.TP -.B --html-seg [path + filename] -produces html output, segmented text with table of contents (toc.html and -index.html). Compare --html-scroll and --html -.TP -.B --lang=[language code, e.g. =en or =en,es] -provide language code of document -.TP -.B --latex [path + filename] -.I LaTeX -output for different document sizes (a4, a5, b4, letter) and orientations -(portrait, landscape) for downstream (processing and) conversion to pdf, (used -with xetex no direct link between programs provided as this is a much slower -process) -.TP -.B --latex-color-links -monochrome or color links within pdf, toggle (mono better for printing), -the default is mono for portrait and color for landscape documents -.TP -.B --light theme -for html and epub output, default, a dark alternative is provided -.TP -.B --manifest [path + filename] -produces an html summary of output generated (hyperlinked to content) and -document specific metadata (sisu_manifest.html). This step is assumed for most -processing flags. -.TP -.B --markdown [path + filename] -markdown smart text (not available) -.TP -.B --no-* -negate a toggle -.TP -.B --ocn-off -object numbers off (the c in ocn is for citation). See --hide-ocn -.TP -.B --odf [path + filename] -see --odt -.TP -.B --odt [path + filename] -produce open document output -.TP -.B --output=[path to output directories] -where to place document output -.TP -.B --parallel -parallelization on (the default except for sqlite) -.TP -.B --parallel-subprocesses -nested parallelization on (the default except for sqlite) -.TP -.B --papersize-(a4|a5|b5|letter|legal) -in conjunction with --pdf set pdf papersize, overriding any configuration -settings, to set more than one papersize repeat the option --pdf --papersize-a4 ---papersize-letter. See also --papersize=* (NOT implemented) -.BR -.B --papersize=a4,a5,b5,letter,legal -in conjunction with --pdf set pdf papersize, overriding any configuration -settings, to set more than one papersize list after the equal sign with a comma -separator --papersize=a4,letter. See also --papersize-* (NOT implemented) -.TP -.B --pdf [path + filename] -produces -.I LaTeX -see --latex -.TP -.B --pdf-color-links -monochrome or color links within latex for pdf. See --latex-color-links -.TP -.B --pod -markup source bundled in a zip file. -Produces a zipped file of the prepared document specified along with associated -images This provides a quick way of gathering the relevant -parts of a sisu document which can then for example be emailed. A sisupod -includes sisu markup source file, (along with associated documents if a master -file, or available in multilingual versions), together with related images. -(it should be possible in future to run spine commands directly against a pod). -.TP -.B --qrcode [path + filename] -generate QR code image of metadata (used in manifest). (not implemented) -.TP -.B --quiet -quiet less output to terminal. -.TP -.B --section-* -provides finer grain control over which parts of the document are processed -to produce output, toc, body, endnotes, glossary, biblio, bookindex and blurb -.TP -.B --section-biblio -produce document bibliography output, toggle -.TP -.B --section-blurb -produce document blurb output, toggle -.TP -.B --section-body -produce document body output, toggle -.TP -.B --section-bookindex -produce document bookindex output, toggle -.TP -.B --section-endnotes -produce document endnotes output, toggle -.TP -.B --section-endnotes -produce document glossary output, toggle -.TP -.B --serial -serial processing --no-parallel -.TP -.B --show-config -show site and document configuration instructions. Requires path to -configuration file or path to documents to be processed. -.TP -.B --show-make -show document make instructions -.TP -.B --show-metadata -show document metadata -.TP -.B --show-summary -show document summary -.TP -.B --source [path + filename] -document markup source -.TP -.B --sha256 -set hash digest where used to sha256 (not implemented) -.TP -.B --sha512 -set hash digest where used to sha512 (not implemented) -.TP -.B --sqlite-discrete [path + filename] -create a per document sqlite db -.TP -.B --sqlite-db-create --sqlite-db-filename="[db filename]" --output="[output path]" -create a shared db and its tables. Requires a db filename, which may be set in the configuration file or on the command line as shown -.TP -.B --sqlite-db-drop [path + db filename] -drop (remove) db and its tables -.TP -.B --sqlite-db-recreate [path + filename] -drop and re-create a shared db and its tables. Requires a db filename, which may be set in the configuration file or on the command line with --sqlite-db-filename="[db name]" -.TP -.B --sqlite-db-filename="[db name]" -provide name of sqlite db, to be created, dropped, populated or for which a search form is to be made. This information may also be set in the configuration file. -.TP -.B --sqlite-delete [path + filename] -process sqlite output, remove file -.TP -.B --sqlite-insert [path + filename] -process sqlite output, insert file. See --sqlite-update -.TP -.B --sqlite-update [path + filename] -process sqlite output, update file -.TP -.B --source [filename/wildcard] -copies sisu markup file to output directory. Alias -s -.TP -.B --text [filename/wildcard] -produces -.I plaintext -output -(not implemented) -.TP -.B --theme-dark -See --dark -.TP -.B --theme-light -See --light -.TP -.B --txt [filename/wildcard] -produces -.I plaintext -output -(not implemented) -.TP -.B --txt-asciidoc [filename/wildcard] -see --asciidoc -(not implemented) -.TP -.B --txt-markdown [filename/wildcard] -see --markdown -(not implemented) -.TP -.B --txt-rst [filename/wildcard] -see --rst -(not implemented) -.TP -.B --txt-textile [filename/wildcard] -see --textile -(not implemented) -.TP -.B -v -on its own, provides -.B SiSU -version information -.TP -.B -v [filename/wildcard] -see --verbose -.TP -.B --verbose [filename/wildcard] -provides verbose output of what is being generated, where output is placed (and -error messages if any). Alias -v -.TP -.B --very-verbose [filename/wildcard] -provides more verbose output of what is being generated. See --verbose. Alias --V -.TP -.B --version -spine version -(not implemented) -.TP -.B --xhtml -xhtml output -(not implemented) - -.SH COMMAND LINE MODIFIERS - -.TP -.B --no-ocn -[with --html --pdf or --epub] switches off -.I object citation numbering. -Produce output without identifying numbers in margins of html or -.I LaTeX -/pdf output. -#+END_SRC - -*** db flags - -#+NAME: sisu_spine_manpage_flags_db -#+BEGIN_SRC  man -.SH DATABASE COMMANDS - -.BR - -.B dbi - database interface - -.BR - -.B --pg or --pgsql -set for -.I PostgreSQL -.B --sqlite -default set for -.I SQLite --d is modifiable with --db=[database type (PgSQL or -.I SQLite -) ] -.TP -.B --pg -v --createall -initial step, creates required relations (tables, indexes) in existing -.I PostgreSQL -database (a database should be created manually and given the same name as -working directory, as requested) (rb.dbi) [ -dv --createall -.I SQLite -equivalent] it may be necessary to run sisu -Dv --createdb initially NOTE: at -the present time for -.I PostgreSQL -it may be necessary to manually create the database. The command would be -'createdb [database name]' where database name would be SiSU_[present working -directory name (without path)]. Please use only alphanumerics and underscores. -.TP -.B --pg -v --import -[filename/wildcard] imports data specified to -.I PostgreSQL -db (rb.dbi) [ -dv --import -.I SQLite -equivalent] -.TP -.B --pg -v --update -[filename/wildcard] updates/imports specified data to -.I PostgreSQL -db (rb.dbi) [ -dv --update -.I SQLite -equivalent] -.TP -.B --pg --remove -[filename/wildcard] removes specified data to -.I PostgreSQL -db (rb.dbi) [ -d --remove -.I SQLite -equivalent] -.TP -.B --pg --dropall -kills data" and drops ( -.I PostgreSQL -or -.I SQLite -) db, tables & indexes [ -d --dropall -.I SQLite -equivalent] - -.BR -The -v is for verbose output. -#+END_SRC - -** configuration file - -#+NAME: sisu_spine_manpage_config -#+BEGIN_SRC  man -.SH CONFIGURATION - -.BR - -default location: -.TP -~/.dr/config_local_site -.TP -.nf -flag: -  act0:                        "--html" -  act1:                        "--html --epub" -output: -  path:                        "/var/www/html" -default: -  language:                    "en" -  papersize:                   "a4" -  text_wrap:                   "80" -  digest:                      "sha256" -webserv: -  http:                        "http" -  domain:                      "localhost" -  data_http:                   "http" -  data_domain:                 "localhost" -  data_root_url:               "http://localhost" -  data_root_path:              "/var/www/html" -  data_root_part:              "" -  images_root_part:            "image" -  cgi_title:                   "≅ SiSU Spine search" -  cgi_http:                    "http" -  cgi_domain:                  "localhost" -  cgi_bin_url:                 "http://localhost/cgi-bin" -  cgi_bin_part:                "cgi-bin" -  cgi_bin_path:                "/usr/lib/cgi-bin" -  cgi_search_script:           "spine-search" -  cgi_search_script_raw_fn_d:  "spine_search.d" -  cgi_port:                    "" -  cgi_user:                    "" -  cgi_action:                  "http://localhost/cgi-bin/spine-search" -  db_sqlite:                   "spine.search.db" -  db_pg_table:                 "" -  db_pg_user:                  "" -.fi - -.BR -#+END_SRC - -** sample pod directory - -#+NAME: sisu_spine_manpage_pod_dir_structure -#+BEGIN_SRC  man -.SH SAMPLE POD DIRECTORY STRUCTURE -.BR -.TP -.nf - -pod (directory may contain multiple documents) - └── the_wealth_of_networks.yochai_benkler -     ├── conf -     │   └── sisu_document_make -     ├── media -     │   ├── image -     │   │   ├── won_benkler_2_1.png -     │   │   ├── won_benkler_6_1.png -     │   │   ├── won_benkler_7_1.png -     │   │   ├── won_benkler_7_2.png -     │   │   ├── won_benkler_7_3a.png -     │   │   ├── won_benkler_7_3b.png -     │   │   ├── won_benkler_7_4.png -     │   │   ├── won_benkler_7_5.png -     │   │   ├── won_benkler_7_6.png -     │   │   └── won_benkler_9_1.png -     │   └── text -     │       └── en -     │           └── the_wealth_of_networks.yochai_benkler.sst -     └── pod.manifest - -.fi -#+END_SRC - -** examples - -#+NAME: sisu_spine_manpage_cli_examples -#+BEGIN_SRC  man -.SH COMMAND LINE EXAMPLES - -.TP -note: ~webDocRoot should be the path to web doc root, provide a suitable output path. -.TP -spine -v --html --html-link-search --html-link-harvest --harvest --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* -.TP -spine -v --html --html-link-search --html-link-harvest --epub --harvest --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* -.TP -spine -v --sqlite-db-create --sqlite-db-filename="spine.search.db" --output=`echo ~webDocRoot` ~spineMarkupSamples/pod -.TP -spine -v --sqlite-db-create ~spineMarkupSamples/pod -.TP -spine -v --sqlite-update --sqlite-db-filename="spine.search.db" --output=`echo ~webDocRoot` ~spineMarkupSamples/pod/* -.TP -spine -v --sqlite-update ~spineMarkupSamples/pod/* -.TP -spine -v --show-config -.TP -spine -v --show-config --config= ~spineMarkupSamples/pod/.dr/config_local_site_test -.TP -spine -v --show-config --config=~spineMarkupSamples/pod/.dr -.TP -spine -v --cgi-search-form-codegen --config=~spineMarkupSamples/pod/.dr/config_local -.TP -cd ~webDocRoot/cgi -.TP -dub --force --compiler=ldc2 && sudo cp -v cgi-bin/spine-search /usr/lib/cgi-bin/. -.TP -#+END_SRC - -** docs -*** sources - -#+NAME: sisu_spine_manpage_docs -#+BEGIN_SRC  man - -.BR -Running sisu (alone without any flags, filenames or wildcards) brings up the -interactive help, as does any sisu command that is not recognised. Enter to -escape. -.SH HELP - -.SH SISU MANUAL - - -.BR -The most up to date information on sisu should be contained in the sisu_manual, -available at: - -.BR -  <http://sisudoc.org/sisu/sisu_manual/> - -.BR -The manual can be generated from source, found respectively, either within the -.B SiSU -tarball or installed locally at: - -.BR -  ./data/doc/sisu/markup-samples/sisu_manual - -.BR -  /usr/share/doc/sisu/markup-samples/sisu_manual - -.BR -move to the respective directory and type e.g.: - -.BR -  sisu sisu_manual.ssm -.SH SISU MAN PAGES - - -.BR -If -.B SiSU -is installed on your system usual man commands should be available, try: - -.BR -  man sisu - -.BR -Most -.B SiSU -man pages are generated directly from sisu documents that are used to prepare -the sisu manual, the sources files for which are located within the -.B SiSU -tarball at: - -.BR -  ./data/doc/sisu/markup-samples/sisu_manual - -.BR -Once installed, directory equivalent to: - -.BR -  /usr/share/doc/sisu/markup-samples/sisu_manual - -.BR -Available man pages are converted back to html using man2html: - -.BR -  /usr/share/doc/sisu/html/ - -.BR -  ./data/doc/sisu/html - -.BR -An online version of the sisu man page is available here: - -.BR - -- various sisu man pages <http://www.jus.uio.no/sisu/man/> [^1] - -.BR -- sisu.1 <http://www.jus.uio.no/sisu/man/sisu.1.html> [^2] -.SH SISU BUILT-IN INTERACTIVE HELP, [DISCONTINUED] - - -.BR -This fell out of date and has been discontinued. -#+END_SRC - -*** markup - -#+NAME: sisu_spine_manpage_markup -#+BEGIN_SRC  man -.SH INTRODUCTION TO SISU MARKUP[^3] - -.SH SUMMARY - -.BR - -.B SiSU -source documents are -.I plaintext -( -.I UTF-8 -)[^4] files - -.BR -All paragraphs are separated by an empty line. - -.BR -Markup is comprised of: - -.BR -- at the top of a document, the document header made up of semantic meta-data -about the document and if desired additional processing instructions (such an -instruction to automatically number headings from a particular level down) - -.BR -- followed by the prepared substantive text of which the most important single -characteristic is the markup of different heading levels, which define the -primary outline of the document structure. Markup of substantive text includes: - -.BR -  * heading levels defines document structure - -.BR -  * text basic attributes, italics, bold etc. - -.BR -  * grouped text (objects), which are to be treated differently, such as code -  blocks or poems. - -.BR -  * footnotes/endnotes - -.BR -  * linked text and images - -.BR -  * paragraph actions, such as indent, bulleted, numbered-lists, etc. -.SH MARKUP RULES, DOCUMENT STRUCTURE AND METADATA REQUIREMENTS - - -.BR -minimal content/structure requirement: - -.BR -[metadata] -.nf -A~ (level A [title]) - -1~ (at least one level 1 [segment/(chapter)]) -.fi - - -.BR -structure rules (document heirarchy, heading levels): - -.BR -there are two sets of heading levels ABCD (title & parts if any) and 123 -(segment & subsegments if any) - -.BR -sisu has the fllowing levels: -.nf -A~ [title]              . -   required (== 1)   followed by B~ or 1~ -B~ [part]               * -   followed by C~ or 1~ -C~ [subpart]            * -   followed by D~ or 1~ -D~ [subsubpart]         * -   followed by 1~ -1~ [segment (chapter)]  + -   required (>= 1)   followed by text or 2~ -text                    * -   followed by more text or 1~, 2~ -   or relevant part *() -2~ [subsegment]         * -   followed by text or 3~ -text                    * -   followed by more text or 1~, 2~ or 3~ -   or relevant part, see *() -3~ [subsubsegment]      * -   followed by text -text                    * -   followed by more text or 1~, 2~ or 3~ or relevant part, see *() - -*(B~ if none other used; -  if C~ is last used: C~ or B~; -  if D~ is used: D~, C~ or B~) -.fi - -.nf -- level A~ is the tile and is mandatory -- there can only be one level A~ - -- heading levels BCD, are optional and there may be several of each -  (where all three are used corresponding to e.g. Book Part Section) -  * sublevels that are used must follow each other sequentially -    (alphabetically), -- heading levels A~ B~ C~ D~ are followed by other heading levels rather -  than substantive text -  which may be the subsequent sequential (alphabetic) heading part level -  or a heading (segment) level 1~ -- there must be at least one heading (segment) level 1~ -  (the level on which the text is segmented, in a book would correspond -  to the Chapter level) -- additional heading levels 1~ 2~ 3~ are optional and there may be several -  of each -- heading levels 1~ 2~ 3~ are followed by text (which may be followed by -  the same heading level) -  and/or the next lower numeric heading level (followed by text) -  or indeed return to the relevant part level -  (as a corollary to the rules above substantive text/ content -  must be preceded by a level 1~ (2~ or 3~) heading) -.fi - -.SH MARKUP EXAMPLES - -.SH ONLINE - - -.BR -Online markup examples are available together with the respective outputs -produced from <http://www.jus.uio.no/sisu/SiSU/examples.html> or from -<http://www.jus.uio.no/sisu/sisu_examples/> - -.BR -There is of course this document, which provides a cursory overview of sisu -markup and the respective output produced: -<http://www.jus.uio.no/sisu/sisu_markup/> - -.BR -an alternative presentation of markup syntax: -/usr/share/doc/sisu/on_markup.txt.gz -.SH INSTALLED - - -.BR -With -.B SiSU -installed sample skins may be found in: /usr/share/doc/sisu/markup-samples (or -equivalent directory) and if sisu -markup-samples is installed also under: -/usr/share/doc/sisu/markup-samples-non-free - -.SH MARKUP OF HEADERS - -.BR -Headers contain either: semantic meta-data about a document, which can be used -by any output module of the program, or; processing instructions. - -.BR -Note: the first line of a document may include information on the markup -version used in the form of a comment. Comments are a percentage mark at the -start of a paragraph (and as the first character in a line of text) followed by -a space and the comment: -.nf -% this would be a comment -.fi - -.SH SAMPLE HEADER - - -.BR -This current document is loaded by a master document that has a header similar -to this one: -.nf -% SiSU master 4.0 - -title: SiSU -  subtitle: Manual - -creator: -  author: Amissah, Ralph - -publisher: [publisher name] - -rights: Copyright (C) Ralph Amissah 2007, part of SiSU documentation, License GPL 3 - -classify: -  topic_register: SiSU:manual;electronic documents:SiSU:manual -  subject: ebook, epublishing, electronic book, electronic publishing, -    electronic document, electronic citation, data structure, -     citation systems, search - -% used_by: manual - -date: -  published: 2008-05-22 -  created: 2002-08-28 -  issued: 2002-08-28 -  available: 2002-08-28 -  modified: 2010-03-03 - -make: -  num_top: 1 -  breaks: new=C; break=1 -  bold: /Gnu|Debian|Ruby|SiSU/ -  home_button_text: {SiSU}http://sisudoc.org; {git}http://git.sisudoc.org -  footer: {SiSU}http://sisudoc.org; {git}http://git.sisudoc.org -  manpage: name=sisu - documents: markup, structuring, publishing in multiple standard formats, and search; -     synopsis=sisu [-abcDdeFhIiMmNnopqRrSsTtUuVvwXxYyZz0-9] [filename/wildcard ] -     . sisu [-Ddcv] [instruction] -     . sisu [-CcFLSVvW] - -@links: -  { SiSU Homepage }http://www.sisudoc.org/ -  { SiSU Manual }http://www.sisudoc.org/sisu/sisu_manual/ -  { Book Samples & Markup Examples }http://www.jus.uio.no/sisu/SiSU/examples.html -  { SiSU Download }http://www.jus.uio.no/sisu/SiSU/download.html -  { SiSU Changelog }http://www.jus.uio.no/sisu/SiSU/changelog.html -  { SiSU Git repo }http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary -  { SiSU List Archives }http://lists.sisudoc.org/pipermail/sisu/ -  { SiSU @ Debian }http://packages.qa.debian.org/s/sisu.html -  { SiSU Project @ Debian }http://qa.debian.org/developer.php?login=sisu@lists.sisudoc.org -  { SiSU @ Wikipedia }http://en.wikipedia.org/wiki/SiSU -.fi - -.SH AVAILABLE HEADERS - - -.BR -Header tags appear at the beginning of a document and provide meta information -on the document (such as the -.I Dublin Core -) , or information as to how the document as a whole is to be processed. All -header instructions take the form @headername: or on the next line and indented -by once space :subheadername: All -.I Dublin Core -meta tags are available - -.BR - -.B @identifier: -information or instructions - -.BR -where the "identifier" is a tag recognised by the program, and the -"information" or "instructions" belong to the tag/identifier specified - -.BR -Note: a header where used should only be used once; all headers apart from -@title: are optional; the @structure: header is used to describe document -structure, and can be useful to know. - -.BR -This is a sample header -.nf -% SiSU 2.0 [declared file-type identifier with markup version] -.fi - -.nf -@title: [title text] [this header is the only one that is mandatory] -  subtitle: [subtitle if any] -  language: English -.fi - -.nf -creator: -  author: [Lastname, First names] -  illustrator: [Lastname, First names] -  translator: [Lastname, First names] -  prepared_by: [Lastname, First names] -.fi - -.nf -date: -  published: [year or yyyy-mm-dd] -  created: [year or yyyy-mm-dd] -  issued: [year or yyyy-mm-dd] -  available: [year or yyyy-mm-dd] -  modified: [year or yyyy-mm-dd] -  valid: [year or yyyy-mm-dd] -  added_to_site: [year or yyyy-mm-dd] -  translated: [year or yyyy-mm-dd] -.fi - -.nf -rights: -  copyright: Copyright (C) [Year and Holder] -  license: [Use License granted] -  text: [Year and Holder] -  translation: [Name, Year] -  illustrations: [Name, Year] -.fi - -.nf -classify: -  topic_register: SiSU:markup sample:book;book:novel:fantasy -  type: -  subject: -  description: -  keywords: -  abstract: -  loc: [Library of Congress classification] -  dewey: [Dewey classification -.fi - -.nf -identify: -  :isbn: [ISBN] -  :oclc: -.fi - -.nf -links: { SiSU }http://www.sisudoc.org -  { FSF }http://www.fsf.org -.fi - -.nf -make: -  num_top: 1 -  headings: [text to match for each level -   (e.g. PART; Chapter; Section; Article; or another: none; BOOK|FIRST|SECOND; none; CHAPTER;) -  breaks: new=:C; break=1 -  promo: sisu, ruby, sisu_search_libre, open_society -  bold: [regular expression of words/phrases to be made bold] -  italics: [regular expression of words/phrases to italicise] -  home_button_text: {SiSU}http://sisudoc.org; {git}http://git.sisudoc.org -  footer: {SiSU}http://sisudoc.org; {git}http://git.sisudoc.org -.fi - -.nf -original: -  language: [language] -.fi - -.nf -notes: -  comment: -  prefix: [prefix is placed just after table of contents] -.fi - -.SH MARKUP OF SUBSTANTIVE TEXT - -.SH HEADING LEVELS - - -.BR -Heading levels are :A~ ,:B~ ,:C~ ,1~ ,2~ ,3~ ... :A - :C being part / section -headings, followed by other heading levels, and 1 -6 being headings followed by -substantive text or sub-headings. :A~ usually the title :A~? conditional level -1 heading (used where a stand-alone document may be imported into another) - -.BR - -.B :A~ [heading text] -Top level heading [this usually has similar content to the title @title: ] -NOTE: the heading levels described here are in 0.38 notation, see heading - -.BR - -.B :B~ [heading text] -Second level heading [this is a heading level divider] - -.BR - -.B :C~ [heading text] -Third level heading [this is a heading level divider] - -.BR - -.B 1~ [heading text] -Top level heading preceding substantive text of document or sub-heading 2, the -heading level that would normally be marked 1. or 2. or 3. etc. in a document, -and the level on which sisu by default would break html output into named -segments, names are provided automatically if none are given (a number), -otherwise takes the form 1~my_filename_for_this_segment - -.BR - -.B 2~ [heading text] -Second level heading preceding substantive text of document or sub-heading 3 , -the heading level that would normally be marked 1.1 or 1.2 or 1.3 or 2.1 etc. -in a document. - -.BR - -.B 3~ [heading text] -Third level heading preceding substantive text of document, that would normally -be marked 1.1.1 or 1.1.2 or 1.2.1 or 2.1.1 etc. in a document -.nf -1~filename level 1 heading, - -% the primary division such as Chapter that is followed by substantive text, and may be further subdivided (this is the level on which by default html segments are made) -.fi - -.SH FONT ATTRIBUTES - -.BR - -.B markup example: -.nf -normal text, *{emphasis}*, !{bold text}!, /{italics}/, _{underscore}_, "{citation}", -^{superscript}^, ,{subscript},, +{inserted text}+, -{strikethrough}-, #{monospace}# - -normal text - -*{emphasis}* [note: can be configured to be represented by bold, italics or underscore] - -!{bold text}! - -/{italics}/ - -_{underscore}_ - -"{citation}" - -^{superscript}^ - -,{subscript}, - -+{inserted text}+ - --{strikethrough}- - -#{monospace}# -.fi - - -.BR - -.B resulting output: - -.BR -normal text, -.B emphasis, -.B bold text -, -.I italics, -.I underscore, -"citation", ^superscript^, [subscript], ++inserted text++, --strikethrough--, -monospace - -.BR -normal text - -.BR - -.B emphasis -[note: can be configured to be represented by bold, italics or underscore] - -.BR - -.B bold text - -.BR - -.I italics - -.BR -.I underscore - -.BR -"citation" - -.BR -^superscript^ - -.BR -[subscript] - -.BR -++inserted text++ - -.BR ---strikethrough-- - -.BR -monospace -.SH INDENTATION AND BULLETS - - -.BR - -.B markup example: -.nf -ordinary paragraph - -_1 indent paragraph one step - -_2 indent paragraph two steps - -_9 indent paragraph nine steps -.fi - - -.BR - -.B resulting output: - -.BR -ordinary paragraph - -.BR -  indent paragraph one step - -.BR -    indent paragraph two steps - -.BR -                  indent paragraph nine steps - -.BR - -.B markup example: -.nf -_* bullet text - -_1* bullet text, first indent - -_2* bullet text, two step indent -.fi - - -.BR - -.B resulting output: - -.BR -- bullet text - -.BR -  * bullet text, first indent - -.BR -    * bullet text, two step indent - -.BR -Numbered List (not to be confused with headings/titles, (document structure)) - -.BR - -.B markup example: -.nf -# numbered list                numbered list 1., 2., 3, etc. - -_# numbered list numbered list indented a., b., c., d., etc. -.fi - -.SH HANGING INDENTS - - -.BR - -.B markup example: -.nf -_0_1 first line no indent, -rest of paragraph indented one step - -_1_0 first line indented, -rest of paragraph no indent - -in each case level may be 0-9 -.fi - - -.BR - -.B resulting output: - -.BR -first line no indent, rest of paragraph indented one step; first line no -  indent, rest of paragraph indented one step; first line no indent, rest of -  paragraph indented one step; first line no indent, rest of paragraph indented -  one step; first line no indent, rest of paragraph indented one step; first -  line no indent, rest of paragraph indented one step; first line no indent, -  rest of paragraph indented one step; first line no indent, rest of paragraph -  indented one step; first line no indent, rest of paragraph indented one step; - -.BR -A regular paragraph. - -.BR -first line indented, rest of paragraph no indent first line indented, rest of -paragraph no indent first line indented, rest of paragraph no indent first line -indented, rest of paragraph no indent first line indented, rest of paragraph no -indent first line indented, rest of paragraph no indent first line indented, -rest of paragraph no indent first line indented, rest of paragraph no indent -first line indented, rest of paragraph no indent first line indented, rest of -paragraph no indent first line indented, rest of paragraph no indent - -.BR -in each case level may be 0-9 - -.BR - -.B live-build -  A collection of scripts used to build customized -.B Debian -  Livesystems. -  .I live-build -  was formerly known as live-helper, and even earlier known as live-package. - -.BR - -.B live-build - -  A collection of scripts used to build customized -.B Debian -  Livesystems. -.I live-build -  was formerly known as live-helper, and even earlier known as live-package. -.SH FOOTNOTES / ENDNOTES - - -.BR -Footnotes and endnotes are marked up at the location where they would be -indicated within a text. They are automatically numbered. The output type -determines whether footnotes or endnotes will be produced - -.BR - -.B markup example: -.nf -~{ a footnote or endnote }~ -.fi - - -.BR - -.B resulting output: - -.BR -[^5] - -.BR - -.B markup example: -.nf -normal text~{ self contained endnote marker & endnote in one }~ continues -.fi - - -.BR - -.B resulting output: - -.BR -normal text[^6] continues - -.BR - -.B markup example: -.nf -normal text ~{* unnumbered asterisk footnote/endnote, insert multiple asterisks if required }~ continues - -normal text ~{** another unnumbered asterisk footnote/endnote }~ continues -.fi - - -.BR - -.B resulting output: - -.BR -normal text [^*] continues - -.BR -normal text [^**] continues - -.BR - -.B markup example: -.nf -normal text ~[* editors notes, numbered asterisk footnote/endnote series ]~ continues - -normal text ~[+ editors notes, numbered plus symbol footnote/endnote series ]~ continues -.fi - - -.BR - -.B resulting output: - -.BR -normal text [^*3] continues - -.BR -normal text [^+2] continues - -.BR - -.B Alternative endnote pair notation for footnotes/endnotes: -.nf -% note the endnote marker "~^" - -normal text~^ continues - -^~ endnote text following the paragraph in which the marker occurs -.fi - - -.BR -the standard and pair notation cannot be mixed in the same document -.SH LINKS - -.SH NAKED URLS WITHIN TEXT, DEALING WITH URLS - - -.BR -urls found within text are marked up automatically. A url within text is -automatically hyperlinked to itself and by default decorated with angled -braces, unless they are contained within a code block (in which case they are -passed as normal text), or escaped by a preceding underscore (in which case the -decoration is omitted). - -.BR - -.B markup example: -.nf -normal text http://www.sisudoc.org/ continues -.fi - - -.BR - -.B resulting output: - -.BR -normal text <http://www.sisudoc.org/> continues - -.BR -An escaped url without decoration - -.BR - -.B markup example: -.nf -normal text _http://www.sisudoc.org/ continues - -deb _http://www.jus.uio.no/sisu/archive unstable main non-free -.fi - - -.BR - -.B resulting output: - -.BR -normal text <_http://www.sisudoc.org/> continues - -.BR -deb <_http://www.jus.uio.no/sisu/archive> unstable main non-free - -.BR -where a code block is used there is neither decoration nor hyperlinking, code -blocks are discussed later in this document - -.BR - -.B resulting output: -.nf -deb http://www.jus.uio.no/sisu/archive unstable main non-free -deb-src http://www.jus.uio.no/sisu/archive unstable main non-free -.fi - -.SH LINKING TEXT - - -.BR -To link text or an image to a url the markup is as follows - -.BR - -.B markup example: -.nf -about { SiSU }http://url.org markup -.fi - - -.BR - -.B resulting output: - -.BR -aboutSiSU <http://www.sisudoc.org/> markup - -.BR -A shortcut notation is available so the url link may also be provided -automatically as a footnote - -.BR - -.B markup example: -.nf -about {~^ SiSU }http://url.org markup -.fi - - -.BR - -.B resulting output: - -.BR -aboutSiSU <http://www.sisudoc.org/> [^7] markup - -.BR -Internal document links to a tagged location, including an ocn - -.BR - -.B markup example: -.nf -about { text links }#link_text -.fi - - -.BR - -.B resulting output: - -.BR -about ⌠text links⌡⌈link_text⌋ - -.BR -Shared document collection link - -.BR - -.B markup example: -.nf -about { SiSU book markup examples }:SiSU/examples.html -.fi - - -.BR - -.B resulting output: - -.BR -about ⌠ -.B SiSU -book markup examples⌡⌈:SiSU/examples.html⌋ -.SH LINKING IMAGES - - -.BR - -.B markup example: -.nf -{ tux.png 64x80 }image - -% various url linked images - -{tux.png 64x80 "a better way" }http://www.sisudoc.org/ - -{GnuDebianLinuxRubyBetterWay.png 100x101 "Way Better - with Gnu/Linux, Debian and Ruby" }http://www.sisudoc.org/ - -{~^ ruby_logo.png "Ruby" }http://www.ruby-lang.org/en/ -.fi - - -.BR - -.B resulting output: - -.BR -[ tux.png ] - -.BR -tux.png 64x80 "Gnu/Linux - a better way" <http://www.sisudoc.org/> - -.BR -GnuDebianLinuxRubyBetterWay.png 100x101 "Way Better - with Gnu/Linux, Debian -and Ruby" <http://www.sisudoc.org/> - -.BR -ruby_logo.png 70x90 "Ruby" <http://www.ruby-lang.org/en/> [^8] - -.BR - -.B linked url footnote shortcut -.nf -{~^ [text to link] }http://url.org - -% maps to: { [text to link] }http://url.org ~{ http://url.org }~ - -% which produces hyper-linked text within a document/paragraph, with an endnote providing the url for the text location used in the hyperlink -.fi - -.nf -text marker *~name -.fi - - -.BR -note at a heading level the same is automatically achieved by providing names -to headings 1, 2 and 3 i.e. 2~[name] and 3~[name] or in the case of -auto-heading numbering, without further intervention. -.SH LINK SHORTCUT FOR MULTIPLE VERSIONS OF A SISU DOCUMENT IN THE SAME DIRECTORY -TREE - - -.BR - -.B markup example: -.nf -!_ /{"Viral Spiral"}/, David Bollier - -{ "Viral Spiral", David Bollier [3sS]}viral_spiral.david_bollier.sst -.fi - - -.BR - -.B -.I "Viral Spiral", -David Bollier -"Viral Spiral", David Bollier <http://corundum/sisu_manual/en/manifest/viral_spiral.david_bollier.html> -     document manifest <http://corundum/sisu_manual/en/manifest/viral_spiral.david_bollier.html> -      ⌠html, segmented text⌡「http://corundum/sisu_manual/en/html/viral_spiral.david_bollier.html」 -      ⌠html, scroll, document in one⌡「http://corundum/sisu_manual/en/html/viral_spiral.david_bollier.html」 -      ⌠epub⌡「http://corundum/sisu_manual/en/epub/viral_spiral.david_bollier.epub」 -      ⌠pdf, landscape⌡「http://corundum/sisu_manual/en/pdf/viral_spiral.david_bollier.pdf」 -      ⌠pdf, portrait⌡「http://corundum/sisu_manual/en/pdf/viral_spiral.david_bollier.pdf」 -      ⌠odf: odt, open document text⌡「http://corundum/sisu_manual/en/odt/viral_spiral.david_bollier.odt」 -      ⌠xhtml scroll⌡「http://corundum/sisu_manual/en/xhtml/viral_spiral.david_bollier.xhtml」 -      ⌠xml, sax⌡「http://corundum/sisu_manual/en/xml/viral_spiral.david_bollier.xml」 -      ⌠xml, dom⌡「http://corundum/sisu_manual/en/xml/viral_spiral.david_bollier.xml」 -      ⌠concordance⌡「http://corundum/sisu_manual/en/html/viral_spiral.david_bollier.html」 -      ⌠dcc, document content certificate (digests)⌡「http://corundum/sisu_manual/en/digest/viral_spiral.david_bollier.txt」 -      ⌠markup source text⌡「http://corundum/sisu_manual/en/src/viral_spiral.david_bollier.sst」 -      ⌠markup source (zipped) pod⌡「http://corundum/sisu_manual/en/pod/viral_spiral.david_bollier.sst.zip」 - -.SH GROUPED TEXT / BLOCKED TEXT - - -.BR -There are two markup syntaxes for blocked text, using curly braces or using -tics -.SH BLOCKED TEXT CURLY BRACE SYNTAX - - -.BR -at the start of a line on its own use name of block type with an opening curly -brace, follow with the content of the block, and close with a closing curly -brace and the name of the block type, e.g. -.nf -code{ - -this is a code block - -}code -.fi - -.nf - -poem{ - -this here is a poem - -}poem -.fi - -.SH BLOCKED TEXT TIC SYNTAX - -.nf -``` code -this is a code block - -``` - -``` poem -this here is a poem - -``` -.fi - - -.BR -start a line with three backtics, a space followed by the name of the name of -block type, follow with the content of the block, and close with three back -ticks on a line of their own, e.g. -.SH TABLES - - -.BR -Tables may be prepared in two either of two forms - -.BR - -.B markup example: -.nf -table{ c3; 40; 30; 30; - -This is a table -this would become column two of row one -column three of row one is here - -And here begins another row -column two of row two -column three of row two, and so on - -}table -.fi - - -.BR - -.B resulting output: -This is a table|this would become column two of row one|column three of row one is here』And here begins another row|column two of row two|column three of row two, and so on』 - - -.BR -a second form may be easier to work with in cases where there is not much -information in each column - -.BR - -.B markup example: -[^9] -.nf -!_ Table 3.1: Contributors to Wikipedia, January 2001 - June 2005 - -{table~h 24; 12; 12; 12; 12; 12; 12;} -                                |Jan. 2001|Jan. 2002|Jan. 2003|Jan. 2004|July 2004|June 2006 -Contributors*                   |       10|      472|    2,188|    9,653|   25,011|   48,721 -Active contributors**           |        9|      212|      846|    3,228|    8,442|   16,945 -Very active contributors***     |        0|       31|      190|      692|    1,639|    3,016 -No. of English language articles|       25|   16,000|  101,000|  190,000|  320,000|  630,000 -No. of articles, all languages  |       25|   19,000|  138,000|  490,000|  862,000|1,600,000 - -- Contributed at least ten times; ** at least 5 times in last month; *** more than 100 times in last month. -.fi - - -.BR - -.B resulting output: - -.BR - -.B Table 3.1: Contributors to Wikipedia, January 2001 - June 2005 -|Jan. 2001|Jan. 2002|Jan. 2003|Jan. 2004|July 2004|June 2006』Contributors*|10|472|2,188|9,653|25,011|48,721』Active contributors**|9|212|846|3,228|8,442|16,945』Very active contributors***|0|31|190|692|1,639|3,016』No. of English language articles|25|16,000|101,000|190,000|320,000|630,000』No. of articles, all languages|25|19,000|138,000|490,000|862,000|1,600,000』 - - -.BR -- Contributed at least ten times; ** at least 5 times in last month; *** more -than 100 times in last month. -.SH POEM - - -.BR - -.B basic markup: -.nf -poem{ - -  Your poem here - -}poem - -Each verse in a poem is given an object number. -.fi - - -.BR - -.B markup example: -.nf -poem{ - -                    `Fury said to a -                   mouse, That he -                 met in the -               house, -            "Let us -              both go to -                law:  I will -                  prosecute -                    YOU.  --Come, -                       I'll take no -                        denial; We -                     must have a -                 trial:  For -              really this -           morning I've -          nothing -         to do." -           Said the -             mouse to the -               cur, "Such -                 a trial, -                   dear Sir, -                         With -                     no jury -                  or judge, -                would be -              wasting -             our -              breath." -               "I'll be -                 judge, I'll -                   be jury," -                         Said -                    cunning -                      old Fury: -                     "I'll -                      try the -                         whole -                          cause, -                             and -                        condemn -                       you -                      to -                       death."' - -}poem -.fi - - -.BR - -.B resulting output: -                    `Fury said to a -                   mouse, That he -                 met in the -               house, -            "Let us -              both go to -                law:  I will -                  prosecute -                    YOU.  --Come, -                       I'll take no -                        denial; We -                     must have a -                 trial:  For -              really this -           morning I've -          nothing -         to do." -           Said the -             mouse to the -               cur, "Such -                 a trial, -                   dear Sir, -                         With -                     no jury -                  or judge, -                would be -              wasting -             our -              breath." -               "I'll be -                 judge, I'll -                   be jury," -                         Said -                    cunning -                      old Fury: -                     "I'll -                      try the -                         whole -                          cause, -                             and -                        condemn -                       you -                      to -                       death."' - - -.SH GROUP - - -.BR - -.B basic markup: -.nf -group{ - -  Your grouped text here - -}group - -A group is treated as an object and given a single object number. -.fi - - -.BR - -.B markup example: -.nf -group{ - -                    `Fury said to a -                   mouse, That he -                 met in the -               house, -            "Let us -              both go to -                law:  I will -                  prosecute -                    YOU.  --Come, -                       I'll take no -                        denial; We -                     must have a -                 trial:  For -              really this -           morning I've -          nothing -         to do." -           Said the -             mouse to the -               cur, "Such -                 a trial, -                   dear Sir, -                         With -                     no jury -                  or judge, -                would be -              wasting -             our -              breath." -               "I'll be -                 judge, I'll -                   be jury," -                         Said -                    cunning -                      old Fury: -                     "I'll -                      try the -                         whole -                          cause, -                             and -                        condemn -                       you -                      to -                       death."' - -}group -.fi - - -.BR - -.B resulting output: -                    `Fury said to a -                   mouse, That he -                 met in the -               house, -            "Let us -              both go to -                law:  I will -                  prosecute -                    YOU.  --Come, -                       I'll take no -                        denial; We -                     must have a -                 trial:  For -              really this -           morning I've -          nothing -         to do." -           Said the -             mouse to the -               cur, "Such -                 a trial, -                   dear Sir, -                         With -                     no jury -                  or judge, -                would be -              wasting -             our -              breath." -               "I'll be -                 judge, I'll -                   be jury," -                         Said -                    cunning -                      old Fury: -                     "I'll -                      try the -                         whole -                          cause, -                             and -                        condemn -                       you -                      to -                       death."' - - -.SH CODE - - -.BR -Code tags code{ ... }code (used as with other group tags described above) are -used to escape regular sisu markup, and have been used extensively within this -document to provide examples of -.B SiSU -markup. You cannot however use code tags to escape code tags. They are however -used in the same way as group or poem tags. - -.BR -A code-block is treated as an object and given a single object number. [an -option to number each line of code may be considered at some later time] - -.BR - -.B use of code tags instead of poem compared, resulting output: -.nf -                    `Fury said to a -                   mouse, That he -                 met in the -               house, -            "Let us -              both go to -                law:  I will -                  prosecute -                    YOU.  --Come, -                       I'll take no -                        denial; We -                     must have a -                 trial:  For -              really this -           morning I've -          nothing -         to do." -           Said the -             mouse to the -               cur, "Such -                 a trial, -                   dear Sir, -                         With -                     no jury -                  or judge, -                would be -              wasting -             our -              breath." -               "I'll be -                 judge, I'll -                   be jury," -                         Said -                    cunning -                      old Fury: -                     "I'll -                      try the -                         whole -                          cause, -                             and -                        condemn -                       you -                      to -                       death."' -.fi - - -.BR -From -.B SiSU -2.7.7 on you can number codeblocks by placing a hash after the opening code tag -code{# as demonstrated here: -.nf -1  |                    `Fury said to a -2  |                   mouse, That he -3  |                 met in the -4  |               house, -5  |            "Let us -6  |              both go to -7  |                law:  I will -8  |                  prosecute -9  |                    YOU.  --Come, -10 |                       I'll take no -11 |                        denial; We -12 |                     must have a -13 |                 trial:  For -14 |              really this -15 |           morning I've -16 |          nothing -17 |         to do." -18 |           Said the -19 |             mouse to the -20 |               cur, "Such -21 |                 a trial, -22 |                   dear Sir, -23 |                         With -24 |                     no jury -25 |                  or judge, -26 |                would be -27 |              wasting -28 |             our -29 |              breath." -30 |               "I'll be -31 |                 judge, I'll -32 |                   be jury," -33 |                         Said -34 |                    cunning -35 |                      old Fury: -36 |                     "I'll -37 |                      try the -38 |                         whole -39 |                          cause, -40 |                             and -41 |                        condemn -42 |                       you -43 |                      to -44 |                       death."' -.fi - -.SH ADDITIONAL BREAKS - LINEBREAKS WITHIN OBJECTS, COLUMN AND PAGE-BREAKS - -.SH LINE-BREAKS - - -.BR -To break a line within a "paragraph object", two backslashes \e\e -with a space before and a space or newline after them -may be used. -.nf -To break a line within a "paragraph object", -two backslashes \e\e with a space before -and a space or newline after them \e\e -may be used. -.fi - - -.BR -The html break br enclosed in angle brackets (though undocumented) is available -in versions prior to 3.0.13 and 2.9.7 (it remains available for the time being, -but is depreciated). - -.BR -To draw a dividing line dividing paragraphs, see the section on page breaks. -.SH PAGE BREAKS - - -.BR -Page breaks are only relevant and honored in some output formats. A page break -or a new page may be inserted manually using the following markup on a line on -its own: - -.BR -page new =\e= breaks the page, starts a new page. - -.BR -page break -\- breaks a column, starts a new column, if using columns, else -breaks the page, starts a new page. - -.BR -page break line across page -..- draws a dividing line, dividing paragraphs - -.BR -page break: -.nf --\e\e- -.fi - - -.BR -page (break) new: -.nf -=\e\e= -.fi - - -.BR -page (break) line across page (dividing paragraphs): -.nf --..- -.fi - -.SH BIBLIOGRAPHY / REFERENCES - - -.BR -There are three ways to prepare a bibliography using sisu (which are mutually -exclusive): (i) manually preparing and marking up as regular text in sisu a -list of references, this is treated as a regular document segment (and placed -before endnotes if any); (ii) preparing a bibliography, marking a heading level -1~!biblio (note the exclamation mark) and preparing a bibliography using -various metadata tags including for author: title: year: a list of which is -provided below, or; (iii) as an assistance in preparing a bibliography, marking -a heading level 1~!biblio and tagging citations within footnotes for inclusion, -identifying citations and having a parser attempt to extract them and build a -bibliography of the citations provided. - -.BR -For the heading/section sequence: endnotes, bibliography then book index to -occur, the name biblio or bibliography must be given to the bibliography -section, like so: -.nf -1~!biblio~ [Note: heading marker::required title missing] -.fi - -.SH A MARKUP TAGGED METADATA BIBLIOGRAPHY SECTION - - -.BR -Here instead of writing your full citations directly in footnotes, each time -you have new material to cite, you add it to your bibliography section (if it -has not been added yet) providing the information you need against an available -list of tags (provided below). - -.BR -The required tags are au: ti: and year: [^10] an short quick example might be -as follows: -.nf -1~!biblio~ [Note: heading marker::required title missing] - -au: von Hippel, E. -ti: Perspective: User Toolkits for Innovation -lng: (language) -jo: Journal of Product Innovation Management -vo: 18 -ed: (editor) -yr: 2001 -note: -sn: Hippel, /{User Toolkits}/ (2001) -id: vHippel_2001 -% form: - -au: Benkler, Yochai -ti: The Wealth of Networks -st: How Social Production Transforms Markets and Freedom -lng: (language) -pb: Harvard University Press -edn: (edition) -yr: 2006 -pl: U.S. -url: http://cyber.law.harvard.edu/wealth_of_networks/Main_Page -note: -sn: Benkler, /{Wealth of Networks}/ (2006) -id: Benkler2006 - -au: Quixote, Don; Panza, Sancho -ti: Taming Windmills, Keeping True -jo: Imaginary Journal -yr: 1605 -url: https://en.wikipedia.org/wiki/Don_Quixote -note: made up to provide an example of author markup for an article with two authors -sn: Quixote & Panza, /{Taming Windmills}/ (1605) -id: quixote1605 -.fi - - -.BR -Note that the section name !biblio (or !bibliography) is required for the -bibliography to be treated specially as such, and placed after the -auto-generated endnote section. - -.BR -Using this method, work goes into preparing the bibliography, the tags author -or editor, year and title are required and will be used to sort the -bibliography that is placed under the Bibliography section - -.BR -The metadata tags may include shortname (sn:) and id, if provided, which are -used for substitution within text. Every time the given id is found within the -text it will be replaced by the given short title of the work (it is for this -reason the short title has sisu markup to italicize the title), it should work -with any page numbers to be added, the short title should be one that can -easily be used to look up the full description in the bibliography. -.nf -The following footnote~{ quixote1605, pp 1000 - 1001, also Benkler2006 p 1. }~ -.fi - - -.BR -would be presented as: - -.BR -Quixote and Panza, -.I Taming Windmills -(1605), pp 1000 - 1001 also, Benkler, -.I Wealth of Networks, -(2006) p 1 or rather[^11] -.nf -au: author Surname, FirstNames (if multiple semi-colon separator) -    (required unless editor to be used instead) -ti: title  (required) -st: subtitle -jo: journal -vo: volume -ed: editor (required if author not provided) -tr: translator -src: source (generic field where others are not appropriate) -in: in (like src) -pl: place/location (state, country) -pb: publisher -edn: edition -yr: year (yyyy or yyyy-mm or yyyy-mm-dd) (required) -pg: pages -url: http://url -note: note -id: create_short_identifier e.g. authorSurnameYear -    (used in substitutions: when found within text will be -    replaced by the short name provided) -sn: short name e.g. Author, /{short title}/, Year -    (used in substitutions: when an id is found within text -    the short name will be used to replace it) -.fi - -.SH TAGGING CITATIONS FOR INCLUSION IN THE BIBLIOGRAPHY - - -.BR -Here whenever you make a citation that you wish be included in the -bibliography, you tag the citation as such using special delimiters (which are -subsequently removed from the final text produced by sisu) - -.BR -Here you would write something like the following, either in regular text or a -footnote -.nf -See .: Quixote, Don; Panza, Sancho /{Taming Windmills, Keeping True}/ (1605) :. -.fi - - -.BR - -.B SiSU -will parse for a number of patterns within the delimiters to try make out the -authors, title, date etc. and from that create a Bibliography. This is more -limited than the previously described method of preparing a tagged -bibliography, and using an id within text to identify the work, which also -lends itself to greater consistency. -.SH GLOSSARY - - -.BR -Using the section name 1~!glossary results in the Glossary being treated -specially as such, and placed after the auto-generated endnote section (before -the bibliography/list of references if there is one). - -.BR -The Glossary is ordinary text marked up in a manner deemed suitable for that -purpose. e.g. with the term in bold, possibly with a hanging indent. -.nf -1~!glossary~ [Note: heading marker::required title missing] - -_0_1 *{GPL}* An abbreviation that stands for "General Purpose License." ... - -_0_1 [provide your list of terms and definitions] -.fi - - -.BR -In the given example the first line is not indented subsequent lines are by one -level, and the term to be defined is in bold text. -.SH BOOK INDEX - - -.BR -To make an index append to paragraph the book index term relates to it, using -an equal sign and curly braces. - -.BR -Currently two levels are provided, a main term and if needed a sub-term. -Sub-terms are separated from the main term by a colon. -.nf -  Paragraph containing main term and sub-term. -  ={Main term:sub-term} -.fi - - -.BR -The index syntax starts on a new line, but there should not be an empty line -between paragraph and index markup. - -.BR -The structure of the resulting index would be: -.nf -  Main term, 1 -    sub-term, 1 -.fi - - -.BR -Several terms may relate to a paragraph, they are separated by a semicolon. If -the term refers to more than one paragraph, indicate the number of paragraphs. -.nf -  Paragraph containing main term, second term and sub-term. -  ={first term; second term: sub-term} -.fi - - -.BR -The structure of the resulting index would be: -.nf -  First term, 1, -  Second term, 1, -    sub-term, 1 -.fi - - -.BR -If multiple sub-terms appear under one paragraph, they are separated under the -main term heading from each other by a pipe symbol. -.nf -  Paragraph containing main term, second term and sub-term. -  ={Main term: -      sub-term+2|second sub-term; -    Another term -   } - -  A paragraph that continues discussion of the first sub-term -.fi - - -.BR -The plus one in the example provided indicates the first sub-term spans one -additional paragraph. The logical structure of the resulting index would be: -.nf -  Main term, 1, -    sub-term, 1-3, -    second sub-term, 1, -  Another term, 1 -.fi - -.SH COMPOSITE DOCUMENTS MARKUP - - -.BR -It is possible to build a document by creating a master document that requires -other documents. The documents required may be complete documents that could be -generated independently, or they could be markup snippets, prepared so as to be -easily available to be placed within another text. If the calling document is a -master document (built from other documents), it should be named with the -suffix -.B .ssm -Within this document you would provide information on the other documents that -should be included within the text. These may be other documents that would be -processed in a regular way, or markup bits prepared only for inclusion within a -master document -.B .sst -regular markup file, or -.B .ssi -(insert/information) A secondary file of the composite document is built prior -to processing with the same prefix and the suffix -.B ._sst - -.BR -basic markup for importing a document into a master document -.nf -<< filename1.sst - -<< filename2.ssi -.fi - - -.BR -The form described above should be relied on. Within the -.I Vim -editor it results in the text thus linked becoming hyperlinked to the document -it is calling in which is convenient for editing. -.SH SUBSTITUTIONS - - -.BR - -.B markup example: -.nf -The current Debian is ${debian_stable} the next debian will be ${debian_testing} - -Configure substitution in _sisu/sisu_document_make - -make: -  substitute: /${debian_stable}/,'*{Wheezy}*' /${debian_testing}/,'*{Jessie}*' -.fi - - -.BR - -.B resulting output: - -.BR -The current -.B Debian -is -.B Jessie -the next debian will be -.B Stretch - -.BR -Configure substitution in _sisu/sisu_document_make -.SH SISU FILETYPES - - -.BR - -.B SiSU -has -.I plaintext -and binary filetypes, and can process either type of document. -.SH .SST .SSM .SSI MARKED UP PLAIN TEXT - -.TP -.B SiSU -documents are prepared as plain-text (utf-8) files with -.B SiSU -markup. They may make reference to and contain images (for example), which are -stored in the directory beneath them _sisu/image. 〔b¤SiSU -.I plaintext -markup files are of three types that may be distinguished by the file extension -used: regular text .sst; master documents, composite documents that incorporate -other text, which can be any regular text or text insert; and inserts the -contents of which are like regular text except these are marked .ssi and are -not processed. - -.BR - -.B SiSU -processing can be done directly against a sisu documents; which may be located -locally or on a remote server for which a url is provided. - -.BR - -.B SiSU -source markup can be shared with the command: - -.BR -  sisu -s [filename] -.SH SISU TEXT - REGULAR FILES (.SST) - - -.BR -The most common form of document in -.B SiSU, -see the section on -.B SiSU -markup. -.SH SISU MASTER FILES (.SSM) - - -.BR -Composite documents which incorporate other -.B SiSU -documents which may be either regular -.B SiSU -text .sst which may be generated independently, or inserts prepared solely for -the purpose of being incorporated into one or more master documents. - -.BR -The mechanism by which master files incorporate other documents is described as -one of the headings under under -.B SiSU -markup in the -.B SiSU -manual. - -.BR -Note: Master documents may be prepared in a similar way to regular documents, -and processing will occur normally if a .sst file is renamed .ssm without -requiring any other documents; the .ssm marker flags that the document may -contain other documents. - -.BR -Note: a secondary file of the composite document is built prior to processing -with the same prefix and the suffix ._sst -.SH SISU INSERT FILES (.SSI) - - -.BR -Inserts are documents prepared solely for the purpose of being incorporated -into one or more master documents. They resemble regular -.B SiSU -text files (.sst). Since sisu -5.5.0 (6.1.0) .ssi files can like .ssm files -include other .sst or .ssm files. .ssi files cannot be called by the sisu -processor directly and can only be incorporated in other documents. Making a -file a .ssi file is a quick and convenient way of breaking up a document that -is to be included in a master document, and flagging that the file to be -incorporated .ssi is not intended that the file should be processed on its own. -.SH SISUPOD, ZIPPED BINARY CONTAINER (SISUPOD.ZIP, .SSP) - - -.BR -A sisupod is a zipped -.B SiSU -text file or set of -.B SiSU -text files and any associated images that they contain (this will be extended -to include sound and multimedia-files) -.TP -.B SiSU -.I plaintext -files rely on a recognised directory structure to find contents such as images -associated with documents, but all images for example for all documents -contained in a directory are located in the sub-directory _sisu/image. Without -the ability to create a sisupod it can be inconvenient to manually identify all -other files associated with a document. A sisupod automatically bundles all -associated files with the document that is turned into a pod. - -.BR -The structure of the sisupod is such that it may for example contain a single -document and its associated images; a master document and its associated -documents and anything else; or the zipped contents of a whole directory of -prepared -.B SiSU -documents. - -.BR -The command to create a sisupod is: - -.BR -  sisu -S [filename] - -.BR -Alternatively, make a pod of the contents of a whole directory: - -.BR -  sisu -S - -.BR - -.B SiSU -processing can be done directly against a sisupod; which may be located locally -or on a remote server for which a url is provided. - -.BR -<http://www.sisudoc.org/sisu/sisu_commands> - -.BR -<http://www.sisudoc.org/sisu/sisu_manual> -.SH CONFIGURATION - -.SH CONFIGURATION FILES - -.SH CONFIG.YML - - -.BR - -.B SiSU -configration parameters are adjusted in the configuration file, which can be -used to override the defaults set. This includes such things as which directory -interim processing should be done in and where the generated output should be -placed. - -.BR -The -.B SiSU -configuration file is a yaml file, which means indentation is significant. - -.BR - -.B SiSU -resource configuration is determined by looking at the following files if they -exist: - -.BR -  ./_sisu/v7/sisurc.yml - -.BR -  ./_sisu/sisurc.yml - -.BR -  ~/.sisu/v7/sisurc.yml - -.BR -  ~/.sisu/sisurc.yml - -.BR -  /etc/sisu/v7/sisurc.yml - -.BR -  /etc/sisu/sisurc.yml - -.BR -The search is in the order listed, and the first one found is used. - -.BR -In the absence of instructions in any of these it falls back to the internal -program defaults. - -.BR -Configuration determines the output and processing directories and the database -access details. - -.BR -If -.B SiSU -is installed a sample sisurc.yml may be found in /etc/sisu/sisurc.yml -.SH SISU_DOCUMENT_MAKE - - -.BR -Most sisu document headers relate to metadata, the exception is the @make: -header which provides processing related information. The default contents of -the @make header may be set by placing them in a file sisu_document_make. - -.BR -The search order is as for resource configuration: - -.BR -  ./_sisu/v7/sisu_document_make - -.BR -  ./_sisu/sisu_document_make - -.BR -  ~/.sisu/v7/sisu_document_make - -.BR -  ~/.sisu/sisu_document_make - -.BR -  /etc/sisu/v7/sisu_document_make - -.BR -  /etc/sisu/sisu_document_make - -.BR -A sample sisu_document_make can be found in the _sisu/ directory under along -with the provided sisu markup samples. -.SH CSS - CASCADING STYLE SHEETS (FOR HTML, XHTML AND XML) - - -.BR -CSS files to modify the appearance of -.B SiSU -html, -.I XHTML -or -.I XML -may be placed in the configuration directory: ./_sisu/css ; ~/.sisu/css or; -/etc/sisu/css and these will be copied to the output directories with the -command sisu -CC. - -.BR -The basic CSS file for html output is html. css, placing a file of that name in -directory _sisu/css or equivalent will result in the default file of that name -being overwritten. - -.BR - -.I HTML: -html. css - -.BR - -.I XML -DOM: dom.css - -.BR - -.I XML -SAX: sax.css - -.BR - -.I XHTML: -xhtml. css - -.BR -The default homepage may use homepage.css or html. css - -.BR -Under consideration is to permit the placement of a CSS file with a different -name in directory _sisu/css directory or equivalent.[^12] -.SH ORGANISING CONTENT - DIRECTORY STRUCTURE AND MAPPING - - -.BR - -.B SiSU -v3 has new options for the source directory tree, and output directory -structures of which there are 3 alternatives. -.SH DOCUMENT SOURCE DIRECTORY - - -.BR -The document source directory is the directory in which sisu processing -commands are given. It contains the sisu source files (.sst .ssm .ssi), or (for -sisu v3 may contain) subdirectories with language codes which contain the sisu -source files, so all English files would go in subdirectory en/, French in fr/, -Spanish in es/ and so on. ISO 639-1 codes are used (as varied by po4a). A list -of available languages (and possible sub-directory names) can be obtained with -the command "sisu --help lang" The list of languages is limited to langagues -supported by XeTeX polyglosia. -.SH GENERAL DIRECTORIES - -.nf - ./subject_name/ - -% files stored at this level e.g. sisu_manual.sst or -% for sisu v3 may be under language sub-directories -% e.g. - - ./subject_name/en - - ./subject_name/fr - - ./subject_name/es - - ./subject_name/_sisu - - ./subject_name/_sisu/css - - ./subject_name/_sisu/image -.fi - -.SH DOCUMENT OUTPUT DIRECTORY STRUCTURES - -.SH OUTPUT DIRECTORY ROOT - - -.BR -The output directory root can be set in the sisurc.yml file. Under the root, -subdirectories are made for each directory in which a document set resides. If -you have a directory named poems or conventions, that directory will be created -under the output directory root and the output for all documents contained in -the directory of a particular name will be generated to subdirectories beneath -that directory (poem or conventions). A document will be placed in a -subdirectory of the same name as the document with the filetype identifier -stripped (.sst .ssm) - -.BR -The last part of a directory path, representing the sub-directory in which a -document set resides, is the directory name that will be used for the output -directory. This has implications for the organisation of document collections -as it could make sense to place documents of a particular subject, or type -within a directory identifying them. This grouping as suggested could be by -subject (sales_law, english_literature); or just as conveniently by some other -classification (X University). The mapping means it is also possible to place -in the same output directory documents that are for organisational purposes -kept separately, for example documents on a given subject of two different -institutions may be kept in two different directories of the same name, under a -directory named after each institution, and these would be output to the same -output directory. Skins could be associated with each institution on a -directory basis and resulting documents will take on the appropriate different -appearance. -.SH ALTERNATIVE OUTPUT STRUCTURES - - -.BR -There are 3 possibile output structures described as being, by language, by -filetype or by filename, the selection is made in sisurc.yml -.nf -#% output_dir_structure_by: language; filetype; or filename -output_dir_structure_by: language   #(language & filetype, preferred?) -#output_dir_structure_by: filetype -#output_dir_structure_by: filename  #(default, closest to original v1 & v2) -.fi - -.SH BY LANGUAGE - - -.BR -The by language directory structure places output files - -.BR -The by language directory structure separates output files by language code -(all files of a given language), and within the language directory by filetype. - -.BR -Its selection is configured in sisurc.yml - -.BR -output_dir_structure_by: language -.nf -    |-- en -    |-- epub -    |-- hashes -    |-- html -    | |-- viral_spiral.david_bollier -    | |-- manifest -    | |-- qrcode -    | |-- odt -    | |-- pdf -    | |-- sitemaps -    | |-- txt -    | |-- xhtml -    | `-- xml -    |-- po4a -    | `-- live-manual -    |     |-- po -    |     |-- fr -    |     `-- pot -    `-- _sisu -        |-- css -        |-- image -        |-- image_sys -> ../../_sisu/image_sys -        `-- xml -            |-- rnc -            |-- rng -            `-- xsd -.fi - - -.BR -#by: language subject_dir/en/manifest/filename.html -.SH BY FILETYPE - - -.BR -The by filetype directory structure separates output files by filetype, all -html files in one directory pdfs in another and so on. Filenames are given a -language extension. - -.BR -Its selection is configured in sisurc.yml - -.BR -output_dir_structure_by: filetype -.nf -    |-- epub -    |-- hashes -    |-- html -    |-- viral_spiral.david_bollier -    |-- manifest -    |-- qrcode -    |-- odt -    |-- pdf -    |-- po4a -    |-- live-manual -    |     |-- po -    |     |-- fr -    |     `-- pot -    |-- _sisu -    | |-- css -    | |-- image -    | |-- image_sys -> ../../_sisu/image_sys -    | `-- xml -    |     |-- rnc -    |     |-- rng -    |     `-- xsd -    |-- sitemaps -    |-- txt -    |-- xhtml -    `-- xml -.fi - - -.BR -#by: filetype subject_dir/html/filename/manifest.en.html -.SH BY FILENAME - - -.BR -The by filename directory structure places most output of a particular file -(the different filetypes) in a common directory. - -.BR -Its selection is configured in sisurc.yml - -.BR -output_dir_structure_by: filename -.nf -    |-- epub -    |-- po4a -    |-- live-manual -    |     |-- po -    |     |-- fr -    |     `-- pot -    |-- _sisu -    | |-- css -    | |-- image -    | |-- image_sys -> ../../_sisu/image_sys -    | `-- xml -    |     |-- rnc -    |     |-- rng -    |     `-- xsd -    |-- sitemaps -    |-- src -    |-- pod -    `-- viral_spiral.david_bollier -.fi - - -.BR -#by: filename subject_dir/filename/manifest.en.html -.SH REMOTE DIRECTORIES - -.nf - ./subject_name/ - -% containing sub_directories named after the generated files from which they are made - - ./subject_name/src - -% contains shared source files text and binary e.g. sisu_manual.sst and sisu_manual.sst.zip - - ./subject_name/_sisu - -% configuration file e.g. sisurc.yml - - ./subject_name/_sisu/skin - -% skins in various skin directories doc, dir, site, yml - - ./subject_name/_sisu/css - - ./subject_name/_sisu/image - -% images for documents contained in this directory - - ./subject_name/_sisu/mm -.fi - -.SH SISUPOD - -.nf - ./sisupod/ - -% files stored at this level e.g. sisu_manual.sst - - ./sisupod/_sisu - -% configuration file e.g. sisurc.yml - - ./sisupod/_sisu/skin - -% skins in various skin directories doc, dir, site, yml - - ./sisupod/_sisu/css - - ./sisupod/_sisu/image - -% images for documents contained in this directory - - ./sisupod/_sisu/mm -.fi - -.SH HOMEPAGES - - -.BR - -.B SiSU -is about the ability to auto-generate documents. Home pages are regarded as -custom built items, and are not created by -.B SiSU. -More accurately, -.B SiSU -has a default home page, which will not be appropriate for use with other -sites, and the means to provide your own home page instead in one of two ways -as part of a site's configuration, these being: - -.BR -1. through placing your home page and other custom built documents in the -subdirectory _sisu/home/ (this probably being the easier and more convenient -option) - -.BR -2. through providing what you want as the home page in a skin, - -.BR -Document sets are contained in directories, usually organised by site or -subject. Each directory can/should have its own homepage. See the section on -directory structure and organisation of content. -.SH HOME PAGE AND OTHER CUSTOM BUILT PAGES IN A SUB-DIRECTORY - - -.BR -Custom built pages, including the home page index.html may be placed within the -configuration directory _sisu/home/ in any of the locations that is searched -for the configuration directory, namely ./_sisu ; ~/_sisu ; /etc/sisu From -there they are copied to the root of the output directory with the command: - -.BR -  sisu -CC -.SH MARKUP AND OUTPUT EXAMPLES - -.SH MARKUP EXAMPLES - - -.BR -Current markup examples and document output samples are provided off -<http://sisudoc.org> or <http://www.jus.uio.no/sisu> and in the sisu --markup-sample package available off <http://git.sisudoc.org> - -.BR -For some documents hardly any markup at all is required at all, other than a -header, and an indication that the levels to be taken into account by the -program in generating its output are. -.SH SISU MARKUP SAMPLES - - -.BR -A few additional sample books prepared as sisu markup samples, output formats -to be generated using -.B SiSU -are contained in a separate package sisu -markup-samples. sisu -markup-samples -contains books (prepared using sisu markup), that were released by their -authors various licenses mostly different Creative Commons licences that do not -permit inclusion in the -.B Debian -Project as they have requirements that do not meet the -.B Debian -Free Software Guidelines for various reasons, most commonly that they require -that the original substantive text remain unchanged, and sometimes that the -works be used only non-commercially. - -.BR - -.I Accelerando, -Charles Stross (2005) -accelerando.charles_stross.sst - -.BR - -.I Alice's Adventures in Wonderland, -Lewis Carroll (1865) -alices_adventures_in_wonderland.lewis_carroll.sst - -.BR - -.I CONTENT, -Cory Doctorow (2008) -content.cory_doctorow.sst - -.BR - -.I Democratizing Innovation, -Eric von Hippel (2005) -democratizing_innovation.eric_von_hippel.sst - -.BR - -.I Down and Out in the Magic Kingdom, -Cory Doctorow (2003) -down_and_out_in_the_magic_kingdom.cory_doctorow.sst - -.BR - -.I For the Win, -Cory Doctorow (2010) -for_the_win.cory_doctorow.sst - -.BR - -.I Free as in Freedom - Richard Stallman's Crusade for Free Software, -Sam Williams (2002) -free_as_in_freedom.richard_stallman_crusade_for_free_software.sam_williams.sst - -.BR - -.I Free as in Freedom 2.0 - Richard Stallman and the Free Software Revolution, -Sam Williams (2002), Richard M. Stallman (2010) -free_as_in_freedom_2.richard_stallman_and_the_free_software_revolution.sam_williams.richard_stallman.sst - -.BR - -.I Free Culture - How Big Media Uses Technology and the Law to Lock Down -Culture and Control Creativity, -Lawrence Lessig (2004) -free_culture.lawrence_lessig.sst - -.BR - -.I Free For All - How Linux and the Free Software Movement Undercut the High -Tech Titans, -Peter Wayner (2002) -free_for_all.peter_wayner.sst - -.BR - -.I GNU GENERAL PUBLIC LICENSE v2, -Free Software Foundation (1991) -gpl2.fsf.sst - -.BR - -.I GNU GENERAL PUBLIC LICENSE v3, -Free Software Foundation (2007) -gpl3.fsf.sst - -.BR - -.I Gulliver's Travels, -Jonathan Swift (1726 / 1735) -gullivers_travels.jonathan_swift.sst - -.BR - -.I Little Brother, -Cory Doctorow (2008) -little_brother.cory_doctorow.sst - -.BR - -.I The Cathederal and the Bazaar, -Eric Raymond (2000) -the_cathedral_and_the_bazaar.eric_s_raymond.sst - -.BR - -.I The Public Domain - Enclosing the Commons of the Mind, -James Boyle (2008) -the_public_domain.james_boyle.sst - -.BR - -.I The Wealth of Networks - How Social Production Transforms Markets and -Freedom, -Yochai Benkler (2006) -the_wealth_of_networks.yochai_benkler.sst - -.BR - -.I Through the Looking Glass, -Lewis Carroll (1871) -through_the_looking_glass.lewis_carroll.sst - -.BR - -.I Two Bits - The Cultural Significance of Free Software, -Christopher Kelty (2008) -two_bits.christopher_kelty.sst - -.BR - -.I UN Contracts for International Sale of Goods, -UN (1980) -un_contracts_international_sale_of_goods_convention_1980.sst - -.BR - -.I Viral Spiral, -David Bollier (2008) -viral_spiral.david_bollier.sst -.SH SISU SEARCH - INTRODUCTION - - -.BR -Because the document structure of sites created is clearly defined, and the -text -.I object citation system -is available hypothetically at least, for all forms of output, it is possible -to search the sql database, and either read results from that database, or map -the results to the html or other output, which has richer text markup. - -.BR - -.B SiSU -can populate a relational sql type database with documents at an object level, -including objects numbers that are shared across different output types. Making -a document corpus searchable with that degree of granularity. Basically, your -match criteria is met by these documents and at these locations within each -document, which can be viewed within the database directly or in various output -formats. - -.BR - -.B SiSU -can populate an sql database (sqlite3 or postgresql) with documents made up of -their objects. It also can generate a cgi search form that can be used to query -the database. - -.BR -In order to use the built in search functionality you would take the following -steps. - -.BR -- use sisu to populate an sql database with with a sisu markup content - -.BR -  * sqlite3 should work out of the box - -.BR -  * postgresql may require some initial database configuration - -.BR -- provide a way to query the database, which sisu can assist with by - -.BR -  * generating a sample ruby cgi search form, required (sisu configuration -  recommended) - -.BR -  * adding a query field for this search form to be added to all html files -  (sisu configuration required) -.SH SQL - -.SH POPULATE THE DATABASE - - -.BR -TO populate the sql database, run sisu against a sisu markup file with one of -the following sets of flags -.nf -sisu --sqlite filename.sst -.fi - - -.BR -creates an sqlite3 database containing searchable content of just the sisu -markup document selected -.nf -sisu --sqlite --update filename.sst -.fi - - -.BR -creates an sqlite3 database containing searchable content of marked up -document(s) selected by the user from a common directory -.nf -sisu --pg --update filename.sst -.fi - - -.BR -fills a postgresql database with searchable content of marked up document(s) -selected by the user from a common directory - -.BR -For postgresql the first time the command is run in a given directory the user -will be prompted to create the requisite database, at the time of writing the -prompt sisu provides is as follows: -.nf -no connection with pg database established, you may need to run: -    createdb "SiSU.7a.current" -  after that don't forget to run: -    sisu --pg --createall -  before attempting to populate the database -.fi - - -.BR -The named database that sisu expects to find must exist and if necessary be -created using postgresql tools. If the database exist but the database tables -do not, sisu will attempt to create the tables it needs, the equivalent of the -requested sisu --pg --createall command. - -.BR -Once this is done, the sql database is populated and ready to be queried. -.SH SQL TYPE DATABASES - - -.BR - -.B SiSU -feeds sisu markup documents into sql type databases -.I PostgreSQL -[^13] and/or -.I SQLite -[^14] database together with information related to document structure. - -.BR -This is one of the more interesting output forms, as all the structural data of -the documents are retained (though can be ignored by the user of the database -should they so choose). All site texts/documents are (currently) streamed to -four tables: - -.BR -  * one containing semantic (and other) headers, including, title, author, -  subject, (the -  .I Dublin Core. -  ..); - -.BR -  * another the substantive texts by individual "paragraph" (or object) - along -  with structural information, each paragraph being identifiable by its -  paragraph number (if it has one which almost all of them do), and the -  substantive text of each paragraph quite naturally being searchable (both in -  formatted and clean text versions for searching); and - -.BR -  * a third containing endnotes cross-referenced back to the paragraph from -  which they are referenced (both in formatted and clean text versions for -  searching). - -.BR -  * a fourth table with a one to one relation with the headers table contains -  full text versions of output, eg. pdf, html, xml, and -  .I ascii. - -.BR -There is of course the possibility to add further structures. - -.BR -At this level -.B SiSU -loads a relational database with documents chunked into objects, their smallest -logical structurally constituent parts, as text objects, with their object -citation number and all other structural information needed to construct the -document. Text is stored (at this text object level) with and without -elementary markup tagging, the stripped version being so as to facilitate ease -of searching. - -.BR -Being able to search a relational database at an object level with the -.B SiSU -citation system is an effective way of locating content generated by -.B SiSU. -As individual text objects of a document stored (and indexed) together with -object numbers, and all versions of the document have the same numbering, -complex searches can be tailored to return just the locations of the search -results relevant for all available output formats, with live links to the -precise locations in the database or in html/xml documents; or, the structural -information provided makes it possible to search the full contents of the -database and have headings in which search content appears, or to search only -headings etc. (as the -.I Dublin Core -is incorporated it is easy to make use of that as well). -.SH POSTGRESQL - -.SH NAME - - -.BR - -.B SiSU -- Structured information, Serialized Units - a document publishing system, -postgresql dependency package -.SH DESCRIPTION - - -.BR -Information related to using postgresql with sisu (and related to the -sisu_postgresql dependency package, which is a dummy package to install -dependencies needed for -.B SiSU -to populate a postgresql database, this being part of -.B SiSU -- man sisu) . -.SH SYNOPSIS - - -.BR -  sisu -D [instruction] [filename/wildcard if required] - -.BR -  sisu -D --pg --[instruction] [filename/wildcard if required] -.SH COMMANDS - - -.BR -Mappings to two databases are provided by default, postgresql and sqlite, the -same commands are used within sisu to construct and populate databases however --d (lowercase) denotes sqlite and -D (uppercase) denotes postgresql, -alternatively --sqlite or --pgsql may be used - -.BR - -.B -D or --pgsql -may be used interchangeably. -.SH CREATE AND DESTROY DATABASE - -.TP -.B --pgsql --createall -initial step, creates required relations (tables, indexes) in existing -(postgresql) database (a database should be created manually and given the same -name as working directory, as requested) (rb.dbi) -.TP -.B sisu -D --createdb -creates database where no database existed before -.TP -.B sisu -D --create -creates database tables where no database tables existed before -.TP -.B sisu -D --Dropall -destroys database (including all its content)! kills data and drops tables, -indexes and database associated with a given directory (and directories of the -same name). -.TP -.B sisu -D --recreate -destroys existing database and builds a new empty database structure -.SH IMPORT AND REMOVE DOCUMENTS - -.TP -.B sisu -D --import -v [filename/wildcard] -populates database with the contents of the file. Imports documents(s) -specified to a postgresql database (at an object level). -.TP -.B sisu -D --update -v [filename/wildcard] -updates file contents in database -.TP -.B sisu -D --remove -v [filename/wildcard] -removes specified document from postgresql database. -.SH SQLITE - -.SH NAME - - -.BR - -.B SiSU -- Structured information, Serialized Units - a document publishing system. -.SH DESCRIPTION - - -.BR -Information related to using sqlite with sisu (and related to the sisu_sqlite -dependency package, which is a dummy package to install dependencies needed for -.B SiSU -to populate an sqlite database, this being part of -.B SiSU -- man sisu) . -.SH SYNOPSIS - - -.BR -  sisu -d [instruction] [filename/wildcard if required] - -.BR -  sisu -d --(sqlite|pg) --[instruction] [filename/wildcard if required] -.SH COMMANDS - - -.BR -Mappings to two databases are provided by default, postgresql and sqlite, the -same commands are used within sisu to construct and populate databases however --d (lowercase) denotes sqlite and -D (uppercase) denotes postgresql, -alternatively --sqlite or --pgsql may be used - -.SH CREATE AND DESTROY DATABASE - -.TP -.B --sqlite --createall -initial step, creates required relations (tables, indexes) in existing (sqlite) -database (a database should be created manually and given the same name as -working directory, as requested) (rb.dbi) -.TP -.B sisu -d --createdb -creates database where no database existed before -.TP -.B sisu -d --create -creates database tables where no database tables existed before -.TP -.B sisu -d --dropall -destroys database (including all its content)! kills data and drops tables, -indexes and database associated with a given directory (and directories of the -same name). -.TP -.B sisu -d --recreate -destroys existing database and builds a new empty database structure -.SH IMPORT AND REMOVE DOCUMENTS - -.TP -.B sisu -d --import -v [filename/wildcard] -populates database with the contents of the file. Imports documents(s) -specified to an sqlite database (at an object level). -.TP -.B sisu -d --update -v [filename/wildcard] -updates file contents in database -.TP -.B sisu -d --remove -v [filename/wildcard] -removes specified document from sqlite database. -.SH CGI SEARCH FORM - - -.BR -For the search form, which is a single search page - -.BR -- configure the search form - -.BR -- generate the sample search form with the sisu command, (this will be based on -the configuration settings and existing found sisu databases) - -.BR -For postgresql web content you may need to edit the search cgi script. Two -things to look out for are that the user is set as needed, and that the any -different databases that you wish to be able to query are listed. - -.BR -correctly, you may want www-data rather than your username. -.nf -@user='www-data' -.fi - - -.BR -- check the search form, copy it to the appropriate cgi directory and set the -correct permissions - -.BR -For a search form to appear on each html page, you need to: - -.BR -- rely on the above mentioned configuration of the search form - -.BR -- configure the html search form to be on - -.BR -- run the html command -.SH SETUP SEARCH FORM - - -.BR -You will need a web server, httpd with cgi enabled, and a postgresql database -to which you are able to create databases. - -.BR -Setup postgresql, make sure you are able to create and write to the database, -e.g.: -.nf -sudo su postgres -  createuser -d -a ralph -.fi - - -.BR -You then need to create the database that sisu will use, for sisu manual in the -directory manual/en for example, (when you try to populate a database that does -not exist sisu prompts as to whether it exists): -.nf -createdb SiSU.7a.manual -.fi - - -.BR - -.B SiSU -is then able to create the required tables that allow you to populate the -database with documents in the directory for which it has been created: -.nf -sisu --pg --createall -v -.fi - - -.BR -You can then start to populate the database, in this example with a single -document: -.nf -sisu --pg --update -v en/sisu_manual.ssm -.fi - - -.BR -To create a sample search form, from within the same directory run: -.nf -sisu --sample-search-form --db-pg -.fi - - -.BR -and copy the resulting cgi form to your cgi-bin directory - -.BR -A sample setup for nginx is provided that assumes data will be stored under -/srv/www and cgi scripts under /srv/cgi -.SH SEARCH - DATABASE FRONTEND SAMPLE, UTILISING DATABASE AND SISU FEATURES, -INCLUDING OBJECT CITATION NUMBERING (BACKEND CURRENTLY POSTGRESQL) - - -.BR -Sample search frontend <http://search.sisudoc.org> [^15] A small database and -sample query front-end (search from) that makes use of the citation system, .I -object citation numbering -to demonstrates functionality.[^16] - -.BR - -.B SiSU -can provide information on which documents are matched and at what locations -within each document the matches are found. These results are relevant across -all outputs using -.I object citation numbering, -which includes html, -.I XML, -.I EPUB, -.I LaTeX, -.I PDF -and indeed the -.I SQL -database. You can then refer to one of the other outputs or in the -.I SQL -database expand the text within the matched objects (paragraphs) in the -documents matched. - -.BR -Note you may set results either for documents matched and object number -locations within each matched document meeting the search criteria; or display -the names of the documents matched along with the objects (paragraphs) that -meet the search criteria.[^17] -.TP -.B sisu -F --webserv-webrick -builds a cgi web search frontend for the database created - -.BR -The following is feedback on the setup on a machine provided by the help -command: - -.BR -  sisu --help sql -.nf -Postgresql -  user:             ralph -  current db set:   SiSU_sisu -  port:             5432 -  dbi connect:      DBI:Pg:database=SiSU_sisu;port=5432 - -sqlite -  current db set:   /home/ralph/sisu_www/sisu/sisu_sqlite.db -  dbi connect       DBI:SQLite:/home/ralph/sisu_www/sisu/sisu_sqlite.db -.fi - -.BR -Note on databases built - -.BR -By default, [unless otherwise specified] databases are built on a directory -basis, from collections of documents within that directory. The name of the -directory you choose to work from is used as the database name, i.e. if you are -working in a directory called /home/ralph/ebook the database SiSU_ebook is -used. [otherwise a manual mapping for the collection is necessary] - -.SH SEARCH FORM - -.TP -.B sisu -F -generates a sample search form, which must be copied to the web-server cgi -directory -.TP -.B sisu -F --webserv-webrick -generates a sample search form for use with the webrick server, which must be -copied to the web-server cgi directory -.TP -.B sisu -W -starts the webrick server which should be available wherever sisu is properly -installed - -.BR -The generated search form must be copied manually to the webserver directory as -instructed -.SH SISU_WEBRICK - -.SH NAME - - -.BR - -.B SiSU -- Structured information, Serialized Units - a document publishing system -.SH SYNOPSIS - - -.BR -sisu_webrick [port] - -.BR -or - -.BR -sisu -W [port] -.SH DESCRIPTION - - -.BR -sisu_webrick is part of -.B SiSU -(man sisu) sisu_webrick starts -.B Ruby -' s Webrick web-server and points it to the directories to which -.B SiSU -output is written, providing a list of these directories (assuming -.B SiSU -is in use and they exist). - -.BR -The default port for sisu_webrick is set to 8081, this may be modified in the -yaml file: ~/.sisu/sisurc.yml a sample of which is provided as -/etc/sisu/sisurc.yml (or in the equivalent directory on your system). -.SH SUMMARY OF MAN PAGE - - -.BR -sisu_webrick, may be started on it's own with the command: sisu_webrick [port] -or using the sisu command with the -W flag: sisu -W [port] - -.BR -where no port is given and settings are unchanged the default port is 8081 -.SH DOCUMENT PROCESSING COMMAND FLAGS - - -.BR -sisu -W [port] starts -.B Ruby -Webrick web-server, serving -.B SiSU -output directories, on the port provided, or if no port is provided and the -defaults have not been changed in ~/.sisu/sisurc.yaml then on port 8081 -.SH SUMMARY OF FEATURES - - -.BR -- sparse/minimal markup (clean utf-8 source texts). Documents are prepared in a -single -.I UTF-8 -file using a minimalistic mnemonic syntax. Typical literature, documents like -"War and Peace" require almost no markup, and most of the headers are optional. - -.BR -- markup is easily readable/parsable by the human eye, (basic markup is simpler -and more sparse than the most basic -.I HTML -) , [this may also be converted to -.I XML -representations of the same input/source document]. - -.BR -- markup defines document structure (this may be done once in a header -pattern-match description, or for heading levels individually); basic text -attributes (bold, italics, underscore, strike-through etc.) as required; and -semantic information related to the document (header information, extended -beyond the Dublin core and easily further extended as required); the headers -may also contain processing instructions. -.B SiSU -markup is primarily an abstraction of document structure and document metadata -to permit taking advantage of the basic strengths of existing alternative -practical standard ways of representing documents [be that browser viewing, -paper publication, sql search etc.] (html, epub, xml, odf, latex, pdf, sql) - -.BR -- for output produces reasonably elegant output of established industry and -institutionally accepted open standard formats.[3] takes advantage of the -different strengths of various standard formats for representing documents, -amongst the output formats currently supported are: - -.BR -* -.I HTML -- both as a single scrollable text and a segmented document - -.BR -* -.I XHTML - -.BR -* -.I EPUB - -.BR -* -.I XML -- both in sax and dom style xml structures for further development as required - -.BR -* -.I ODT -- Open Document Format text, the iso standard for document storage - -.BR -* -.I LaTeX -- used to generate pdf - -.BR -* -.I PDF -(via -.I LaTeX -) - -.BR -* -.I SQL -- population of an sql database ( -.I PostgreSQL -or -.I SQLite -) , (at the same object level that is used to cite text within a document) - -.BR -Also produces: concordance files; document content certificates (md5 or sha256 -digests of headings, paragraphs, images etc.) and html manifests (and sitemaps -of content). (b) takes advantage of the strengths implicit in these very -different output types, (e.g. PDFs produced using typesetting of -.I LaTeX, -databases populated with documents at an individual object/paragraph level, -making possible -.I granular search -(and related possibilities)) - -.BR -- ensuring content can be cited in a meaningful way regardless of selected -output format. Online publishing (and publishing in multiple document formats) -lacks a useful way of citing text internally within documents (important to -academics generally and to lawyers) as page numbers are meaningless across -browsers and formats. sisu seeks to provide a common way of pinpoint the text -within a document, (which can be utilized for citation and by search engines). -The outputs share a common numbering system that is meaningful (to man and -machine) across all digital outputs whether paper, screen, or database -oriented, (pdf, -.I HTML, -.I EPUB, -xml, sqlite, postgresql) , this numbering system can be used to reference -content. - -.BR -- Granular search within documents. -.I SQL -databases are populated at an object level (roughly headings, paragraphs, -verse, tables) and become searchable with that degree of granularity, the -output information provides the object/paragraph numbers which are relevant -across all generated outputs; it is also possible to look at just the matching -paragraphs of the documents in the database; [output indexing also work well -with search indexing tools like hyperestraier]. - -.BR -- long term maintainability of document collections in a world of changing -formats, having a very sparsely marked-up source document base. there is a -considerable degree of future-proofing, output representations are -"upgradeable", and new document formats may be added. e.g. addition of odf -(open document text) module in 2006, epub in 2009 and in future html5 output -sometime in future, without modification of existing prepared texts - -.BR -* -.I SQL -search aside, documents are generated as required and static once generated. - -.BR -- documents produced are static files, and may be batch processed, this needs -to be done only once but may be repeated for various reasons as desired -(updated content, addition of new output formats, updated technology document -presentations/representations) - -.BR -- document source ( -.I plaintext -utf-8) if shared on the net may be used as input and processed locally to -produce the different document outputs - -.BR -- document source may be bundled together (automatically) with associated -documents (multiple language versions or master document with inclusions) and -images and sent as a zip file called a sisupod, if shared on the net these too -may be processed locally to produce the desired document outputs - -.BR -- generated document outputs may automatically be posted to remote sites. - -.BR -- for basic document generation, the only software dependency is -.B Ruby, -and a few standard Unix tools (this covers -.I plaintext, -.I HTML, -.I EPUB, -.I XML, -.I ODF, -.I LaTeX -) . To use a database you of course need that, and to convert the -.I LaTeX -generated to pdf, a latex processor like tetex or texlive. - -.BR -- as a developers tool it is flexible and extensible - -.BR -Syntax highlighting for -.B SiSU -markup is available for a number of text editors. - -.BR - -.B SiSU -is less about document layout than about finding a way with little markup to be -able to construct an abstract representation of a document that makes it -possible to produce multiple representations of it which may be rather -different from each other and used for different purposes, whether layout and -publishing, or search of content - -.BR -i.e. to be able to take advantage from this minimal preparation starting point -of some of the strengths of rather different established ways of representing -documents for different purposes, whether for search (relational database, or -indexed flat files generated for that purpose whether of complete documents, or -say of files made up of objects), online viewing (e.g. html, xml, pdf) , or -paper publication (e.g. pdf) ... - -.BR -the solution arrived at is by extracting structural information about the -document (about headings within the document) and by tracking objects (which -are serialized and also given hash values) in the manner described. It makes -possible representations that are quite different from those offered at -present. For example objects could be saved individually and identified by -their hashes, with an index of how the objects relate to each other to form a -document. -.TP -.BI *1. -square brackets - -.BR -.TP -.BI *2. -square brackets - -.BR -.TP -.BI +1. -square brackets - -.BR -.TP -.BI 1. -<http://www.jus.uio.no/sisu/man/> - -.BR -.TP -.BI 2. -<http://www.jus.uio.no/sisu/man/sisu.1.html> - -.BR -.TP -.BI 3. -From sometime after SiSU 0.58 it should be possible to describe SiSU markup -using SiSU, which though not an original design goal is useful. - -.BR -.TP -.BI 4. -files should be prepared using UTF-8 character encoding - -.BR -.TP -.BI 5. -a footnote or endnote - -.BR -.TP -.BI 6. -self contained endnote marker & endnote in one - -.BR -.TP -.BI *. -unnumbered asterisk footnote/endnote, insert multiple asterisks if required - -.BR -.TP -.BI **. -another unnumbered asterisk footnote/endnote - -.BR -.TP -.BI *3. -editors notes, numbered asterisk footnote/endnote series - -.BR -.TP -.BI +2. -editors notes, numbered plus symbol footnote/endnote series - -.BR -.TP -.BI 7. -<http://www.sisudoc.org/> - -.BR -.TP -.BI 8. -<http://www.ruby-lang.org/en/> - -.BR -.TP -.BI 9. -Table from the Wealth of Networks by Yochai Benkler -<http://www.jus.uio.no/sisu/the_wealth_of_networks.yochai_benkler> - -.BR -.TP -.BI 10. -for which you may alternatively use the full form author: title: and year: - -.BR -.TP -.BI 11. -Quixote and Panza, Taming Windmills (1605), pp 1000 - 1001 also, Benkler, Wealth of Networks (2006), p 1 - -.BR -.TP -.BI 12. -SiSU has worked this way in the past, though this was dropped as it was -thought the complexity outweighed the flexibility, however, the balance was -rather fine and this behaviour could be reinstated. - -.BR -.TP -.BI 13. -<http://www.postgresql.org/> <http://advocacy.postgresql.org/> -<http://en.wikipedia.org/wiki/Postgresql> - -.BR -.TP -.BI 14. -<http://www.hwaci.com/sw/sqlite/> <http://en.wikipedia.org/wiki/Sqlite> - -.BR -.TP -.BI 15. -<http://search.sisudoc.org> - -.BR -.TP -.BI 16. -(which could be extended further with current back-end). As regards scaling -of the database, it is as scalable as the database (here Postgresql) and -hardware allow. - -.BR -.TP -.BI 17. -of this feature when demonstrated to an IBM software innovations evaluator -in 2004 he said to paraphrase: this could be of interest to us. We have large -document management systems, you can search hundreds of thousands of documents -and we can tell you which documents meet your search criteria, but there is no -way we can tell you without opening each document where within each your -matches are found. - -.BR - -.TP -.SH SEE ALSO -       sisu(1), -       sisu-epub(1), -       sisu-harvest(1), -       sisu-html(1), -       sisu-odf(1), -       sisu-pdf(1), -       sisu-pg(1), -       sisu-sqlite(1), -       sisu-txt(1). -       sisu_vim(7) -.TP -.SH HOMEPAGE -       More information about SiSU can be found at <http://www.sisudoc.org/> or <http://www.jus.uio.no/sisu/> -.TP -.SH SOURCE -       <http://git.sisudoc.org/> -.TP -.SH AUTHOR -       SiSU is written by Ralph Amissah <ralph@amissah.com> -#+END_SRC diff --git a/org/spine_info.org b/org/spine_info.org index 3dc942c..798836e 100644 --- a/org/spine_info.org +++ b/org/spine_info.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -14,6 +15,9 @@  #+PROPERTY:    header-args+ :cache no  #+PROPERTY:    header-args+ :padline no +[[./spine.org][spine.org]]  [[../org/][org/]] +[[./spine_build_scaffold.org][spine_build_scaffold.org]] +  * README  #+BEGIN_SRC txt  :NO-tangle "../README" @@ -142,7 +146,6 @@ project_name:  Spine, Doc Reform    - Hompages:      [http://www.sisudoc.org] -  #+END_SRC  #+BEGIN_SRC txt diff --git a/org/util_cgi_d_sqlite_search.org b/org/util_cgi_d_sqlite_search.org index 86242f4..e2f3cfd 100644 --- a/org/util_cgi_d_sqlite_search.org +++ b/org/util_cgi_d_sqlite_search.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -27,13 +28,30 @@ dub --force --compiler=ldc2 && sudo cp -v cgi-bin/spine-search /usr/lib/cgi-bin/  <<cgi_sqlite_head>>  <<cgi_sqlite_imports>>  void cgi_function_intro(Cgi cgi) { -  <<cgi_sqlite_initialize>> +  <<cgi_sqlite_initialize_0>> +  <<cgi_sqlite_initialize_1>> +  <<cgi_sqlite_initialize_2>> +  <<cgi_sqlite_initialize_3>> +  <<cgi_sqlite_initialize_4>> +  <<cgi_sqlite_initialize_5>> +  <<cgi_sqlite_initialize_6>> +  <<cgi_sqlite_initialize_7>> +  <<cgi_sqlite_initialize_8>> +  <<cgi_sqlite_initialize_9>> +  <<cgi_sqlite_initialize_10>>  <<cgi_sqlite_header>>  <<cgi_sqlite_table>> -<<cgi_sqlite_form>> +<<cgi_sqlite_form_0>> +<<cgi_sqlite_form_1>> +<<cgi_sqlite_form_2>> +<<cgi_sqlite_form_3>> +<<cgi_sqlite_form_4>> +<<cgi_sqlite_form_5>>    <<cgi_sqlite_write>>    <<cgi_sqlite_set_db>>  <<cgi_sqlite_select_statement_0>> +<<cgi_sqlite_select_statement_1>> +<<cgi_sqlite_select_statement_2>>    <<cgi_sqlite_db_close>>  <<cgi_sqlite_db_tail>>  } @@ -65,7 +83,7 @@ import std.process : environment;  ** void main  *** initialize -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_0  #+BEGIN_SRC d  string header;  string table; @@ -74,7 +92,7 @@ string form;  **** config -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_1  #+BEGIN_SRC d  struct Config {    string http_request_type; @@ -106,7 +124,7 @@ conf.request_method       = environment.get("REQUEST_METHOD",        "POST");  **** cgi val -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_2  #+BEGIN_SRC d  struct CGI_val {    string db_selected      = ""; @@ -128,7 +146,7 @@ cv.db_selected = "spine.search.db"; // config, set db name  **** text fields  ***** open -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_3  #+BEGIN_SRC d  auto text_fields() {    string canned_query_str = environment.get("QUERY_STRING", ""); @@ -151,7 +169,7 @@ auto text_fields() {  ***** rgx -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_4  #+BEGIN_SRC d    static struct Rgx {      // static canned_query   = ctRegex!(`\A(?P<matched>.+)\Z`,                            "m"); @@ -187,7 +205,7 @@ auto text_fields() {  ***** searchfields -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_5  #+BEGIN_SRC d    struct searchFields {      string canned_query      = ""; // GET  canned_query     == cq @@ -231,7 +249,7 @@ auto text_fields() {  ***** env  ****** POST -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_6  #+BEGIN_SRC d    if (environment.get("REQUEST_METHOD", "POST") == "POST") {      if ("sf" in cgi.post) { @@ -383,7 +401,7 @@ auto text_fields() {  ****** GET -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_7  #+BEGIN_SRC d    } else if (environment.get("REQUEST_METHOD", "POST") == "GET") {      got.canned_query = environment.get("QUERY_STRING", ""); @@ -495,7 +513,7 @@ auto text_fields() {  ***** tail -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_8  #+BEGIN_SRC d  }  auto tf = text_fields; // @@ -503,7 +521,7 @@ auto tf = text_fields; //  **** SQL select -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_9  #+BEGIN_SRC d  struct SQL_select {    string the_body         = ""; @@ -514,7 +532,7 @@ auto sql_select = SQL_select();  **** misc -#+NAME: cgi_sqlite_initialize +#+NAME: cgi_sqlite_initialize_10  #+BEGIN_SRC d  string base                  ; // = "";  string tip                   ; // = ""; @@ -683,7 +701,7 @@ string previous_next () {  *** cgi html form -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_0  #+BEGIN_SRC d    {      string post_value(string field_name, string type="box", string set="on") { @@ -726,7 +744,7 @@ string previous_next () {  **** canned search -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_1  #+BEGIN_SRC d      string the_can(string fv) {        string show_the_can = post_value("url"); @@ -764,7 +782,7 @@ string previous_next () {  **** provide tip -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_2  #+BEGIN_SRC d      string provide_tip() {        string searched_tip = post_value("se"); @@ -801,7 +819,7 @@ string previous_next () {  **** the form  ***** form html -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_3  #+BEGIN_SRC d      form = format(q"┃  <form action="%s" id="SubmitForm" method="post" accept-charset="UTF-8"> @@ -846,7 +864,7 @@ string previous_next () {  ***** form values -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_4  #+BEGIN_SRC d        "spine-search",        (post_value("ec") == "checked") ? post_value("sf", "field") : "", @@ -870,7 +888,7 @@ string previous_next () {  **** set value (debug) -#+NAME: cgi_sqlite_form +#+NAME: cgi_sqlite_form_5  #+BEGIN_SRC d      {        string set_value(string field_name, string default_val) { @@ -999,7 +1017,7 @@ auto db = Database(conf.db_path ~ cv.db_selected);  **** db select statement  ***** the body -#+NAME: cgi_sqlite_select_statement_0 +#+NAME: cgi_sqlite_select_statement_1  #+BEGIN_SRC d        sql_select.the_body ~= format(q"┃  SELECT @@ -1042,7 +1060,7 @@ LIMIT %s OFFSET %s  ***** html write selected  ****** ocn index -#+NAME: cgi_sqlite_select_statement_0 +#+NAME: cgi_sqlite_select_statement_2  #+BEGIN_SRC d        (cv.checked_sql)        ? cgi.write(previous_next ~ "<hr><font size=\"2\" color=\"#666666\">" ~ sql_select.the_body.split("\n  ").join(" ").split("\n").join("<br>") ~ "</font>\n") diff --git a/org/util_cgi_rb_fcgi_sqlite_search.org b/org/util_cgi_rb_fcgi_sqlite_search.org index 124ac25..d10c163 100644 --- a/org/util_cgi_rb_fcgi_sqlite_search.org +++ b/org/util_cgi_rb_fcgi_sqlite_search.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/util_spine_markup_conversion_from_sisu.org b/org/util_spine_markup_conversion_from_sisu.org index 21a5ffb..4204560 100644 --- a/org/util_spine_markup_conversion_from_sisu.org +++ b/org/util_spine_markup_conversion_from_sisu.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no @@ -207,7 +208,9 @@ if (endnotes.length == endnote_ref_count) {  void main(string[] args) {    <<from_sisu_rb_init>>    <<from_sisu_rb_body_format>> -  <<from_sisu_rb_header_format>> +  <<from_sisu_rb_header_format_0>> +  <<from_sisu_rb_header_format_1>> +  <<from_sisu_rb_header_format_2>>    foreach(arg; args[1..$]) {      if (        !(arg.match(regex(r"--\w+"))) @@ -310,7 +313,7 @@ string format_body_string(string s) {  *** header format  **** format header string -#+NAME: from_sisu_rb_header_format +#+NAME: from_sisu_rb_header_format_0  #+BEGIN_SRC d  string format_header_string(string s) {    string o; @@ -324,7 +327,7 @@ string format_header_string(string s) {  **** format main header -#+NAME: from_sisu_rb_header_format +#+NAME: from_sisu_rb_header_format_1  #+BEGIN_SRC d  string format_main_header(string hm, string hs = "", string c = "") {    string o; @@ -341,7 +344,7 @@ string format_main_header(string hm, string hs = "", string c = "") {  **** format sub header -#+NAME: from_sisu_rb_header_format +#+NAME: from_sisu_rb_header_format_2  #+BEGIN_SRC d  string format_sub_header(string hs, string c) {    string o; diff --git a/org/util_spine_syntax_highlighting_emacs.org b/org/util_spine_syntax_highlighting_emacs.org index 0007e48..e161b8f 100644 --- a/org/util_spine_syntax_highlighting_emacs.org +++ b/org/util_spine_syntax_highlighting_emacs.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/org/util_spine_syntax_highlighting_vim.org b/org/util_spine_syntax_highlighting_vim.org index 137d734..2c4f131 100644 --- a/org/util_spine_syntax_highlighting_vim.org +++ b/org/util_spine_syntax_highlighting_vim.org @@ -7,6 +7,7 @@  #+COPYRIGHT:   Copyright (C) 2015 - 2020 Ralph Amissah  #+LANGUAGE:    en  #+STARTUP:     content hideblocks hidestars noindent entitiespretty +#+OPTIONS:     H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t  #+PROPERTY:    header-args  :exports code  #+PROPERTY:    header-args+ :noweb yes  #+PROPERTY:    header-args+ :eval no diff --git a/src/doc_reform/io_out/epub3.d b/src/doc_reform/io_out/epub3.d index 14c328b..f435418 100644 --- a/src/doc_reform/io_out/epub3.d +++ b/src/doc_reform/io_out/epub3.d @@ -295,7 +295,7 @@ template outputEPub3() {    </ncx>┃");      return toc;    } -   +    @system void outputEPub3(D,I)(      const D    doc_abstraction,            I    doc_matters, @@ -809,5 +809,5 @@ template outputEPub3() {        }      }    } -   +  } diff --git a/src/doc_reform/io_out/html.d b/src/doc_reform/io_out/html.d index 6a15614..e898bb8 100644 --- a/src/doc_reform/io_out/html.d +++ b/src/doc_reform/io_out/html.d @@ -510,7 +510,7 @@ template outputHTML() {      M    doc_matters,    ) {      { /+ (copy html images) +/ -   +        auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language);        if (!exists(pth_html.image)) {          pth_html.image.mkdirRecurse; diff --git a/src/doc_reform/io_out/odt.d b/src/doc_reform/io_out/odt.d index d3377dc..e12f93f 100644 --- a/src/doc_reform/io_out/odt.d +++ b/src/doc_reform/io_out/odt.d @@ -839,7 +839,7 @@ template outputODT() {      }      return doc_odt;    } -   +    @safe string odt_tail() {      string _odt_tail = format(q"┃<text:p text:style-name="P_normal">spine: <<text:a xl:type="simple" xl:href="http://www.doc_reform.org">www.doc_reform.org</text:a>> and <<text:a xl:type="simple" xl:href="http://www.sisudoc.org">www.sisudoc.org</text:a>></text:p>    </office:text></office:body></office:document-content>┃",); @@ -2038,7 +2038,7 @@ template outputODT() {        pth_odt.manifest_rdf("fs"); /+ (manifest.rdf) +/        pth_odt.settings_xml("fs"); /+ (settings.xml) +/        pth_odt.styles_xml("fs");   /+ (styles_xml) +/ -   +        pth_odt.content_xml("fs");        pth_odt.manifest_xml("fs");        pth_odt.meta_xml("fs"); diff --git a/src/doc_reform/io_out/source_pod.d b/src/doc_reform/io_out/source_pod.d index 5a0fd47..36a86e2 100644 --- a/src/doc_reform/io_out/source_pod.d +++ b/src/doc_reform/io_out/source_pod.d @@ -371,7 +371,7 @@ template spinePod() {            // Handle errors          }        } -       +      } catch (ErrnoException ex) {        // Handle error      } diff --git a/src/doc_reform/meta/conf_make_meta_yaml.d b/src/doc_reform/meta/conf_make_meta_yaml.d index 1f22dc8..4d1fdb1 100644 --- a/src/doc_reform/meta/conf_make_meta_yaml.d +++ b/src/doc_reform/meta/conf_make_meta_yaml.d @@ -180,7 +180,7 @@ template contentYAMLtoSpineStruct() {        _struct_composite.make.substitute               = _mk.substitute(_struct_composite.make_str.substitute);        _struct_composite.make.texpdf_font              = _mk.texpdf_font(_struct_composite.make_str.texpdf_font);      } -     +      /+ conf ------------------------------------------------------------------- +/      if ("webserv" in _yaml        && _yaml["webserv"].type.sequence diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index bde1a5c..859acc5 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -2422,7 +2422,7 @@ template docAbstraction() {      dom_structure_markedup_tags_status_buffer   = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];      dom_structure_collapsed_tags_status         = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];      dom_structure_collapsed_tags_status_buffer  = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -     +      @safe auto doc_has() {        struct DocHas_ {          uint inline_links() { | 
