/+ object setter ao_object_setter.d +/ template ObjectSetter() { /+ structs +/ struct HeadingAttrib { int lev = 9; // use of enum should make this redundant, remove int lev_markup_number = 9; int lev_collapsed_number = 9; } struct ParaAttrib { int indent_first = 0; int indent_second = 0; bool bullet = false; } struct BlockAttrib { } struct Comment { // no .attrib and no .obj_cite_number } struct Node { int ocn = 0; int parent_lev = 0; int parent_ocn = 0; string node = ""; } struct ObjComposite { // size_t id; string use = ""; string of = ""; string is_a = ""; string object = ""; string obj_cite_number = ""; // not used for calculations? output only? else int HeadingAttrib heading_attrib; ParaAttrib para_attrib; BlockAttrib block_attrib; Node node_structure; } struct ObjCompositeArr { ObjComposite[] oca; } /+ structs setter +/ struct ObjectAbstractSet { import std.conv : to; auto contents_comment(in string object) { ObjComposite object_set; object_set.use = "comment"; object_set.of = "comment"; object_set.is_a = "comment"; object_set.object = object; return object_set; } auto contents_heading( in string object, in string attrib, in int obj_cite_number, in int lev_markup_number, in int lev_collapsed_number, ) { ObjComposite object_set; object_set.use = "content"; object_set.of = "para"; object_set.is_a = "heading"; object_set.object = object; object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); object_set.heading_attrib.lev_markup_number = lev_markup_number; object_set.heading_attrib.lev_collapsed_number = lev_collapsed_number; // object_set.node_structure.node = node; return object_set; } auto contents_para( in string is_a, in string object, in string attrib, in int obj_cite_number, in string[string] indent, in bool bullet ) { ObjComposite object_set; object_set.use = "content"; object_set.of = "para"; object_set.is_a = "para"; object_set.object = object; object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); object_set.para_attrib.indent_first = 0; // indent["first"]; object_set.para_attrib.indent_second = 0; // indent["second"]; object_set.para_attrib.bullet = false; // object_set.node_structure.node = node; return object_set; } auto contents_block( in string type, in string object, in string attrib, in int obj_cite_number ) { ObjComposite object_set; object_set.use = "content"; object_set.of = "block"; object_set.is_a = type; object_set.object = object; object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); // object_set.node_structure.node = node; return object_set; } auto contents_block_obj_cite_number_string( in string type, in string object, in string obj_cite_number, in string node ) { ObjComposite object_set; object_set.use = "content"; object_set.of = "block"; object_set.is_a = type; object_set.object = object; object_set.obj_cite_number = obj_cite_number; object_set.node_structure.node = node; return object_set; } } }