#+TITLE: sdp object setter
#+AUTHOR: Ralph Amissah
#+EMAIL: ralph.amissah@gmail.com
#+STARTUP: indent
#+LANGUAGE: en
#+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t
#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
#+OPTIONS: author:nil email:nil creator:nil timestamp:nil
#+PROPERTY: header-args :padline no :exports code :noweb yes
#+EXPORT_SELECT_TAGS: export
#+EXPORT_EXCLUDE_TAGS: noexport
#+FILETAGS: :sdp:rel:ao:
#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)

* object setter                                                  :object:set:
[[./sdp.org][sdp]]  [[./][org/]]
** struct                                                            :struct:
#+name: ao_object_setter
#+BEGIN_SRC d
string[string] contents_comment(in string object) {
  string[string] object_set;
  object_set["use"]           = "comment";
  object_set["of"]            = "comment";
  object_set["is"]            = "comment";
  object_set["obj"]           = object;
  return object_set;
}
#+END_SRC
** heading                                                          :heading:
#+name: ao_object_setter
#+BEGIN_SRC d
string[string] contents_heading(
  in int type,
  in string object,
  in string attrib,
  in int ocn,
  in string lev,
  in string lvn,
  in string lcn,
) {
  string[string] object_set;
  object_set["use"]           = "content";
  object_set["of"]            = "para";
  object_set["is"]            = "heading";
  object_set["type"]          = to!string(type);
  object_set["obj"]           = object;
  object_set["ocn"]           = (ocn==0) ? "" : to!string(ocn);
  object_set["lev"]           = to!string(lev);
  object_set["lvn"]           = to!string(lvn);
  object_set["lcn"]           = to!string(lcn);
  object_set["attrib"]        = attrib;
  return object_set;
}
#+END_SRC
** para                                                                :para:
#+name: ao_object_setter
#+BEGIN_SRC d
string[string] contents_para(
  in string type,
  in string object,
  in string attrib,
  in int ocn,
  in string indent_first,
  in string indent_second,
  in bool bullet
) {
  string[string] object_set;
  object_set["use"]           = "content";
  object_set["of"]            = "para";
  object_set["is"]            = type;
  object_set["obj"]           = object;
  object_set["ocn"]           = (ocn==0) ? "" : to!string(ocn);
  object_set["indent_first"]  = indent_first;
  object_set["indent_second"] = indent_second;
  object_set["bullet"]        = to!string(bullet);
  object_set["attrib"]        = attrib;
  return object_set;
}
#+END_SRC
** block                                                              :block:
#+name: ao_object_setter
#+BEGIN_SRC d
string[string] contents_block(
  in string type,
  in string object,
  in string attrib,
  in int ocn
) {
  string[string] object_set;
  object_set["use"]           = "content";
  object_set["of"]            = "block";
  object_set["is"]            = type;
  object_set["obj"]           = object;
  object_set["ocn"]           = (ocn==0) ? "" : to!string(ocn);
  object_set["attrib"]        = attrib;
  return object_set;
}
#+END_SRC
** block ocn string                                                   :block:
#+name: ao_object_setter
#+BEGIN_SRC d
string[string] contents_block_ocn_string(
  in string type,
  in string object,
  in string ocn,
  in string node
) {
  string[string] object_set;
  object_set["use"]           = "content";
  object_set["of"]            = "block";
  object_set["is"]            = type;
  object_set["obj"]           = object;
  object_set["ocn"]           = ocn;
  object_set["node"]          = node;
  return object_set;
}
#+END_SRC

* tangles                                                            :tangle:
** code structure:                                          :ao_object_setter.d:
#+name: tangle_ao_object_setter
#+BEGIN_SRC d :tangle ../lib/sdp/ao_object_setter.d
/*
  object setter
  ao_object_setter.d
*/
mixin template ObjectSetters() {
  class ObjectAbstractSet {
    import std.conv : to;
    <<ao_object_setter>>
  }
}
#+END_SRC