redsnow 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 27dcef9308792bec5bcc00cd275633bad9012160
4
- data.tar.gz: 78544e79fddb7c1d3ba08e4c17c6f95b7e74d7e5
3
+ metadata.gz: 5a8a38283797a2cafbccf55b139a0b19e1c4eb8a
4
+ data.tar.gz: 276d98c64b94e5e1ae32b5843732a2940e60fde0
5
5
  SHA512:
6
- metadata.gz: b43a113c6ffd35e6eca1371838c3cb62ca3a8f851f6159bbe34f73cb49178443a57781eed1fa41e6d17f9665650526cbf82eb047efc48702934ba9fe624b93a1
7
- data.tar.gz: e29214475daf2192389a9869610ab5c851c2146cecc09356d2e0e6999e8c641ceca3e8dbf7ea79eb404391e79e5012cb1557fca0fd9824c029f549737266756a
6
+ metadata.gz: ab1ebb2eb3f8453d1d3813b737faeea77189e6e945c4f47fe5a035e8c7194e931c7b23587333b2fad55215d76d14517572d62bdf492eb70b5d44c3244f3c0cca
7
+ data.tar.gz: 36cbd238f7710f0cab49ba18791b369ce842d011831a1e3cb88300902ee37e5426e963b642987f16504ec8354520ea988e105d65e4ee7ede30a845bc8383079b
@@ -1,4 +1,5 @@
1
1
  # Changelog
2
+ - 0.1.0 - Snow Crash updated to [0.12.1](https://github.com/apiaryio/snowcrash/releases/tag/v0.12.1)
2
3
  - 0.0.8 - Add support for [Parse Result](https://github.com/apiaryio/api-blueprint-ast/blob/master/Parse%20Result.md)
3
4
  - 0.0.7 - Fixed dependency, first public version
4
5
  - 0.0.1 - 0.0.6 Developement versions
Binary file
@@ -22,17 +22,13 @@
22
22
  #define PARAMETER_VALUE "`([^`]+)`"
23
23
 
24
24
  /** Parameter Identifier */
25
- #define PARAMETER_IDENTIFIER "([[:alnum:]_.-]+)"
25
+ #define PARAMETER_IDENTIFIER "(([[:alnum:]_.-])*|(%[A-Fa-f0-9]{2})*)+"
26
26
 
27
27
  /** Lead in and out for comma separated values regex */
28
28
  #define CSV_LEADINOUT "[[:blank:]]*,?[[:blank:]]*"
29
29
 
30
30
  namespace snowcrashconst {
31
31
 
32
- /** Parameter Abbreviated definition matching regex */
33
- const char* const ParameterAbbrevDefinitionRegex = "^" PARAMETER_IDENTIFIER \
34
- "([[:blank:]]*=[[:blank:]]*`([^`]*)`[[:blank:]]*)?([[:blank:]]*\\(([^)]*)\\)[[:blank:]]*)?([[:blank:]]*\\.\\.\\.[[:blank:]]*(.*))?$";
35
-
36
32
  /** Parameter Required matching regex */
37
33
  const char* const ParameterRequiredRegex = "^[[:blank:]]*[Rr]equired[[:blank:]]*$";
38
34
 
@@ -53,6 +49,8 @@ namespace snowcrashconst {
53
49
 
54
50
  /** Values expected content */
55
51
  const char* const ExpectedValuesContent = "nested list of possible parameter values, one element per list item e.g. '`value`'";
52
+
53
+ const std::string DescriptionIdentifier = "...";
56
54
  }
57
55
 
58
56
  namespace snowcrash {
@@ -91,7 +89,65 @@ namespace snowcrash {
91
89
 
92
90
  return UndefinedSectionType;
93
91
  }
94
-
92
+
93
+ /** Determine if a signature is a valid parameter*/
94
+ FORCEINLINE bool IsValidParameterSignature(const SourceData& signature) {
95
+
96
+ SourceData innerSignature = signature;
97
+ innerSignature = TrimString(innerSignature);
98
+
99
+ if (innerSignature.length() == 0) {
100
+ return false; // Empty string, invalid
101
+ }
102
+
103
+ size_t firstSpace = innerSignature.find(" ");
104
+ if (firstSpace == std::string::npos) {
105
+ return RegexMatch(innerSignature, "^" PARAMETER_IDENTIFIER "$");
106
+ }
107
+
108
+ std::string paramName = innerSignature.substr(0, firstSpace);
109
+ if (!RegexMatch(paramName, "^" PARAMETER_IDENTIFIER "$")) {
110
+ return false; // Invalid param name
111
+ }
112
+ // Remove param name
113
+ innerSignature = innerSignature.substr(firstSpace + 1);
114
+
115
+ size_t descriptionPos = innerSignature.find(snowcrashconst::DescriptionIdentifier);
116
+ // Remove description
117
+ if (descriptionPos != std::string::npos) {
118
+ innerSignature = innerSignature.substr(0, descriptionPos);
119
+ innerSignature = TrimString(innerSignature);
120
+ }
121
+
122
+ size_t attributesPos = innerSignature.find("(");
123
+ if (attributesPos != std::string::npos) {
124
+ size_t endOfAttributesPos = innerSignature.find_last_of(")");
125
+ if (endOfAttributesPos == std::string::npos) {
126
+ return false; // Expecting close of attributes
127
+ }
128
+ // Remove attributes
129
+ innerSignature = innerSignature.substr(0, attributesPos);
130
+ innerSignature = TrimString(innerSignature);
131
+ }
132
+
133
+ if (innerSignature.length() == 0) {
134
+ return true;
135
+ }
136
+
137
+ if (innerSignature.substr(0,1) == "=") {
138
+ innerSignature = innerSignature.substr(1);
139
+ innerSignature = TrimString(innerSignature);
140
+ if (innerSignature.length() == 0) {
141
+ return false; // No default value
142
+ }
143
+ if (innerSignature.substr(0,1) == "`" && innerSignature.substr(innerSignature.length()-1,1) == "`") {
144
+ return true;
145
+ }
146
+ }
147
+
148
+ return false;
149
+ }
150
+
95
151
  /**
96
152
  * Returns true if given block has a parameter definition signature, false otherwise.
97
153
  */
@@ -114,9 +170,9 @@ namespace snowcrash {
114
170
  SourceData remainingContent;
115
171
  SourceData content = GetListItemSignature(begin, end, remainingContent);
116
172
  content = TrimString(content);
117
- return RegexMatch(content, snowcrashconst::ParameterAbbrevDefinitionRegex);
173
+ return IsValidParameterSignature(content);
118
174
  }
119
-
175
+
120
176
  /**
121
177
  * Block Classifier, Parameter context.
122
178
  */
@@ -230,6 +286,8 @@ namespace snowcrash {
230
286
  return result;
231
287
 
232
288
  }
289
+
290
+
233
291
 
234
292
  /**
235
293
  * Retrieve and process parameter definition signature.
@@ -240,41 +298,57 @@ namespace snowcrash {
240
298
  Result& result,
241
299
  Parameter& parameter) {
242
300
 
243
-
244
301
  // Set default values
245
302
  parameter.use = UndefinedParameterUse;
246
303
 
247
304
  // Process signature
248
305
  SourceData remainingContent;
249
306
  SourceData signature = GetListItemSignature(cur, section.bounds.second, remainingContent);
250
-
307
+
251
308
  TrimString(signature);
252
- CaptureGroups captureGroups;
253
- if (RegexCapture(signature, snowcrashconst::ParameterAbbrevDefinitionRegex, captureGroups) &&
254
- captureGroups.size() == 8) {
255
-
256
- // Name
257
- parameter.name = captureGroups[1];
258
- TrimString(parameter.name);
259
-
260
- // Default value
261
- if (!captureGroups[3].empty())
262
- parameter.defaultValue = captureGroups[3];
263
-
264
- // Additional Attributes
265
- if (!captureGroups[5].empty())
266
- ProcessSignatureAdditionalTraits(section, cur, captureGroups[5], sourceData, result, parameter);
267
-
268
- // Description
269
- if (!captureGroups[7].empty())
270
- parameter.description = captureGroups[7];
309
+
310
+ if (IsValidParameterSignature(signature)) {
271
311
 
272
- if (!remainingContent.empty()) {
273
- parameter.description += "\n";
274
- parameter.description += remainingContent;
275
- parameter.description += "\n";
312
+ SourceData innerSignature = signature;
313
+ innerSignature = TrimString(innerSignature);
314
+
315
+ size_t firstSpace = innerSignature.find(" ");
316
+ if (firstSpace == std::string::npos) {
317
+ // Name
318
+ parameter.name = signature;
319
+ }
320
+ else {
321
+ parameter.name = innerSignature.substr(0, firstSpace);
322
+ innerSignature = innerSignature.substr(firstSpace + 1);
323
+ size_t descriptionPos = innerSignature.find(snowcrashconst::DescriptionIdentifier);
324
+ if (descriptionPos != std::string::npos) {
325
+ // Description
326
+ parameter.description = innerSignature.substr(descriptionPos);
327
+ parameter.description = TrimString(parameter.description.replace(0, snowcrashconst::DescriptionIdentifier.length(), ""));
328
+ innerSignature = innerSignature.substr(0, descriptionPos);
329
+ innerSignature = TrimString(innerSignature);
330
+ }
331
+
332
+ size_t attributesPos = innerSignature.find("(");
333
+ if (attributesPos != std::string::npos) {
334
+ size_t endOfAttributesPos = innerSignature.find_last_of(")");
335
+ if (endOfAttributesPos - attributesPos > 1) {
336
+ std::string attributes = innerSignature.substr(attributesPos, endOfAttributesPos - attributesPos);
337
+ attributes = attributes.substr(1);
338
+ ProcessSignatureAdditionalTraits(section, cur, attributes, sourceData, result, parameter);
339
+ innerSignature = innerSignature.substr(0, attributesPos);
340
+ innerSignature = TrimString(innerSignature);
341
+ }
342
+ }
343
+
344
+ if (innerSignature.length() > 0) {
345
+ // Remove =
346
+ parameter.defaultValue = innerSignature;
347
+ parameter.defaultValue.erase(std::remove(parameter.defaultValue.begin(), parameter.defaultValue.end(), '='), parameter.defaultValue.end());
348
+ parameter.defaultValue.erase(std::remove(parameter.defaultValue.begin(), parameter.defaultValue.end(), '`'), parameter.defaultValue.end());
349
+ parameter.defaultValue = TrimString(parameter.defaultValue);
350
+ }
276
351
  }
277
-
278
352
  // Check possible required vs default clash
279
353
  if (parameter.use != OptionalParameterUse &&
280
354
  !parameter.defaultValue.empty()) {
@@ -290,7 +364,6 @@ namespace snowcrash {
290
364
  LogicalErrorWarning,
291
365
  sourceBlock));
292
366
  }
293
-
294
367
  }
295
368
  else {
296
369
  // ERR: unable to parse
@@ -301,6 +374,7 @@ namespace snowcrash {
301
374
  sourceBlock));
302
375
  }
303
376
  }
377
+
304
378
 
305
379
  /** Parse additional parameter attributes from abbrev definition bracket */
306
380
  static void ProcessSignatureAdditionalTraits(const BlueprintSection& section,
@@ -562,6 +636,7 @@ namespace snowcrash {
562
636
  return;
563
637
  }
564
638
 
639
+
565
640
  };
566
641
 
567
642
  typedef BlockParser<Parameter, SectionParser<Parameter> > ParameterDefinitionParser;
@@ -16,7 +16,7 @@
16
16
 
17
17
  #define SNOWCRASH_MAJOR_VERSION 0
18
18
  #define SNOWCRASH_MINOR_VERSION 12
19
- #define SNOWCRASH_PATCH_VERSION 0
19
+ #define SNOWCRASH_PATCH_VERSION 1
20
20
 
21
21
  #define SNOWCRASH_VERSION_IS_RELEASE 1
22
22
 
@@ -2,7 +2,7 @@ require 'formula'
2
2
 
3
3
  class Snowcrash < Formula
4
4
  homepage 'http://apiblueprint.org'
5
- head 'https://github.com/apiaryio/snowcrash.git', :tag => 'v0.12.0'
5
+ head 'https://github.com/apiaryio/snowcrash.git', :tag => 'v0.12.1'
6
6
 
7
7
  def install
8
8
  system "./configure"
@@ -1,4 +1,4 @@
1
1
  module RedSnow
2
2
  # Gem version
3
- VERSION = "0.0.8"
3
+ VERSION = "0.1.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redsnow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ladislav Prskavec