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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.gitmodules +3 -0
- data/.rspec +2 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Guardfile +33 -0
- data/LICENSE.txt +21 -0
- data/README.md +50 -0
- data/Rakefile +43 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/circle.yml +14 -0
- data/ext/drafter/CHANGELOG.md +278 -0
- data/ext/drafter/Dockerfile +17 -0
- data/ext/drafter/Makefile +62 -0
- data/ext/drafter/appveyor.yml +17 -0
- data/ext/drafter/bin/drafter +0 -0
- data/ext/drafter/build/Makefile +387 -0
- data/ext/drafter/build/drafter.Makefile +6 -0
- data/ext/drafter/build/drafter.target.mk +159 -0
- data/ext/drafter/build/ext/snowcrash/libmarkdownparser.target.mk +141 -0
- data/ext/drafter/build/ext/snowcrash/libsnowcrash.target.mk +154 -0
- data/ext/drafter/build/ext/snowcrash/libsundown.target.mk +149 -0
- data/ext/drafter/build/ext/snowcrash/perf-libsnowcrash.target.mk +147 -0
- data/ext/drafter/build/ext/snowcrash/snowcrash.Makefile +6 -0
- data/ext/drafter/build/gyp-mac-tool +606 -0
- data/ext/drafter/build/libdrafter.target.mk +186 -0
- data/ext/drafter/build/libsos.target.mk +137 -0
- data/ext/drafter/build/out/Release/drafter +0 -0
- data/ext/drafter/build/out/Release/libdrafter.dylib +0 -0
- data/ext/drafter/build/out/Release/libmarkdownparser.a +0 -0
- data/ext/drafter/build/out/Release/libsnowcrash.a +0 -0
- data/ext/drafter/build/out/Release/libsos.a +0 -0
- data/ext/drafter/build/out/Release/libsundown.a +0 -0
- data/ext/drafter/build/out/Release/obj.target/drafter/src/config.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/drafter/src/main.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/drafter/src/reporting.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/ConversionContext.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/NamedTypesRegistry.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractAPI.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractDataStructure.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractElementFactory.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/RefractSourceMap.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/Render.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/Serialize.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeAST.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeResult.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/SerializeSourcemap.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/drafter.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/drafter_private.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/ComparableVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/Element.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/ExpandVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/IsExpandableVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/JSONSchemaVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/PrintVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/Query.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/Registry.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/RenderJSONVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/SerializeCompactVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/SerializeVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/TypeQueryVisitor.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libdrafter/src/refract/VisitorUtils.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libmarkdownparser/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Blueprint.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/BlueprintSourcemap.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/HTTP.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/HeadersParser.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSON.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONOneOfParser.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONSourcemap.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONTypeSectionParser.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/MSONValueMemberParser.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Section.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/Signature.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/UriTemplateParser.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/posix/RegexMatch.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsnowcrash/ext/snowcrash/src/snowcrash.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsos/ext/sos/src/sos.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_href_e.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_html_e.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html_smartypants.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/autolink.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/buffer.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/src_map.o +0 -0
- data/ext/drafter/build/out/Release/obj.target/libsundown/ext/snowcrash/ext/markdown-parser/ext/sundown/src/stack.o +0 -0
- data/ext/drafter/circle.yml +32 -0
- data/ext/drafter/config.gypi +10 -0
- data/ext/drafter/config.mk +5 -0
- data/ext/drafter/configure +224 -0
- data/ext/drafter/drafter.gyp +189 -0
- data/ext/drafter/drafter.xcworkspace/contents.xcworkspacedata +13 -0
- data/ext/drafter/ext/snowcrash/Makefile +58 -0
- data/ext/drafter/ext/snowcrash/appveyor.yml +7 -0
- data/ext/drafter/ext/snowcrash/common.gypi +165 -0
- data/ext/drafter/ext/snowcrash/configure +197 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/Makefile +90 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/CONTRIBUTING.md +10 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/Makefile +84 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/Makefile.win +33 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/examples/smartypants.c +72 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/examples/sundown.c +80 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini.h +37 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_href_e.c +108 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/houdini_html_e.c +84 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html.c +647 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html.h +77 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html/html_smartypants.c +389 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/html_block_names.txt +25 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/autolink.c +297 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/autolink.h +51 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/buffer.c +225 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/buffer.h +96 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/html_blocks.h +206 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.c +2726 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.h +147 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/src_map.c +204 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/src_map.h +58 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/stack.c +81 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/src/stack.h +29 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/ext/sundown/sundown.def +20 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/msvc/markdown/markdown.vcproj +188 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/msvc/msvc.sln +38 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/msvc/sundown/sundown.vcproj +206 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.cc +160 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.h +90 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.cc +152 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.h +103 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.cc +388 -0
- data/ext/drafter/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.h +106 -0
- data/ext/drafter/ext/snowcrash/snowcrash.gyp +196 -0
- data/ext/drafter/ext/snowcrash/src/ActionParser.h +560 -0
- data/ext/drafter/ext/snowcrash/src/AssetParser.h +123 -0
- data/ext/drafter/ext/snowcrash/src/AttributesParser.h +123 -0
- data/ext/drafter/ext/snowcrash/src/Blueprint.cc +90 -0
- data/ext/drafter/ext/snowcrash/src/Blueprint.h +489 -0
- data/ext/drafter/ext/snowcrash/src/BlueprintParser.h +845 -0
- data/ext/drafter/ext/snowcrash/src/BlueprintSourcemap.cc +81 -0
- data/ext/drafter/ext/snowcrash/src/BlueprintSourcemap.h +345 -0
- data/ext/drafter/ext/snowcrash/src/BlueprintUtility.h +111 -0
- data/ext/drafter/ext/snowcrash/src/CodeBlockUtility.h +276 -0
- data/ext/drafter/ext/snowcrash/src/DataStructureGroupParser.h +157 -0
- data/ext/drafter/ext/snowcrash/src/HTTP.cc +49 -0
- data/ext/drafter/ext/snowcrash/src/HTTP.h +108 -0
- data/ext/drafter/ext/snowcrash/src/HeadersParser.cc +117 -0
- data/ext/drafter/ext/snowcrash/src/HeadersParser.h +377 -0
- data/ext/drafter/ext/snowcrash/src/MSON.cc +272 -0
- data/ext/drafter/ext/snowcrash/src/MSON.h +405 -0
- data/ext/drafter/ext/snowcrash/src/MSONMixinParser.h +103 -0
- data/ext/drafter/ext/snowcrash/src/MSONNamedTypeParser.h +135 -0
- data/ext/drafter/ext/snowcrash/src/MSONOneOfParser.cc +132 -0
- data/ext/drafter/ext/snowcrash/src/MSONOneOfParser.h +80 -0
- data/ext/drafter/ext/snowcrash/src/MSONParameterParser.h +166 -0
- data/ext/drafter/ext/snowcrash/src/MSONPropertyMemberParser.h +106 -0
- data/ext/drafter/ext/snowcrash/src/MSONSourcemap.cc +141 -0
- data/ext/drafter/ext/snowcrash/src/MSONSourcemap.h +181 -0
- data/ext/drafter/ext/snowcrash/src/MSONTypeSectionParser.cc +209 -0
- data/ext/drafter/ext/snowcrash/src/MSONTypeSectionParser.h +213 -0
- data/ext/drafter/ext/snowcrash/src/MSONUtility.h +506 -0
- data/ext/drafter/ext/snowcrash/src/MSONValueMemberParser.cc +214 -0
- data/ext/drafter/ext/snowcrash/src/MSONValueMemberParser.h +390 -0
- data/ext/drafter/ext/snowcrash/src/ModelTable.h +87 -0
- data/ext/drafter/ext/snowcrash/src/ParameterParser.h +516 -0
- data/ext/drafter/ext/snowcrash/src/ParametersParser.h +222 -0
- data/ext/drafter/ext/snowcrash/src/PayloadParser.h +733 -0
- data/ext/drafter/ext/snowcrash/src/Platform.h +33 -0
- data/ext/drafter/ext/snowcrash/src/RegexMatch.h +32 -0
- data/ext/drafter/ext/snowcrash/src/RelationParser.h +87 -0
- data/ext/drafter/ext/snowcrash/src/ResourceGroupParser.h +297 -0
- data/ext/drafter/ext/snowcrash/src/ResourceParser.h +536 -0
- data/ext/drafter/ext/snowcrash/src/Section.cc +48 -0
- data/ext/drafter/ext/snowcrash/src/Section.h +60 -0
- data/ext/drafter/ext/snowcrash/src/SectionParser.h +246 -0
- data/ext/drafter/ext/snowcrash/src/SectionParserData.h +109 -0
- data/ext/drafter/ext/snowcrash/src/SectionProcessor.h +299 -0
- data/ext/drafter/ext/snowcrash/src/Signature.cc +75 -0
- data/ext/drafter/ext/snowcrash/src/Signature.h +103 -0
- data/ext/drafter/ext/snowcrash/src/SignatureSectionProcessor.h +442 -0
- data/ext/drafter/ext/snowcrash/src/SourceAnnotation.h +166 -0
- data/ext/drafter/ext/snowcrash/src/StringUtility.h +323 -0
- data/ext/drafter/ext/snowcrash/src/UriTemplateParser.cc +195 -0
- data/ext/drafter/ext/snowcrash/src/UriTemplateParser.h +240 -0
- data/ext/drafter/ext/snowcrash/src/ValuesParser.h +111 -0
- data/ext/drafter/ext/snowcrash/src/posix/RegexMatch.cc +99 -0
- data/ext/drafter/ext/snowcrash/src/snowcrash.cc +90 -0
- data/ext/drafter/ext/snowcrash/src/snowcrash.h +44 -0
- data/ext/drafter/ext/snowcrash/src/win/RegexMatch.cc +78 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/AUTHORS +12 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/DEPS +23 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/OWNERS +1 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/PRESUBMIT.py +137 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/buildbot/buildbot_run.py +136 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/buildbot/commit_queue/OWNERS +6 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/buildbot/commit_queue/cq_config.json +15 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/codereview.settings +10 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/data/win/large-pdb-shim.cc +12 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/gyp +8 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/gyp.bat +5 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/gyp_main.py +16 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSNew.py +340 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSProject.py +208 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSSettings.py +1096 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSToolFile.py +58 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSUserFile.py +147 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSUtil.py +270 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSUtil.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSVersion.py +445 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/MSVSVersion.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/__init__.py +548 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/__init__.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/common.py +608 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/common.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/easy_xml.py +157 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/flock_tool.py +54 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/__init__.py +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/__init__.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/analyzer.py +741 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/android.py +1069 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/cmake.py +1248 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/dump_dependency_json.py +99 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/eclipse.py +425 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/gypd.py +94 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/gypsh.py +56 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/make.py +2218 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/make.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/msvs.py +3467 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/ninja.py +2427 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/ninja.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/xcode.py +1300 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/generator/xcode.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/input.py +2899 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/input.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/mac_tool.py +605 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/msvs_emulation.py +1093 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/msvs_emulation.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/ninja_syntax.py +160 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/ninja_syntax.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/ordered_dict.py +289 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/simple_copy.py +46 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/simple_copy.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/win_tool.py +314 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_emulation.py +1664 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_emulation.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_ninja.py +276 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcode_ninja.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcodeproj_file.py +2927 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xcodeproj_file.pyc +0 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylib/gyp/xml_fix.py +69 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/pylintrc +307 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/samples/samples +81 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/samples/samples.bat +5 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/setup.py +19 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/tools/Xcode/Specifications/gyp.pbfilespec +27 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/tools/Xcode/Specifications/gyp.xclangspec +226 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/tools/emacs/gyp.el +275 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/tools/graphviz.py +100 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/tools/pretty_gyp.py +155 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/tools/pretty_sln.py +169 -0
- data/ext/drafter/ext/snowcrash/tools/gyp/tools/pretty_vcproj.py +329 -0
- data/ext/drafter/ext/snowcrash/vcbuild.bat +139 -0
- data/ext/drafter/ext/sos/Makefile +62 -0
- data/ext/drafter/ext/sos/src/sos.cc +235 -0
- data/ext/drafter/ext/sos/src/sos.h +188 -0
- data/ext/drafter/ext/sos/src/sosJSON.h +121 -0
- data/ext/drafter/ext/sos/src/sosYAML.h +105 -0
- data/ext/drafter/src/ConversionContext.cc +39 -0
- data/ext/drafter/src/ConversionContext.h +34 -0
- data/ext/drafter/src/NamedTypesRegistry.cc +405 -0
- data/ext/drafter/src/NamedTypesRegistry.h +28 -0
- data/ext/drafter/src/NodeInfo.h +143 -0
- data/ext/drafter/src/RefractAPI.cc +579 -0
- data/ext/drafter/src/RefractAPI.h +28 -0
- data/ext/drafter/src/RefractDataStructure.cc +1199 -0
- data/ext/drafter/src/RefractDataStructure.h +26 -0
- data/ext/drafter/src/RefractElementFactory.cc +107 -0
- data/ext/drafter/src/RefractElementFactory.h +67 -0
- data/ext/drafter/src/RefractSourceMap.cc +29 -0
- data/ext/drafter/src/RefractSourceMap.h +57 -0
- data/ext/drafter/src/Render.cc +157 -0
- data/ext/drafter/src/Render.h +40 -0
- data/ext/drafter/src/Serialize.cc +160 -0
- data/ext/drafter/src/Serialize.h +289 -0
- data/ext/drafter/src/SerializeAST.cc +507 -0
- data/ext/drafter/src/SerializeAST.h +29 -0
- data/ext/drafter/src/SerializeResult.cc +170 -0
- data/ext/drafter/src/SerializeResult.h +34 -0
- data/ext/drafter/src/SerializeSourcemap.cc +331 -0
- data/ext/drafter/src/SerializeSourcemap.h +21 -0
- data/ext/drafter/src/Version.h +40 -0
- data/ext/drafter/src/config.cc +91 -0
- data/ext/drafter/src/config.h +38 -0
- data/ext/drafter/src/drafter.cc +137 -0
- data/ext/drafter/src/drafter.h +102 -0
- data/ext/drafter/src/drafter_private.cc +85 -0
- data/ext/drafter/src/drafter_private.h +34 -0
- data/ext/drafter/src/main.cc +137 -0
- data/ext/drafter/src/refract/AppendDecorator.h +58 -0
- data/ext/drafter/src/refract/Build.h +67 -0
- data/ext/drafter/src/refract/ComparableVisitor.cc +43 -0
- data/ext/drafter/src/refract/ComparableVisitor.h +62 -0
- data/ext/drafter/src/refract/Element.cc +409 -0
- data/ext/drafter/src/refract/Element.h +656 -0
- data/ext/drafter/src/refract/ElementFwd.h +37 -0
- data/ext/drafter/src/refract/ElementInserter.h +59 -0
- data/ext/drafter/src/refract/Exception.h +31 -0
- data/ext/drafter/src/refract/ExpandVisitor.cc +359 -0
- data/ext/drafter/src/refract/ExpandVisitor.h +58 -0
- data/ext/drafter/src/refract/FilterVisitor.h +52 -0
- data/ext/drafter/src/refract/IsExpandableVisitor.cc +140 -0
- data/ext/drafter/src/refract/IsExpandableVisitor.h +31 -0
- data/ext/drafter/src/refract/Iterate.h +160 -0
- data/ext/drafter/src/refract/JSONSchemaVisitor.cc +675 -0
- data/ext/drafter/src/refract/JSONSchemaVisitor.h +73 -0
- data/ext/drafter/src/refract/PrintVisitor.cc +164 -0
- data/ext/drafter/src/refract/PrintVisitor.h +50 -0
- data/ext/drafter/src/refract/Query.cc +13 -0
- data/ext/drafter/src/refract/Query.h +38 -0
- data/ext/drafter/src/refract/Registry.cc +114 -0
- data/ext/drafter/src/refract/Registry.h +43 -0
- data/ext/drafter/src/refract/RenderJSONVisitor.cc +255 -0
- data/ext/drafter/src/refract/RenderJSONVisitor.h +51 -0
- data/ext/drafter/src/refract/SerializeCompactVisitor.cc +167 -0
- data/ext/drafter/src/refract/SerializeCompactVisitor.h +56 -0
- data/ext/drafter/src/refract/SerializeVisitor.cc +214 -0
- data/ext/drafter/src/refract/SerializeVisitor.h +55 -0
- data/ext/drafter/src/refract/TypeQueryVisitor.cc +46 -0
- data/ext/drafter/src/refract/TypeQueryVisitor.h +110 -0
- data/ext/drafter/src/refract/Visitor.h +126 -0
- data/ext/drafter/src/refract/VisitorUtils.cc +63 -0
- data/ext/drafter/src/refract/VisitorUtils.h +231 -0
- data/ext/drafter/src/reporting.cc +263 -0
- data/ext/drafter/src/reporting.h +39 -0
- data/ext/drafter/src/stream.h +148 -0
- data/ext/drafter/tools/homebrew/drafter.rb +18 -0
- data/ext/drafter/tools/make-tarball.sh +39 -0
- data/ext/drafter/tools/refract-filter.py +96 -0
- data/ext/drafter/tools/release.sh +17 -0
- data/ext/drafter/vcbuild.bat +203 -0
- data/lib/lounge_lizard/binding.rb +29 -0
- data/lib/lounge_lizard/version.rb +3 -0
- data/lib/lounge_lizard.rb +18 -0
- data/lounge_lizard.gemspec +37 -0
- metadata +547 -0
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ResourceParser.h
|
|
3
|
+
// snowcrash
|
|
4
|
+
//
|
|
5
|
+
// Created by Zdenek Nemec on 5/4/13.
|
|
6
|
+
// Copyright (c) 2013 Apiary Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#ifndef SNOWCRASH_RESOURCEPARSER_H
|
|
10
|
+
#define SNOWCRASH_RESOURCEPARSER_H
|
|
11
|
+
|
|
12
|
+
#include "SectionParser.h"
|
|
13
|
+
#include "ActionParser.h"
|
|
14
|
+
#include "DataStructureGroupParser.h"
|
|
15
|
+
#include "HeadersParser.h"
|
|
16
|
+
#include "ParametersParser.h"
|
|
17
|
+
#include "UriTemplateParser.h"
|
|
18
|
+
#include "RegexMatch.h"
|
|
19
|
+
|
|
20
|
+
namespace snowcrash {
|
|
21
|
+
|
|
22
|
+
/** Nameless resource matching regex */
|
|
23
|
+
const char* const ResourceHeaderRegex = "^[[:blank:]]*(" HTTP_REQUEST_METHOD "[[:blank:]]+)?" URI_TEMPLATE "$";
|
|
24
|
+
|
|
25
|
+
/** Named resource matching regex */
|
|
26
|
+
const char* const NamedResourceHeaderRegex = "^[[:blank:]]*" SYMBOL_IDENTIFIER "[[:blank:]]+\\[" URI_TEMPLATE "]$";
|
|
27
|
+
|
|
28
|
+
/** Named endpoint matching regex */
|
|
29
|
+
const char* const NamedEndpointHeaderRegex = "^[[:blank:]]*" SYMBOL_IDENTIFIER "[[:blank:]]+\\[" HTTP_REQUEST_METHOD "[[:blank:]]+" URI_TEMPLATE "]$";
|
|
30
|
+
|
|
31
|
+
/** Internal type alias for Collection iterator of Resource */
|
|
32
|
+
typedef Collection<Resource>::const_iterator ResourceIterator;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Resource Section processor
|
|
36
|
+
*/
|
|
37
|
+
template<>
|
|
38
|
+
struct SectionProcessor<Resource> : public SectionProcessorBase<Resource> {
|
|
39
|
+
|
|
40
|
+
static MarkdownNodeIterator processSignature(const MarkdownNodeIterator& node,
|
|
41
|
+
const MarkdownNodes& siblings,
|
|
42
|
+
SectionParserData& pd,
|
|
43
|
+
SectionLayout& layout,
|
|
44
|
+
const ParseResultRef<Resource>& out) {
|
|
45
|
+
|
|
46
|
+
CaptureGroups captureGroups;
|
|
47
|
+
|
|
48
|
+
// If Abbreviated resource section
|
|
49
|
+
if (RegexCapture(node->text, ResourceHeaderRegex, captureGroups, 4)) {
|
|
50
|
+
|
|
51
|
+
out.node.uriTemplate = captureGroups[3];
|
|
52
|
+
|
|
53
|
+
// Make this section an action
|
|
54
|
+
if (!captureGroups[2].empty()) {
|
|
55
|
+
return processNestedAction(node, node->parent().children(), pd, layout, out);
|
|
56
|
+
}
|
|
57
|
+
} else if (RegexCapture(node->text, NamedEndpointHeaderRegex, captureGroups, 5)) {
|
|
58
|
+
|
|
59
|
+
out.node.name = captureGroups[1];
|
|
60
|
+
TrimString(out.node.name);
|
|
61
|
+
out.node.uriTemplate = captureGroups[3];
|
|
62
|
+
|
|
63
|
+
return processNestedAction(node, node->parent().children(), pd, layout, out);
|
|
64
|
+
} else {
|
|
65
|
+
matchNamedResourceHeader(node, out.node);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (pd.exportSourceMap()) {
|
|
69
|
+
if (!out.node.uriTemplate.empty()) {
|
|
70
|
+
out.sourceMap.uriTemplate.sourceMap = node->sourceMap;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!out.node.name.empty()) {
|
|
74
|
+
out.sourceMap.name.sourceMap = node->sourceMap;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return ++MarkdownNodeIterator(node);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
static MarkdownNodeIterator processNestedSection(const MarkdownNodeIterator& node,
|
|
82
|
+
const MarkdownNodes& siblings,
|
|
83
|
+
SectionParserData& pd,
|
|
84
|
+
const ParseResultRef<Resource>& out) {
|
|
85
|
+
|
|
86
|
+
switch (pd.sectionContext()) {
|
|
87
|
+
case ActionSectionType:
|
|
88
|
+
return processAction(node, siblings, pd, out);
|
|
89
|
+
|
|
90
|
+
case ParametersSectionType:
|
|
91
|
+
return processParameters(node, siblings, pd, out);
|
|
92
|
+
|
|
93
|
+
case ModelSectionType:
|
|
94
|
+
case ModelBodySectionType:
|
|
95
|
+
return processModel(node, siblings, pd, out);
|
|
96
|
+
|
|
97
|
+
case HeadersSectionType:
|
|
98
|
+
{
|
|
99
|
+
ParseResultRef<Headers> headers(out.report, out.node.headers, out.sourceMap.headers);
|
|
100
|
+
return SectionProcessor<Action>::handleDeprecatedHeaders(node, siblings, pd, headers);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
case AttributesSectionType:
|
|
104
|
+
{
|
|
105
|
+
// Set up named type context
|
|
106
|
+
if (!out.node.name.empty()) {
|
|
107
|
+
pd.namedTypeContext = out.node.name;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
ParseResultRef<Attributes> attributes(out.report, out.node.attributes, out.sourceMap.attributes);
|
|
111
|
+
MarkdownNodeIterator cur = AttributesParser::parse(node, siblings, pd, attributes);
|
|
112
|
+
|
|
113
|
+
// Clear named type context
|
|
114
|
+
pd.namedTypeContext.clear();
|
|
115
|
+
|
|
116
|
+
if (!out.node.name.empty()) {
|
|
117
|
+
|
|
118
|
+
if (SectionProcessor<DataStructureGroup>::isNamedTypeDuplicate(pd.blueprint, out.node.name)) {
|
|
119
|
+
|
|
120
|
+
// WARN: duplicate named type
|
|
121
|
+
std::stringstream ss;
|
|
122
|
+
ss << "named type with name '" << out.node.name << "' already exists";
|
|
123
|
+
|
|
124
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
125
|
+
out.report.warnings.push_back(Warning(ss.str(),
|
|
126
|
+
DuplicateWarning,
|
|
127
|
+
sourceMap));
|
|
128
|
+
|
|
129
|
+
// Remove the attributes data from the AST since we are ignoring this
|
|
130
|
+
out.node.attributes = mson::NamedType();
|
|
131
|
+
|
|
132
|
+
return cur;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
attributes.node.name.symbol.literal = out.node.name;
|
|
136
|
+
|
|
137
|
+
if (pd.exportSourceMap()) {
|
|
138
|
+
attributes.sourceMap.name.sourceMap = out.sourceMap.name.sourceMap;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return cur;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
default:
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return node;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
static MarkdownNodeIterator processUnexpectedNode(const MarkdownNodeIterator& node,
|
|
153
|
+
const MarkdownNodes& siblings,
|
|
154
|
+
SectionParserData& pd,
|
|
155
|
+
SectionType& sectionType,
|
|
156
|
+
const ParseResultRef<Resource>& out) {
|
|
157
|
+
|
|
158
|
+
if ((node->type == mdp::ParagraphMarkdownNodeType ||
|
|
159
|
+
node->type == mdp::CodeMarkdownNodeType) &&
|
|
160
|
+
(sectionType == ModelBodySectionType ||
|
|
161
|
+
sectionType == ModelSectionType)) {
|
|
162
|
+
|
|
163
|
+
mdp::ByteBuffer content = CodeBlockUtility::addDanglingAsset(node, pd, sectionType, out.report, out.node.model.body);
|
|
164
|
+
|
|
165
|
+
if (pd.exportSourceMap() && !content.empty()) {
|
|
166
|
+
out.sourceMap.model.body.sourceMap.append(node->sourceMap);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Update model in the model table as well
|
|
170
|
+
ModelTable::iterator it = pd.modelTable.find(out.node.model.name);
|
|
171
|
+
|
|
172
|
+
if (it != pd.modelTable.end()) {
|
|
173
|
+
it->second.body = out.node.model.body;
|
|
174
|
+
|
|
175
|
+
if (pd.exportSourceMap()) {
|
|
176
|
+
pd.modelSourceMapTable[out.node.model.name].body = out.sourceMap.model.body;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return ++MarkdownNodeIterator(node);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return SectionProcessorBase<Resource>::processUnexpectedNode(node, siblings, pd, sectionType, out);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
static bool isDescriptionNode(const MarkdownNodeIterator& node,
|
|
187
|
+
SectionType sectionType) {
|
|
188
|
+
|
|
189
|
+
if (SectionProcessor<Action>::actionType(node) == CompleteActionType) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return SectionProcessorBase<Resource>::isDescriptionNode(node, sectionType);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
static SectionType sectionType(const MarkdownNodeIterator& node) {
|
|
197
|
+
|
|
198
|
+
if (node->type == mdp::HeaderMarkdownNodeType
|
|
199
|
+
&& !node->text.empty()) {
|
|
200
|
+
|
|
201
|
+
CaptureGroups captureGroups;
|
|
202
|
+
mdp::ByteBuffer subject = node->text;
|
|
203
|
+
|
|
204
|
+
TrimString(subject);
|
|
205
|
+
|
|
206
|
+
if (RegexMatch(subject, NamedResourceHeaderRegex) ||
|
|
207
|
+
RegexMatch(subject, NamedEndpointHeaderRegex) ||
|
|
208
|
+
RegexMatch(subject, ResourceHeaderRegex)) {
|
|
209
|
+
return ResourceSectionType;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
return UndefinedSectionType;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
static SectionType nestedSectionType(const MarkdownNodeIterator& node) {
|
|
217
|
+
|
|
218
|
+
SectionType nestedType = UndefinedSectionType;
|
|
219
|
+
|
|
220
|
+
// Check if parameters section
|
|
221
|
+
nestedType = SectionProcessor<Parameters>::sectionType(node);
|
|
222
|
+
|
|
223
|
+
if (nestedType != UndefinedSectionType) {
|
|
224
|
+
return nestedType;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Check if headers section
|
|
228
|
+
nestedType = SectionProcessor<Headers>::sectionType(node);
|
|
229
|
+
|
|
230
|
+
if (nestedType != UndefinedSectionType) {
|
|
231
|
+
return nestedType;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Check if model section
|
|
235
|
+
nestedType = SectionProcessor<Payload>::sectionType(node);
|
|
236
|
+
|
|
237
|
+
if (nestedType == ModelSectionType ||
|
|
238
|
+
nestedType == ModelBodySectionType) {
|
|
239
|
+
|
|
240
|
+
return nestedType;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Check if attributes section
|
|
244
|
+
nestedType = SectionProcessor<Attributes>::sectionType(node);
|
|
245
|
+
|
|
246
|
+
if (nestedType != UndefinedSectionType) {
|
|
247
|
+
return nestedType;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Check if action section
|
|
251
|
+
nestedType = SectionProcessor<Action>::sectionType(node);
|
|
252
|
+
|
|
253
|
+
if (nestedType == ActionSectionType) {
|
|
254
|
+
|
|
255
|
+
// Do not consider complete actions as nested
|
|
256
|
+
mdp::ByteBuffer method;
|
|
257
|
+
if (SectionProcessor<Action>::actionType(node) == CompleteActionType)
|
|
258
|
+
return UndefinedSectionType;
|
|
259
|
+
|
|
260
|
+
return nestedType;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return UndefinedSectionType;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
static SectionTypes upperSectionTypes() {
|
|
267
|
+
return {ResourceGroupSectionType, ResourceSectionType, DataStructureGroupSectionType};
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
static void finalize(const MarkdownNodeIterator& node,
|
|
271
|
+
SectionParserData& pd,
|
|
272
|
+
const ParseResultRef<Resource>& out) {
|
|
273
|
+
|
|
274
|
+
if (!out.node.uriTemplate.empty()) {
|
|
275
|
+
|
|
276
|
+
URITemplateParser uriTemplateParser;
|
|
277
|
+
ParsedURITemplate parsedResult;
|
|
278
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
279
|
+
|
|
280
|
+
uriTemplateParser.parse(out.node.uriTemplate, sourceMap, parsedResult);
|
|
281
|
+
|
|
282
|
+
if (!parsedResult.report.warnings.empty()) {
|
|
283
|
+
out.report += parsedResult.report;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Consolidate deprecated headers into subsequent payloads
|
|
288
|
+
if (!out.node.headers.empty()) {
|
|
289
|
+
|
|
290
|
+
Collection<Action>::iterator actionIt = out.node.actions.begin();
|
|
291
|
+
Collection<SourceMap<Action> >::iterator actionSMIt = out.sourceMap.actions.collection.begin();
|
|
292
|
+
|
|
293
|
+
for (;
|
|
294
|
+
actionIt != out.node.actions.end();
|
|
295
|
+
++actionIt, ++actionSMIt) {
|
|
296
|
+
|
|
297
|
+
SectionProcessor<Headers>::injectDeprecatedHeaders(pd, out.node.headers, out.sourceMap.headers, actionIt->examples, actionSMIt->examples);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
out.node.headers.clear();
|
|
301
|
+
|
|
302
|
+
if (pd.exportSourceMap()) {
|
|
303
|
+
out.sourceMap.headers.collection.clear();
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* \brief Given a named resource header, retrieve the name and uriTemplate
|
|
310
|
+
*
|
|
311
|
+
* \param node Markdown node to process
|
|
312
|
+
* \param resource Resource data structure
|
|
313
|
+
*/
|
|
314
|
+
static void matchNamedResourceHeader(const MarkdownNodeIterator& node,
|
|
315
|
+
Resource& resource) {
|
|
316
|
+
|
|
317
|
+
CaptureGroups captureGroups;
|
|
318
|
+
|
|
319
|
+
if (RegexCapture(node->text, NamedResourceHeaderRegex, captureGroups, 4)) {
|
|
320
|
+
|
|
321
|
+
resource.name = captureGroups[1];
|
|
322
|
+
TrimString(resource.name);
|
|
323
|
+
resource.uriTemplate = captureGroups[2];
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* \brief Parse the current node as an action
|
|
329
|
+
*/
|
|
330
|
+
static MarkdownNodeIterator processNestedAction(const MarkdownNodeIterator& node,
|
|
331
|
+
const MarkdownNodes& siblings,
|
|
332
|
+
SectionParserData& pd,
|
|
333
|
+
SectionLayout& layout,
|
|
334
|
+
const ParseResultRef<Resource>& out) {
|
|
335
|
+
|
|
336
|
+
IntermediateParseResult<Action> action(out.report);
|
|
337
|
+
MarkdownNodeIterator cur = ActionParser::parse(node, siblings, pd, action);
|
|
338
|
+
|
|
339
|
+
out.node.actions.push_back(action.node);
|
|
340
|
+
layout = RedirectSectionLayout;
|
|
341
|
+
|
|
342
|
+
if (pd.exportSourceMap()) {
|
|
343
|
+
out.sourceMap.actions.collection.push_back(action.sourceMap);
|
|
344
|
+
out.sourceMap.uriTemplate.sourceMap = node->sourceMap;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
return cur;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/** Process Action section */
|
|
351
|
+
static MarkdownNodeIterator processAction(const MarkdownNodeIterator& node,
|
|
352
|
+
const MarkdownNodes& siblings,
|
|
353
|
+
SectionParserData& pd,
|
|
354
|
+
const ParseResultRef<Resource>& out) {
|
|
355
|
+
|
|
356
|
+
IntermediateParseResult<Action> action(out.report);
|
|
357
|
+
MarkdownNodeIterator cur = ActionParser::parse(node, siblings, pd, action);
|
|
358
|
+
|
|
359
|
+
ActionIterator duplicate = SectionProcessor<Action>::findAction(out.node.actions, action.node);
|
|
360
|
+
|
|
361
|
+
if (duplicate != out.node.actions.end()) {
|
|
362
|
+
|
|
363
|
+
// WARN: duplicate method
|
|
364
|
+
std::stringstream ss;
|
|
365
|
+
ss << "action with method '" << action.node.method << "' already defined for resource '";
|
|
366
|
+
ss << out.node.uriTemplate << "'";
|
|
367
|
+
|
|
368
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
369
|
+
out.report.warnings.push_back(Warning(ss.str(),
|
|
370
|
+
DuplicateWarning,
|
|
371
|
+
sourceMap));
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
ActionIterator relationDuplicate = SectionProcessor<Action>::findRelation(out.node.actions, action.node.relation);
|
|
375
|
+
|
|
376
|
+
if (relationDuplicate != out.node.actions.end()) {
|
|
377
|
+
|
|
378
|
+
// WARN: duplicate relation identifier
|
|
379
|
+
std::stringstream ss;
|
|
380
|
+
ss << "relation identifier '" << action.node.relation.str << "' already defined for resource '" << out.node.uriTemplate << "'";
|
|
381
|
+
|
|
382
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
383
|
+
out.report.warnings.push_back(Warning(ss.str(),
|
|
384
|
+
DuplicateWarning,
|
|
385
|
+
sourceMap));
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (!action.node.parameters.empty() &&
|
|
389
|
+
action.node.uriTemplate.empty()) {
|
|
390
|
+
checkParametersEligibility<Resource>(node, pd, action.node.parameters, out);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
out.node.actions.push_back(action.node);
|
|
394
|
+
|
|
395
|
+
if (pd.exportSourceMap()) {
|
|
396
|
+
out.sourceMap.actions.collection.push_back(action.sourceMap);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
return cur;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/** Process Parameters section */
|
|
403
|
+
static MarkdownNodeIterator processParameters(const MarkdownNodeIterator& node,
|
|
404
|
+
const MarkdownNodes& siblings,
|
|
405
|
+
SectionParserData& pd,
|
|
406
|
+
const ParseResultRef<Resource>& out) {
|
|
407
|
+
|
|
408
|
+
IntermediateParseResult<Parameters> parameters(out.report);
|
|
409
|
+
|
|
410
|
+
MarkdownNodeIterator cur = ParametersParser::parse(node, siblings, pd, parameters);
|
|
411
|
+
|
|
412
|
+
if (!parameters.node.empty()) {
|
|
413
|
+
|
|
414
|
+
checkParametersEligibility<Resource>(node, pd, parameters.node, out);
|
|
415
|
+
out.node.parameters.insert(out.node.parameters.end(), parameters.node.begin(), parameters.node.end());
|
|
416
|
+
|
|
417
|
+
if (pd.exportSourceMap()) {
|
|
418
|
+
out.sourceMap.parameters.collection.insert(out.sourceMap.parameters.collection.end(),
|
|
419
|
+
parameters.sourceMap.collection.begin(),
|
|
420
|
+
parameters.sourceMap.collection.end());
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
return cur;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/** Process Model section */
|
|
428
|
+
static MarkdownNodeIterator processModel(const MarkdownNodeIterator& node,
|
|
429
|
+
const MarkdownNodes& siblings,
|
|
430
|
+
SectionParserData& pd,
|
|
431
|
+
const ParseResultRef<Resource>& out) {
|
|
432
|
+
|
|
433
|
+
IntermediateParseResult<Payload> model(out.report);
|
|
434
|
+
|
|
435
|
+
MarkdownNodeIterator cur = PayloadParser::parse(node, siblings, pd, model);
|
|
436
|
+
|
|
437
|
+
// Check whether there isn't a model already
|
|
438
|
+
if (!out.node.model.name.empty()) {
|
|
439
|
+
|
|
440
|
+
// WARN: Model already defined
|
|
441
|
+
std::stringstream ss;
|
|
442
|
+
ss << "overshadowing previous model definition for '";
|
|
443
|
+
|
|
444
|
+
if (!out.node.name.empty()) {
|
|
445
|
+
ss << out.node.name << "(" << out.node.uriTemplate << ")";
|
|
446
|
+
} else {
|
|
447
|
+
ss << out.node.uriTemplate;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
ss << "' resource, a resource can be represented by a single model only";
|
|
451
|
+
|
|
452
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
453
|
+
out.report.warnings.push_back(Warning(ss.str(),
|
|
454
|
+
DuplicateWarning,
|
|
455
|
+
sourceMap));
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
if (model.node.name.empty()) {
|
|
459
|
+
|
|
460
|
+
if (!out.node.name.empty()) {
|
|
461
|
+
model.node.name = out.node.name;
|
|
462
|
+
|
|
463
|
+
if (pd.exportSourceMap()) {
|
|
464
|
+
model.sourceMap.name = out.sourceMap.name;
|
|
465
|
+
}
|
|
466
|
+
} else {
|
|
467
|
+
|
|
468
|
+
// ERR: No name specified for resource model
|
|
469
|
+
std::stringstream ss;
|
|
470
|
+
ss << "resource model can be specified only for a named resource";
|
|
471
|
+
ss << ", name your resource, e.g. '# <resource name> [" << out.node.uriTemplate << "]'";
|
|
472
|
+
|
|
473
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
474
|
+
out.report.error = Error(ss.str(),
|
|
475
|
+
ModelError,
|
|
476
|
+
sourceMap);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
ModelTable::iterator it = pd.modelTable.find(model.node.name);
|
|
481
|
+
|
|
482
|
+
if (it == pd.modelTable.end()) {
|
|
483
|
+
|
|
484
|
+
pd.modelTable[model.node.name] = model.node;
|
|
485
|
+
|
|
486
|
+
if (pd.exportSourceMap()) {
|
|
487
|
+
pd.modelSourceMapTable[model.node.name] = model.sourceMap;
|
|
488
|
+
}
|
|
489
|
+
} else {
|
|
490
|
+
|
|
491
|
+
// ERR: Model already defined
|
|
492
|
+
std::stringstream ss;
|
|
493
|
+
ss << "symbol '" << model.node.name << "' already defined";
|
|
494
|
+
|
|
495
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
496
|
+
out.report.error = Error(ss.str(),
|
|
497
|
+
ModelError,
|
|
498
|
+
sourceMap);
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
out.node.model = model.node;
|
|
502
|
+
|
|
503
|
+
if (pd.exportSourceMap()) {
|
|
504
|
+
out.sourceMap.model = model.sourceMap;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
return cur;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* \brief Given a list of elements, Check if a resource already exists with the given uri template
|
|
512
|
+
*
|
|
513
|
+
* \param elements Collection of elements
|
|
514
|
+
* \param uri The resource uri template to be checked
|
|
515
|
+
*/
|
|
516
|
+
static bool isResourceDuplicate(const Elements& elements,
|
|
517
|
+
const URITemplate& uri) {
|
|
518
|
+
|
|
519
|
+
for (Elements::const_iterator it = elements.begin(); it != elements.end(); ++it) {
|
|
520
|
+
|
|
521
|
+
if (it->element == Element::ResourceElement &&
|
|
522
|
+
it->content.resource.uriTemplate == uri) {
|
|
523
|
+
|
|
524
|
+
return true;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
};
|
|
531
|
+
|
|
532
|
+
/** Resource Section Parser */
|
|
533
|
+
typedef SectionParser<Resource, HeaderSectionAdapter> ResourceParser;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
#endif
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Section.cc
|
|
3
|
+
// snowcrash
|
|
4
|
+
//
|
|
5
|
+
// Created by Zdenek Nemec on 5/14/14.
|
|
6
|
+
// Copyright (c) 2014 Apiary Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "Section.h"
|
|
10
|
+
|
|
11
|
+
using namespace snowcrash;
|
|
12
|
+
|
|
13
|
+
std::string snowcrash::SectionName(const SectionType& section) {
|
|
14
|
+
|
|
15
|
+
switch (section) {
|
|
16
|
+
case ModelSectionType:
|
|
17
|
+
case ModelBodySectionType:
|
|
18
|
+
return "model";
|
|
19
|
+
|
|
20
|
+
case RequestSectionType:
|
|
21
|
+
case RequestBodySectionType:
|
|
22
|
+
return "request";
|
|
23
|
+
|
|
24
|
+
case ResponseSectionType:
|
|
25
|
+
case ResponseBodySectionType:
|
|
26
|
+
return "response";
|
|
27
|
+
|
|
28
|
+
case BodySectionType:
|
|
29
|
+
case DanglingBodySectionType:
|
|
30
|
+
return "message-body";
|
|
31
|
+
|
|
32
|
+
case SchemaSectionType:
|
|
33
|
+
case DanglingSchemaSectionType:
|
|
34
|
+
return "message-schema";
|
|
35
|
+
|
|
36
|
+
case HeadersSectionType:
|
|
37
|
+
return "headers";
|
|
38
|
+
|
|
39
|
+
case MSONMixinSectionType:
|
|
40
|
+
return "mixin";
|
|
41
|
+
|
|
42
|
+
case MSONOneOfSectionType:
|
|
43
|
+
return "one of";
|
|
44
|
+
|
|
45
|
+
default:
|
|
46
|
+
return "section";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Section.h
|
|
3
|
+
// snowcrash
|
|
4
|
+
//
|
|
5
|
+
// Created by Zdenek Nemec on 11/1/13.
|
|
6
|
+
// Copyright (c) 2013 Apiary Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#ifndef SNOWCRASH_SECTION_H
|
|
10
|
+
#define SNOWCRASH_SECTION_H
|
|
11
|
+
|
|
12
|
+
#include <string>
|
|
13
|
+
|
|
14
|
+
namespace snowcrash {
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* API Blueprint Sections Types.
|
|
18
|
+
*/
|
|
19
|
+
enum SectionType {
|
|
20
|
+
UndefinedSectionType = 0, /// < Undefined section
|
|
21
|
+
BlueprintSectionType, /// < Blueprint overview
|
|
22
|
+
DataStructureGroupSectionType, /// < Data Structure Group
|
|
23
|
+
ResourceGroupSectionType, /// < Resource group
|
|
24
|
+
ResourceSectionType, /// < Resource
|
|
25
|
+
ActionSectionType, /// < Action
|
|
26
|
+
RelationSectionType, /// < Link Relation
|
|
27
|
+
RequestSectionType, /// < Request
|
|
28
|
+
RequestBodySectionType, /// < Request & Payload body combined (abbrev)
|
|
29
|
+
ResponseSectionType, /// < Response
|
|
30
|
+
ResponseBodySectionType, /// < Response & Body combined (abbrev)
|
|
31
|
+
AttributesSectionType, /// < Attributes
|
|
32
|
+
ModelSectionType, /// < Model
|
|
33
|
+
ModelBodySectionType, /// < Model & Body combined (abbrev)
|
|
34
|
+
BodySectionType, /// < Payload Body
|
|
35
|
+
DanglingBodySectionType, /// < Dangling Body (unrecognised section considered to be Body)
|
|
36
|
+
SchemaSectionType, /// < Payload Schema
|
|
37
|
+
DanglingSchemaSectionType, /// < Dangling Schema (unrecognised section considered to be Schema)
|
|
38
|
+
HeadersSectionType, /// < Headers
|
|
39
|
+
ForeignSectionType, /// < Foreign, unexpected section
|
|
40
|
+
ParametersSectionType, /// < Parameters
|
|
41
|
+
ParameterSectionType, /// < One Parameter definition
|
|
42
|
+
MSONParameterSectionType, /// < One Parameter definition using the MSON syntax
|
|
43
|
+
ValuesSectionType, /// < Value enumeration
|
|
44
|
+
ValueSectionType, /// < One Value
|
|
45
|
+
MSONMixinSectionType, /// < MSON Mixin
|
|
46
|
+
MSONNamedTypeSectionType, /// < MSON Named Type
|
|
47
|
+
MSONOneOfSectionType, /// < MSON One Of
|
|
48
|
+
MSONPropertyMemberSectionType, /// < MSON Property Member Type
|
|
49
|
+
MSONSampleDefaultSectionType, /// < MSON Sample/Default Type Section
|
|
50
|
+
MSONPropertyMembersSectionType, /// < MSON Property Members Type Section
|
|
51
|
+
MSONValueMembersSectionType, /// < MSON Value Members Type Section
|
|
52
|
+
MSONValueMemberSectionType, /// < MSON Value Member Type
|
|
53
|
+
MSONSectionType /// < MSON Property Member or Value Member
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/** \return Human readable name for given %SectionType */
|
|
57
|
+
extern std::string SectionName(const SectionType& section);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#endif
|