Commit c480c7a869fab251dffe7673b57765ed3c80e926
1 parent
ec4db71f
Add support of DS_Type_File
Showing
9 changed files
with
486 additions
and
153 deletions
Show diff stats
densaku.aproj
| ... | ... | @@ -566,6 +566,7 @@ |
| 566 | 566 | <Compile Include="src\generation\graphviz\graphviz_header.anubis" /> |
| 567 | 567 | <Compile Include="src\generation\graphviz\graphviz_main.anubis" /> |
| 568 | 568 | <Compile Include="src\generation\graphviz\graphviz_type.anubis" /> |
| 569 | + <Compile Include="src\generation\intermediate_type.anubis" /> | |
| 569 | 570 | <Compile Include="src\generation\messages.anubis" /> |
| 570 | 571 | <Compile Include="src\generation\message_header.anubis" /> |
| 571 | 572 | <Compile Include="src\generation\message_messages.anubis" /> | ... | ... |
densaku_lib @ e19a5e659e2
src/generation/files.anubis
| ... | ... | @@ -18,9 +18,9 @@ read generation/graphviz/graphviz_main.anubis |
| 18 | 18 | public define Maybe(One) |
| 19 | 19 | generate_message_files |
| 20 | 20 | ( |
| 21 | - List(DS_Type) types, //Types description | |
| 22 | - List(DS_Message) messages, | |
| 23 | - String destination_dir | |
| 21 | + List(DS_Type_File) type_files, //Types description | |
| 22 | + List(DS_Message) messages, | |
| 23 | + String destination_dir | |
| 24 | 24 | )= |
| 25 | 25 | //before processing the generation we check if we need to do it, by checking the SHA1 generated with the |
| 26 | 26 | //previous generation. If SHA1 is same, this means the database is exactly same and we have nothing to do. |
| ... | ... | @@ -28,14 +28,14 @@ public define Maybe(One) |
| 28 | 28 | |
| 29 | 29 | //process. We serialize the types and messages model and make SHA1 of the result. This result is stored in file densaku.ini |
| 30 | 30 | //in root of destination_dir |
| 31 | - with current_types_SHA1 = to_ascii(sha1(serialize(types))), | |
| 31 | + with current_types_SHA1 = to_ascii(sha1(serialize(type_files))), | |
| 32 | 32 | with current_messages_SHA1 = to_ascii(sha1(serialize(messages))), |
| 33 | 33 | |
| 34 | 34 | println("\nDensaku Generator"); |
| 35 | 35 | println("Destination dir: "+destination_dir); |
| 36 | 36 | with ini = loadIniFile(destination_dir+"/densaku.ini"), |
| 37 | 37 | |
| 38 | - with types_SHA1 = readString(ini, "TYPES", "SHA1", "N/A"), | |
| 38 | + with types_SHA1 = "::", //readString(ini, "TYPES", "SHA1", "N/A"), | |
| 39 | 39 | with messages_SHA1 = readString(ini, "MESSAGES", "SHA1", "N/A"), |
| 40 | 40 | |
| 41 | 41 | println("Saved Types SHA1 = "+types_SHA1); |
| ... | ... | @@ -48,25 +48,34 @@ public define Maybe(One) |
| 48 | 48 | if types_SHA1 = current_types_SHA1 & messages_SHA1 = current_messages_SHA1 then |
| 49 | 49 | success(println("Types and messages already generated, nothing to do")) |
| 50 | 50 | else |
| 51 | - if check_types(types) is | |
| 52 | - { | |
| 53 | - failure then failure, | |
| 54 | - success(_) then | |
| 55 | - | |
| 56 | - println("Generating types and message files"); | |
| 57 | - make_all_types(types, destination_dir); | |
| 58 | - | |
| 59 | - println("Generating messages collection"); | |
| 60 | - make_all_messages(messages, destination_dir); | |
| 61 | - | |
| 62 | - println("Generating graphviz"); | |
| 63 | - forget(make_graphviz_types(types, destination_dir)); | |
| 64 | - | |
| 65 | - writeString(ini, "TYPES", "SHA1", current_types_SHA1); | |
| 66 | - writeString(ini, "MESSAGES", "SHA1", current_messages_SHA1); | |
| 67 | - writeIniInfo(ini); | |
| 68 | - success(unique) | |
| 69 | - }. | |
| 51 | + if map_escape((DS_Type_File file) | |
| 52 | + |-> | |
| 53 | + since file is ds_type_file(output_dir, file_name, types), | |
| 54 | + if check_types(types) is | |
| 55 | + { | |
| 56 | + failure then failure, | |
| 57 | + success(_) then | |
| 58 | + | |
| 59 | + println("Generating types and message files"); | |
| 60 | + make_all_types(output_dir, file_name, types, destination_dir); | |
| 61 | + | |
| 62 | + println("Generating messages collection"); | |
| 63 | + make_all_messages(messages, destination_dir); | |
| 64 | + | |
| 65 | + println("Generating graphviz"); | |
| 66 | + forget(make_graphviz_types(types, destination_dir)); | |
| 67 | + | |
| 68 | + writeString(ini, "TYPES", "SHA1", current_types_SHA1); | |
| 69 | + writeString(ini, "MESSAGES", "SHA1", current_messages_SHA1); | |
| 70 | + writeIniInfo(ini); | |
| 71 | + success(unique) | |
| 72 | + }, | |
| 73 | + type_files) is | |
| 74 | + { | |
| 75 | + failure then failure, | |
| 76 | + success(_) then success(unique) | |
| 77 | + } | |
| 78 | +. | |
| 70 | 79 | |
| 71 | 80 | global define DS_Generator_API |
| 72 | 81 | ds_gen = | ... | ... |
| 1 | +/* | |
| 2 | + * Created by PyramIDE. | |
| 3 | + * User: フランスのトトロ aka (David RENÉ) | |
| 4 | + * Date: 12/04/2017 | |
| 5 | + * Time: 05:42 | |
| 6 | + * © Calexium | |
| 7 | + */ | |
| 8 | + | |
| 9 | +read tools/basis.anubis | |
| 10 | +read densaku_lib/types/ds_types.anubis | |
| 11 | +read system/lists.anubis | |
| 12 | + | |
| 13 | +define Bool | |
| 14 | + is_higher_level | |
| 15 | + ( | |
| 16 | + Int level, | |
| 17 | + String search_type, | |
| 18 | + List(DS_Type) beside_type, | |
| 19 | + Int beside_level | |
| 20 | + )= | |
| 21 | + if beside_type is | |
| 22 | + { | |
| 23 | + [] then false, | |
| 24 | + [h . t] then | |
| 25 | + since h is ds_type(name, _, _), | |
| 26 | + if search_type = name then | |
| 27 | + if beside_level > level then | |
| 28 | + true | |
| 29 | + else | |
| 30 | + false | |
| 31 | + else | |
| 32 | + is_higher_level(level, search_type, t, beside_level +1) | |
| 33 | + } | |
| 34 | +. | |
| 35 | + | |
| 36 | +define Bool | |
| 37 | + is_higher_level | |
| 38 | + ( | |
| 39 | + Int level, | |
| 40 | + String search_type, | |
| 41 | + List(DS_Type) beside_type | |
| 42 | + )= | |
| 43 | + is_higher_level(level, search_type, beside_type, 0) | |
| 44 | +. | |
| 45 | + | |
| 46 | +define List(String) | |
| 47 | + extract_intermediate_type | |
| 48 | + ( | |
| 49 | + Int level, //level of main type where belonging the component | |
| 50 | + List(DS_Component) components, | |
| 51 | + List(String) so_far, | |
| 52 | + List(DS_Type) beside_type | |
| 53 | + )= | |
| 54 | + if components is | |
| 55 | + { | |
| 56 | + [] then so_far, | |
| 57 | + [h . t] then | |
| 58 | + since h is component(_b_list, _anb_type, _name, _comment), | |
| 59 | + if _anb_type is ds_type(_type_name) then | |
| 60 | + if is_higher_level(level, _type_name, beside_type) then | |
| 61 | + extract_intermediate_type(level, t, append_once(so_far, _type_name), beside_type) | |
| 62 | + else | |
| 63 | + extract_intermediate_type(level, t, so_far, beside_type) | |
| 64 | + else if _anb_type is extern_type(_type_name, read_file) then | |
| 65 | + extract_intermediate_type(level, t, so_far, beside_type) | |
| 66 | + else | |
| 67 | + extract_intermediate_type(level, t, so_far, beside_type) | |
| 68 | + } | |
| 69 | +. | |
| 70 | + | |
| 71 | +define List(String) | |
| 72 | +/* look into each alternative | |
| 73 | + */ | |
| 74 | + extract_intermediate_type | |
| 75 | + ( | |
| 76 | + Int level, | |
| 77 | + List(DS_Alternative) alt, | |
| 78 | + List(String) so_far, | |
| 79 | + List(DS_Type) beside_type | |
| 80 | + )= | |
| 81 | + if alt is | |
| 82 | + { | |
| 83 | + [] then so_far, | |
| 84 | + [h . t] then | |
| 85 | + if h is | |
| 86 | + { | |
| 87 | + enum(_ , _) then extract_intermediate_type(level, t, so_far, beside_type) | |
| 88 | + alternative(_, _, components) then | |
| 89 | + extract_intermediate_type(level, t, extract_intermediate_type(level, components, so_far, beside_type), beside_type) | |
| 90 | + } | |
| 91 | + } | |
| 92 | +. | |
| 93 | + | |
| 94 | +public define List(String) | |
| 95 | + get_all_intermediate_type | |
| 96 | + ( | |
| 97 | + DS_Type ds_type, //Type from which we want to extract the extern types | |
| 98 | + Int level, | |
| 99 | + List(DS_Type) beside_type //all known type in same file | |
| 100 | + )= | |
| 101 | + since ds_type is ds_type(_, _, ds_alternatives), | |
| 102 | + extract_intermediate_type(level, ds_alternatives, [], beside_type) | |
| 103 | +. | |
| 104 | + | |
| 105 | +public define List(String) | |
| 106 | + get_all_intermediate_type | |
| 107 | + ( | |
| 108 | + List(DS_Type) beside_type, //all known type in same file | |
| 109 | + List(DS_Type) scrut, | |
| 110 | + Int level, | |
| 111 | + List(String) so_far | |
| 112 | + )= | |
| 113 | + if scrut is | |
| 114 | + { | |
| 115 | + [] then so_far, | |
| 116 | + [h . t] then | |
| 117 | + get_all_intermediate_type(beside_type, t, level+1, so_far + get_all_intermediate_type(h, level, beside_type)) | |
| 118 | + } | |
| 119 | +. | |
| 120 | + | |
| 121 | +public define List(String) | |
| 122 | + get_all_intermediate_type | |
| 123 | + ( | |
| 124 | + List(DS_Type) beside_type //all known type in same file | |
| 125 | + )= | |
| 126 | + get_all_intermediate_type(beside_type, beside_type, 0, []) | |
| 127 | +. | |
| 128 | + | |
| 129 | + if beside_type | |
| 130 | + since ds_type is ds_type(_, _, ds_alternatives), | |
| 131 | + extract_intermediate_type(level, ds_alternatives, [], beside_type) | |
| 132 | +. | ... | ... |
src/generation/message_messages.anubis
| ... | ... | @@ -144,9 +144,9 @@ define String |
| 144 | 144 | with name = "_"+to_lower(field_name), |
| 145 | 145 | indent + "// [Field's type = "+(if b_list is list then "List(" else "")+dump(anb_type)+(if b_list is list then ")" else "")+"] Field's name '"+field_name+"'\n"+ |
| 146 | 146 | (if b_list is list then |
| 147 | - anb_type_list_from_message(indent, type_msg, anb_type, field_name, name, brace_counter) | |
| 147 | + anb_type_list_from_message(indent, type_msg, anb_type, field_name, "_"+name+"_", brace_counter) | |
| 148 | 148 | else |
| 149 | - anb_type_from_message(indent, type_msg, anb_type, field_name, name, brace_counter)) | |
| 149 | + anb_type_from_message(indent, type_msg, anb_type, field_name, "_"+name+"_", brace_counter)) | |
| 150 | 150 | + |
| 151 | 151 | generate_fields_from_message(indent, type_msg, t, brace_counter) |
| 152 | 152 | ... | ... |
src/generation/types.anubis
| ... | ... | @@ -12,62 +12,214 @@ read generation/graphviz/graphviz_main.anubis |
| 12 | 12 | |
| 13 | 13 | read system/files.anubis |
| 14 | 14 | read system/string.anubis |
| 15 | +read system/lists.anubis | |
| 15 | 16 | read tools/streams.anubis |
| 16 | 17 | read tools/basis.anubis |
| 17 | 18 | read densaku_lib/types/ds_types.anubis |
| 19 | +read generation/intermediate_type.anubis | |
| 18 | 20 | |
| 19 | -define Maybe(One) | |
| 20 | - generate_type | |
| 21 | +type Type_File_Parts: | |
| 22 | + type_file_part( | |
| 23 | + String transmit, | |
| 24 | + List(String) intermediate, | |
| 25 | + String declaration, | |
| 26 | + String message_str | |
| 27 | + ) | |
| 28 | +. | |
| 29 | + | |
| 30 | +define String | |
| 31 | + concat_transmit | |
| 21 | 32 | ( |
| 22 | - Stream stream, | |
| 23 | - DS_Type ds_type | |
| 33 | + List(Type_File_Parts) _parts | |
| 24 | 34 | )= |
| 25 | - if write_string(stream, dump_DS_Type(ds_type)) is failure then failure else | |
| 35 | + join("", | |
| 36 | + map((Type_File_Parts part) | |
| 37 | + |-> | |
| 38 | + since part is type_file_part(transmit_str, _, _, _), | |
| 39 | + transmit_str | |
| 40 | + , | |
| 41 | + _parts | |
| 42 | + ) | |
| 43 | + ) | |
| 44 | +. | |
| 26 | 45 | |
| 27 | - success(unique) | |
| 46 | +define List(String) | |
| 47 | + unique_intermediate | |
| 48 | + ( | |
| 49 | + List(String) intermediate_types, | |
| 50 | + List(String) so_far | |
| 51 | + )= | |
| 52 | + if intermediate_types is | |
| 53 | + { | |
| 54 | + [] then so_far, | |
| 55 | + [h . t ] then unique_intermediate(t, append_once(so_far, h)) | |
| 56 | + } | |
| 28 | 57 | . |
| 29 | 58 | |
| 30 | -define Maybe(One) | |
| 31 | - make_type_file | |
| 59 | +define List(String) | |
| 60 | + unique_intermediate | |
| 32 | 61 | ( |
| 33 | - DS_Type ds_type, //type description | |
| 34 | - String dest_dir | |
| 62 | + List(Type_File_Parts) _parts, | |
| 63 | + List(String) so_far | |
| 64 | + )= | |
| 65 | + if _parts is | |
| 66 | + { | |
| 67 | + [] then so_far, | |
| 68 | + [h . t] then | |
| 69 | + since h is type_file_part(_, intermediate, _, _), | |
| 70 | + unique_intermediate(intermediate, so_far) | |
| 71 | + } | |
| 72 | +. | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | +define String | |
| 77 | + concat_intermediate | |
| 78 | + ( | |
| 79 | + List(Type_File_Parts) _parts | |
| 80 | + )= | |
| 81 | + with final_list = unique_intermediate(_parts, []), | |
| 82 | + join("\n", | |
| 83 | + map((String intermediate) | |
| 84 | + |-> | |
| 85 | + "public type "+intermediate+":..." | |
| 86 | + , | |
| 87 | + final_list | |
| 88 | + ) | |
| 89 | + )+"\n" | |
| 90 | +. | |
| 91 | + | |
| 92 | +define String | |
| 93 | + concat_declaration | |
| 94 | + ( | |
| 95 | + List(Type_File_Parts) _parts | |
| 96 | + )= | |
| 97 | + join("\n\n", | |
| 98 | + map((Type_File_Parts part) | |
| 99 | + |-> | |
| 100 | + since part is type_file_part(_, _, declaration_str, _), | |
| 101 | + declaration_str | |
| 102 | + , | |
| 103 | + _parts | |
| 104 | + ) | |
| 35 | 105 | ) |
| 36 | - = | |
| 37 | - since ds_type is ds_type(name, generation, alternatives), | |
| 38 | - println("Generating file for type ["+name+"]"); | |
| 39 | - with file_name = dest_dir+"types/generated/"+to_lower(name)+".anubis", | |
| 106 | +. | |
| 107 | + | |
| 108 | +define String | |
| 109 | + concat_message | |
| 110 | + ( | |
| 111 | + List(Type_File_Parts) _parts | |
| 112 | + )= | |
| 113 | + join("\n\n", | |
| 114 | + map((Type_File_Parts part) | |
| 115 | + |-> | |
| 116 | + since part is type_file_part(_, _, _, message_str), | |
| 117 | + message_str | |
| 118 | + , | |
| 119 | + _parts | |
| 120 | + ) | |
| 121 | + ) | |
| 122 | +. | |
| 40 | 123 | |
| 124 | +define Maybe(One) | |
| 125 | + write_type_file | |
| 126 | + ( | |
| 127 | + String file_name, | |
| 128 | + String header, | |
| 129 | + List(Type_File_Parts) file_parts | |
| 130 | + )= | |
| 131 | + | |
| 132 | + //with file_name = dest_dir+to_lower(name)+".anubis", | |
| 41 | 133 | //create all necessary directories if doesn't exist. |
| 42 | 134 | make_directories(file_name); |
| 43 | - | |
| 44 | 135 | if file(file_name, new) is |
| 45 | 136 | { |
| 46 | 137 | failure then println("can't create file "+file_name);failure, |
| 47 | 138 | success(fd) then |
| 48 | 139 | with strm = make_stream(fd), |
| 49 | - if generate_type_header(strm, ds_type) is { failure then failure, success(_) then | |
| 50 | - if generate_type(strm, ds_type) is { failure then failure, success(_) then | |
| 51 | - if generation is | |
| 52 | - { | |
| 53 | - no_message then success(unique), | |
| 54 | - message then | |
| 55 | - if generate_type_message_description(strm, ds_type) is { failure then failure, success(_) then | |
| 56 | - if generate_type_to_message(strm, ds_type) is { failure then failure, success(_) then | |
| 57 | - if generate_type_from_message(strm, ds_type) is { failure then failure, success(_) then | |
| 58 | - success(unique)}}} | |
| 59 | - }}} | |
| 140 | + write_string(strm, | |
| 141 | + header + | |
| 142 | + concat_transmit(file_parts) + "\n" + | |
| 143 | + concat_intermediate(file_parts) + "\n" + | |
| 144 | + concat_declaration(file_parts) + | |
| 145 | + concat_message(file_parts) | |
| 146 | + ) | |
| 60 | 147 | } |
| 61 | 148 | . |
| 149 | + | |
| 150 | +define Type_File_Parts | |
| 151 | + make_type_file | |
| 152 | + ( | |
| 153 | + DS_Type ds_type, //type description | |
| 154 | + String dest_dir, | |
| 155 | + List(DS_Type) same_file_types | |
| 156 | + ) | |
| 157 | + = | |
| 158 | + since ds_type is ds_type(name, generation, alternatives), | |
| 159 | + println("Generating file for type ["+name+"]"); | |
| 160 | + with transmit_foreign = generate_transmit_foreign_type(ds_type, same_file_types), | |
| 161 | + with intermediate_type= get_all_intermediate_type(same_file_types), | |
| 162 | + with type_declaration = dump_DS_Type(ds_type), | |
| 163 | + with message_str = | |
| 164 | + if generation is | |
| 165 | + { | |
| 166 | + no_message then "", | |
| 167 | + message then | |
| 168 | + generate_type_message_description(ds_type) + | |
| 169 | + generate_type_to_message(ds_type) + | |
| 170 | + generate_type_from_message(ds_type) | |
| 171 | + }, | |
| 172 | + type_file_part(transmit_foreign, intermediate_type, type_declaration, message_str) | |
| 173 | +. | |
| 62 | 174 | |
| 63 | 175 | public define One |
| 64 | 176 | make_all_types |
| 65 | 177 | ( |
| 66 | - List(DS_Type) types, | |
| 67 | - String destination_dir | |
| 178 | + DS_Type_File_Output_Dir out_dir, | |
| 179 | + DS_Type_File_Output_Name output_file_name, | |
| 180 | + List(DS_Type) types, | |
| 181 | + String destination_dir | |
| 68 | 182 | )= |
| 69 | - map_forget((DS_Type type) |-> since type is ds_type(type_name, _, ds_alts), | |
| 70 | - println("generating type file for Type ["+type_name+"]"); | |
| 71 | - make_type_file(type, destination_dir), types) | |
| 183 | + with final_destination_dir = | |
| 184 | + if out_dir is | |
| 185 | + { | |
| 186 | + auto then destination_dir + "types/generated/", | |
| 187 | + relative_path(path) then destination_dir + path + "/", | |
| 188 | + absolute_path(path) then path | |
| 189 | + }, | |
| 190 | + | |
| 191 | + if output_file_name is | |
| 192 | + { | |
| 193 | + auto then | |
| 194 | + map_forget((DS_Type type) | |
| 195 | + |-> | |
| 196 | + since type is ds_type(type_name, _, ds_alts), | |
| 197 | + | |
| 198 | + with file_name = final_destination_dir+to_lower(type_name)+".anubis", | |
| 199 | + println("generating type file for Type ["+type_name+"] to "+file_name); | |
| 200 | + | |
| 201 | + with header = generate_header, | |
| 202 | + with file_parts = make_type_file(type, final_destination_dir, []), | |
| 203 | + | |
| 204 | + write_type_file(file_name, header, [file_parts]) | |
| 205 | + , | |
| 206 | + types) | |
| 207 | + | |
| 208 | + name(_file_name) then | |
| 209 | + with file_name = final_destination_dir+_file_name+".anubis", | |
| 210 | + | |
| 211 | + with header = generate_header, | |
| 212 | + with file_parts = | |
| 213 | + map((DS_Type type) | |
| 214 | + |-> | |
| 215 | + since type is ds_type(type_name, _, ds_alts), | |
| 216 | + println("generating type file for Type ["+type_name+"] to "+file_name); | |
| 217 | + make_type_file(type, final_destination_dir, types) | |
| 218 | + , | |
| 219 | + types), | |
| 220 | + | |
| 221 | + forget(write_type_file(file_name, header, file_parts)) | |
| 222 | + | |
| 223 | + } | |
| 224 | + | |
| 72 | 225 | . |
| 73 | - | ... | ... |
src/generation/types_header.anubis
| ... | ... | @@ -11,24 +11,32 @@ read tools/streams.anubis |
| 11 | 11 | read tools/ISO-8601.anubis |
| 12 | 12 | read system/string.anubis |
| 13 | 13 | read densaku_lib/types/ds_types.anubis |
| 14 | - | |
| 14 | +read generation/intermediate_type.anubis | |
| 15 | 15 | |
| 16 | 16 | public define String |
| 17 | - insert_read_foreign_type | |
| 17 | + generate_transmit_foreign_type | |
| 18 | 18 | ( |
| 19 | - DS_Type sd_type //type description | |
| 19 | + DS_Type ds_t, //type description, | |
| 20 | + List(DS_Type) beside_type //type belonging of that file | |
| 20 | 21 | )= |
| 21 | - with foreign_type_list = get_all_extern_type(sd_type), | |
| 22 | + with foreign_type_list = get_all_extern_type(ds_t, beside_type), | |
| 22 | 23 | join("", map((Extern_type ext_type) |-> since ext_type is extern(_, read_file), "transmit "+read_file+"\n", foreign_type_list)) |
| 23 | 24 | . |
| 24 | - | |
| 25 | -public define Maybe(One) | |
| 26 | - generate_type_header | |
| 25 | + | |
| 26 | + public define List(String) | |
| 27 | + generate_intermediate_type | |
| 27 | 28 | ( |
| 28 | - Stream stream, | |
| 29 | - DS_Type sd_type //type description | |
| 30 | - )= | |
| 31 | - write_string(stream, | |
| 29 | + DS_Type ds_t, //type description, | |
| 30 | + List(DS_Type) beside_type //type belonging of that file | |
| 31 | + )= | |
| 32 | + with intermediate_list = get_all_intermediate_type(beside_type), | |
| 33 | + | |
| 34 | + //join("", map((String intermediate_type) |-> intermediate_type, intermediate_list)) | |
| 35 | +. | |
| 36 | + | |
| 37 | +public define String | |
| 38 | + generate_header | |
| 39 | + = | |
| 32 | 40 | "/* |
| 33 | 41 | * Created by 伝作 (Densaku). |
| 34 | 42 | * Types & Messages generator written by フランスのトトロ aka (David RENÉ) |
| ... | ... | @@ -41,9 +49,13 @@ transmit system/muscle.anubis |
| 41 | 49 | transmit system/convert.anubis |
| 42 | 50 | transmit tools/basis.anubis |
| 43 | 51 | |
| 44 | -" + | |
| 52 | +" | |
| 53 | +. | |
| 54 | + + | |
| 45 | 55 | insert_read_foreign_type(sd_type)+ |
| 46 | 56 | "\n" |
| 47 | 57 | ) |
| 48 | - . | |
| 58 | +. | |
| 59 | + | |
| 60 | + | |
| 49 | 61 | ... | ... |
src/generation/types_messages.anubis
| ... | ... | @@ -16,29 +16,28 @@ read densaku_lib/types/ds_types.anubis |
| 16 | 16 | public define String |
| 17 | 17 | insert_read_foreign_type |
| 18 | 18 | ( |
| 19 | -// Stream stream, | |
| 20 | - DS_Type ds_type //type description | |
| 19 | + DS_Type ds_type, //type description | |
| 20 | + List(DS_Type) beside_type | |
| 21 | 21 | )= |
| 22 | - with foreign_type_list = get_all_extern_type(ds_type), | |
| 22 | + with foreign_type_list = get_all_extern_type(ds_type, beside_type), | |
| 23 | 23 | join("", map((Extern_type ext_type) |-> since ext_type is extern(_, read_file), "read "+read_file+"\n", foreign_type_list)) |
| 24 | 24 | . |
| 25 | 25 | |
| 26 | -public define Maybe(One) | |
| 26 | +public define String | |
| 27 | 27 | generate_type_message_description |
| 28 | 28 | ( |
| 29 | - Stream stream, | |
| 29 | + //Stream stream, | |
| 30 | 30 | DS_Type ds_type //type description |
| 31 | 31 | )= |
| 32 | 32 | since ds_type is ds_type(type_name, _, alternatives), |
| 33 | 33 | with title = type_name+" message format", |
| 34 | - write_string(stream, | |
| 34 | + | |
| 35 | 35 | "\n"+ |
| 36 | 36 | " "+title+"\n"+ |
| 37 | 37 | " "+fill(length(title), '=')+"\n\n"+ |
| 38 | 38 | // insert_type_message_description(ds_type)+ |
| 39 | 39 | "\n" |
| 40 | - ) | |
| 41 | - . | |
| 40 | +. | |
| 42 | 41 | |
| 43 | 42 | public define String |
| 44 | 43 | anb_type_to_message |
| ... | ... | @@ -153,16 +152,15 @@ define String |
| 153 | 152 | } |
| 154 | 153 | . |
| 155 | 154 | |
| 156 | -public define Maybe(One) | |
| 155 | +public define String | |
| 157 | 156 | generate_type_to_message |
| 158 | 157 | ( |
| 159 | - Stream stream, | |
| 160 | 158 | DS_Type ds_type //type description |
| 161 | - )= | |
| 159 | + )= | |
| 162 | 160 | since ds_type is ds_type(type_name, _, alternatives), |
| 163 | 161 | with lower_type_name = "_"+to_lower(type_name), |
| 164 | 162 | type_msg = lower_type_name+"_message", |
| 165 | - write_string(stream, | |
| 163 | + | |
| 166 | 164 | "public define Message\n"+ |
| 167 | 165 | " to_Message\n"+ |
| 168 | 166 | " (\n"+ |
| ... | ... | @@ -175,7 +173,6 @@ public define Maybe(One) |
| 175 | 173 | " };\n"+ |
| 176 | 174 | " "+type_msg+"\n"+ |
| 177 | 175 | ".\n\n" |
| 178 | - ) | |
| 179 | 176 | . |
| 180 | 177 | |
| 181 | 178 | /****************************** FROM MESSAGE ***********************************/ |
| ... | ... | @@ -308,7 +305,7 @@ define String |
| 308 | 305 | since h is component(b_list, anb_type, name, comment), |
| 309 | 306 | indent + "// [type = "+(if b_list is list then "List(" else "")+dump(anb_type)+(if b_list is list then ")" else "")+"] "+alt_name+"."+name+"\n"+ |
| 310 | 307 | (if b_list is list then |
| 311 | - anb_type_list_from_message(indent, type_msg, anb_type, name, name, brace_counter) | |
| 308 | + anb_type_list_from_message(indent, type_msg, anb_type, name, "_"+name+"_", brace_counter) | |
| 312 | 309 | else |
| 313 | 310 | anb_type_from_message(indent, type_msg, anb_type, name, "_"+name+"_", brace_counter)) |
| 314 | 311 | + |
| ... | ... | @@ -371,16 +368,15 @@ define String |
| 371 | 368 | } |
| 372 | 369 | . |
| 373 | 370 | |
| 374 | -public define Maybe(One) | |
| 371 | +public define String | |
| 375 | 372 | generate_type_from_message |
| 376 | 373 | ( |
| 377 | - Stream stream, | |
| 378 | 374 | DS_Type ds_type //type description |
| 379 | 375 | )= |
| 380 | 376 | since ds_type is ds_type(type_name, _, alternatives), |
| 381 | 377 | with lower_type_name = "_"+to_lower(type_name), |
| 382 | 378 | type_msg = lower_type_name+"_message", |
| 383 | - write_string(stream, | |
| 379 | + | |
| 384 | 380 | "public define Maybe("+type_name+")\n"+ |
| 385 | 381 | " from_Message\n"+ |
| 386 | 382 | " (\n"+ |
| ... | ... | @@ -395,5 +391,4 @@ public define Maybe(One) |
| 395 | 391 | " failure //Type not found in message !\n"+ |
| 396 | 392 | " }}\n"+ |
| 397 | 393 | ".\n\n" |
| 398 | - ) | |
| 399 | 394 | . | ... | ... |
src/main.anubis
| ... | ... | @@ -32,74 +32,106 @@ public define List(DS_Message) the_messages_list = |
| 32 | 32 | ]) |
| 33 | 33 | ]. |
| 34 | 34 | |
| 35 | -public define List(DS_Type) the_types_list = | |
| 35 | +public define List(DS_Type_File) the_types_list = | |
| 36 | 36 | [ |
| 37 | - ds_type("User_Account", [ | |
| 38 | - alternative("account", [ | |
| 39 | - component(string, "first_name"), | |
| 40 | - component(string, "last_name"), | |
| 41 | - component(int, "extension") | |
| 37 | + ds_type_file( auto, auto, | |
| 38 | + [ | |
| 39 | + ds_type("User_Account", [ | |
| 40 | + alternative("account", [ | |
| 41 | + component(string, "first_name"), | |
| 42 | + component(string, "last_name"), | |
| 43 | + component(int, "extension") | |
| 44 | + ]), | |
| 45 | + alternative("account_ext", [ | |
| 46 | + component(string, "first_name"), | |
| 47 | + component(string, "last_name"), | |
| 48 | + component(list, int, "extension_list") | |
| 49 | + ]), | |
| 50 | + alternative("account_super_extended", [ | |
| 51 | + component(string, "first_name"), | |
| 52 | + component(string, "last_name"), | |
| 53 | + component(list, int, "extension_list"), | |
| 54 | + component(extern_type("DB_id", "calexium_lib/model/db_types.anubis"), "db_id") | |
| 55 | + ]) | |
| 42 | 56 | ]), |
| 43 | - alternative("account_ext", [ | |
| 44 | - component(string, "first_name"), | |
| 45 | - component(string, "last_name"), | |
| 46 | - component(list, int, "extension_list") | |
| 47 | - ]), | |
| 48 | - alternative("account_super_extended", [ | |
| 49 | - component(string, "first_name"), | |
| 50 | - component(string, "last_name"), | |
| 51 | - component(list, int, "extension_list"), | |
| 52 | - component(extern_type("DB_id", "calexium_lib/model/db_types.anubis"), "db_id") | |
| 53 | - ]) | |
| 54 | - ]), | |
| 55 | - | |
| 56 | - ds_type("Trunk_SIP", [ | |
| 57 | - alternative("account", [ | |
| 58 | - component(string, "login"), | |
| 59 | - component(string, "password"), | |
| 60 | - component(string, "host") | |
| 61 | - ]) | |
| 62 | - ]), | |
| 63 | - | |
| 64 | - ds_type("HK_App", [ | |
| 65 | - alternative("hk_app", [ | |
| 66 | - component(string, "app_name", comment("Name of the application")), | |
| 67 | - component(ds_type("HK_Icon"), "icon", comment("Icon description")), | |
| 68 | - component(ds_type("HK_Help_Text"), "help"), | |
| 69 | - component(list, ds_type("HK_Table"),"hk_tables") | |
| 70 | - ]) | |
| 71 | - ]), | |
| 72 | - ds_type("HK_Database", [ | |
| 73 | - alternative("hk_database", [ | |
| 74 | - component(string, "name", comment("name of the database")), | |
| 75 | - component(list, ds_type("HK_App"), "apps", comment("list of applications")) | |
| 76 | - ]) | |
| 77 | - ]), | |
| 78 | - | |
| 79 | - ds_type("HK_Help_Text", [ | |
| 80 | - enum("no_help_text", comment("no help text available")), | |
| 81 | - alternative("help_text_TAG", [component(string, "tag_name", comment("TAG use with Anubis translation tool /locale/L3.anubis"))]), | |
| 82 | - alternative("help_text", [component(string, "help_text", comment("pure text to show"))]) | |
| 83 | - ]), | |
| 84 | - ds_type("HK_Icon", [ | |
| 85 | - enum("no_icon"), | |
| 86 | - alternative("icon16", [component(string, "name")]) | |
| 57 | + | |
| 58 | + ds_type("Trunk_SIP", [ | |
| 59 | + alternative("account", [ | |
| 60 | + component(string, "login"), | |
| 61 | + component(string, "password"), | |
| 62 | + component(string, "host") | |
| 63 | + ]) | |
| 64 | + ]), | |
| 65 | + | |
| 66 | + ds_type("HK_App", [ | |
| 67 | + alternative("hk_app", [ | |
| 68 | + component(string, "app_name", comment("Name of the application")), | |
| 69 | + component(ds_type("HK_Icon"), "icon", comment("Icon description")), | |
| 70 | + component(ds_type("HK_Help_Text"), "help"), | |
| 71 | + component(list, ds_type("HK_Table"),"hk_tables") | |
| 72 | + ]) | |
| 73 | + ]), | |
| 74 | + ds_type("HK_Database", [ | |
| 75 | + alternative("hk_database", [ | |
| 76 | + component(string, "name", comment("name of the database")), | |
| 77 | + component(list, ds_type("HK_App"), "apps", comment("list of applications")) | |
| 78 | + ]) | |
| 79 | + ]), | |
| 80 | + | |
| 81 | + ds_type("HK_Help_Text", [ | |
| 82 | + enum("no_help_text", comment("no help text available")), | |
| 83 | + alternative("help_text_TAG", [component(string, "tag_name", comment("TAG use with Anubis translation tool /locale/L3.anubis"))]), | |
| 84 | + alternative("help_text", [component(string, "help_text", comment("pure text to show"))]) | |
| 85 | + ]), | |
| 86 | + ds_type("HK_Icon", [ | |
| 87 | + enum("no_icon"), | |
| 88 | + alternative("icon16", [component(string, "name")]) | |
| 89 | + ]), | |
| 90 | + | |
| 91 | + ds_type("HK_Form", no_message, [ | |
| 92 | + alternative("hk_form_in_list", [ | |
| 93 | + component(string, "table_name", comment("database table name which belonging this form")), | |
| 94 | + component(string, "view_name", comment("name of the view")), | |
| 95 | + component(list, extern_type("HK_Form_Entry", "hk_form_entry.anubis"), "list"), | |
| 96 | + component(list, extern_type("HK_Form_Tab", "hk_form_tab.anubis"), "tabs") | |
| 97 | + ]), | |
| 98 | + alternative("hk_form_in_table", [ | |
| 99 | + component(string, "table_name", comment("database table name which belonging this form")), | |
| 100 | + component(string, "view_name", comment("name of the view")), | |
| 101 | + component(extern_type("HK_Form_Table", "hk_form_table.anubis"), "form_in_table") | |
| 102 | + ]) | |
| 103 | + ]) | |
| 87 | 104 | ]), |
| 88 | 105 | |
| 89 | - ds_type("HK_Form", no_message, [ | |
| 90 | - alternative("hk_form_in_list", [ | |
| 91 | - component(string, "table_name", comment("database table name which belonging this form")), | |
| 92 | - component(string, "view_name", comment("name of the view")), | |
| 93 | - component(list, extern_type("HK_Form_Entry", "hk_form_entry.anubis"), "list"), | |
| 94 | - component(list, extern_type("HK_Form_Tab", "hk_form_tab.anubis"), "tabs") | |
| 106 | + ds_type_file( relative_path("hayamiki_lib/view/types/"), name("HK_Editor_Table"), | |
| 107 | + [ | |
| 108 | + ds_type("HK_Editor_Table_Cell", [ | |
| 109 | + enum("empty"), | |
| 110 | + alternative("column", [ | |
| 111 | + component(string, "column_name") | |
| 112 | + ]), | |
| 113 | + alternative("label", [ | |
| 114 | + component(string, "label"), | |
| 115 | + ]), | |
| 116 | + alternative("table", [ | |
| 117 | + component(list, ds_type("HK_Editor_Table_Line"), "lines") | |
| 118 | + ]) | |
| 95 | 119 | ]), |
| 96 | - alternative("hk_form_in_table", [ | |
| 97 | - component(string, "table_name", comment("database table name which belonging this form")), | |
| 98 | - component(string, "view_name", comment("name of the view")), | |
| 99 | - component(extern_type("HK_Form_Table", "hk_form_table.anubis"), "form_in_table") | |
| 100 | - ]) | |
| 101 | - ]) | |
| 102 | - ]. | |
| 120 | + | |
| 121 | + ds_type("HK_Editor_Table_Line", [ | |
| 122 | + alternative("line", [ | |
| 123 | + component(list, ds_type("HK_Editor_Table_Cell"), "cells") | |
| 124 | + ]) | |
| 125 | + ]), | |
| 126 | + | |
| 127 | + ds_type("HK_Editor_Table", [ | |
| 128 | + alternative("table", [ | |
| 129 | + component(list, ds_type("HK_Editor_Table_Line"), "lines") | |
| 130 | + ]) | |
| 131 | + ]), | |
| 132 | + ]) | |
| 133 | + ] | |
| 134 | +. | |
| 103 | 135 | |
| 104 | 136 | |
| 105 | 137 | ... | ... |