redsnow 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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
  };