dub 0.2.2 → 0.6.6

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.

Potentially problematic release.


This version of dub might be problematic. Click here for more details.

Files changed (267) hide show
  1. data/.gitignore +8 -0
  2. data/History.txt +53 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +67 -0
  5. data/Rakefile +59 -0
  6. data/dub.gemspec +201 -0
  7. data/lib/dub/argument.rb +275 -0
  8. data/lib/dub/entities_unescape.rb +9 -0
  9. data/lib/dub/function.rb +163 -0
  10. data/lib/dub/function_group.rb +72 -0
  11. data/lib/dub/generator.rb +15 -0
  12. data/lib/dub/group.rb +24 -0
  13. data/lib/dub/klass.rb +255 -0
  14. data/lib/dub/lua/class.cpp.erb +84 -0
  15. data/lib/dub/lua/class_gen.rb +97 -0
  16. data/lib/dub/lua/function.cpp.erb +18 -0
  17. data/lib/dub/lua/function_gen.rb +265 -0
  18. data/lib/dub/lua/group.cpp.erb +9 -0
  19. data/lib/dub/lua/lua_cpp_helper.h +141 -0
  20. data/lib/dub/lua/namespace.cpp.erb +40 -0
  21. data/lib/dub/lua/namespace_gen.rb +88 -0
  22. data/lib/dub/lua.rb +24 -0
  23. data/lib/dub/member_extraction.rb +92 -0
  24. data/lib/dub/namespace.rb +277 -0
  25. data/lib/dub/opts_parser.rb +30 -0
  26. data/lib/dub/parser.rb +46 -0
  27. data/lib/dub/templates/lua_template.erb +21 -0
  28. data/lib/dub/version.rb +3 -0
  29. data/lib/dub.rb +24 -20
  30. data/test/argument_test.rb +547 -0
  31. data/test/fixtures/app/CMakeLists.txt +54 -0
  32. data/test/fixtures/app/Doxyfile +1600 -0
  33. data/test/fixtures/app/bindings/all_lua.cpp +299 -0
  34. data/test/fixtures/app/include/matrix.h +162 -0
  35. data/test/fixtures/app/make_lua_bindings.rb +13 -0
  36. data/test/fixtures/app/vendor/lua/CMakeLists.txt +25 -0
  37. data/test/fixtures/app/vendor/lua/COPYRIGHT +34 -0
  38. data/test/fixtures/app/vendor/lua/HISTORY +183 -0
  39. data/test/fixtures/app/vendor/lua/INSTALL +99 -0
  40. data/test/fixtures/app/vendor/lua/Makefile +183 -0
  41. data/test/fixtures/app/vendor/lua/README +37 -0
  42. data/test/fixtures/app/vendor/lua/lapi.c +1080 -0
  43. data/test/fixtures/app/vendor/lua/lapi.h +16 -0
  44. data/test/fixtures/app/vendor/lua/lauxlib.c +653 -0
  45. data/test/fixtures/app/vendor/lua/lauxlib.h +174 -0
  46. data/test/fixtures/app/vendor/lua/lbaselib.c +643 -0
  47. data/test/fixtures/app/vendor/lua/lcode.c +839 -0
  48. data/test/fixtures/app/vendor/lua/lcode.h +76 -0
  49. data/test/fixtures/app/vendor/lua/ldblib.c +397 -0
  50. data/test/fixtures/app/vendor/lua/ldebug.c +622 -0
  51. data/test/fixtures/app/vendor/lua/ldebug.h +33 -0
  52. data/test/fixtures/app/vendor/lua/ldo.c +516 -0
  53. data/test/fixtures/app/vendor/lua/ldo.h +57 -0
  54. data/test/fixtures/app/vendor/lua/ldump.c +164 -0
  55. data/test/fixtures/app/vendor/lua/lfunc.c +174 -0
  56. data/test/fixtures/app/vendor/lua/lfunc.h +34 -0
  57. data/test/fixtures/app/vendor/lua/lgc.c +711 -0
  58. data/test/fixtures/app/vendor/lua/lgc.h +110 -0
  59. data/test/fixtures/app/vendor/lua/liblua.a +0 -0
  60. data/test/fixtures/app/vendor/lua/linit.c +38 -0
  61. data/test/fixtures/app/vendor/lua/liolib.c +532 -0
  62. data/test/fixtures/app/vendor/lua/llex.c +461 -0
  63. data/test/fixtures/app/vendor/lua/llex.h +81 -0
  64. data/test/fixtures/app/vendor/lua/llimits.h +128 -0
  65. data/test/fixtures/app/vendor/lua/lmathlib.c +263 -0
  66. data/test/fixtures/app/vendor/lua/lmem.c +86 -0
  67. data/test/fixtures/app/vendor/lua/lmem.h +49 -0
  68. data/test/fixtures/app/vendor/lua/loadlib.c +664 -0
  69. data/test/fixtures/app/vendor/lua/lobject.c +214 -0
  70. data/test/fixtures/app/vendor/lua/lobject.h +381 -0
  71. data/test/fixtures/app/vendor/lua/lopcodes.c +102 -0
  72. data/test/fixtures/app/vendor/lua/lopcodes.h +268 -0
  73. data/test/fixtures/app/vendor/lua/loslib.c +244 -0
  74. data/test/fixtures/app/vendor/lua/lparser.c +1337 -0
  75. data/test/fixtures/app/vendor/lua/lparser.h +82 -0
  76. data/test/fixtures/app/vendor/lua/lstate.c +214 -0
  77. data/test/fixtures/app/vendor/lua/lstate.h +168 -0
  78. data/test/fixtures/app/vendor/lua/lstring.c +111 -0
  79. data/test/fixtures/app/vendor/lua/lstring.h +31 -0
  80. data/test/fixtures/app/vendor/lua/lstrlib.c +868 -0
  81. data/test/fixtures/app/vendor/lua/ltable.c +588 -0
  82. data/test/fixtures/app/vendor/lua/ltable.h +40 -0
  83. data/test/fixtures/app/vendor/lua/ltablib.c +278 -0
  84. data/test/fixtures/app/vendor/lua/ltm.c +75 -0
  85. data/test/fixtures/app/vendor/lua/ltm.h +54 -0
  86. data/test/fixtures/app/vendor/lua/lua.c +695 -0
  87. data/test/fixtures/app/vendor/lua/lua.h +385 -0
  88. data/test/fixtures/app/vendor/lua/lua_dub_helper.h +77 -0
  89. data/test/fixtures/app/vendor/lua/luac +0 -0
  90. data/test/fixtures/app/vendor/lua/luac.c +200 -0
  91. data/test/fixtures/app/vendor/lua/luaconf.h +762 -0
  92. data/test/fixtures/app/vendor/lua/lualib.h +53 -0
  93. data/test/fixtures/app/vendor/lua/lundump.c +223 -0
  94. data/test/fixtures/app/vendor/lua/lundump.h +36 -0
  95. data/test/fixtures/app/vendor/lua/lvm.c +765 -0
  96. data/test/fixtures/app/vendor/lua/lvm.h +36 -0
  97. data/test/fixtures/app/vendor/lua/lzio.c +82 -0
  98. data/test/fixtures/app/vendor/lua/lzio.h +67 -0
  99. data/test/fixtures/app/vendor/lua/matrix.h +102 -0
  100. data/test/fixtures/app/vendor/lua/print.c +227 -0
  101. data/test/fixtures/app/vendor/lua/test/README +26 -0
  102. data/test/fixtures/app/vendor/lua/test/bisect.lua +27 -0
  103. data/test/fixtures/app/vendor/lua/test/cf.lua +16 -0
  104. data/test/fixtures/app/vendor/lua/test/echo.lua +5 -0
  105. data/test/fixtures/app/vendor/lua/test/env.lua +7 -0
  106. data/test/fixtures/app/vendor/lua/test/factorial.lua +32 -0
  107. data/test/fixtures/app/vendor/lua/test/fib.lua +40 -0
  108. data/test/fixtures/app/vendor/lua/test/fibfor.lua +13 -0
  109. data/test/fixtures/app/vendor/lua/test/globals.lua +13 -0
  110. data/test/fixtures/app/vendor/lua/test/hello.lua +3 -0
  111. data/test/fixtures/app/vendor/lua/test/life.lua +111 -0
  112. data/test/fixtures/app/vendor/lua/test/luac.lua +7 -0
  113. data/test/fixtures/app/vendor/lua/test/printf.lua +7 -0
  114. data/test/fixtures/app/vendor/lua/test/readonly.lua +12 -0
  115. data/test/fixtures/app/vendor/lua/test/sieve.lua +29 -0
  116. data/test/fixtures/app/vendor/lua/test/sort.lua +66 -0
  117. data/test/fixtures/app/vendor/lua/test/table.lua +12 -0
  118. data/test/fixtures/app/vendor/lua/test/trace-calls.lua +32 -0
  119. data/test/fixtures/app/vendor/lua/test/trace-globals.lua +38 -0
  120. data/test/fixtures/app/vendor/lua/test/xd.lua +14 -0
  121. data/test/fixtures/app/xml/classdub_1_1_matrix.xml +341 -0
  122. data/test/fixtures/app/xml/classdub_1_1_t_mat.xml +252 -0
  123. data/test/fixtures/app/xml/combine.xslt +15 -0
  124. data/test/fixtures/app/xml/compound.xsd +814 -0
  125. data/test/fixtures/app/xml/dir_53661a2bdeb1d55e60581a7e15deb763.xml +12 -0
  126. data/test/fixtures/app/xml/index.xml +48 -0
  127. data/test/fixtures/app/xml/index.xsd +66 -0
  128. data/test/fixtures/app/xml/matrix_8h.xml +179 -0
  129. data/test/fixtures/app/xml/namespacedub.xml +41 -0
  130. data/test/fixtures/classcv_1_1_mat.xml +1996 -0
  131. data/test/fixtures/classcv_1_1_point__.xml +341 -0
  132. data/test/fixtures/classcv_1_1_scalar__.xml +269 -0
  133. data/test/fixtures/classcv_1_1_size__.xml +270 -0
  134. data/test/fixtures/dummy_class.cpp.erb +1 -0
  135. data/test/fixtures/dummy_function.cpp.erb +1 -0
  136. data/test/fixtures/group___magic_type.xml +406 -0
  137. data/test/fixtures/namespacecv.xml +12659 -0
  138. data/test/function_group_test.rb +24 -0
  139. data/test/function_test.rb +395 -0
  140. data/test/group_test.rb +155 -0
  141. data/test/helper.rb +34 -0
  142. data/test/klass_test.rb +422 -0
  143. data/test/lua_function_gen_test.rb +215 -0
  144. data/test/namespace_test.rb +220 -0
  145. data/test/parser_test.rb +36 -0
  146. metadata +232 -274
  147. checksums.yaml +0 -7
  148. data/lib/open_api_sdk/analytics.rb +0 -99
  149. data/lib/open_api_sdk/domains.rb +0 -353
  150. data/lib/open_api_sdk/dub.rb +0 -88
  151. data/lib/open_api_sdk/links.rb +0 -766
  152. data/lib/open_api_sdk/metatags.rb +0 -54
  153. data/lib/open_api_sdk/models/operations/bulkcreatelinks_response.rb +0 -60
  154. data/lib/open_api_sdk/models/operations/bulkupdatelinks_requestbody.rb +0 -27
  155. data/lib/open_api_sdk/models/operations/bulkupdatelinks_response.rb +0 -60
  156. data/lib/open_api_sdk/models/operations/color.rb +0 -24
  157. data/lib/open_api_sdk/models/operations/createdomain_requestbody.rb +0 -33
  158. data/lib/open_api_sdk/models/operations/createdomain_response.rb +0 -60
  159. data/lib/open_api_sdk/models/operations/createlink_requestbody.rb +0 -95
  160. data/lib/open_api_sdk/models/operations/createlink_response.rb +0 -60
  161. data/lib/open_api_sdk/models/operations/createtag_requestbody.rb +0 -32
  162. data/lib/open_api_sdk/models/operations/createtag_response.rb +0 -60
  163. data/lib/open_api_sdk/models/operations/data.rb +0 -83
  164. data/lib/open_api_sdk/models/operations/deletedomain_request.rb +0 -24
  165. data/lib/open_api_sdk/models/operations/deletedomain_response.rb +0 -60
  166. data/lib/open_api_sdk/models/operations/deletedomain_responsebody.rb +0 -24
  167. data/lib/open_api_sdk/models/operations/deletelink_request.rb +0 -24
  168. data/lib/open_api_sdk/models/operations/deletelink_response.rb +0 -60
  169. data/lib/open_api_sdk/models/operations/deletelink_responsebody.rb +0 -24
  170. data/lib/open_api_sdk/models/operations/event.rb +0 -21
  171. data/lib/open_api_sdk/models/operations/getlinkinfo_request.rb +0 -33
  172. data/lib/open_api_sdk/models/operations/getlinkinfo_response.rb +0 -60
  173. data/lib/open_api_sdk/models/operations/getlinks_request.rb +0 -51
  174. data/lib/open_api_sdk/models/operations/getlinks_response.rb +0 -60
  175. data/lib/open_api_sdk/models/operations/getlinkscount_request.rb +0 -48
  176. data/lib/open_api_sdk/models/operations/getlinkscount_response.rb +0 -60
  177. data/lib/open_api_sdk/models/operations/getmetatags_request.rb +0 -24
  178. data/lib/open_api_sdk/models/operations/getmetatags_response.rb +0 -33
  179. data/lib/open_api_sdk/models/operations/getmetatags_responsebody.rb +0 -30
  180. data/lib/open_api_sdk/models/operations/getqrcode_request.rb +0 -39
  181. data/lib/open_api_sdk/models/operations/getqrcode_response.rb +0 -60
  182. data/lib/open_api_sdk/models/operations/gettags_response.rb +0 -60
  183. data/lib/open_api_sdk/models/operations/getworkspace_request.rb +0 -24
  184. data/lib/open_api_sdk/models/operations/getworkspace_response.rb +0 -60
  185. data/lib/open_api_sdk/models/operations/groupby.rb +0 -28
  186. data/lib/open_api_sdk/models/operations/interval.rb +0 -25
  187. data/lib/open_api_sdk/models/operations/level.rb +0 -21
  188. data/lib/open_api_sdk/models/operations/listdomains_response.rb +0 -60
  189. data/lib/open_api_sdk/models/operations/paymentprocessor.rb +0 -20
  190. data/lib/open_api_sdk/models/operations/requestbody.rb +0 -95
  191. data/lib/open_api_sdk/models/operations/retrieveanalytics_request.rb +0 -81
  192. data/lib/open_api_sdk/models/operations/retrieveanalytics_response.rb +0 -60
  193. data/lib/open_api_sdk/models/operations/sort.rb +0 -20
  194. data/lib/open_api_sdk/models/operations/trackcustomer_requestbody.rb +0 -33
  195. data/lib/open_api_sdk/models/operations/trackcustomer_response.rb +0 -60
  196. data/lib/open_api_sdk/models/operations/trackcustomer_responsebody.rb +0 -33
  197. data/lib/open_api_sdk/models/operations/tracklead_requestbody.rb +0 -42
  198. data/lib/open_api_sdk/models/operations/tracklead_response.rb +0 -60
  199. data/lib/open_api_sdk/models/operations/tracklead_responsebody.rb +0 -42
  200. data/lib/open_api_sdk/models/operations/tracksale_requestbody.rb +0 -42
  201. data/lib/open_api_sdk/models/operations/tracksale_response.rb +0 -60
  202. data/lib/open_api_sdk/models/operations/tracksale_responsebody.rb +0 -42
  203. data/lib/open_api_sdk/models/operations/updatedomain_request.rb +0 -27
  204. data/lib/open_api_sdk/models/operations/updatedomain_requestbody.rb +0 -33
  205. data/lib/open_api_sdk/models/operations/updatedomain_response.rb +0 -60
  206. data/lib/open_api_sdk/models/operations/updatelink_request.rb +0 -27
  207. data/lib/open_api_sdk/models/operations/updatelink_requestbody.rb +0 -95
  208. data/lib/open_api_sdk/models/operations/updatelink_response.rb +0 -60
  209. data/lib/open_api_sdk/models/operations/updatetag_color.rb +0 -24
  210. data/lib/open_api_sdk/models/operations/updatetag_request.rb +0 -27
  211. data/lib/open_api_sdk/models/operations/updatetag_requestbody.rb +0 -32
  212. data/lib/open_api_sdk/models/operations/updatetag_response.rb +0 -60
  213. data/lib/open_api_sdk/models/operations/updateworkspace_request.rb +0 -27
  214. data/lib/open_api_sdk/models/operations/updateworkspace_requestbody.rb +0 -27
  215. data/lib/open_api_sdk/models/operations/updateworkspace_response.rb +0 -60
  216. data/lib/open_api_sdk/models/operations/upsertlink_requestbody.rb +0 -95
  217. data/lib/open_api_sdk/models/operations/upsertlink_response.rb +0 -60
  218. data/lib/open_api_sdk/models/operations.rb +0 -74
  219. data/lib/open_api_sdk/models/shared/badrequest.rb +0 -24
  220. data/lib/open_api_sdk/models/shared/code.rb +0 -18
  221. data/lib/open_api_sdk/models/shared/color.rb +0 -24
  222. data/lib/open_api_sdk/models/shared/conflict.rb +0 -24
  223. data/lib/open_api_sdk/models/shared/conflict_code.rb +0 -18
  224. data/lib/open_api_sdk/models/shared/conflict_error.rb +0 -30
  225. data/lib/open_api_sdk/models/shared/countrycode.rb +0 -267
  226. data/lib/open_api_sdk/models/shared/domains.rb +0 -27
  227. data/lib/open_api_sdk/models/shared/domainschema.rb +0 -48
  228. data/lib/open_api_sdk/models/shared/error.rb +0 -30
  229. data/lib/open_api_sdk/models/shared/forbidden.rb +0 -24
  230. data/lib/open_api_sdk/models/shared/forbidden_code.rb +0 -18
  231. data/lib/open_api_sdk/models/shared/forbidden_error.rb +0 -30
  232. data/lib/open_api_sdk/models/shared/geo.rb +0 -771
  233. data/lib/open_api_sdk/models/shared/internalservererror.rb +0 -24
  234. data/lib/open_api_sdk/models/shared/internalservererror_code.rb +0 -18
  235. data/lib/open_api_sdk/models/shared/internalservererror_error.rb +0 -30
  236. data/lib/open_api_sdk/models/shared/inviteexpired.rb +0 -24
  237. data/lib/open_api_sdk/models/shared/inviteexpired_code.rb +0 -18
  238. data/lib/open_api_sdk/models/shared/inviteexpired_error.rb +0 -30
  239. data/lib/open_api_sdk/models/shared/linkgeotargeting.rb +0 -771
  240. data/lib/open_api_sdk/models/shared/linkschema.rb +0 -142
  241. data/lib/open_api_sdk/models/shared/notfound.rb +0 -24
  242. data/lib/open_api_sdk/models/shared/notfound_code.rb +0 -18
  243. data/lib/open_api_sdk/models/shared/notfound_error.rb +0 -30
  244. data/lib/open_api_sdk/models/shared/plan.rb +0 -24
  245. data/lib/open_api_sdk/models/shared/ratelimitexceeded.rb +0 -24
  246. data/lib/open_api_sdk/models/shared/ratelimitexceeded_code.rb +0 -18
  247. data/lib/open_api_sdk/models/shared/ratelimitexceeded_error.rb +0 -30
  248. data/lib/open_api_sdk/models/shared/role.rb +0 -19
  249. data/lib/open_api_sdk/models/shared/security.rb +0 -24
  250. data/lib/open_api_sdk/models/shared/tagschema.rb +0 -30
  251. data/lib/open_api_sdk/models/shared/unauthorized.rb +0 -24
  252. data/lib/open_api_sdk/models/shared/unauthorized_code.rb +0 -18
  253. data/lib/open_api_sdk/models/shared/unauthorized_error.rb +0 -30
  254. data/lib/open_api_sdk/models/shared/unprocessableentity.rb +0 -24
  255. data/lib/open_api_sdk/models/shared/unprocessableentity_code.rb +0 -18
  256. data/lib/open_api_sdk/models/shared/unprocessableentity_error.rb +0 -30
  257. data/lib/open_api_sdk/models/shared/users.rb +0 -24
  258. data/lib/open_api_sdk/models/shared/workspaceschema.rb +0 -81
  259. data/lib/open_api_sdk/models/shared.rb +0 -49
  260. data/lib/open_api_sdk/qr_codes.rb +0 -97
  261. data/lib/open_api_sdk/sdkconfiguration.rb +0 -52
  262. data/lib/open_api_sdk/tags.rb +0 -272
  263. data/lib/open_api_sdk/track.rb +0 -276
  264. data/lib/open_api_sdk/utils/metadata_fields.rb +0 -150
  265. data/lib/open_api_sdk/utils/t.rb +0 -59
  266. data/lib/open_api_sdk/utils/utils.rb +0 -772
  267. data/lib/open_api_sdk/workspaces.rb +0 -192
@@ -0,0 +1,92 @@
1
+ require 'dub/function'
2
+ require 'dub/function_group'
3
+ require 'dub/klass'
4
+
5
+ module Dub
6
+ class Klass
7
+ end
8
+
9
+ # This module is used by Namespace and Klass to extract member functions
10
+ module MemberExtraction
11
+ def members_prefix
12
+ @name
13
+ end
14
+
15
+ def parse_members
16
+ @members_hash = {}
17
+ @t_members_hash = {}
18
+ # TODO: template functions
19
+ (@xml/'memberdef').each do |member|
20
+ Dub.logger.info "Parsing #{(member/'name').innerHTML}"
21
+ name = (member/"name").innerHTML
22
+ if (member/'templateparamlist').first
23
+ insert_member(member, name, @t_members_hash)
24
+ else
25
+ insert_member(member, name, @members_hash)
26
+ end
27
+ end
28
+ end
29
+
30
+ def insert_member(member, name, destination)
31
+ if destination[name].kind_of?(Array)
32
+ destination[name] << member
33
+ elsif first_member = destination[name]
34
+ destination[name] = [first_member, member]
35
+ else
36
+ destination[name] = member
37
+ end
38
+ end
39
+
40
+ def member(name)
41
+ get_member(name.to_s, @members_hash)
42
+ end
43
+
44
+ def members
45
+ @members ||= begin
46
+ list = []
47
+ @members_hash.each do |name, member|
48
+ list << get_member(name)
49
+ end
50
+ list.compact!
51
+ list.sort
52
+ end
53
+ end
54
+
55
+ def template_method(name)
56
+ get_member(name.to_s, @t_members_hash)
57
+ end
58
+
59
+ # Lazy construction of members
60
+ def get_member(name, source = @members_hash)
61
+ if member_or_group = source[name]
62
+ if member_or_group.kind_of?(Array)
63
+ if member_or_group.first.kind_of?(Hpricot::Elem)
64
+ list = Dub::FunctionGroup.new(self)
65
+ member_or_group.each_with_index do |m,i|
66
+ list << make_member(name, m, i + 1)
67
+ end
68
+ member_or_group = list.compact
69
+ member_or_group = nil if member_or_group == []
70
+ end
71
+ elsif member_or_group.kind_of?(Hpricot::Elem)
72
+ source[name] = member_or_group = make_member(name, member_or_group)
73
+ end
74
+ end
75
+ member_or_group
76
+ end
77
+
78
+ def make_member(name, member, overloaded_index = nil)
79
+ case member[:kind]
80
+ when 'function'
81
+ Dub.logger.info "Building #{members_prefix}::#{name}"
82
+ Function.new(self, name, member, members_prefix, overloaded_index)
83
+ when 'class'
84
+ Dub.logger.info "Building #{members_prefix}::#{name}"
85
+ Klass.new(self, name, member, members_prefix)
86
+ else
87
+ # not supported: ignore
88
+ nil
89
+ end
90
+ end
91
+ end
92
+ end # Dub
@@ -0,0 +1,277 @@
1
+ require 'dub/member_extraction'
2
+
3
+ module Dub
4
+
5
+ class Namespace
6
+ include MemberExtraction
7
+ attr_accessor :name, :gen, :xml, :enums, :parent, :header, :prefix, :defines
8
+
9
+ def initialize(name, xml, current_dir)
10
+ @name, @xml, @current_dir = name, xml, current_dir
11
+ @class_alias = {}
12
+ @alias_names = []
13
+ @enums = []
14
+ @defines = []
15
+ @ignores = []
16
+ parse_xml
17
+ end
18
+
19
+ def bind(generator)
20
+ self.gen = generator.namespace_generator
21
+ end
22
+
23
+ def gen=(generator)
24
+ @gen = generator
25
+ @gen_members = nil
26
+ end
27
+
28
+ def generator
29
+ @gen
30
+ end
31
+
32
+ def class_generator
33
+ @gen && @gen.class_generator
34
+ end
35
+
36
+ def function_generator
37
+ @gen && @gen.function_generator
38
+ end
39
+
40
+ alias gen generator
41
+
42
+ def to_s
43
+ @gen.namespace(self)
44
+ end
45
+
46
+ def merge!(group)
47
+ raise "Can only merge with a Group" unless group.kind_of?(Group)
48
+ @defines += group.defines
49
+ @enums += group.enums
50
+
51
+ # TODO: do we need to merge classes and members ? I don't think so (they should be in namespace).
52
+ end
53
+
54
+ def ignore(list)
55
+ list = [list].flatten
56
+ @ignores += list
57
+ self.classes.reject! {|k| list.include?(k.name) }
58
+ @ignores.uniq!
59
+ @gen_members = nil
60
+ end
61
+
62
+ def full_type
63
+ @parent ? "#{@parent.full_type}::#{name}" : name
64
+ end
65
+
66
+ def lib_name
67
+ prefix ? "#{prefix}_#{name}" : name
68
+ end
69
+
70
+ def id_name(name = self.name)
71
+ prefix ? "#{prefix}.#{name}" : name
72
+ end
73
+
74
+ def header
75
+ @header ||= (@xml/'location').first.attributes['file'].split('/').last
76
+ end
77
+
78
+ def [](name)
79
+ get_member(name.to_s) || klass(name.to_s)
80
+ end
81
+
82
+ def function(name)
83
+ member = get_member(name.to_s)
84
+ member.kind_of?(Function) ? member : nil
85
+ end
86
+
87
+ def klass(name)
88
+ get_class(name.to_s, @classes_hash) || get_alias(name.to_s)
89
+ end
90
+
91
+ def template_class(name)
92
+ get_class(name.to_s, @t_classes_hash)
93
+ end
94
+
95
+ def classes
96
+ @classes ||= begin
97
+ list = []
98
+ @classes_hash.each do |name, member|
99
+ list << get_class(name, @classes_hash)
100
+ end
101
+ list.compact!
102
+ list.sort
103
+ end
104
+ end
105
+
106
+ def members
107
+ if self.generator
108
+ @gen_members ||= self.generator.members_list(super, @ignores)
109
+ else
110
+ super
111
+ end
112
+ end
113
+
114
+ def has_constants?
115
+ has_enums? || has_defines?
116
+ end
117
+
118
+ def has_enums?
119
+ !@enums.empty?
120
+ end
121
+
122
+ def has_defines?
123
+ !@defines.empty?
124
+ end
125
+
126
+ def register_alias(name, klass)
127
+ @class_alias[name] = klass
128
+ end
129
+
130
+ private
131
+ def parse_xml
132
+ parse_enums
133
+ parse_members
134
+ parse_classes
135
+ end
136
+
137
+ def parse_enums
138
+ @enums = (@xml/"enumvalue/name").map{|e| e.innerHTML}
139
+ end
140
+
141
+ # We do not run this by default but use groups to make sure we do
142
+ # not cluter namespace
143
+ def parse_defines
144
+ @defines = (@xml/"memberdef[@kind=define]").map do |e|
145
+ if (e/'param').first
146
+ nil
147
+ else
148
+ (e/'name').innerHTML
149
+ end
150
+ end.compact
151
+ end
152
+
153
+ def parse_classes
154
+ @classes_hash = {}
155
+ @t_classes_hash = {}
156
+ @classes_by_ref = {}
157
+ (@xml/'innerclass').each do |klass|
158
+ name = klass.innerHTML
159
+ Dub.logger.info "Parsing #{name}"
160
+ if name =~ /^#{@name}::(.+)$/
161
+ name = $1
162
+ end
163
+ filename = klass.attributes['refid']
164
+ filepath = File.join(@current_dir, "#{filename}.xml")
165
+ if File.exist?(filepath)
166
+ class_xml = (Hpricot::XML(File.read(filepath))/'compounddef').first
167
+ if (class_xml/'/templateparamlist/param').innerHTML != ''
168
+ @t_classes_hash[name] = class_xml
169
+ else
170
+ @classes_hash[name] = class_xml
171
+ end
172
+ @classes_by_ref[class_xml[:id]] = class_xml
173
+ else
174
+ Dub.logger.warn "Could not open #{filepath}"
175
+ nil
176
+ end
177
+ end
178
+ parse_template_class_typedefs
179
+ end
180
+
181
+ def parse_template_class_typedefs
182
+ (@xml/'memberdef[@kind=typedef]').each do |typedef_xml|
183
+ # <type><ref refid="classdoxy_1_1_t_mat" kindref="compound">TMat</ref>&lt; float &gt;</type>
184
+ if id = (typedef_xml/'/type/ref').first
185
+ id = id[:refid]
186
+ end
187
+
188
+ new_name = (typedef_xml/'name').innerHTML
189
+
190
+ if ref_class = @classes_by_ref[id]
191
+ if (typedef_xml/'/type').innerHTML =~ /&gt;$/
192
+
193
+ # nested template types, too hard for us, ignore
194
+ next if (typedef_xml/'/type').innerHTML =~ /&gt;\s+&gt;/
195
+
196
+ # template typedef
197
+ old_name = (ref_class/'/compoundname').first.innerHTML.gsub(/^.*::/,'')
198
+
199
+ # replace class name
200
+ # <type><ref refid="classcv_1_1_scalar__" kindref="compound">Scalar_</ref>&lt; _Tp &gt;</type>
201
+ class_def = ref_class.to_s.gsub(/<ref .*>#{old_name}<\/ref>&lt;.*?&gt;/, new_name)
202
+ class_def = class_def.gsub(/#{old_name}/, new_name)
203
+
204
+ # replace template types
205
+ # get template parameters
206
+ ttypes = (ref_class/'/templateparamlist/param').map do |param|
207
+ if type = (param/'declname').first
208
+ type.innerHTML
209
+ else
210
+ (param/'type').innerHTML.gsub(/^\s*(typename|class)\s+/,'')
211
+ end
212
+ end
213
+
214
+ types_map = {}
215
+ instanciations_params = []
216
+ (typedef_xml/'/type').innerHTML[/&lt;\s*(.+?)\s*&gt;$/,1].split(',').map(&:strip).each_with_index do |type, i|
217
+ instanciations_params << type
218
+ types_map[ttypes[i]] = type
219
+ end
220
+
221
+ class_xml = (Hpricot::XML(class_def)/'compounddef').first
222
+
223
+ (class_xml/'*[@prot=private]').remove
224
+ (class_xml/'/templateparamlist').remove
225
+ (class_xml/'').append("<originaltemplate>#{old_name}</originaltemplate>")
226
+ (ref_class/'').append("<instanciation><name>#{new_name}</name><param>#{instanciations_params.join('</param><param>')}</param></instanciation>")
227
+
228
+ types_map.each do |template_type, real_type|
229
+ (class_xml/'type').each do |t|
230
+ t.swap(t.to_s.gsub(template_type, real_type))
231
+ end
232
+ end
233
+
234
+ @classes_hash[new_name] = class_xml
235
+ else
236
+ # alias
237
+ original_name = (typedef_xml/'/type/ref').innerHTML
238
+ if class_xml = @classes_hash[original_name]
239
+ @alias_names << new_name
240
+ if (class_xml/'/aliases').first
241
+ (class_xml/'/aliases').append("<name>#{new_name}</name>")
242
+ else
243
+ (class_xml/'').append("<aliases><name>#{new_name}</name></aliases>")
244
+ end
245
+ else
246
+ Dub.logger.warn "Could not find original class #{original_name}"
247
+ end
248
+ end
249
+ else
250
+ Dub.logger.warn "Could not find reference class #{id}"
251
+ end
252
+ end
253
+ end
254
+
255
+ def get_class(name, source)
256
+ if klass = source[name]
257
+ if klass.kind_of?(Hpricot::Elem)
258
+ klass = source[name] = make_member(name, klass)
259
+ end
260
+ end
261
+ klass
262
+ end
263
+
264
+ def get_alias(name)
265
+ if klass = @class_alias[name]
266
+ return klass
267
+ elsif @classes || !@alias_names.include?(name)
268
+ # classes parsed, alias does not exist
269
+ nil
270
+ else
271
+ # we need to parse all classes so they register the alias
272
+ self.classes
273
+ @class_alias[name]
274
+ end
275
+ end
276
+ end
277
+ end # Namespace
@@ -0,0 +1,30 @@
1
+ module Dub
2
+ module OptsParser
3
+
4
+ def self.extract_hash(xml)
5
+ (xml/'simplesect').each do |x|
6
+ if (x/'title').inner_html == 'Bindings info:'
7
+ (x/'title').remove()
8
+ (x/'ref').each do |r|
9
+ r.swap(r.inner_html)
10
+ end
11
+ code = EntitiesUnescape::Decoder.decode((x/'para').inner_html)
12
+ return self.parse(code)
13
+ end
14
+ end
15
+ nil
16
+ end
17
+
18
+ def self.parse(src)
19
+ res = {}
20
+ while !src.empty?
21
+ src = src.sub(/^\s*([^:]+):\s*('[^']+'|"[^"]+")\s*,?\s*/m) do
22
+ res[$1.to_sym] = $2[1..-2]
23
+ ''
24
+ end
25
+ end
26
+ res
27
+ end
28
+ end # OptsParser
29
+ end # Dub
30
+
data/lib/dub/parser.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'hpricot'
3
+ require 'dub/namespace'
4
+
5
+ module Dub
6
+ class Parser
7
+ def initialize(filepath)
8
+ @current_dir = File.dirname(filepath)
9
+ @xml = Hpricot::XML(File.read(filepath))
10
+ end
11
+
12
+ def [](name)
13
+ namespaces[name.to_s] || groups[name.to_s]
14
+ end
15
+
16
+ def namespace(name)
17
+ namespaces[name.to_s]
18
+ end
19
+
20
+ def group(name)
21
+ groups[name.to_s]
22
+ end
23
+
24
+ def namespaces
25
+ @namespaces ||= begin
26
+ ns = {}
27
+ (@xml/'compounddef[@kind=namespace]').each do |namespace|
28
+ name = (namespace/"compoundname").innerHTML
29
+ ns[name] = Dub::Namespace.new(name, namespace, @current_dir)
30
+ end
31
+ ns
32
+ end
33
+ end
34
+
35
+ def groups
36
+ @groups ||= begin
37
+ groups = {}
38
+ (@xml/'compounddef[@kind=group]').each do |namespace|
39
+ name = (namespace/"compoundname").innerHTML
40
+ groups[name] = Dub::Group.new(name, namespace, @current_dir)
41
+ end
42
+ groups
43
+ end
44
+ end
45
+ end # Parser
46
+ end
@@ -0,0 +1,21 @@
1
+
2
+ static bool is_userdata(lua_State *L, int index, const char *tname) {
3
+ void *p = lua_touserdata(L, index);
4
+ if (p != NULL) { /* value is a userdata? */
5
+ if (lua_getmetatable(L, index)) { /* does it have a metatable? */
6
+ lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get correct metatable */
7
+ if (lua_rawequal(L, -1, -2)) { /* does it have the correct mt? */
8
+ lua_pop(L, 2); /* remove both metatables */
9
+ // type match
10
+ return true;
11
+ }
12
+ }
13
+ }
14
+ // type does not match
15
+ return false;
16
+ }
17
+
18
+ <%= @bindings %>
19
+
20
+ <%= @init_code %>
21
+
@@ -0,0 +1,3 @@
1
+ module Dub
2
+ VERSION = '0.6.6'
3
+ end
data/lib/dub.rb CHANGED
@@ -1,23 +1,27 @@
1
- # Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
1
+ require 'dub/entities_unescape'
2
+ require 'dub/parser'
3
+ require 'dub/namespace'
4
+ require 'dub/group'
5
+ require 'dub/klass'
6
+ require 'dub/function'
7
+ require 'dub/argument'
8
+ require 'logger'
9
+ require 'dub/opts_parser'
2
10
 
3
- # typed: true
4
- # frozen_string_literal: true
11
+ module Dub
12
+ def self.logger=(logger)
13
+ @@logger = logger
14
+ end
5
15
 
6
- module OpenApiSDK
7
- autoload :Dub, 'open_api_sdk/dub'
8
- autoload :Shared, 'open_api_sdk/models/shared'
9
- autoload :Operations, 'open_api_sdk/models/operations'
10
- autoload :Links, 'open_api_sdk/links'
11
- autoload :QRCodes, 'open_api_sdk/qr_codes'
12
- autoload :Analytics, 'open_api_sdk/analytics'
13
- autoload :Workspaces, 'open_api_sdk/workspaces'
14
- autoload :Tags, 'open_api_sdk/tags'
15
- autoload :Domains, 'open_api_sdk/domains'
16
- autoload :Track, 'open_api_sdk/track'
17
- autoload :Metatags, 'open_api_sdk/metatags'
18
- end
16
+ def self.logger
17
+ @@logger ||= begin
18
+ logger = Logger.new(STDERR)
19
+ logger.level == Logger::INFO
20
+ logger
21
+ end
22
+ end
19
23
 
20
- require_relative 'open_api_sdk/utils/t'
21
- require_relative 'open_api_sdk/utils/utils'
22
- require_relative 'open_api_sdk/utils/metadata_fields'
23
- require_relative 'open_api_sdk/sdkconfiguration'
24
+ def self.parse(filename)
25
+ Dub::Parser.new(filename)
26
+ end
27
+ end