diff --git a/.gitignore b/.gitignore
index 472f153..ff8218e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ db_model_manager.sc
ds_files/types/generated/
labo/modal_interface_files/banner.jpg
labo/
+*.sc
diff --git a/calexium_lib b/calexium_lib
index 3c4d7fe..977d6b0 160000
--- a/calexium_lib
+++ b/calexium_lib
@@ -1 +1 @@
-Subproject commit 3c4d7fe5a3ba86018c88dd912f464702088487e8
+Subproject commit 977d6b04a745ecdf22e97a494197b52ad86cf87a
diff --git a/documentation/hayamiki.pdf b/documentation/hayamiki.pdf
new file mode 100644
index 0000000..191f08e
Binary files /dev/null and b/documentation/hayamiki.pdf differ
diff --git a/ds_files/graphviz.gv b/ds_files/graphviz.gv
new file mode 100644
index 0000000..abe8f5b
--- /dev/null
+++ b/ds_files/graphviz.gv
@@ -0,0 +1,677 @@
+/*
+ * Created by 伝作 (Densaku).
+ * Types & Messages generator written by フランスのトトロ aka (David RENÉ)
+ * Date: 2017-09-16
+ * Time: 09:48:18
+ *
+ */
+
+digraph DS {
+ splines=true;
+ edge [color=gray50, fontname="verdana", fontsize=10]
+ node [shape=none, bgcolor=gray40, fontname="verdana", fontsize=10]
+
+
+
+ HK_Database [ label=<
+
+ | HK_Database |
+
+ | hk_database ( |
+ | String | name |
+ | List(HK_App) | apps |
+ | ) |
+
+
+ >];
+
+ HK_Database:hk_database_apps -> HK_App:TYPE
+
+
+ HK_App [ label=<
+
+ | HK_App |
+
+ | hk_app ( |
+ | String | app_name |
+ | HK_Icon | icon |
+ | HK_Help_Text | help |
+ | List(HK_Table) | hk_tables |
+ | ) |
+
+
+ >];
+
+ HK_App:hk_app_icon -> HK_Icon:TYPE
+ HK_App:hk_app_help -> HK_Help_Text:TYPE
+ HK_App:hk_app_hk_tables -> HK_Table:TYPE
+
+
+ HK_Icon [ label=<
+
+ | HK_Icon |
+
+ | no_icon |
+
+ | icon16 ( |
+ | String | name |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Help_Text [ label=<
+
+ | HK_Help_Text |
+
+ | no_help_text |
+
+ | help_text_TAG ( |
+ | String | h_text_tag |
+ | ) |
+
+ | help_text ( |
+ | String | h_text |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Table [ label=<
+
+ | HK_Table |
+
+ | hk_table ( |
+ | String | name |
+ | String | short_name |
+ | HK_Model | model |
+ | HK_Display | display |
+ | ) |
+
+
+ >];
+
+ HK_Table:hk_table_model -> HK_Model:TYPE
+ HK_Table:hk_table_display -> HK_Display:TYPE
+
+
+ HK_Model [ label=<
+
+ | HK_Model |
+
+ | hk_model ( |
+ | List(HK_Model_Column) | columns |
+ | List(HK_Constraint) | constraints |
+ | String | show_string |
+ | ) |
+
+
+ >];
+
+ HK_Model:hk_model_columns -> HK_Model_Column:TYPE
+ HK_Model:hk_model_constraints -> HK_Constraint:TYPE
+
+
+ HK_Model_Column [ label=<
+
+ | HK_Model_Column |
+
+ | hk_column ( |
+ | String | name |
+ | HK_Model_Field | type |
+ | List(HK_Model_Attr) | attributes |
+ | HK_Help_Text | help |
+ | ) |
+
+
+ >];
+
+ HK_Model_Column:hk_column_type -> HK_Model_Field:TYPE
+ HK_Model_Column:hk_column_attributes -> HK_Model_Attr:TYPE
+ HK_Model_Column:hk_column_help -> HK_Help_Text:TYPE
+
+
+ HK_Model_Field [ label=<
+
+ | HK_Model_Field |
+
+ | p_key |
+
+ | boolean_field |
+
+ | date_field ( |
+ | HK_Datetime_Field_Attr | hk_dt_f_attr |
+ | ) |
+
+ | time_field ( |
+ | HK_Datetime_Field_Attr | hk_dt_f_attr |
+ | ) |
+
+ | datetime_field ( |
+ | HK_Datetime_Field_Attr | hk_dt_f_attr |
+ | ) |
+
+ | foreign_key ( |
+ | HK_App_Name | app_name |
+ | String | table_name |
+ | List(String) | searchable_fields |
+ | ) |
+
+ | integer_field ( |
+ | HK_Int_Choices | choices |
+ | ) |
+
+ | float_field |
+
+ | char_field ( |
+ | HK_Text_Choices | choices |
+ | Int | size |
+ | ) |
+
+ | password_field ( |
+ | Int | min_size |
+ | ) |
+
+ | text_field ( |
+ | HK_Text_Field_Attr | hk_text_field_attr |
+ | ) |
+
+ | color_field |
+
+ | phone_field ( |
+ | HK_Phone_Field_Attr | hk_ph_f_attr |
+ | ) |
+
+ | url_field |
+
+ | email_field |
+
+
+ >];
+
+ HK_Model_Field:phone_field_hk_ph_f_attr -> HK_Phone_Field_Attr:TYPE
+ HK_Model_Field:text_field_hk_text_field_attr -> HK_Text_Field_Attr:TYPE
+ HK_Model_Field:char_field_choices -> HK_Text_Choices:TYPE
+ HK_Model_Field:integer_field_choices -> HK_Int_Choices:TYPE
+ HK_Model_Field:foreign_key_app_name -> HK_App_Name:TYPE
+ HK_Model_Field:datetime_field_hk_dt_f_attr -> HK_Datetime_Field_Attr:TYPE
+ HK_Model_Field:time_field_hk_dt_f_attr -> HK_Datetime_Field_Attr:TYPE
+ HK_Model_Field:date_field_hk_dt_f_attr -> HK_Datetime_Field_Attr:TYPE
+
+
+ HK_Text_Field_Attr [ label=<
+
+ | HK_Text_Field_Attr |
+
+ | none |
+
+ | rich_editor |
+
+
+ >];
+
+
+
+ HK_Int_Choices [ label=<
+
+ | HK_Int_Choices |
+
+ | no_choice |
+
+ | int_choices ( |
+ | List(HK_Int_Choice) | hk_int_choice |
+ | ) |
+
+
+ >];
+
+ HK_Int_Choices:int_choices_hk_int_choice -> HK_Int_Choice:TYPE
+
+
+ HK_Int_Choice [ label=<
+
+ | HK_Int_Choice |
+
+ | hk_int_choice ( |
+ | Int | value |
+ | String | visible |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Text_Choices [ label=<
+
+ | HK_Text_Choices |
+
+ | no_choice |
+
+ | text_choices ( |
+ | List(HK_Text_Choice) | hk_text_choice |
+ | ) |
+
+
+ >];
+
+ HK_Text_Choices:text_choices_hk_text_choice -> HK_Text_Choice:TYPE
+
+
+ HK_Text_Choice [ label=<
+
+ | HK_Text_Choice |
+
+ | hk_text_choice ( |
+ | String | value |
+ | String | visible |
+ | ) |
+
+
+ >];
+
+
+
+ HK_App_Name [ label=<
+
+ | HK_App_Name |
+
+ | this |
+
+ | app_name ( |
+ | String | name |
+ | ) |
+
+ | none |
+
+
+ >];
+
+
+
+ HK_Datetime_Field_Attr [ label=<
+
+ | HK_Datetime_Field_Attr |
+
+ | none |
+
+ | auto_now |
+
+ | auto_now_add |
+
+
+ >];
+
+
+
+ HK_Phone_Field_Attr [ label=<
+
+ | HK_Phone_Field_Attr |
+
+ | generic |
+
+ | landline |
+
+ | cellphone |
+
+ | fax |
+
+
+ >];
+
+
+
+ HK_Model_Attr [ label=<
+
+ | HK_Model_Attr |
+
+ | unique |
+
+ | default ( |
+ | String | default_str |
+ | ) |
+
+ | not_null |
+
+
+ >];
+
+
+
+ HK_Constraint [ label=<
+
+ | HK_Constraint |
+
+ | unique ( |
+ | String | name |
+ | List(String) | columns |
+ | HK_On_Conflict | on_conflict |
+ | ) |
+
+
+ >];
+
+ HK_Constraint:unique_on_conflict -> HK_On_Conflict:TYPE
+
+
+ HK_On_Conflict [ label=<
+
+ | HK_On_Conflict |
+
+ | rollback |
+
+ | abort |
+
+ | fail |
+
+ | ignore |
+
+ | replace |
+
+
+ >];
+
+
+
+ HK_Display [ label=<
+
+ | HK_Display |
+
+ | hk_display ( |
+ | List(HK_Viewer) | l_viewer |
+ | List(HK_Editor) | l_editor |
+ | ) |
+
+
+ >];
+
+ HK_Display:hk_display_l_viewer -> HK_Viewer:TYPE
+ HK_Display:hk_display_l_editor -> HK_Editor:TYPE
+
+
+ HK_Filter [ label=<
+
+ | HK_Filter |
+
+ | hk_filter ( |
+ | String | filter_name |
+ | String | filter_string |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Viewer [ label=<
+
+ | HK_Viewer |
+
+ | list_view_all |
+
+ | list_view ( |
+ | String | view_name |
+ | List(String) | columns |
+ | List(HK_Filter) | l_filter |
+ | WEB_Action_Name | link_id_action |
+ | ) |
+
+
+ >];
+
+ HK_Viewer:list_view_l_filter -> HK_Filter:TYPE
+ HK_Viewer:list_view_link_id_action -> WEB_Action_Name:TYPE
+
+
+ HK_FK_View [ label=<
+
+ | HK_FK_View |
+
+ | fk_view ( |
+ | HK_App_Name | app_name |
+ | String | table_name |
+ | String | fk_col_name |
+ | ) |
+
+
+ >];
+
+ HK_FK_View:fk_view_app_name -> HK_App_Name:TYPE
+
+
+ HK_Editor [ label=<
+
+ | HK_Editor |
+
+ | edit_view_all |
+
+ | edit_view_list_form ( |
+ | String | view_name |
+ | List(String) | columns |
+ | List(HK_FK_View) | fk_view |
+ | ) |
+
+ | form_table ( |
+ | String | view_name |
+ | HK_Editor_Table | form_table |
+ | ) |
+
+
+ >];
+
+ HK_Editor:form_table_form_table -> HK_Editor_Table:TYPE
+ HK_Editor:edit_view_list_form_fk_view -> HK_FK_View:TYPE
+
+
+ HK_Form_Tab [ label=<
+
+ | HK_Form_Tab |
+
+ | hk_form_tab ( |
+ | String | fk_table_name |
+ | String | fk_col_name |
+ | String | list_view_name |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Form [ label=<
+
+ | HK_Form |
+
+ | hk_form_in_list ( |
+ | String | table_name |
+ | String | view_name |
+ | List(HK_Form_Entry) | list |
+ | List(HK_Form_Tab) | tabs |
+ | ) |
+
+ | hk_form_in_table ( |
+ | String | table_name |
+ | String | view_name |
+ | HK_Form_Table | form_in_table |
+ | ) |
+
+
+ >];
+
+ HK_Form:hk_form_in_table_form_in_table -> HK_Form_Table:TYPE
+ HK_Form:hk_form_in_list_list -> HK_Form_Entry:TYPE
+ HK_Form:hk_form_in_list_tabs -> HK_Form_Tab:TYPE
+
+
+ HK_Editor_Table_Cell_Attribute [ label=<
+
+ | HK_Editor_Table_Cell_Attribute |
+
+ | colspan ( |
+ | Int | number |
+ | ) |
+
+ | rowspan ( |
+ | Int | number |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Editor_Table_Cell [ label=<
+
+ | HK_Editor_Table_Cell |
+
+ | empty ( |
+ | List(HK_Editor_Table_Cell_Attribute) | cell_attr |
+ | ) |
+
+ | column ( |
+ | List(HK_Editor_Table_Cell_Attribute) | cell_attr |
+ | String | column_name |
+ | ) |
+
+ | column_label ( |
+ | List(HK_Editor_Table_Cell_Attribute) | cell_attr |
+ | String | column_name |
+ | ) |
+
+ | label ( |
+ | List(HK_Editor_Table_Cell_Attribute) | cell_attr |
+ | String | label |
+ | ) |
+
+ | table ( |
+ | List(HK_Editor_Table_Cell_Attribute) | cell_attr |
+ | List(HK_Editor_Table_Line) | lines |
+ | ) |
+
+
+ >];
+
+ HK_Editor_Table_Cell:table_cell_attr -> HK_Editor_Table_Cell_Attribute:TYPE
+ HK_Editor_Table_Cell:table_lines -> HK_Editor_Table_Line:TYPE
+ HK_Editor_Table_Cell:label_cell_attr -> HK_Editor_Table_Cell_Attribute:TYPE
+ HK_Editor_Table_Cell:column_label_cell_attr -> HK_Editor_Table_Cell_Attribute:TYPE
+ HK_Editor_Table_Cell:column_cell_attr -> HK_Editor_Table_Cell_Attribute:TYPE
+ HK_Editor_Table_Cell:empty_cell_attr -> HK_Editor_Table_Cell_Attribute:TYPE
+
+
+ HK_Editor_Table_Line [ label=<
+
+ | HK_Editor_Table_Line |
+
+ | line ( |
+ | List(HK_Editor_Table_Cell) | cells |
+ | ) |
+
+
+ >];
+
+ HK_Editor_Table_Line:line_cells -> HK_Editor_Table_Cell:TYPE
+
+
+ HK_Editor_Table [ label=<
+
+ | HK_Editor_Table |
+
+ | table ( |
+ | List(HK_Editor_Table_Line) | lines |
+ | ) |
+
+
+ >];
+
+ HK_Editor_Table:table_lines -> HK_Editor_Table_Line:TYPE
+
+
+ HK_Form_Table_Cell_Attribute [ label=<
+
+ | HK_Form_Table_Cell_Attribute |
+
+ | colspan ( |
+ | Int | number |
+ | ) |
+
+ | rowspan ( |
+ | Int | number |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Form_Table_Cell [ label=<
+
+ | HK_Form_Table_Cell |
+
+ | hk_form_table_cell ( |
+ | List(HK_Form_Table_Cell_Attribute) | cell_attr |
+ | HK_Form_Entry | form_entry |
+ | ) |
+
+ | hk_form_table_cell_table ( |
+ | List(HK_Form_Table_Cell_Attribute) | cell_attr |
+ | List(HK_Form_Table_Line) | form_lines |
+ | ) |
+
+
+ >];
+
+ HK_Form_Table_Cell:hk_form_table_cell_table_cell_attr -> HK_Form_Table_Cell_Attribute:TYPE
+ HK_Form_Table_Cell:hk_form_table_cell_table_form_lines -> HK_Form_Table_Line:TYPE
+ HK_Form_Table_Cell:hk_form_table_cell_cell_attr -> HK_Form_Table_Cell_Attribute:TYPE
+ HK_Form_Table_Cell:hk_form_table_cell_form_entry -> HK_Form_Entry:TYPE
+
+
+ HK_Form_Table_Line [ label=<
+
+ | HK_Form_Table_Line |
+
+ | hk_form_table_line ( |
+ | List(HK_Form_Table_Cell) | form_table_cells |
+ | ) |
+
+
+ >];
+
+ HK_Form_Table_Line:hk_form_table_line_form_table_cells -> HK_Form_Table_Cell:TYPE
+
+
+ HK_Form_Table_Attribute [ label=<
+
+ | HK_Form_Table_Attribute |
+
+ | hidden ( |
+ | String | name |
+ | String | value |
+ | ) |
+
+
+ >];
+
+
+
+ HK_Form_Table [ label=<
+
+ | HK_Form_Table |
+
+ | hk_form_table ( |
+ | List(HK_Form_Table_Attribute) | table_attr |
+ | List(HK_Form_Table_Line) | form_lines |
+ | ) |
+
+
+ >];
+
+ HK_Form_Table:hk_form_table_table_attr -> HK_Form_Table_Attribute:TYPE
+ HK_Form_Table:hk_form_table_form_lines -> HK_Form_Table_Line:TYPE
+
+}
diff --git a/hayamiki_lib b/hayamiki_lib
index a8e062d..1ea67eb 160000
--- a/hayamiki_lib
+++ b/hayamiki_lib
@@ -1 +1 @@
-Subproject commit a8e062d5842b19e2b2226fe7dd3b7bf10a5dd9d7
+Subproject commit 1ea67eb55022aaaa2c37b180530fa8d72e71f142
--
libgit2 0.21.4