lounge_lizard 0.1.0

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 (348) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +2 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +4 -0
  7. data/Guardfile +33 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +50 -0
  10. data/Rakefile +43 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/circle.yml +14 -0
  14. data/ext/drafter/CHANGELOG.md +278 -0
  15. data/ext/drafter/Dockerfile +17 -0
  16. data/ext/drafter/Makefile +62 -0
  17. data/ext/drafter/appveyor.yml +17 -0
  18. data/ext/drafter/bin/drafter +0 -0
  19. data/ext/drafter/build/Makefile +387 -0
  20. data/ext/drafter/build/drafter.Makefile +6 -0
  21. data/ext/drafter/build/drafter.target.mk +159 -0
  22. data/ext/drafter/build/ext/snowcrash/libmarkdownparser.target.mk +141 -0
  23. data/ext/drafter/build/ext/snowcrash/libsnowcrash.target.mk +154 -0
  24. data/ext/drafter/build/ext/snowcrash/libsundown.target.mk +149 -0
  25. data/ext/drafter/build/ext/snowcrash/perf-libsnowcrash.target.mk +147 -0
  26. data/ext/drafter/build/ext/snowcrash/snowcrash.Makefile +6 -0
  27. data/ext/drafter/build/gyp-mac-tool +606 -0
  28. data/ext/drafter/build/libdrafter.target.mk +186 -0
  29. data/ext/drafter/build/libsos.target.mk +137 -0
  30. data/ext/drafter/build/out/Release/drafter +0 -0
  31. data/ext/drafter/build/out/Release/libdrafter.dylib +0 -0
  32. data/ext/drafter/build/out/Release/libmarkdownparser.a +0 -0
  33. data/ext/drafter/build/out/Release/libsnowcrash.a +0 -0
  34. data/ext/drafter/build/out/Release/libsos.a +0 -0
  35. data/ext/drafter/build/out/Release/libsundown.a +0 -0
  36. data/ext/drafter/build/out/Release/obj.target/drafter/src/config.o +0 -0
  37. data/ext/drafter/build/out/Release/obj.target/drafter/src/main.o +0 -0
  38. data/ext/drafter/build/out/Release/obj.target/drafter/src/reporting.o +0 -0
  39. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/ConversionContext.o +0 -0
  40. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/NamedTypesRegistry.o +0 -0
  41. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractAPI.o +0 -0
  42. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractDataStructure.o +0 -0
  43. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractElementFactory.o +0 -0
  44. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractSourceMap.o +0 -0
  45. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/Render.o +0 -0
  46. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/Serialize.o +0 -0
  47. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeAST.o +0 -0
  48. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeResult.o +0 -0
  49. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeSourcemap.o +0 -0
  50. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/drafter.o +0 -0
  51. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/drafter_private.o +0 -0
  52. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/ComparableVisitor.o +0 -0
  53. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/Element.o +0 -0
  54. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/ExpandVisitor.o +0 -0
  55. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/IsExpandableVisitor.o +0 -0
  56. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/JSONSchemaVisitor.o +0 -0
  57. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/PrintVisitor.o +0 -0
  58. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/Query.o +0 -0
  59. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/Registry.o +0 -0
  60. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/RenderJSONVisitor.o +0 -0
  61. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/SerializeCompactVisitor.o +0 -0
  62. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/SerializeVisitor.o +0 -0
  63. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/TypeQueryVisitor.o +0 -0
  64. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/VisitorUtils.o +0 -0
  65. data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.o +0 -0
  66. data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.o +0 -0
  67. data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.o +0 -0
  68. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Blueprint.o +0 -0
  69. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/BlueprintSourcemap.o +0 -0
  70. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/HTTP.o +0 -0
  71. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/HeadersParser.o +0 -0
  72. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSON.o +0 -0
  73. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONOneOfParser.o +0 -0
  74. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONSourcemap.o +0 -0
  75. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONTypeSectionParser.o +0 -0
  76. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONValueMemberParser.o +0 -0
  77. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Section.o +0 -0
  78. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Signature.o +0 -0
  79. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/UriTemplateParser.o +0 -0
  80. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/posix/RegexMatch.o +0 -0
  81. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/snowcrash.o +0 -0
  82. data/ext/drafter/build/out/Release/obj.target/libsos/ext/sos/src/sos.o +0 -0
  83. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_href_e.o +0 -0
  84. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_html_e.o +0 -0
  85. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html.o +0 -0
  86. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html_smartypants.o +0 -0
  87. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/autolink.o +0 -0
  88. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/buffer.o +0 -0
  89. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.o +0 -0
  90. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/src_map.o +0 -0
  91. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/stack.o +0 -0
  92. data/ext/drafter/circle.yml +32 -0
  93. data/ext/drafter/config.gypi +10 -0
  94. data/ext/drafter/config.mk +5 -0
  95. data/ext/drafter/configure +224 -0
  96. data/ext/drafter/drafter.gyp +189 -0
  97. data/ext/drafter/drafter.xcworkspace/contents.xcworkspacedata +13 -0
  98. data/ext/drafter/ext/snowcrash/Makefile +58 -0
  99. data/ext/drafter/ext/snowcrash/appveyor.yml +7 -0
  100. data/ext/drafter/ext/snowcrash/common.gypi +165 -0
  101. data/ext/drafter/ext/snowcrash/configure +197 -0
  102. data/ext/drafter/ext/snowcrash/ext/markdown-parser/Makefile +90 -0
  103. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/CONTRIBUTING.md +10 -0
  104. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/Makefile +84 -0
  105. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/Makefile.win +33 -0
  106. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/examples/smartypants.c +72 -0
  107. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/examples/sundown.c +80 -0
  108. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini.h +37 -0
  109. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_href_e.c +108 -0
  110. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_html_e.c +84 -0
  111. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html.c +647 -0
  112. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html.h +77 -0
  113. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html_smartypants.c +389 -0
  114. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html_block_names.txt +25 -0
  115. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/autolink.c +297 -0
  116. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/autolink.h +51 -0
  117. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/buffer.c +225 -0
  118. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/buffer.h +96 -0
  119. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/html_blocks.h +206 -0
  120. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.c +2726 -0
  121. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.h +147 -0
  122. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/src_map.c +204 -0
  123. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/src_map.h +58 -0
  124. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/stack.c +81 -0
  125. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/stack.h +29 -0
  126. data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/sundown.def +20 -0
  127. data/ext/drafter/ext/snowcrash/ext/markdown-parser/msvc/markdown/markdown.vcproj +188 -0
  128. data/ext/drafter/ext/snowcrash/ext/markdown-parser/msvc/msvc.sln +38 -0
  129. data/ext/drafter/ext/snowcrash/ext/markdown-parser/msvc/sundown/sundown.vcproj +206 -0
  130. data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.cc +160 -0
  131. data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.h +90 -0
  132. data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.cc +152 -0
  133. data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.h +103 -0
  134. data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.cc +388 -0
  135. data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.h +106 -0
  136. data/ext/drafter/ext/snowcrash/snowcrash.gyp +196 -0
  137. data/ext/drafter/ext/snowcrash/src/ActionParser.h +560 -0
  138. data/ext/drafter/ext/snowcrash/src/AssetParser.h +123 -0
  139. data/ext/drafter/ext/snowcrash/src/AttributesParser.h +123 -0
  140. data/ext/drafter/ext/snowcrash/src/Blueprint.cc +90 -0
  141. data/ext/drafter/ext/snowcrash/src/Blueprint.h +489 -0
  142. data/ext/drafter/ext/snowcrash/src/BlueprintParser.h +845 -0
  143. data/ext/drafter/ext/snowcrash/src/BlueprintSourcemap.cc +81 -0
  144. data/ext/drafter/ext/snowcrash/src/BlueprintSourcemap.h +345 -0
  145. data/ext/drafter/ext/snowcrash/src/BlueprintUtility.h +111 -0
  146. data/ext/drafter/ext/snowcrash/src/CodeBlockUtility.h +276 -0
  147. data/ext/drafter/ext/snowcrash/src/DataStructureGroupParser.h +157 -0
  148. data/ext/drafter/ext/snowcrash/src/HTTP.cc +49 -0
  149. data/ext/drafter/ext/snowcrash/src/HTTP.h +108 -0
  150. data/ext/drafter/ext/snowcrash/src/HeadersParser.cc +117 -0
  151. data/ext/drafter/ext/snowcrash/src/HeadersParser.h +377 -0
  152. data/ext/drafter/ext/snowcrash/src/MSON.cc +272 -0
  153. data/ext/drafter/ext/snowcrash/src/MSON.h +405 -0
  154. data/ext/drafter/ext/snowcrash/src/MSONMixinParser.h +103 -0
  155. data/ext/drafter/ext/snowcrash/src/MSONNamedTypeParser.h +135 -0
  156. data/ext/drafter/ext/snowcrash/src/MSONOneOfParser.cc +132 -0
  157. data/ext/drafter/ext/snowcrash/src/MSONOneOfParser.h +80 -0
  158. data/ext/drafter/ext/snowcrash/src/MSONParameterParser.h +166 -0
  159. data/ext/drafter/ext/snowcrash/src/MSONPropertyMemberParser.h +106 -0
  160. data/ext/drafter/ext/snowcrash/src/MSONSourcemap.cc +141 -0
  161. data/ext/drafter/ext/snowcrash/src/MSONSourcemap.h +181 -0
  162. data/ext/drafter/ext/snowcrash/src/MSONTypeSectionParser.cc +209 -0
  163. data/ext/drafter/ext/snowcrash/src/MSONTypeSectionParser.h +213 -0
  164. data/ext/drafter/ext/snowcrash/src/MSONUtility.h +506 -0
  165. data/ext/drafter/ext/snowcrash/src/MSONValueMemberParser.cc +214 -0
  166. data/ext/drafter/ext/snowcrash/src/MSONValueMemberParser.h +390 -0
  167. data/ext/drafter/ext/snowcrash/src/ModelTable.h +87 -0
  168. data/ext/drafter/ext/snowcrash/src/ParameterParser.h +516 -0
  169. data/ext/drafter/ext/snowcrash/src/ParametersParser.h +222 -0
  170. data/ext/drafter/ext/snowcrash/src/PayloadParser.h +733 -0
  171. data/ext/drafter/ext/snowcrash/src/Platform.h +33 -0
  172. data/ext/drafter/ext/snowcrash/src/RegexMatch.h +32 -0
  173. data/ext/drafter/ext/snowcrash/src/RelationParser.h +87 -0
  174. data/ext/drafter/ext/snowcrash/src/ResourceGroupParser.h +297 -0
  175. data/ext/drafter/ext/snowcrash/src/ResourceParser.h +536 -0
  176. data/ext/drafter/ext/snowcrash/src/Section.cc +48 -0
  177. data/ext/drafter/ext/snowcrash/src/Section.h +60 -0
  178. data/ext/drafter/ext/snowcrash/src/SectionParser.h +246 -0
  179. data/ext/drafter/ext/snowcrash/src/SectionParserData.h +109 -0
  180. data/ext/drafter/ext/snowcrash/src/SectionProcessor.h +299 -0
  181. data/ext/drafter/ext/snowcrash/src/Signature.cc +75 -0
  182. data/ext/drafter/ext/snowcrash/src/Signature.h +103 -0
  183. data/ext/drafter/ext/snowcrash/src/SignatureSectionProcessor.h +442 -0
  184. data/ext/drafter/ext/snowcrash/src/SourceAnnotation.h +166 -0
  185. data/ext/drafter/ext/snowcrash/src/StringUtility.h +323 -0
  186. data/ext/drafter/ext/snowcrash/src/UriTemplateParser.cc +195 -0
  187. data/ext/drafter/ext/snowcrash/src/UriTemplateParser.h +240 -0
  188. data/ext/drafter/ext/snowcrash/src/ValuesParser.h +111 -0
  189. data/ext/drafter/ext/snowcrash/src/posix/RegexMatch.cc +99 -0
  190. data/ext/drafter/ext/snowcrash/src/snowcrash.cc +90 -0
  191. data/ext/drafter/ext/snowcrash/src/snowcrash.h +44 -0
  192. data/ext/drafter/ext/snowcrash/src/win/RegexMatch.cc +78 -0
  193. data/ext/drafter/ext/snowcrash/tools/gyp/AUTHORS +12 -0
  194. data/ext/drafter/ext/snowcrash/tools/gyp/DEPS +23 -0
  195. data/ext/drafter/ext/snowcrash/tools/gyp/OWNERS +1 -0
  196. data/ext/drafter/ext/snowcrash/tools/gyp/PRESUBMIT.py +137 -0
  197. data/ext/drafter/ext/snowcrash/tools/gyp/buildbot/buildbot_run.py +136 -0
  198. data/ext/drafter/ext/snowcrash/tools/gyp/buildbot/commit_queue/OWNERS +6 -0
  199. data/ext/drafter/ext/snowcrash/tools/gyp/buildbot/commit_queue/cq_config.json +15 -0
  200. data/ext/drafter/ext/snowcrash/tools/gyp/codereview.settings +10 -0
  201. data/ext/drafter/ext/snowcrash/tools/gyp/data/win/large-pdb-shim.cc +12 -0
  202. data/ext/drafter/ext/snowcrash/tools/gyp/gyp +8 -0
  203. data/ext/drafter/ext/snowcrash/tools/gyp/gyp.bat +5 -0
  204. data/ext/drafter/ext/snowcrash/tools/gyp/gyp_main.py +16 -0
  205. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSNew.py +340 -0
  206. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSProject.py +208 -0
  207. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSSettings.py +1096 -0
  208. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSToolFile.py +58 -0
  209. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSUserFile.py +147 -0
  210. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSUtil.py +270 -0
  211. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSUtil.pyc +0 -0
  212. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSVersion.py +445 -0
  213. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSVersion.pyc +0 -0
  214. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/__init__.py +548 -0
  215. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/__init__.pyc +0 -0
  216. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/common.py +608 -0
  217. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/common.pyc +0 -0
  218. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/easy_xml.py +157 -0
  219. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/flock_tool.py +54 -0
  220. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/__init__.py +0 -0
  221. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/__init__.pyc +0 -0
  222. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/analyzer.py +741 -0
  223. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/android.py +1069 -0
  224. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/cmake.py +1248 -0
  225. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/dump_dependency_json.py +99 -0
  226. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/eclipse.py +425 -0
  227. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/gypd.py +94 -0
  228. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/gypsh.py +56 -0
  229. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/make.py +2218 -0
  230. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/make.pyc +0 -0
  231. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/msvs.py +3467 -0
  232. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/ninja.py +2427 -0
  233. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/ninja.pyc +0 -0
  234. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/xcode.py +1300 -0
  235. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/xcode.pyc +0 -0
  236. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/input.py +2899 -0
  237. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/input.pyc +0 -0
  238. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/mac_tool.py +605 -0
  239. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/msvs_emulation.py +1093 -0
  240. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/msvs_emulation.pyc +0 -0
  241. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/ninja_syntax.py +160 -0
  242. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/ninja_syntax.pyc +0 -0
  243. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/ordered_dict.py +289 -0
  244. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/simple_copy.py +46 -0
  245. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/simple_copy.pyc +0 -0
  246. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/win_tool.py +314 -0
  247. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_emulation.py +1664 -0
  248. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_emulation.pyc +0 -0
  249. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_ninja.py +276 -0
  250. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_ninja.pyc +0 -0
  251. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcodeproj_file.py +2927 -0
  252. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcodeproj_file.pyc +0 -0
  253. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xml_fix.py +69 -0
  254. data/ext/drafter/ext/snowcrash/tools/gyp/pylintrc +307 -0
  255. data/ext/drafter/ext/snowcrash/tools/gyp/samples/samples +81 -0
  256. data/ext/drafter/ext/snowcrash/tools/gyp/samples/samples.bat +5 -0
  257. data/ext/drafter/ext/snowcrash/tools/gyp/setup.py +19 -0
  258. data/ext/drafter/ext/snowcrash/tools/gyp/tools/Xcode/Specifications/gyp.pbfilespec +27 -0
  259. data/ext/drafter/ext/snowcrash/tools/gyp/tools/Xcode/Specifications/gyp.xclangspec +226 -0
  260. data/ext/drafter/ext/snowcrash/tools/gyp/tools/emacs/gyp.el +275 -0
  261. data/ext/drafter/ext/snowcrash/tools/gyp/tools/graphviz.py +100 -0
  262. data/ext/drafter/ext/snowcrash/tools/gyp/tools/pretty_gyp.py +155 -0
  263. data/ext/drafter/ext/snowcrash/tools/gyp/tools/pretty_sln.py +169 -0
  264. data/ext/drafter/ext/snowcrash/tools/gyp/tools/pretty_vcproj.py +329 -0
  265. data/ext/drafter/ext/snowcrash/vcbuild.bat +139 -0
  266. data/ext/drafter/ext/sos/Makefile +62 -0
  267. data/ext/drafter/ext/sos/src/sos.cc +235 -0
  268. data/ext/drafter/ext/sos/src/sos.h +188 -0
  269. data/ext/drafter/ext/sos/src/sosJSON.h +121 -0
  270. data/ext/drafter/ext/sos/src/sosYAML.h +105 -0
  271. data/ext/drafter/src/ConversionContext.cc +39 -0
  272. data/ext/drafter/src/ConversionContext.h +34 -0
  273. data/ext/drafter/src/NamedTypesRegistry.cc +405 -0
  274. data/ext/drafter/src/NamedTypesRegistry.h +28 -0
  275. data/ext/drafter/src/NodeInfo.h +143 -0
  276. data/ext/drafter/src/RefractAPI.cc +579 -0
  277. data/ext/drafter/src/RefractAPI.h +28 -0
  278. data/ext/drafter/src/RefractDataStructure.cc +1199 -0
  279. data/ext/drafter/src/RefractDataStructure.h +26 -0
  280. data/ext/drafter/src/RefractElementFactory.cc +107 -0
  281. data/ext/drafter/src/RefractElementFactory.h +67 -0
  282. data/ext/drafter/src/RefractSourceMap.cc +29 -0
  283. data/ext/drafter/src/RefractSourceMap.h +57 -0
  284. data/ext/drafter/src/Render.cc +157 -0
  285. data/ext/drafter/src/Render.h +40 -0
  286. data/ext/drafter/src/Serialize.cc +160 -0
  287. data/ext/drafter/src/Serialize.h +289 -0
  288. data/ext/drafter/src/SerializeAST.cc +507 -0
  289. data/ext/drafter/src/SerializeAST.h +29 -0
  290. data/ext/drafter/src/SerializeResult.cc +170 -0
  291. data/ext/drafter/src/SerializeResult.h +34 -0
  292. data/ext/drafter/src/SerializeSourcemap.cc +331 -0
  293. data/ext/drafter/src/SerializeSourcemap.h +21 -0
  294. data/ext/drafter/src/Version.h +40 -0
  295. data/ext/drafter/src/config.cc +91 -0
  296. data/ext/drafter/src/config.h +38 -0
  297. data/ext/drafter/src/drafter.cc +137 -0
  298. data/ext/drafter/src/drafter.h +102 -0
  299. data/ext/drafter/src/drafter_private.cc +85 -0
  300. data/ext/drafter/src/drafter_private.h +34 -0
  301. data/ext/drafter/src/main.cc +137 -0
  302. data/ext/drafter/src/refract/AppendDecorator.h +58 -0
  303. data/ext/drafter/src/refract/Build.h +67 -0
  304. data/ext/drafter/src/refract/ComparableVisitor.cc +43 -0
  305. data/ext/drafter/src/refract/ComparableVisitor.h +62 -0
  306. data/ext/drafter/src/refract/Element.cc +409 -0
  307. data/ext/drafter/src/refract/Element.h +656 -0
  308. data/ext/drafter/src/refract/ElementFwd.h +37 -0
  309. data/ext/drafter/src/refract/ElementInserter.h +59 -0
  310. data/ext/drafter/src/refract/Exception.h +31 -0
  311. data/ext/drafter/src/refract/ExpandVisitor.cc +359 -0
  312. data/ext/drafter/src/refract/ExpandVisitor.h +58 -0
  313. data/ext/drafter/src/refract/FilterVisitor.h +52 -0
  314. data/ext/drafter/src/refract/IsExpandableVisitor.cc +140 -0
  315. data/ext/drafter/src/refract/IsExpandableVisitor.h +31 -0
  316. data/ext/drafter/src/refract/Iterate.h +160 -0
  317. data/ext/drafter/src/refract/JSONSchemaVisitor.cc +675 -0
  318. data/ext/drafter/src/refract/JSONSchemaVisitor.h +73 -0
  319. data/ext/drafter/src/refract/PrintVisitor.cc +164 -0
  320. data/ext/drafter/src/refract/PrintVisitor.h +50 -0
  321. data/ext/drafter/src/refract/Query.cc +13 -0
  322. data/ext/drafter/src/refract/Query.h +38 -0
  323. data/ext/drafter/src/refract/Registry.cc +114 -0
  324. data/ext/drafter/src/refract/Registry.h +43 -0
  325. data/ext/drafter/src/refract/RenderJSONVisitor.cc +255 -0
  326. data/ext/drafter/src/refract/RenderJSONVisitor.h +51 -0
  327. data/ext/drafter/src/refract/SerializeCompactVisitor.cc +167 -0
  328. data/ext/drafter/src/refract/SerializeCompactVisitor.h +56 -0
  329. data/ext/drafter/src/refract/SerializeVisitor.cc +214 -0
  330. data/ext/drafter/src/refract/SerializeVisitor.h +55 -0
  331. data/ext/drafter/src/refract/TypeQueryVisitor.cc +46 -0
  332. data/ext/drafter/src/refract/TypeQueryVisitor.h +110 -0
  333. data/ext/drafter/src/refract/Visitor.h +126 -0
  334. data/ext/drafter/src/refract/VisitorUtils.cc +63 -0
  335. data/ext/drafter/src/refract/VisitorUtils.h +231 -0
  336. data/ext/drafter/src/reporting.cc +263 -0
  337. data/ext/drafter/src/reporting.h +39 -0
  338. data/ext/drafter/src/stream.h +148 -0
  339. data/ext/drafter/tools/homebrew/drafter.rb +18 -0
  340. data/ext/drafter/tools/make-tarball.sh +39 -0
  341. data/ext/drafter/tools/refract-filter.py +96 -0
  342. data/ext/drafter/tools/release.sh +17 -0
  343. data/ext/drafter/vcbuild.bat +203 -0
  344. data/lib/lounge_lizard/binding.rb +29 -0
  345. data/lib/lounge_lizard/version.rb +3 -0
  346. data/lib/lounge_lizard.rb +18 -0
  347. data/lounge_lizard.gemspec +37 -0
  348. metadata +547 -0
@@ -0,0 +1,121 @@
1
+ //
2
+ // sosJSON.h
3
+ // sos
4
+ //
5
+ // Created by Pavan Kumar Sunkara on 11/01/15.
6
+ // Copyright (c) 2015 Apiary Inc. All rights reserved.
7
+ //
8
+
9
+ #ifndef SOS_JSON_H
10
+ #define SOS_JSON_H
11
+
12
+ #include <sstream>
13
+ #include "sos.h"
14
+
15
+ namespace sos {
16
+
17
+ struct SerializeJSON : public Serialize {
18
+
19
+ virtual void indent(size_t level, std::ostream& os) {
20
+
21
+ for (size_t i = 0; i < level; ++i) {
22
+ os << " ";
23
+ }
24
+ }
25
+
26
+ virtual void null(std::ostream& os) {
27
+
28
+ os << "null";
29
+ }
30
+
31
+ virtual void string(const std::string& value, std::ostream& os) {
32
+
33
+ std::string normalized = escapeBackslashes(value);
34
+ normalized = escapeDoubleQuotes(normalized);
35
+ normalized = escapeNewlines(normalized);
36
+
37
+ os << "\"" << normalized << "\"";
38
+ }
39
+
40
+ /// Prints the given double to the output stream
41
+ /// Note: Does not print scientific notation
42
+ virtual void number(double value, std::ostream& os) {
43
+
44
+ std::stringstream output;
45
+ output << std::fixed << value;
46
+ std::string stringValue = output.str();
47
+
48
+ // "std:fixed" output always shows the decimal place and any
49
+ // leading zero's. Let's trim those out if there are any:
50
+ size_t position = stringValue.find_last_not_of("0");
51
+ if (stringValue.at(position) == '.') {
52
+ --position;
53
+ }
54
+ stringValue.resize(position + 1);
55
+
56
+ os << stringValue;
57
+ }
58
+
59
+ virtual void boolean(bool value, std::ostream& os) {
60
+
61
+ os << (value ? "true" : "false");
62
+ }
63
+
64
+ virtual void array(const Base& value, std::ostream& os, size_t level) {
65
+
66
+ os << "[";
67
+
68
+ if (!value.array().empty()) {
69
+
70
+ os << "\n";
71
+ size_t i = 0;
72
+
73
+ for (Bases::const_iterator it = value.array().begin(); it != value.array().end(); ++i, ++it) {
74
+
75
+ if (i > 0 && i < value.array().size()) {
76
+ os << ",\n";
77
+ }
78
+
79
+ indent(level + 1, os);
80
+ process(*it, os, level + 1);
81
+ }
82
+
83
+ os << "\n";
84
+ indent(level, os);
85
+ }
86
+
87
+ os << "]";
88
+ }
89
+
90
+ virtual void object(const Base& value, std::ostream& os, size_t level) {
91
+
92
+ os << "{";
93
+
94
+ if (!value.keys.empty()) {
95
+
96
+ os << "\n";
97
+ size_t i = 0;
98
+
99
+ for (Keys::const_iterator it = value.keys.begin(); it != value.keys.end(); ++i, ++it) {
100
+
101
+ if (i > 0 && i < value.keys.size()) {
102
+ os << ",\n";
103
+ }
104
+
105
+ indent(level + 1, os);
106
+ string(*it, os);
107
+
108
+ os << ": ";
109
+ process(value.object().at(*it), os, level + 1);
110
+ }
111
+
112
+ os << "\n";
113
+ indent(level, os);
114
+ }
115
+
116
+ os << "}";
117
+ }
118
+ };
119
+ }
120
+
121
+ #endif
@@ -0,0 +1,105 @@
1
+ //
2
+ // sosYAML.h
3
+ // sos
4
+ //
5
+ // Created by Pavan Kumar Sunkara on 12/01/15.
6
+ // Copyright (c) 2015 Apiary Inc. All rights reserved.
7
+ //
8
+
9
+ #ifndef SOS_YAML_H
10
+ #define SOS_YAML_H
11
+
12
+ #include "sos.h"
13
+
14
+ namespace sos {
15
+
16
+ struct SerializeYAML : public Serialize {
17
+
18
+ virtual void indent(size_t level, std::ostream& os) {
19
+
20
+ for (size_t i = 0; i < level; ++i) {
21
+ os << " ";
22
+ }
23
+ }
24
+
25
+ virtual void null(std::ostream& os) {
26
+
27
+ os << " " << "null";
28
+ }
29
+
30
+ virtual void string(const std::string& value, std::ostream& os) {
31
+
32
+ std::string normalized = escapeBackslashes(value);
33
+ normalized = escapeDoubleQuotes(normalized);
34
+ normalized = escapeNewlines(normalized);
35
+
36
+ os << " " << "\"" << normalized << "\"";
37
+ }
38
+
39
+ virtual void number(double value, std::ostream& os) {
40
+
41
+ os << " " << value;
42
+ }
43
+
44
+ virtual void boolean(bool value, std::ostream& os) {
45
+
46
+ os << " " << (value ? "true" : "false");
47
+ }
48
+
49
+ virtual void array(const Base& value, std::ostream& os, size_t level) {
50
+
51
+ if (!value.array().empty()) {
52
+
53
+ if (level > 0) {
54
+ os << "\n";
55
+ }
56
+
57
+ size_t i = 0;
58
+
59
+ for (Bases::const_iterator it = value.array().begin(); it != value.array().end(); ++i, ++it) {
60
+
61
+ if (i > 0 && i < value.array().size()) {
62
+ os << "\n";
63
+ }
64
+
65
+ indent(level, os);
66
+ os << "-";
67
+ process(*it, os, level + 1);
68
+ }
69
+ }
70
+ else {
71
+ os << " []";
72
+ }
73
+ }
74
+
75
+ virtual void object(const Base& value, std::ostream& os, size_t level) {
76
+
77
+ if (!value.keys.empty()) {
78
+
79
+ if (level > 0) {
80
+ os << "\n";
81
+ }
82
+
83
+ size_t i = 0;
84
+
85
+ for (Keys::const_iterator it = value.keys.begin(); it != value.keys.end(); ++i, ++it) {
86
+
87
+ if (i > 0 && i < value.keys.size()) {
88
+ os << "\n";
89
+ }
90
+
91
+ indent(level, os);
92
+ os << *it;
93
+
94
+ os << ":";
95
+ process(value.object().at(*it), os, level + 1);
96
+ }
97
+ }
98
+ else {
99
+ os << " {}";
100
+ }
101
+ }
102
+ };
103
+ }
104
+
105
+ #endif
@@ -0,0 +1,39 @@
1
+ //
2
+ // ConversionContext.cc
3
+ // drafter
4
+ //
5
+ // Created by Pavan Kumar Sunkara on 18/08/16.
6
+ // Copyright © 2016 Apiary. All rights reserved.
7
+ //
8
+
9
+ #include "ConversionContext.h"
10
+
11
+ namespace drafter {
12
+
13
+ void ConversionContext::warn(const snowcrash::Warning& warning)
14
+ {
15
+ for (auto& item : warnings) {
16
+ bool equalSourceMap = true;
17
+
18
+ // Compare sourcemap
19
+ if (item.location.size() == warning.location.size()) {
20
+ for (size_t i = 0; i < item.location.size(); i++) {
21
+ if (item.location.at(i).length != warning.location.at(i).length ||
22
+ item.location.at(i).location != warning.location.at(i).location) {
23
+
24
+ equalSourceMap = false;
25
+ }
26
+ }
27
+ }
28
+ else {
29
+ equalSourceMap = false;
30
+ }
31
+
32
+ if (equalSourceMap && item.code == warning.code && item.message == warning.message) {
33
+ return;
34
+ }
35
+ }
36
+
37
+ warnings.push_back(warning);
38
+ }
39
+ }
@@ -0,0 +1,34 @@
1
+ //
2
+ // ConversionContext.h
3
+ // drafter
4
+ //
5
+ // Created by Jiri Kratochvil on 06-04-2016
6
+ // Copyright (c) 2016 Apiary Inc. All rights reserved.
7
+ //
8
+ #ifndef DRAFTER_CONVERSIONCONTEXT_H
9
+ #define DRAFTER_CONVERSIONCONTEXT_H
10
+
11
+ #include "refract/Registry.h"
12
+ #include "snowcrash.h"
13
+
14
+ namespace drafter {
15
+
16
+ struct WrapperOptions;
17
+
18
+ class ConversionContext {
19
+ refract::Registry registry;
20
+
21
+ public:
22
+ const WrapperOptions& options;
23
+ std::vector<snowcrash::Warning> warnings;
24
+
25
+ inline refract::Registry& GetNamedTypesRegistry() { return registry; }
26
+
27
+ ConversionContext(const WrapperOptions& options)
28
+ : options(options) {}
29
+
30
+ void warn(const snowcrash::Warning& warning);
31
+ };
32
+
33
+ }
34
+ #endif // #ifndef DRAFTER_CONVERSIONCONTEXT_H
@@ -0,0 +1,405 @@
1
+ #include "NamedTypesRegistry.h"
2
+
3
+ #include <string>
4
+ #include <map>
5
+ #include <set>
6
+
7
+ #include "MSON.h"
8
+ #include "Blueprint.h"
9
+
10
+ #include "NodeInfo.h"
11
+
12
+ #include "refract/Registry.h"
13
+ #include <algorithm>
14
+
15
+ #include "RefractDataStructure.h"
16
+ #include "RefractElementFactory.h"
17
+
18
+ #include "ConversionContext.h"
19
+
20
+ #undef DEBUG_DEPENDENCIES
21
+
22
+ #ifdef DEBUG_DEPENDENCIES
23
+ #include <iostream>
24
+ #endif /* DEBUG_DEPENDENCIES */
25
+
26
+ namespace drafter {
27
+
28
+ namespace {
29
+
30
+ typedef std::vector<NodeInfo<snowcrash::DataStructure> > DataStructures;
31
+
32
+ void FindNamedTypes(NodeInfoCollection<snowcrash::Elements>& elements, DataStructures& found)
33
+ {
34
+
35
+ for (NodeInfoCollection<snowcrash::Elements>::const_iterator i = elements.begin(); i != elements.end(); ++i) {
36
+
37
+ if (i->node->element == snowcrash::Element::DataStructureElement) {
38
+ found.push_back(MakeNodeInfo(i->node->content.dataStructure, i->sourceMap->content.dataStructure));
39
+ }
40
+ else if (!i->node->content.resource.attributes.empty()) {
41
+ found.push_back(MakeNodeInfo(i->node->content.resource.attributes, i->sourceMap->content.resource.attributes));
42
+ }
43
+ else if (i->node->element == snowcrash::Element::CategoryElement) {
44
+ NodeInfoCollection<snowcrash::Elements> children(MakeNodeInfo(i->node->content.elements(), i->sourceMap->content.elements()));
45
+ FindNamedTypes(children, found);
46
+ }
47
+ }
48
+ }
49
+
50
+ struct DependencyTypeInfo {
51
+
52
+ typedef std::map<std::string, std::string> InheritanceMap;
53
+ InheritanceMap childToParent;
54
+
55
+ typedef std::set<std::string> Members;
56
+ typedef std::map<std::string, Members> MembersMap;
57
+
58
+ MembersMap objectToMembers;
59
+
60
+ typedef std::map<std::string, const snowcrash::DataStructure*> ElementMap;
61
+ ElementMap nameToElement;
62
+
63
+ const std::string& parent(const snowcrash::DataStructure* ds) const {
64
+ return ds->typeDefinition.typeSpecification.name.symbol.literal;
65
+ }
66
+
67
+ bool hasParent(const snowcrash::DataStructure* ds) const {
68
+ return !parent(ds).empty();
69
+ }
70
+
71
+ const std::string& name(const mson::TypeName& tn) const {
72
+ return tn.symbol.literal;
73
+ }
74
+
75
+ const std::string& name(const snowcrash::DataStructure* ds) const {
76
+ return ds->name.symbol.literal;
77
+ }
78
+
79
+ const std::string& name(const mson::TypeSpecification& ts) const {
80
+ return ts.name.symbol.literal;
81
+ }
82
+
83
+ const std::string& name(const mson::ValueDefinition& vd) const {
84
+ return name(vd.typeDefinition.typeSpecification);
85
+ }
86
+
87
+ const std::string& name(const mson::ValueMember& vm) const {
88
+ return name(vm.valueDefinition);
89
+ }
90
+
91
+ const std::string& name(const mson::PropertyMember& pm) const {
92
+ return name(pm.valueDefinition);
93
+ }
94
+
95
+ const std::string& name(const mson::Mixin& mx) const {
96
+ return name(mx.typeSpecification);
97
+ }
98
+
99
+ Members collectMembers(const mson::Elements& elements) {
100
+ Members members;
101
+
102
+ for (mson::Elements::const_iterator it = elements.begin() ; it != elements.end() ; ++it) {
103
+
104
+ std::string member;
105
+ const mson::TypeSections* ts = NULL;
106
+ const mson::TypeNames* tn = NULL;
107
+
108
+ if (!it->content.value.empty() ) {
109
+ if (!name(it->content.value).empty()) {
110
+ member = name(it->content.value);
111
+ }
112
+ else {
113
+ ts = &it->content.value.sections;
114
+ }
115
+ }
116
+ else if (!it->content.property.empty()) {
117
+ if(!name(it->content.property).empty()) {
118
+ member = name(it->content.property);
119
+ }
120
+ else if (!name(it->content.property.name.variable).empty()) {
121
+ member = name(it->content.property.name.variable);
122
+ }
123
+ else if (!it->content.property.valueDefinition.typeDefinition.typeSpecification.nestedTypes.empty()) {
124
+ // - name (array|enum[<nested>, <type>])
125
+ tn = &it->content.property.valueDefinition.typeDefinition.typeSpecification.nestedTypes;
126
+ }
127
+ else {
128
+ ts = &it->content.property.sections;
129
+ }
130
+ }
131
+ else if (!it->content.mixin.empty()) {
132
+ if (!name(it->content.mixin).empty()) {
133
+ member = name(it->content.mixin);
134
+ }
135
+ }
136
+
137
+ if (!member.empty()) {
138
+ members.insert(member);
139
+ }
140
+ else if (ts) {
141
+ Members sub = collectMembers(*ts);
142
+ members.insert(sub.begin(), sub.end());
143
+ }
144
+ else if (tn) {
145
+ Members sub = collectMembers(*tn);
146
+ members.insert(sub.begin(), sub.end());
147
+ }
148
+ }
149
+
150
+ return members;
151
+ }
152
+
153
+ Members collectMembers(const mson::TypeSections& ts) {
154
+ Members members;
155
+
156
+ // map direct members
157
+ for (mson::TypeSections::const_iterator its = ts.begin() ; its != ts.end() ; ++its) {
158
+ Members sub = collectMembers(its->content.elements());
159
+ members.insert(sub.begin(), sub.end());
160
+ }
161
+
162
+ return members;
163
+ }
164
+
165
+ Members collectMembers(const mson::TypeNames& tn) {
166
+ Members members;
167
+
168
+ for (mson::TypeNames::const_iterator itn = tn.begin() ; itn != tn.end() ; ++itn) {
169
+ members.insert(name(*itn));
170
+ }
171
+
172
+ return members;
173
+ }
174
+
175
+ Members collectMembers(const snowcrash::DataStructure* ds) {
176
+ return collectMembers(ds->sections);
177
+ }
178
+
179
+ Members collectMembers(const std::string& id, const MembersMap& members, Members& resolved) {
180
+ Members collected;
181
+
182
+ if (resolved.find(id) != resolved.end()) {
183
+ return collected;
184
+ }
185
+
186
+ resolved.insert(id);
187
+
188
+ MembersMap::const_iterator member = members.find(id);
189
+ if (member == members.end()) {
190
+ return collected;
191
+ }
192
+
193
+ for (Members::const_iterator i = member->second.begin() ; i != member->second.end() ; ++i) {
194
+ Members sub = collectMembers(*i, members, resolved);
195
+ collected.insert(*i);
196
+ collected.insert(sub.begin(), sub.end());
197
+ }
198
+
199
+ return collected;
200
+ }
201
+
202
+ DependencyTypeInfo(const DataStructures& elements) {
203
+
204
+ // map inheritance && element
205
+ for (DataStructures::const_iterator i = elements.begin() ; i != elements.end() ; ++i) {
206
+
207
+ nameToElement[name(i->node)] = &(*i->node);
208
+
209
+ if (hasParent(i->node)) {
210
+ childToParent[name(i->node)] = parent(i->node);
211
+
212
+ #ifdef DEBUG_DEPENDENCIES
213
+ std::cout << "Parent: " << name(i->node) << "=>" << parent(i->node) << std::endl;
214
+ #endif
215
+
216
+ }
217
+ }
218
+
219
+ // Map members
220
+ MembersMap members;
221
+ for (DataStructures::const_iterator i = elements.begin() ; i != elements.end() ; ++i) {
222
+ members[name(i->node)] = collectMembers(i->node);
223
+ }
224
+
225
+ // Map members into deep
226
+ for (MembersMap::const_iterator i = members.begin() ; i != members.end() ; ++i) {
227
+ Members resolved;
228
+ objectToMembers[i->first] = collectMembers(i->first, members, resolved);
229
+ }
230
+
231
+ #ifdef DEBUG_DEPENDENCIES
232
+ // debug out members
233
+ for (MembersMap::const_iterator i = objectToMembers.begin() ; i != objectToMembers.end() ; ++i) {
234
+ std::cout << "Members: " << i->first << std::endl;
235
+ for (Members::const_iterator it = objectToMembers[i->first].begin() ; it != objectToMembers[i->first].end() ; ++it) {
236
+ std::cout << " - " << *it << std::endl;
237
+ }
238
+ }
239
+ #endif /* DEBUG_DEPENDENCIES */
240
+
241
+ }
242
+
243
+ bool hasMember(const snowcrash::DataStructure* object, const snowcrash::DataStructure* member) const {
244
+ MembersMap::const_iterator members = objectToMembers.find(name(object));
245
+ if (members == objectToMembers.end()) {
246
+ return false;
247
+ }
248
+
249
+ return members->second.find(name(member)) != members->second.end();
250
+ }
251
+
252
+ bool hasAncestor(const snowcrash::DataStructure* object, const snowcrash::DataStructure* ancestor) const {
253
+ std::string s = name(object);
254
+ const std::string& isAncestor = name(ancestor);
255
+
256
+ while(!s.empty()) {
257
+ if (s == isAncestor) {
258
+ return true;
259
+ }
260
+
261
+ InheritanceMap::const_iterator i = childToParent.find(s);
262
+ if (i == childToParent.end()) {
263
+ return false;
264
+ }
265
+
266
+ s = i->second;
267
+ }
268
+
269
+ return false;
270
+ }
271
+
272
+ mson::BaseTypeName GetType(const snowcrash::DataStructure* ds) const {
273
+ return ds->typeDefinition.typeSpecification.name.base;
274
+ }
275
+
276
+ mson::BaseTypeName ResolveType(const snowcrash::DataStructure* object) const {
277
+ std::string s = name(object);
278
+
279
+ while(!s.empty()) {
280
+ ElementMap::const_iterator ei = nameToElement.find(s);
281
+ if (ei == nameToElement.end()) {
282
+ return mson::UndefinedTypeName;
283
+ }
284
+
285
+ mson::BaseTypeName type = GetType(ei->second);
286
+
287
+ if ( type != mson::UndefinedTypeName) {
288
+ return type;
289
+ }
290
+
291
+ InheritanceMap::const_iterator i = childToParent.find(s);
292
+ if (i == childToParent.end() || (s == i->second)) {
293
+ return mson::UndefinedTypeName;
294
+ }
295
+
296
+ s = i->second;
297
+ }
298
+
299
+ return mson::UndefinedTypeName;
300
+ }
301
+
302
+ };
303
+
304
+ struct InheritanceComparator {
305
+
306
+ const DependencyTypeInfo& typeInfo;
307
+
308
+ InheritanceComparator(const DependencyTypeInfo& typeInfo) : typeInfo(typeInfo) {}
309
+
310
+ /* This is a comparator for std::sort so it has to compare
311
+ * objects in strictly weak ordering otherwise it would crash
312
+ * with sort going out of container bounds, see
313
+ * http://stackoverflow.com/questions/24048022/what-causes-stdsort-to-access-address-out-of-range
314
+ * for more details.
315
+ * The order is following, if F has S as an ancestor or a member
316
+ * then S < F and conversely, if none of this applies we compare objects by
317
+ * names to provide some ordering for all objects as we don't
318
+ * really care.
319
+ */
320
+ bool operator()(DataStructures::const_reference first, DataStructures::const_reference second) {
321
+
322
+ if (typeInfo.hasAncestor(first.node, second.node) || typeInfo.hasMember(first.node, second.node)) {
323
+ return false;
324
+ }
325
+
326
+ if (typeInfo.hasAncestor(second.node, first.node) || typeInfo.hasMember(second.node, first.node)) {
327
+ return true;
328
+ }
329
+
330
+ return typeInfo.name(first.node) < typeInfo.name(second.node);
331
+ }
332
+ };
333
+
334
+ } // ns anonymous
335
+
336
+ void RegisterNamedTypes(const NodeInfo<snowcrash::Elements>& elements, ConversionContext& context)
337
+ {
338
+ DataStructures found;
339
+ NodeInfoCollection<snowcrash::Elements> elementCollection(elements);
340
+
341
+ FindNamedTypes(elementCollection, found);
342
+
343
+ #ifdef DEBUG_DEPENDENCIES
344
+ std::cout << "==DEPENDENCIES INFO BEGIN==" << std::endl;
345
+ #endif /* DEBUG_DEPENDENCIES */
346
+
347
+ DependencyTypeInfo typeInfo(found);
348
+
349
+ std::sort(found.begin(), found.end(), InheritanceComparator(typeInfo));
350
+
351
+ #ifdef DEBUG_DEPENDENCIES
352
+ std::cout << "==BASE TYPE ORDER==" << std::endl;
353
+ #endif /* DEBUG_DEPENDENCIES */
354
+
355
+ // first level registration - we will create empty elements with correct type info
356
+ for (DataStructures::const_iterator i = found.begin(); i != found.end(); ++i) {
357
+ const std::string& name = i->node->name.symbol.literal;
358
+
359
+ const RefractElementFactory& factory = FactoryFromType(typeInfo.ResolveType(i->node));
360
+ refract::IElement* element = factory.Create(std::string(), eValue);
361
+ element->meta["id"] = refract::IElement::Create(name);
362
+
363
+ try {
364
+ context.GetNamedTypesRegistry().add(element);
365
+ } catch (refract::LogicError& e) {
366
+ std::ostringstream out;
367
+ out << name << " is a reserved keyword and cannot be used.";
368
+ throw snowcrash::Error(out.str(), snowcrash::MSONError, i->sourceMap->name.sourceMap);
369
+ }
370
+ }
371
+
372
+ for (DataStructures::const_iterator i = found.begin(); i != found.end(); ++i) {
373
+
374
+ if (!i->node->name.symbol.literal.empty()) {
375
+
376
+ const std::string& name = i->node->name.symbol.literal;
377
+ refract::IElement* element = MSONToRefract(*i, context);
378
+
379
+ #ifdef DEBUG_DEPENDENCIES
380
+ refract::TypeQueryVisitor v;
381
+ v.visit(*element);
382
+ std::cout << name << " [" << v.get() << "]" << std::endl;
383
+ #endif /* DEBUG_DEPENDENCIES */
384
+
385
+ // remove preregistrated element
386
+ refract::IElement* pre = context.GetNamedTypesRegistry().find(name);
387
+ context.GetNamedTypesRegistry().remove(name);
388
+ delete pre;
389
+
390
+ try {
391
+ context.GetNamedTypesRegistry().add(element);
392
+ } catch (refract::LogicError& e) {
393
+ std::ostringstream out;
394
+ out << name << " is a reserved keyword and cannot be used.";
395
+ throw snowcrash::Error(out.str(), snowcrash::MSONError, i->sourceMap->name.sourceMap);
396
+ }
397
+ }
398
+ }
399
+
400
+ #ifdef DEBUG_DEPENDENCIES
401
+ std::cout << "==DEPENDENCIES INFO END==" << std::endl;
402
+ #endif /* DEBUG_DEPENDENCIES */
403
+
404
+ }
405
+ } // ns drafter