/+ - Name: Spine, Doc Reform [a part of] - Description: documents, structuring, processing, publishing, search - static content generator - Author: Ralph Amissah [ralph.amissah@gmail.com] - Copyright: (C) 2015 - 2023 Ralph Amissah, All Rights Reserved. - License: AGPL 3 or later: Spine (SiSU), a framework for document structuring, publishing and search Copyright (C) Ralph Amissah This program is free software: you can redistribute it and/or modify it under the terms of the GNU AFERO General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see [https://www.gnu.org/licenses/]. If you have Internet connection, the latest version of the AGPL should be available at these locations: [https://www.fsf.org/licensing/licenses/agpl.html] [https://www.gnu.org/licenses/agpl.html] - Spine (by Doc Reform, related to SiSU) uses standard: - docReform markup syntax - standard SiSU markup syntax with modified headers and minor modifications - docReform object numbering - standard SiSU object citation numbering & system - Homepages: [https://www.doc_reform.org] [https://www.sisudoc.org] - Git [https://git.sisudoc.org/projects/?p=software/spine.git;a=summary] +/ /++ object setter: setting of sisu objects for downstream processing metadoc_object_setter.d +/ module doc_reform.meta.metadoc_object_setter; template ObjectSetter() { /+ structs +/ struct DocObj_MetaInfo_ { string is_of_part = ""; // frontmatter, body, backmatter string is_of_section = ""; // toc, body, glossary, biography, book index, blurb string is_of_type = ""; // para, block ? string is_a = ""; // heading, para, table, code block, group, verse/poem ... alias of_part = is_of_part; alias of_section = is_of_section; alias is_of = is_of_type; string attrib = ""; string lang = ""; // blocks: group, block, quote; not codeblock; string syntax = ""; // codeblock only /+ o_n +/ int o_n_substantive = 0; int o_n_non_substantive = 0; int o_n_glossary = 0; int o_n_bibliography = 0; int o_n_book_index = 0; int o_n_blurb = 0; @safe string object_number_substantive() const @property { return (o_n_substantive == 0) ? "" : o_n_substantive.to!string; } @safe string object_number_non_substantive() const @property { return (o_n_non_substantive == 0) ? "" : o_n_non_substantive.to!string; } @safe string object_number_glossary() const @property { return (o_n_glossary == 0) ? "" : o_n_glossary.to!string; } @safe string object_number_bibliography() const @property { return (o_n_bibliography == 0) ? "" : o_n_bibliography.to!string; } @safe string object_number_book_index() const @property { return (o_n_book_index == 0) ? "" : o_n_book_index.to!string; } @safe string object_number_blurb() const @property { return (o_n_blurb == 0) ? "" : o_n_blurb.to!string; } bool object_number_off = false; bool visible_object_number = false; int object_number_type = 0; // { ocn, non, bkidx } /+ node +/ string[string][string] node; int ocn = 0; string identifier = ""; @safe string object_number() const @property { return (ocn == 0) ? "" : ocn.to!string; } int o_n_type = 0; int heading_lev_markup = 9; int heading_lev_collapsed = 9; @safe string marked_up_level() const @property { string _out; switch (heading_lev_markup) { case 0 : _out = "A"; break; case 1 : _out = "B"; break; case 2 : _out = "C"; break; case 3 : _out = "D"; break; case 4 : _out = "1"; break; case 5 : _out = "2"; break; case 6 : _out = "3"; break; case 7 : _out = "4"; break; default : _out = ""; break; // "9"; } return _out; } bool dummy_heading = false; int[] markedup_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0,]; int[] collapsed_ancestors = [ 0, 0, 0, 0, 0, 0, 0, 0,]; int[] dom_structure_markedup_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,]; int[] dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,]; int parent_lev_markup = 0; int parent_ocn = 0; int last_decendant_ocn = 0; } struct DocObj_TxtAttrib_ { int indent_base = 0; int indent_hang = 0; bool bullet = false; string language = ""; } struct DocObj_Has_ { bool inline_links = false; bool inline_notes_reg = false; bool inline_notes_star = false; bool images = false; bool image_without_dimensions = false; } struct DocObj_Table_ { int number_of_columns = 0; double[] column_widths = []; string[] column_aligns = []; bool heading = false; bool walls = false; } struct DocObj_CodeBlock_ { string syntax = ""; bool linenumbers = false; } struct DocObj_Stow_ { string[] link = []; } struct DocObj_Pointer_ { int doc_object = 0; int html_segnames = 0; int heading = 0; } struct DocObj_Tags_ { string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ]; string anchor_tag_html = ""; string in_segment_html = ""; string segment_anchor_tag_epub = ""; string html_segment_anchor_tag_is = ""; string epub_segment_anchor_tag_is = ""; string heading_lev_anchor_tag = ""; string segname_prev = ""; string segname_next = ""; string[] lev4_subtoc = []; string[] anchor_tags = []; } struct ObjGenericComposite { string text = ""; DocObj_MetaInfo_ metainfo; DocObj_TxtAttrib_ attrib; DocObj_Tags_ tags; DocObj_Has_ has; DocObj_Table_ table; DocObj_CodeBlock_ code_block; DocObj_Stow_ stow; DocObj_Pointer_ ptr; } struct TheObjects { ObjGenericComposite[] oca; } }