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,117 @@
|
|
|
1
|
+
#include "HeadersParser.h"
|
|
2
|
+
|
|
3
|
+
using namespace snowcrash;
|
|
4
|
+
|
|
5
|
+
/** Finds a header in its containment group by its key (first) */
|
|
6
|
+
static HeaderIterator findHeader(const Headers& headers,
|
|
7
|
+
const Header& header) {
|
|
8
|
+
|
|
9
|
+
return std::find_if(headers.begin(),
|
|
10
|
+
headers.end(),
|
|
11
|
+
std::bind2nd(MatchFirsts<Header, IEqual<Header::first_type> >(), header));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
typedef std::vector<std::string> HeadersKeyCollection;
|
|
15
|
+
|
|
16
|
+
/** Get collection of allowed keywords - workarround due to C++98 restriction - static initialization of vector */
|
|
17
|
+
static const HeadersKeyCollection& getAllowedMultipleDefinitions() {
|
|
18
|
+
|
|
19
|
+
static std::string keys[] = {
|
|
20
|
+
HTTPHeaderName::SetCookie,
|
|
21
|
+
HTTPHeaderName::Link,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
static const HeadersKeyCollection allowedMultipleDefinitions(keys, keys + (sizeof(keys)/sizeof(keys[0])));
|
|
25
|
+
|
|
26
|
+
return allowedMultipleDefinitions;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Check if Header name has allowed multiple definitions */
|
|
30
|
+
static bool isAllowedMultipleDefinition(const Header& header) {
|
|
31
|
+
|
|
32
|
+
const HeadersKeyCollection& keys = getAllowedMultipleDefinitions();
|
|
33
|
+
|
|
34
|
+
return std::find_if(keys.begin(),
|
|
35
|
+
keys.end(),
|
|
36
|
+
std::bind1st(MatchFirstWith<Header, std::string, IEqual<std::string> >(), header)) != keys.end();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
static bool isNotValidTokenChar(const std::string::value_type& c) {
|
|
40
|
+
static const std::string validChars("-#$%&'*+.^_`|~");
|
|
41
|
+
|
|
42
|
+
return !(std::isalnum(c) || (validChars.find(c) != std::string::npos));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static std::string::const_iterator findNonValidCharInHeaderName(const std::string& token) {
|
|
46
|
+
|
|
47
|
+
return std::find_if(token.begin(), token.end(), isNotValidTokenChar);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
bool HeaderNameTokenChecker::operator()() const {
|
|
51
|
+
|
|
52
|
+
return findNonValidCharInHeaderName(headerName) == headerName.end();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
std::string HeaderNameTokenChecker::getMessage() const {
|
|
56
|
+
|
|
57
|
+
const char invalidChar = *findNonValidCharInHeaderName(headerName);
|
|
58
|
+
std::stringstream ss;
|
|
59
|
+
ss << "HTTP header name '" << headerName << "' contains illegal character '"
|
|
60
|
+
<< invalidChar << "' (0x" << std::hex << static_cast<int16_t>(invalidChar)
|
|
61
|
+
<< ") skipping the header";
|
|
62
|
+
|
|
63
|
+
return ss.str();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
bool ColonPresentedChecker::operator()() const {
|
|
67
|
+
|
|
68
|
+
return captures[3].size() >= 1 && (captures[3].find(':') != std::string::npos);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
std::string ColonPresentedChecker::getMessage() const {
|
|
72
|
+
|
|
73
|
+
std::stringstream ss;
|
|
74
|
+
ss << "missing colon after header name '" << captures[1] << "'";
|
|
75
|
+
|
|
76
|
+
return ss.str();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
bool HeadersDuplicateChecker::operator()() const {
|
|
80
|
+
|
|
81
|
+
return findHeader(headers, header) == headers.end() ||
|
|
82
|
+
isAllowedMultipleDefinition(header);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
std::string HeadersDuplicateChecker::getMessage() const {
|
|
86
|
+
|
|
87
|
+
std::stringstream ss;
|
|
88
|
+
ss << "duplicate definition of '" << header.first << "' header";
|
|
89
|
+
|
|
90
|
+
return ss.str();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
bool HeaderValuePresentedChecker::operator()() const {
|
|
94
|
+
|
|
95
|
+
return !header.second.empty();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
std::string HeaderValuePresentedChecker::getMessage() const {
|
|
99
|
+
|
|
100
|
+
std::stringstream ss;
|
|
101
|
+
ss << "HTTP header '"<< header.first << "' has no value";
|
|
102
|
+
|
|
103
|
+
return ss.str();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
bool HeaderParserValidator::operator()(const ValidateFunctorBase& rule) {
|
|
107
|
+
bool rc = rule();
|
|
108
|
+
|
|
109
|
+
if(!rc) {
|
|
110
|
+
out.report.warnings.push_back(Warning(rule.getMessage(),
|
|
111
|
+
HTTPWarning,
|
|
112
|
+
sourceMap));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return rc;
|
|
116
|
+
}
|
|
117
|
+
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
//
|
|
2
|
+
// HeaderParser.h
|
|
3
|
+
// snowcrash
|
|
4
|
+
//
|
|
5
|
+
// Created by Zdenek Nemec on 5/22/13.
|
|
6
|
+
// Copyright (c) 2013 Apiary Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#ifndef SNOWCRASH_HEADERPARSER_H
|
|
10
|
+
#define SNOWCRASH_HEADERPARSER_H
|
|
11
|
+
|
|
12
|
+
#include "SectionParser.h"
|
|
13
|
+
#include "RegexMatch.h"
|
|
14
|
+
#include "CodeBlockUtility.h"
|
|
15
|
+
#include "StringUtility.h"
|
|
16
|
+
#include "BlueprintUtility.h"
|
|
17
|
+
#include "RegexMatch.h"
|
|
18
|
+
|
|
19
|
+
#include <string.h>
|
|
20
|
+
|
|
21
|
+
namespace snowcrash {
|
|
22
|
+
|
|
23
|
+
/** Headers matching regex */
|
|
24
|
+
const char* const HeadersRegex = "^[[:blank:]]*[Hh]eaders?[[:blank:]]*$";
|
|
25
|
+
|
|
26
|
+
/** Header Iterator in its containment group */
|
|
27
|
+
typedef Collection<Header>::const_iterator HeaderIterator;
|
|
28
|
+
|
|
29
|
+
/** Base class for functor to check validity of parsed header */
|
|
30
|
+
struct ValidateFunctorBase {
|
|
31
|
+
|
|
32
|
+
/** intended to generate warning mesage */
|
|
33
|
+
virtual std::string getMessage() const = 0;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* intended to invoke validation
|
|
37
|
+
* \return true if validation is ok
|
|
38
|
+
*
|
|
39
|
+
* data for validation you can inject into functor via c-tor
|
|
40
|
+
*/
|
|
41
|
+
virtual bool operator()() const = 0;
|
|
42
|
+
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/** Functor implementation for check header name is valid token according to specification \see http://tools.ietf.org/html/rfc7230#section-3.2.6 */
|
|
46
|
+
struct HeaderNameTokenChecker : public ValidateFunctorBase {
|
|
47
|
+
|
|
48
|
+
const std::string& headerName;
|
|
49
|
+
|
|
50
|
+
explicit HeaderNameTokenChecker(const std::string& headerName) : headerName(headerName) {}
|
|
51
|
+
|
|
52
|
+
virtual bool operator()() const;
|
|
53
|
+
virtual std::string getMessage() const;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/** Functor implementation for check header contains colon character between name and value */
|
|
57
|
+
struct ColonPresentedChecker : public ValidateFunctorBase {
|
|
58
|
+
|
|
59
|
+
const CaptureGroups& captures;
|
|
60
|
+
|
|
61
|
+
explicit ColonPresentedChecker(const CaptureGroups& captures) : captures(captures) {}
|
|
62
|
+
|
|
63
|
+
virtual bool operator()() const;
|
|
64
|
+
virtual std::string getMessage() const;
|
|
65
|
+
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/** Functor implementation to check Headers duplicity */
|
|
69
|
+
struct HeadersDuplicateChecker : public ValidateFunctorBase {
|
|
70
|
+
|
|
71
|
+
const Header& header;
|
|
72
|
+
const Headers& headers;
|
|
73
|
+
|
|
74
|
+
explicit HeadersDuplicateChecker(const Header& header,
|
|
75
|
+
const Headers& headers)
|
|
76
|
+
: header(header), headers(headers) {}
|
|
77
|
+
|
|
78
|
+
virtual bool operator()() const;
|
|
79
|
+
virtual std::string getMessage() const;
|
|
80
|
+
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/** Functor implementation to check Headers duplicity */
|
|
84
|
+
struct HeaderValuePresentedChecker : public ValidateFunctorBase {
|
|
85
|
+
|
|
86
|
+
const Header& header;
|
|
87
|
+
|
|
88
|
+
explicit HeaderValuePresentedChecker(const Header& header)
|
|
89
|
+
: header(header) {}
|
|
90
|
+
|
|
91
|
+
virtual bool operator()() const;
|
|
92
|
+
virtual std::string getMessage() const;
|
|
93
|
+
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/** Functor receive and invoke individual Validators and conditionaly push reports */
|
|
97
|
+
struct HeaderParserValidator {
|
|
98
|
+
|
|
99
|
+
const ParseResultRef<Headers>& out;
|
|
100
|
+
mdp::CharactersRangeSet sourceMap;
|
|
101
|
+
|
|
102
|
+
HeaderParserValidator(const ParseResultRef<Headers>& out,
|
|
103
|
+
mdp::CharactersRangeSet sourceMap)
|
|
104
|
+
: out(out), sourceMap(sourceMap) {}
|
|
105
|
+
|
|
106
|
+
bool operator()(const ValidateFunctorBase& rule);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Headers Section Processor
|
|
112
|
+
*/
|
|
113
|
+
template<>
|
|
114
|
+
struct SectionProcessor<Headers> : public SectionProcessorBase<Headers> {
|
|
115
|
+
|
|
116
|
+
static MarkdownNodeIterator processSignature(const MarkdownNodeIterator& node,
|
|
117
|
+
const MarkdownNodes& siblings,
|
|
118
|
+
SectionParserData& pd,
|
|
119
|
+
SectionLayout& layout,
|
|
120
|
+
const ParseResultRef<Headers>& out) {
|
|
121
|
+
|
|
122
|
+
mdp::ByteBuffer content;
|
|
123
|
+
CodeBlockUtility::signatureContentAsCodeBlock(node, pd, out.report, content);
|
|
124
|
+
|
|
125
|
+
// drop first line (it contain " + Headers")
|
|
126
|
+
// we need just "content"
|
|
127
|
+
mdp::BytesRangeSet::const_iterator begin = node->sourceMap.begin();
|
|
128
|
+
begin++;
|
|
129
|
+
|
|
130
|
+
headersFromContent(node, begin, node->sourceMap.end(), pd, out);
|
|
131
|
+
|
|
132
|
+
return ++MarkdownNodeIterator(node);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
NO_SECTION_DESCRIPTION(Headers)
|
|
136
|
+
|
|
137
|
+
static MarkdownNodeIterator processContent(const MarkdownNodeIterator& node,
|
|
138
|
+
const MarkdownNodes& siblings,
|
|
139
|
+
SectionParserData& pd,
|
|
140
|
+
const ParseResultRef<Headers>& out) {
|
|
141
|
+
|
|
142
|
+
mdp::ByteBuffer content;
|
|
143
|
+
CodeBlockUtility::contentAsCodeBlock(node, pd, out.report, content);
|
|
144
|
+
|
|
145
|
+
headersFromContent(node, node->sourceMap.begin(), node->sourceMap.end(), pd, out);
|
|
146
|
+
|
|
147
|
+
return ++MarkdownNodeIterator(node);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
static bool isContentNode(const MarkdownNodeIterator& node,
|
|
151
|
+
SectionType sectionType) {
|
|
152
|
+
|
|
153
|
+
return (SectionKeywordSignature(node) == UndefinedSectionType);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
static SectionType sectionType(const MarkdownNodeIterator& node) {
|
|
157
|
+
|
|
158
|
+
if (node->type == mdp::ListItemMarkdownNodeType
|
|
159
|
+
&& !node->children().empty()) {
|
|
160
|
+
|
|
161
|
+
mdp::ByteBuffer subject = node->children().front().text;
|
|
162
|
+
mdp::ByteBuffer signature;
|
|
163
|
+
mdp::ByteBuffer remainingContent;
|
|
164
|
+
|
|
165
|
+
signature = GetFirstLine(subject, remainingContent);
|
|
166
|
+
TrimString(signature);
|
|
167
|
+
|
|
168
|
+
if (RegexMatch(signature, HeadersRegex))
|
|
169
|
+
return HeadersSectionType;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return UndefinedSectionType;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
static void finalize(const MarkdownNodeIterator& node,
|
|
176
|
+
SectionParserData& pd,
|
|
177
|
+
const ParseResultRef<Headers>& out) {
|
|
178
|
+
|
|
179
|
+
if (out.node.empty()) {
|
|
180
|
+
|
|
181
|
+
// WARN: No valid headers defined
|
|
182
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceCharacterIndex);
|
|
183
|
+
out.report.warnings.push_back(Warning("no valid headers specified",
|
|
184
|
+
FormattingWarning,
|
|
185
|
+
sourceMap));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Parse individual line of header
|
|
191
|
+
* \return true if valid header definition
|
|
192
|
+
*
|
|
193
|
+
* Header name is checked against token definition
|
|
194
|
+
*
|
|
195
|
+
* \param line - contains individual line with header definition
|
|
196
|
+
* \param header - is filled by name and value if definition is valid
|
|
197
|
+
* \param out - "report" member can receive warning while checking validity
|
|
198
|
+
* \param sourceMap - just contain source mapping for warning report
|
|
199
|
+
*/
|
|
200
|
+
static bool parseHeaderLine(const mdp::ByteBuffer& line,
|
|
201
|
+
Header& header,
|
|
202
|
+
const ParseResultRef<Headers>& out,
|
|
203
|
+
const mdp::CharactersRangeSet sourceMap) {
|
|
204
|
+
|
|
205
|
+
std::string re = "^ *([^:[:blank:]]+)(( *:? *)(.*)?)$";
|
|
206
|
+
|
|
207
|
+
CaptureGroups parts;
|
|
208
|
+
bool matched = RegexCapture(line, re, parts, 5);
|
|
209
|
+
|
|
210
|
+
if (!matched) {
|
|
211
|
+
// WARN: unable to parse header
|
|
212
|
+
out.report.warnings.push_back(
|
|
213
|
+
Warning("unable to parse HTTP header, expected '<header name> : <header value>', one header per line", FormattingWarning, sourceMap));
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
header = std::make_pair(parts[1], parts[4]);
|
|
218
|
+
TrimString(header.second);
|
|
219
|
+
|
|
220
|
+
HeaderParserValidator validate(out, sourceMap);
|
|
221
|
+
|
|
222
|
+
if (!validate(HeaderNameTokenChecker(header.first))) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
validate(ColonPresentedChecker(parts));
|
|
227
|
+
validate(HeadersDuplicateChecker(header, out.node));
|
|
228
|
+
validate(HeaderValuePresentedChecker(header));
|
|
229
|
+
|
|
230
|
+
return !header.first.empty();
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
static bool fetchLine(const std::string& input,
|
|
234
|
+
mdp::BytesRange& map,
|
|
235
|
+
std::string& line) {
|
|
236
|
+
|
|
237
|
+
if (input.length() < (map.location + map.length)) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
TrimRange trim = GetTrimInfo(input.begin() + map.location, input.begin() + map.location + map.length);
|
|
242
|
+
|
|
243
|
+
map.length = std::get<1>(trim);
|
|
244
|
+
|
|
245
|
+
if (map.length <= 0) {
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
map.location += std::get<0>(trim);
|
|
250
|
+
|
|
251
|
+
line = input.substr(map.location, map.length);
|
|
252
|
+
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
static bool isCodeFence(const std::string& line) {
|
|
257
|
+
return (!memcmp(line.c_str(), "```", 3) || !memcmp(line.c_str(), "~~~", 3));
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** Retrieve headers from content */
|
|
261
|
+
static void headersFromContent(const MarkdownNodeIterator& node,
|
|
262
|
+
mdp::BytesRangeSet::const_iterator from,
|
|
263
|
+
mdp::BytesRangeSet::const_iterator to,
|
|
264
|
+
const SectionParserData& pd,
|
|
265
|
+
const ParseResultRef<Headers>& out) {
|
|
266
|
+
|
|
267
|
+
bool inCodeFence = false;
|
|
268
|
+
|
|
269
|
+
for (mdp::BytesRangeSet::const_iterator it = from ; it != to ; it++) {
|
|
270
|
+
|
|
271
|
+
mdp::BytesRange map(*it);
|
|
272
|
+
std::string line;
|
|
273
|
+
|
|
274
|
+
if (!fetchLine(pd.sourceData, map, line)) {
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
if (it == from) {
|
|
279
|
+
inCodeFence = isCodeFence(line);
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
if (inCodeFence && isCodeFence(line)) {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
Header header;
|
|
287
|
+
|
|
288
|
+
mdp::BytesRangeSet byteMap;
|
|
289
|
+
byteMap.push_back(map);
|
|
290
|
+
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(byteMap, pd.sourceCharacterIndex);
|
|
291
|
+
|
|
292
|
+
if (parseHeaderLine(line, header, out, sourceMap)) {
|
|
293
|
+
out.node.push_back(header);
|
|
294
|
+
|
|
295
|
+
if (pd.exportSourceMap()) {
|
|
296
|
+
SourceMap<Header> headerSM;
|
|
297
|
+
headerSM.sourceMap = sourceMap;
|
|
298
|
+
out.sourceMap.collection.push_back(headerSM);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/** Inject headers into transaction examples requests and responses */
|
|
306
|
+
static void injectDeprecatedHeaders(SectionParserData& pd,
|
|
307
|
+
const Headers& headers,
|
|
308
|
+
const SourceMap<Headers>& headersSM,
|
|
309
|
+
TransactionExamples& examples,
|
|
310
|
+
SourceMap<TransactionExamples>& examplesSM) {
|
|
311
|
+
|
|
312
|
+
Collection<TransactionExample>::iterator exampleIt = examples.begin();
|
|
313
|
+
Collection<SourceMap<TransactionExample> >::iterator exampleSourceMapIt;
|
|
314
|
+
|
|
315
|
+
if (pd.exportSourceMap()) {
|
|
316
|
+
exampleSourceMapIt = examplesSM.collection.begin();
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
while (exampleIt != examples.end()) {
|
|
320
|
+
|
|
321
|
+
Collection<Request>::iterator requestIt = exampleIt->requests.begin();
|
|
322
|
+
Collection<SourceMap<Request> >::iterator requestSourceMapIt;
|
|
323
|
+
|
|
324
|
+
if (pd.exportSourceMap()) {
|
|
325
|
+
requestSourceMapIt = exampleSourceMapIt->requests.collection.begin();
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Requests
|
|
329
|
+
while (requestIt != exampleIt->requests.end()) {
|
|
330
|
+
|
|
331
|
+
requestIt->headers.insert(requestIt->headers.begin(), headers.begin(), headers.end());
|
|
332
|
+
++requestIt;
|
|
333
|
+
|
|
334
|
+
if (pd.exportSourceMap()) {
|
|
335
|
+
requestSourceMapIt->headers.collection.insert(requestSourceMapIt->headers.collection.begin(),
|
|
336
|
+
headersSM.collection.begin(),
|
|
337
|
+
headersSM.collection.end());
|
|
338
|
+
++requestSourceMapIt;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
Collection<Response>::iterator responseIt = exampleIt->responses.begin();
|
|
343
|
+
Collection<SourceMap<Response> >::iterator responseSourceMapIt;
|
|
344
|
+
|
|
345
|
+
if (pd.exportSourceMap()) {
|
|
346
|
+
responseSourceMapIt = exampleSourceMapIt->responses.collection.begin();
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Responses
|
|
350
|
+
while(responseIt != exampleIt->responses.end()) {
|
|
351
|
+
|
|
352
|
+
responseIt->headers.insert(responseIt->headers.begin(), headers.begin(), headers.end());
|
|
353
|
+
++responseIt;
|
|
354
|
+
|
|
355
|
+
if (pd.exportSourceMap()) {
|
|
356
|
+
responseSourceMapIt->headers.collection.insert(responseSourceMapIt->headers.collection.begin(),
|
|
357
|
+
headersSM.collection.begin(),
|
|
358
|
+
headersSM.collection.end());
|
|
359
|
+
++responseSourceMapIt;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
++exampleIt;
|
|
364
|
+
|
|
365
|
+
if (pd.exportSourceMap()) {
|
|
366
|
+
++exampleSourceMapIt;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
};
|
|
372
|
+
|
|
373
|
+
/** Headers Section Parser */
|
|
374
|
+
typedef SectionParser<Headers, ListSectionAdapter> HeadersParser;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
#endif
|