redsnow 0.2.1 → 0.3.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -0
  3. data/ext/snowcrash/bin/snowcrash +0 -0
  4. data/ext/snowcrash/snowcrash.xcworkspace/contents.xcworkspacedata +10 -0
  5. data/ext/snowcrash/src/ActionParser.h +35 -33
  6. data/ext/snowcrash/src/AssetParser.h +17 -17
  7. data/ext/snowcrash/src/Blueprint.h +101 -66
  8. data/ext/snowcrash/src/BlueprintParser.h +219 -10
  9. data/ext/snowcrash/src/BlueprintSourcemap.h +1 -1
  10. data/ext/snowcrash/src/BlueprintUtility.h +14 -14
  11. data/ext/snowcrash/src/CBlueprint.cc +29 -10
  12. data/ext/snowcrash/src/CBlueprint.h +19 -3
  13. data/ext/snowcrash/src/CBlueprintSourcemap.cc +20 -10
  14. data/ext/snowcrash/src/CBlueprintSourcemap.h +12 -3
  15. data/ext/snowcrash/src/CodeBlockUtility.h +25 -25
  16. data/ext/snowcrash/src/HTTP.cc +3 -0
  17. data/ext/snowcrash/src/HTTP.h +9 -6
  18. data/ext/snowcrash/src/HeadersParser.h +34 -14
  19. data/ext/snowcrash/src/ParameterParser.h +21 -21
  20. data/ext/snowcrash/src/ParametersParser.h +6 -5
  21. data/ext/snowcrash/src/PayloadParser.h +174 -129
  22. data/ext/snowcrash/src/RegexMatch.h +3 -3
  23. data/ext/snowcrash/src/ResourceGroupParser.h +5 -4
  24. data/ext/snowcrash/src/ResourceParser.h +30 -26
  25. data/ext/snowcrash/src/Section.cc +6 -6
  26. data/ext/snowcrash/src/Section.h +2 -2
  27. data/ext/snowcrash/src/SectionParser.h +41 -41
  28. data/ext/snowcrash/src/SectionParserData.h +10 -10
  29. data/ext/snowcrash/src/SectionProcessor.h +70 -30
  30. data/ext/snowcrash/src/Serialize.h +3 -3
  31. data/ext/snowcrash/src/SerializeJSON.cc +124 -96
  32. data/ext/snowcrash/src/SerializeJSON.h +1 -1
  33. data/ext/snowcrash/src/SerializeYAML.cc +71 -53
  34. data/ext/snowcrash/src/SerializeYAML.h +1 -1
  35. data/ext/snowcrash/src/Signature.cc +2 -2
  36. data/ext/snowcrash/src/Signature.h +1 -1
  37. data/ext/snowcrash/src/SourceAnnotation.h +23 -23
  38. data/ext/snowcrash/src/StringUtility.h +71 -9
  39. data/ext/snowcrash/src/SymbolTable.h +17 -17
  40. data/ext/snowcrash/src/UriTemplateParser.cc +5 -5
  41. data/ext/snowcrash/src/UriTemplateParser.h +9 -9
  42. data/ext/snowcrash/src/ValuesParser.h +2 -2
  43. data/ext/snowcrash/src/Version.h +1 -1
  44. data/ext/snowcrash/src/csnowcrash.cc +10 -8
  45. data/ext/snowcrash/src/snowcrash.cc +9 -9
  46. data/ext/snowcrash/src/snowcrash.h +6 -8
  47. data/ext/snowcrash/src/snowcrash/snowcrash.cc +14 -14
  48. data/ext/snowcrash/src/win/RegexMatch.cc +7 -7
  49. data/ext/snowcrash/tools/gyp/pylib/gyp/__init__.pyc +0 -0
  50. data/ext/snowcrash/tools/gyp/pylib/gyp/common.pyc +0 -0
  51. data/ext/snowcrash/tools/gyp/pylib/gyp/generator/__init__.pyc +0 -0
  52. data/ext/snowcrash/tools/gyp/pylib/gyp/generator/make.pyc +0 -0
  53. data/ext/snowcrash/tools/gyp/pylib/gyp/generator/xcode.pyc +0 -0
  54. data/ext/snowcrash/tools/gyp/pylib/gyp/input.pyc +0 -0
  55. data/ext/snowcrash/tools/gyp/pylib/gyp/xcode_emulation.pyc +0 -0
  56. data/ext/snowcrash/tools/gyp/pylib/gyp/xcodeproj_file.pyc +0 -0
  57. data/ext/snowcrash/tools/homebrew/snowcrash.rb +1 -1
  58. data/lib/redsnow/binding.rb +8 -2
  59. data/lib/redsnow/blueprint.rb +4 -3
  60. data/lib/redsnow/sourcemap.rb +6 -4
  61. data/lib/redsnow/version.rb +1 -1
  62. metadata +4 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ee23a2d43da39feb6ca4e0238652fb4ab3233975
4
- data.tar.gz: b9f182cffddcd81c49b515c8b033f4d84f7a3f64
3
+ metadata.gz: 95878106472075ff91ed563622ec6285529c0530
4
+ data.tar.gz: dc6cda45a08da74637a36db527bff272491c24d0
5
5
  SHA512:
6
- metadata.gz: 0d6f68de2038028753baffa195aeea9e85d4cf020a3013a330259ca467009b1af0423642bd2464278198a50002edaae6752c8a16d78fe0a431f23fbfb819f848
7
- data.tar.gz: dc19e0bee08bb8dfc73433a916c2155674ffd048ac231d38aebb4a947e8ab66619f1178659ccc9ebddff4b5428dd45101985f4a91d45379bd36a710e6986c05f
6
+ metadata.gz: 1c9c951c99b4fa2062b8d5673f2567a830e078e77549889924804cb4af80583c532c5f555299fb6a0dee424afd7ffd7a772ea3419f50d9e79b34a80002316eb3
7
+ data.tar.gz: 43dd575341b35f7f7f02b3603d69e60afe543322c4d903b8259a6c808028cf4bd922dc9a756f3f4de9abefebfa6d7c057675c9fa9c4bd363b11a3a4f3bdc70ce
data/CHANGELOG.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # Changelog
2
+ - 0.3.0
3
+ - [Format 1A7](https://github.com/apiaryio/api-blueprint/releases/tag/format-1A7) support. [Snow Crash v0.16.0](https://github.com/apiaryio/snowcrash/releases/tag/v0.16.0)
2
4
  - 0.2.1
3
5
  - Support for source maps [Snow Crash v0.15.0](https://github.com/apiaryio/snowcrash/releases/tag/v0.15.0) and [AST Serialization Format 2.1](https://github.com/apiaryio/api-blueprint-ast/releases/tag/v2.1).
4
6
  - 0.2.0
Binary file
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workspace
3
+ version = "1.0">
4
+ <FileRef
5
+ location = "group:ext/markdown-parser/markdownparser.xcodeproj">
6
+ </FileRef>
7
+ <FileRef
8
+ location = "group:snowcrash.xcodeproj">
9
+ </FileRef>
10
+ </Workspace>
@@ -25,7 +25,7 @@ namespace snowcrash {
25
25
 
26
26
  /** Internal type alias for Collection iterator of Action */
27
27
  typedef Collection<Action>::const_iterator ActionIterator;
28
-
28
+
29
29
  /** Action Definition Type */
30
30
  enum ActionType {
31
31
  NotActionType = 0,
@@ -44,7 +44,7 @@ namespace snowcrash {
44
44
  const MarkdownNodes& siblings,
45
45
  SectionParserData& pd,
46
46
  SectionLayout& layout,
47
- ParseResult<Action>& out) {
47
+ const ParseResultRef<Action>& out) {
48
48
 
49
49
  actionHTTPMethodAndName(node, out.node.method, out.node.name);
50
50
  TrimString(out.node.name);
@@ -76,7 +76,7 @@ namespace snowcrash {
76
76
  static MarkdownNodeIterator processNestedSection(const MarkdownNodeIterator& node,
77
77
  const MarkdownNodes& siblings,
78
78
  SectionParserData& pd,
79
- ParseResult<Action>& out) {
79
+ const ParseResultRef<Action>& out) {
80
80
 
81
81
  SectionType sectionType = pd.sectionContext();
82
82
  MarkdownNodeIterator cur = node;
@@ -87,14 +87,15 @@ namespace snowcrash {
87
87
  switch (sectionType) {
88
88
  case ParametersSectionType:
89
89
  {
90
- ParseResult<Parameters> parameters(out.report, out.node.parameters, out.sourceMap.parameters);
90
+ ParseResultRef<Parameters> parameters(out.report, out.node.parameters, out.sourceMap.parameters);
91
91
  return ParametersParser::parse(node, siblings, pd, parameters);
92
92
  }
93
93
 
94
94
  case RequestSectionType:
95
95
  case RequestBodySectionType:
96
96
  {
97
- ParseResult<Payload> payload(out.report);
97
+ IntermediateParseResult<Payload> payload(out.report);
98
+
98
99
  cur = PayloadParser::parse(node, siblings, pd, payload);
99
100
 
100
101
  if (out.node.examples.empty() || !out.node.examples.back().responses.empty()) {
@@ -122,7 +123,8 @@ namespace snowcrash {
122
123
  case ResponseSectionType:
123
124
  case ResponseBodySectionType:
124
125
  {
125
- ParseResult<Payload> payload(out.report);
126
+ IntermediateParseResult<Payload> payload(out.report);
127
+
126
128
  cur = PayloadParser::parse(node, siblings, pd, payload);
127
129
 
128
130
  if (out.node.examples.empty()) {
@@ -149,7 +151,7 @@ namespace snowcrash {
149
151
 
150
152
  case HeadersSectionType:
151
153
  {
152
- ParseResult<Headers> headers(out.report, out.node.headers, out.sourceMap.headers);
154
+ ParseResultRef<Headers> headers(out.report, out.node.headers, out.sourceMap.headers);
153
155
  return SectionProcessor<Action>::handleDeprecatedHeaders(node, siblings, pd, headers);
154
156
  }
155
157
 
@@ -162,19 +164,19 @@ namespace snowcrash {
162
164
 
163
165
  static bool isUnexpectedNode(const MarkdownNodeIterator& node,
164
166
  SectionType sectionType) {
165
-
167
+
166
168
  if (SectionProcessor<Asset>::sectionType(node) != UndefinedSectionType) {
167
169
  return true;
168
170
  }
169
-
171
+
170
172
  return SectionProcessorBase<Action>::isUnexpectedNode(node, sectionType);
171
173
  }
172
-
174
+
173
175
  static MarkdownNodeIterator processUnexpectedNode(const MarkdownNodeIterator& node,
174
176
  const MarkdownNodes& siblings,
175
177
  SectionParserData& pd,
176
178
  SectionType& sectionType,
177
- ParseResult<Action>& out) {
179
+ const ParseResultRef<Action>& out) {
178
180
 
179
181
  if ((node->type == mdp::ParagraphMarkdownNodeType ||
180
182
  node->type == mdp::CodeMarkdownNodeType) &&
@@ -191,14 +193,14 @@ namespace snowcrash {
191
193
 
192
194
  return ++MarkdownNodeIterator(node);
193
195
  }
194
-
196
+
195
197
  if ((node->type == mdp::ParagraphMarkdownNodeType ||
196
198
  node->type == mdp::CodeMarkdownNodeType) &&
197
199
  (sectionType == RequestBodySectionType ||
198
200
  sectionType == RequestSectionType) &&
199
201
  !out.node.examples.empty() &&
200
202
  !out.node.examples.back().requests.empty()) {
201
-
203
+
202
204
  mdp::ByteBuffer content = CodeBlockUtility::addDanglingAsset(node, pd, sectionType, out.report, out.node.examples.back().requests.back().body);
203
205
 
204
206
  if (pd.exportSourceMap() && !content.empty()) {
@@ -207,15 +209,15 @@ namespace snowcrash {
207
209
 
208
210
  return ++MarkdownNodeIterator(node);
209
211
  }
210
-
212
+
211
213
  SectionType assetType = SectionProcessor<Asset>::sectionType(node);
212
-
214
+
213
215
  if (assetType != UndefinedSectionType) {
214
-
216
+
215
217
  // WARN: Ignoring section
216
218
  std::stringstream ss;
217
219
  mdp::CharactersRangeSet sourceMap = mdp::BytesRangeSetToCharactersRangeSet(node->sourceMap, pd.sourceData);
218
-
220
+
219
221
  ss << "Ignoring " << SectionName(assetType) << " list item, ";
220
222
  ss << SectionName(assetType) << " list item is expected to be indented by 4 spaces or 1 tab";
221
223
 
@@ -225,8 +227,8 @@ namespace snowcrash {
225
227
 
226
228
  return ++MarkdownNodeIterator(node);
227
229
  }
228
-
229
- return SectionProcessorBase<Action>::processUnexpectedNode(node, siblings, pd, sectionType, out);
230
+
231
+ return SectionProcessorBase<Action>::processUnexpectedNode(node, siblings, pd, sectionType, out);
230
232
  }
231
233
 
232
234
  static SectionType sectionType(const MarkdownNodeIterator& node) {
@@ -292,7 +294,7 @@ namespace snowcrash {
292
294
 
293
295
  static void finalize(const MarkdownNodeIterator& node,
294
296
  SectionParserData& pd,
295
- ParseResult<Action>& out) {
297
+ const ParseResultRef<Action>& out) {
296
298
 
297
299
  if (!out.node.headers.empty()) {
298
300
 
@@ -343,7 +345,7 @@ namespace snowcrash {
343
345
  static void checkPayload(SectionType sectionType,
344
346
  const mdp::CharactersRangeSet sourceMap,
345
347
  const Payload& payload,
346
- ParseResult<Action>& out) {
348
+ const ParseResultRef<Action>& out) {
347
349
 
348
350
  if (isPayloadDuplicate(sectionType, payload, out.node.examples.back())) {
349
351
 
@@ -418,7 +420,7 @@ namespace snowcrash {
418
420
  static MarkdownNodeIterator handleDeprecatedHeaders(const MarkdownNodeIterator& node,
419
421
  const MarkdownNodes& siblings,
420
422
  SectionParserData& pd,
421
- ParseResult<Headers>& out) {
423
+ const ParseResultRef<Headers>& out) {
422
424
 
423
425
  MarkdownNodeIterator cur = HeadersParser::parse(node, siblings, pd, out);
424
426
 
@@ -433,23 +435,23 @@ namespace snowcrash {
433
435
 
434
436
  return cur;
435
437
  }
436
-
438
+
437
439
  /** \return %ActionType of a node */
438
440
  static ActionType actionType(const MarkdownNodeIterator& node) {
439
-
441
+
440
442
  if (node->type != mdp::HeaderMarkdownNodeType || node->text.empty())
441
443
  return NotActionType;
442
-
444
+
443
445
  mdp::ByteBuffer subject = node->text;
444
446
  TrimString(subject);
445
-
447
+
446
448
  if (RegexMatch(subject, NamedActionHeaderRegex)) {
447
449
  return DependentActionType;
448
450
  }
449
-
451
+
450
452
  CaptureGroups captureGroups;
451
453
  if (RegexCapture(subject, ActionHeaderRegex, captureGroups, 3)) {
452
-
454
+
453
455
  if (captureGroups[2].empty()) {
454
456
  return DependentActionType;
455
457
  }
@@ -457,7 +459,7 @@ namespace snowcrash {
457
459
  return CompleteActionType;
458
460
  }
459
461
  }
460
-
462
+
461
463
  return NotActionType;
462
464
  }
463
465
 
@@ -465,20 +467,20 @@ namespace snowcrash {
465
467
  static void actionHTTPMethodAndName(const MarkdownNodeIterator& node,
466
468
  mdp::ByteBuffer& method,
467
469
  mdp::ByteBuffer& name) {
468
-
470
+
469
471
  CaptureGroups captureGroups;
470
472
  mdp::ByteBuffer subject, remaining;
471
-
473
+
472
474
  subject = GetFirstLine(node->text, remaining);
473
475
  TrimString(subject);
474
-
476
+
475
477
  if (RegexCapture(subject, ActionHeaderRegex, captureGroups, 3)) {
476
478
  method = captureGroups[1];
477
479
  } else if (RegexCapture(subject, NamedActionHeaderRegex, captureGroups, 3)) {
478
480
  name = captureGroups[1];
479
481
  method = captureGroups[2];
480
482
  }
481
-
483
+
482
484
  return;
483
485
  }
484
486
 
@@ -14,7 +14,7 @@
14
14
  #include "CodeBlockUtility.h"
15
15
 
16
16
  namespace snowcrash {
17
-
17
+
18
18
  /// Asset signature
19
19
  enum AssetSignature {
20
20
  NoAssetSignature = 0,
@@ -23,7 +23,7 @@ namespace snowcrash {
23
23
  SchemaAssetSignature, /// < Explicit Schema asset
24
24
  UndefinedAssetSignature = -1
25
25
  };
26
-
26
+
27
27
  /** Body matching regex */
28
28
  const char* const BodyRegex = "^[[:blank:]]*[Bb]ody[[:blank:]]*$";
29
29
 
@@ -35,13 +35,13 @@ namespace snowcrash {
35
35
  */
36
36
  template<>
37
37
  struct SectionProcessor<Asset> : public SectionProcessorBase<Asset> {
38
-
38
+
39
39
  static MarkdownNodeIterator processSignature(const MarkdownNodeIterator& node,
40
40
  const MarkdownNodes& siblings,
41
41
  SectionParserData& pd,
42
42
  SectionLayout& layout,
43
- ParseResult<Asset>& out) {
44
-
43
+ const ParseResultRef<Asset>& out) {
44
+
45
45
  out.node = "";
46
46
  CodeBlockUtility::signatureContentAsCodeBlock(node, pd, out.report, out.node);
47
47
 
@@ -51,11 +51,11 @@ namespace snowcrash {
51
51
 
52
52
  return ++MarkdownNodeIterator(node);
53
53
  }
54
-
54
+
55
55
  static MarkdownNodeIterator processDescription(const MarkdownNodeIterator& node,
56
56
  const MarkdownNodes& siblings,
57
57
  SectionParserData& pd,
58
- ParseResult<Asset>& out) {
58
+ const ParseResultRef<Asset>& out) {
59
59
 
60
60
  return node;
61
61
  }
@@ -63,8 +63,8 @@ namespace snowcrash {
63
63
  static MarkdownNodeIterator processContent(const MarkdownNodeIterator& node,
64
64
  const MarkdownNodes& siblings,
65
65
  SectionParserData& pd,
66
- ParseResult<Asset>& out) {
67
-
66
+ const ParseResultRef<Asset>& out) {
67
+
68
68
  mdp::ByteBuffer content;
69
69
  CodeBlockUtility::contentAsCodeBlock(node, pd, out.report, content);
70
70
 
@@ -76,18 +76,18 @@ namespace snowcrash {
76
76
 
77
77
  return ++MarkdownNodeIterator(node);
78
78
  }
79
-
79
+
80
80
  static bool isDescriptionNode(const MarkdownNodeIterator& node,
81
81
  SectionType sectionType) {
82
82
  return false;
83
83
  }
84
-
84
+
85
85
  static bool isContentNode(const MarkdownNodeIterator& node,
86
86
  SectionType sectionType) {
87
87
 
88
88
  return (SectionKeywordSignature(node) == UndefinedSectionType);
89
89
  }
90
-
90
+
91
91
  static SectionType sectionType(const MarkdownNodeIterator& node) {
92
92
  if (node->type == mdp::ListItemMarkdownNodeType
93
93
  && !node->children().empty()) {
@@ -101,7 +101,7 @@ namespace snowcrash {
101
101
 
102
102
  case SchemaAssetSignature:
103
103
  return SchemaSectionType;
104
-
104
+
105
105
  default:
106
106
  return UndefinedSectionType;
107
107
  }
@@ -109,24 +109,24 @@ namespace snowcrash {
109
109
 
110
110
  return UndefinedSectionType;
111
111
  }
112
-
112
+
113
113
  /** Resolve asset signature */
114
114
  static AssetSignature assetSignature(const MarkdownNodeIterator& node) {
115
115
 
116
116
  mdp::ByteBuffer remaining, subject = node->children().front().text;
117
117
  subject = GetFirstLine(subject, remaining);
118
118
  TrimString(subject);
119
-
119
+
120
120
  if (RegexMatch(subject, BodyRegex))
121
121
  return BodyAssetSignature;
122
122
 
123
123
  if (RegexMatch(subject, SchemaRegex))
124
124
  return SchemaAssetSignature;
125
-
125
+
126
126
  return NoAssetSignature;
127
127
  }
128
128
  };
129
-
129
+
130
130
  /** Asset Section Parser */
131
131
  typedef SectionParser<Asset, ListSectionAdapter> AssetParser;
132
132
  }
@@ -13,6 +13,7 @@
13
13
  #include <string>
14
14
  #include <utility>
15
15
  #include "Platform.h"
16
+ #include "MarkdownNode.h"
16
17
 
17
18
  /**
18
19
  * API Blueprint Abstract Syntax Tree
@@ -22,36 +23,36 @@
22
23
  */
23
24
 
24
25
  namespace snowcrash {
25
-
26
+
26
27
  /** Name of a an API Blueprint entity. */
27
28
  typedef std::string Name;
28
29
 
29
- /**
30
+ /**
30
31
  * \brief An API Blueprint entity Description.
31
32
  *
32
- * Depending on parser setting the description might be
33
+ * Depending on parser setting the description might be
33
34
  * rendered HTML from Markdown or raw Markdown.
34
35
  */
35
36
  typedef std::string Description;
36
-
37
+
37
38
  /** URI */
38
39
  typedef std::string URI;
39
-
40
+
40
41
  /** URI template */
41
42
  typedef std::string URITemplate;
42
-
43
+
43
44
  /** HTTP Method */
44
45
  typedef std::string HTTPMethod;
45
46
 
46
47
  /** Parameter Type */
47
48
  typedef std::string Type;
48
-
49
+
49
50
  /** Parameter Value */
50
51
  typedef std::string Value;
51
52
 
52
53
  /** A generic key - value pair */
53
54
  typedef std::pair<std::string, std::string> KeyValuePair;
54
-
55
+
55
56
  /**
56
57
  * Default Container for collections.
57
58
  *
@@ -63,18 +64,18 @@ namespace snowcrash {
63
64
  typedef typename std::vector<T>::iterator iterator;
64
65
  typedef typename std::vector<T>::const_iterator const_iterator;
65
66
  };
66
-
67
+
67
68
  /** An asset data */
68
69
  typedef std::string Asset;
69
70
 
70
- /**
71
+ /**
71
72
  * \brief Metadata key-value pair,
72
73
  *
73
74
  * E.g. "HOST: http://acme.com"
74
75
  */
75
76
  typedef KeyValuePair Metadata;
76
77
 
77
- /**
78
+ /**
78
79
  * \brief Header key-value pair.
79
80
  *
80
81
  * E.g. "Content-Type: application/json"
@@ -86,7 +87,7 @@ namespace snowcrash {
86
87
 
87
88
  /** Headers */
88
89
  typedef Collection<Header>::type Headers;
89
-
90
+
90
91
  /** Collection of Parameter Values */
91
92
  typedef Collection<Value>::type Values;
92
93
 
@@ -96,28 +97,28 @@ namespace snowcrash {
96
97
  OptionalParameterUse,
97
98
  RequiredParameterUse
98
99
  };
99
-
100
+
100
101
  /** Parameter */
101
102
  struct Parameter {
102
-
103
+
103
104
  /** Parameter Name */
104
105
  Name name;
105
-
106
+
106
107
  /** Parameter Description */
107
108
  Description description;
108
-
109
+
109
110
  /** Type */
110
111
  Type type;
111
-
112
+
112
113
  /** Required flag */
113
114
  ParameterUse use;
114
-
115
+
115
116
  /** Default Value, applicable only when `required == false` */
116
117
  Value defaultValue;
117
-
118
+
118
119
  /** Example Value */
119
120
  Value exampleValue;
120
-
121
+
121
122
  /** Enumeration of possible values */
122
123
  Values values;
123
124
  };
@@ -125,50 +126,84 @@ namespace snowcrash {
125
126
  /** Source Map of Collection of Parameters */
126
127
  typedef Collection<Parameter>::type Parameters;
127
128
 
128
- /** Name of a symbol */
129
- typedef std::string SymbolName;
129
+ /** Identifier(name) of Reference */
130
+ typedef std::string Identifier;
131
+
132
+ /** Reference */
133
+ struct Reference {
134
+
135
+ /** Reference Resolution State */
136
+ enum State {
137
+ StateUnresolved, // Reference unresolved (undefined)
138
+ StatePending, // Reference resolution pending
139
+ StateResolved // Reference resolved successfully
140
+ };
141
+
142
+ /** Reference Type */
143
+ enum ReferenceType {
144
+ SymbolReference // Reference as symbol
145
+ };
146
+
147
+ /** Identifier */
148
+ Identifier id;
149
+
150
+ /** Type */
151
+ ReferenceType type;
152
+
153
+ struct ReferenceMetadata {
154
+
155
+ /** Markdown AST reference source node (for source map) */
156
+ mdp::MarkdownNodeIterator node;
157
+
158
+ /** Reference resolution state */
159
+ State state;
160
+ };
161
+
162
+ /** Metadata for the reference */
163
+ ReferenceMetadata meta;
164
+ };
130
165
 
131
166
  /**
132
167
  * Payload
133
168
  */
134
169
  struct Payload {
135
-
170
+
136
171
  /** A Payload Name */
137
172
  Name name;
138
-
173
+
139
174
  /** Payload Description */
140
175
  Description description;
141
-
176
+
142
177
  /** Payload-specific Parameters */
143
178
  Parameters parameters;
144
-
179
+
145
180
  /** Payload-specific Headers */
146
181
  Headers headers;
147
-
182
+
148
183
  /** Body */
149
184
  Asset body;
150
-
185
+
151
186
  /** Schema */
152
187
  Asset schema;
153
188
 
154
- /** Symbol */
155
- SymbolName symbol;
189
+ /** Reference */
190
+ Reference reference;
156
191
  };
157
-
192
+
158
193
  /** Resource Model */
159
194
  typedef Payload ResourceModel;
160
-
195
+
161
196
  /** Request */
162
197
  typedef Payload Request;
163
-
164
- /**
198
+
199
+ /**
165
200
  * \brief Response
166
201
  *
167
202
  * A payload returned in a response to an action.
168
203
  * Payload's name represents the HTTP status code.
169
204
  */
170
205
  typedef Payload Response;
171
-
206
+
172
207
  /** Collection of Requests */
173
208
  typedef Collection<Request>::type Requests;
174
209
 
@@ -179,20 +214,20 @@ namespace snowcrash {
179
214
  * An HTTP transaction example.
180
215
  */
181
216
  struct TransactionExample {
182
-
217
+
183
218
  /** An example name */
184
219
  Name name;
185
-
220
+
186
221
  /** Description */
187
222
  Description description;
188
-
223
+
189
224
  /** Requests */
190
225
  Requests requests;
191
-
226
+
192
227
  /** Responses */
193
228
  Responses responses;
194
229
  };
195
-
230
+
196
231
  /** Collection of Transaction examples */
197
232
  typedef Collection<TransactionExample>::type TransactionExamples;
198
233
 
@@ -200,37 +235,37 @@ namespace snowcrash {
200
235
  * Action
201
236
  */
202
237
  struct Action {
203
-
238
+
204
239
  /** HTTP method */
205
240
  HTTPMethod method;
206
-
241
+
207
242
  /** An Action name */
208
243
  Name name;
209
-
244
+
210
245
  /** Description */
211
246
  Description description;
212
-
247
+
213
248
  /** Action-specific Parameters */
214
249
  Parameters parameters;
215
-
216
- /**
250
+
251
+ /**
217
252
  * \brief Action-specific HTTP headers
218
253
  *
219
254
  * DEPRECATION WARNING:
220
255
  * --------------------
221
256
  *
222
257
  * This AST node is build for deprecated API Blueprint syntax
223
- * and as such it will be removed in a future version of
224
- * Snow Crash.
225
- *
258
+ * and as such it will be removed in a future version of
259
+ * Snow Crash.
260
+ *
226
261
  * Use respective payload's header collection instead.
227
262
  */
228
263
  DEPRECATED Headers headers;
229
-
264
+
230
265
  /** Transactions examples */
231
266
  TransactionExamples examples;
232
267
  };
233
-
268
+
234
269
  /** Collection of Actions */
235
270
  typedef Collection<Action>::type Actions;
236
271
 
@@ -238,22 +273,22 @@ namespace snowcrash {
238
273
  * API Resource
239
274
  */
240
275
  struct Resource {
241
-
276
+
242
277
  /** URI template */
243
278
  URITemplate uriTemplate;
244
-
279
+
245
280
  /** A Resource Name */
246
281
  Name name;
247
-
282
+
248
283
  /** Description of the resource */
249
284
  Description description;
250
-
285
+
251
286
  /** Model representing this Resource */
252
287
  ResourceModel model;
253
-
288
+
254
289
  /** Parameters */
255
290
  Parameters parameters;
256
-
291
+
257
292
  /**
258
293
  * \brief Resource-specific HTTP Headers
259
294
  *
@@ -267,11 +302,11 @@ namespace snowcrash {
267
302
  * Use respective payload's header collection instead.
268
303
  */
269
304
  DEPRECATED Headers headers;
270
-
305
+
271
306
  /** A set of Actions specified for this Resource */
272
307
  Actions actions;
273
308
  };
274
-
309
+
275
310
  /** Collection of Resources */
276
311
  typedef Collection<Resource>::type Resources;
277
312
 
@@ -279,13 +314,13 @@ namespace snowcrash {
279
314
  * Group of API Resources
280
315
  */
281
316
  struct ResourceGroup {
282
-
317
+
283
318
  /** A Group Name */
284
319
  Name name;
285
-
320
+
286
321
  /** Group description */
287
322
  Description description;
288
-
323
+
289
324
  /** Resources */
290
325
  Resources resources;
291
326
  };
@@ -293,23 +328,23 @@ namespace snowcrash {
293
328
  /** Collection of Resource groups */
294
329
  typedef Collection<ResourceGroup>::type ResourceGroups;
295
330
 
296
- /**
331
+ /**
297
332
  * \brief API Blueprint AST
298
333
  *
299
334
  * This is top-level (or root if you prefer) of API Blueprint abstract syntax tree.
300
335
  * Start reading a parsed API here.
301
336
  */
302
337
  struct Blueprint {
303
-
338
+
304
339
  /** Metadata */
305
340
  MetadataCollection metadata;
306
-
341
+
307
342
  /** The API Name */
308
343
  Name name;
309
344
 
310
345
  /** An API Overview description */
311
346
  Description description;
312
-
347
+
313
348
  /** The set of API Resource Groups */
314
349
  ResourceGroups resourceGroups;
315
350
  };