redsnow 0.3.7 → 0.4.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 (302) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/Rakefile +4 -4
  4. data/ext/drafter/Makefile +54 -0
  5. data/ext/drafter/appveyor.yml +10 -0
  6. data/ext/drafter/bin/drafter +0 -0
  7. data/ext/{snowcrash → drafter}/build/Makefile +29 -14
  8. data/ext/{snowcrash/build/snowcrash.Makefile → drafter/build/drafter.Makefile} +1 -1
  9. data/ext/{snowcrash/build/snowcrash.target.mk → drafter/build/drafter.target.mk} +25 -23
  10. data/ext/{snowcrash/build → drafter/build/ext/snowcrash}/libmarkdownparser.target.mk +7 -7
  11. data/ext/drafter/build/ext/snowcrash/libsnowcrash.target.mk +152 -0
  12. data/ext/{snowcrash/build → drafter/build/ext/snowcrash}/libsundown.target.mk +13 -13
  13. data/ext/{snowcrash/build → drafter/build/ext/snowcrash}/perf-libsnowcrash.target.mk +14 -20
  14. data/ext/drafter/build/ext/snowcrash/snowcrash.Makefile +6 -0
  15. data/ext/{snowcrash → drafter}/build/gyp-mac-tool +0 -0
  16. data/ext/{snowcrash/build/libsnowcrash.target.mk → drafter/build/libdrafter.target.mk} +29 -36
  17. data/ext/drafter/build/libsos.target.mk +133 -0
  18. data/ext/drafter/build/out/Release/drafter +0 -0
  19. data/ext/drafter/build/out/Release/libdrafter.dylib +0 -0
  20. data/ext/drafter/build/out/Release/libmarkdownparser.a +0 -0
  21. data/ext/drafter/build/out/Release/libsnowcrash.a +0 -0
  22. data/ext/drafter/build/out/Release/libsos.a +0 -0
  23. data/ext/{snowcrash → drafter}/build/out/Release/libsundown.a +0 -0
  24. data/ext/{snowcrash → drafter}/build/out/Release/linker.lock +0 -0
  25. data/ext/drafter/build/out/Release/obj.target/drafter/src/config.o +0 -0
  26. data/ext/drafter/build/out/Release/obj.target/drafter/src/main.o +0 -0
  27. data/ext/drafter/build/out/Release/obj.target/drafter/src/reporting.o +0 -0
  28. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/Serialize.o +0 -0
  29. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeAST.o +0 -0
  30. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeResult.o +0 -0
  31. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeSourcemap.o +0 -0
  32. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/cdrafter.o +0 -0
  33. data/ext/drafter/build/out/Release/obj.target/libdrafter/src/drafter.o +0 -0
  34. data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.o +0 -0
  35. data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.o +0 -0
  36. data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.o +0 -0
  37. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Blueprint.o +0 -0
  38. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/BlueprintSourcemap.o +0 -0
  39. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/HTTP.o +0 -0
  40. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/HeadersParser.o +0 -0
  41. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSON.o +0 -0
  42. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONOneOfParser.o +0 -0
  43. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONSourcemap.o +0 -0
  44. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONTypeSectionParser.o +0 -0
  45. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONValueMemberParser.o +0 -0
  46. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Section.o +0 -0
  47. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Signature.o +0 -0
  48. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/UriTemplateParser.o +0 -0
  49. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/posix/RegexMatch.o +0 -0
  50. data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/snowcrash.o +0 -0
  51. data/ext/drafter/build/out/Release/obj.target/libsos/ext/sos/src/sos.o +0 -0
  52. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_href_e.o +0 -0
  53. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_html_e.o +0 -0
  54. data/ext/{snowcrash/build/out/Release/obj.target/libsundown → drafter/build/out/Release/obj.target/libsundown/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/html.o +0 -0
  55. data/ext/{snowcrash/build/out/Release/obj.target/libsundown → drafter/build/out/Release/obj.target/libsundown/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/html_smartypants.o +0 -0
  56. data/ext/{snowcrash/build/out/Release/obj.target/libsundown → drafter/build/out/Release/obj.target/libsundown/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/autolink.o +0 -0
  57. data/ext/{snowcrash/build/out/Release/obj.target/libsundown → drafter/build/out/Release/obj.target/libsundown/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/buffer.o +0 -0
  58. data/ext/{snowcrash/build/out/Release/obj.target/libsundown → drafter/build/out/Release/obj.target/libsundown/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/markdown.o +0 -0
  59. data/ext/{snowcrash/build/out/Release/obj.target/libsundown → drafter/build/out/Release/obj.target/libsundown/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/src_map.o +0 -0
  60. data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/stack.o +0 -0
  61. data/ext/drafter/circle.yml +12 -0
  62. data/ext/{snowcrash → drafter}/config.gypi +1 -1
  63. data/ext/{snowcrash → drafter}/config.mk +0 -0
  64. data/ext/{snowcrash → drafter}/configure +16 -5
  65. data/ext/drafter/drafter.gyp +118 -0
  66. data/ext/{snowcrash → drafter/ext/snowcrash}/Makefile +4 -12
  67. data/ext/{snowcrash → drafter/ext/snowcrash}/Vagrantfile +14 -4
  68. data/ext/drafter/ext/snowcrash/appveyor.yml +7 -0
  69. data/ext/{snowcrash → drafter/ext/snowcrash}/common.gypi +0 -0
  70. data/ext/drafter/ext/snowcrash/configure +197 -0
  71. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/Makefile +0 -0
  72. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/CONTRIBUTING.md +0 -0
  73. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/Makefile +0 -0
  74. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/Makefile.win +0 -0
  75. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/examples/smartypants.c +0 -0
  76. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/examples/sundown.c +0 -0
  77. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/houdini.h +0 -0
  78. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/houdini_href_e.c +0 -0
  79. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/houdini_html_e.c +0 -0
  80. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/html.c +0 -0
  81. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/html.h +0 -0
  82. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/html/html_smartypants.c +0 -0
  83. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/html_block_names.txt +0 -0
  84. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/autolink.c +0 -0
  85. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/autolink.h +0 -0
  86. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/buffer.c +0 -0
  87. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/buffer.h +0 -0
  88. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/html_blocks.h +0 -0
  89. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/markdown.c +0 -0
  90. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/markdown.h +0 -0
  91. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/src_map.c +0 -0
  92. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/src_map.h +0 -0
  93. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/stack.c +0 -0
  94. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/src/stack.h +0 -0
  95. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/ext/sundown/sundown.def +0 -0
  96. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/msvc/markdown/markdown.vcproj +0 -0
  97. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/msvc/msvc.sln +0 -0
  98. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/msvc/sundown/sundown.vcproj +0 -0
  99. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/src/ByteBuffer.cc +0 -0
  100. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/src/ByteBuffer.h +0 -0
  101. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/src/MarkdownNode.cc +0 -0
  102. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/src/MarkdownNode.h +0 -0
  103. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/src/MarkdownParser.cc +0 -0
  104. data/ext/{snowcrash → drafter/ext/snowcrash}/ext/markdown-parser/src/MarkdownParser.h +10 -2
  105. data/ext/{snowcrash → drafter/ext/snowcrash}/provisioning.sh +0 -0
  106. data/ext/{snowcrash → drafter/ext/snowcrash}/snowcrash.gyp +41 -39
  107. data/ext/{snowcrash → drafter/ext/snowcrash}/snowcrash.xcworkspace/contents.xcworkspacedata +0 -0
  108. data/ext/{snowcrash → drafter/ext/snowcrash}/src/ActionParser.h +50 -6
  109. data/ext/{snowcrash → drafter/ext/snowcrash}/src/AssetParser.h +1 -12
  110. data/ext/drafter/ext/snowcrash/src/AttributesParser.h +121 -0
  111. data/ext/drafter/ext/snowcrash/src/Blueprint.cc +90 -0
  112. data/ext/{snowcrash → drafter/ext/snowcrash}/src/Blueprint.h +169 -33
  113. data/ext/{snowcrash → drafter/ext/snowcrash}/src/BlueprintParser.h +305 -48
  114. data/ext/drafter/ext/snowcrash/src/BlueprintSourcemap.cc +81 -0
  115. data/ext/{snowcrash → drafter/ext/snowcrash}/src/BlueprintSourcemap.h +130 -39
  116. data/ext/{snowcrash → drafter/ext/snowcrash}/src/BlueprintUtility.h +10 -4
  117. data/ext/{snowcrash → drafter/ext/snowcrash}/src/CodeBlockUtility.h +1 -1
  118. data/ext/drafter/ext/snowcrash/src/DataStructureGroupParser.h +154 -0
  119. data/ext/{snowcrash → drafter/ext/snowcrash}/src/HTTP.cc +0 -0
  120. data/ext/{snowcrash → drafter/ext/snowcrash}/src/HTTP.h +0 -0
  121. data/ext/drafter/ext/snowcrash/src/HeadersParser.cc +110 -0
  122. data/ext/{snowcrash → drafter/ext/snowcrash}/src/HeadersParser.h +123 -54
  123. data/ext/drafter/ext/snowcrash/src/MSON.cc +272 -0
  124. data/ext/drafter/ext/snowcrash/src/MSON.h +399 -0
  125. data/ext/drafter/ext/snowcrash/src/MSONMixinParser.h +95 -0
  126. data/ext/drafter/ext/snowcrash/src/MSONNamedTypeParser.h +108 -0
  127. data/ext/drafter/ext/snowcrash/src/MSONOneOfParser.cc +132 -0
  128. data/ext/drafter/ext/snowcrash/src/MSONOneOfParser.h +80 -0
  129. data/ext/drafter/ext/snowcrash/src/MSONParameterParser.h +232 -0
  130. data/ext/drafter/ext/snowcrash/src/MSONPropertyMemberParser.h +91 -0
  131. data/ext/drafter/ext/snowcrash/src/MSONSourcemap.cc +141 -0
  132. data/ext/drafter/ext/snowcrash/src/MSONSourcemap.h +181 -0
  133. data/ext/drafter/ext/snowcrash/src/MSONTypeSectionParser.cc +209 -0
  134. data/ext/drafter/ext/snowcrash/src/MSONTypeSectionParser.h +213 -0
  135. data/ext/drafter/ext/snowcrash/src/MSONUtility.h +423 -0
  136. data/ext/drafter/ext/snowcrash/src/MSONValueMemberParser.cc +179 -0
  137. data/ext/drafter/ext/snowcrash/src/MSONValueMemberParser.h +346 -0
  138. data/ext/drafter/ext/snowcrash/src/ModelTable.h +87 -0
  139. data/ext/{snowcrash → drafter/ext/snowcrash}/src/ParameterParser.h +120 -61
  140. data/ext/{snowcrash → drafter/ext/snowcrash}/src/ParametersParser.h +17 -18
  141. data/ext/{snowcrash → drafter/ext/snowcrash}/src/PayloadParser.h +36 -18
  142. data/ext/{snowcrash → drafter/ext/snowcrash}/src/Platform.h +0 -0
  143. data/ext/{snowcrash → drafter/ext/snowcrash}/src/RegexMatch.h +0 -0
  144. data/ext/drafter/ext/snowcrash/src/RelationParser.h +75 -0
  145. data/ext/{snowcrash → drafter/ext/snowcrash}/src/ResourceGroupParser.h +127 -33
  146. data/ext/{snowcrash → drafter/ext/snowcrash}/src/ResourceParser.h +126 -33
  147. data/ext/{snowcrash → drafter/ext/snowcrash}/src/Section.cc +6 -0
  148. data/ext/{snowcrash → drafter/ext/snowcrash}/src/Section.h +15 -2
  149. data/ext/{snowcrash → drafter/ext/snowcrash}/src/SectionParser.h +3 -1
  150. data/ext/{snowcrash → drafter/ext/snowcrash}/src/SectionParserData.h +15 -5
  151. data/ext/{snowcrash → drafter/ext/snowcrash}/src/SectionProcessor.h +24 -0
  152. data/ext/{snowcrash → drafter/ext/snowcrash}/src/Signature.cc +14 -0
  153. data/ext/drafter/ext/snowcrash/src/Signature.h +80 -0
  154. data/ext/drafter/ext/snowcrash/src/SignatureSectionProcessor.h +439 -0
  155. data/ext/{snowcrash → drafter/ext/snowcrash}/src/SourceAnnotation.h +3 -2
  156. data/ext/{snowcrash → drafter/ext/snowcrash}/src/StringUtility.h +103 -6
  157. data/ext/{snowcrash → drafter/ext/snowcrash}/src/UriTemplateParser.cc +0 -0
  158. data/ext/{snowcrash → drafter/ext/snowcrash}/src/UriTemplateParser.h +0 -0
  159. data/ext/{snowcrash → drafter/ext/snowcrash}/src/ValuesParser.h +1 -13
  160. data/ext/{snowcrash → drafter/ext/snowcrash}/src/posix/RegexMatch.cc +0 -0
  161. data/ext/{snowcrash → drafter/ext/snowcrash}/src/snowcrash.cc +0 -0
  162. data/ext/{snowcrash → drafter/ext/snowcrash}/src/snowcrash.h +0 -0
  163. data/ext/{snowcrash → drafter/ext/snowcrash}/src/win/RegexMatch.cc +0 -0
  164. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/AUTHORS +0 -0
  165. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/DEPS +0 -0
  166. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/OWNERS +0 -0
  167. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/PRESUBMIT.py +0 -0
  168. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/buildbot/buildbot_run.py +0 -0
  169. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/codereview.settings +0 -0
  170. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/data/win/large-pdb-shim.cc +0 -0
  171. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/gyp +0 -0
  172. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/gyp.bat +0 -0
  173. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/gyp_main.py +0 -0
  174. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/MSVSNew.py +0 -0
  175. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/MSVSProject.py +0 -0
  176. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/MSVSSettings.py +0 -0
  177. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/MSVSToolFile.py +0 -0
  178. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/MSVSUserFile.py +0 -0
  179. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/MSVSUtil.py +0 -0
  180. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/MSVSVersion.py +0 -0
  181. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/__init__.py +0 -0
  182. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/__init__.pyc +0 -0
  183. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/common.py +0 -0
  184. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/common.pyc +0 -0
  185. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/easy_xml.py +0 -0
  186. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/flock_tool.py +0 -0
  187. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/__init__.py +0 -0
  188. data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/__init__.pyc +0 -0
  189. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/android.py +0 -0
  190. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/cmake.py +0 -0
  191. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -0
  192. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/eclipse.py +0 -0
  193. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/gypd.py +0 -0
  194. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/gypsh.py +0 -0
  195. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/make.py +0 -0
  196. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/make.pyc +0 -0
  197. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/msvs.py +0 -0
  198. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/ninja.py +0 -0
  199. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/xcode.py +0 -0
  200. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/generator/xcode.pyc +0 -0
  201. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/input.py +0 -0
  202. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/input.pyc +0 -0
  203. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/mac_tool.py +0 -0
  204. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/msvs_emulation.py +0 -0
  205. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/ninja_syntax.py +0 -0
  206. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/ordered_dict.py +0 -0
  207. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/win_tool.py +0 -0
  208. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/xcode_emulation.py +0 -0
  209. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/xcode_emulation.pyc +0 -0
  210. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/xcodeproj_file.py +0 -0
  211. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/xcodeproj_file.pyc +0 -0
  212. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylib/gyp/xml_fix.py +0 -0
  213. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/pylintrc +0 -0
  214. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/samples/samples +0 -0
  215. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/samples/samples.bat +0 -0
  216. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/setup.py +0 -0
  217. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/tools/Xcode/Specifications/gyp.pbfilespec +0 -0
  218. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/tools/Xcode/Specifications/gyp.xclangspec +0 -0
  219. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/tools/emacs/gyp.el +0 -0
  220. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/tools/graphviz.py +0 -0
  221. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/tools/pretty_gyp.py +0 -0
  222. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/tools/pretty_sln.py +0 -0
  223. data/ext/{snowcrash → drafter/ext/snowcrash}/tools/gyp/tools/pretty_vcproj.py +0 -0
  224. data/ext/drafter/ext/snowcrash/vcbuild.bat +139 -0
  225. data/ext/drafter/ext/sos/Makefile +57 -0
  226. data/ext/drafter/ext/sos/src/sos.cc +200 -0
  227. data/ext/drafter/ext/sos/src/sos.h +179 -0
  228. data/ext/drafter/ext/sos/src/sosJSON.h +105 -0
  229. data/ext/drafter/ext/sos/src/sosYAML.h +104 -0
  230. data/ext/{snowcrash → drafter}/src/Serialize.cc +30 -15
  231. data/ext/drafter/src/Serialize.h +135 -0
  232. data/ext/drafter/src/SerializeAST.cc +775 -0
  233. data/ext/drafter/src/SerializeAST.h +19 -0
  234. data/ext/drafter/src/SerializeResult.cc +67 -0
  235. data/ext/drafter/src/SerializeResult.h +26 -0
  236. data/ext/drafter/src/SerializeSourcemap.cc +446 -0
  237. data/ext/drafter/src/SerializeSourcemap.h +19 -0
  238. data/ext/drafter/src/Version.h +38 -0
  239. data/ext/drafter/src/cdrafter.cc +44 -0
  240. data/ext/drafter/src/cdrafter.h +55 -0
  241. data/ext/drafter/src/config.cc +80 -0
  242. data/ext/drafter/src/config.h +35 -0
  243. data/ext/drafter/src/drafter.cc +22 -0
  244. data/ext/drafter/src/drafter.h +38 -0
  245. data/ext/drafter/src/main.cc +91 -0
  246. data/ext/drafter/src/reporting.cc +162 -0
  247. data/ext/drafter/src/reporting.h +28 -0
  248. data/ext/drafter/src/stream.h +146 -0
  249. data/ext/drafter/tools/homebrew/drafter.rb +12 -0
  250. data/ext/{snowcrash → drafter}/vcbuild.bat +3 -3
  251. data/lib/redsnow.rb +6 -11
  252. data/lib/redsnow/binding.rb +11 -201
  253. data/lib/redsnow/blueprint.rb +104 -169
  254. data/lib/redsnow/parseresult.rb +28 -42
  255. data/lib/redsnow/sourcemap.rb +92 -177
  256. data/lib/redsnow/version.rb +1 -1
  257. data/redsnow.gemspec +1 -1
  258. metadata +249 -197
  259. data/ext/snowcrash/bin/snowcrash +0 -0
  260. data/ext/snowcrash/build/out/Release/libmarkdownparser.a +0 -0
  261. data/ext/snowcrash/build/out/Release/libsnowcrash.dylib +0 -0
  262. data/ext/snowcrash/build/out/Release/obj.target/libmarkdownparser/ext/markdown-parser/src/ByteBuffer.o +0 -0
  263. data/ext/snowcrash/build/out/Release/obj.target/libmarkdownparser/ext/markdown-parser/src/MarkdownNode.o +0 -0
  264. data/ext/snowcrash/build/out/Release/obj.target/libmarkdownparser/ext/markdown-parser/src/MarkdownParser.o +0 -0
  265. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/CBlueprint.o +0 -0
  266. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/CBlueprintSourcemap.o +0 -0
  267. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/CSourceAnnotation.o +0 -0
  268. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/HTTP.o +0 -0
  269. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/Section.o +0 -0
  270. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/Serialize.o +0 -0
  271. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/SerializeJSON.o +0 -0
  272. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/SerializeYAML.o +0 -0
  273. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/Signature.o +0 -0
  274. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/UriTemplateParser.o +0 -0
  275. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/csnowcrash.o +0 -0
  276. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/posix/RegexMatch.o +0 -0
  277. data/ext/snowcrash/build/out/Release/obj.target/libsnowcrash/src/snowcrash.o +0 -0
  278. data/ext/snowcrash/build/out/Release/obj.target/libsundown/ext/markdown-parser/ext/sundown/html/houdini_href_e.o +0 -0
  279. data/ext/snowcrash/build/out/Release/obj.target/libsundown/ext/markdown-parser/ext/sundown/html/houdini_html_e.o +0 -0
  280. data/ext/snowcrash/build/out/Release/obj.target/libsundown/ext/markdown-parser/ext/sundown/src/stack.o +0 -0
  281. data/ext/snowcrash/build/out/Release/obj.target/snowcrash/src/snowcrash/snowcrash.o +0 -0
  282. data/ext/snowcrash/build/out/Release/snowcrash +0 -0
  283. data/ext/snowcrash/src/CBlueprint.cc +0 -628
  284. data/ext/snowcrash/src/CBlueprint.h +0 -366
  285. data/ext/snowcrash/src/CBlueprintSourcemap.cc +0 -630
  286. data/ext/snowcrash/src/CBlueprintSourcemap.h +0 -351
  287. data/ext/snowcrash/src/CSourceAnnotation.cc +0 -154
  288. data/ext/snowcrash/src/CSourceAnnotation.h +0 -106
  289. data/ext/snowcrash/src/Serialize.h +0 -71
  290. data/ext/snowcrash/src/SerializeJSON.cc +0 -1221
  291. data/ext/snowcrash/src/SerializeJSON.h +0 -24
  292. data/ext/snowcrash/src/SerializeYAML.cc +0 -702
  293. data/ext/snowcrash/src/SerializeYAML.h +0 -24
  294. data/ext/snowcrash/src/Signature.h +0 -32
  295. data/ext/snowcrash/src/SymbolTable.h +0 -94
  296. data/ext/snowcrash/src/Version.h +0 -39
  297. data/ext/snowcrash/src/csnowcrash.cc +0 -29
  298. data/ext/snowcrash/src/csnowcrash.h +0 -40
  299. data/ext/snowcrash/src/snowcrash/snowcrash.cc +0 -200
  300. data/ext/snowcrash/tools/gyp/pylib/gyp/common.pyc +0 -0
  301. data/ext/snowcrash/tools/gyp/pylib/gyp/generator/__init__.pyc +0 -0
  302. data/ext/snowcrash/tools/homebrew/snowcrash.rb +0 -12
@@ -0,0 +1,213 @@
1
+ //
2
+ // MSONTypeSectionParser.h
3
+ // snowcrash
4
+ //
5
+ // Created by Pavan Kumar Sunkara on 11/4/14.
6
+ // Copyright (c) 2014 Apiary Inc. All rights reserved.
7
+ //
8
+
9
+ #ifndef SNOWCRASH_MSONTYPESECTIONPARSER_H
10
+ #define SNOWCRASH_MSONTYPESECTIONPARSER_H
11
+
12
+ #include "SectionParser.h"
13
+ #include "MSONUtility.h"
14
+
15
+ using namespace scpl;
16
+
17
+ namespace snowcrash {
18
+
19
+ /** MSON Default Type Section matching regex */
20
+ const char* const MSONDefaultTypeSectionRegex = "^[[:blank:]]*[Dd]efault[[:blank:]]*(:.*)?$";
21
+
22
+ /** MSON Sample Type Section matching regex */
23
+ const char* const MSONSampleTypeSectionRegex = "^[[:blank:]]*[Ss]ample[[:blank:]]*(:.*)?$";
24
+
25
+ /** MSON Value Members Type Section matching regex */
26
+ const char* const MSONValueMembersTypeSectionRegex = "^[[:blank:]]*([Ii]tems|[Mm]embers)[[:blank:]]*$";
27
+
28
+ /** MSON Property Members Type Section matching regex */
29
+ const char* const MSONPropertyMembersTypeSectionRegex = "^[[:blank:]]*([Pp]roperties)[[:blank:]]*$";
30
+
31
+ /**
32
+ * MSON Type Section Section Processor
33
+ */
34
+ template<>
35
+ struct SectionProcessor<mson::TypeSection> : public SignatureSectionProcessorBase<mson::TypeSection> {
36
+
37
+ static SignatureTraits signatureTraits() {
38
+
39
+ SignatureTraits signatureTraits(SignatureTraits::IdentifierTrait |
40
+ SignatureTraits::ValuesTrait);
41
+
42
+ return signatureTraits;
43
+ }
44
+
45
+ static MarkdownNodeIterator finalizeSignature(const MarkdownNodeIterator& node,
46
+ SectionParserData& pd,
47
+ const Signature& signature,
48
+ const ParseResultRef<mson::TypeSection>& out) {
49
+
50
+ bool assignValues = false;
51
+
52
+ if (IEqual<std::string>()(signature.identifier, "Default")) {
53
+
54
+ out.node.klass = mson::TypeSection::DefaultClass;
55
+ assignValues = true;
56
+ }
57
+ else if (IEqual<std::string>()(signature.identifier, "Sample")) {
58
+
59
+ out.node.klass = mson::TypeSection::SampleClass;
60
+ assignValues = true;
61
+ }
62
+ else if (IEqual<std::string>()(signature.identifier, "Items") ||
63
+ IEqual<std::string>()(signature.identifier, "Members")) {
64
+
65
+ if (out.node.baseType != mson::ValueBaseType &&
66
+ out.node.baseType != mson::ImplicitValueBaseType) {
67
+
68
+ //WARN: Items/Members should only be allowed for value types
69
+ std::stringstream ss;
70
+
71
+ ss << "type section `" << signature.identifier;
72
+ ss << "` not allowed for a type sub-typed from a primitive or object type";
73
+
74
+ mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
75
+ out.report.warnings.push_back(Warning(ss.str(),
76
+ LogicalErrorWarning,
77
+ sourceMap));
78
+
79
+ return node;
80
+ }
81
+
82
+ out.node.klass = mson::TypeSection::MemberTypeClass;
83
+ }
84
+ else if (IEqual<std::string>()(signature.identifier, "Properties")) {
85
+
86
+ if (out.node.baseType != mson::ObjectBaseType &&
87
+ out.node.baseType != mson::ImplicitObjectBaseType) {
88
+
89
+ //WARN: Properties should only be allowed for object types
90
+ std::stringstream ss;
91
+
92
+ ss << "type section `" << signature.identifier;
93
+ ss << "` is only allowed for a type sub-typed from an object type";
94
+
95
+ mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
96
+ out.report.warnings.push_back(Warning(ss.str(),
97
+ LogicalErrorWarning,
98
+ sourceMap));
99
+
100
+ return node;
101
+ }
102
+
103
+ out.node.klass = mson::TypeSection::MemberTypeClass;
104
+ }
105
+
106
+ if (assignValues &&
107
+ (!signature.values.empty() || !signature.value.empty())) {
108
+
109
+ if (out.node.baseType == mson::PrimitiveBaseType ||
110
+ out.node.baseType == mson::ImplicitPrimitiveBaseType) {
111
+
112
+ out.node.content.value = signature.value;
113
+
114
+ if (pd.exportSourceMap()) {
115
+ out.sourceMap.value.sourceMap = node->sourceMap;
116
+ }
117
+ }
118
+ else if (out.node.baseType == mson::ValueBaseType ||
119
+ out.node.baseType == mson::ImplicitValueBaseType) {
120
+
121
+ for (size_t i = 0; i < signature.values.size(); i++) {
122
+
123
+ mson::Element element;
124
+ SourceMap<mson::Element> elementSM;
125
+
126
+ element.build(mson::parseValue(signature.values[i]));
127
+ out.node.content.elements().push_back(element);
128
+
129
+ if (pd.exportSourceMap()) {
130
+
131
+ elementSM.value.valueDefinition.sourceMap = node->sourceMap;
132
+ out.sourceMap.elements().collection.push_back(elementSM);
133
+ }
134
+ }
135
+ }
136
+ else if (out.node.baseType == mson::ObjectBaseType ||
137
+ out.node.baseType == mson::ImplicitObjectBaseType) {
138
+
139
+ // WARN: sample/default is for an object but it has values in signature
140
+ mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
141
+ out.report.warnings.push_back(Warning("a sample and/or default type section for a type which is sub-typed from an object cannot have value(s) beside the keyword",
142
+ LogicalErrorWarning,
143
+ sourceMap));
144
+ }
145
+ }
146
+
147
+ if (assignValues && !signature.remainingContent.empty() &&
148
+ (out.node.baseType == mson::PrimitiveBaseType ||
149
+ out.node.baseType == mson::ImplicitPrimitiveBaseType)) {
150
+
151
+ out.node.content.value += signature.remainingContent;
152
+
153
+ if (pd.exportSourceMap()) {
154
+ out.sourceMap.value.sourceMap.append(node->sourceMap);
155
+ }
156
+ }
157
+
158
+ return ++MarkdownNodeIterator(node);
159
+ }
160
+
161
+ NO_SECTION_DESCRIPTION(mson::TypeSection)
162
+
163
+ static MarkdownNodeIterator processNestedSection(const MarkdownNodeIterator&,
164
+ const MarkdownNodes&,
165
+ SectionParserData&,
166
+ const ParseResultRef<mson::TypeSection>&);
167
+
168
+ static SectionType sectionType(const MarkdownNodeIterator& node) {
169
+
170
+ mdp::ByteBuffer subject, remaining;
171
+
172
+ if (node->type == mdp::HeaderMarkdownNodeType &&
173
+ !node->text.empty()) {
174
+
175
+ subject = node->text;
176
+ }
177
+ else if (node->type == mdp::ListItemMarkdownNodeType &&
178
+ !node->children().empty()) {
179
+
180
+ subject = node->children().front().text;
181
+ }
182
+
183
+ subject = GetFirstLine(subject, remaining);
184
+ TrimString(subject);
185
+
186
+ if (RegexMatch(subject, MSONDefaultTypeSectionRegex) ||
187
+ RegexMatch(subject, MSONSampleTypeSectionRegex)) {
188
+
189
+ return MSONSampleDefaultSectionType;
190
+ }
191
+
192
+ if (RegexMatch(subject, MSONValueMembersTypeSectionRegex)) {
193
+ return MSONValueMembersSectionType;
194
+ }
195
+
196
+ if (RegexMatch(subject, MSONPropertyMembersTypeSectionRegex)) {
197
+ return MSONPropertyMembersSectionType;
198
+ }
199
+
200
+ return UndefinedSectionType;
201
+ }
202
+
203
+ static SectionType nestedSectionType(const MarkdownNodeIterator&);
204
+ };
205
+
206
+ /** MSON Type Section (Header) Section Parser */
207
+ typedef SectionParser<mson::TypeSection, HeaderSectionAdapter> MSONTypeSectionHeaderParser;
208
+
209
+ /** MSON Type Section (List) Section Parser */
210
+ typedef SectionParser<mson::TypeSection, ListSectionAdapter> MSONTypeSectionListParser;
211
+ }
212
+
213
+ #endif
@@ -0,0 +1,423 @@
1
+ //
2
+ // MSONUtility.h
3
+ // snowcrash
4
+ //
5
+ // Created by Pavan Kumar Sunkara on 10/23/14.
6
+ // Copyright (c) 2014 Apiary Inc. All rights reserved.
7
+ //
8
+
9
+ #ifndef SNOWCRASH_MSONUTILITY_H
10
+ #define SNOWCRASH_MSONUTILITY_H
11
+
12
+ #include "MSONSourcemap.h"
13
+
14
+ using namespace scpl;
15
+
16
+ namespace mson {
17
+
18
+ /**
19
+ * \brief Check if the given string is variable
20
+ *
21
+ * \param String to check
22
+ *
23
+ * \return True if variable string
24
+ */
25
+ inline bool checkVariable(const std::string& subject) {
26
+
27
+ std::string emphasisChars = mdp::MarkdownEmphasisChars;
28
+
29
+ if (emphasisChars.find(subject[0]) != std::string::npos &&
30
+ subject[0] == subject[subject.length() - 1]) {
31
+
32
+ return true;
33
+ }
34
+
35
+ return false;
36
+ }
37
+
38
+ /**
39
+ * \brief Parse a MSON BaseTypeName into MSON BaseType
40
+ *
41
+ * \param type MSON BaseTypeName
42
+ *
43
+ * \return MSON BaseType
44
+ */
45
+ inline BaseType parseBaseType(const BaseTypeName& type) {
46
+
47
+ if ((type == StringTypeName) ||
48
+ (type == NumberTypeName) ||
49
+ (type == BooleanTypeName)) {
50
+
51
+ return PrimitiveBaseType;
52
+ }
53
+
54
+ if (type == ObjectTypeName) {
55
+ return ObjectBaseType;
56
+ }
57
+
58
+ if ((type == ArrayTypeName) ||
59
+ (type == EnumTypeName)) {
60
+
61
+ return ValueBaseType;
62
+ }
63
+
64
+ return UndefinedBaseType;
65
+ }
66
+
67
+ /**
68
+ * \brief Parse a string into MSON Value structure
69
+ *
70
+ * \param subject String which represents the value
71
+ *
72
+ * \return MSON Value
73
+ */
74
+ inline Value parseValue(const std::string& subject) {
75
+
76
+ Value value;
77
+ std::string buffer = subject;
78
+
79
+ if (checkVariable(subject)) {
80
+
81
+ std::string escapedString = snowcrash::RetrieveEscaped(buffer, 0, true);
82
+
83
+ value.literal = escapedString;
84
+ value.variable = true;
85
+ }
86
+
87
+ if (value.literal.empty()) {
88
+ value.literal = buffer;
89
+ }
90
+
91
+ // When the value is a wildcard
92
+ if (value.literal == "*") {
93
+
94
+ value.literal = "";
95
+ value.variable = true;
96
+ }
97
+
98
+ return value;
99
+ }
100
+
101
+ /**
102
+ * \brief Parse Symbol from a string
103
+ *
104
+ * \param subject String which represents the symbol
105
+ *
106
+ * \return MSON Symbol
107
+ */
108
+ inline Symbol parseSymbol(const std::string& subject) {
109
+
110
+ Symbol symbol;
111
+ Value value = parseValue(subject);
112
+
113
+ symbol.literal = value.literal;
114
+ symbol.variable = value.variable;
115
+
116
+ return symbol;
117
+ }
118
+
119
+ /**
120
+ * \brief Parse Type Name from a string
121
+ *
122
+ * \param subject String which represents the type name
123
+ * \param typeName MSON Type Name
124
+ */
125
+ inline void parseTypeName(const std::string& subject,
126
+ TypeName& typeName) {
127
+
128
+ if (subject == "boolean") {
129
+ typeName.base = BooleanTypeName;
130
+ }
131
+ else if (subject == "string") {
132
+ typeName.base = StringTypeName;
133
+ }
134
+ else if (subject == "number") {
135
+ typeName.base = NumberTypeName;
136
+ }
137
+ else if (subject == "array") {
138
+ typeName.base = ArrayTypeName;
139
+ }
140
+ else if (subject == "enum") {
141
+ typeName.base = EnumTypeName;
142
+ }
143
+ else if (subject == "object") {
144
+ typeName.base = ObjectTypeName;
145
+ }
146
+ else {
147
+ typeName.symbol = parseSymbol(subject);
148
+ }
149
+ }
150
+
151
+ /**
152
+ * \brief Check Type Attribute from a string and fill list of type attributes accordingly
153
+ *
154
+ * \param attribute String that needs to be checked for attribute
155
+ * \param typeAttributes List of type attributes
156
+ *
157
+ * \return True if the given string is a type attribute
158
+ */
159
+ inline bool parseTypeAttribute(const std::string& attribute,
160
+ TypeAttributes& typeAttributes) {
161
+
162
+ bool isAttribute = true;
163
+
164
+ if (attribute == "required") {
165
+ typeAttributes |= RequiredTypeAttribute;
166
+ }
167
+ else if (attribute == "optional") {
168
+ typeAttributes |= OptionalTypeAttribute;
169
+ }
170
+ else if (attribute == "fixed") {
171
+ typeAttributes |= FixedTypeAttribute;
172
+ }
173
+ else if (attribute == "sample") {
174
+ typeAttributes |= SampleTypeAttribute;
175
+ }
176
+ else if (attribute == "default") {
177
+ typeAttributes |= DefaultTypeAttribute;
178
+ }
179
+ else {
180
+ isAttribute = false;
181
+ }
182
+
183
+ return isAttribute;
184
+ }
185
+
186
+ /**
187
+ * \brief Parse Type Specification from a signature attribute
188
+ *
189
+ * \param subject Attribute string representing the type specification
190
+ * \param typeSpecification MSON Type Specification
191
+ */
192
+ inline void parseTypeSpecification(const std::string& attribute,
193
+ TypeSpecification& typeSpecification) {
194
+
195
+ std::string subject = snowcrash::StripMarkdownLink(attribute);
196
+
197
+ bool lookingAtNested = false; // If true, we are looking at nested types
198
+ bool lookingForEndLink = false; // If true, we detected a link text and are looking for the end of it
199
+ bool alreadyParsedLink = false; // If true, we already parsed the link text in the link
200
+
201
+ bool trimSubject = false;
202
+
203
+ size_t i = 0;
204
+ std::string buffer;
205
+
206
+ while (i < subject.length()) {
207
+
208
+ if (subject[i] == mdp::MarkdownBeginReference &&
209
+ !alreadyParsedLink) {
210
+
211
+ trimSubject = true;
212
+
213
+ if (!lookingAtNested) {
214
+
215
+ snowcrash::TrimString(buffer);
216
+
217
+ if (!buffer.empty()) {
218
+ parseTypeName(buffer, typeSpecification.name);
219
+ }
220
+
221
+ lookingAtNested = true;
222
+ }
223
+ else {
224
+ lookingForEndLink = true;
225
+ }
226
+ }
227
+ else if (subject[i] == mdp::MarkdownEndReference &&
228
+ lookingAtNested &&
229
+ lookingForEndLink) {
230
+
231
+ trimSubject = true;
232
+
233
+ TypeName typeName;
234
+ snowcrash::TrimString(buffer);
235
+
236
+ if (!buffer.empty()) {
237
+
238
+ parseTypeName(buffer, typeName);
239
+ typeSpecification.nestedTypes.push_back(typeName);
240
+ }
241
+
242
+ alreadyParsedLink = true;
243
+ lookingForEndLink = false;
244
+ }
245
+ else if (subject[i] == AttributeDelimiter &&
246
+ lookingAtNested &&
247
+ !lookingForEndLink) {
248
+
249
+ trimSubject = true;
250
+
251
+ if (alreadyParsedLink) {
252
+ alreadyParsedLink = false;
253
+ }
254
+ else {
255
+
256
+ TypeName typeName;
257
+ snowcrash::TrimString(buffer);
258
+
259
+ if (!buffer.empty()) {
260
+
261
+ parseTypeName(buffer, typeName);
262
+ typeSpecification.nestedTypes.push_back(typeName);
263
+ }
264
+ }
265
+ }
266
+ else {
267
+
268
+ buffer += subject[i];
269
+ i++;
270
+ }
271
+
272
+ // Strip the subject until the current index
273
+ if (trimSubject) {
274
+
275
+ subject = subject.substr(i + 1);
276
+ snowcrash::TrimString(subject);
277
+
278
+ trimSubject = false;
279
+ buffer.clear();
280
+ i = 0;
281
+ }
282
+ }
283
+
284
+ snowcrash::TrimString(buffer);
285
+
286
+ if (buffer.empty() || alreadyParsedLink) {
287
+ return;
288
+ }
289
+
290
+ // Remove the ending square bracket
291
+ if (lookingAtNested &&
292
+ buffer[buffer.length() - 1] == mdp::MarkdownEndReference) {
293
+
294
+ buffer = buffer.substr(0, buffer.length() - 1);
295
+ }
296
+
297
+ TypeName typeName;
298
+
299
+ snowcrash::TrimString(buffer);
300
+ parseTypeName(buffer, typeName);
301
+
302
+ if (lookingAtNested) {
303
+ typeSpecification.nestedTypes.push_back(typeName);
304
+ }
305
+ else {
306
+ typeSpecification.name = typeName;
307
+ }
308
+ }
309
+
310
+ /**
311
+ * \brief Parse Type Definition from a list of signature attributes
312
+ *
313
+ * \param node Markdown node of the signature
314
+ * \param pd Section parser data
315
+ * \param attributes List of signature attributes
316
+ * \param report Parse result report
317
+ * \param typeDefinition MSON Type Definition
318
+ */
319
+ inline void parseTypeDefinition(const mdp::MarkdownNodeIterator& node,
320
+ snowcrash::SectionParserData& pd,
321
+ const std::vector<std::string>& attributes,
322
+ snowcrash::Report& report,
323
+ mson::TypeDefinition& typeDefinition) {
324
+
325
+ bool foundTypeSpecification = false;
326
+
327
+ for (std::vector<std::string>::const_iterator it = attributes.begin();
328
+ it != attributes.end();
329
+ it++) {
330
+
331
+ // If not a recognized type attribute
332
+ if (!parseTypeAttribute(*it, typeDefinition.attributes)) {
333
+
334
+ // If type specification is already found
335
+ if (foundTypeSpecification) {
336
+
337
+ // WARN: Ignoring unrecognized type attribute
338
+ mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
339
+ report.warnings.push_back(snowcrash::Warning("ignoring unrecognized type attribute",
340
+ snowcrash::IgnoringWarning,
341
+ sourceMap));
342
+ }
343
+ else {
344
+
345
+ foundTypeSpecification = true;
346
+ parseTypeSpecification(*it, typeDefinition.typeSpecification);
347
+ }
348
+ }
349
+ }
350
+
351
+ typeDefinition.baseType = parseBaseType(typeDefinition.typeSpecification.name.base);
352
+ NamedTypeBaseTable::iterator it = pd.namedTypeBaseTable.find(typeDefinition.typeSpecification.name.symbol.literal);
353
+
354
+ if (typeDefinition.baseType == UndefinedBaseType &&
355
+ it != pd.namedTypeBaseTable.end()) {
356
+
357
+ typeDefinition.baseType = it->second;
358
+ }
359
+
360
+ if (typeDefinition.baseType == UndefinedBaseType &&
361
+ !typeDefinition.typeSpecification.name.symbol.literal.empty()) {
362
+
363
+ // WARN: Unable to find the named type in the named type base type table
364
+ std::stringstream ss;
365
+ ss << "unable to find the symbol `" << typeDefinition.typeSpecification.name.symbol.literal << "` in the list of named types";
366
+
367
+ mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
368
+ report.warnings.push_back(snowcrash::Warning(ss.str(),
369
+ snowcrash::LogicalErrorWarning,
370
+ sourceMap));
371
+ }
372
+
373
+ if (typeDefinition.baseType != ValueBaseType &&
374
+ typeDefinition.baseType != ImplicitValueBaseType &&
375
+ !typeDefinition.typeSpecification.nestedTypes.empty()) {
376
+
377
+ // WARN: Nested types for non (array or enum) structure base type
378
+ mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
379
+ report.warnings.push_back(snowcrash::Warning("nested types should be present only for types which are sub typed from either array or enum structure type",
380
+ snowcrash::LogicalErrorWarning,
381
+ sourceMap));
382
+ }
383
+ }
384
+
385
+ /**
386
+ * \brief Parse Property Name from a string given by signature identifier
387
+ *
388
+ * \param node Markdown node of the signature
389
+ * \param pd Section parser data
390
+ * \param subject String representing the property name
391
+ * \param report Parse result report
392
+ * \param propertyName MSON Property Name
393
+ */
394
+ inline void parsePropertyName(const mdp::MarkdownNodeIterator& node,
395
+ snowcrash::SectionParserData& pd,
396
+ const std::string& subject,
397
+ snowcrash::Report& report,
398
+ PropertyName& propertyName) {
399
+
400
+ std::string buffer = subject;
401
+
402
+ if (checkVariable(subject)) {
403
+
404
+ std::string escapedString = snowcrash::RetrieveEscaped(buffer, 0, true);
405
+
406
+ SignatureTraits traits(SignatureTraits::ValuesTrait |
407
+ SignatureTraits::AttributesTrait);
408
+
409
+ Signature signature = SignatureSectionProcessorBase<PropertyName>::parseSignature(node, pd, traits, report, escapedString);
410
+
411
+ if (!signature.value.empty()) {
412
+ propertyName.variable.values.push_back(parseValue(signature.value));
413
+ }
414
+
415
+ parseTypeDefinition(node, pd, signature.attributes, report, propertyName.variable.typeDefinition);
416
+ }
417
+ else {
418
+ propertyName.literal = subject;
419
+ }
420
+ }
421
+ }
422
+
423
+ #endif