aas-core-codegen 0.0.16__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (604) hide show
  1. aas_core_codegen/__init__.py +6 -0
  2. aas_core_codegen/__main__.py +8 -0
  3. aas_core_codegen/common.py +500 -0
  4. aas_core_codegen/cpp/__init__.py +1 -0
  5. aas_core_codegen/cpp/aas_common/__init__.py +6 -0
  6. aas_core_codegen/cpp/aas_common/_generate.py +713 -0
  7. aas_core_codegen/cpp/common.py +681 -0
  8. aas_core_codegen/cpp/constants/__init__.py +6 -0
  9. aas_core_codegen/cpp/constants/_generate.py +568 -0
  10. aas_core_codegen/cpp/description.py +654 -0
  11. aas_core_codegen/cpp/enhancing/__init__.py +4 -0
  12. aas_core_codegen/cpp/enhancing/_generate.py +993 -0
  13. aas_core_codegen/cpp/iteration/__init__.py +6 -0
  14. aas_core_codegen/cpp/iteration/_generate.py +2332 -0
  15. aas_core_codegen/cpp/jsonization/__init__.py +6 -0
  16. aas_core_codegen/cpp/jsonization/_generate.py +2619 -0
  17. aas_core_codegen/cpp/main.py +694 -0
  18. aas_core_codegen/cpp/naming.py +170 -0
  19. aas_core_codegen/cpp/optionaling.py +557 -0
  20. aas_core_codegen/cpp/pattern/__init__.py +6 -0
  21. aas_core_codegen/cpp/pattern/_generate.py +508 -0
  22. aas_core_codegen/cpp/revm/__init__.py +6 -0
  23. aas_core_codegen/cpp/revm/_generate.py +1149 -0
  24. aas_core_codegen/cpp/stringification/__init__.py +5 -0
  25. aas_core_codegen/cpp/stringification/_generate.py +955 -0
  26. aas_core_codegen/cpp/structure/__init__.py +7 -0
  27. aas_core_codegen/cpp/structure/_generate.py +1503 -0
  28. aas_core_codegen/cpp/transpilation.py +1383 -0
  29. aas_core_codegen/cpp/unrolling.py +159 -0
  30. aas_core_codegen/cpp/verification/__init__.py +6 -0
  31. aas_core_codegen/cpp/verification/_generate.py +3073 -0
  32. aas_core_codegen/cpp/visitation/__init__.py +6 -0
  33. aas_core_codegen/cpp/visitation/_generate.py +521 -0
  34. aas_core_codegen/cpp/wstringification/__init__.py +5 -0
  35. aas_core_codegen/cpp/wstringification/_generate.py +586 -0
  36. aas_core_codegen/cpp/xmlization/__init__.py +6 -0
  37. aas_core_codegen/cpp/xmlization/_generate.py +5373 -0
  38. aas_core_codegen/cpp/yielding.py +201 -0
  39. aas_core_codegen/csharp/__init__.py +1 -0
  40. aas_core_codegen/csharp/common.py +224 -0
  41. aas_core_codegen/csharp/constants/__init__.py +5 -0
  42. aas_core_codegen/csharp/constants/_generate.py +409 -0
  43. aas_core_codegen/csharp/copying/__init__.py +4 -0
  44. aas_core_codegen/csharp/copying/_generate.py +498 -0
  45. aas_core_codegen/csharp/description.py +1103 -0
  46. aas_core_codegen/csharp/enhancing/__init__.py +4 -0
  47. aas_core_codegen/csharp/enhancing/_generate.py +667 -0
  48. aas_core_codegen/csharp/jsonization/__init__.py +4 -0
  49. aas_core_codegen/csharp/jsonization/_generate.py +1630 -0
  50. aas_core_codegen/csharp/main.py +421 -0
  51. aas_core_codegen/csharp/naming.py +157 -0
  52. aas_core_codegen/csharp/reporting/__init__.py +4 -0
  53. aas_core_codegen/csharp/reporting/_generate.py +266 -0
  54. aas_core_codegen/csharp/stringification/__init__.py +4 -0
  55. aas_core_codegen/csharp/stringification/_generate.py +243 -0
  56. aas_core_codegen/csharp/structure/__init__.py +6 -0
  57. aas_core_codegen/csharp/structure/_generate.py +1341 -0
  58. aas_core_codegen/csharp/transpilation.py +990 -0
  59. aas_core_codegen/csharp/unrolling.py +211 -0
  60. aas_core_codegen/csharp/verification/__init__.py +6 -0
  61. aas_core_codegen/csharp/verification/_generate.py +1457 -0
  62. aas_core_codegen/csharp/visitation/__init__.py +5 -0
  63. aas_core_codegen/csharp/visitation/_generate.py +579 -0
  64. aas_core_codegen/csharp/xmlization/__init__.py +4 -0
  65. aas_core_codegen/csharp/xmlization/_generate.py +1980 -0
  66. aas_core_codegen/golang/__init__.py +1 -0
  67. aas_core_codegen/golang/aas_common/__init__.py +4 -0
  68. aas_core_codegen/golang/aas_common/_generate.py +152 -0
  69. aas_core_codegen/golang/common.py +303 -0
  70. aas_core_codegen/golang/constants/__init__.py +5 -0
  71. aas_core_codegen/golang/constants/_generate.py +339 -0
  72. aas_core_codegen/golang/description.py +501 -0
  73. aas_core_codegen/golang/enhancing/__init__.py +4 -0
  74. aas_core_codegen/golang/enhancing/_generate.py +527 -0
  75. aas_core_codegen/golang/jsonization/__init__.py +4 -0
  76. aas_core_codegen/golang/jsonization/_generate.py +1740 -0
  77. aas_core_codegen/golang/main.py +368 -0
  78. aas_core_codegen/golang/naming.py +412 -0
  79. aas_core_codegen/golang/pointering.py +631 -0
  80. aas_core_codegen/golang/reporting/__init__.py +4 -0
  81. aas_core_codegen/golang/reporting/_generate.py +218 -0
  82. aas_core_codegen/golang/stringification/__init__.py +4 -0
  83. aas_core_codegen/golang/stringification/_generate.py +394 -0
  84. aas_core_codegen/golang/structure/__init__.py +6 -0
  85. aas_core_codegen/golang/structure/_generate.py +1493 -0
  86. aas_core_codegen/golang/transpilation.py +1191 -0
  87. aas_core_codegen/golang/unrolling.py +159 -0
  88. aas_core_codegen/golang/verification/__init__.py +6 -0
  89. aas_core_codegen/golang/verification/_generate.py +1513 -0
  90. aas_core_codegen/golang/xmlization/__init__.py +4 -0
  91. aas_core_codegen/golang/xmlization/_generate.py +2507 -0
  92. aas_core_codegen/infer_for_schema/__init__.py +21 -0
  93. aas_core_codegen/infer_for_schema/_inline.py +693 -0
  94. aas_core_codegen/infer_for_schema/_len.py +527 -0
  95. aas_core_codegen/infer_for_schema/_pattern.py +311 -0
  96. aas_core_codegen/infer_for_schema/_set.py +394 -0
  97. aas_core_codegen/infer_for_schema/_stringify.py +201 -0
  98. aas_core_codegen/infer_for_schema/_types.py +135 -0
  99. aas_core_codegen/infer_for_schema/match.py +122 -0
  100. aas_core_codegen/intermediate/__init__.py +78 -0
  101. aas_core_codegen/intermediate/_hierarchy.py +397 -0
  102. aas_core_codegen/intermediate/_stringify.py +989 -0
  103. aas_core_codegen/intermediate/_translate.py +5128 -0
  104. aas_core_codegen/intermediate/_types.py +2901 -0
  105. aas_core_codegen/intermediate/construction.py +750 -0
  106. aas_core_codegen/intermediate/doc.py +344 -0
  107. aas_core_codegen/intermediate/pattern_verification.py +428 -0
  108. aas_core_codegen/intermediate/revm.py +985 -0
  109. aas_core_codegen/intermediate/type_inference.py +2266 -0
  110. aas_core_codegen/java/__init__.py +1 -0
  111. aas_core_codegen/java/common.py +197 -0
  112. aas_core_codegen/java/constants/__init__.py +5 -0
  113. aas_core_codegen/java/constants/_generate.py +334 -0
  114. aas_core_codegen/java/copying/__init__.py +4 -0
  115. aas_core_codegen/java/copying/_generate.py +502 -0
  116. aas_core_codegen/java/description.py +774 -0
  117. aas_core_codegen/java/enhancing/__init__.py +4 -0
  118. aas_core_codegen/java/enhancing/_generate.py +820 -0
  119. aas_core_codegen/java/generation/__init__.py +5 -0
  120. aas_core_codegen/java/generation/_generate.py +285 -0
  121. aas_core_codegen/java/jsonization/__init__.py +4 -0
  122. aas_core_codegen/java/jsonization/_generate.py +1472 -0
  123. aas_core_codegen/java/main.py +438 -0
  124. aas_core_codegen/java/naming.py +187 -0
  125. aas_core_codegen/java/optional.py +514 -0
  126. aas_core_codegen/java/reporting/__init__.py +4 -0
  127. aas_core_codegen/java/reporting/_generate.py +248 -0
  128. aas_core_codegen/java/stringification/__init__.py +4 -0
  129. aas_core_codegen/java/stringification/_generate.py +212 -0
  130. aas_core_codegen/java/structure/__init__.py +6 -0
  131. aas_core_codegen/java/structure/_generate.py +1767 -0
  132. aas_core_codegen/java/transpilation.py +1111 -0
  133. aas_core_codegen/java/verification/__init__.py +6 -0
  134. aas_core_codegen/java/verification/_generate.py +1536 -0
  135. aas_core_codegen/java/visitation/__init__.py +5 -0
  136. aas_core_codegen/java/visitation/_generate.py +689 -0
  137. aas_core_codegen/java/xmlization/__init__.py +4 -0
  138. aas_core_codegen/java/xmlization/_generate.py +2274 -0
  139. aas_core_codegen/jsonld/__init__.py +1 -0
  140. aas_core_codegen/jsonld/main.py +455 -0
  141. aas_core_codegen/jsonschema/__init__.py +1 -0
  142. aas_core_codegen/jsonschema/main.py +982 -0
  143. aas_core_codegen/main.py +245 -0
  144. aas_core_codegen/naming.py +133 -0
  145. aas_core_codegen/opcua/__init__.py +1 -0
  146. aas_core_codegen/opcua/main.py +1525 -0
  147. aas_core_codegen/opcua/naming.py +126 -0
  148. aas_core_codegen/parse/__init__.py +46 -0
  149. aas_core_codegen/parse/_rules.py +796 -0
  150. aas_core_codegen/parse/_stringify.py +532 -0
  151. aas_core_codegen/parse/_translate.py +3940 -0
  152. aas_core_codegen/parse/_types.py +973 -0
  153. aas_core_codegen/parse/retree/__init__.py +46 -0
  154. aas_core_codegen/parse/retree/_fix.py +434 -0
  155. aas_core_codegen/parse/retree/_parse.py +1143 -0
  156. aas_core_codegen/parse/retree/_render.py +298 -0
  157. aas_core_codegen/parse/retree/_stringify.py +199 -0
  158. aas_core_codegen/parse/retree/_types.py +362 -0
  159. aas_core_codegen/parse/retree/_visitor.py +70 -0
  160. aas_core_codegen/parse/tree.py +1303 -0
  161. aas_core_codegen/protobuf/__init__.py +1 -0
  162. aas_core_codegen/protobuf/common.py +225 -0
  163. aas_core_codegen/protobuf/description.py +1102 -0
  164. aas_core_codegen/protobuf/main.py +115 -0
  165. aas_core_codegen/protobuf/naming.py +143 -0
  166. aas_core_codegen/protobuf/structure/__init__.py +6 -0
  167. aas_core_codegen/protobuf/structure/_generate.py +502 -0
  168. aas_core_codegen/py.typed +1 -0
  169. aas_core_codegen/python/__init__.py +1 -0
  170. aas_core_codegen/python/aas_common/__init__.py +4 -0
  171. aas_core_codegen/python/aas_common/_generate.py +63 -0
  172. aas_core_codegen/python/common.py +406 -0
  173. aas_core_codegen/python/constants/__init__.py +5 -0
  174. aas_core_codegen/python/constants/_generate.py +377 -0
  175. aas_core_codegen/python/description.py +508 -0
  176. aas_core_codegen/python/jsonization/__init__.py +4 -0
  177. aas_core_codegen/python/jsonization/_generate.py +1391 -0
  178. aas_core_codegen/python/main.py +323 -0
  179. aas_core_codegen/python/naming.py +255 -0
  180. aas_core_codegen/python/stringification/__init__.py +4 -0
  181. aas_core_codegen/python/stringification/_generate.py +129 -0
  182. aas_core_codegen/python/structure/__init__.py +6 -0
  183. aas_core_codegen/python/structure/_generate.py +1801 -0
  184. aas_core_codegen/python/transpilation.py +958 -0
  185. aas_core_codegen/python/unrolling.py +156 -0
  186. aas_core_codegen/python/verification/__init__.py +6 -0
  187. aas_core_codegen/python/verification/_generate.py +1471 -0
  188. aas_core_codegen/python/xmlization/__init__.py +4 -0
  189. aas_core_codegen/python/xmlization/_generate.py +3003 -0
  190. aas_core_codegen/python_protobuf/__init__.py +1 -0
  191. aas_core_codegen/python_protobuf/main.py +1424 -0
  192. aas_core_codegen/python_protobuf/naming.py +85 -0
  193. aas_core_codegen/rdf_shacl/__init__.py +1 -0
  194. aas_core_codegen/rdf_shacl/_description.py +351 -0
  195. aas_core_codegen/rdf_shacl/common.py +206 -0
  196. aas_core_codegen/rdf_shacl/main.py +114 -0
  197. aas_core_codegen/rdf_shacl/naming.py +145 -0
  198. aas_core_codegen/rdf_shacl/rdf.py +435 -0
  199. aas_core_codegen/rdf_shacl/shacl.py +453 -0
  200. aas_core_codegen/run.py +124 -0
  201. aas_core_codegen/smoke/__init__.py +1 -0
  202. aas_core_codegen/smoke/main.py +219 -0
  203. aas_core_codegen/specific_implementations.py +72 -0
  204. aas_core_codegen/stringify.py +333 -0
  205. aas_core_codegen/typescript/__init__.py +1 -0
  206. aas_core_codegen/typescript/aas_common/__init__.py +4 -0
  207. aas_core_codegen/typescript/aas_common/_generate.py +472 -0
  208. aas_core_codegen/typescript/common.py +340 -0
  209. aas_core_codegen/typescript/constants/__init__.py +5 -0
  210. aas_core_codegen/typescript/constants/_generate.py +347 -0
  211. aas_core_codegen/typescript/description.py +530 -0
  212. aas_core_codegen/typescript/jsonization/__init__.py +4 -0
  213. aas_core_codegen/typescript/jsonization/_generate.py +1510 -0
  214. aas_core_codegen/typescript/main.py +258 -0
  215. aas_core_codegen/typescript/naming.py +189 -0
  216. aas_core_codegen/typescript/stringification/__init__.py +4 -0
  217. aas_core_codegen/typescript/stringification/_generate.py +367 -0
  218. aas_core_codegen/typescript/structure/__init__.py +6 -0
  219. aas_core_codegen/typescript/structure/_generate.py +2500 -0
  220. aas_core_codegen/typescript/transpilation.py +1051 -0
  221. aas_core_codegen/typescript/unrolling.py +159 -0
  222. aas_core_codegen/typescript/verification/__init__.py +6 -0
  223. aas_core_codegen/typescript/verification/_generate.py +1578 -0
  224. aas_core_codegen/xsd/__init__.py +1 -0
  225. aas_core_codegen/xsd/main.py +1187 -0
  226. aas_core_codegen/xsd/naming.py +83 -0
  227. aas_core_codegen/yielding/__init__.py +1 -0
  228. aas_core_codegen/yielding/flow.py +139 -0
  229. aas_core_codegen/yielding/linear.py +754 -0
  230. aas_core_codegen-0.0.16.dist-info/METADATA +211 -0
  231. aas_core_codegen-0.0.16.dist-info/RECORD +604 -0
  232. aas_core_codegen-0.0.16.dist-info/WHEEL +5 -0
  233. aas_core_codegen-0.0.16.dist-info/entry_points.txt +3 -0
  234. aas_core_codegen-0.0.16.dist-info/licenses/AUTHORS +9 -0
  235. aas_core_codegen-0.0.16.dist-info/licenses/LICENSE +23 -0
  236. aas_core_codegen-0.0.16.dist-info/top_level.txt +2 -0
  237. dev/continuous_integration/__init__.py +1 -0
  238. dev/continuous_integration/check_help_in_readme.py +208 -0
  239. dev/continuous_integration/check_init_and_pyproject_consistent.py +154 -0
  240. dev/continuous_integration/precommit.py +400 -0
  241. dev/dev_scripts/__init__.py +1 -0
  242. dev/dev_scripts/compare_rendered_regexes_against_source_py.py +42 -0
  243. dev/dev_scripts/copy_to_aas_core3_cpp.py +100 -0
  244. dev/dev_scripts/copy_to_aas_core3_java.py +90 -0
  245. dev/dev_scripts/download_latest_aas_core_meta_v3.py +114 -0
  246. dev/dev_scripts/draw_bipartite_graph_based_on_lines.py +37 -0
  247. dev/dev_scripts/run_tests_with_rerecord.py +69 -0
  248. dev/dev_scripts/update_to_aas_core_meta.py +174 -0
  249. dev/integration_tests/input/jsonschema/boilerplate/main.py +55 -0
  250. dev/integration_tests/input/meta_model.py +38 -0
  251. dev/integration_tests/input/python/boilerplate/main.py +153 -0
  252. dev/integration_tests/main.py +258 -0
  253. dev/test_data/csharp/test_structure/concrete_class_with_descendants/meta_model.py +15 -0
  254. dev/test_data/csharp/test_structure/constructor_without_arguments/all_properties_optional/meta_model.py +9 -0
  255. dev/test_data/csharp/test_structure/constructor_without_arguments/no_properties/meta_model.py +6 -0
  256. dev/test_data/csharp/test_verification/builtin_functions/len/on_list/meta_model.py +20 -0
  257. dev/test_data/csharp/test_verification/builtin_functions/len/on_str/meta_model.py +16 -0
  258. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_prefix/meta_model.py +8 -0
  259. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_suffix/meta_model.py +8 -0
  260. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_group_with_quantifier/meta_model.py +8 -0
  261. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_the_middle/meta_model.py +8 -0
  262. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_union/meta_model.py +8 -0
  263. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/single_utf32_literal/meta_model.py +8 -0
  264. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_within_group/meta_model.py +8 -0
  265. dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_without_group/meta_model.py +8 -0
  266. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_beginning/meta_model.py +8 -0
  267. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_end/meta_model.py +8 -0
  268. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/in_the_middle/meta_model.py +8 -0
  269. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/multiple/meta_model.py +8 -0
  270. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single/meta_model.py +8 -0
  271. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single_with_quantifier/meta_model.py +8 -0
  272. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/mixed_with_non_utf32/meta_model.py +8 -0
  273. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/more_than_two_high_surrogates/meta_model.py +8 -0
  274. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges/meta_model.py +8 -0
  275. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges_mixed_with_non_utf32/meta_model.py +8 -0
  276. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate/meta_model.py +8 -0
  277. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate_with_quantifier/meta_model.py +8 -0
  278. dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/two_high_surrogates/meta_model.py +8 -0
  279. dev/test_data/intermediate/expected/class/empty/meta_model.py +6 -0
  280. dev/test_data/intermediate/expected/class/implementation_specific_method/meta_model.py +8 -0
  281. dev/test_data/intermediate/expected/class/inheritance/meta_model.py +41 -0
  282. dev/test_data/intermediate/expected/class/methods_with_contracts/meta_model.py +15 -0
  283. dev/test_data/intermediate/expected/class/only_method_no_property/meta_model.py +7 -0
  284. dev/test_data/intermediate/expected/class/only_property_no_method/meta_model.py +9 -0
  285. dev/test_data/intermediate/expected/constant/constant_set/of_enum/meta_model.py +12 -0
  286. dev/test_data/intermediate/expected/constant/constant_set/of_str/meta_model.py +4 -0
  287. dev/test_data/intermediate/expected/constant/constant_set/with_description/meta_model.py +6 -0
  288. dev/test_data/intermediate/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
  289. dev/test_data/intermediate/expected/constant/constant_str/only_value/meta_model.py +7 -0
  290. dev/test_data/intermediate/expected/constant/constant_str/with_description/meta_model.py +5 -0
  291. dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_in_literal/meta_model.py +20 -0
  292. dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_outside_literal/meta_model.py +20 -0
  293. dev/test_data/intermediate/expected/empty/meta_model.py +2 -0
  294. dev/test_data/intermediate/expected/enumeration/meta_model.py +9 -0
  295. dev/test_data/intermediate/expected/interface/basic/meta_model.py +14 -0
  296. dev/test_data/intermediate/expected/interface/empty/meta_model.py +7 -0
  297. dev/test_data/intermediate/expected/interface/inheritance/meta_model.py +27 -0
  298. dev/test_data/intermediate/expected/interface/method_signature/meta_model.py +10 -0
  299. dev/test_data/intermediate/expected/interface/only_constructor/meta_model.py +11 -0
  300. dev/test_data/intermediate/expected/method/non_mutating/implementation_specific/meta_model.py +12 -0
  301. dev/test_data/intermediate/expected/method/non_mutating/understood/meta_model.py +11 -0
  302. dev/test_data/intermediate/expected/type_annotation/atomic/meta_model.py +9 -0
  303. dev/test_data/intermediate/expected/type_annotation/subscripted/class/meta_model.py +13 -0
  304. dev/test_data/intermediate/expected/type_annotation/subscripted/primitive/meta_model.py +9 -0
  305. dev/test_data/intermediate/unexpected/constant_set/of_enum/enumeration_literals_in_subset_outside_of_superset/meta_model.py +20 -0
  306. dev/test_data/intermediate/unexpected/constant_set/of_enum/invalid_literal/meta_model.py +11 -0
  307. dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_between_enumeration_and_literal/meta_model.py +30 -0
  308. dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_in_enumerations_between_subset_and_superset/meta_model.py +21 -0
  309. dev/test_data/intermediate/unexpected/constant_set/of_str/literals_in_subset_outside_of_superset/meta_model.py +18 -0
  310. dev/test_data/intermediate/unexpected/constant_set/of_str/mismatch_between_type_annotation_and_literals/meta_model.py +10 -0
  311. dev/test_data/intermediate/unexpected/constant_set/of_str/superset_and_subset_mismatch_in_type/meta_model.py +12 -0
  312. dev/test_data/intermediate/unexpected/constraints/dangling_constraintref/meta_model.py +18 -0
  313. dev/test_data/intermediate/unexpected/constraints/duplicate_constraints/meta_model.py +20 -0
  314. dev/test_data/intermediate/unexpected/documentation/unexpected_documentation_elements/meta_model.py +34 -0
  315. dev/test_data/intermediate/unexpected/invariant/class_invariant_uses_re/meta_model.py +10 -0
  316. dev/test_data/intermediate/unexpected/invariant/invariant_of_constrained_primitive_uses_re/meta_model.py +7 -0
  317. dev/test_data/intermediate/unexpected/invariant/unexpected_argument_count_to_len/meta_model.py +20 -0
  318. dev/test_data/intermediate/unexpected/invariant/unhandled_built_in_function/meta_model.py +16 -0
  319. dev/test_data/intermediate/unexpected/method_definitions/non_constant_default/meta_model.py +7 -0
  320. dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/default_non_none/meta_model.py +16 -0
  321. dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/no_default/meta_model.py +16 -0
  322. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/after_inheritance/meta_model.py +58 -0
  323. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/type_missmatch/meta_model.py +9 -0
  324. dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/within_class/meta_model.py +22 -0
  325. dev/test_data/jsonschema/test_main/regression_when_len_constraints_on_inherited_property/meta_model.py +28 -0
  326. dev/test_data/opcua/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
  327. dev/test_data/opcua/test_main/classes_with_invariants/meta_model.py +21 -0
  328. dev/test_data/opcua/test_main/concrete_class_with_descendant/meta_model.py +27 -0
  329. dev/test_data/opcua/test_main/concrete_class_with_enum/meta_model.py +21 -0
  330. dev/test_data/opcua/test_main/concrete_class_with_list_of_instances/meta_model.py +21 -0
  331. dev/test_data/opcua/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  332. dev/test_data/opcua/test_main/concrete_class_with_string/meta_model.py +13 -0
  333. dev/test_data/opcua/test_main/constrained_primitive/meta_model.py +20 -0
  334. dev/test_data/opcua/test_main/multiple_inheritance/meta_model.py +25 -0
  335. dev/test_data/parse/expected/constant/constant_set/of_enum/meta_model.py +12 -0
  336. dev/test_data/parse/expected/constant/constant_set/of_str/meta_model.py +4 -0
  337. dev/test_data/parse/expected/constant/constant_set/with_description/meta_model.py +6 -0
  338. dev/test_data/parse/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
  339. dev/test_data/parse/expected/constant/constant_str/only_value/meta_model.py +7 -0
  340. dev/test_data/parse/expected/constant/constant_str/with_description/meta_model.py +5 -0
  341. dev/test_data/parse/expected/enum/ok/meta_model.py +15 -0
  342. dev/test_data/parse/expected/implementation_specific_class/properties_and_methods_in_implementation_specific_class/meta_model.py +17 -0
  343. dev/test_data/parse/expected/inheritance/basic/meta_model.py +11 -0
  344. dev/test_data/parse/expected/inheritance/diamond/meta_model.py +26 -0
  345. dev/test_data/parse/expected/inheritance/inheritance_from_concrete_class/meta_model.py +10 -0
  346. dev/test_data/parse/expected/invariants/in_relation/meta_model.py +16 -0
  347. dev/test_data/parse/expected/method/arguments/meta_model.py +7 -0
  348. dev/test_data/parse/expected/method/basic/meta_model.py +7 -0
  349. dev/test_data/parse/expected/method/contracts/condition_as_keyword_argument/meta_model.py +8 -0
  350. dev/test_data/parse/expected/method/contracts/condition_as_positional_argument/meta_model.py +8 -0
  351. dev/test_data/parse/expected/method/contracts/description_as_keyword_argument/meta_model.py +8 -0
  352. dev/test_data/parse/expected/method/contracts/description_as_positional_argument/meta_model.py +8 -0
  353. dev/test_data/parse/expected/method/contracts/multiple_contracts_in_order/meta_model.py +17 -0
  354. dev/test_data/parse/expected/method/contracts/postcondition/basic/meta_model.py +10 -0
  355. dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_keyword_arguments/meta_model.py +9 -0
  356. dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_positional_arguments/meta_model.py +9 -0
  357. dev/test_data/parse/expected/method/default/meta_model.py +9 -0
  358. dev/test_data/parse/expected/method/description/meta_model.py +8 -0
  359. dev/test_data/parse/expected/method/is_implementation_specific/meta_model.py +8 -0
  360. dev/test_data/parse/expected/method/non_mutating/meta_model.py +11 -0
  361. dev/test_data/parse/expected/method/returns_none/meta_model.py +7 -0
  362. dev/test_data/parse/expected/method/returns_something/meta_model.py +7 -0
  363. dev/test_data/parse/expected/single_class/description/meta_model.py +12 -0
  364. dev/test_data/parse/expected/single_class/empty/meta_model.py +6 -0
  365. dev/test_data/parse/expected/single_class/property/description/meta_model.py +14 -0
  366. dev/test_data/parse/expected/single_class/property/mandatory/meta_model.py +6 -0
  367. dev/test_data/parse/expected/single_class/property/optional/meta_model.py +6 -0
  368. dev/test_data/parse/expected/single_class/property/recursion_to_entity/meta_model.py +6 -0
  369. dev/test_data/parse/unexpected/class_decorators/non_name_decorator/meta_model.py +7 -0
  370. dev/test_data/parse/unexpected/class_decorators/unknown_decorator/meta_model.py +7 -0
  371. dev/test_data/parse/unexpected/class_definitions/is_abstract_and_implementation_specific/meta_model.py +8 -0
  372. dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_before_a_method/meta_model.py +11 -0
  373. dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_for_a_pass/meta_model.py +9 -0
  374. dev/test_data/parse/unexpected/class_definitions/unexpected_double_description_for_a_property/meta_model.py +10 -0
  375. dev/test_data/parse/unexpected/class_inheritances/inheriting_from_implementation_specific_parent/meta_model.py +20 -0
  376. dev/test_data/parse/unexpected/class_inheritances/non_name_super_class/meta_model.py +6 -0
  377. dev/test_data/parse/unexpected/enum/expression_as_assignment_value/meta_model.py +6 -0
  378. dev/test_data/parse/unexpected/enum/non_assignment/meta_model.py +8 -0
  379. dev/test_data/parse/unexpected/enum/non_string_literal/meta_model.py +6 -0
  380. dev/test_data/parse/unexpected/enum/unexpected_inheritance/meta_model.py +6 -0
  381. dev/test_data/parse/unexpected/method_contracts/contract/non_lambda_condition/meta_model.py +8 -0
  382. dev/test_data/parse/unexpected/method_contracts/contract/non_string_literal_description/meta_model.py +8 -0
  383. dev/test_data/parse/unexpected/method_contracts/contract/without_any_arguments/meta_model.py +8 -0
  384. dev/test_data/parse/unexpected/method_contracts/contract/without_condition/meta_model.py +8 -0
  385. dev/test_data/parse/unexpected/method_contracts/postcondition/OLD_in_postcondition_without_snapshot/meta_model.py +8 -0
  386. dev/test_data/parse/unexpected/method_contracts/postcondition/argument_missing_in_function/meta_model.py +8 -0
  387. dev/test_data/parse/unexpected/method_contracts/precondition/argument_missing_in_function/meta_model.py +8 -0
  388. dev/test_data/parse/unexpected/method_contracts/snapshot/argument_missing_in_function/meta_model.py +8 -0
  389. dev/test_data/parse/unexpected/method_contracts/snapshot/capture_not_a_lambda/meta_model.py +8 -0
  390. dev/test_data/parse/unexpected/method_contracts/snapshot/invalid_name/meta_model.py +8 -0
  391. dev/test_data/parse/unexpected/method_contracts/snapshot/name_not_a_string_literal/meta_model.py +8 -0
  392. dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_capture/meta_model.py +8 -0
  393. dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_name/meta_model.py +8 -0
  394. dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_constructor/meta_model.py +8 -0
  395. dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_verification_function/meta_model.py +8 -0
  396. dev/test_data/parse/unexpected/method_decorators/non_name_decorator/meta_model.py +8 -0
  397. dev/test_data/parse/unexpected/method_decorators/unknown_call_decorator/meta_model.py +8 -0
  398. dev/test_data/parse/unexpected/method_decorators/unknown_name_decorator/meta_model.py +8 -0
  399. dev/test_data/parse/unexpected/method_definitions/argument_with_final/meta_model.py +7 -0
  400. dev/test_data/parse/unexpected/method_definitions/argument_without_a_type_annotation/meta_model.py +7 -0
  401. dev/test_data/parse/unexpected/method_definitions/default_for_self/meta_model.py +7 -0
  402. dev/test_data/parse/unexpected/method_definitions/dunder/meta_model.py +7 -0
  403. dev/test_data/parse/unexpected/method_definitions/init_with_return_type/meta_model.py +7 -0
  404. dev/test_data/parse/unexpected/method_definitions/with_keyword_only_arguments/meta_model.py +7 -0
  405. dev/test_data/parse/unexpected/method_definitions/with_positional_arguments/meta_model.py +7 -0
  406. dev/test_data/parse/unexpected/method_definitions/with_type_annotation_for_self/meta_model.py +7 -0
  407. dev/test_data/parse/unexpected/method_definitions/with_variable_arguments/meta_model.py +7 -0
  408. dev/test_data/parse/unexpected/method_definitions/with_variable_keyword_arguments/meta_model.py +7 -0
  409. dev/test_data/parse/unexpected/method_definitions/without_arguments/meta_model.py +7 -0
  410. dev/test_data/parse/unexpected/method_definitions/without_self/meta_model.py +7 -0
  411. dev/test_data/parse/unexpected/method_definitions/without_type_annotation_for_result/meta_model.py +7 -0
  412. dev/test_data/parse/unexpected/property_definitions/final_without_subscript/meta_model.py +6 -0
  413. dev/test_data/parse/unexpected/property_definitions/nested_final/meta_model.py +6 -0
  414. dev/test_data/parse/unexpected/property_definitions/non_simple/meta_model.py +6 -0
  415. dev/test_data/parse/unexpected/property_definitions/unexpected_assignment/meta_model.py +6 -0
  416. dev/test_data/parse/unexpected/property_definitions/unexpected_non_name_property/meta_model.py +6 -0
  417. dev/test_data/parse/unexpected/property_definitions/without_type_annotation/meta_model.py +6 -0
  418. dev/test_data/parse/unexpected/symbol_table/constant_set_with_a_non_set_subset/meta_model.py +6 -0
  419. dev/test_data/parse/unexpected/symbol_table/dangling_inheritance/meta_model.py +6 -0
  420. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_a_property/meta_model.py +6 -0
  421. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_an_argument/meta_model.py +7 -0
  422. dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_constant_set/meta_model.py +6 -0
  423. dev/test_data/parse/unexpected/symbol_table/dangling_subset_in_constant_set/meta_model.py +4 -0
  424. dev/test_data/parse/unexpected/symbol_table/inheritance_from_non_class/meta_model.py +10 -0
  425. dev/test_data/parse_retree/expected/character_set/common_escaping/source.py +1 -0
  426. dev/test_data/parse_retree/expected/character_set/complementing/double_caret/source.py +1 -0
  427. dev/test_data/parse_retree/expected/character_set/complementing/multiple_ranges/source.py +1 -0
  428. dev/test_data/parse_retree/expected/character_set/complementing/suffix_dash/source.py +1 -0
  429. dev/test_data/parse_retree/expected/character_set/escape_first_caret/source.py +1 -0
  430. dev/test_data/parse_retree/expected/character_set/literals_which_need_no_escaping_in_characters_set_but_need_escaping_outside/source.py +1 -0
  431. dev/test_data/parse_retree/expected/character_set/multiple_ranges/source.py +1 -0
  432. dev/test_data/parse_retree/expected/character_set/single_literal/source.py +1 -0
  433. dev/test_data/parse_retree/expected/character_set/single_range/source.py +1 -0
  434. dev/test_data/parse_retree/expected/character_set/unescaped_dash/only_dash/source.py +1 -0
  435. dev/test_data/parse_retree/expected/character_set/unescaped_dash/prefix_dash/source.py +1 -0
  436. dev/test_data/parse_retree/expected/character_set/unescaped_dash/suffix_dash/source.py +1 -0
  437. dev/test_data/parse_retree/expected/dot/source.py +1 -0
  438. dev/test_data/parse_retree/expected/empty/group/source.py +1 -0
  439. dev/test_data/parse_retree/expected/empty/group_in_a_group/source.py +1 -0
  440. dev/test_data/parse_retree/expected/empty/group_of_union_of_empty_concatenations/source.py +1 -0
  441. dev/test_data/parse_retree/expected/empty/regex/source.py +1 -0
  442. dev/test_data/parse_retree/expected/empty/union_of_empty_concatenations/source.py +1 -0
  443. dev/test_data/parse_retree/expected/escaped_literals/source.py +1 -0
  444. dev/test_data/parse_retree/expected/formatted_value/at_the_beginning/source.py +1 -0
  445. dev/test_data/parse_retree/expected/formatted_value/at_the_end/source.py +1 -0
  446. dev/test_data/parse_retree/expected/formatted_value/in_the_middle/source.py +1 -0
  447. dev/test_data/parse_retree/expected/formatted_value/single_formatted_value/source.py +1 -0
  448. dev/test_data/parse_retree/expected/literal/source.py +1 -0
  449. dev/test_data/parse_retree/expected/quantifier/greedy/at_least_3/source.py +1 -0
  450. dev/test_data/parse_retree/expected/quantifier/greedy/at_least_one/source.py +1 -0
  451. dev/test_data/parse_retree/expected/quantifier/greedy/at_most_3/source.py +1 -0
  452. dev/test_data/parse_retree/expected/quantifier/greedy/exactly_3/source.py +1 -0
  453. dev/test_data/parse_retree/expected/quantifier/greedy/maybe/source.py +1 -0
  454. dev/test_data/parse_retree/expected/quantifier/greedy/zero_or_more/source.py +1 -0
  455. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_3/source.py +1 -0
  456. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_one/source.py +1 -0
  457. dev/test_data/parse_retree/expected/quantifier/non_greedy/at_most_3/source.py +1 -0
  458. dev/test_data/parse_retree/expected/quantifier/non_greedy/exactly_3/source.py +1 -0
  459. dev/test_data/parse_retree/expected/quantifier/non_greedy/maybe/source.py +1 -0
  460. dev/test_data/parse_retree/expected/quantifier/non_greedy/zero_or_more/source.py +1 -0
  461. dev/test_data/parse_retree/expected/quantifier/on_a_character_set/source.py +1 -0
  462. dev/test_data/parse_retree/expected/quantifier/on_a_formatted_value/source.py +1 -0
  463. dev/test_data/parse_retree/expected/quantifier/on_a_group/source.py +1 -0
  464. dev/test_data/parse_retree/expected/quantifier/on_a_literal/source.py +1 -0
  465. dev/test_data/parse_retree/expected/start_and_stop_symbols/double_end_symbol/source.py +1 -0
  466. dev/test_data/parse_retree/expected/start_and_stop_symbols/double_start_symbol/source.py +1 -0
  467. dev/test_data/parse_retree/expected/start_and_stop_symbols/end_symbol_in_the_middle/source.py +1 -0
  468. dev/test_data/parse_retree/expected/start_and_stop_symbols/only_start_symbol/source.py +1 -0
  469. dev/test_data/parse_retree/expected/start_and_stop_symbols/only_stop_symbol/source.py +1 -0
  470. dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_at_the_beginning/source.py +1 -0
  471. dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_in_the_middle/source.py +1 -0
  472. dev/test_data/parse_retree/expected/start_and_stop_symbols/stop_symbol_at_the_end/source.py +1 -0
  473. dev/test_data/parse_retree/expected/union/of_character_sets/source.py +1 -0
  474. dev/test_data/parse_retree/expected/union/of_groups/source.py +1 -0
  475. dev/test_data/parse_retree/expected/union/of_string_literals/source.py +1 -0
  476. dev/test_data/parse_retree/expected/union/within_group/source.py +1 -0
  477. dev/test_data/parse_retree/expected/whitespace/source.py +1 -0
  478. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/Uxxxxxxxx_out_of_range/source.py +1 -0
  479. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/only_backslash/source.py +1 -0
  480. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_Uxxxxxxxx/source.py +1 -0
  481. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_uxxxx/source.py +1 -0
  482. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_x/source.py +1 -0
  483. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unexpected_escaping/source.py +1 -0
  484. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/digit/source.py +1 -0
  485. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_digit/source.py +1 -0
  486. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_whitespace/source.py +1 -0
  487. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_word/source.py +1 -0
  488. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/whitespace/source.py +1 -0
  489. dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/word/source.py +1 -0
  490. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/Uxxxxxxxx_out_of_range/source.py +1 -0
  491. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/only_backslash/source.py +1 -0
  492. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_Uxxxxxxxx/source.py +1 -0
  493. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_uxxxx/source.py +1 -0
  494. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_x/source.py +1 -0
  495. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unexpected_escaping/source.py +1 -0
  496. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/digit/source.py +1 -0
  497. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_digit/source.py +1 -0
  498. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_whitespace/source.py +1 -0
  499. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_word/source.py +1 -0
  500. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/whitespace/source.py +1 -0
  501. dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/word/source.py +1 -0
  502. dev/test_data/parse_retree/unexpected/invalid_character_range/source.py +1 -0
  503. dev/test_data/parse_retree/unexpected/invalid_quantifier/at_least_x/source.py +1 -0
  504. dev/test_data/parse_retree/unexpected/invalid_quantifier/between_3_and_x/source.py +1 -0
  505. dev/test_data/parse_retree/unexpected/invalid_quantifier/exactly_x/source.py +1 -0
  506. dev/test_data/parse_retree/unexpected/unhandled_group_directives/source.py +1 -0
  507. dev/test_data/parse_retree/unexpected/unterminated/character_set/source.py +1 -0
  508. dev/test_data/parse_retree/unexpected/unterminated/group/source.py +1 -0
  509. dev/test_data/parse_retree/unexpected/unterminated/group_of_union_of_empty_concatenations/source.py +1 -0
  510. dev/test_data/parse_retree/unexpected/unterminated/quantifier/source.py +1 -0
  511. dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_comma/source.py +1 -0
  512. dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_number_and_comma/source.py +1 -0
  513. dev/test_data/proto/test_main/expected/abstract_and_concrete_classes/meta_model.py +37 -0
  514. dev/test_data/proto/test_main/expected/concrete_class_with_descendants/meta_model.py +30 -0
  515. dev/test_data/proto/test_main/expected/concrete_class_with_enum/meta_model.py +21 -0
  516. dev/test_data/proto/test_main/expected/concrete_class_with_list_of_instances/meta_model.py +21 -0
  517. dev/test_data/proto/test_main/expected/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  518. dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/expected_output/pbization.py +532 -0
  519. dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
  520. dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/expected_output/pbization.py +527 -0
  521. dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/meta_model.py +27 -0
  522. dev/test_data/python_protobuf/test_main/concrete_class_with_enum/expected_output/pbization.py +290 -0
  523. dev/test_data/python_protobuf/test_main/concrete_class_with_enum/meta_model.py +21 -0
  524. dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/expected_output/pbization.py +328 -0
  525. dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/meta_model.py +23 -0
  526. dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/expected_output/pbization.py +274 -0
  527. dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
  528. dev/test_data/rdf_shacl/test_main/expected/regression_when_lang_string_class_is_missing/meta_model.py +29 -0
  529. dev/test_data/rdf_shacl/test_main/expected/regression_when_len_constraints_on_inherited_property/meta_model.py +27 -0
  530. dev/test_data/rdf_shacl/test_main/unexpected/regression_len_constraint_on_class_property/meta_model.py +61 -0
  531. dev/test_data/real_meta_models/aas_core_meta.v3.py +5721 -0
  532. dev/test_data/smoke/test_main/unexpected/infer_for_schema_error/meta_model.py +12 -0
  533. dev/test_data/smoke/test_main/unexpected/intermediate_error/meta_model.py +18 -0
  534. dev/test_data/smoke/test_main/unexpected/parse_error/meta_model.py +5 -0
  535. dev/test_data/smoke/test_main/unexpected/pattern_verification_unparsable_regex/direct_match/meta_model.py +8 -0
  536. dev/test_data/smoke/test_main/unexpected/type_error/meta_model.py +18 -0
  537. dev/tests/__init__.py +1 -0
  538. dev/tests/common.py +197 -0
  539. dev/tests/cpp/__init__.py +0 -0
  540. dev/tests/cpp/test_common.py +32 -0
  541. dev/tests/cpp/test_main.py +144 -0
  542. dev/tests/cpp/test_pattern.py +188 -0
  543. dev/tests/cpp/test_verification.py +189 -0
  544. dev/tests/cpp/test_yielding.py +225 -0
  545. dev/tests/csharp/__init__.py +0 -0
  546. dev/tests/csharp/live_test_main.py +109 -0
  547. dev/tests/csharp/test_common.py +28 -0
  548. dev/tests/csharp/test_description.py +684 -0
  549. dev/tests/csharp/test_main.py +129 -0
  550. dev/tests/csharp/test_structure.py +93 -0
  551. dev/tests/csharp/test_verification.py +82 -0
  552. dev/tests/description.py +29 -0
  553. dev/tests/golang/__init__.py +0 -0
  554. dev/tests/golang/test_common.py +78 -0
  555. dev/tests/golang/test_main.py +128 -0
  556. dev/tests/infer_for_schema/__init__.py +0 -0
  557. dev/tests/infer_for_schema/common.py +47 -0
  558. dev/tests/infer_for_schema/test_len_on_properties.py +955 -0
  559. dev/tests/infer_for_schema/test_len_on_self.py +580 -0
  560. dev/tests/infer_for_schema/test_patterns_on_properties.py +686 -0
  561. dev/tests/infer_for_schema/test_patterns_on_self.py +258 -0
  562. dev/tests/infer_for_schema/test_property_in_set_of_enumeration_literals.py +600 -0
  563. dev/tests/infer_for_schema/test_property_in_set_of_primitives.py +549 -0
  564. dev/tests/intermediate/__init__.py +0 -0
  565. dev/tests/intermediate/test_constructor.py +719 -0
  566. dev/tests/intermediate/test_hierarchy.py +221 -0
  567. dev/tests/intermediate/test_revm.py +134 -0
  568. dev/tests/intermediate/test_translate.py +337 -0
  569. dev/tests/intermediate/test_type_inference.py +333 -0
  570. dev/tests/intermediate/test_types.py +169 -0
  571. dev/tests/java/__init__.py +0 -0
  572. dev/tests/java/test_common.py +20 -0
  573. dev/tests/java/test_description.py +128 -0
  574. dev/tests/java/test_main.py +234 -0
  575. dev/tests/jsonld_context/test_main.py +79 -0
  576. dev/tests/opcua/__init__.py +3 -0
  577. dev/tests/opcua/test_main.py +110 -0
  578. dev/tests/our_jsonschema/__init__.py +3 -0
  579. dev/tests/our_jsonschema/test_main.py +232 -0
  580. dev/tests/parse/__init__.py +0 -0
  581. dev/tests/parse/test_parse.py +503 -0
  582. dev/tests/parse/test_retree.py +272 -0
  583. dev/tests/proto/__init__.py +0 -0
  584. dev/tests/proto/test_main.py +112 -0
  585. dev/tests/python/__init__.py +0 -0
  586. dev/tests/python/test_common.py +124 -0
  587. dev/tests/python/test_main.py +126 -0
  588. dev/tests/python/test_xml_playground.py +254 -0
  589. dev/tests/python_protobuf/__init__.py +0 -0
  590. dev/tests/python_protobuf/test_main.py +111 -0
  591. dev/tests/rdf_shacl/__init__.py +0 -0
  592. dev/tests/rdf_shacl/test_common.py +32 -0
  593. dev/tests/rdf_shacl/test_description.py +223 -0
  594. dev/tests/rdf_shacl/test_main.py +194 -0
  595. dev/tests/smoke/__init__.py +0 -0
  596. dev/tests/smoke/test_main.py +83 -0
  597. dev/tests/test_common.py +94 -0
  598. dev/tests/typescript/__init__.py +0 -0
  599. dev/tests/typescript/test_common.py +108 -0
  600. dev/tests/typescript/test_main.py +125 -0
  601. dev/tests/xsd/__init__.py +0 -0
  602. dev/tests/xsd/test_main.py +227 -0
  603. dev/tests/yielding/__init__.py +0 -0
  604. dev/tests/yielding/test_linear.py +558 -0
@@ -0,0 +1,713 @@
1
+ """Generate C++ code of common functions by including the code directly."""
2
+
3
+ # pylint: disable=line-too-long
4
+
5
+ import io
6
+ from typing import List
7
+
8
+ from icontract import ensure
9
+
10
+ from aas_core_codegen.common import (
11
+ Stripped,
12
+ indent_but_first_line,
13
+ )
14
+ from aas_core_codegen.cpp import (
15
+ common as cpp_common,
16
+ )
17
+ from aas_core_codegen.cpp.common import (
18
+ INDENT as I,
19
+ INDENT2 as II,
20
+ INDENT3 as III,
21
+ INDENT4 as IIII,
22
+ )
23
+
24
+
25
+ def _generate_concatenate_definitions_for_2_parts_and_above() -> List[Stripped]:
26
+ """
27
+ Generate the definition of ``concat`` functions.
28
+
29
+ >>> print(_generate_concatenate_definitions_for_2_parts_and_above()[0])
30
+ /**
31
+ * Concatenate 2 strings.
32
+ *
33
+ * \\param part0 1st part of the concatenation
34
+ * \\param part1 2nd part of the concatenation
35
+ * \\return a concatenation of the 2 parts
36
+ */
37
+ std::string Concat(
38
+ const std::string& part0,
39
+ const std::string& part1
40
+ );
41
+ """
42
+ concat_funcs = [] # type: List[Stripped]
43
+ for string_type in ["std::string", "std::wstring"]:
44
+ for count in range(2, 65):
45
+ param_descriptions = [] # type: List[str]
46
+ for i in range(0, count):
47
+ ordinal: str
48
+
49
+ ordinal_i = i + 1
50
+
51
+ if ordinal_i % 10 == 1:
52
+ ordinal = f"{ordinal_i}st"
53
+ elif ordinal_i % 10 == 2:
54
+ ordinal = f"{ordinal_i}nd"
55
+ elif ordinal_i % 10 == 3:
56
+ ordinal = f"{ordinal_i}rd"
57
+ else:
58
+ ordinal = f"{ordinal_i}th"
59
+
60
+ param_descriptions.append(
61
+ f" * \\param part{i} {ordinal} part of the concatenation"
62
+ )
63
+ param_description_joined = "\n".join(param_descriptions)
64
+
65
+ args_definition = ",\n".join(
66
+ f"{I}const {string_type}& part{i}" for i in range(0, count)
67
+ )
68
+
69
+ concat_funcs.append(
70
+ Stripped(
71
+ f"""\
72
+ /**
73
+ * Concatenate {count} strings.
74
+ *
75
+ {param_description_joined}
76
+ * \\return a concatenation of the {count} parts
77
+ */
78
+ {string_type} Concat(
79
+ {args_definition}
80
+ );"""
81
+ )
82
+ )
83
+
84
+ return concat_funcs
85
+
86
+
87
+ def _generate_concatenate_implementations_for_2_parts_and_above() -> List[Stripped]:
88
+ """
89
+ Generate the implementation of ``concat`` functions.
90
+
91
+ >>> print(_generate_concatenate_implementations_for_2_parts_and_above()[0])
92
+ std::string Concat(
93
+ const std::string& part0,
94
+ const std::string& part1
95
+ ) {
96
+ size_t size = 0;
97
+ size += part0.size();
98
+ size += part1.size();
99
+ <BLANKLINE>
100
+ std::string result;
101
+ result.reserve(size);
102
+ <BLANKLINE>
103
+ result.append(part0);
104
+ result.append(part1);
105
+ <BLANKLINE>
106
+ return result;
107
+ }
108
+ """
109
+ concat_funcs = [] # type: List[Stripped]
110
+ for string_type in ["std::string", "std::wstring"]:
111
+ for count in range(2, 65):
112
+ args_definition = ",\n".join(
113
+ f"{I}const {string_type}& part{i}" for i in range(0, count)
114
+ )
115
+
116
+ size_block = Stripped(
117
+ "\n".join(f"size += part{i}.size();" for i in range(0, count))
118
+ )
119
+
120
+ append_block = Stripped(
121
+ "\n".join(f"result.append(part{i});" for i in range(0, count))
122
+ )
123
+
124
+ concat_funcs.append(
125
+ Stripped(
126
+ f"""\
127
+ {string_type} Concat(
128
+ {args_definition}
129
+ ) {{
130
+ {I}size_t size = 0;
131
+ {I}{indent_but_first_line(size_block, I)}
132
+
133
+ {I}{string_type} result;
134
+ {I}result.reserve(size);
135
+
136
+ {I}{indent_but_first_line(append_block, I)}
137
+
138
+ {I}return result;
139
+ }}"""
140
+ )
141
+ )
142
+
143
+ return concat_funcs
144
+
145
+
146
+ # fmt: off
147
+ @ensure(
148
+ lambda result:
149
+ result.endswith('\n'),
150
+ "Trailing newline mandatory for valid end-of-files"
151
+ )
152
+ # fmt: on
153
+ def generate_header(library_namespace: Stripped) -> str:
154
+ """Generate the C++ header code for common functions."""
155
+ namespace = Stripped(f"{library_namespace}")
156
+
157
+ include_guard_var = cpp_common.include_guard_var(namespace)
158
+
159
+ make_uniques = [
160
+ Stripped(
161
+ f"""\
162
+ template<typename T>
163
+ std::unique_ptr<T> make_unique() {{
164
+ {I}return std::unique_ptr<T>(
165
+ {II}new T()
166
+ {I});
167
+ }}"""
168
+ )
169
+ ] # type: List[Stripped]
170
+ for i in range(1, 16):
171
+ typenames_joined = ",\n".join(
172
+ ["typename T"] + [f"typename A{j + 1}" for j in range(i)]
173
+ )
174
+
175
+ args_joined = ",\n".join(f"A{j + 1}&& a{j + 1}" for j in range(i))
176
+
177
+ forward_args_joined = ",\n".join(
178
+ f"std::forward<A{j + 1}>(a{j + 1})" for j in range(i)
179
+ )
180
+
181
+ make_uniques.append(
182
+ Stripped(
183
+ f"""\
184
+ template<
185
+ {I}{indent_but_first_line(typenames_joined, I)}
186
+ >
187
+ std::unique_ptr<T> make_unique(
188
+ {I}{indent_but_first_line(args_joined, I)}
189
+ ) {{
190
+ {I}return std::unique_ptr<T>(
191
+ {II}new T(
192
+ {III}{indent_but_first_line(forward_args_joined, III)}
193
+ {II})
194
+ {I});
195
+ }}"""
196
+ )
197
+ )
198
+
199
+ make_uniques_joined = "\n\n".join(make_uniques)
200
+
201
+ blocks = [
202
+ Stripped(
203
+ f"""\
204
+ #ifndef {include_guard_var}
205
+ #define {include_guard_var}"""
206
+ ),
207
+ cpp_common.WARNING,
208
+ Stripped(
209
+ """\
210
+ #pragma warning(push, 0)
211
+ #include <algorithm>
212
+ #include <functional>
213
+ #include <memory>
214
+ #include <sstream>
215
+ #include <string>
216
+ #include <utility>
217
+ #pragma warning(pop)
218
+
219
+ // See: https://stackoverflow.com/questions/2324658/how-to-determine-the-version-of-the-c-standard-used-by-the-compiler
220
+ #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
221
+ // Standard library provides std::optional in C++17 and above.
222
+ #pragma warning(push, 0)
223
+ #include <optional>
224
+ #pragma warning(pop)
225
+ #else
226
+ // We rely on https://github.com/TartanLlama/optional for optional structure.
227
+ #pragma warning(push, 0)
228
+ #include <tl/optional.hpp>
229
+ #pragma warning(pop)
230
+ #endif
231
+
232
+ // NOTE (mristin):
233
+ // We check for the version above C++20 as there is no C++23 literal yet, and
234
+ // std::expected is available only in C++23.
235
+ // See: https://stackoverflow.com/questions/2324658/how-to-determine-the-version-of-the-c-standard-used-by-the-compiler
236
+ // and: http://eel.is/c++draft/cpp.predefined#1.1
237
+ #if ((defined(_MSVC_LANG) && _MSVC_LANG > 202002L) || __cplusplus > 202002L)
238
+ // Standard library provides std::expected in C++23 and above.
239
+ #pragma warning(push, 0)
240
+ #include <expected>
241
+ #pragma warning(pop)
242
+ #else
243
+ // We rely on https://github.com/TartanLlama/expected for expected structure.
244
+ #pragma warning(push, 0)
245
+ #include <tl/expected.hpp>
246
+ #pragma warning(pop)
247
+ #endif"""
248
+ ),
249
+ cpp_common.generate_namespace_opening(library_namespace),
250
+ Stripped(
251
+ f"""\
252
+ /**
253
+ * \\defgroup common Common functionality used throughout the library
254
+ * @{{
255
+ */
256
+ namespace {cpp_common.COMMON_NAMESPACE} {{"""
257
+ ),
258
+ Stripped(
259
+ """\
260
+ // Please keep in sync with the preprocessing directives above in the include block.
261
+ #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
262
+ // Standard library provides std::optional in C++17 and above.
263
+ using std::optional;
264
+ using std::nullopt;
265
+ using std::make_optional;
266
+ #else
267
+ using tl::optional;
268
+ using tl::nullopt;
269
+ using tl::make_optional;
270
+ #endif"""
271
+ ),
272
+ Stripped(
273
+ """\
274
+ // Please keep in sync with the preprocessing directives above in the include block.
275
+ #if ((defined(_MSVC_LANG) && _MSVC_LANG > 202002L) || __cplusplus > 202002L)
276
+ using std::expected;
277
+ using std::unexpected;
278
+ using std::make_unexpected;
279
+ #else
280
+ using tl::expected;
281
+ using tl::unexpected;
282
+ using tl::make_unexpected;
283
+ #endif"""
284
+ ),
285
+ Stripped(
286
+ f"""\
287
+ // Please keep in sync with the preprocessing directives above in the include block.
288
+ // Standard library provides std::make_unique in C++14 and above.
289
+ #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) || __cplusplus >= 201402L)
290
+ using std::make_unique;
291
+ #else
292
+ // Inspired by:
293
+ // https://stackoverflow.com/questions/12547983/is-there-a-way-to-write-make-unique-in-vs2012
294
+ {make_uniques_joined}
295
+ #endif"""
296
+ ),
297
+ *_generate_concatenate_definitions_for_2_parts_and_above(),
298
+ Stripped(
299
+ f"""\
300
+ /**
301
+ * Check if all the elements satisfy the \\p condition.
302
+ *
303
+ * \\param condition returning a boolean to be checked for each element
304
+ * \\param container to be iterated through
305
+ * \\return `true` if all the elements of \\p container satisfy the \\p condition
306
+ */
307
+ template<typename ContainerT, typename FunctorT>
308
+ bool All(
309
+ {I}FunctorT condition,
310
+ {I}const ContainerT& container
311
+ ) {{
312
+ {I}for (const auto& item : container ) {{
313
+ {II}if (!condition(item)) {{
314
+ {III}return false;
315
+ {II}}}
316
+ {I}}}
317
+ {I}return true;
318
+ }}"""
319
+ ),
320
+ Stripped(
321
+ f"""\
322
+ /**
323
+ * Check if any of the elements satisfy the \\p condition.
324
+ *
325
+ * \\param condition returning a boolean to be checked for each element
326
+ * \\param container to be iterated through
327
+ * \\return `true` if any of the elements of \\p container satisfy the \\p condition
328
+ */
329
+ template<typename ContainerT, typename FunctorT>
330
+ bool Some(
331
+ {I}FunctorT condition,
332
+ {I}const ContainerT& container
333
+ ) {{
334
+ {I}for (const auto& item : container ) {{
335
+ {II}if (condition(item)) {{
336
+ {III}return true;
337
+ {II}}}
338
+ {I}}}
339
+ {I}return false;
340
+ }}"""
341
+ ),
342
+ Stripped(
343
+ f"""\
344
+ /**
345
+ * Check if all the numbers in the range `[start, end)` satisfy the \\p condition.
346
+ *
347
+ * \\param condition returning a boolean to be checked for each number
348
+ * \\param start of the range
349
+ * \\param end of the range
350
+ * \\return \\parblock
351
+ * `true` if all the numbers between \\p start and \\p end (excluded)
352
+ * satisfy the \\p condition
353
+ * \\endparblock
354
+ */
355
+ template<typename FunctorT>
356
+ bool AllRange(
357
+ {I}FunctorT condition,
358
+ {I}size_t start,
359
+ {I}size_t end
360
+ ) {{
361
+ {I}for (size_t i = start; i < end; ++i) {{
362
+ {II}if (!condition(i)) {{
363
+ {III}return false;
364
+ {II}}}
365
+ {I}}}
366
+ {I}return true;
367
+ }}"""
368
+ ),
369
+ Stripped(
370
+ f"""\
371
+ /**
372
+ * Check if any number in the range `[start, end)` satisfy the \\p condition.
373
+ *
374
+ * \\param condition returning a boolean to be checked for each number
375
+ * \\param start of the range
376
+ * \\param end of the range
377
+ * \\return \\parblock
378
+ * `true` if any number between \\p start and
379
+ * \\p end (excluded) satisfy the \\p condition
380
+ * \\endparblock
381
+ */
382
+ template<typename FunctorT>
383
+ bool SomeRange(
384
+ {I}FunctorT condition,
385
+ {I}size_t start,
386
+ {I}size_t end
387
+ ) {{
388
+ {I}for (size_t i = start; i < end; ++i) {{
389
+ {II}if (condition(i)) {{
390
+ {III}return true;
391
+ {II}}}
392
+ {I}}}
393
+ {I}return false;
394
+ }}"""
395
+ ),
396
+ Stripped(
397
+ f"""\
398
+ /**
399
+ * Check if the \\p container contains the \\p value.
400
+ *
401
+ * \\param container to be searched through
402
+ * \\param value to be search for
403
+ * \\return `true` if \\p value is in the \\p container
404
+ */
405
+ template<typename ContainerT, typename ValueT>
406
+ bool Contains(
407
+ {I}const ContainerT& container,
408
+ {I}const ValueT& value
409
+ ) {{
410
+ {I}const auto container_begin = std::begin(container);
411
+ {I}const auto container_end = std::end(container);
412
+ {I}return std::find(
413
+ {II}container_begin,
414
+ {II}container_end,
415
+ {II}value
416
+ {I}) != container_end;
417
+ }}"""
418
+ ),
419
+ Stripped(
420
+ """\
421
+ /**
422
+ * Convert platform-independent the wide string to a UTF-8 string.
423
+ *
424
+ * \\param text to be converted
425
+ * \\return UTF-8 encoded \\p text
426
+ */
427
+ std::string WstringToUtf8(const std::wstring& text);"""
428
+ ),
429
+ Stripped(
430
+ f"""\
431
+ /**
432
+ * Convert platform-independent the UTF-8 encoded string to a wide string.
433
+ *
434
+ * \\param utf8_text UTF-8 encoded text to be converted
435
+ * \\param utf8_text_size size of the text to be converted. If std::string::npos,
436
+ * the \\p utf8_text is assumed to be null-terminated and the size is determined
437
+ * using `strlen`.
438
+ * \\return the wide-string representation
439
+ */
440
+ std::wstring Utf8ToWstring(
441
+ {I}const char* utf8_text,
442
+ {I}size_t utf8_text_size = std::string::npos
443
+ );"""
444
+ ),
445
+ Stripped(
446
+ """\
447
+ /**
448
+ * Convert platform-independent the UTF-8 encoded string to a wide string.
449
+ *
450
+ * \\param utf8_text UTF-8 encoded text to be converted
451
+ * \\return wide string
452
+ */
453
+ std::wstring Utf8ToWstring(const std::string& utf8_text);"""
454
+ ),
455
+ Stripped(
456
+ f"""\
457
+ }} // namespace {cpp_common.COMMON_NAMESPACE}
458
+ /**@}}*/"""
459
+ ),
460
+ cpp_common.generate_namespace_closing(library_namespace),
461
+ cpp_common.WARNING,
462
+ Stripped(f"#endif // {include_guard_var}"),
463
+ ]
464
+
465
+ writer = io.StringIO()
466
+ for i, block in enumerate(blocks):
467
+ if i > 0:
468
+ writer.write("\n\n")
469
+
470
+ writer.write(block)
471
+
472
+ writer.write("\n")
473
+
474
+ return writer.getvalue()
475
+
476
+
477
+ # fmt: off
478
+ @ensure(
479
+ lambda result:
480
+ result.endswith('\n'),
481
+ "Trailing newline mandatory for valid end-of-files"
482
+ )
483
+ # fmt: on
484
+ def generate_implementation(library_namespace: Stripped) -> str:
485
+ """Generate the C++ code for common functions."""
486
+ namespace = Stripped(f"{library_namespace}::{cpp_common.COMMON_NAMESPACE}")
487
+
488
+ include_prefix_path = cpp_common.generate_include_prefix_path(library_namespace)
489
+
490
+ blocks = [
491
+ cpp_common.WARNING,
492
+ Stripped(
493
+ f'''\
494
+ #include "{include_prefix_path}/common.hpp"'''
495
+ ),
496
+ Stripped(
497
+ """\
498
+ #pragma warning(push, 0)
499
+ #include <algorithm>
500
+ #pragma warning(pop)
501
+
502
+ // NOTE (mristin):
503
+ // We use MultiByteToWideChar and WideCharToMulitByte from <windows.h> on Windows
504
+ // as std::codecvt is not robust enough on Windows, and produces invalid UTF-16
505
+ // sequences as std::wstring. See:
506
+ // https://stackoverflow.com/questions/2573834/c-convert-string-or-char-to-wstring-or-wchar-t,
507
+ // especially the comment:
508
+ // https://stackoverflow.com/questions/2573834/c-convert-string-or-char-to-wstring-or-wchar-t#comment110447503_18597384
509
+ #ifdef _WIN32
510
+ #pragma warning(push, 0)
511
+ #include <windows.h>
512
+ #include <limits>
513
+ #include <cstring>
514
+ #pragma warning(pop)
515
+ #else
516
+ // NOTE (mristin):
517
+ // We use codecvt although it has been deprecated. There has been not
518
+ // suitable replacement proposed yet, so we simply stick to it
519
+ // until there is. See:
520
+ // https://stackoverflow.com/questions/42946335/deprecated-header-codecvt-replacement
521
+
522
+ #pragma warning(push, 0)
523
+ #include <codecvt>
524
+ #include <locale>
525
+ #pragma warning(pop)
526
+ #endif"""
527
+ ),
528
+ cpp_common.generate_namespace_opening(namespace),
529
+ *_generate_concatenate_implementations_for_2_parts_and_above(),
530
+ Stripped(
531
+ f"""\
532
+ std::string WstringToUtf8(const std::wstring& text) {{
533
+ {I}#ifdef _WIN32
534
+ {I}// Inspired by:
535
+ {I}// https://stackoverflow.com/a/69410299/1600678
536
+
537
+ {I}if (text.empty()) {{
538
+ {II}return "";
539
+ {I}}}
540
+
541
+ {I}// NOTE (mristin):
542
+ {I}// We put `max` into parentheses to avoid conflicts with
543
+ {I}// <windows.h> `max` macro, see:
544
+ {I}// https://stackoverflow.com/questions/11544073/how-do-i-deal-with-the-max-macro-in-windows-h-colliding-with-max-in-std
545
+
546
+ {I}const size_t text_size = text.size();
547
+ {I}if (
548
+ {II}text_size
549
+ {II}> static_cast<size_t>(
550
+ {III}(std::numeric_limits<int>::max)()
551
+ {II})
552
+ {I}) {{
553
+ {II}throw std::out_of_range(
554
+ {III}common::Concat(
555
+ {IIII}"The size of the text to be converted to UTF-8, ",
556
+ {IIII}std::to_string(text_size),
557
+ {IIII}", exceeds the maximum int value ",
558
+ {IIII}std::to_string((std::numeric_limits<int>::max)())
559
+ {III})
560
+ {II});
561
+ {I}}}
562
+ {I}const int text_size_int = static_cast<int>(text_size);
563
+
564
+ {I}const auto size_needed = WideCharToMultiByte(
565
+ {II}CP_UTF8,
566
+ {II}0,
567
+ {II}&(text[0]),
568
+ {II}text_size_int,
569
+ {II}nullptr,
570
+ {II}0,
571
+ {II}nullptr,
572
+ {II}nullptr
573
+ {I});
574
+
575
+ {I}if (size_needed <= 0) {{
576
+ {II}throw std::runtime_error(
577
+ {III}"WideCharToMultiByte() failed: " + std::to_string(size_needed)
578
+ {II});
579
+ {I}}}
580
+
581
+ {I}std::string result(size_needed, 0);
582
+
583
+ {I}WideCharToMultiByte(
584
+ {II}CP_UTF8,
585
+ {II}0,
586
+ {II}&(text[0]),
587
+ {II}text_size_int,
588
+ {II}&(result[0]),
589
+ {II}size_needed,
590
+ {II}nullptr,
591
+ {II}nullptr
592
+ {I});
593
+
594
+ {I}return result;
595
+ {I}#else
596
+ {I}// NOTE (mristin):
597
+ {I}// We use codecvt although it has been deprecated. There has been not
598
+ {I}// suitable replacement proposed yet, so we simply stick to it
599
+ {I}// until there is. See:
600
+ {I}// https://stackoverflow.com/questions/42946335/deprecated-header-codecvt-replacement
601
+
602
+ {I}std::wstring_convert<std::codecvt_utf8<wchar_t> > conv;
603
+ {I}return conv.to_bytes(text.data());
604
+ {I}#endif
605
+ }}"""
606
+ ),
607
+ Stripped(
608
+ f"""\
609
+ std::wstring Utf8ToWstring(
610
+ {I}const char* utf8_text,
611
+ {I}size_t utf8_text_size
612
+ ) {{
613
+ {I}if (utf8_text_size == 0) {{
614
+ {II}return std::wstring();
615
+ {I}}}
616
+
617
+ {I}#ifdef _WIN32
618
+ {I}// NOTE (mristin):
619
+ {I}// We have to use MultiByteToWideChar from <windows.h> on Windows
620
+ {I}// as std::codecvt is not robust enough on Windows and produces invalid UTF-16
621
+ {I}// sequences as std::wstring. See:
622
+ {I}// https://stackoverflow.com/questions/2573834/c-convert-string-or-char-to-wstring-or-wchar-t,
623
+ {I}// especially the comment:
624
+ {I}// https://stackoverflow.com/questions/2573834/c-convert-string-or-char-to-wstring-or-wchar-t#comment110447503_18597384
625
+
626
+ {I}// Inspired by:
627
+ {I}// https://stackoverflow.com/a/69410299/1600678
628
+
629
+ {I}if (utf8_text_size == std::string::npos) {{
630
+ {II}utf8_text_size = strlen(utf8_text);
631
+ {I}}}
632
+
633
+ {I}// NOTE (mristin):
634
+ {I}// We put `max` into parentheses to avoid conflicts with
635
+ {I}// <windows.h> `max` macro, see:
636
+ {I}// https://stackoverflow.com/questions/11544073/how-do-i-deal-with-the-max-macro-in-windows-h-colliding-with-max-in-std
637
+
638
+ {I}if (
639
+ {II}utf8_text_size
640
+ {II}> static_cast<size_t>(
641
+ {III}(std::numeric_limits<int>::max)()
642
+ {II})
643
+ {I}) {{
644
+ {II}throw std::out_of_range(
645
+ {III}common::Concat(
646
+ {IIII}"The size of the UTF-8 text to be converted to wide string, ",
647
+ {IIII}std::to_string(utf8_text_size),
648
+ {IIII}", exceeds the maximum int value ",
649
+ {IIII}std::to_string((std::numeric_limits<int>::max)())
650
+ {III})
651
+ {II});
652
+ {I}}}
653
+ {I}const int utf8_text_size_int = static_cast<int>(utf8_text_size);
654
+
655
+ {I}const auto size_needed = MultiByteToWideChar(
656
+ {II}CP_UTF8,
657
+ {II}0,
658
+ {II}utf8_text,
659
+ {II}utf8_text_size_int,
660
+ {II}nullptr,
661
+ {II}0
662
+ {I});
663
+ {I}if (size_needed <= 0) {{
664
+ {II}throw std::runtime_error(
665
+ {III}"MultiByteToWideChar() failed: " + std::to_string(size_needed)
666
+ {II});
667
+ {I}}}
668
+
669
+ {I}std::wstring result(size_needed, 0);
670
+
671
+ {I}MultiByteToWideChar(
672
+ {II}CP_UTF8,
673
+ {II}0,
674
+ {II}utf8_text,
675
+ {II}utf8_text_size_int,
676
+ {II}&(result[0]),
677
+ {II}size_needed
678
+ {I});
679
+
680
+ {I}return result;
681
+
682
+ {I}#else
683
+ {I}// NOTE (mristin):
684
+ {I}// We use codecvt although it has been deprecated. There has been not
685
+ {I}// suitable replacement proposed yet, so we simply stick to it
686
+ {I}// until there is. See:
687
+ {I}// https://stackoverflow.com/questions/42946335/deprecated-header-codecvt-replacement
688
+
689
+ {I}std::wstring_convert<std::codecvt_utf8<wchar_t>,wchar_t> conv;
690
+ {I}return conv.from_bytes(utf8_text);
691
+ {I}#endif
692
+ }}"""
693
+ ),
694
+ Stripped(
695
+ f"""\
696
+ std::wstring Utf8ToWstring(const std::string& utf8_text) {{
697
+ {I}return Utf8ToWstring(&(utf8_text[0]), utf8_text.size());
698
+ }}"""
699
+ ),
700
+ cpp_common.generate_namespace_closing(namespace),
701
+ cpp_common.WARNING,
702
+ ]
703
+
704
+ writer = io.StringIO()
705
+ for i, block in enumerate(blocks):
706
+ if i > 0:
707
+ writer.write("\n\n")
708
+
709
+ writer.write(block)
710
+
711
+ writer.write("\n")
712
+
713
+ return writer.getvalue()