diff options
Diffstat (limited to 'org')
31 files changed, 1412 insertions, 5285 deletions
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 |