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,656 @@
1
+ //
2
+ // refract/Element.h
3
+ // librefract
4
+ //
5
+ // Created by Jiri Kratochvil on 18/05/15.
6
+ // Copyright (c) 2015 Apiary Inc. All rights reserved.
7
+ //
8
+ #ifndef REFRACT_ELEMENT_H
9
+ #define REFRACT_ELEMENT_H
10
+
11
+ #include <string>
12
+ #include <vector>
13
+ #include <algorithm>
14
+ #include <functional>
15
+ #include <stdexcept>
16
+ #include <iterator>
17
+
18
+ #include "Exception.h"
19
+ #include "Visitor.h"
20
+
21
+ #include "ElementFwd.h"
22
+
23
+ namespace refract
24
+ {
25
+
26
+ class Visitor;
27
+
28
+ template <typename T> struct ElementTypeSelector;
29
+
30
+ // NOTE: alternative solution:
31
+ // find in Element* for ValueType instead of specialized templates
32
+ template <>
33
+ struct ElementTypeSelector<std::string>
34
+ {
35
+ typedef StringElement ElementType;
36
+ };
37
+
38
+ template <>
39
+ struct ElementTypeSelector<char*>
40
+ {
41
+ typedef StringElement ElementType;
42
+ };
43
+
44
+ template <>
45
+ struct ElementTypeSelector<double>
46
+ {
47
+ typedef NumberElement ElementType;
48
+ };
49
+
50
+ template <>
51
+ struct ElementTypeSelector<int>
52
+ {
53
+ typedef NumberElement ElementType;
54
+ };
55
+
56
+ template <>
57
+ struct ElementTypeSelector<size_t>
58
+ {
59
+ typedef NumberElement ElementType;
60
+ };
61
+
62
+ template <>
63
+ struct ElementTypeSelector<bool>
64
+ {
65
+ typedef BooleanElement ElementType;
66
+ };
67
+
68
+ struct IElement
69
+ {
70
+
71
+ struct MemberElementCollection : public std::vector<MemberElement*>
72
+ {
73
+ virtual const_iterator find(const std::string& name) const;
74
+ virtual iterator find(const std::string& name);
75
+ MemberElement& operator[](const std::string& name);
76
+ MemberElement& operator[](const int index);
77
+ virtual void clone(const MemberElementCollection& other); /// < clone elements from `other` to `this`
78
+ virtual void erase(const std::string& key);
79
+ virtual ~MemberElementCollection();
80
+ };
81
+
82
+ MemberElementCollection meta;
83
+ MemberElementCollection attributes;
84
+
85
+ /**
86
+ * return "name" of element
87
+ * usualy injected by "trait", but you can set own
88
+ * via pair method `element(std::string)`
89
+ */
90
+ virtual std::string element() const = 0;
91
+ virtual void element(const std::string&) = 0;
92
+
93
+ // NOTE: probably rename to Accept
94
+ virtual void content(Visitor& v) const = 0;
95
+
96
+ /**
97
+ * Flags for clone() element - select parts of refract element to be clonned
98
+ * \see Element<T>::clone()
99
+ */
100
+ typedef enum {
101
+ cMeta = 0x01,
102
+ cAttributes = 0x02,
103
+ cValue = 0x04,
104
+ cElement = 0x08,
105
+ cAll = cMeta | cAttributes | cValue | cElement,
106
+
107
+ cNoMetaId = 0x10,
108
+ } cloneFlags;
109
+
110
+
111
+ virtual IElement* clone(const int flag = cAll) const = 0;
112
+
113
+ virtual bool empty() const = 0;
114
+
115
+ /**
116
+ * select seriaization/rendering type of element
117
+ * by default are elements serialized in expanded form,
118
+ * with compact form of meta and attributes
119
+ *
120
+ * `renderType()` allows to change default behavior of selected element
121
+ * (behavioration must be implemented in serialization visitors - it is partially done)
122
+ */
123
+
124
+ typedef enum {
125
+ rDefault = 0,
126
+ rFull,
127
+ rCompact,
128
+ rCompactContent
129
+ } renderFlags;
130
+
131
+ virtual renderFlags renderType() const = 0;
132
+ virtual void renderType(const renderFlags render) = 0;
133
+
134
+ /**
135
+ * Returns new element with content set as `value`
136
+ * Type of returned element depends on type of `value`
137
+ *
138
+ * In current implementation iis able create just primitive element types: (Bool|Number|String)
139
+ */
140
+ template <typename T>
141
+ static typename ElementTypeSelector<T>::ElementType* Create(const T& value, IElement::renderFlags render = IElement::rDefault)
142
+ {
143
+ typedef typename ElementTypeSelector<T>::ElementType ElementType;
144
+ return new ElementType(value, render);
145
+ };
146
+
147
+ /**
148
+ * overrided for static function `Create()` with classic c-string
149
+ */
150
+ static StringElement* Create(const char* value, IElement::renderFlags render = IElement::rDefault);
151
+
152
+ virtual ~IElement() {}
153
+ };
154
+
155
+ bool isReserved(const std::string& element);
156
+
157
+ /**
158
+ * CRTP implementation of RefractElement
159
+ */
160
+ template <typename T, typename Trait>
161
+ class Element : public IElement
162
+ {
163
+
164
+ public:
165
+
166
+ typedef Element<T, Trait> Type;
167
+ typedef Trait TraitType;
168
+ typedef typename TraitType::ValueType ValueType;
169
+
170
+ protected:
171
+ std::string element_;
172
+ bool hasContent; ///< was content of element already set? \see empty()
173
+ renderFlags renderStrategy;
174
+
175
+ public:
176
+
177
+ // FIXME: move into protected part, currently still required in ComparableVisitor
178
+ ValueType value;
179
+
180
+ virtual std::string element() const
181
+ {
182
+ return element_.empty() ? TraitType::element() : element_;
183
+ }
184
+
185
+ virtual void element(const std::string& name)
186
+ {
187
+ element_ = name;
188
+ }
189
+
190
+ void set(const ValueType& val)
191
+ {
192
+ hasContent = true;
193
+ value = val;
194
+ }
195
+
196
+ const ValueType& get() const
197
+ {
198
+ return value;
199
+ }
200
+
201
+ virtual void content(Visitor& v) const
202
+ {
203
+ v.visit(static_cast<const T&>(*this));
204
+ }
205
+
206
+ virtual IElement* clone(const int flags = cAll) const {
207
+ const Type* self = static_cast<const T*>(this);
208
+ Type* element = new Type;
209
+
210
+ element->hasContent = self->hasContent;
211
+ element->renderStrategy = self->renderStrategy;
212
+
213
+ if (flags & cElement) {
214
+ element->element_ = self->element_;
215
+ }
216
+
217
+ if (flags & cAttributes) {
218
+ element->attributes.clone(self->attributes);
219
+ }
220
+
221
+ if (flags & cMeta) {
222
+ element->meta.clone(self->meta);
223
+
224
+ if (flags & cNoMetaId) {
225
+ element->meta.erase("id");
226
+ }
227
+ }
228
+
229
+ if (flags & cValue) {
230
+ TraitType::cloneValue(value, element->value);
231
+ }
232
+
233
+ return element;
234
+ }
235
+
236
+ Element() : hasContent(false), renderStrategy(IElement::rDefault), value(TraitType::init())
237
+ {
238
+ }
239
+
240
+ virtual bool empty() const
241
+ {
242
+ return !hasContent;
243
+ }
244
+
245
+ // FIXME: remove all thing related to "render" from base class
246
+ // it should be implemented in "serialize" class
247
+ virtual renderFlags renderType() const
248
+ {
249
+ return renderStrategy;
250
+ }
251
+
252
+ virtual void renderType(const renderFlags render)
253
+ {
254
+ renderStrategy = render;
255
+ }
256
+
257
+ virtual ~Element()
258
+ {
259
+ TraitType::release(value);
260
+ }
261
+ };
262
+
263
+ struct NullElementTrait
264
+ {
265
+ struct null_type {};
266
+ typedef null_type ValueType;
267
+
268
+ static ValueType init() { return ValueType(); }
269
+ static const std::string element() { return "null"; }
270
+ static void release(ValueType&) {}
271
+ static void cloneValue(const ValueType&, ValueType&) {}
272
+ };
273
+
274
+ struct NullElement : Element<NullElement, NullElementTrait> {};
275
+
276
+ struct StringElementTrait
277
+ {
278
+ typedef std::string ValueType;
279
+
280
+ static ValueType init() { return ValueType(); }
281
+ static const std::string element() { return "string"; }
282
+ static void release(ValueType&) {}
283
+ static void cloneValue(const ValueType& self, ValueType& other) { other = self; }
284
+ };
285
+
286
+ struct StringElement : Element<StringElement, StringElementTrait> {
287
+
288
+ StringElement() : Type() {}
289
+
290
+ StringElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
291
+ {
292
+ set(value);
293
+ renderType(render);
294
+ }
295
+ };
296
+
297
+ struct NumberElementTrait
298
+ {
299
+ typedef double ValueType;
300
+
301
+ static ValueType init() { return 0; }
302
+ static const std::string element() { return "number"; }
303
+ static void release(ValueType&) {}
304
+ static void cloneValue(const ValueType& self, ValueType& other) { other = self; }
305
+ };
306
+
307
+ struct NumberElement : Element<NumberElement, NumberElementTrait> {
308
+
309
+ NumberElement() : Type() {}
310
+
311
+ NumberElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
312
+ {
313
+ set(value);
314
+ renderType(render);
315
+ }
316
+ };
317
+
318
+ struct BooleanElementTrait
319
+ {
320
+ typedef bool ValueType;
321
+
322
+ static ValueType init() { return false; }
323
+ static const std::string element() { return "boolean"; }
324
+ static void release(ValueType&) {}
325
+ static void cloneValue(const ValueType& self, ValueType& other) { other = self; }
326
+ };
327
+
328
+ struct BooleanElement : Element<BooleanElement, BooleanElementTrait> {
329
+
330
+ BooleanElement() : Type() {}
331
+
332
+ BooleanElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type() {
333
+ set(value);
334
+ renderType(render);
335
+ }
336
+ };
337
+
338
+ typedef std::vector<IElement*> RefractElements;
339
+
340
+ template <typename Type = IElement, typename Collection = std::vector<Type*> >
341
+ struct ElementCollectionTrait
342
+ {
343
+ typedef Collection ValueType;
344
+ typedef ElementCollectionTrait<Type, Collection> SelfType;
345
+
346
+ static ValueType init() { return ValueType(); }
347
+
348
+ static void release(ValueType& values)
349
+ {
350
+ for (typename ValueType::iterator it = values.begin(); it != values.end(); ++it) {
351
+ delete (*it);
352
+ }
353
+
354
+ values.clear();
355
+ }
356
+
357
+ /**
358
+ * WARN: possible dangerous method. We trust underlaying type in collection
359
+ * if anyone push casted type, bad things can happen.
360
+ */
361
+ static typename ValueType::value_type typedMemberClone(IElement* element, const IElement::cloneFlags flags) {
362
+ if (!element) {
363
+ return NULL;
364
+ }
365
+
366
+ return static_cast<typename ValueType::value_type>(element->clone(flags));
367
+ }
368
+
369
+ static void cloneValue(const ValueType& self, ValueType& other) {
370
+ std::transform(self.begin(), self.end(),
371
+ std::back_inserter(other),
372
+ std::bind(&SelfType::typedMemberClone, std::placeholders::_1, IElement::cAll));
373
+ }
374
+ };
375
+
376
+
377
+ struct ArrayElementTrait : public ElementCollectionTrait<>
378
+ {
379
+ static const std::string element() { return "array"; }
380
+ };
381
+
382
+ struct ArrayElement : Element<ArrayElement, ArrayElementTrait>
383
+ {
384
+ ArrayElement() : Type()
385
+ {
386
+ }
387
+
388
+ ArrayElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
389
+ {
390
+ set(value);
391
+ renderType(render);
392
+ }
393
+
394
+ void push_back(IElement* e)
395
+ {
396
+ // FIXME: warn if MemberElement
397
+ // there is no way to present "key: value" in array
398
+ hasContent = true;
399
+ value.push_back(e);
400
+ }
401
+ };
402
+
403
+ struct EnumElementTrait : public ElementCollectionTrait<>
404
+ {
405
+ static const std::string element() { return "enum"; }
406
+ };
407
+
408
+ struct EnumElement : Element<EnumElement, EnumElementTrait>
409
+ {
410
+ EnumElement() : Type()
411
+ {
412
+ }
413
+
414
+ EnumElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
415
+ {
416
+ set(value);
417
+ renderType(render);
418
+ }
419
+
420
+ void push_back(IElement* e)
421
+ {
422
+ hasContent = true;
423
+ value.push_back(e);
424
+ }
425
+ };
426
+
427
+ struct MemberElementTrait
428
+ {
429
+ typedef std::pair<IElement*, IElement*> ValueType;
430
+
431
+ static ValueType init() { return ValueType(); }
432
+ static const std::string element() { return "member"; }
433
+
434
+ static void release(ValueType& member)
435
+ {
436
+ if (member.first) {
437
+ delete member.first;
438
+ member.first = NULL;
439
+ }
440
+
441
+ if (member.second) {
442
+ delete member.second;
443
+ member.second = NULL;
444
+ }
445
+ }
446
+
447
+ static void cloneValue(const ValueType& self, ValueType& other) {
448
+ other.first = self.first
449
+ ? self.first->clone()
450
+ : NULL;
451
+
452
+ other.second = self.second
453
+ ? self.second->clone()
454
+ : NULL;
455
+ }
456
+ };
457
+
458
+ struct MemberElement : Element<MemberElement, MemberElementTrait>
459
+ {
460
+
461
+ MemberElement() : Type()
462
+ {
463
+ }
464
+
465
+ MemberElement(IElement* key, IElement* value, IElement::renderFlags render = IElement::rDefault) : Type()
466
+ {
467
+ set(key, value);
468
+ renderType(render);
469
+ }
470
+
471
+ MemberElement(const std::string& key, IElement* value, IElement::renderFlags render = IElement::rDefault) : Type()
472
+ {
473
+ set(key, value);
474
+ renderType(render);
475
+ }
476
+
477
+ void set(const std::string& key, IElement* element)
478
+ {
479
+ set(IElement::Create(key), element);
480
+ }
481
+
482
+ void set(IElement* key, IElement* element)
483
+ {
484
+ if (value.first != NULL) {
485
+ delete value.first;
486
+ value.first = NULL;
487
+ }
488
+
489
+ value.first = key;
490
+
491
+ if (value.second != NULL) {
492
+ delete value.second;
493
+ value.second = NULL;
494
+ }
495
+
496
+ value.second = element;
497
+
498
+ hasContent = true;
499
+ }
500
+
501
+ MemberElement& operator=(IElement* element)
502
+ {
503
+ if (value.second != NULL) {
504
+ delete value.second;
505
+ value.second = NULL;
506
+ }
507
+
508
+ value.second = element;
509
+ return *this;
510
+ }
511
+ };
512
+
513
+ struct ObjectElementTrait : public ElementCollectionTrait<>
514
+ {
515
+ // Use inherited ValueType definition instead of specialized std::vector<MemberElement*>
516
+ // because ObjectElement can contain:
517
+ // - (array[Member Element])
518
+ // - (object)
519
+ // - (Extend Element)
520
+ // - (Select Element)
521
+ // - (Ref Element)
522
+ //
523
+ // FIXME: behavioration for content types different than
524
+ // `(array[Member Element])` is not currently implemented
525
+
526
+ static const std::string element() { return "object"; }
527
+ };
528
+
529
+ struct ObjectElement : Element<ObjectElement, ObjectElementTrait>
530
+ {
531
+
532
+ ObjectElement() : Type()
533
+ {
534
+ }
535
+
536
+ ObjectElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
537
+ {
538
+ set(value);
539
+ renderType(render);
540
+ }
541
+
542
+ ObjectElement(IElement* e, IElement::renderFlags render = IElement::rDefault) : Type()
543
+ {
544
+ renderType(render);
545
+ value.push_back(e);
546
+ }
547
+
548
+ void push_back(IElement* e)
549
+ {
550
+ // FIXME:
551
+ // probably add check for allowed type
552
+ hasContent = true;
553
+ value.push_back(e);
554
+ }
555
+ };
556
+
557
+ struct ExtendElementTrait : public ElementCollectionTrait<>
558
+ {
559
+ static const std::string element() { return "extend"; }
560
+ };
561
+
562
+ struct ExtendElement : Element<ExtendElement, ExtendElementTrait>
563
+ {
564
+ ExtendElement() : Type()
565
+ {
566
+ }
567
+
568
+ ExtendElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
569
+ {
570
+ set(value);
571
+ renderType(render);
572
+ }
573
+
574
+ void push_back(IElement* e);
575
+ void set(const ValueType& val);
576
+
577
+ IElement* merge() const;
578
+ };
579
+
580
+ struct OptionElementTrait : public ElementCollectionTrait<>
581
+ {
582
+ static const std::string element() { return "option"; }
583
+ };
584
+
585
+ struct OptionElement : Element<OptionElement, OptionElementTrait>
586
+ {
587
+
588
+ OptionElement() : Type()
589
+ {
590
+ }
591
+
592
+ OptionElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
593
+ {
594
+ set(value);
595
+ renderType(render);
596
+ }
597
+
598
+ OptionElement(IElement* e, IElement::renderFlags render = IElement::rDefault) : Type()
599
+ {
600
+ renderType(render);
601
+ value.push_back(e);
602
+ }
603
+
604
+ void push_back(IElement* e)
605
+ {
606
+ // FIXME:
607
+ // probably add check for allowed type
608
+ hasContent = true;
609
+ value.push_back(e);
610
+ }
611
+ };
612
+
613
+ struct SelectElementTrait : public ElementCollectionTrait<OptionElement>
614
+ {
615
+ static const std::string element() { return "select"; }
616
+
617
+ static void cloneValue(const ValueType& self, ValueType& other)
618
+ {
619
+ for (std::vector<OptionElement*>::const_iterator it = self.begin(); it != self.end(); ++it) {
620
+ IElement* clonned = (*it)->clone();
621
+ other.push_back(static_cast<OptionElement*>(clonned));
622
+ }
623
+ }
624
+ };
625
+
626
+ struct SelectElement : Element<SelectElement, SelectElementTrait>
627
+ {
628
+
629
+ SelectElement() : Type()
630
+ {
631
+ }
632
+
633
+ SelectElement(const TraitType::ValueType& value, IElement::renderFlags render = IElement::rDefault) : Type()
634
+ {
635
+ set(value);
636
+ renderType(render);
637
+ }
638
+
639
+ SelectElement(OptionElement* e, IElement::renderFlags render = IElement::rDefault) : Type()
640
+ {
641
+ renderType(render);
642
+ value.push_back(e);
643
+ }
644
+
645
+ void push_back(OptionElement* e)
646
+ {
647
+ // FIXME:
648
+ // probably add check for allowed type
649
+ hasContent = true;
650
+ value.push_back(e);
651
+ }
652
+ };
653
+
654
+ };
655
+
656
+ #endif // #ifndef REFRACT_ELEMENT_H
@@ -0,0 +1,37 @@
1
+ //
2
+ // refract/ElementFwd.h
3
+ // librefract
4
+ //
5
+ // Created by Jiri Kratochvil on 01/01/2016
6
+ // Copyright (c) 2016 Apiary Inc. All rights reserved.
7
+ //
8
+
9
+ #ifndef REFRACT_ELEMENTFWD_H
10
+ #define REFRACT_ELEMENTFWD_H
11
+
12
+ namespace refract
13
+ {
14
+
15
+ // Forward declarations of Elements
16
+ struct IElement;
17
+
18
+ struct NullElement;
19
+
20
+ struct StringElement;
21
+ struct NumberElement;
22
+ struct BooleanElement;
23
+
24
+ struct MemberElement;
25
+
26
+ struct ArrayElement;
27
+ struct EnumElement;
28
+ struct ObjectElement;
29
+
30
+ struct ExtendElement;
31
+
32
+ struct OptionElement;
33
+ struct SelectElement;
34
+ }
35
+
36
+
37
+ #endif /* #ifndef REFRACT_ELEMENTFWD_H */