redsnow 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -1
  3. data/README.md +12 -0
  4. data/ext/snowcrash/bin/snowcrash +0 -0
  5. data/ext/snowcrash/ext/markdown-parser/ext/sundown/src/markdown.c +5 -2
  6. data/ext/snowcrash/snowcrash.gyp +7 -2
  7. data/ext/snowcrash/src/ActionParser.h +141 -81
  8. data/ext/snowcrash/src/AssetParser.h +19 -11
  9. data/ext/snowcrash/src/Blueprint.h +44 -14
  10. data/ext/snowcrash/src/BlueprintParser.h +65 -51
  11. data/ext/snowcrash/src/BlueprintSourcemap.h +254 -0
  12. data/ext/snowcrash/src/BlueprintUtility.h +3 -24
  13. data/ext/snowcrash/src/CBlueprint.cc +40 -31
  14. data/ext/snowcrash/src/CBlueprint.h +54 -58
  15. data/ext/snowcrash/src/CBlueprintSourcemap.cc +620 -0
  16. data/ext/snowcrash/src/CBlueprintSourcemap.h +342 -0
  17. data/ext/snowcrash/src/CSourceAnnotation.cc +14 -0
  18. data/ext/snowcrash/src/CodeBlockUtility.h +42 -5
  19. data/ext/snowcrash/src/HeadersParser.h +84 -42
  20. data/ext/snowcrash/src/ParameterParser.h +110 -68
  21. data/ext/snowcrash/src/ParametersParser.h +26 -28
  22. data/ext/snowcrash/src/PayloadParser.h +164 -83
  23. data/ext/snowcrash/src/ResourceGroupParser.h +35 -41
  24. data/ext/snowcrash/src/ResourceParser.h +142 -97
  25. data/ext/snowcrash/src/SectionParser.h +15 -14
  26. data/ext/snowcrash/src/SectionParserData.h +11 -2
  27. data/ext/snowcrash/src/SectionProcessor.h +42 -18
  28. data/ext/snowcrash/src/Serialize.cc +2 -0
  29. data/ext/snowcrash/src/Serialize.h +3 -1
  30. data/ext/snowcrash/src/SerializeJSON.cc +608 -16
  31. data/ext/snowcrash/src/SerializeJSON.h +4 -1
  32. data/ext/snowcrash/src/SerializeYAML.cc +367 -19
  33. data/ext/snowcrash/src/SerializeYAML.h +4 -1
  34. data/ext/snowcrash/src/SymbolTable.h +12 -1
  35. data/ext/snowcrash/src/ValuesParser.h +12 -11
  36. data/ext/snowcrash/src/Version.h +1 -1
  37. data/ext/snowcrash/src/csnowcrash.cc +7 -3
  38. data/ext/snowcrash/src/csnowcrash.h +4 -2
  39. data/ext/snowcrash/src/snowcrash.cc +10 -11
  40. data/ext/snowcrash/src/snowcrash.h +3 -3
  41. data/ext/snowcrash/src/snowcrash/snowcrash.cc +38 -8
  42. data/ext/snowcrash/tools/homebrew/snowcrash.rb +1 -1
  43. data/lib/redsnow.rb +41 -2
  44. data/lib/redsnow/binding.rb +93 -8
  45. data/lib/redsnow/blueprint.rb +48 -25
  46. data/lib/redsnow/parseresult.rb +9 -2
  47. data/lib/redsnow/sourcemap.rb +369 -0
  48. data/lib/redsnow/version.rb +1 -1
  49. data/test/fixtures/sample-api-ast.json +1 -1
  50. data/test/fixtures/sample-api-sourcemap.json +169 -0
  51. data/test/redsnow_binding_test.rb +19 -2
  52. data/test/redsnow_options_test.rb +42 -0
  53. data/test/redsnow_parseresult_test.rb +5 -1
  54. data/test/redsnow_test.rb +5 -0
  55. metadata +11 -2
@@ -0,0 +1,342 @@
1
+ //
2
+ // CBlueprintSourcemap.h
3
+ // snowcrash
4
+ // C Implementation of BlueprintSourcemap.h for binding purposes
5
+ //
6
+ // Created by Pavan Kumar Sunkara on 12/9/14.
7
+ // Copyright (c) 2014 Apiary Inc. All rights reserved.
8
+ //
9
+
10
+ #ifndef SC_C_BLUEPRINT_SOURCEMAP_H
11
+ #define SC_C_BLUEPRINT_SOURCEMAP_H
12
+
13
+ #include "Platform.h"
14
+ #include "stdlib.h"
15
+
16
+ #ifdef __cplusplus
17
+ extern "C" {
18
+ #endif
19
+
20
+ /** Class source map wrapper */
21
+ struct sc_source_map_s;
22
+ typedef struct sc_source_map_s sc_source_map_t;
23
+
24
+ /** Class Blueprint source map wrapper */
25
+ struct sc_sm_blueprint_s;
26
+ typedef struct sc_sm_blueprint_s sc_sm_blueprint_t;
27
+
28
+ /** Array Metadata source map wrapper */
29
+ struct sc_sm_metadata_collection_s;
30
+ typedef struct sc_sm_metadata_collection_s sc_sm_metadata_collection_t;
31
+
32
+ /** Class Metadata source map wrapper */
33
+ struct sc_sm_metadata_s;
34
+ typedef struct sc_sm_metadata_s sc_sm_metadata_t;
35
+
36
+ /** Array Resource Group Collection source map wrapper */
37
+ struct sc_sm_resource_group_collection_s;
38
+ typedef struct sc_sm_resource_group_collection_s sc_sm_resource_group_collection_t;
39
+
40
+ /** Class Resource Group source map wrapper */
41
+ struct sc_sm_resource_group_s;
42
+ typedef struct sc_sm_resource_group_s sc_sm_resource_group_t;
43
+
44
+ /** Array Resource Collection source map wrapper */
45
+ struct sc_sm_resource_collection_s;
46
+ typedef struct sc_sm_resource_collection_s sc_sm_resource_collection_t;
47
+
48
+ /** Class Resource source map wrapper */
49
+ struct sc_sm_resource_s;
50
+ typedef struct sc_sm_resource_s sc_sm_resource_t;
51
+
52
+ /** Class Resource Model source map wrapper */
53
+ struct sc_sm_resource_model_s;
54
+ typedef struct sc_sm_resource_model_s sc_sm_resource_model_t;
55
+
56
+ /** Array Payload Collection source map wrapper */
57
+ struct sc_sm_payload_collection_s;
58
+ typedef struct sc_sm_payload_collection_s sc_sm_payload_collection_t;
59
+
60
+ /** Class Payload source map wrapper */
61
+ struct sc_sm_payload_s;
62
+ typedef struct sc_sm_payload_s sc_sm_payload_t;
63
+
64
+ /** Array Parameter source map wrapper */
65
+ struct sc_sm_parameter_collection_s;
66
+ typedef struct sc_sm_parameter_collection_s sc_sm_parameter_collection_t;
67
+
68
+ /** class Parameter source map wrapper */
69
+ struct sc_sm_parameter_s;
70
+ typedef struct sc_sm_parameter_s sc_sm_parameter_t;
71
+
72
+ /** Array Header source map wrapper */
73
+ struct sc_sm_header_collection_s;
74
+ typedef struct sc_sm_header_collection_s sc_sm_header_collection_t;
75
+
76
+ /** class Header source map wrapper */
77
+ struct sc_sm_header_s;
78
+ typedef struct sc_sm_header_s sc_sm_header_t;
79
+
80
+ /** Array Value source map wrapper */
81
+ struct sc_sm_value_collection_s;
82
+ typedef struct sc_sm_value_collection_s sc_sm_value_collection_t;
83
+
84
+ /** class Value source map wrapper */
85
+ struct sc_sm_value_s;
86
+ typedef struct sc_sm_value_s sc_sm_value_t;
87
+
88
+ /** Array Action source map wrapper */
89
+ struct sc_sm_action_collection_s;
90
+ typedef struct sc_sm_action_collection_s sc_sm_action_collection_t;
91
+
92
+ /** class Action source map wrapper */
93
+ struct sc_sm_action_s;
94
+ typedef struct sc_sm_action_s sc_sm_action_t;
95
+
96
+ /** Array Transaction Example source map wrapper */
97
+ struct sc_sm_transaction_example_collection_s;
98
+ typedef struct sc_sm_transaction_example_collection_s sc_sm_transaction_example_collection_t;
99
+
100
+ /** class Transaction Example source map wrapper */
101
+ struct sc_sm_transaction_example_s;
102
+ typedef struct sc_sm_transaction_example_s sc_sm_transaction_example_t;
103
+
104
+ /*----------------------------------------------------------------------*/
105
+
106
+ /** \returns size of the source map */
107
+ SC_API size_t sc_source_map_size(const sc_source_map_t* source_map);
108
+
109
+ /** \returns Location of the source map item at index */
110
+ SC_API size_t sc_source_map_length(const sc_source_map_t* source_map, size_t index);
111
+
112
+ /** \returns Length of the source map item at index */
113
+ SC_API size_t sc_source_map_location(const sc_source_map_t* source_map, size_t index);
114
+
115
+ /*----------------------------------------------------------------------*/
116
+
117
+ /** \returns pointer to allocated Blueprint source map */
118
+ SC_API sc_sm_blueprint_t* sc_sm_blueprint_new();
119
+
120
+ /** \deallocate Blueprint source map from pointer */
121
+ SC_API void sc_sm_blueprint_free(sc_sm_blueprint_t* blueprint);
122
+
123
+ /** \returns Blueprint name source map */
124
+ SC_API const sc_source_map_t* sc_sm_blueprint_name(const sc_sm_blueprint_t* blueprint);
125
+
126
+ /** \returns Blueprint description source map */
127
+ SC_API const sc_source_map_t* sc_sm_blueprint_description(const sc_sm_blueprint_t* blueprint);
128
+
129
+ /*----------------------------------------------------------------------*/
130
+
131
+ /** \returns Metadata source map array handle */
132
+ SC_API const sc_sm_metadata_collection_t* sc_sm_metadata_collection_handle(const sc_sm_blueprint_t* blueprint);
133
+
134
+ /** \returns size of Metadata source map array */
135
+ SC_API size_t sc_sm_metadata_collection_size(const sc_sm_metadata_collection_t* metadata);
136
+
137
+ /*----------------------------------------------------------------------*/
138
+
139
+ /** \returns Metadata source map at `index` handle */
140
+ SC_API const sc_sm_metadata_t* sc_sm_metadata_handle(const sc_sm_metadata_collection_t* metadata_col, size_t index);
141
+
142
+ /** \returns Metadata source map */
143
+ SC_API const sc_source_map_t* sc_sm_metadata(const sc_sm_metadata_t* metadata);
144
+
145
+ /*----------------------------------------------------------------------*/
146
+
147
+ /** \returns Resource Group Collection source map array handle */
148
+ SC_API const sc_sm_resource_group_collection_t* sc_sm_resource_group_collection_handle(const sc_sm_blueprint_t* blueprint);
149
+
150
+ /** \returns size of Resource Group Collection source map array */
151
+ SC_API size_t sc_sm_resource_group_collection_size(const sc_sm_resource_group_collection_t* resource);
152
+
153
+ /*----------------------------------------------------------------------*/
154
+
155
+ /** \returns Resource Group source map handle */
156
+ SC_API const sc_sm_resource_group_t* sc_sm_resource_group_handle(const sc_sm_resource_group_collection_t* resource, size_t index);
157
+
158
+ /** \returns Resource Group name source map */
159
+ SC_API const sc_source_map_t* sc_sm_resource_group_name(const sc_sm_resource_group_t* handle);
160
+
161
+ /** \returns Resource Group description source map */
162
+ SC_API const sc_source_map_t* sc_sm_resource_group_description(const sc_sm_resource_group_t* handle);
163
+
164
+ /*----------------------------------------------------------------------*/
165
+
166
+ /** \returns Resource source map array handle */
167
+ SC_API const sc_sm_resource_collection_t* sc_sm_resource_collection_handle(const sc_sm_resource_group_t* handle);
168
+
169
+ /** \returns Resource source map array size */
170
+ SC_API size_t sc_sm_resource_collection_size(const sc_sm_resource_collection_t* resource);
171
+
172
+ /*----------------------------------------------------------------------*/
173
+
174
+ /** \returns Resource source map handle */
175
+ SC_API const sc_sm_resource_t* sc_sm_resource_handle(const sc_sm_resource_collection_t* resource, size_t index);
176
+
177
+ /** \returns Resource URITemplate source map */
178
+ SC_API const sc_source_map_t* sc_sm_resource_uritemplate(const sc_sm_resource_t* handle);
179
+
180
+ /** \returns Resource name source map */
181
+ SC_API const sc_source_map_t* sc_sm_resource_name(const sc_sm_resource_t* handle);
182
+
183
+ /** \returns Resource description source map */
184
+ SC_API const sc_source_map_t* sc_sm_resource_description(const sc_sm_resource_t* handle);
185
+
186
+ /*----------------------------------------------------------------------*/
187
+
188
+ /** \returns Payload Collection source map array handle from TransactionExample for requests*/
189
+ SC_API const sc_sm_payload_collection_t* sc_sm_payload_collection_handle_requests(const sc_sm_transaction_example_t* handle);
190
+
191
+ /** \returns Payload Collection source map array handle from TransactionExample for responses*/
192
+ SC_API const sc_sm_payload_collection_t* sc_sm_payload_collection_handle_responses(const sc_sm_transaction_example_t* handle);
193
+
194
+ /** \returns Payload Collection array size */
195
+ SC_API size_t sc_sm_payload_collection_size(const sc_sm_payload_collection_t* handle);
196
+
197
+ /*----------------------------------------------------------------------*/
198
+
199
+ /** \returns Payload source map at `index` handle */
200
+ SC_API const sc_sm_payload_t* sc_sm_payload_handle(const sc_sm_payload_collection_t* handle, size_t index);
201
+
202
+ /** \returns Payload source map handle from resource source map */
203
+ SC_API const sc_sm_payload_t* sc_sm_payload_handle_resource(const sc_sm_resource_t* handle);
204
+
205
+ /** \returns Payload name source map */
206
+ SC_API const sc_source_map_t* sc_sm_payload_name(const sc_sm_payload_t* handle);
207
+
208
+ /** \returns Payload symbol name source map */
209
+ SC_API const sc_source_map_t* sc_sm_payload_symbol(const sc_sm_payload_t* handle);
210
+
211
+ /** \returns Payload description source map */
212
+ SC_API const sc_source_map_t* sc_sm_payload_description(const sc_sm_payload_t* handle);
213
+
214
+ /** \returns Payload body source map */
215
+ SC_API const sc_source_map_t* sc_sm_payload_body(const sc_sm_payload_t* handle);
216
+
217
+ /** \returns Payload schema source map */
218
+ SC_API const sc_source_map_t* sc_sm_payload_schema(const sc_sm_payload_t* handle);
219
+
220
+ /*----------------------------------------------------------------------*/
221
+
222
+ /** \returns Parameter Collection source map array handle from Payload source map */
223
+ SC_API const sc_sm_parameter_collection_t* sc_sm_parameter_collection_handle_payload(const sc_sm_payload_t* handle);
224
+
225
+ /** \returns Parameter Collection source map array handle from Resource source map */
226
+ SC_API const sc_sm_parameter_collection_t* sc_sm_parameter_collection_handle_resource(const sc_sm_resource_t* handle);
227
+
228
+ /** \returns Parameter Collection source map array handle from Action source map */
229
+ SC_API const sc_sm_parameter_collection_t* sc_sm_parameter_collection_handle_action(const sc_sm_action_t* handle);
230
+
231
+ /** \returns Parameter Collection source map array size */
232
+ SC_API size_t sc_sm_parameter_collection_size(const sc_sm_parameter_collection_t* handle);
233
+
234
+ /*----------------------------------------------------------------------*/
235
+
236
+ /** \returns Parameter source map handle */
237
+ SC_API const sc_sm_parameter_t* sc_sm_parameter_handle(const sc_sm_parameter_collection_t* handle, size_t index);
238
+
239
+ /** \returns Parameter name source map */
240
+ SC_API const sc_source_map_t* sc_sm_parameter_name(const sc_sm_parameter_t* handle);
241
+
242
+ /** \returns Parameter description source map */
243
+ SC_API const sc_source_map_t* sc_sm_parameter_description(const sc_sm_parameter_t* handle);
244
+
245
+ /** \returns Parameter type source map */
246
+ SC_API const sc_source_map_t* sc_sm_parameter_type(const sc_sm_parameter_t* handle);
247
+
248
+ /** \returns Parameter use source map */
249
+ SC_API const sc_source_map_t* sc_sm_parameter_parameter_use(const sc_sm_parameter_t* handle);
250
+
251
+ /** \returns Parameter default value source map */
252
+ SC_API const sc_source_map_t* sc_sm_parameter_default_value(const sc_sm_parameter_t* handle);
253
+
254
+ /** \returns Parameter example value source map */
255
+ SC_API const sc_source_map_t* sc_sm_parameter_example_value(const sc_sm_parameter_t* handle);
256
+
257
+ /*----------------------------------------------------------------------*/
258
+
259
+ /** \returns Value Collection source map array handle */
260
+ SC_API const sc_sm_value_collection_t* sc_sm_value_collection_handle(const sc_sm_parameter_t* handle);
261
+
262
+ /** \returns Value Collection source map array size */
263
+ SC_API size_t sc_sm_value_collection_size(const sc_sm_value_collection_t* handle);
264
+
265
+ /*----------------------------------------------------------------------*/
266
+
267
+ /** \returns Value source map handle */
268
+ SC_API const sc_sm_value_t* sc_sm_value_handle(const sc_sm_value_collection_t* handle, size_t index);
269
+
270
+ /** \returns Value source map */
271
+ SC_API const sc_source_map_t* sc_sm_value(const sc_sm_value_t* handle);
272
+
273
+ /*----------------------------------------------------------------------*/
274
+
275
+ /** \returns Header Collection source map array handle from Payload source map */
276
+ SC_API const sc_sm_header_collection_t* sc_sm_header_collection_handle_payload(const sc_sm_payload_t* handle);
277
+
278
+ /** \returns Header Collection source map array handle from Resource source map */
279
+ SC_API const sc_sm_header_collection_t* sc_sm_header_collection_handle_resource(const sc_sm_resource_t* handle);
280
+
281
+ /** \returns Header Collection source map array handle from Action source map */
282
+ SC_API const sc_sm_header_collection_t* sc_sm_header_collection_handle_action(const sc_sm_action_t* handle);
283
+
284
+ /** \returns Header Collection source map array size */
285
+ SC_API size_t sc_sm_header_collection_size(const sc_sm_header_collection_t* handle);
286
+
287
+ /*----------------------------------------------------------------------*/
288
+
289
+ /** \returns Header source map handle */
290
+ SC_API const sc_sm_header_t* sc_sm_header_handle(const sc_sm_header_collection_t* handle, size_t index);
291
+
292
+ /** \returns Header source map */
293
+ SC_API const sc_source_map_t* sc_sm_header(const sc_sm_header_t* handle);
294
+
295
+ /*----------------------------------------------------------------------*/
296
+
297
+ /** \returns Action Collection source map array handle */
298
+ SC_API const sc_sm_action_collection_t* sc_sm_action_collection_handle(const sc_sm_resource_t* handle);
299
+
300
+ /** \returns Action Collection source map array size */
301
+ SC_API size_t sc_sm_action_collection_size(const sc_sm_action_collection_t* handle);
302
+
303
+ /*----------------------------------------------------------------------*/
304
+
305
+ /** \returns Action source map handle */
306
+ SC_API const sc_sm_action_t* sc_sm_action_handle(const sc_sm_action_collection_t* handle, size_t index);
307
+
308
+ /** \returns Action HTTPMethod source map */
309
+ SC_API const sc_source_map_t* sc_sm_action_httpmethod(const sc_sm_action_t* handle);
310
+
311
+ /** \returns Action name source map */
312
+ SC_API const sc_source_map_t* sc_sm_action_name(const sc_sm_action_t* handle);
313
+
314
+ /** \returns Action description source map */
315
+ SC_API const sc_source_map_t* sc_sm_action_description(const sc_sm_action_t* handle);
316
+
317
+ /*----------------------------------------------------------------------*/
318
+
319
+ /** \returns Transaction Example Collection source map array handle */
320
+ SC_API const sc_sm_transaction_example_collection_t* sc_sm_transaction_example_collection_handle(const sc_sm_action_t* handle);
321
+
322
+ /** \returns Transaction Example Collection source map array size */
323
+ SC_API size_t sc_sm_transaction_example_collection_size(const sc_sm_transaction_example_collection_t* handle);
324
+
325
+ /*----------------------------------------------------------------------*/
326
+
327
+ /** \returns Transaction Example source map handle */
328
+ SC_API const sc_sm_transaction_example_t* sc_sm_transaction_example_handle(const sc_sm_transaction_example_collection_t* handle, size_t index);
329
+
330
+ /** \returns Transaction Example name source map */
331
+ SC_API const sc_source_map_t* sc_sm_transaction_example_name(const sc_sm_transaction_example_t* handle);
332
+
333
+ /** \returns Transaction Example description source map */
334
+ SC_API const sc_source_map_t* sc_sm_transaction_example_description(const sc_sm_transaction_example_t* handle);
335
+
336
+ /*----------------------------------------------------------------------*/
337
+
338
+ #ifdef __cplusplus
339
+ }
340
+ #endif
341
+
342
+ #endif
@@ -28,6 +28,7 @@ SC_API const sc_location_t* sc_location_handler(const sc_source_annotation_t* so
28
28
  const snowcrash::SourceAnnotation* p = AS_CTYPE(snowcrash::SourceAnnotation, source);
29
29
  if(!p)
30
30
  return NULL;
31
+
31
32
  return AS_CTYPE(sc_location_t, &p->location);
32
33
  }
33
34
 
@@ -36,6 +37,7 @@ SC_API size_t sc_location_size(const sc_location_t* location)
36
37
  const mdp::CharactersRangeSet* p = AS_CTYPE(mdp::CharactersRangeSet, location);
37
38
  if(!p)
38
39
  return 0;
40
+
39
41
  return p->size();
40
42
  }
41
43
 
@@ -44,6 +46,7 @@ SC_API size_t sc_location_length(const sc_location_t* location, size_t index)
44
46
  const mdp::CharactersRangeSet* p = AS_CTYPE(mdp::CharactersRangeSet, location);
45
47
  if(!p)
46
48
  return 0;
49
+
47
50
  return p->at(index).length;
48
51
  }
49
52
 
@@ -52,6 +55,7 @@ SC_API size_t sc_location_location(const sc_location_t* location, size_t index)
52
55
  const mdp::CharactersRangeSet* p = AS_CTYPE(mdp::CharactersRangeSet, location);
53
56
  if(!p)
54
57
  return 0;
58
+
55
59
  return p->at(index).location;
56
60
  }
57
61
 
@@ -62,6 +66,7 @@ SC_API const sc_error_t* sc_error_handler(const sc_report_t* report)
62
66
  const snowcrash::Report* p = AS_CTYPE(snowcrash::Report, report);
63
67
  if(!p)
64
68
  return NULL;
69
+
65
70
  return AS_CTYPE(sc_error_t, &p->error);
66
71
  }
67
72
 
@@ -70,6 +75,7 @@ SC_API const char* sc_error_message(const sc_error_t* error)
70
75
  const snowcrash::Error* p = AS_CTYPE(snowcrash::Error, error);
71
76
  if (!p)
72
77
  return "";
78
+
73
79
  return p->message.c_str();
74
80
  }
75
81
 
@@ -78,6 +84,7 @@ SC_API int sc_error_code(const sc_error_t* error)
78
84
  const snowcrash::Error* p = AS_CTYPE(snowcrash::Error, error);
79
85
  if (!p)
80
86
  return 0;
87
+
81
88
  return p->code;
82
89
  }
83
90
 
@@ -86,6 +93,7 @@ SC_API int sc_error_ok(const sc_error_t* error)
86
93
  const snowcrash::Error* p = AS_CTYPE(snowcrash::Error, error);
87
94
  if (!p)
88
95
  return 0;
96
+
89
97
  return p->OK;
90
98
  }
91
99
 
@@ -96,6 +104,7 @@ SC_API const sc_warnings_t* sc_warnings_handler(const sc_report_t* report)
96
104
  const snowcrash::Report* p = AS_CTYPE(snowcrash::Report, report);
97
105
  if(!p)
98
106
  return NULL;
107
+
99
108
  return AS_CTYPE(sc_warnings_t, &p->warnings);
100
109
  }
101
110
 
@@ -104,6 +113,7 @@ SC_API size_t sc_warnings_size(const sc_warnings_t* warning)
104
113
  const snowcrash::Warnings* p = AS_CTYPE(snowcrash::Warnings, warning);
105
114
  if(!p)
106
115
  return 0;
116
+
107
117
  return p->size();
108
118
  }
109
119
 
@@ -112,6 +122,7 @@ SC_API const sc_warning_t* sc_warning_handler(const sc_warnings_t* warning, size
112
122
  const snowcrash::Warnings* p = AS_CTYPE(snowcrash::Warnings, warning);
113
123
  if(!p)
114
124
  return NULL;
125
+
115
126
  return AS_CTYPE(sc_warning_t, &p->at(index));
116
127
  }
117
128
 
@@ -120,6 +131,7 @@ SC_API const char* sc_warning_message(const sc_warning_t* warning)
120
131
  const snowcrash::Warning* p = AS_CTYPE(snowcrash::Warning, warning);
121
132
  if (!p)
122
133
  return "";
134
+
123
135
  return p->message.c_str();
124
136
  }
125
137
 
@@ -128,6 +140,7 @@ SC_API int sc_warning_code(const sc_warning_t* warning)
128
140
  const snowcrash::Warning* p = AS_CTYPE(snowcrash::Warning, warning);
129
141
  if (!p)
130
142
  return 0;
143
+
131
144
  return p->code;
132
145
  }
133
146
 
@@ -136,5 +149,6 @@ SC_API int sc_warning_ok(const sc_warning_t* warning)
136
149
  const snowcrash::Warning* p = AS_CTYPE(snowcrash::Warning, warning);
137
150
  if (!p)
138
151
  return 0;
152
+
139
153
  return p->OK;
140
154
  }
@@ -55,6 +55,8 @@ namespace snowcrash {
55
55
  const SectionParserData& pd,
56
56
  Report& report,
57
57
  mdp::ByteBuffer& content) {
58
+
59
+ checkPossibleReference(node, pd, report);
58
60
 
59
61
  if (node->type == mdp::CodeMarkdownNodeType) {
60
62
  content += node->text;
@@ -197,12 +199,14 @@ namespace snowcrash {
197
199
  /**
198
200
  * \brief Add dangling message body asset to the given string
199
201
  * \param out The string to which the dangling asset should be added
202
+ * \param outSM The source map to which source map should be added
203
+ * \return asset The value of the asset
200
204
  */
201
- static void addDanglingAsset(const MarkdownNodeIterator& node,
202
- SectionParserData& pd,
203
- SectionType& sectionType,
204
- Report& report,
205
- mdp::ByteBuffer& out) {
205
+ static mdp::ByteBuffer addDanglingAsset(const MarkdownNodeIterator& node,
206
+ SectionParserData& pd,
207
+ SectionType& sectionType,
208
+ Report& report,
209
+ mdp::ByteBuffer& out) {
206
210
 
207
211
  mdp::ByteBuffer asset;
208
212
 
@@ -220,6 +224,7 @@ namespace snowcrash {
220
224
  if (node->type == mdp::CodeMarkdownNodeType)
221
225
  level--; // Deduct one level for a code block
222
226
 
227
+ checkPossibleReference(node, pd, report);
223
228
 
224
229
  if (level) {
225
230
  // WARN: Dangling asset
@@ -232,6 +237,38 @@ namespace snowcrash {
232
237
  IndentationWarning,
233
238
  sourceMap));
234
239
  }
240
+
241
+ return asset;
242
+ }
243
+
244
+ /**
245
+ * \brief Check for potential resource model reference and warn about not recognizing them
246
+ * \return True if code block contains a resource model reference, false otherwise.
247
+ */
248
+ static bool checkPossibleReference(const MarkdownNodeIterator& node,
249
+ const SectionParserData& pd,
250
+ Report& report) {
251
+
252
+ mdp::ByteBuffer source = node->text;
253
+ SymbolName symbol;
254
+
255
+ TrimString(source);
256
+
257
+ if(GetSymbolReference(source, symbol)) {
258
+
259
+ std::stringstream ss;
260
+ ss << "found a possible '" << symbol << "' model reference, ";
261
+ ss << "a reference must be directly in the " << SectionName(pd.sectionContext()) << " section, indented by 4 spaces or 1 tab, without any additional sections";
262
+
263
+ mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
264
+ report.warnings.push_back(Warning(ss.str(),
265
+ IgnoringWarning,
266
+ sourceMap));
267
+
268
+ return true;
269
+ }
270
+
271
+ return false;
235
272
  }
236
273
  };
237
274
  }