redsnow 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -1
- data/README.md +12 -0
- data/ext/snowcrash/bin/snowcrash +0 -0
- data/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.c +5 -2
- data/ext/snowcrash/snowcrash.gyp +7 -2
- data/ext/snowcrash/src/ActionParser.h +141 -81
- data/ext/snowcrash/src/AssetParser.h +19 -11
- data/ext/snowcrash/src/Blueprint.h +44 -14
- data/ext/snowcrash/src/BlueprintParser.h +65 -51
- data/ext/snowcrash/src/BlueprintSourcemap.h +254 -0
- data/ext/snowcrash/src/BlueprintUtility.h +3 -24
- data/ext/snowcrash/src/CBlueprint.cc +40 -31
- data/ext/snowcrash/src/CBlueprint.h +54 -58
- data/ext/snowcrash/src/CBlueprintSourcemap.cc +620 -0
- data/ext/snowcrash/src/CBlueprintSourcemap.h +342 -0
- data/ext/snowcrash/src/CSourceAnnotation.cc +14 -0
- data/ext/snowcrash/src/CodeBlockUtility.h +42 -5
- data/ext/snowcrash/src/HeadersParser.h +84 -42
- data/ext/snowcrash/src/ParameterParser.h +110 -68
- data/ext/snowcrash/src/ParametersParser.h +26 -28
- data/ext/snowcrash/src/PayloadParser.h +164 -83
- data/ext/snowcrash/src/ResourceGroupParser.h +35 -41
- data/ext/snowcrash/src/ResourceParser.h +142 -97
- data/ext/snowcrash/src/SectionParser.h +15 -14
- data/ext/snowcrash/src/SectionParserData.h +11 -2
- data/ext/snowcrash/src/SectionProcessor.h +42 -18
- data/ext/snowcrash/src/Serialize.cc +2 -0
- data/ext/snowcrash/src/Serialize.h +3 -1
- data/ext/snowcrash/src/SerializeJSON.cc +608 -16
- data/ext/snowcrash/src/SerializeJSON.h +4 -1
- data/ext/snowcrash/src/SerializeYAML.cc +367 -19
- data/ext/snowcrash/src/SerializeYAML.h +4 -1
- data/ext/snowcrash/src/SymbolTable.h +12 -1
- data/ext/snowcrash/src/ValuesParser.h +12 -11
- data/ext/snowcrash/src/Version.h +1 -1
- data/ext/snowcrash/src/csnowcrash.cc +7 -3
- data/ext/snowcrash/src/csnowcrash.h +4 -2
- data/ext/snowcrash/src/snowcrash.cc +10 -11
- data/ext/snowcrash/src/snowcrash.h +3 -3
- data/ext/snowcrash/src/snowcrash/snowcrash.cc +38 -8
- data/ext/snowcrash/tools/homebrew/snowcrash.rb +1 -1
- data/lib/redsnow.rb +41 -2
- data/lib/redsnow/binding.rb +93 -8
- data/lib/redsnow/blueprint.rb +48 -25
- data/lib/redsnow/parseresult.rb +9 -2
- data/lib/redsnow/sourcemap.rb +369 -0
- data/lib/redsnow/version.rb +1 -1
- data/test/fixtures/sample-api-ast.json +1 -1
- data/test/fixtures/sample-api-sourcemap.json +169 -0
- data/test/redsnow_binding_test.rb +19 -2
- data/test/redsnow_options_test.rb +42 -0
- data/test/redsnow_parseresult_test.rb +5 -1
- data/test/redsnow_test.rb +5 -0
- metadata +11 -2
@@ -10,12 +10,15 @@
|
|
10
10
|
#define SNOWCRASH_SERIALIZE_YAML_H
|
11
11
|
|
12
12
|
#include <ostream>
|
13
|
-
#include "
|
13
|
+
#include "BlueprintSourcemap.h"
|
14
14
|
|
15
15
|
namespace snowcrash {
|
16
16
|
|
17
17
|
// Naive YAML serialization to ostream
|
18
18
|
void SerializeYAML(const snowcrash::Blueprint& blueprint, std::ostream &os);
|
19
|
+
|
20
|
+
// Naive Sourcmap YAML serialization to ostream
|
21
|
+
void SerializeSourceMapYAML(const snowcrash::SourceMap<snowcrash::Blueprint>& blueprint, std::ostream &os);
|
19
22
|
}
|
20
23
|
|
21
24
|
#endif
|
@@ -19,7 +19,7 @@
|
|
19
19
|
#include "Serialize.h"
|
20
20
|
#endif
|
21
21
|
|
22
|
-
#include "
|
22
|
+
#include "BlueprintSourcemap.h"
|
23
23
|
#include "StringUtility.h"
|
24
24
|
|
25
25
|
// Symbol identifier regex
|
@@ -36,15 +36,26 @@ namespace snowcrash {
|
|
36
36
|
// Resource Object Symbol
|
37
37
|
typedef std::pair<SymbolName, ResourceModel> ResourceModelSymbol;
|
38
38
|
|
39
|
+
// Resource Object Symbol source map
|
40
|
+
typedef std::pair<SymbolName, SourceMap<ResourceModel> > ResourceModelSymbolSourceMap;
|
41
|
+
|
39
42
|
// Resource Object Symbol Table
|
40
43
|
typedef std::map<SymbolName, ResourceModel> ResourceModelSymbolTable;
|
41
44
|
|
45
|
+
// Reesource Object Symbol Table source map
|
46
|
+
typedef std::map<SymbolName, SourceMap<ResourceModel> > ResourceModelSymbolSourceMapTable;
|
47
|
+
|
42
48
|
struct SymbolTable {
|
43
49
|
|
44
50
|
// Resource Object Symbol Table
|
45
51
|
ResourceModelSymbolTable resourceModels;
|
46
52
|
};
|
47
53
|
|
54
|
+
struct SymbolSourceMapTable {
|
55
|
+
|
56
|
+
// Resource Object Symbol Table source map
|
57
|
+
ResourceModelSymbolSourceMapTable resourceModels;
|
58
|
+
};
|
48
59
|
|
49
60
|
// Checks whether given source data represents reference to a symbol returning true if so,
|
50
61
|
// false otherwise. If source data is represent reference referred symbol name is filled in.
|
@@ -18,9 +18,6 @@
|
|
18
18
|
|
19
19
|
namespace snowcrash {
|
20
20
|
|
21
|
-
/** Parameter Values */
|
22
|
-
typedef Collection<Value>::type Values; // TODO: Move this into core later
|
23
|
-
|
24
21
|
/** Parameter Values matching regex */
|
25
22
|
const char* const ValuesRegex = "^[[:blank:]]*[Vv]alues[[:blank:]]*$";
|
26
23
|
|
@@ -33,8 +30,7 @@ namespace snowcrash {
|
|
33
30
|
static MarkdownNodeIterator processNestedSection(const MarkdownNodeIterator& node,
|
34
31
|
const MarkdownNodes& siblings,
|
35
32
|
SectionParserData& pd,
|
36
|
-
|
37
|
-
Values& out) {
|
33
|
+
ParseResult<Values>& out) {
|
38
34
|
|
39
35
|
if (pd.sectionContext() == ValueSectionType) {
|
40
36
|
|
@@ -44,7 +40,13 @@ namespace snowcrash {
|
|
44
40
|
RegexCapture(content, PARAMETER_VALUE, captureGroups);
|
45
41
|
|
46
42
|
if (captureGroups.size() > 1) {
|
47
|
-
out.push_back(captureGroups[1]);
|
43
|
+
out.node.push_back(captureGroups[1]);
|
44
|
+
|
45
|
+
if (pd.exportSourceMap()) {
|
46
|
+
SourceMap<Value> valueSM;
|
47
|
+
valueSM.sourceMap = node->sourceMap;
|
48
|
+
out.sourceMap.collection.push_back(valueSM);
|
49
|
+
}
|
48
50
|
} else {
|
49
51
|
TrimString(content);
|
50
52
|
|
@@ -54,9 +56,9 @@ namespace snowcrash {
|
|
54
56
|
ss << ", expected '`" << content << "`'";
|
55
57
|
|
56
58
|
mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
|
57
|
-
report.warnings.push_back(Warning(ss.str(),
|
58
|
-
|
59
|
-
|
59
|
+
out.report.warnings.push_back(Warning(ss.str(),
|
60
|
+
IgnoringWarning,
|
61
|
+
sourceMap));
|
60
62
|
}
|
61
63
|
|
62
64
|
return ++MarkdownNodeIterator(node);
|
@@ -68,8 +70,7 @@ namespace snowcrash {
|
|
68
70
|
static MarkdownNodeIterator processDescription(const MarkdownNodeIterator& node,
|
69
71
|
const MarkdownNodes& siblings,
|
70
72
|
SectionParserData& pd,
|
71
|
-
|
72
|
-
Values& out) {
|
73
|
+
ParseResult<Values>& out) {
|
73
74
|
|
74
75
|
return node;
|
75
76
|
}
|
data/ext/snowcrash/src/Version.h
CHANGED
@@ -9,15 +9,19 @@
|
|
9
9
|
#include "csnowcrash.h"
|
10
10
|
#include "snowcrash.h"
|
11
11
|
|
12
|
-
int sc_c_parse(const char* source, sc_blueprint_parser_options option, sc_report_t** report, sc_blueprint_t** blueprint)
|
12
|
+
int sc_c_parse(const char* source, sc_blueprint_parser_options option, sc_report_t** report, sc_blueprint_t** blueprint, sc_sm_blueprint_t** sm_blueprint)
|
13
13
|
{
|
14
14
|
snowcrash::Report* t_report = ::new snowcrash::Report;
|
15
15
|
snowcrash::Blueprint* t_blueprint = ::new snowcrash::Blueprint;
|
16
|
+
snowcrash::SourceMap<snowcrash::Blueprint>* t_sm_blueprint = ::new snowcrash::SourceMap<snowcrash::Blueprint>;
|
16
17
|
|
17
|
-
|
18
|
+
snowcrash::ParseResult<snowcrash::Blueprint>* t_parse_result = ::new snowcrash::ParseResult<snowcrash::Blueprint>(*t_report, *t_blueprint, *t_sm_blueprint);
|
19
|
+
|
20
|
+
int ret = snowcrash::parse(source, option, *t_parse_result);
|
18
21
|
|
19
|
-
*blueprint = AS_TYPE(sc_blueprint_t, t_blueprint);
|
20
22
|
*report = AS_TYPE(sc_report_t, t_report);
|
23
|
+
*blueprint = AS_TYPE(sc_blueprint_t, t_blueprint);
|
24
|
+
*sm_blueprint = AS_TYPE(sc_sm_blueprint_t, t_sm_blueprint);
|
21
25
|
|
22
26
|
return ret;
|
23
27
|
}
|
@@ -12,6 +12,7 @@
|
|
12
12
|
|
13
13
|
#include "CSourceAnnotation.h"
|
14
14
|
#include "CBlueprint.h"
|
15
|
+
#include "CBlueprintSourcemap.h"
|
15
16
|
|
16
17
|
#ifdef __cplusplus
|
17
18
|
extern "C" {
|
@@ -27,9 +28,10 @@ extern "C" {
|
|
27
28
|
*
|
28
29
|
* \return Error status code. Zero represents success, non-zero a failure.
|
29
30
|
*
|
30
|
-
*
|
31
|
+
* this function will allocate `report` and `blueprint`, `sm_blueprint`,
|
32
|
+
* for deallocation `sc_blueprint_free`, `sc_sm_blueprint_free` and `sc_report_free` should be called.
|
31
33
|
*/
|
32
|
-
SC_API int sc_c_parse(const char* source, sc_blueprint_parser_options option, sc_report_t** report, sc_blueprint_t** blueprint);
|
34
|
+
SC_API int sc_c_parse(const char* source, sc_blueprint_parser_options option, sc_report_t** report, sc_blueprint_t** blueprint, sc_sm_blueprint_t** sm_blueprint);
|
33
35
|
|
34
36
|
#ifdef __cplusplus
|
35
37
|
}
|
@@ -7,7 +7,6 @@
|
|
7
7
|
//
|
8
8
|
|
9
9
|
#include "snowcrash.h"
|
10
|
-
#include "MarkdownParser.h"
|
11
10
|
#include "BlueprintParser.h"
|
12
11
|
|
13
12
|
const int snowcrash::SourceAnnotation::OK = 0;
|
@@ -20,6 +19,7 @@ using namespace snowcrash;
|
|
20
19
|
*/
|
21
20
|
static bool CheckSource(const mdp::ByteBuffer& source, Report& report)
|
22
21
|
{
|
22
|
+
|
23
23
|
std::string::size_type pos = source.find("\t");
|
24
24
|
|
25
25
|
if (pos != std::string::npos) {
|
@@ -49,18 +49,17 @@ static bool CheckSource(const mdp::ByteBuffer& source, Report& report)
|
|
49
49
|
|
50
50
|
int snowcrash::parse(const mdp::ByteBuffer& source,
|
51
51
|
BlueprintParserOptions options,
|
52
|
-
|
53
|
-
Blueprint& blueprint)
|
52
|
+
ParseResult<Blueprint>& out)
|
54
53
|
{
|
55
54
|
try {
|
56
55
|
|
57
56
|
// Sanity Check
|
58
|
-
if (!CheckSource(source, report))
|
59
|
-
return report.error.code;
|
57
|
+
if (!CheckSource(source, out.report))
|
58
|
+
return out.report.error.code;
|
60
59
|
|
61
60
|
// Do nothing if blueprint is empty
|
62
61
|
if (source.empty())
|
63
|
-
return report.error.code;
|
62
|
+
return out.report.error.code;
|
64
63
|
|
65
64
|
// Parse Markdown
|
66
65
|
mdp::MarkdownParser markdownParser;
|
@@ -68,21 +67,21 @@ int snowcrash::parse(const mdp::ByteBuffer& source,
|
|
68
67
|
markdownParser.parse(source, markdownAST);
|
69
68
|
|
70
69
|
// Build SectionParserData
|
71
|
-
SectionParserData pd(options, source,
|
70
|
+
SectionParserData pd(options, source, out.node);
|
72
71
|
|
73
72
|
// Parse Blueprint
|
74
|
-
BlueprintParser::parse(markdownAST.children().begin(), markdownAST.children(), pd,
|
73
|
+
BlueprintParser::parse(markdownAST.children().begin(), markdownAST.children(), pd, out);
|
75
74
|
}
|
76
75
|
catch (const std::exception& e) {
|
77
76
|
|
78
77
|
std::stringstream ss;
|
79
78
|
ss << "parser exception: '" << e.what() << "'";
|
80
|
-
report.error = Error(ss.str(), 1);
|
79
|
+
out.report.error = Error(ss.str(), 1);
|
81
80
|
}
|
82
81
|
catch (...) {
|
83
82
|
|
84
|
-
report.error = Error("parser exception has occured", 1);
|
83
|
+
out.report.error = Error("parser exception has occured", 1);
|
85
84
|
}
|
86
85
|
|
87
|
-
return report.error.code;
|
86
|
+
return out.report.error.code;
|
88
87
|
}
|
@@ -9,7 +9,7 @@
|
|
9
9
|
#ifndef SNOWCRASH_H
|
10
10
|
#define SNOWCRASH_H
|
11
11
|
|
12
|
-
#include "
|
12
|
+
#include "BlueprintSourcemap.h"
|
13
13
|
#include "SourceAnnotation.h"
|
14
14
|
#include "SectionParser.h"
|
15
15
|
|
@@ -35,12 +35,12 @@ namespace snowcrash {
|
|
35
35
|
* \param options Parser options. Use 0 for no additional options.
|
36
36
|
* \param report Parsing report.
|
37
37
|
* \param blueprint Parsed blueprint AST.
|
38
|
+
* \param blueprintSM Blueprint sourcemap AST
|
38
39
|
* \return Error status code. Zero represents success, non-zero a failure.
|
39
40
|
*/
|
40
41
|
int parse(const mdp::ByteBuffer& source,
|
41
42
|
BlueprintParserOptions options,
|
42
|
-
|
43
|
-
Blueprint& blueprint);
|
43
|
+
ParseResult<Blueprint>& out);
|
44
44
|
}
|
45
45
|
|
46
46
|
#endif
|
@@ -21,6 +21,7 @@ using snowcrash::Error;
|
|
21
21
|
static const std::string OutputArgument = "output";
|
22
22
|
static const std::string FormatArgument = "format";
|
23
23
|
static const std::string RenderArgument = "render";
|
24
|
+
static const std::string SourcemapArgument = "sourcemap";
|
24
25
|
static const std::string ValidateArgument = "validate";
|
25
26
|
static const std::string VersionArgument = "version";
|
26
27
|
|
@@ -81,13 +82,16 @@ int main(int argc, const char *argv[])
|
|
81
82
|
|
82
83
|
argumentParser.set_program_name("snowcrash");
|
83
84
|
std::stringstream ss;
|
85
|
+
|
84
86
|
ss << "<input file>\n\n";
|
85
87
|
ss << "API Blueprint Parser\n";
|
86
88
|
ss << "If called without <input file>, 'snowcrash' will listen on stdin.\n";
|
89
|
+
|
87
90
|
argumentParser.footer(ss.str());
|
88
91
|
|
89
92
|
argumentParser.add<std::string>(OutputArgument, 'o', "save output AST into file", false);
|
90
93
|
argumentParser.add<std::string>(FormatArgument, 'f', "output AST format", false, "yaml", cmdline::oneof<std::string>("yaml", "json"));
|
94
|
+
argumentParser.add<std::string>(SourcemapArgument, 's', "export sourcemap AST into file", false);
|
91
95
|
// TODO: argumentParser.add("render", 'r', "render markdown descriptions");
|
92
96
|
argumentParser.add("help", 'h', "display this help message");
|
93
97
|
argumentParser.add(VersionArgument, 'v', "print Snow Crash version");
|
@@ -118,6 +122,7 @@ int main(int argc, const char *argv[])
|
|
118
122
|
std::ifstream inputFileStream;
|
119
123
|
std::string inputFileName = argumentParser.rest().front();
|
120
124
|
inputFileStream.open(inputFileName.c_str());
|
125
|
+
|
121
126
|
if (!inputFileStream.is_open()) {
|
122
127
|
std::cerr << "fatal: unable to open input file '" << inputFileName << "'\n";
|
123
128
|
exit(EXIT_FAILURE);
|
@@ -127,29 +132,40 @@ int main(int argc, const char *argv[])
|
|
127
132
|
inputFileStream.close();
|
128
133
|
}
|
129
134
|
|
130
|
-
//
|
135
|
+
// Initialize
|
131
136
|
snowcrash::BlueprintParserOptions options = 0; // Or snowcrash::RequireBlueprintNameOption
|
132
|
-
snowcrash::
|
133
|
-
|
134
|
-
|
137
|
+
snowcrash::ParseResult<snowcrash::Blueprint> blueprint;
|
138
|
+
|
139
|
+
if (argumentParser.exist(SourcemapArgument)) {
|
140
|
+
options |= snowcrash::ExportSourcemapOption;
|
141
|
+
}
|
142
|
+
|
143
|
+
// Parse
|
144
|
+
snowcrash::parse(inputStream.str(), options, blueprint);
|
135
145
|
|
136
146
|
// Output
|
137
147
|
if (!argumentParser.exist(ValidateArgument)) {
|
138
148
|
|
139
149
|
std::stringstream outputStream;
|
150
|
+
std::stringstream sourcemapOutputStream;
|
140
151
|
|
141
152
|
if (argumentParser.get<std::string>(FormatArgument) == "json") {
|
142
|
-
SerializeJSON(blueprint, outputStream);
|
153
|
+
SerializeJSON(blueprint.node, outputStream);
|
154
|
+
SerializeSourceMapJSON(blueprint.sourceMap, sourcemapOutputStream);
|
143
155
|
}
|
144
156
|
else if (argumentParser.get<std::string>(FormatArgument) == "yaml") {
|
145
|
-
SerializeYAML(blueprint, outputStream);
|
157
|
+
SerializeYAML(blueprint.node, outputStream);
|
158
|
+
SerializeSourceMapYAML(blueprint.sourceMap, sourcemapOutputStream);
|
146
159
|
}
|
147
160
|
|
148
161
|
std::string outputFileName = argumentParser.get<std::string>(OutputArgument);
|
162
|
+
std::string sourcemapOutputFileName = argumentParser.get<std::string>(SourcemapArgument);
|
163
|
+
|
149
164
|
if (!outputFileName.empty()) {
|
150
165
|
// Serialize to file
|
151
166
|
std::ofstream outputFileStream;
|
152
167
|
outputFileStream.open(outputFileName.c_str());
|
168
|
+
|
153
169
|
if (!outputFileStream.is_open()) {
|
154
170
|
std::cerr << "fatal: unable to write to file '" << outputFileName << "'\n";
|
155
171
|
exit(EXIT_FAILURE);
|
@@ -162,9 +178,23 @@ int main(int argc, const char *argv[])
|
|
162
178
|
// Serialize to stdout
|
163
179
|
std::cout << outputStream.rdbuf();
|
164
180
|
}
|
181
|
+
|
182
|
+
if (!sourcemapOutputFileName.empty()) {
|
183
|
+
// Serialize to file
|
184
|
+
std::ofstream sourcemapOutputFileStream;
|
185
|
+
sourcemapOutputFileStream.open(sourcemapOutputFileName.c_str());
|
186
|
+
|
187
|
+
if (!sourcemapOutputFileStream.is_open()) {
|
188
|
+
std::cerr << "fatal: unable to write to file '" << sourcemapOutputFileName << "'\n";
|
189
|
+
exit(EXIT_FAILURE);
|
190
|
+
}
|
191
|
+
|
192
|
+
sourcemapOutputFileStream << sourcemapOutputStream.rdbuf();
|
193
|
+
sourcemapOutputFileStream.close();
|
194
|
+
}
|
165
195
|
}
|
166
196
|
|
167
197
|
// report
|
168
|
-
PrintReport(report);
|
169
|
-
return report.error.code;
|
198
|
+
PrintReport(blueprint.report);
|
199
|
+
return blueprint.report.error.code;
|
170
200
|
}
|
data/lib/redsnow.rb
CHANGED
@@ -1,11 +1,41 @@
|
|
1
1
|
require "redsnow/version"
|
2
2
|
require "redsnow/binding"
|
3
3
|
require "redsnow/blueprint"
|
4
|
+
require "redsnow/sourcemap"
|
4
5
|
require "redsnow/parseresult"
|
5
6
|
require "ffi"
|
6
7
|
|
7
8
|
module RedSnow
|
8
9
|
include Binding
|
10
|
+
|
11
|
+
# Options
|
12
|
+
EXPORT_SOURCEMAP_OPTION_KEY = :'exportSourcemap'
|
13
|
+
REQUIRE_BLUEPRINT_NAME_OPTION_KEY = :'requireBlueprintName'
|
14
|
+
|
15
|
+
# Parse options
|
16
|
+
attr_accessor :options
|
17
|
+
def self.parse_options(options)
|
18
|
+
# Parse Options
|
19
|
+
unless options.is_a?(Numeric)
|
20
|
+
opt = 0
|
21
|
+
if options.has_key?(REQUIRE_BLUEPRINT_NAME_OPTION_KEY)
|
22
|
+
if options[REQUIRE_BLUEPRINT_NAME_OPTION_KEY] === true
|
23
|
+
opt = opt | (1 << 1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if options.has_key?(EXPORT_SOURCEMAP_OPTION_KEY)
|
28
|
+
if options[EXPORT_SOURCEMAP_OPTION_KEY] === true
|
29
|
+
opt = opt | (1 << 2)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
return opt
|
34
|
+
else
|
35
|
+
return options
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
9
39
|
# parse
|
10
40
|
# parsing API Blueprint into Ruby objects
|
11
41
|
# @param rawBlueprint [String] API Blueprint
|
@@ -13,17 +43,26 @@ module RedSnow
|
|
13
43
|
#
|
14
44
|
# @return [ParseResult]
|
15
45
|
def self.parse(rawBlueprint, options = 0)
|
46
|
+
|
47
|
+
raise ArgumentError.new("Expected string value") unless rawBlueprint.is_a?(String)
|
48
|
+
|
49
|
+
blueprintOptions = self.parse_options(options)
|
50
|
+
|
16
51
|
blueprint = FFI::MemoryPointer.new :pointer
|
52
|
+
sourcemap = FFI::MemoryPointer.new :pointer
|
17
53
|
report = FFI::MemoryPointer.new :pointer
|
18
|
-
|
54
|
+
|
55
|
+
RedSnow::Binding.sc_c_parse(rawBlueprint, blueprintOptions, report, blueprint, sourcemap)
|
19
56
|
|
20
57
|
blueprint = blueprint.get_pointer(0)
|
58
|
+
sourcemap = sourcemap.get_pointer(0)
|
21
59
|
report = report.get_pointer(0)
|
22
60
|
|
23
|
-
parseResult = ParseResult.new(blueprint,
|
61
|
+
parseResult = ParseResult.new(report, blueprint, sourcemap)
|
24
62
|
|
25
63
|
return parseResult
|
26
64
|
ensure
|
65
|
+
RedSnow::Binding.sc_sm_blueprint_free(sourcemap)
|
27
66
|
RedSnow::Binding.sc_blueprint_free(blueprint)
|
28
67
|
RedSnow::Binding.sc_report_free(report)
|
29
68
|
end
|
data/lib/redsnow/binding.rb
CHANGED
@@ -16,10 +16,11 @@ module RedSnow
|
|
16
16
|
# @see https://github.com/apiaryio/snowcrash/blob/master/src/BlueprintParserCore.h#L31
|
17
17
|
enum :option, [
|
18
18
|
:render_descriptions_option,
|
19
|
-
:require_blueprint_name_option
|
19
|
+
:require_blueprint_name_option,
|
20
|
+
:export_sourcemap_option
|
20
21
|
]
|
21
22
|
|
22
|
-
attach_function("sc_c_parse", "sc_c_parse", [ :string, :option, :pointer, :pointer ], :int)
|
23
|
+
attach_function("sc_c_parse", "sc_c_parse", [ :string, :option, :pointer, :pointer, :pointer ], :int)
|
23
24
|
|
24
25
|
attach_function("sc_blueprint_free", "sc_blueprint_free", [ :pointer ], :void)
|
25
26
|
attach_function("sc_blueprint_name", "sc_blueprint_name", [ :pointer ], :string)
|
@@ -32,12 +33,12 @@ module RedSnow
|
|
32
33
|
attach_function("sc_metadata_key", "sc_metadata_key", [ :pointer ], :string)
|
33
34
|
attach_function("sc_metadata_value", "sc_metadata_value",[ :pointer ], :string)
|
34
35
|
|
35
|
-
attach_function("
|
36
|
-
attach_function("
|
36
|
+
attach_function("sc_resource_group_collection_handle", "sc_resource_group_collection_handle", [ :pointer ], :pointer)
|
37
|
+
attach_function("sc_resource_group_collection_size", "sc_resource_group_collection_size", [ :pointer ], :int)
|
37
38
|
|
38
|
-
attach_function("
|
39
|
-
attach_function("
|
40
|
-
attach_function("
|
39
|
+
attach_function("sc_resource_group_handle", "sc_resource_group_handle", [ :pointer, :int ], :pointer)
|
40
|
+
attach_function("sc_resource_group_name", "sc_resource_group_name", [ :pointer ], :string)
|
41
|
+
attach_function("sc_resource_group_description", "sc_resource_group_description", [ :pointer ], :string)
|
41
42
|
|
42
43
|
attach_function("sc_resource_collection_handle", "sc_resource_collection_handle", [ :pointer ] , :pointer)
|
43
44
|
attach_function("sc_resource_collection_size", "sc_resource_collection_size", [ :pointer ], :int)
|
@@ -54,6 +55,7 @@ module RedSnow
|
|
54
55
|
attach_function("sc_payload_handle", "sc_payload_handle", [ :pointer, :int ], :pointer)
|
55
56
|
attach_function("sc_payload_handle_resource", "sc_payload_handle_resource", [ :pointer ], :pointer)
|
56
57
|
attach_function("sc_payload_name", "sc_payload_name", [ :pointer ], :string)
|
58
|
+
attach_function("sc_payload_symbol", "sc_payload_symbol", [ :pointer ], :string)
|
57
59
|
attach_function("sc_payload_description", "sc_payload_description", [ :pointer ], :string)
|
58
60
|
attach_function("sc_payload_body", "sc_payload_body", [ :pointer ], :string)
|
59
61
|
attach_function("sc_payload_schema", "sc_payload_schema", [ :pointer ], :string)
|
@@ -81,7 +83,7 @@ module RedSnow
|
|
81
83
|
attach_function("sc_value_collection_size", "sc_value_collection_size", [ :pointer ], :int)
|
82
84
|
|
83
85
|
attach_function("sc_value_handle", "sc_value_handle", [ :pointer, :int ], :pointer)
|
84
|
-
attach_function("
|
86
|
+
attach_function("sc_value", "sc_value", [ :pointer], :string)
|
85
87
|
|
86
88
|
attach_function("sc_header_collection_handle_payload", "sc_header_collection_handle_payload", [ :pointer ], :pointer)
|
87
89
|
attach_function("sc_header_collection_handle_resource", "sc_header_collection_handle_resource", [ :pointer ], :pointer)
|
@@ -126,6 +128,89 @@ module RedSnow
|
|
126
128
|
attach_function("sc_warning_code", "sc_warning_code", [ :pointer], :int)
|
127
129
|
attach_function("sc_warning_ok", "sc_warning_ok", [ :pointer ], :int)
|
128
130
|
|
131
|
+
# Sourcemap's c-interface functions
|
132
|
+
attach_function("sc_source_map_size", "sc_source_map_size", [ :pointer ], :int)
|
133
|
+
attach_function("sc_source_map_length", "sc_source_map_length", [ :pointer, :int ], :int)
|
134
|
+
attach_function("sc_source_map_location", "sc_source_map_location", [ :pointer, :int ], :int)
|
135
|
+
|
136
|
+
attach_function("sc_sm_blueprint_free", "sc_sm_blueprint_free", [ :pointer ], :void)
|
137
|
+
attach_function("sc_sm_blueprint_name", "sc_sm_blueprint_name", [ :pointer ], :pointer)
|
138
|
+
attach_function("sc_sm_blueprint_description", "sc_sm_blueprint_description", [ :pointer ], :pointer)
|
139
|
+
|
140
|
+
attach_function("sc_sm_metadata_collection_handle", "sc_sm_metadata_collection_handle", [ :pointer ], :pointer)
|
141
|
+
attach_function("sc_sm_metadata_collection_size", "sc_sm_metadata_collection_size", [ :pointer ], :int)
|
142
|
+
|
143
|
+
attach_function("sc_sm_metadata_handle", "sc_sm_metadata_handle", [ :pointer, :int ], :pointer)
|
144
|
+
attach_function("sc_sm_metadata", "sc_sm_metadata", [ :pointer ], :pointer)
|
145
|
+
|
146
|
+
attach_function("sc_sm_resource_group_collection_handle", "sc_sm_resource_group_collection_handle", [ :pointer ], :pointer)
|
147
|
+
attach_function("sc_sm_resource_group_collection_size", "sc_sm_resource_group_collection_size", [ :pointer ], :int)
|
148
|
+
|
149
|
+
attach_function("sc_sm_resource_group_handle", "sc_sm_resource_group_handle", [ :pointer, :int ], :pointer)
|
150
|
+
attach_function("sc_sm_resource_group_name", "sc_sm_resource_group_name", [ :pointer ], :pointer)
|
151
|
+
attach_function("sc_sm_resource_group_description", "sc_sm_resource_group_description", [ :pointer ], :pointer)
|
152
|
+
|
153
|
+
attach_function("sc_sm_resource_collection_handle", "sc_sm_resource_collection_handle", [ :pointer ] , :pointer)
|
154
|
+
attach_function("sc_sm_resource_collection_size", "sc_sm_resource_collection_size", [ :pointer ], :int)
|
155
|
+
# Resource
|
156
|
+
attach_function("sc_sm_resource_handle", "sc_sm_resource_handle", [ :pointer, :int ] , :pointer)
|
157
|
+
attach_function("sc_sm_resource_uritemplate", "sc_sm_resource_uritemplate", [ :pointer ], :pointer)
|
158
|
+
attach_function("sc_sm_resource_name", "sc_sm_resource_name", [ :pointer ], :pointer)
|
159
|
+
attach_function("sc_sm_resource_description", "sc_sm_resource_description", [ :pointer ], :pointer)
|
160
|
+
|
161
|
+
attach_function("sc_sm_payload_collection_handle_requests", "sc_sm_payload_collection_handle_requests", [ :pointer ], :pointer)
|
162
|
+
attach_function("sc_sm_payload_collection_handle_responses", "sc_sm_payload_collection_handle_responses", [ :pointer ], :pointer)
|
163
|
+
attach_function("sc_sm_payload_collection_size", "sc_sm_payload_collection_size", [ :pointer ], :int)
|
164
|
+
# Resource.model
|
165
|
+
attach_function("sc_sm_payload_handle", "sc_sm_payload_handle", [ :pointer, :int ], :pointer)
|
166
|
+
attach_function("sc_sm_payload_handle_resource", "sc_sm_payload_handle_resource", [ :pointer ], :pointer)
|
167
|
+
attach_function("sc_sm_payload_name", "sc_sm_payload_name", [ :pointer ], :pointer)
|
168
|
+
attach_function("sc_sm_payload_symbol", "sc_sm_payload_symbol", [ :pointer ], :pointer)
|
169
|
+
attach_function("sc_sm_payload_description", "sc_sm_payload_description", [ :pointer ], :pointer)
|
170
|
+
attach_function("sc_sm_payload_body", "sc_sm_payload_body", [ :pointer ], :pointer)
|
171
|
+
attach_function("sc_sm_payload_schema", "sc_sm_payload_schema", [ :pointer ], :pointer)
|
172
|
+
|
173
|
+
attach_function("sc_sm_parameter_collection_handle_payload", "sc_sm_parameter_collection_handle_payload", [ :pointer ], :pointer)
|
174
|
+
attach_function("sc_sm_parameter_collection_handle_resource", "sc_sm_parameter_collection_handle_resource", [ :pointer ], :pointer)
|
175
|
+
attach_function("sc_sm_parameter_collection_handle_action", "sc_sm_parameter_collection_handle_action", [ :pointer ], :pointer)
|
176
|
+
attach_function("sc_sm_parameter_collection_size", "sc_sm_parameter_collection_size", [ :pointer ], :int)
|
177
|
+
|
178
|
+
attach_function("sc_sm_parameter_handle", "sc_sm_parameter_handle", [ :pointer, :int ], :pointer)
|
179
|
+
attach_function("sc_sm_parameter_name", "sc_sm_parameter_name", [ :pointer ], :pointer)
|
180
|
+
attach_function("sc_sm_parameter_description", "sc_sm_parameter_description", [ :pointer ], :pointer)
|
181
|
+
attach_function("sc_sm_parameter_type", "sc_sm_parameter_type", [ :pointer ], :pointer)
|
182
|
+
attach_function("sc_sm_parameter_parameter_use", "sc_sm_parameter_parameter_use", [ :pointer ], :pointer)
|
183
|
+
attach_function("sc_sm_parameter_default_value", "sc_sm_parameter_default_value", [ :pointer ], :pointer)
|
184
|
+
attach_function("sc_sm_parameter_example_value", "sc_sm_parameter_example_value", [ :pointer ], :pointer)
|
185
|
+
|
186
|
+
attach_function("sc_sm_value_collection_handle", "sc_sm_value_collection_handle", [ :pointer], :pointer)
|
187
|
+
attach_function("sc_sm_value_collection_size", "sc_sm_value_collection_size", [ :pointer ], :int)
|
188
|
+
|
189
|
+
attach_function("sc_sm_value_handle", "sc_sm_value_handle", [ :pointer, :int ], :pointer)
|
190
|
+
attach_function("sc_sm_value", "sc_sm_value", [ :pointer], :pointer)
|
191
|
+
|
192
|
+
attach_function("sc_sm_header_collection_handle_payload", "sc_sm_header_collection_handle_payload", [ :pointer ], :pointer)
|
193
|
+
attach_function("sc_sm_header_collection_handle_resource", "sc_sm_header_collection_handle_resource", [ :pointer ], :pointer)
|
194
|
+
attach_function("sc_sm_header_collection_handle_action", "sc_sm_header_collection_handle_action", [ :pointer ], :pointer)
|
195
|
+
attach_function("sc_sm_header_collection_size", "sc_sm_header_collection_size", [ :pointer ], :int)
|
196
|
+
|
197
|
+
attach_function("sc_sm_header_handle", "sc_sm_header_handle", [ :pointer, :int ], :pointer)
|
198
|
+
attach_function("sc_sm_header", "sc_sm_header", [ :pointer], :pointer)
|
199
|
+
|
200
|
+
attach_function("sc_sm_action_collection_handle", "sc_sm_action_collection_handle", [ :pointer ], :pointer)
|
201
|
+
attach_function("sc_sm_action_collection_size", "sc_sm_action_collection_size", [ :pointer], :int)
|
202
|
+
|
203
|
+
attach_function("sc_sm_action_handle", "sc_sm_action_handle", [ :pointer, :int ], :pointer)
|
204
|
+
attach_function("sc_sm_action_httpmethod", "sc_sm_action_httpmethod", [ :pointer], :pointer)
|
205
|
+
attach_function("sc_sm_action_name", "sc_sm_action_name", [ :pointer], :pointer)
|
206
|
+
attach_function("sc_sm_action_description", "sc_sm_action_description", [ :pointer ], :pointer)
|
207
|
+
|
208
|
+
attach_function("sc_sm_transaction_example_collection_handle", "sc_sm_transaction_example_collection_handle", [ :pointer ], :pointer)
|
209
|
+
attach_function("sc_sm_transaction_example_collection_size", "sc_sm_transaction_example_collection_size", [ :pointer ], :int)
|
210
|
+
|
211
|
+
attach_function("sc_sm_transaction_example_handle", "sc_sm_transaction_example_handle", [ :pointer, :int ], :pointer)
|
212
|
+
attach_function("sc_sm_transaction_example_name", "sc_sm_transaction_example_name", [ :pointer ], :pointer)
|
213
|
+
attach_function("sc_sm_transaction_example_description", "sc_sm_transaction_example_description", [ :pointer ], :pointer)
|
129
214
|
|
130
215
|
end
|
131
216
|
|