redsnow 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +2 -0
  3. data/ext/snowcrash/Makefile +1 -1
  4. data/ext/snowcrash/bin/snowcrash +0 -0
  5. data/ext/snowcrash/configure +9 -9
  6. data/ext/snowcrash/ext/markdown-parser/Makefile +87 -0
  7. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/CONTRIBUTING.md +0 -0
  8. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/Makefile +2 -1
  9. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/Makefile.win +0 -0
  10. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/examples/smartypants.c +0 -0
  11. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/examples/sundown.c +0 -0
  12. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/houdini.h +0 -0
  13. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/houdini_href_e.c +0 -0
  14. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/houdini_html_e.c +0 -0
  15. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/html.c +0 -0
  16. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/html.h +0 -0
  17. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/html_smartypants.c +0 -0
  18. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html_block_names.txt +0 -0
  19. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/autolink.c +0 -0
  20. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/autolink.h +0 -0
  21. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/buffer.c +0 -0
  22. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/buffer.h +1 -1
  23. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/html_blocks.h +0 -0
  24. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/markdown.c +9 -3
  25. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/markdown.h +0 -0
  26. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/src_map.c +11 -7
  27. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/src_map.h +1 -1
  28. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/stack.c +0 -0
  29. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/stack.h +0 -0
  30. data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/sundown.def +0 -0
  31. data/ext/snowcrash/ext/markdown-parser/msvc/markdown/markdown.vcproj +188 -0
  32. data/ext/snowcrash/ext/markdown-parser/msvc/msvc.sln +38 -0
  33. data/ext/snowcrash/ext/markdown-parser/msvc/sundown/sundown.vcproj +206 -0
  34. data/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.cc +92 -0
  35. data/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.h +82 -0
  36. data/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.cc +152 -0
  37. data/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.h +103 -0
  38. data/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.cc +388 -0
  39. data/ext/snowcrash/{src → ext/markdown-parser/src}/MarkdownParser.h +43 -33
  40. data/ext/snowcrash/snowcrash.gyp +114 -63
  41. data/ext/snowcrash/src/ActionParser.h +334 -398
  42. data/ext/snowcrash/src/AssetParser.h +82 -171
  43. data/ext/snowcrash/src/Blueprint.h +7 -2
  44. data/ext/snowcrash/src/BlueprintParser.h +212 -286
  45. data/ext/snowcrash/src/BlueprintUtility.h +2 -2
  46. data/ext/snowcrash/src/CBlueprint.h +1 -1
  47. data/ext/snowcrash/src/CSourceAnnotation.cc +11 -11
  48. data/ext/snowcrash/src/CSourceAnnotation.h +9 -9
  49. data/ext/snowcrash/src/CodeBlockUtility.h +199 -149
  50. data/ext/snowcrash/src/HeadersParser.h +197 -0
  51. data/ext/snowcrash/src/ParameterParser.h +429 -0
  52. data/ext/snowcrash/src/ParametersParser.h +136 -211
  53. data/ext/snowcrash/src/PayloadParser.h +458 -562
  54. data/ext/snowcrash/src/Platform.h +0 -3
  55. data/ext/snowcrash/src/ResourceGroupParser.h +183 -164
  56. data/ext/snowcrash/src/ResourceParser.h +325 -493
  57. data/ext/snowcrash/src/Section.cc +42 -0
  58. data/ext/snowcrash/src/Section.h +47 -0
  59. data/ext/snowcrash/src/SectionParser.h +229 -0
  60. data/ext/snowcrash/src/SectionParserData.h +81 -0
  61. data/ext/snowcrash/src/SectionProcessor.h +211 -0
  62. data/ext/snowcrash/src/Signature.cc +74 -0
  63. data/ext/snowcrash/src/Signature.h +32 -0
  64. data/ext/snowcrash/src/SourceAnnotation.h +7 -20
  65. data/ext/snowcrash/src/StringUtility.h +30 -10
  66. data/ext/snowcrash/src/SymbolTable.h +7 -7
  67. data/ext/snowcrash/src/UriTemplateParser.cc +10 -10
  68. data/ext/snowcrash/src/UriTemplateParser.h +11 -14
  69. data/ext/snowcrash/src/ValuesParser.h +122 -0
  70. data/ext/snowcrash/src/Version.h +2 -2
  71. data/ext/snowcrash/src/csnowcrash.cc +5 -5
  72. data/ext/snowcrash/src/csnowcrash.h +3 -3
  73. data/ext/snowcrash/src/snowcrash.cc +74 -4
  74. data/ext/snowcrash/src/snowcrash.h +9 -4
  75. data/ext/snowcrash/src/snowcrash/snowcrash.cc +16 -16
  76. data/ext/snowcrash/tools/homebrew/snowcrash.rb +3 -2
  77. data/ext/snowcrash/vcbuild.bat +13 -4
  78. data/lib/redsnow.rb +5 -5
  79. data/lib/redsnow/binding.rb +1 -1
  80. data/lib/redsnow/blueprint.rb +33 -2
  81. data/lib/redsnow/parseresult.rb +7 -4
  82. data/lib/redsnow/version.rb +1 -1
  83. data/test/redsnow_binding_test.rb +6 -6
  84. data/test/redsnow_parseresult_test.rb +1 -1
  85. metadata +62 -42
  86. data/ext/snowcrash/src/BlockUtility.h +0 -186
  87. data/ext/snowcrash/src/BlueprintParserCore.h +0 -190
  88. data/ext/snowcrash/src/BlueprintSection.h +0 -140
  89. data/ext/snowcrash/src/DescriptionSectionUtility.h +0 -156
  90. data/ext/snowcrash/src/HeaderParser.h +0 -289
  91. data/ext/snowcrash/src/ListBlockUtility.h +0 -273
  92. data/ext/snowcrash/src/ListUtility.h +0 -95
  93. data/ext/snowcrash/src/MarkdownBlock.cc +0 -176
  94. data/ext/snowcrash/src/MarkdownBlock.h +0 -93
  95. data/ext/snowcrash/src/MarkdownParser.cc +0 -266
  96. data/ext/snowcrash/src/ParameterDefinitonParser.h +0 -645
  97. data/ext/snowcrash/src/Parser.cc +0 -71
  98. data/ext/snowcrash/src/Parser.h +0 -29
  99. data/ext/snowcrash/src/ParserCore.cc +0 -120
  100. data/ext/snowcrash/src/ParserCore.h +0 -82
  101. data/ext/snowcrash/src/SectionUtility.h +0 -142
@@ -1,71 +0,0 @@
1
- //
2
- // Parser.cpp
3
- // snowcrash
4
- //
5
- // Created by Zdenek Nemec on 4/8/13.
6
- // Copyright (c) 2013 Apiary Inc. All rights reserved.
7
- //
8
-
9
- #include <exception>
10
- #include <sstream>
11
- #include "Parser.h"
12
- #include "MarkdownParser.h"
13
- #include "BlueprintParser.h"
14
-
15
- using namespace snowcrash;
16
-
17
- const int SourceAnnotation::OK = 0;
18
-
19
- // Check source for unsupported character \t & \r
20
- // Returns true if passed (not found), false otherwise
21
- static bool CheckSource(const SourceData& source, Result& result)
22
- {
23
- std::string::size_type pos = source.find("\t");
24
- if (pos != std::string::npos) {
25
- result.error = Error("the use of tab(s) '\\t' in source data isn't currently supported, please contact makers",
26
- 2,
27
- MapSourceDataBlock(MakeSourceDataBlock(pos, 1), source));
28
- return false;
29
- }
30
-
31
- pos = source.find("\r");
32
- if (pos != std::string::npos) {
33
- result.error = Error("the use of carriage return(s) '\\r' in source data isn't currently supported, please contact makers",
34
- 2,
35
- MapSourceDataBlock(MakeSourceDataBlock(pos, 1), source));
36
- return false;
37
- }
38
-
39
- return true;
40
- }
41
-
42
- void Parser::parse(const SourceData& source, BlueprintParserOptions options, Result& result, Blueprint& blueprint)
43
- {
44
- try {
45
-
46
- // Sanity Check
47
- if (!CheckSource(source, result))
48
- return;
49
-
50
- // Parse Markdown
51
- MarkdownBlock::Stack markdown;
52
- MarkdownParser markdownParser;
53
- markdownParser.parse(source, result, markdown);
54
-
55
- if (result.error.code != Error::OK)
56
- return;
57
-
58
- // Parse Blueprint
59
- BlueprintParser::Parse(source, markdown, options, result, blueprint);
60
- }
61
- catch (const std::exception& e) {
62
-
63
- std::stringstream ss;
64
- ss << "parser exception: '" << e.what() << "'";
65
- result.error = Error(ss.str(), 1);
66
- }
67
- catch (...) {
68
-
69
- result.error = Error("parser exception has occured", 1);
70
- }
71
- }
@@ -1,29 +0,0 @@
1
- //
2
- // Parser.h
3
- // snowcrash
4
- //
5
- // Created by Zdenek Nemec on 4/8/13.
6
- // Copyright (c) 2013 Apiary Inc. All rights reserved.
7
- //
8
-
9
- #ifndef SNOWCRASH_PARSER_H
10
- #define SNOWCRASH_PARSER_H
11
-
12
- #include <functional>
13
- #include "Blueprint.h"
14
- #include "BlueprintParserCore.h"
15
-
16
- namespace snowcrash {
17
-
18
- //
19
- // API Blueprint Parser
20
- //
21
- class Parser {
22
- public:
23
-
24
- // Parse source data into Blueprint AST
25
- void parse(const SourceData& source, BlueprintParserOptions options, Result& result, Blueprint& blueprint);
26
- };
27
- }
28
-
29
- #endif
@@ -1,120 +0,0 @@
1
- //
2
- // ParserCore.cc
3
- // snowcrash
4
- //
5
- // Created by Zdenek Nemec on 5/4/13.
6
- // Copyright (c) 2013 Apiary Inc. All rights reserved.
7
- //
8
-
9
- #include "ParserCore.h"
10
-
11
- using namespace snowcrash;
12
-
13
- SourceDataBlock snowcrash::MakeSourceDataBlock(size_t loc, size_t len)
14
- {
15
- SourceDataRange r;
16
- r.location = loc;
17
- r.length = len;
18
- return SourceDataBlock(1, r);
19
- }
20
-
21
- void snowcrash::AppendSourceDataBlock(SourceDataBlock& destination, const SourceDataBlock& append)
22
- {
23
- if (append.empty())
24
- return;
25
-
26
- if (destination.empty() ||
27
- append.front().location != destination.back().location + destination.back().length) {
28
- destination.insert(destination.end(), append.begin(), append.end());
29
- }
30
- else {
31
- // merge
32
- destination.back().length += append.front().length;
33
-
34
- if (append.size() > 1) {
35
- destination.insert(destination.end(), ++append.begin(), append.end());
36
- }
37
- }
38
- }
39
-
40
- SourceDataBlockPair snowcrash::SplitSourceDataBlock(const SourceDataBlock& block, size_t len)
41
- {
42
- if (block.empty())
43
- return std::make_pair(SourceDataBlock(), SourceDataBlock());
44
-
45
- SourceDataBlock first;
46
- SourceDataBlock second;
47
-
48
- size_t remain = len;
49
- for (SourceDataBlock::const_iterator it = block.begin(); it != block.end(); ++it) {
50
-
51
- if (remain == 0) {
52
- second.push_back(*it);
53
- continue;
54
- }
55
-
56
- if (remain >= it->length) {
57
- first.push_back(*it);
58
- remain -= it->length;
59
- continue;
60
- }
61
-
62
- if (remain < it->length) {
63
- SourceDataRange left = *it;
64
- left.length = remain;
65
- first.push_back(left);
66
-
67
- SourceDataRange right = *it;
68
- right.location += remain;
69
- right.length -= remain;
70
- second.push_back(right);
71
- }
72
- }
73
-
74
- return std::make_pair(first, second);
75
- }
76
-
77
- #define UTF8_CHAR_LEN( byte ) (( 0xE5000000 >> (( byte >> 3 ) & 0x1e )) & 3 ) + 1
78
-
79
- /** \returns Number of UTF8 characters in byte buffer */
80
- static size_t strnlen_utf8(const char* s, size_t len)
81
- {
82
- if (!s || !len)
83
- return 0;
84
-
85
- size_t i = 0, j = 0;
86
- while (s[i] && i < len) {
87
- i += UTF8_CHAR_LEN(s[i]);
88
- j++;
89
- }
90
- return j;
91
- }
92
-
93
- SourceCharactersRange snowcrash::MapSourceDataRange(const SourceDataRange& range, const SourceData& data)
94
- {
95
- if (data.empty())
96
- return SourceCharactersRange();
97
-
98
- size_t charLocation = 0;
99
- if (range.location > 0)
100
- charLocation = strnlen_utf8(data.c_str(), range.location);
101
-
102
- size_t charLength = 0;
103
- if (range.length > 0)
104
- charLength = strnlen_utf8(data.c_str() + range.location, range.length);
105
-
106
- SourceCharactersRange characterRange = {charLocation, charLength };
107
- return characterRange;
108
- }
109
-
110
- SourceCharactersBlock snowcrash::MapSourceDataBlock(const SourceDataBlock& block, const SourceData& data)
111
- {
112
- SourceCharactersBlock characterMap;
113
-
114
- for (SourceDataBlock::const_iterator it = block.begin(); it != block.end(); ++it) {
115
- SourceCharactersRange characterRange = MapSourceDataRange(*it, data);
116
- characterMap.push_back(characterRange);
117
- }
118
-
119
- return characterMap;
120
- }
@@ -1,82 +0,0 @@
1
- //
2
- // ParserCore.h
3
- // snowcrash
4
- //
5
- // Created by Zdenek Nemec on 5/4/13.
6
- // Copyright (c) 2013 Apiary Inc. All rights reserved.
7
- //
8
-
9
- #ifndef SNOWCRASH_PARSERCORE_H
10
- #define SNOWCRASH_PARSERCORE_H
11
-
12
- #include <string>
13
- #include <vector>
14
- #include "SourceAnnotation.h"
15
- #include "Platform.h"
16
-
17
- namespace snowcrash {
18
-
19
- /**
20
- * \brief Textual source data byte buffer. A markdown-formatted text.
21
- */
22
- typedef std::string SourceData;
23
-
24
- /**
25
- * \brief A byte range of data within the source data buffer.
26
- *
27
- * Important note: All ranges are in bytes not characters.
28
- */
29
- struct SourceDataRange {
30
- size_t location;
31
- size_t length;
32
- };
33
-
34
- /**
35
- * \brief A block of source data bytes - a byte map.
36
- *
37
- * NOTE: The block does not have to be continuous.
38
- * Data Blocks are in bytes not characters.
39
- */
40
- typedef std::vector<SourceDataRange> SourceDataBlock;
41
-
42
- /**
43
- * \brief Create a %SourceDataBlock with a range.
44
- * \param loc A location in source data buffer.
45
- * \param len Length of the range.
46
- */
47
- SourceDataBlock MakeSourceDataBlock(size_t loc, size_t len);
48
-
49
- /**
50
- * \brief Append %SourceDataBlock to existing block, merging continuous blocks.
51
- * \param destination A block to append to.
52
- * \param append A block to be appended.
53
- */
54
- void AppendSourceDataBlock(SourceDataBlock& destination, const SourceDataBlock& append);
55
-
56
- /**
57
- * \brief A generic pair of two blocks
58
- */
59
- typedef std::pair<SourceDataBlock, SourceDataBlock> SourceDataBlockPair;
60
-
61
- /**
62
- * \brief Splits %SourceDataBlock into two blocks.
63
- * \param block A block to be split.
64
- * \param len The length of first block after which the split occurs.
65
- */
66
- SourceDataBlockPair SplitSourceDataBlock(const SourceDataBlock& block, size_t len);
67
-
68
- /**
69
- * \brief Maps range of source data bytes into range of characters
70
- */
71
- SourceCharactersRange MapSourceDataRange(const SourceDataRange& range, const SourceData& data);
72
-
73
- /**
74
- * \brief Maps block of source data bytes into block of characters.
75
- * \param block A %SourceDataBlock to map into %SourceCharactersBlock
76
- * \param data A mapped source data.
77
- * \returns A character-map constructed from given byte map
78
- */
79
- SourceCharactersBlock MapSourceDataBlock(const SourceDataBlock& block, const SourceData& data);
80
- }
81
-
82
- #endif
@@ -1,142 +0,0 @@
1
- //
2
- // SectionUtility.h
3
- // snowcrash
4
- //
5
- // Created by Zdenek Nemec on 11/11/13.
6
- // Copyright (c) 2013 Apiary Inc. All rights reserved.
7
- //
8
-
9
- #ifndef SNOWCRASH_SECTIONUTILITY_H
10
- #define SNOWCRASH_SECTIONUTILITY_H
11
-
12
- #include "BlockUtility.h"
13
- #include "ListBlockUtility.h"
14
- #include "CodeBlockUtility.h"
15
-
16
- namespace snowcrash {
17
-
18
- /**
19
- * Compute expected indentation of a section
20
- */
21
- FORCEINLINE size_t SectionIndentationLevel(const BlueprintSection& section)
22
- {
23
- switch (section.type) {
24
- case ParameterValuesSectionType:
25
- return 2;
26
-
27
- case BodySectionType:
28
- case SchemaSectionType:
29
- case HeadersSectionType: // NOTE: Headers can be potentially both level 0 and 1
30
- return 1;
31
-
32
- default:
33
- return 0;
34
- }
35
- }
36
-
37
- /**
38
- * \brief Report & skip blocks in a foreign section.
39
- * \param section Section including the foreign section.
40
- * \param cur A cursor pointing to the beigin of the foreign section.
41
- * \return Standard section parse result pointing AFTER the last block parsed.
42
- */
43
- template <class T>
44
- FORCEINLINE ParseSectionResult HandleForeignSection(const BlueprintSection& section,
45
- const BlockIterator& cur,
46
- const SourceData& sourceData) {
47
-
48
- ParseSectionResult result = std::make_pair(Result(), cur);
49
- BlockIterator sectionCur = cur;
50
-
51
- std::stringstream ss;
52
- SourceCharactersBlock sourceBlock;
53
-
54
- // Handle list / list item separately
55
- if (sectionCur->type == ListItemBlockBeginType ||
56
- sectionCur->type == ListBlockBeginType) {
57
-
58
- // Skip the list / list item
59
- if (sectionCur->type == ListBlockBeginType) {
60
- sectionCur = SkipToClosingBlock(sectionCur, section.bounds.second, ListBlockBeginType, ListBlockEndType);
61
- }
62
- else {
63
- sectionCur = SkipToClosingBlock(sectionCur, section.bounds.second, ListItemBlockBeginType, ListItemBlockEndType);
64
- }
65
- SectionType type = ClassifyChildrenListBlock<T>(cur, section.bounds.second);
66
-
67
- // Assemble the message
68
- ss << "ignoring ";
69
- ss << ((type != UndefinedSectionType) ? SectionName(type) : "unrecognized");
70
- ss << " list";
71
- if (cur->type == ListItemBlockBeginType)
72
- ss << " item";
73
-
74
- if (type != UndefinedSectionType &&
75
- section.hasParent()) {
76
- BlueprintSection recognizedSection(type, std::make_pair(cur, sectionCur), section.parent());
77
- size_t level = SectionIndentationLevel(recognizedSection);
78
-
79
- if (level) {
80
- ss << ", " << SectionName(type) << " list ";
81
- if (cur->type == ListItemBlockBeginType)
82
- ss << "item ";
83
- ss << "is expected to be indented by ";
84
- ss << level * 4 << " spaces or " << level << " tab";
85
- }
86
- }
87
-
88
- sourceBlock = CharacterMapForBlock(sectionCur, cur, section.bounds, sourceData);
89
- sectionCur = CloseList(sectionCur, section.bounds.second);
90
- }
91
- else if (sectionCur->type == QuoteBlockBeginType) {
92
-
93
- // Skip quote or just one block
94
- ss << "ignoring unrecognized quote";
95
- sectionCur = SkipToClosingBlock(sectionCur, section.bounds.second, QuoteBlockBeginType, QuoteBlockEndType);
96
- sourceBlock = CharacterMapForBlock(sectionCur, cur, section.bounds, sourceData);
97
-
98
- if (!CheckCursor(section, sectionCur, sourceData, result.first))
99
- return result;
100
-
101
- ++sectionCur;
102
- }
103
- else {
104
- // Skip just one block
105
- ss << "ignoring unrecognized block";
106
- sourceBlock = CharacterMapForBlock(sectionCur, cur, section.bounds, sourceData);
107
-
108
- ++sectionCur;
109
- }
110
-
111
-
112
- if (section.hasParent()) {
113
- // Additional hint for some sections
114
- switch (section.parent().type) {
115
- case ParametersSectionType:
116
- ss << ", expected parameter discussion, e.g. '<parameter name> ... lorem ipsum'";
117
- break;
118
-
119
- case ParameterDefinitionSectionType:
120
- ss << ", expected enumeration of parameter values, e.g. 'Values' followed by a nested list of possbile values";
121
- break;
122
-
123
- case ActionSectionType:
124
- ss << ", expected request, response, parameters, headers or a defintion of the next action, resource or a group";
125
- break;
126
-
127
- default:
128
- break;
129
- }
130
- }
131
-
132
- // WARN: Ignoring unrecognized block
133
- result.first.warnings.push_back(Warning(ss.str(),
134
- IgnoringWarning,
135
- sourceBlock));
136
-
137
- result.second = sectionCur;
138
- return result;
139
- }
140
- }
141
-
142
- #endif