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