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,166 @@
1
+ //
2
+ // SourceAnnotation.h
3
+ // snowcrash
4
+ //
5
+ // Created by Zdenek Nemec on 7/12/13.
6
+ // Copyright (c) 2013 Apiary Inc. All rights reserved.
7
+ //
8
+
9
+ #ifndef SNOWCRASH_SOURCEANNOTATION_H
10
+ #define SNOWCRASH_SOURCEANNOTATION_H
11
+
12
+ #include <string>
13
+ #include <vector>
14
+ #include "ByteBuffer.h"
15
+
16
+ namespace snowcrash {
17
+
18
+
19
+ /**
20
+ * \brief A source data annotation.
21
+ *
22
+ * Annotation bound to a source data block. Includes an
23
+ * annotation code and an optional message.
24
+ */
25
+ struct SourceAnnotation {
26
+
27
+ /**
28
+ * \brief Default annotation code representing success.
29
+ */
30
+ static const int OK;
31
+
32
+ /**
33
+ * \brief %SourceAnnotation default constructor.
34
+ *
35
+ * Creates an empty annotation with the default annotation code.
36
+ */
37
+ SourceAnnotation() : code(OK) {}
38
+
39
+ /**
40
+ * \brief %SourceAnnotation copy constructor.
41
+ * \param rhs An annotation to be copied.
42
+ */
43
+ SourceAnnotation(const SourceAnnotation& rhs) {
44
+
45
+ this->message = rhs.message;
46
+ this->code = rhs.code;
47
+ this->location = rhs.location;
48
+ }
49
+
50
+ /**
51
+ * \brief %SourceAnnotation constructor.
52
+ * \param message An annotation message.
53
+ * \param code Annotation code.
54
+ * \param location A location of the annotation.
55
+ */
56
+ SourceAnnotation(const std::string& message,
57
+ int code = OK,
58
+ const mdp::CharactersRangeSet& location = mdp::CharactersRangeSet()) {
59
+
60
+ this->message = message;
61
+ this->code = code;
62
+
63
+ this->location.clear();
64
+ if (!location.empty())
65
+ this->location.assign(location.begin(), location.end());
66
+ }
67
+
68
+ /** \brief %SourceAnnotation destructor. */
69
+ ~SourceAnnotation() {}
70
+
71
+ /**
72
+ * \brief %SourceAnnotation assignment operator
73
+ * \param rhs An annotation to be assigned to this annotation.
74
+ */
75
+ SourceAnnotation& operator=(const SourceAnnotation& rhs) {
76
+ this->message = rhs.message;
77
+ this->code = rhs.code;
78
+ this->location = rhs.location;
79
+ return *this;
80
+ }
81
+
82
+ /** The location of this annotation within the source data buffer. */
83
+ mdp::CharactersRangeSet location;
84
+
85
+ /** An annotation code. */
86
+ int code;
87
+
88
+ /** A annotation message. */
89
+ std::string message;
90
+ };
91
+
92
+ /**
93
+ * Error source annotation.
94
+ */
95
+ typedef SourceAnnotation Error;
96
+
97
+ /**
98
+ * Error codes
99
+ */
100
+ enum ErrorCode {
101
+ NoError = 0,
102
+ ApplicationError = 1,
103
+ BusinessError = 2,
104
+ ModelError = 3,
105
+ MSONError = 4
106
+ };
107
+
108
+ /**
109
+ * Warning source annotation.
110
+ */
111
+ typedef SourceAnnotation Warning;
112
+
113
+ /**
114
+ * Warning codes
115
+ */
116
+ enum WarningCode {
117
+ NoWarning = 0,
118
+ APINameWarning = 1,
119
+ DuplicateWarning = 2,
120
+ FormattingWarning = 3,
121
+ RedefinitionWarning = 4,
122
+ IgnoringWarning = 5,
123
+ EmptyDefinitionWarning = 6,
124
+ NotEmptyDefinitionWarning = 7,
125
+ LogicalErrorWarning = 8,
126
+ DeprecatedWarning = 9,
127
+ IndentationWarning = 10,
128
+ AmbiguityWarning = 11,
129
+ URIWarning = 12,
130
+ HTTPWarning = 13
131
+ };
132
+
133
+ /**
134
+ * A set of warning source annotations.
135
+ */
136
+ typedef std::vector<Warning> Warnings;
137
+
138
+ /**
139
+ * \brief A parsing report Report.
140
+ *
141
+ * Result of a source data parsing operation.
142
+ * Composed of ONE error source annotation
143
+ * and a set of warning source annotations.
144
+ */
145
+ struct Report {
146
+
147
+ /**
148
+ * \brief Append a report to this one, replacing the error source annotation.
149
+ *
150
+ * NOTE: A binding does not need to wrap this action.
151
+ */
152
+ Report& operator+=(const Report& rhs) {
153
+ error = rhs.error;
154
+ warnings.insert(warnings.end(), rhs.warnings.begin(), rhs.warnings.end());
155
+ return *this;
156
+ }
157
+
158
+ /** Result error source annotation */
159
+ Error error;
160
+
161
+ /** Result warning source annotations */
162
+ Warnings warnings;
163
+ };
164
+ }
165
+
166
+ #endif
@@ -0,0 +1,323 @@
1
+ //
2
+ // TrimString.h
3
+ // snowcrash
4
+ //
5
+ // Created by Zdenek Nemec on 5/11/13.
6
+ // Copyright (c) 2013 Apiary Inc. All rights reserved.
7
+ //
8
+ // Credits:
9
+ // http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
10
+
11
+ #ifndef SNOWCRAH_STRINGUTILITY_H
12
+ #define SNOWCRAH_STRINGUTILITY_H
13
+
14
+ #include <algorithm>
15
+ #include <functional>
16
+ #include <cctype>
17
+ #include <locale>
18
+ #include <string>
19
+ #include <sstream>
20
+ #include <vector>
21
+ #include "RegexMatch.h"
22
+ #include "MarkdownParser.h"
23
+
24
+ namespace snowcrash {
25
+
26
+ // Check a character not to be an space of any kind
27
+ inline bool isSpace(const std::string::value_type i){
28
+ if(i == ' ' || i == '\t' || i == '\n' || i == '\v' || i == '\f' || i == '\r')
29
+ return true;
30
+ return false;
31
+ }
32
+
33
+ // Trim string from start
34
+ inline std::string& TrimStringStart(std::string &s) {
35
+ s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun(isSpace))));
36
+ return s;
37
+ }
38
+
39
+ // Trim string from end
40
+ inline std::string& TrimStringEnd(std::string &s) {
41
+ s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun(isSpace))).base(), s.end());
42
+ return s;
43
+ }
44
+
45
+ // Trim both ends of string
46
+ inline std::string& TrimString(std::string &s) {
47
+ return TrimStringStart(TrimStringEnd(s));
48
+ }
49
+
50
+
51
+ // <position form begin, lenght of string>
52
+ typedef std::tuple<std::string::const_iterator::difference_type, std::string::const_iterator::difference_type> TrimRange;
53
+
54
+ // Get Trim Info
55
+ inline TrimRange GetTrimInfo(std::string::const_iterator begin, std::string::const_iterator end) {
56
+ std::string::const_reverse_iterator rbegin(end);
57
+ std::string::const_reverse_iterator rend(begin);
58
+
59
+ std::string::const_iterator trim = std::find_if(begin, end, std::not1(std::ptr_fun(isSpace)));
60
+ std::string::const_reverse_iterator rtrim = std::find_if(rbegin, rend, std::not1(std::ptr_fun(isSpace)));
61
+
62
+ return std::make_tuple(std::distance(begin, trim),
63
+ std::distance(rtrim, std::string::const_reverse_iterator(trim)));
64
+ }
65
+
66
+ // Split string by delim
67
+ inline std::vector<std::string>& Split(const std::string& s, char delim, std::vector<std::string>& elems) {
68
+ std::stringstream ss(s);
69
+ std::string item;
70
+ while (std::getline(ss, item, delim)) {
71
+ elems.push_back(item);
72
+ }
73
+ return elems;
74
+ }
75
+
76
+ // Split string by delim
77
+ inline std::vector<std::string> Split(const std::string& s, char delim) {
78
+ std::vector<std::string> elems;
79
+ Split(s, delim, elems);
80
+ return elems;
81
+ }
82
+
83
+ // Split string on the first occurrence of delim
84
+ inline std::vector<std::string> SplitOnFirst(const std::string& s, char delim) {
85
+ std::string::size_type pos = s.find(delim);
86
+ std::vector<std::string> elems;
87
+ if (pos == std::string::npos) {
88
+ elems.push_back(s);
89
+ }
90
+ else {
91
+ elems.push_back(s.substr(0, pos));
92
+ elems.push_back(s.substr(pos + 1, std::string::npos));
93
+ }
94
+ return elems;
95
+ }
96
+
97
+ // Make sure last two characters are newlines
98
+ inline std::string& TwoNewLines(std::string& s) {
99
+
100
+ if (s[s.length() - 1] != '\n') {
101
+ s += "\n";
102
+ }
103
+
104
+ if (s[s.length() - 2] != '\n') {
105
+ s += "\n";
106
+ }
107
+
108
+ return s;
109
+ }
110
+
111
+ /**
112
+ * \brief Replace all occurrences of a string.
113
+ * \param s A string to search in.
114
+ * \param find A string to look for.
115
+ * \param replace A string to replace with.
116
+ * \return A copy of %s with all occurrences of %find replaced by %replace.
117
+ */
118
+ inline std::string ReplaceString(const std::string& s,
119
+ const std::string& find,
120
+ const std::string& replace) {
121
+ size_t pos = 0;
122
+ std::string target(s);
123
+ while ((pos = target.find(find, pos)) != std::string::npos) {
124
+ target.replace(pos, find.length(), replace);
125
+ pos += replace.length();
126
+ }
127
+ return target;
128
+ }
129
+
130
+ /**
131
+ * \brief Extract the first line from a string.
132
+ *
133
+ * \param s Subject of the extraction
134
+ * \param r Remaining content aftert the extraction
135
+ * \return First line from the subject string
136
+ */
137
+ inline std::string GetFirstLine(const std::string& s, std::string& r){
138
+ std::vector<std::string> elem = SplitOnFirst(s, '\n');
139
+ if (elem.empty())
140
+ return std::string();
141
+ if (elem.size() > 1)
142
+ r = elem.back();
143
+ return elem.front();
144
+ }
145
+
146
+ /**
147
+ * \brief compare equality - allow compare diferent types
148
+ *
149
+ * \return true if args era equal
150
+ */
151
+ struct IsEqual {
152
+ template<typename T1, typename T2>
153
+ bool operator()(const T1& a1, const T2& a2) const {
154
+ return a1 == a2;
155
+ }
156
+ };
157
+
158
+ /**
159
+ * \brief compare equality - character are compare case insensitive
160
+ *
161
+ * \return true if args era equal
162
+ */
163
+ struct IsIEqual {
164
+ template<typename T1, typename T2>
165
+ bool operator()(const T1& a1, const T2& a2) const {
166
+ return std::tolower(a1) == std::tolower(a2);
167
+ }
168
+ };
169
+
170
+ /**
171
+ * \brief compare containers equality
172
+ *
173
+ * \requirements
174
+ * - both containers must support methods ::length(), ::begin(), ::end()
175
+ * - both containers must be iterable
176
+ * - both containers must contain comparable types
177
+ *
178
+ * \param arg1, arg2 - containers to compare
179
+ * \param predicate - testing equality
180
+ *
181
+ * \return true if containers contains same content
182
+ */
183
+
184
+ template <typename T1, typename T2, typename Predicate>
185
+ inline bool MatchContainers(const T1& arg1, const T2& arg2, const Predicate& predicate) {
186
+ if (arg1.length() != arg2.length()) {
187
+ return false;
188
+ }
189
+ return std::equal(arg1.begin(), arg1.end(), arg2.begin(), predicate);
190
+ }
191
+
192
+ template <typename T>
193
+ struct Equal : std::binary_function<T, T, bool> {
194
+ bool operator()(const T& left, const T& right) const {
195
+ return MatchContainers(left, right, IsEqual());
196
+ }
197
+ };
198
+
199
+ template <typename T>
200
+ struct IEqual : std::binary_function<T, T, bool> {
201
+ bool operator()(const T& left, const T& right) const {
202
+ return MatchContainers(left, right, IsIEqual());
203
+ }
204
+ };
205
+
206
+ /**
207
+ * \brief Retrieve the string enclosed by the given matching escaping characters
208
+ *
209
+ * Please note that the subject will be stripped of the escaped string
210
+ * and the characters before it
211
+ *
212
+ * \param subject String that needs to be parsed
213
+ * \param begin Character representing the beginning of the escaped string
214
+ * \param stripEscapeChars If true, strip the escape characters from the result string
215
+ *
216
+ * \return Returns the escaped string
217
+ *
218
+ * \example (begin = 1, subject = "a```b```cd") ----> (return = "```b```", subject = "cd")
219
+ */
220
+ inline std::string RetrieveEscaped(std::string& subject,
221
+ size_t begin = 0,
222
+ const bool stripEscapeChars = false) {
223
+
224
+ size_t levels = 0;
225
+ const char escapeChar = subject[begin];
226
+
227
+ // Get the level of the backticks
228
+ while (subject[levels + begin] == escapeChar) {
229
+ levels++;
230
+ }
231
+
232
+ std::string borderChars = subject.substr(begin, levels);
233
+ size_t end = subject.substr(levels + begin).find(borderChars);
234
+
235
+ if (end == std::string::npos) {
236
+ return "";
237
+ }
238
+
239
+ if (stripEscapeChars) {
240
+ begin = begin + levels;
241
+ end = end + begin;
242
+ } else {
243
+ end = end + (2 * levels) + begin;
244
+ }
245
+
246
+ std::string escapedString = subject.substr(begin, end - begin);
247
+ subject = subject.substr(end);
248
+
249
+ return escapedString;
250
+ }
251
+
252
+ /**
253
+ * \brief Strip the enclosing backticks and return the string in the middle.
254
+ *
255
+ * If there are no matching enclosing bacticks, return the whole string.
256
+ *
257
+ * \param subject String that needs to be stripped of enclosing backticks
258
+ *
259
+ * \return Substring that has been stripped of enclosing backticks
260
+ */
261
+ inline std::string StripBackticks(std::string& subject) {
262
+
263
+ // Check if first and last chars are backticks
264
+ if (subject[0] != '`' ||
265
+ subject[subject.length() - 1] != '`') {
266
+
267
+ return subject;
268
+ }
269
+
270
+ std::string escapedString = RetrieveEscaped(subject, 0, true);
271
+
272
+ if (escapedString.empty()) {
273
+ return subject;
274
+ }
275
+
276
+ TrimString(escapedString);
277
+
278
+ return escapedString;
279
+ }
280
+
281
+ /**
282
+ * \brief If the given string is a markdown link, return the string which is being linked
283
+ *
284
+ * If there is no link, return the whole string
285
+ *
286
+ * \param subject String which is a markdown link
287
+ *
288
+ * \return Substring which is inside the first [] of the markdown link
289
+ */
290
+ inline std::string StripMarkdownLink(const std::string& subject) {
291
+
292
+ // Check if markdown link
293
+ if (subject[0] != mdp::MarkdownBeginReference) {
294
+ return subject;
295
+ }
296
+
297
+ std::string linkedString = RegexCaptureFirst(subject, mdp::MarkdownLinkRegex);
298
+ TrimString(linkedString);
299
+
300
+ return linkedString;
301
+ }
302
+
303
+ inline std::string ReconstructMarkdownHeader(const mdp::MarkdownNode& node) {
304
+ std::string subject;
305
+
306
+ // we are not able to reconstruct correctly headers
307
+ // there is missing info about spacing on both sides
308
+ // node.sourceMap - contain length, but we dont now count of space on both sides
309
+ // it we are not able to distinguis between "a ", " a " and " a".
310
+ //
311
+ // Solution - we strictly strip whitespace
312
+
313
+ if (node.type == mdp::HeaderMarkdownNodeType) {
314
+ subject.reserve(node.text.length() + node.data -1);
315
+ subject.append(node.data, '#');
316
+ subject.append(node.text);
317
+ }
318
+
319
+ return subject;
320
+ }
321
+ }
322
+
323
+ #endif
@@ -0,0 +1,195 @@
1
+ //
2
+ // UriTemplateParser.cc
3
+ // snowcrash
4
+ //
5
+ // Created by Carl Griffiths on 24/02/14.
6
+ // Copyright (c) 2014 Apiary Inc. All rights reserved.
7
+ //
8
+ #include <iomanip>
9
+ #include "UriTemplateParser.h"
10
+ #include "RegexMatch.h"
11
+
12
+ using namespace snowcrash;
13
+
14
+ static bool HasMismatchedCurlyBrackets(const URITemplate& uriTemplate) {
15
+ int openCount = 0;
16
+ int closeCount = 0;
17
+
18
+ for (unsigned int i = 0; i < uriTemplate.length(); i++) {
19
+ if (uriTemplate[i] == '{') openCount++;
20
+ if (uriTemplate[i] == '}') closeCount++;
21
+ }
22
+ return openCount != closeCount;
23
+ }
24
+
25
+ static bool HasNestedCurlyBrackets(const URITemplate& uriTemplate) {
26
+ char lastBracket = ' ';
27
+ bool result = false;
28
+
29
+ for (unsigned int i = 0; i < uriTemplate.length(); i++) {
30
+ if (uriTemplate[i] == '{') {
31
+ if (lastBracket == '{') {
32
+ result = true;
33
+ break;
34
+ }
35
+ lastBracket = '{';
36
+ }
37
+ if (uriTemplate[i] == '}') {
38
+ if (lastBracket == '}') {
39
+ result = true;
40
+ break;
41
+ }
42
+ lastBracket = '}';
43
+ }
44
+ }
45
+ return result;
46
+ }
47
+
48
+ static bool PathContainsSquareBrackets(const URITemplate& uriTemplate) {
49
+ return (uriTemplate.find('[') != std::string::npos || uriTemplate.find(']') != std::string::npos);
50
+ }
51
+
52
+ static Expressions GetUriTemplateExpressions(const URITemplate& uriTemplate) {
53
+ Expressions expressions;
54
+ size_t expressionStartPos = 0;
55
+ size_t expressionEndPos = 0;
56
+
57
+ while (expressionStartPos != std::string::npos && expressionEndPos != std::string::npos && expressionStartPos < uriTemplate.length()) {
58
+ expressionStartPos = uriTemplate.find("{", expressionStartPos);
59
+ expressionEndPos = uriTemplate.find("}", expressionStartPos);
60
+ if (expressionStartPos != std::string::npos && expressionEndPos > expressionStartPos) {
61
+ expressions.push_back(uriTemplate.substr(expressionStartPos + 1, (expressionEndPos - expressionStartPos) - 1));
62
+ }
63
+ expressionStartPos++;
64
+ }
65
+ return expressions;
66
+ }
67
+
68
+
69
+ static ClassifiedExpression ClassifyExpression(const Expression& expression) {
70
+
71
+ VariableExpression variableExpression(expression);
72
+
73
+ if (variableExpression.IsExpressionType()) {
74
+ return variableExpression;
75
+ }
76
+
77
+ QueryStringExpression queryStringExpression(expression);
78
+ if (queryStringExpression.IsExpressionType()) {
79
+ return queryStringExpression;
80
+ }
81
+
82
+ FragmentExpression fragmentExpression(expression);
83
+ if (fragmentExpression.IsExpressionType()) {
84
+ return fragmentExpression;
85
+ }
86
+
87
+ ReservedExpansionExpression reservedExpansionExpression(expression);
88
+ if (reservedExpansionExpression.IsExpressionType()) {
89
+ return reservedExpansionExpression;
90
+ }
91
+
92
+ LabelExpansionExpression labelExpansionExpression(expression);
93
+ if (labelExpansionExpression.IsExpressionType()) {
94
+ return labelExpansionExpression;
95
+ }
96
+
97
+ PathSegmentExpansionExpression pathSegmentExpansionExpression(expression);
98
+ if (pathSegmentExpansionExpression.IsExpressionType()) {
99
+ return pathSegmentExpansionExpression;
100
+ }
101
+
102
+ PathStyleParameterExpansionExpression pathStyleParameterExpansionExpression(expression);
103
+ if (pathStyleParameterExpansionExpression.IsExpressionType()) {
104
+ return pathSegmentExpansionExpression;
105
+ }
106
+
107
+ FormStyleQueryContinuationExpression formStyleQueryContinuationExpression(expression);
108
+ if (formStyleQueryContinuationExpression.IsExpressionType()) {
109
+ return formStyleQueryContinuationExpression;
110
+ }
111
+
112
+ UndefinedExpression undefinedExpression(expression);
113
+
114
+ return undefinedExpression;
115
+ }
116
+
117
+ void URITemplateParser::parse(const URITemplate& uri, const mdp::CharactersRangeSet& sourceBlock, ParsedURITemplate& result)
118
+ {
119
+ CaptureGroups groups;
120
+ Expressions expressions;
121
+ size_t gSize=5;
122
+
123
+ if (uri.empty()) return;
124
+
125
+ if (RegexCapture(uri, URI_REGEX, groups, gSize)) {
126
+ result.scheme = groups[1];
127
+ result.host = groups[3];
128
+ result.path = groups[4];
129
+
130
+ if (HasMismatchedCurlyBrackets(result.path)) {
131
+ result.report.warnings.push_back(Warning("The URI template contains mismatched expression brackets", URIWarning, sourceBlock));
132
+ return;
133
+ }
134
+
135
+ if (HasNestedCurlyBrackets(result.path)) {
136
+ result.report.warnings.push_back(Warning("The URI template contains nested expression brackets", URIWarning, sourceBlock));
137
+ return;
138
+ }
139
+
140
+ if (PathContainsSquareBrackets(result.path)) {
141
+ result.report.warnings.push_back(Warning("The URI template contains square brackets, please percent encode square brackets as %5B and %5D", URIWarning, sourceBlock));
142
+ }
143
+
144
+ expressions = GetUriTemplateExpressions(result.path);
145
+
146
+ ExpressionIterator currentExpression = expressions.begin();
147
+
148
+ while (currentExpression != expressions.end()) {
149
+
150
+ ClassifiedExpression classifiedExpression = ClassifyExpression(*currentExpression);
151
+
152
+ if (classifiedExpression.IsSupportedExpressionType()) {
153
+ bool hasIllegalCharacters = false;
154
+
155
+ if (classifiedExpression.ContainsSpaces()) {
156
+ std::stringstream ss;
157
+ ss << "URI template expression \"" << classifiedExpression.innerExpression << "\" contains spaces. Allowed characters for expressions are A-Z a-z 0-9 _ and percent encoded characters";
158
+ result.report.warnings.push_back(Warning(ss.str(), URIWarning, sourceBlock));
159
+ hasIllegalCharacters = true;
160
+ }
161
+
162
+ if (classifiedExpression.ContainsHyphens()) {
163
+ std::stringstream ss;
164
+ ss << "URI template expression \"" << classifiedExpression.innerExpression << "\" contains hyphens. Allowed characters for expressions are A-Z a-z 0-9 _ and percent encoded characters";
165
+ result.report.warnings.push_back(Warning(ss.str(), URIWarning, sourceBlock));
166
+ hasIllegalCharacters = true;
167
+ }
168
+
169
+ if (classifiedExpression.ContainsAssignment()) {
170
+ std::stringstream ss;
171
+ ss << "URI template expression \"" << classifiedExpression.innerExpression << "\" contains assignment. Allowed characters for expressions are A-Z a-z 0-9 _ and percent encoded characters";
172
+ result.report.warnings.push_back(Warning(ss.str(), URIWarning, sourceBlock));
173
+ hasIllegalCharacters = true;
174
+ }
175
+
176
+ if (!hasIllegalCharacters) {
177
+ if (classifiedExpression.IsInvalidExpressionName()) {
178
+ std::stringstream ss;
179
+ ss << "URI template expression \"" << classifiedExpression.innerExpression << "\" contains invalid characters. Allowed characters for expressions are A-Z a-z 0-9 _ and percent encoded characters";
180
+ result.report.warnings.push_back(Warning(ss.str(), URIWarning, sourceBlock));
181
+ }
182
+ }
183
+ }
184
+ else{
185
+ result.report.warnings.push_back(Warning(classifiedExpression.unsupportedWarningText, URIWarning, sourceBlock));
186
+ }
187
+ currentExpression++;
188
+ }
189
+ }
190
+ else{
191
+ result.report.error = Error("Failed to parse URI Template", ApplicationError);
192
+ }
193
+
194
+ }
195
+