redsnow 0.1.6 → 0.2.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 +4 -4
- data/CHANGELOG.md +2 -0
- data/ext/snowcrash/Makefile +1 -1
- data/ext/snowcrash/bin/snowcrash +0 -0
- data/ext/snowcrash/configure +9 -9
- data/ext/snowcrash/ext/markdown-parser/Makefile +87 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/CONTRIBUTING.md +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/Makefile +2 -1
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/Makefile.win +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/examples/smartypants.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/examples/sundown.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/houdini.h +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/houdini_href_e.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/houdini_html_e.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/html.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/html.h +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html/html_smartypants.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/html_block_names.txt +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/autolink.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/autolink.h +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/buffer.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/buffer.h +1 -1
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/html_blocks.h +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/markdown.c +9 -3
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/markdown.h +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/src_map.c +11 -7
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/src_map.h +1 -1
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/stack.c +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/src/stack.h +0 -0
- data/ext/snowcrash/{sundown → ext/markdown-parser/ext/sundown}/sundown.def +0 -0
- data/ext/snowcrash/ext/markdown-parser/msvc/markdown/markdown.vcproj +188 -0
- data/ext/snowcrash/ext/markdown-parser/msvc/msvc.sln +38 -0
- data/ext/snowcrash/ext/markdown-parser/msvc/sundown/sundown.vcproj +206 -0
- data/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.cc +92 -0
- data/ext/snowcrash/ext/markdown-parser/src/ByteBuffer.h +82 -0
- data/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.cc +152 -0
- data/ext/snowcrash/ext/markdown-parser/src/MarkdownNode.h +103 -0
- data/ext/snowcrash/ext/markdown-parser/src/MarkdownParser.cc +388 -0
- data/ext/snowcrash/{src → ext/markdown-parser/src}/MarkdownParser.h +43 -33
- data/ext/snowcrash/snowcrash.gyp +114 -63
- data/ext/snowcrash/src/ActionParser.h +334 -398
- data/ext/snowcrash/src/AssetParser.h +82 -171
- data/ext/snowcrash/src/Blueprint.h +7 -2
- data/ext/snowcrash/src/BlueprintParser.h +212 -286
- data/ext/snowcrash/src/BlueprintUtility.h +2 -2
- data/ext/snowcrash/src/CBlueprint.h +1 -1
- data/ext/snowcrash/src/CSourceAnnotation.cc +11 -11
- data/ext/snowcrash/src/CSourceAnnotation.h +9 -9
- data/ext/snowcrash/src/CodeBlockUtility.h +199 -149
- data/ext/snowcrash/src/HeadersParser.h +197 -0
- data/ext/snowcrash/src/ParameterParser.h +429 -0
- data/ext/snowcrash/src/ParametersParser.h +136 -211
- data/ext/snowcrash/src/PayloadParser.h +458 -562
- data/ext/snowcrash/src/Platform.h +0 -3
- data/ext/snowcrash/src/ResourceGroupParser.h +183 -164
- data/ext/snowcrash/src/ResourceParser.h +325 -493
- data/ext/snowcrash/src/Section.cc +42 -0
- data/ext/snowcrash/src/Section.h +47 -0
- data/ext/snowcrash/src/SectionParser.h +229 -0
- data/ext/snowcrash/src/SectionParserData.h +81 -0
- data/ext/snowcrash/src/SectionProcessor.h +211 -0
- data/ext/snowcrash/src/Signature.cc +74 -0
- data/ext/snowcrash/src/Signature.h +32 -0
- data/ext/snowcrash/src/SourceAnnotation.h +7 -20
- data/ext/snowcrash/src/StringUtility.h +30 -10
- data/ext/snowcrash/src/SymbolTable.h +7 -7
- data/ext/snowcrash/src/UriTemplateParser.cc +10 -10
- data/ext/snowcrash/src/UriTemplateParser.h +11 -14
- data/ext/snowcrash/src/ValuesParser.h +122 -0
- data/ext/snowcrash/src/Version.h +2 -2
- data/ext/snowcrash/src/csnowcrash.cc +5 -5
- data/ext/snowcrash/src/csnowcrash.h +3 -3
- data/ext/snowcrash/src/snowcrash.cc +74 -4
- data/ext/snowcrash/src/snowcrash.h +9 -4
- data/ext/snowcrash/src/snowcrash/snowcrash.cc +16 -16
- data/ext/snowcrash/tools/homebrew/snowcrash.rb +3 -2
- data/ext/snowcrash/vcbuild.bat +13 -4
- data/lib/redsnow.rb +5 -5
- data/lib/redsnow/binding.rb +1 -1
- data/lib/redsnow/blueprint.rb +33 -2
- data/lib/redsnow/parseresult.rb +7 -4
- data/lib/redsnow/version.rb +1 -1
- data/test/redsnow_binding_test.rb +6 -6
- data/test/redsnow_parseresult_test.rb +1 -1
- metadata +62 -42
- data/ext/snowcrash/src/BlockUtility.h +0 -186
- data/ext/snowcrash/src/BlueprintParserCore.h +0 -190
- data/ext/snowcrash/src/BlueprintSection.h +0 -140
- data/ext/snowcrash/src/DescriptionSectionUtility.h +0 -156
- data/ext/snowcrash/src/HeaderParser.h +0 -289
- data/ext/snowcrash/src/ListBlockUtility.h +0 -273
- data/ext/snowcrash/src/ListUtility.h +0 -95
- data/ext/snowcrash/src/MarkdownBlock.cc +0 -176
- data/ext/snowcrash/src/MarkdownBlock.h +0 -93
- data/ext/snowcrash/src/MarkdownParser.cc +0 -266
- data/ext/snowcrash/src/ParameterDefinitonParser.h +0 -645
- data/ext/snowcrash/src/Parser.cc +0 -71
- data/ext/snowcrash/src/Parser.h +0 -29
- data/ext/snowcrash/src/ParserCore.cc +0 -120
- data/ext/snowcrash/src/ParserCore.h +0 -82
- data/ext/snowcrash/src/SectionUtility.h +0 -142
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
|
|
2
|
+
Microsoft Visual Studio Solution File, Format Version 10.00
|
|
3
|
+
# Visual Studio 2008
|
|
4
|
+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "markdown", "markdown\markdown.vcproj", "{288550BA-B6D6-4254-B5E3-9E8CE20970AE}"
|
|
5
|
+
ProjectSection(ProjectDependencies) = postProject
|
|
6
|
+
{08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6} = {08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6}
|
|
7
|
+
EndProjectSection
|
|
8
|
+
EndProject
|
|
9
|
+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sundown", "sundown\sundown.vcproj", "{08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6}"
|
|
10
|
+
EndProject
|
|
11
|
+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test-markdown", "test-markdown\test-markdown.vcproj", "{DB045416-DCDB-45D3-904C-C1F15D608FC3}"
|
|
12
|
+
ProjectSection(ProjectDependencies) = postProject
|
|
13
|
+
{288550BA-B6D6-4254-B5E3-9E8CE20970AE} = {288550BA-B6D6-4254-B5E3-9E8CE20970AE}
|
|
14
|
+
EndProjectSection
|
|
15
|
+
EndProject
|
|
16
|
+
Global
|
|
17
|
+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
18
|
+
Debug|Win32 = Debug|Win32
|
|
19
|
+
Release|Win32 = Release|Win32
|
|
20
|
+
EndGlobalSection
|
|
21
|
+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
22
|
+
{288550BA-B6D6-4254-B5E3-9E8CE20970AE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
23
|
+
{288550BA-B6D6-4254-B5E3-9E8CE20970AE}.Debug|Win32.Build.0 = Debug|Win32
|
|
24
|
+
{288550BA-B6D6-4254-B5E3-9E8CE20970AE}.Release|Win32.ActiveCfg = Release|Win32
|
|
25
|
+
{288550BA-B6D6-4254-B5E3-9E8CE20970AE}.Release|Win32.Build.0 = Release|Win32
|
|
26
|
+
{08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
27
|
+
{08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6}.Debug|Win32.Build.0 = Debug|Win32
|
|
28
|
+
{08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6}.Release|Win32.ActiveCfg = Release|Win32
|
|
29
|
+
{08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6}.Release|Win32.Build.0 = Release|Win32
|
|
30
|
+
{DB045416-DCDB-45D3-904C-C1F15D608FC3}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
31
|
+
{DB045416-DCDB-45D3-904C-C1F15D608FC3}.Debug|Win32.Build.0 = Debug|Win32
|
|
32
|
+
{DB045416-DCDB-45D3-904C-C1F15D608FC3}.Release|Win32.ActiveCfg = Release|Win32
|
|
33
|
+
{DB045416-DCDB-45D3-904C-C1F15D608FC3}.Release|Win32.Build.0 = Release|Win32
|
|
34
|
+
EndGlobalSection
|
|
35
|
+
GlobalSection(SolutionProperties) = preSolution
|
|
36
|
+
HideSolutionNode = FALSE
|
|
37
|
+
EndGlobalSection
|
|
38
|
+
EndGlobal
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="Windows-1252"?>
|
|
2
|
+
<VisualStudioProject
|
|
3
|
+
ProjectType="Visual C++"
|
|
4
|
+
Version="9.00"
|
|
5
|
+
Name="sundown"
|
|
6
|
+
ProjectGUID="{08CAEF5D-9ED7-4CB1-844D-D39AA17D3AD6}"
|
|
7
|
+
RootNamespace="sundown"
|
|
8
|
+
TargetFrameworkVersion="196613"
|
|
9
|
+
>
|
|
10
|
+
<Platforms>
|
|
11
|
+
<Platform
|
|
12
|
+
Name="Win32"
|
|
13
|
+
/>
|
|
14
|
+
</Platforms>
|
|
15
|
+
<ToolFiles>
|
|
16
|
+
</ToolFiles>
|
|
17
|
+
<Configurations>
|
|
18
|
+
<Configuration
|
|
19
|
+
Name="Debug|Win32"
|
|
20
|
+
OutputDirectory="..\..\build\debug"
|
|
21
|
+
IntermediateDirectory="..\..\build\data\sundown\debug"
|
|
22
|
+
ConfigurationType="4"
|
|
23
|
+
CharacterSet="2"
|
|
24
|
+
>
|
|
25
|
+
<Tool
|
|
26
|
+
Name="VCPreBuildEventTool"
|
|
27
|
+
/>
|
|
28
|
+
<Tool
|
|
29
|
+
Name="VCCustomBuildTool"
|
|
30
|
+
/>
|
|
31
|
+
<Tool
|
|
32
|
+
Name="VCXMLDataGeneratorTool"
|
|
33
|
+
/>
|
|
34
|
+
<Tool
|
|
35
|
+
Name="VCWebServiceProxyGeneratorTool"
|
|
36
|
+
/>
|
|
37
|
+
<Tool
|
|
38
|
+
Name="VCMIDLTool"
|
|
39
|
+
/>
|
|
40
|
+
<Tool
|
|
41
|
+
Name="VCCLCompilerTool"
|
|
42
|
+
Optimization="0"
|
|
43
|
+
MinimalRebuild="true"
|
|
44
|
+
BasicRuntimeChecks="3"
|
|
45
|
+
RuntimeLibrary="3"
|
|
46
|
+
WarningLevel="3"
|
|
47
|
+
DebugInformationFormat="4"
|
|
48
|
+
/>
|
|
49
|
+
<Tool
|
|
50
|
+
Name="VCManagedResourceCompilerTool"
|
|
51
|
+
/>
|
|
52
|
+
<Tool
|
|
53
|
+
Name="VCResourceCompilerTool"
|
|
54
|
+
/>
|
|
55
|
+
<Tool
|
|
56
|
+
Name="VCPreLinkEventTool"
|
|
57
|
+
/>
|
|
58
|
+
<Tool
|
|
59
|
+
Name="VCLibrarianTool"
|
|
60
|
+
/>
|
|
61
|
+
<Tool
|
|
62
|
+
Name="VCALinkTool"
|
|
63
|
+
/>
|
|
64
|
+
<Tool
|
|
65
|
+
Name="VCXDCMakeTool"
|
|
66
|
+
/>
|
|
67
|
+
<Tool
|
|
68
|
+
Name="VCBscMakeTool"
|
|
69
|
+
/>
|
|
70
|
+
<Tool
|
|
71
|
+
Name="VCFxCopTool"
|
|
72
|
+
/>
|
|
73
|
+
<Tool
|
|
74
|
+
Name="VCPostBuildEventTool"
|
|
75
|
+
/>
|
|
76
|
+
</Configuration>
|
|
77
|
+
<Configuration
|
|
78
|
+
Name="Release|Win32"
|
|
79
|
+
OutputDirectory="..\..\build\release"
|
|
80
|
+
IntermediateDirectory="..\..\build\data\sundown\release"
|
|
81
|
+
ConfigurationType="4"
|
|
82
|
+
CharacterSet="2"
|
|
83
|
+
WholeProgramOptimization="1"
|
|
84
|
+
>
|
|
85
|
+
<Tool
|
|
86
|
+
Name="VCPreBuildEventTool"
|
|
87
|
+
/>
|
|
88
|
+
<Tool
|
|
89
|
+
Name="VCCustomBuildTool"
|
|
90
|
+
/>
|
|
91
|
+
<Tool
|
|
92
|
+
Name="VCXMLDataGeneratorTool"
|
|
93
|
+
/>
|
|
94
|
+
<Tool
|
|
95
|
+
Name="VCWebServiceProxyGeneratorTool"
|
|
96
|
+
/>
|
|
97
|
+
<Tool
|
|
98
|
+
Name="VCMIDLTool"
|
|
99
|
+
/>
|
|
100
|
+
<Tool
|
|
101
|
+
Name="VCCLCompilerTool"
|
|
102
|
+
Optimization="2"
|
|
103
|
+
EnableIntrinsicFunctions="true"
|
|
104
|
+
RuntimeLibrary="2"
|
|
105
|
+
EnableFunctionLevelLinking="true"
|
|
106
|
+
WarningLevel="3"
|
|
107
|
+
DebugInformationFormat="3"
|
|
108
|
+
/>
|
|
109
|
+
<Tool
|
|
110
|
+
Name="VCManagedResourceCompilerTool"
|
|
111
|
+
/>
|
|
112
|
+
<Tool
|
|
113
|
+
Name="VCResourceCompilerTool"
|
|
114
|
+
/>
|
|
115
|
+
<Tool
|
|
116
|
+
Name="VCPreLinkEventTool"
|
|
117
|
+
/>
|
|
118
|
+
<Tool
|
|
119
|
+
Name="VCLibrarianTool"
|
|
120
|
+
/>
|
|
121
|
+
<Tool
|
|
122
|
+
Name="VCALinkTool"
|
|
123
|
+
/>
|
|
124
|
+
<Tool
|
|
125
|
+
Name="VCXDCMakeTool"
|
|
126
|
+
/>
|
|
127
|
+
<Tool
|
|
128
|
+
Name="VCBscMakeTool"
|
|
129
|
+
/>
|
|
130
|
+
<Tool
|
|
131
|
+
Name="VCFxCopTool"
|
|
132
|
+
/>
|
|
133
|
+
<Tool
|
|
134
|
+
Name="VCPostBuildEventTool"
|
|
135
|
+
/>
|
|
136
|
+
</Configuration>
|
|
137
|
+
</Configurations>
|
|
138
|
+
<References>
|
|
139
|
+
</References>
|
|
140
|
+
<Files>
|
|
141
|
+
<Filter
|
|
142
|
+
Name="Source Files"
|
|
143
|
+
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
|
144
|
+
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
|
145
|
+
>
|
|
146
|
+
<File
|
|
147
|
+
RelativePath="..\..\ext\sundown\src\autolink.c"
|
|
148
|
+
>
|
|
149
|
+
</File>
|
|
150
|
+
<File
|
|
151
|
+
RelativePath="..\..\ext\sundown\src\buffer.c"
|
|
152
|
+
>
|
|
153
|
+
</File>
|
|
154
|
+
<File
|
|
155
|
+
RelativePath="..\..\ext\sundown\src\markdown.c"
|
|
156
|
+
>
|
|
157
|
+
</File>
|
|
158
|
+
<File
|
|
159
|
+
RelativePath="..\..\ext\sundown\src\src_map.c"
|
|
160
|
+
>
|
|
161
|
+
</File>
|
|
162
|
+
<File
|
|
163
|
+
RelativePath="..\..\ext\sundown\src\stack.c"
|
|
164
|
+
>
|
|
165
|
+
</File>
|
|
166
|
+
</Filter>
|
|
167
|
+
<Filter
|
|
168
|
+
Name="Header Files"
|
|
169
|
+
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
|
170
|
+
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
|
171
|
+
>
|
|
172
|
+
<File
|
|
173
|
+
RelativePath="..\..\ext\sundown\src\autolink.h"
|
|
174
|
+
>
|
|
175
|
+
</File>
|
|
176
|
+
<File
|
|
177
|
+
RelativePath="..\..\ext\sundown\src\buffer.h"
|
|
178
|
+
>
|
|
179
|
+
</File>
|
|
180
|
+
<File
|
|
181
|
+
RelativePath="..\..\ext\sundown\src\html_blocks.h"
|
|
182
|
+
>
|
|
183
|
+
</File>
|
|
184
|
+
<File
|
|
185
|
+
RelativePath="..\..\ext\sundown\src\markdown.h"
|
|
186
|
+
>
|
|
187
|
+
</File>
|
|
188
|
+
<File
|
|
189
|
+
RelativePath="..\..\ext\sundown\src\src_map.h"
|
|
190
|
+
>
|
|
191
|
+
</File>
|
|
192
|
+
<File
|
|
193
|
+
RelativePath="..\..\ext\sundown\src\stack.h"
|
|
194
|
+
>
|
|
195
|
+
</File>
|
|
196
|
+
</Filter>
|
|
197
|
+
<Filter
|
|
198
|
+
Name="Resource Files"
|
|
199
|
+
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
|
200
|
+
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
|
201
|
+
>
|
|
202
|
+
</Filter>
|
|
203
|
+
</Files>
|
|
204
|
+
<Globals>
|
|
205
|
+
</Globals>
|
|
206
|
+
</VisualStudioProject>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ByteBuffer.cc
|
|
3
|
+
// markdownparser
|
|
4
|
+
//
|
|
5
|
+
// Created by Zdenek Nemec on 4/22/14.
|
|
6
|
+
// Copyright (c) 2014 Apiary Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "ByteBuffer.h"
|
|
10
|
+
|
|
11
|
+
using namespace mdp;
|
|
12
|
+
|
|
13
|
+
/* Byte lenght of an UTF8 character (based on first byte) */
|
|
14
|
+
#define UTF8_CHAR_LEN( byte ) (( 0xE5000000 >> (( byte >> 3 ) & 0x1e )) & 3 ) + 1
|
|
15
|
+
|
|
16
|
+
/* Number of UTF8 characters in byte buffer */
|
|
17
|
+
static size_t strnlen_utf8(const char* s, size_t len)
|
|
18
|
+
{
|
|
19
|
+
if (!s || !len)
|
|
20
|
+
return 0;
|
|
21
|
+
|
|
22
|
+
size_t i = 0, j = 0;
|
|
23
|
+
while (s[i] && i < len) {
|
|
24
|
+
i += UTF8_CHAR_LEN(s[i]);
|
|
25
|
+
j++;
|
|
26
|
+
}
|
|
27
|
+
return j;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Convert range of bytes to a range of characters */
|
|
31
|
+
static CharactersRange BytesRangeToCharactersRange(const BytesRange& bytesRange, const ByteBuffer& byteBuffer)
|
|
32
|
+
{
|
|
33
|
+
if (byteBuffer.empty()) {
|
|
34
|
+
return CharactersRange();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
BytesRange workRange = bytesRange;
|
|
38
|
+
if (bytesRange.location + bytesRange.length > byteBuffer.length()) {
|
|
39
|
+
// Accomodate maximum possible length
|
|
40
|
+
workRange.length -= bytesRange.location + bytesRange.length - byteBuffer.length();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
size_t charLocation = 0;
|
|
44
|
+
if (bytesRange.location > 0)
|
|
45
|
+
charLocation = strnlen_utf8(byteBuffer.c_str(), bytesRange.location);
|
|
46
|
+
|
|
47
|
+
size_t charLength = 0;
|
|
48
|
+
if (bytesRange.length > 0)
|
|
49
|
+
charLength = strnlen_utf8(byteBuffer.c_str() + bytesRange.location, bytesRange.length);
|
|
50
|
+
|
|
51
|
+
CharactersRange characterRange = CharactersRange(charLocation, charLength);
|
|
52
|
+
return characterRange;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
CharactersRangeSet mdp::BytesRangeSetToCharactersRangeSet(const BytesRangeSet& rangeSet, const ByteBuffer& byteBuffer)
|
|
56
|
+
{
|
|
57
|
+
CharactersRangeSet characterMap;
|
|
58
|
+
|
|
59
|
+
for (BytesRangeSet::const_iterator it = rangeSet.begin(); it != rangeSet.end(); ++it) {
|
|
60
|
+
CharactersRange characterRange = BytesRangeToCharactersRange(*it, byteBuffer);
|
|
61
|
+
characterMap.push_back(characterRange);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return characterMap;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
ByteBuffer mdp::MapBytesRangeSet(const BytesRangeSet& rangeSet, const ByteBuffer& byteBuffer)
|
|
68
|
+
{
|
|
69
|
+
if (byteBuffer.empty())
|
|
70
|
+
return ByteBuffer();
|
|
71
|
+
|
|
72
|
+
size_t length = byteBuffer.length();
|
|
73
|
+
ByteBufferStream s;
|
|
74
|
+
for (BytesRangeSet::const_iterator it = rangeSet.begin(); it != rangeSet.end(); ++it) {
|
|
75
|
+
|
|
76
|
+
if (it->location + it->length > length) {
|
|
77
|
+
// Sundown adds an extra newline on the source input if needed.
|
|
78
|
+
if (it->location + it->length - length == 1) {
|
|
79
|
+
s << byteBuffer.substr(it->location, length - it->location);
|
|
80
|
+
return s.str();
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Wrong map
|
|
84
|
+
return ByteBuffer();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
s << byteBuffer.substr(it->location, it->length);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return s.str();
|
|
92
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
//
|
|
2
|
+
// ByteBuffer.h
|
|
3
|
+
// markdownparser
|
|
4
|
+
//
|
|
5
|
+
// Created by Zdenek Nemec on 4/18/14.
|
|
6
|
+
// Copyright (c) 2014 Apiary Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#ifndef MARKDOWNPARSER_BYTEBUFFER_H
|
|
10
|
+
#define MARKDOWNPARSER_BYTEBUFFER_H
|
|
11
|
+
|
|
12
|
+
#include <string>
|
|
13
|
+
#include <vector>
|
|
14
|
+
#include <sstream>
|
|
15
|
+
|
|
16
|
+
namespace mdp {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* \brief Source data byte buffer
|
|
20
|
+
*
|
|
21
|
+
* Note this is a byte buffer, a sequence of
|
|
22
|
+
* UTF8 bytes note necessarily characters.
|
|
23
|
+
*/
|
|
24
|
+
typedef std::string ByteBuffer;
|
|
25
|
+
|
|
26
|
+
/** Byte buffer stream */
|
|
27
|
+
typedef std::stringstream ByteBufferStream;
|
|
28
|
+
|
|
29
|
+
/** A generic continuous range */
|
|
30
|
+
struct Range {
|
|
31
|
+
size_t location;
|
|
32
|
+
size_t length;
|
|
33
|
+
|
|
34
|
+
Range(size_t loc = 0, size_t len = 0)
|
|
35
|
+
: location(loc), length(len) {}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/** Range of bytes */
|
|
39
|
+
typedef Range BytesRange;
|
|
40
|
+
|
|
41
|
+
/** Range of characters */
|
|
42
|
+
typedef Range CharactersRange;
|
|
43
|
+
|
|
44
|
+
/** A generic set of non-continuous of ranges */
|
|
45
|
+
template<typename T>
|
|
46
|
+
class RangeSet : public std::vector<T> {
|
|
47
|
+
public:
|
|
48
|
+
|
|
49
|
+
/** Append another range set to this one, merging continuous blocks */
|
|
50
|
+
void append(const RangeSet& val)
|
|
51
|
+
{
|
|
52
|
+
if (val.empty())
|
|
53
|
+
return;
|
|
54
|
+
if (this->empty() ||
|
|
55
|
+
val.front().location != this->back().location + this->back().length) {
|
|
56
|
+
this->insert(this->end(), val.begin(), val.end());
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
// merge
|
|
60
|
+
this->back().length += val.front().length;
|
|
61
|
+
|
|
62
|
+
if (val.size() > 1) {
|
|
63
|
+
this->insert(this->end(), ++val.begin(), val.end());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/** Set of non-continuous byte ranges */
|
|
70
|
+
typedef RangeSet<BytesRange> BytesRangeSet;
|
|
71
|
+
|
|
72
|
+
/** Set of non-continuous character ranges */
|
|
73
|
+
typedef RangeSet<CharactersRange> CharactersRangeSet;
|
|
74
|
+
|
|
75
|
+
/** Convert ranges of bytes to ranges of characters */
|
|
76
|
+
CharactersRangeSet BytesRangeSetToCharactersRangeSet(const BytesRangeSet& rangeSet, const ByteBuffer& byteBuffer);
|
|
77
|
+
|
|
78
|
+
/** Maps bytes range set to byte buffer */
|
|
79
|
+
ByteBuffer MapBytesRangeSet(const BytesRangeSet& rangeSet, const ByteBuffer& byteBuffer);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#endif
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
//
|
|
2
|
+
// MarkdownNode.cc
|
|
3
|
+
// markdownparser
|
|
4
|
+
//
|
|
5
|
+
// Created by Zdenek Nemec on 4/19/14.
|
|
6
|
+
// Copyright (c) 2014 Apiary Inc. All rights reserved.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
#include "MarkdownNode.h"
|
|
10
|
+
|
|
11
|
+
using namespace mdp;
|
|
12
|
+
|
|
13
|
+
MarkdownNode::MarkdownNode(MarkdownNodeType type_, MarkdownNode *parent_, const ByteBuffer& text_, const Data& data_)
|
|
14
|
+
: type(type_), text(text_), data(data_), m_parent(parent_)
|
|
15
|
+
{
|
|
16
|
+
m_children.reset(::new MarkdownNodes);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
MarkdownNode::MarkdownNode(const MarkdownNode& rhs)
|
|
20
|
+
{
|
|
21
|
+
this->type = rhs.type;
|
|
22
|
+
this->text = rhs.text;
|
|
23
|
+
this->data = rhs.data;
|
|
24
|
+
this->sourceMap = rhs.sourceMap;
|
|
25
|
+
this->m_children.reset(::new MarkdownNodes(*rhs.m_children.get()));
|
|
26
|
+
this->m_parent = rhs.m_parent;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
MarkdownNode& MarkdownNode::operator=(const MarkdownNode& rhs)
|
|
30
|
+
{
|
|
31
|
+
this->type = rhs.type;
|
|
32
|
+
this->text = rhs.text;
|
|
33
|
+
this->data = rhs.data;
|
|
34
|
+
this->sourceMap = rhs.sourceMap;
|
|
35
|
+
this->m_children.reset(::new MarkdownNodes(*rhs.m_children.get()));
|
|
36
|
+
this->m_parent = rhs.m_parent;
|
|
37
|
+
return *this;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
MarkdownNode::~MarkdownNode()
|
|
41
|
+
{
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
MarkdownNode& MarkdownNode::parent()
|
|
45
|
+
{
|
|
46
|
+
if (!hasParent())
|
|
47
|
+
throw "no parent set";
|
|
48
|
+
return *m_parent;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const MarkdownNode& MarkdownNode::parent() const
|
|
52
|
+
{
|
|
53
|
+
if (!hasParent())
|
|
54
|
+
throw "no parent set";
|
|
55
|
+
return *m_parent;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void MarkdownNode::setParent(MarkdownNode *parent)
|
|
59
|
+
{
|
|
60
|
+
m_parent = parent;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
bool MarkdownNode::hasParent() const
|
|
64
|
+
{
|
|
65
|
+
return (m_parent != NULL);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
MarkdownNodes& MarkdownNode::children()
|
|
69
|
+
{
|
|
70
|
+
if (!m_children.get())
|
|
71
|
+
throw "no children set";
|
|
72
|
+
|
|
73
|
+
return *m_children;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const MarkdownNodes& MarkdownNode::children() const
|
|
77
|
+
{
|
|
78
|
+
if (!m_children.get())
|
|
79
|
+
throw "no children set";
|
|
80
|
+
|
|
81
|
+
return *m_children;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void MarkdownNode::printNode(size_t level) const
|
|
85
|
+
{
|
|
86
|
+
using std::cout;
|
|
87
|
+
for (size_t i = 0; i < level; ++i)
|
|
88
|
+
std::cout << " ";
|
|
89
|
+
|
|
90
|
+
cout << "+ ";
|
|
91
|
+
switch (type) {
|
|
92
|
+
case RootMarkdownNodeType:
|
|
93
|
+
cout << "root";
|
|
94
|
+
break;
|
|
95
|
+
|
|
96
|
+
case CodeMarkdownNodeType:
|
|
97
|
+
cout << "code";
|
|
98
|
+
break;
|
|
99
|
+
|
|
100
|
+
case QuoteMarkdownNodeType:
|
|
101
|
+
cout << "quote";
|
|
102
|
+
break;
|
|
103
|
+
|
|
104
|
+
case HTMLMarkdownNodeType:
|
|
105
|
+
cout << "HTML";
|
|
106
|
+
break;
|
|
107
|
+
|
|
108
|
+
case HeaderMarkdownNodeType:
|
|
109
|
+
cout << "header";
|
|
110
|
+
break;
|
|
111
|
+
|
|
112
|
+
case HRuleMarkdownNodeType:
|
|
113
|
+
cout << "hrul";
|
|
114
|
+
break;
|
|
115
|
+
|
|
116
|
+
case ListItemMarkdownNodeType:
|
|
117
|
+
cout << "list item";
|
|
118
|
+
break;
|
|
119
|
+
|
|
120
|
+
case ParagraphMarkdownNodeType:
|
|
121
|
+
cout << "paragraph";
|
|
122
|
+
break;
|
|
123
|
+
|
|
124
|
+
default:
|
|
125
|
+
cout << "undefined";
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
cout << " (type " << type << ", data " << data << ") - ";
|
|
130
|
+
cout << "`" << text << "`";
|
|
131
|
+
|
|
132
|
+
if (!sourceMap.empty()) {
|
|
133
|
+
for (mdp::BytesRangeSet::const_iterator it = sourceMap.begin();
|
|
134
|
+
it != sourceMap.end();
|
|
135
|
+
++it) {
|
|
136
|
+
std::cout << ((it == sourceMap.begin()) ? " :" : ";");
|
|
137
|
+
std::cout << it->location << ":" << it->length;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
cout << std::endl;
|
|
142
|
+
|
|
143
|
+
for (MarkdownNodeIterator it = m_children->begin();
|
|
144
|
+
it != m_children->end();
|
|
145
|
+
++it) {
|
|
146
|
+
it->printNode(level + 1);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (level == 0)
|
|
150
|
+
cout << std::endl << std::endl;
|
|
151
|
+
}
|
|
152
|
+
|