rmultimarkdown 4.7.1.1 → 6.2.2.1

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 (110) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +2 -2
  3. data/README.md +7 -9
  4. data/Rakefile +33 -18
  5. data/ext/Makefile +261 -0
  6. data/ext/extconf.rb +23 -3
  7. data/ext/mmd/aho-corasick.c +596 -0
  8. data/ext/mmd/aho-corasick.h +120 -0
  9. data/ext/mmd/beamer.c +344 -0
  10. data/ext/mmd/beamer.h +72 -0
  11. data/ext/mmd/char.c +156 -0
  12. data/ext/mmd/char.h +111 -0
  13. data/ext/mmd/char_lookup.c +212 -0
  14. data/ext/mmd/critic_markup.c +330 -0
  15. data/ext/mmd/critic_markup.h +94 -0
  16. data/ext/mmd/d_string.c +402 -0
  17. data/ext/mmd/epub.c +563 -0
  18. data/ext/mmd/epub.h +69 -0
  19. data/ext/mmd/fodt.c +2288 -0
  20. data/ext/mmd/fodt.h +81 -0
  21. data/ext/mmd/html.c +2460 -0
  22. data/ext/mmd/html.h +81 -0
  23. data/ext/mmd/i18n.h +170 -0
  24. data/ext/mmd/include/d_string.h +182 -0
  25. data/ext/mmd/include/libMultiMarkdown.h +548 -0
  26. data/ext/mmd/include/token.h +233 -0
  27. data/ext/mmd/latex.c +2435 -0
  28. data/ext/mmd/latex.h +83 -0
  29. data/ext/mmd/lexer.c +3001 -0
  30. data/ext/mmd/lexer.h +75 -0
  31. data/ext/mmd/memoir.c +138 -0
  32. data/ext/mmd/memoir.h +67 -0
  33. data/ext/mmd/miniz.c +7557 -0
  34. data/ext/mmd/miniz.h +1328 -0
  35. data/ext/mmd/mmd.c +2798 -0
  36. data/ext/mmd/mmd.h +120 -0
  37. data/ext/mmd/object_pool.c +141 -0
  38. data/ext/mmd/object_pool.h +101 -0
  39. data/ext/mmd/opendocument-content.c +2071 -0
  40. data/ext/mmd/opendocument-content.h +135 -0
  41. data/ext/mmd/opendocument.c +981 -0
  42. data/ext/mmd/opendocument.h +118 -0
  43. data/ext/mmd/parser.c +1760 -0
  44. data/ext/mmd/parser.h +39 -0
  45. data/{MultiMarkdown-4 → ext/mmd}/rng.c +90 -49
  46. data/ext/mmd/scanners.c +77512 -0
  47. data/ext/mmd/scanners.h +101 -0
  48. data/ext/mmd/stack.c +142 -0
  49. data/ext/mmd/stack.h +113 -0
  50. data/ext/mmd/textbundle.c +455 -0
  51. data/ext/mmd/textbundle.h +115 -0
  52. data/ext/mmd/token.c +773 -0
  53. data/ext/mmd/token_pairs.c +263 -0
  54. data/ext/mmd/token_pairs.h +123 -0
  55. data/ext/mmd/transclude.c +549 -0
  56. data/ext/mmd/transclude.h +87 -0
  57. data/ext/mmd/uthash.h +1074 -0
  58. data/ext/mmd/uuid.c +154 -0
  59. data/ext/mmd/uuid.h +77 -0
  60. data/ext/mmd/version.h +111 -0
  61. data/ext/mmd/writer.c +2652 -0
  62. data/ext/mmd/writer.h +260 -0
  63. data/ext/mmd/zip.c +210 -0
  64. data/ext/mmd/zip.h +120 -0
  65. data/ext/{multi_markdown.c → ruby_multi_markdown.c} +87 -18
  66. data/lib/multi_markdown.bundle +0 -0
  67. data/lib/multi_markdown.rb +5 -8
  68. data/lib/multi_markdown/version.rb +1 -1
  69. data/rmultimarkdown.gemspec +2 -2
  70. data/test/{extensions_test.rb.rb → extensions_test.rb} +10 -54
  71. data/test/multi_markdown_test.rb +13 -0
  72. metadata +67 -47
  73. data/MultiMarkdown-4/GLibFacade.c +0 -310
  74. data/MultiMarkdown-4/GLibFacade.h +0 -100
  75. data/MultiMarkdown-4/beamer.c +0 -182
  76. data/MultiMarkdown-4/beamer.h +0 -11
  77. data/MultiMarkdown-4/critic.c +0 -111
  78. data/MultiMarkdown-4/critic.h +0 -15
  79. data/MultiMarkdown-4/glib.h +0 -11
  80. data/MultiMarkdown-4/html.c +0 -1117
  81. data/MultiMarkdown-4/html.h +0 -14
  82. data/MultiMarkdown-4/latex.c +0 -1217
  83. data/MultiMarkdown-4/latex.h +0 -16
  84. data/MultiMarkdown-4/libMultiMarkdown.h +0 -177
  85. data/MultiMarkdown-4/lyx.c +0 -2265
  86. data/MultiMarkdown-4/lyx.h +0 -37
  87. data/MultiMarkdown-4/lyxbeamer.c +0 -265
  88. data/MultiMarkdown-4/lyxbeamer.h +0 -11
  89. data/MultiMarkdown-4/memoir.c +0 -80
  90. data/MultiMarkdown-4/memoir.h +0 -10
  91. data/MultiMarkdown-4/multimarkdown.c +0 -518
  92. data/MultiMarkdown-4/odf.c +0 -1222
  93. data/MultiMarkdown-4/odf.h +0 -18
  94. data/MultiMarkdown-4/opml.c +0 -189
  95. data/MultiMarkdown-4/opml.h +0 -15
  96. data/MultiMarkdown-4/parse_utilities.c +0 -884
  97. data/MultiMarkdown-4/parser.c +0 -16656
  98. data/MultiMarkdown-4/parser.h +0 -188
  99. data/MultiMarkdown-4/rtf.c +0 -665
  100. data/MultiMarkdown-4/rtf.h +0 -17
  101. data/MultiMarkdown-4/strtok.c +0 -56
  102. data/MultiMarkdown-4/strtok.h +0 -9
  103. data/MultiMarkdown-4/text.c +0 -53
  104. data/MultiMarkdown-4/text.h +0 -11
  105. data/MultiMarkdown-4/toc.c +0 -142
  106. data/MultiMarkdown-4/toc.h +0 -15
  107. data/MultiMarkdown-4/transclude.c +0 -307
  108. data/MultiMarkdown-4/transclude.h +0 -28
  109. data/MultiMarkdown-4/writer.c +0 -731
  110. data/MultiMarkdown-4/writer.h +0 -38
@@ -0,0 +1,118 @@
1
+ /**
2
+
3
+ MultiMarkdown -- Lightweight markup processor to produce HTML, LaTeX, and more.
4
+
5
+ @file opendocument.h
6
+
7
+ @brief Common Utilities for various OpenDocument export types
8
+
9
+
10
+ @author Fletcher T. Penney
11
+ @bug
12
+
13
+ **/
14
+
15
+ /*
16
+
17
+ Copyright © 2016 - 2017 Fletcher T. Penney.
18
+
19
+
20
+ The `MultiMarkdown 6` project is released under the MIT License..
21
+
22
+ GLibFacade.c and GLibFacade.h are from the MultiMarkdown v4 project:
23
+
24
+ https://github.com/fletcher/MultiMarkdown-4/
25
+
26
+ MMD 4 is released under both the MIT License and GPL.
27
+
28
+
29
+ CuTest is released under the zlib/libpng license. See CuTest.c for the
30
+ text of the license.
31
+
32
+ uthash library:
33
+ Copyright (c) 2005-2016, Troy D. Hanson
34
+
35
+ Licensed under Revised BSD license
36
+
37
+ miniz library:
38
+ Copyright 2013-2014 RAD Game Tools and Valve Software
39
+ Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
40
+
41
+ Licensed under the MIT license
42
+
43
+ argtable3 library:
44
+ Copyright (C) 1998-2001,2003-2011,2013 Stewart Heitmann
45
+ <sheitmann@users.sourceforge.net>
46
+ All rights reserved.
47
+
48
+ Licensed under the Revised BSD License
49
+
50
+
51
+ ## The MIT License ##
52
+
53
+ Permission is hereby granted, free of charge, to any person obtaining
54
+ a copy of this software and associated documentation files (the
55
+ "Software"), to deal in the Software without restriction, including
56
+ without limitation the rights to use, copy, modify, merge, publish,
57
+ distribute, sublicense, and/or sell copies of the Software, and to
58
+ permit persons to whom the Software is furnished to do so, subject to
59
+ the following conditions:
60
+
61
+ The above copyright notice and this permission notice shall be
62
+ included in all copies or substantial portions of the Software.
63
+
64
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
65
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
67
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
68
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
69
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
70
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
71
+
72
+
73
+ ## Revised BSD License ##
74
+
75
+ Redistribution and use in source and binary forms, with or without
76
+ modification, are permitted provided that the following conditions are
77
+ met:
78
+ * Redistributions of source code must retain the above copyright
79
+ notice, this list of conditions and the following disclaimer.
80
+ * Redistributions in binary form must reproduce the above
81
+ copyright notice, this list of conditions and the following
82
+ disclaimer in the documentation and/or other materials provided
83
+ with the distribution.
84
+ * Neither the name of the <organization> nor the
85
+ names of its contributors may be used to endorse or promote
86
+ products derived from this software without specific prior
87
+ written permission.
88
+
89
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
90
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
91
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
92
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT
93
+ HOLDER> BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
94
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
95
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR
96
+ PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
97
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
98
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
99
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
100
+
101
+
102
+ */
103
+
104
+
105
+ #ifndef OPENDOCUMENT_MULTIMARKDOWN_H
106
+ #define OPENDOCUMENT_MULTIMARKDOWN_H
107
+
108
+ #include "d_string.h"
109
+ #include "mmd.h"
110
+ #include "writer.h"
111
+
112
+ char * opendocument_metadata(mmd_engine * e, scratch_pad * scratch);
113
+
114
+
115
+ DString * opendocument_flat_text_create(const char * body, mmd_engine * e, const char * directory);
116
+ DString * opendocument_text_create(const char * body, mmd_engine * e, const char * directory);
117
+
118
+ #endif
data/ext/mmd/parser.c ADDED
@@ -0,0 +1,1760 @@
1
+ /*
2
+ ** 2000-05-29
3
+ **
4
+ ** The author disclaims copyright to this source code. In place of
5
+ ** a legal notice, here is a blessing:
6
+ **
7
+ ** May you do good and not evil.
8
+ ** May you find forgiveness for yourself and forgive others.
9
+ ** May you share freely, never taking more than you give.
10
+ **
11
+ *************************************************************************
12
+ ** Driver template for the LEMON parser generator.
13
+ **
14
+ ** The "lemon" program processes an LALR(1) input grammar file, then uses
15
+ ** this template to construct a parser. The "lemon" program inserts text
16
+ ** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the
17
+ ** interstitial "-" characters) contained in this template is changed into
18
+ ** the value of the %name directive from the grammar. Otherwise, the content
19
+ ** of this template is copied straight through into the generate parser
20
+ ** source file.
21
+ **
22
+ ** The following is the concatenation of all %include directives from the
23
+ ** input grammar file:
24
+ */
25
+ #include <stdio.h>
26
+ /************ Begin %include sections from the grammar ************************/
27
+
28
+ #include <assert.h>
29
+ #include <stdio.h>
30
+ #include <stdlib.h>
31
+
32
+ #include "libMultiMarkdown.h"
33
+ #include "mmd.h"
34
+ #include "parser.h"
35
+ #include "token.h"
36
+ /**************** End of %include directives **********************************/
37
+ /* These constants specify the various numeric values for terminal symbols
38
+ ** in a format understandable to "makeheaders". This section is blank unless
39
+ ** "lemon" is run with the "-m" command-line option.
40
+ ***************** Begin makeheaders token definitions *************************/
41
+ /**************** End makeheaders token definitions ***************************/
42
+
43
+ /* The next sections is a series of control #defines.
44
+ ** various aspects of the generated parser.
45
+ ** YYCODETYPE is the data type used to store the integer codes
46
+ ** that represent terminal and non-terminal symbols.
47
+ ** "unsigned char" is used if there are fewer than
48
+ ** 256 symbols. Larger types otherwise.
49
+ ** YYNOCODE is a number of type YYCODETYPE that is not used for
50
+ ** any terminal or nonterminal symbol.
51
+ ** YYFALLBACK If defined, this indicates that one or more tokens
52
+ ** (also known as: "terminal symbols") have fall-back
53
+ ** values which should be used if the original symbol
54
+ ** would not parse. This permits keywords to sometimes
55
+ ** be used as identifiers, for example.
56
+ ** YYACTIONTYPE is the data type used for "action codes" - numbers
57
+ ** that indicate what to do in response to the next
58
+ ** token.
59
+ ** ParseTOKENTYPE is the data type used for minor type for terminal
60
+ ** symbols. Background: A "minor type" is a semantic
61
+ ** value associated with a terminal or non-terminal
62
+ ** symbols. For example, for an "ID" terminal symbol,
63
+ ** the minor type might be the name of the identifier.
64
+ ** Each non-terminal can have a different minor type.
65
+ ** Terminal symbols all have the same minor type, though.
66
+ ** This macros defines the minor type for terminal
67
+ ** symbols.
68
+ ** YYMINORTYPE is the data type used for all minor types.
69
+ ** This is typically a union of many types, one of
70
+ ** which is ParseTOKENTYPE. The entry in the union
71
+ ** for terminal symbols is called "yy0".
72
+ ** YYSTACKDEPTH is the maximum depth of the parser's stack. If
73
+ ** zero the stack is dynamically sized using realloc()
74
+ ** ParseARG_SDECL A static variable declaration for the %extra_argument
75
+ ** ParseARG_PDECL A parameter declaration for the %extra_argument
76
+ ** ParseARG_STORE Code to store %extra_argument into yypParser
77
+ ** ParseARG_FETCH Code to extract %extra_argument from yypParser
78
+ ** YYERRORSYMBOL is the code number of the error symbol. If not
79
+ ** defined, then do no error processing.
80
+ ** YYNSTATE the combined number of states.
81
+ ** YYNRULE the number of rules in the grammar
82
+ ** YY_MAX_SHIFT Maximum value for shift actions
83
+ ** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions
84
+ ** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions
85
+ ** YY_MIN_REDUCE Maximum value for reduce actions
86
+ ** YY_ERROR_ACTION The yy_action[] code for syntax error
87
+ ** YY_ACCEPT_ACTION The yy_action[] code for accept
88
+ ** YY_NO_ACTION The yy_action[] code for no-op
89
+ */
90
+ #ifndef INTERFACE
91
+ # define INTERFACE 1
92
+ #endif
93
+ /************* Begin control #defines *****************************************/
94
+ #define YYCODETYPE unsigned char
95
+ #define YYNOCODE 91
96
+ #define YYACTIONTYPE unsigned short int
97
+ #define ParseTOKENTYPE token *
98
+ typedef union {
99
+ int yyinit;
100
+ ParseTOKENTYPE yy0;
101
+ } YYMINORTYPE;
102
+ #ifndef YYSTACKDEPTH
103
+ #define YYSTACKDEPTH 100
104
+ #endif
105
+ #define ParseARG_SDECL mmd_engine * engine ;
106
+ #define ParseARG_PDECL , mmd_engine * engine
107
+ #define ParseARG_FETCH mmd_engine * engine = yypParser->engine
108
+ #define ParseARG_STORE yypParser->engine = engine
109
+ #define YYFALLBACK 1
110
+ #define YYNSTATE 47
111
+ #define YYNRULE 156
112
+ #define YY_MAX_SHIFT 46
113
+ #define YY_MIN_SHIFTREDUCE 158
114
+ #define YY_MAX_SHIFTREDUCE 313
115
+ #define YY_MIN_REDUCE 314
116
+ #define YY_MAX_REDUCE 469
117
+ #define YY_ERROR_ACTION 470
118
+ #define YY_ACCEPT_ACTION 471
119
+ #define YY_NO_ACTION 472
120
+ /************* End control #defines *******************************************/
121
+
122
+ /* Define the yytestcase() macro to be a no-op if is not already defined
123
+ ** otherwise.
124
+ **
125
+ ** Applications can choose to define yytestcase() in the %include section
126
+ ** to a macro that can assist in verifying code coverage. For production
127
+ ** code the yytestcase() macro should be turned off. But it is useful
128
+ ** for testing.
129
+ */
130
+ #ifndef yytestcase
131
+ # define yytestcase(X)
132
+ #endif
133
+
134
+
135
+ /* Next are the tables used to determine what action to take based on the
136
+ ** current state and lookahead token. These tables are used to implement
137
+ ** functions that take a state number and lookahead value and return an
138
+ ** action integer.
139
+ **
140
+ ** Suppose the action integer is N. Then the action is determined as
141
+ ** follows
142
+ **
143
+ ** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead
144
+ ** token onto the stack and goto state N.
145
+ **
146
+ ** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then
147
+ ** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE.
148
+ **
149
+ ** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE
150
+ ** and YY_MAX_REDUCE
151
+ **
152
+ ** N == YY_ERROR_ACTION A syntax error has occurred.
153
+ **
154
+ ** N == YY_ACCEPT_ACTION The parser accepts its input.
155
+ **
156
+ ** N == YY_NO_ACTION No such action. Denotes unused
157
+ ** slots in the yy_action[] table.
158
+ **
159
+ ** The action table is constructed as a single large table named yy_action[].
160
+ ** Given state S and lookahead X, the action is computed as either:
161
+ **
162
+ ** (A) N = yy_action[ yy_shift_ofst[S] + X ]
163
+ ** (B) N = yy_default[S]
164
+ **
165
+ ** The (A) formula is preferred. The B formula is used instead if:
166
+ ** (1) The yy_shift_ofst[S]+X value is out of range, or
167
+ ** (2) yy_lookahead[yy_shift_ofst[S]+X] is not equal to X, or
168
+ ** (3) yy_shift_ofst[S] equal YY_SHIFT_USE_DFLT.
169
+ ** (Implementation note: YY_SHIFT_USE_DFLT is chosen so that
170
+ ** YY_SHIFT_USE_DFLT+X will be out of range for all possible lookaheads X.
171
+ ** Hence only tests (1) and (2) need to be evaluated.)
172
+ **
173
+ ** The formulas above are for computing the action when the lookahead is
174
+ ** a terminal symbol. If the lookahead is a non-terminal (as occurs after
175
+ ** a reduce action) then the yy_reduce_ofst[] array is used in place of
176
+ ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
177
+ ** YY_SHIFT_USE_DFLT.
178
+ **
179
+ ** The following are the tables generated in this section:
180
+ **
181
+ ** yy_action[] A single table containing all actions.
182
+ ** yy_lookahead[] A table containing the lookahead for each entry in
183
+ ** yy_action. Used to detect hash collisions.
184
+ ** yy_shift_ofst[] For each state, the offset into yy_action for
185
+ ** shifting terminals.
186
+ ** yy_reduce_ofst[] For each state, the offset into yy_action for
187
+ ** shifting non-terminals after a reduce.
188
+ ** yy_default[] Default action for each state.
189
+ **
190
+ *********** Begin parsing tables **********************************************/
191
+ #define YY_ACTTAB_COUNT (321)
192
+ static const YYACTIONTYPE yy_action[] = {
193
+ /* 0 */ 471, 1, 160, 37, 171, 172, 173, 174, 175, 176,
194
+ /* 10 */ 45, 178, 29, 180, 32, 41, 40, 30, 14, 187,
195
+ /* 20 */ 188, 189, 44, 246, 13, 13, 32, 44, 240, 241,
196
+ /* 30 */ 249, 38, 38, 27, 270, 26, 25, 217, 28, 213,
197
+ /* 40 */ 41, 40, 210, 8, 222, 43, 263, 15, 15, 314,
198
+ /* 50 */ 167, 308, 312, 46, 5, 16, 256, 257, 308, 42,
199
+ /* 60 */ 262, 287, 161, 162, 163, 164, 165, 166, 261, 7,
200
+ /* 70 */ 6, 17, 4, 3, 2, 18, 169, 5, 302, 224,
201
+ /* 80 */ 272, 275, 278, 273, 276, 279, 306, 270, 293, 167,
202
+ /* 90 */ 39, 39, 46, 237, 16, 256, 257, 308, 42, 19,
203
+ /* 100 */ 287, 161, 162, 163, 164, 165, 166, 261, 7, 6,
204
+ /* 110 */ 17, 4, 3, 2, 18, 169, 5, 302, 252, 272,
205
+ /* 120 */ 275, 278, 273, 276, 279, 306, 270, 293, 159, 37,
206
+ /* 130 */ 171, 172, 173, 174, 175, 176, 45, 178, 29, 180,
207
+ /* 140 */ 32, 41, 40, 30, 14, 187, 188, 189, 308, 312,
208
+ /* 150 */ 253, 270, 32, 225, 256, 257, 252, 38, 38, 27,
209
+ /* 160 */ 190, 26, 25, 185, 28, 304, 41, 40, 283, 8,
210
+ /* 170 */ 196, 43, 280, 15, 15, 33, 33, 247, 282, 284,
211
+ /* 180 */ 283, 34, 34, 5, 280, 206, 35, 35, 253, 303,
212
+ /* 190 */ 282, 284, 12, 44, 12, 13, 13, 203, 218, 220,
213
+ /* 200 */ 216, 219, 221, 6, 286, 281, 285, 36, 36, 31,
214
+ /* 210 */ 214, 211, 212, 215, 31, 283, 286, 281, 285, 280,
215
+ /* 220 */ 31, 9, 9, 20, 20, 282, 284, 199, 199, 191,
216
+ /* 230 */ 468, 468, 9, 9, 20, 20, 245, 243, 198, 198,
217
+ /* 240 */ 7, 232, 31, 256, 257, 207, 208, 209, 245, 227,
218
+ /* 250 */ 31, 286, 281, 285, 9, 9, 20, 20, 31, 206,
219
+ /* 260 */ 197, 197, 9, 9, 20, 20, 238, 31, 204, 204,
220
+ /* 270 */ 10, 10, 22, 22, 226, 233, 31, 316, 316, 11,
221
+ /* 280 */ 11, 23, 23, 297, 228, 31, 316, 294, 316, 190,
222
+ /* 290 */ 21, 21, 290, 296, 298, 316, 288, 316, 190, 24,
223
+ /* 300 */ 24, 316, 289, 291, 316, 316, 316, 316, 316, 316,
224
+ /* 310 */ 316, 316, 316, 316, 316, 316, 316, 316, 316, 223,
225
+ /* 320 */ 295,
226
+ };
227
+ static const YYCODETYPE yy_lookahead[] = {
228
+ /* 0 */ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
229
+ /* 10 */ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
230
+ /* 20 */ 61, 62, 86, 87, 88, 89, 67, 86, 2, 3,
231
+ /* 30 */ 89, 72, 73, 74, 38, 76, 77, 75, 79, 75,
232
+ /* 40 */ 81, 82, 75, 84, 78, 86, 5, 88, 89, 0,
233
+ /* 50 */ 1, 9, 10, 4, 28, 6, 7, 8, 9, 10,
234
+ /* 60 */ 19, 12, 13, 14, 15, 16, 17, 18, 19, 20,
235
+ /* 70 */ 21, 22, 23, 24, 25, 26, 27, 28, 29, 80,
236
+ /* 80 */ 31, 32, 33, 34, 35, 36, 37, 38, 39, 1,
237
+ /* 90 */ 72, 73, 4, 83, 6, 7, 8, 9, 10, 67,
238
+ /* 100 */ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
239
+ /* 110 */ 22, 23, 24, 25, 26, 27, 28, 29, 5, 31,
240
+ /* 120 */ 32, 33, 34, 35, 36, 37, 38, 39, 43, 44,
241
+ /* 130 */ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
242
+ /* 140 */ 55, 56, 57, 58, 59, 60, 61, 62, 9, 10,
243
+ /* 150 */ 37, 38, 67, 67, 7, 8, 5, 72, 73, 74,
244
+ /* 160 */ 64, 76, 77, 3, 79, 5, 81, 82, 1, 84,
245
+ /* 170 */ 71, 86, 5, 88, 89, 63, 64, 38, 11, 12,
246
+ /* 180 */ 1, 63, 64, 28, 5, 38, 63, 64, 37, 29,
247
+ /* 190 */ 11, 12, 85, 86, 87, 88, 89, 73, 31, 32,
248
+ /* 200 */ 33, 34, 35, 21, 37, 38, 39, 63, 64, 51,
249
+ /* 210 */ 31, 32, 33, 34, 51, 1, 37, 38, 39, 5,
250
+ /* 220 */ 51, 63, 64, 65, 66, 11, 12, 69, 70, 66,
251
+ /* 230 */ 2, 3, 63, 64, 65, 66, 9, 10, 69, 70,
252
+ /* 240 */ 20, 82, 51, 7, 8, 31, 32, 33, 9, 81,
253
+ /* 250 */ 51, 37, 38, 39, 63, 64, 65, 66, 51, 38,
254
+ /* 260 */ 69, 70, 63, 64, 65, 66, 29, 51, 69, 70,
255
+ /* 270 */ 63, 64, 65, 66, 38, 68, 51, 90, 90, 63,
256
+ /* 280 */ 64, 65, 66, 1, 68, 51, 90, 5, 90, 64,
257
+ /* 290 */ 65, 66, 1, 11, 12, 90, 5, 90, 64, 65,
258
+ /* 300 */ 66, 90, 11, 12, 90, 90, 90, 90, 90, 90,
259
+ /* 310 */ 90, 90, 90, 90, 90, 90, 90, 90, 90, 37,
260
+ /* 320 */ 38,
261
+ };
262
+ #define YY_SHIFT_USE_DFLT (321)
263
+ #define YY_SHIFT_COUNT (46)
264
+ #define YY_SHIFT_MIN (-4)
265
+ #define YY_SHIFT_MAX (291)
266
+ static const short yy_shift_ofst[] = {
267
+ /* 0 */ 88, 49, 113, 113, 113, 113, 113, 113, 42, 113,
268
+ /* 10 */ 113, 113, 42, 139, 26, 42, 151, 151, 151, 151,
269
+ /* 20 */ -4, -4, -4, -4, -4, 167, 179, 214, 282, 291,
270
+ /* 30 */ 160, 147, 236, 151, 151, 151, 151, 41, 155, 155,
271
+ /* 40 */ 182, 220, 228, 227, 239, 221, 237,
272
+ };
273
+ #define YY_REDUCE_USE_DFLT (-65)
274
+ #define YY_REDUCE_COUNT (41)
275
+ #define YY_REDUCE_MIN (-64)
276
+ #define YY_REDUCE_MAX (234)
277
+ static const short yy_reduce_ofst[] = {
278
+ /* 0 */ -41, 85, 158, 169, 191, 199, 207, 216, 107, 225,
279
+ /* 10 */ 234, 234, -64, -59, 18, -59, 112, 118, 123, 144,
280
+ /* 20 */ 163, 163, 163, 163, 163, -38, -36, -33, -1, -34,
281
+ /* 30 */ 10, 32, 86, 96, 96, 96, 96, 99, 124, 124,
282
+ /* 40 */ 159, 168,
283
+ };
284
+ static const YYACTIONTYPE yy_default[] = {
285
+ /* 0 */ 470, 470, 422, 421, 420, 361, 392, 387, 463, 414,
286
+ /* 10 */ 390, 385, 398, 404, 342, 406, 461, 424, 423, 349,
287
+ /* 20 */ 416, 351, 391, 386, 350, 433, 430, 427, 448, 335,
288
+ /* 30 */ 340, 411, 337, 395, 357, 356, 348, 326, 469, 358,
289
+ /* 40 */ 339, 338, 400, 467, 467, 333, 324,
290
+ };
291
+ /********** End of lemon-generated parsing tables *****************************/
292
+
293
+ /* The next table maps tokens (terminal symbols) into fallback tokens.
294
+ ** If a construct like the following:
295
+ **
296
+ ** %fallback ID X Y Z.
297
+ **
298
+ ** appears in the grammar, then ID becomes a fallback token for X, Y,
299
+ ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser
300
+ ** but it does not parse, the type of the token is changed to ID and
301
+ ** the parse is retried before an error is thrown.
302
+ **
303
+ ** This feature can be used, for example, to cause some keywords in a language
304
+ ** to revert to identifiers if they keyword does not apply in the context where
305
+ ** it appears.
306
+ */
307
+ #ifdef YYFALLBACK
308
+ static const YYCODETYPE yyFallback[] = {
309
+ 0, /* $ => nothing */
310
+ 0, /* LINE_HR => nothing */
311
+ 1, /* LINE_SETEXT_1 => LINE_HR */
312
+ 1, /* LINE_SETEXT_2 => LINE_HR */
313
+ 1, /* LINE_YAML => LINE_HR */
314
+ 0, /* LINE_CONTINUATION => nothing */
315
+ 5, /* LINE_PLAIN => LINE_CONTINUATION */
316
+ 5, /* LINE_INDENTED_TAB => LINE_CONTINUATION */
317
+ 5, /* LINE_INDENTED_SPACE => LINE_CONTINUATION */
318
+ 5, /* LINE_TABLE => LINE_CONTINUATION */
319
+ 5, /* LINE_TABLE_SEPARATOR => LINE_CONTINUATION */
320
+ 0, /* LINE_FALLBACK => nothing */
321
+ 11, /* LINE_HTML => LINE_FALLBACK */
322
+ 11, /* LINE_ATX_1 => LINE_FALLBACK */
323
+ 11, /* LINE_ATX_2 => LINE_FALLBACK */
324
+ 11, /* LINE_ATX_3 => LINE_FALLBACK */
325
+ 11, /* LINE_ATX_4 => LINE_FALLBACK */
326
+ 11, /* LINE_ATX_5 => LINE_FALLBACK */
327
+ 11, /* LINE_ATX_6 => LINE_FALLBACK */
328
+ 11, /* LINE_BLOCKQUOTE => LINE_FALLBACK */
329
+ 11, /* LINE_LIST_BULLETED => LINE_FALLBACK */
330
+ 11, /* LINE_LIST_ENUMERATED => LINE_FALLBACK */
331
+ 11, /* LINE_DEF_ABBREVIATION => LINE_FALLBACK */
332
+ 11, /* LINE_DEF_CITATION => LINE_FALLBACK */
333
+ 11, /* LINE_DEF_FOOTNOTE => LINE_FALLBACK */
334
+ 11, /* LINE_DEF_GLOSSARY => LINE_FALLBACK */
335
+ 11, /* LINE_DEF_LINK => LINE_FALLBACK */
336
+ 11, /* LINE_TOC => LINE_FALLBACK */
337
+ 11, /* LINE_DEFINITION => LINE_FALLBACK */
338
+ 11, /* LINE_META => LINE_FALLBACK */
339
+ 0, /* LINE_BACKTICK => nothing */
340
+ 30, /* LINE_FENCE_BACKTICK_3 => LINE_BACKTICK */
341
+ 30, /* LINE_FENCE_BACKTICK_4 => LINE_BACKTICK */
342
+ 30, /* LINE_FENCE_BACKTICK_5 => LINE_BACKTICK */
343
+ 30, /* LINE_FENCE_BACKTICK_START_3 => LINE_BACKTICK */
344
+ 30, /* LINE_FENCE_BACKTICK_START_4 => LINE_BACKTICK */
345
+ 30, /* LINE_FENCE_BACKTICK_START_5 => LINE_BACKTICK */
346
+ };
347
+ #endif /* YYFALLBACK */
348
+
349
+ /* The following structure represents a single element of the
350
+ ** parser's stack. Information stored includes:
351
+ **
352
+ ** + The state number for the parser at this level of the stack.
353
+ **
354
+ ** + The value of the token stored at this level of the stack.
355
+ ** (In other words, the "major" token.)
356
+ **
357
+ ** + The semantic value stored at this level of the stack. This is
358
+ ** the information used by the action routines in the grammar.
359
+ ** It is sometimes called the "minor" token.
360
+ **
361
+ ** After the "shift" half of a SHIFTREDUCE action, the stateno field
362
+ ** actually contains the reduce action for the second half of the
363
+ ** SHIFTREDUCE.
364
+ */
365
+ struct yyStackEntry {
366
+ YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */
367
+ YYCODETYPE major; /* The major token value. This is the code
368
+ ** number for the token at this stack level */
369
+ YYMINORTYPE minor; /* The user-supplied minor token value. This
370
+ ** is the value of the token */
371
+ };
372
+ typedef struct yyStackEntry yyStackEntry;
373
+
374
+ /* The state of the parser is completely contained in an instance of
375
+ ** the following structure */
376
+ struct yyParser {
377
+ yyStackEntry *yytos; /* Pointer to top element of the stack */
378
+ #ifdef YYTRACKMAXSTACKDEPTH
379
+ int yyhwm; /* High-water mark of the stack */
380
+ #endif
381
+ #ifndef YYNOERRORRECOVERY
382
+ int yyerrcnt; /* Shifts left before out of the error */
383
+ #endif
384
+ ParseARG_SDECL /* A place to hold %extra_argument */
385
+ #if YYSTACKDEPTH<=0
386
+ int yystksz; /* Current side of the stack */
387
+ yyStackEntry *yystack; /* The parser's stack */
388
+ yyStackEntry yystk0; /* First stack entry */
389
+ #else
390
+ yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
391
+ #endif
392
+ };
393
+ typedef struct yyParser yyParser;
394
+
395
+ #ifndef NDEBUG
396
+ #include <stdio.h>
397
+ static FILE *yyTraceFILE = 0;
398
+ static char *yyTracePrompt = 0;
399
+ #endif /* NDEBUG */
400
+
401
+ #ifndef NDEBUG
402
+ /*
403
+ ** Turn parser tracing on by giving a stream to which to write the trace
404
+ ** and a prompt to preface each trace message. Tracing is turned off
405
+ ** by making either argument NULL
406
+ **
407
+ ** Inputs:
408
+ ** <ul>
409
+ ** <li> A FILE* to which trace output should be written.
410
+ ** If NULL, then tracing is turned off.
411
+ ** <li> A prefix string written at the beginning of every
412
+ ** line of trace output. If NULL, then tracing is
413
+ ** turned off.
414
+ ** </ul>
415
+ **
416
+ ** Outputs:
417
+ ** None.
418
+ */
419
+ void ParseTrace(FILE *TraceFILE, char *zTracePrompt){
420
+ yyTraceFILE = TraceFILE;
421
+ yyTracePrompt = zTracePrompt;
422
+ if( yyTraceFILE==0 ) yyTracePrompt = 0;
423
+ else if( yyTracePrompt==0 ) yyTraceFILE = 0;
424
+ }
425
+ #endif /* NDEBUG */
426
+
427
+ #ifndef NDEBUG
428
+ /* For tracing shifts, the names of all terminals and nonterminals
429
+ ** are required. The following table supplies these names */
430
+ static const char *const yyTokenName[] = {
431
+ "$", "LINE_HR", "LINE_SETEXT_1", "LINE_SETEXT_2",
432
+ "LINE_YAML", "LINE_CONTINUATION", "LINE_PLAIN", "LINE_INDENTED_TAB",
433
+ "LINE_INDENTED_SPACE", "LINE_TABLE", "LINE_TABLE_SEPARATOR", "LINE_FALLBACK",
434
+ "LINE_HTML", "LINE_ATX_1", "LINE_ATX_2", "LINE_ATX_3",
435
+ "LINE_ATX_4", "LINE_ATX_5", "LINE_ATX_6", "LINE_BLOCKQUOTE",
436
+ "LINE_LIST_BULLETED", "LINE_LIST_ENUMERATED", "LINE_DEF_ABBREVIATION", "LINE_DEF_CITATION",
437
+ "LINE_DEF_FOOTNOTE", "LINE_DEF_GLOSSARY", "LINE_DEF_LINK", "LINE_TOC",
438
+ "LINE_DEFINITION", "LINE_META", "LINE_BACKTICK", "LINE_FENCE_BACKTICK_3",
439
+ "LINE_FENCE_BACKTICK_4", "LINE_FENCE_BACKTICK_5", "LINE_FENCE_BACKTICK_START_3", "LINE_FENCE_BACKTICK_START_4",
440
+ "LINE_FENCE_BACKTICK_START_5", "LINE_STOP_COMMENT", "LINE_EMPTY", "LINE_START_COMMENT",
441
+ "error", "doc", "blocks", "block",
442
+ "blockquote", "def_abbreviation", "def_citation", "def_footnote",
443
+ "def_glossary", "def_link", "definition_block", "empty",
444
+ "fenced_block", "html_block", "html_com_block", "indented_code",
445
+ "list_bullet", "list_enum", "meta_block", "para",
446
+ "setext_1", "setext_2", "table", "chunk",
447
+ "chunk_line", "nested_chunks", "nested_chunk", "indented_line",
448
+ "ext_chunk", "opt_ext_chunk", "tail", "quote_line",
449
+ "defs", "def", "fenced_3", "fenced_line",
450
+ "fenced_4", "fenced_5", "html_line", "html_comment",
451
+ "comment_line", "item_bullet", "item_enum", "meta_line",
452
+ "table_header", "table_body", "header_rows", "table_section",
453
+ "all_rows", "row",
454
+ };
455
+ #endif /* NDEBUG */
456
+
457
+ #ifndef NDEBUG
458
+ /* For tracing reduce actions, the names of all rules are required.
459
+ */
460
+ static const char *const yyRuleName[] = {
461
+ /* 0 */ "doc ::= blocks",
462
+ /* 1 */ "blocks ::= blocks block",
463
+ /* 2 */ "blocks ::= block",
464
+ /* 3 */ "block ::= LINE_ATX_1",
465
+ /* 4 */ "block ::= LINE_ATX_2",
466
+ /* 5 */ "block ::= LINE_ATX_3",
467
+ /* 6 */ "block ::= LINE_ATX_4",
468
+ /* 7 */ "block ::= LINE_ATX_5",
469
+ /* 8 */ "block ::= LINE_ATX_6",
470
+ /* 9 */ "block ::= LINE_HR",
471
+ /* 10 */ "block ::= LINE_YAML",
472
+ /* 11 */ "block ::= LINE_TOC",
473
+ /* 12 */ "block ::= blockquote",
474
+ /* 13 */ "block ::= def_abbreviation",
475
+ /* 14 */ "block ::= def_citation",
476
+ /* 15 */ "block ::= def_footnote",
477
+ /* 16 */ "block ::= def_glossary",
478
+ /* 17 */ "block ::= def_link",
479
+ /* 18 */ "block ::= definition_block",
480
+ /* 19 */ "block ::= empty",
481
+ /* 20 */ "block ::= fenced_block",
482
+ /* 21 */ "block ::= html_block",
483
+ /* 22 */ "block ::= html_com_block",
484
+ /* 23 */ "block ::= indented_code",
485
+ /* 24 */ "block ::= list_bullet",
486
+ /* 25 */ "block ::= list_enum",
487
+ /* 26 */ "block ::= meta_block",
488
+ /* 27 */ "block ::= meta_block LINE_SETEXT_2",
489
+ /* 28 */ "block ::= para",
490
+ /* 29 */ "block ::= setext_1",
491
+ /* 30 */ "block ::= setext_2",
492
+ /* 31 */ "block ::= table",
493
+ /* 32 */ "chunk ::= chunk chunk_line",
494
+ /* 33 */ "nested_chunks ::= nested_chunks nested_chunk",
495
+ /* 34 */ "nested_chunk ::= empty indented_line chunk",
496
+ /* 35 */ "nested_chunk ::= empty indented_line",
497
+ /* 36 */ "ext_chunk ::= chunk nested_chunks",
498
+ /* 37 */ "opt_ext_chunk ::= chunk nested_chunks",
499
+ /* 38 */ "blockquote ::= blockquote quote_line",
500
+ /* 39 */ "def_citation ::= LINE_DEF_CITATION tail",
501
+ /* 40 */ "def_footnote ::= LINE_DEF_FOOTNOTE tail",
502
+ /* 41 */ "def_glossary ::= LINE_DEF_GLOSSARY tail",
503
+ /* 42 */ "def_link ::= LINE_DEF_LINK chunk",
504
+ /* 43 */ "def_abbreviation ::= LINE_DEF_ABBREVIATION chunk",
505
+ /* 44 */ "definition_block ::= para defs",
506
+ /* 45 */ "defs ::= defs def",
507
+ /* 46 */ "def ::= LINE_DEFINITION tail",
508
+ /* 47 */ "def ::= LINE_DEFINITION",
509
+ /* 48 */ "empty ::= empty LINE_EMPTY",
510
+ /* 49 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3",
511
+ /* 50 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4",
512
+ /* 51 */ "fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5",
513
+ /* 52 */ "fenced_3 ::= fenced_3 fenced_line",
514
+ /* 53 */ "fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4",
515
+ /* 54 */ "fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5",
516
+ /* 55 */ "fenced_4 ::= fenced_4 fenced_line",
517
+ /* 56 */ "fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3",
518
+ /* 57 */ "fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3",
519
+ /* 58 */ "fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5",
520
+ /* 59 */ "fenced_5 ::= fenced_5 fenced_line",
521
+ /* 60 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3",
522
+ /* 61 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3",
523
+ /* 62 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4",
524
+ /* 63 */ "fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4",
525
+ /* 64 */ "html_block ::= html_block html_line",
526
+ /* 65 */ "html_com_block ::= html_comment LINE_STOP_COMMENT",
527
+ /* 66 */ "html_comment ::= html_comment comment_line",
528
+ /* 67 */ "indented_code ::= indented_code indented_line",
529
+ /* 68 */ "indented_code ::= indented_code LINE_EMPTY",
530
+ /* 69 */ "list_bullet ::= list_bullet item_bullet",
531
+ /* 70 */ "item_bullet ::= LINE_LIST_BULLETED ext_chunk",
532
+ /* 71 */ "item_bullet ::= LINE_LIST_BULLETED chunk",
533
+ /* 72 */ "item_bullet ::= LINE_LIST_BULLETED nested_chunks",
534
+ /* 73 */ "item_bullet ::= LINE_LIST_BULLETED",
535
+ /* 74 */ "list_enum ::= list_enum item_enum",
536
+ /* 75 */ "item_enum ::= LINE_LIST_ENUMERATED ext_chunk",
537
+ /* 76 */ "item_enum ::= LINE_LIST_ENUMERATED chunk",
538
+ /* 77 */ "item_enum ::= LINE_LIST_ENUMERATED nested_chunks",
539
+ /* 78 */ "item_enum ::= LINE_LIST_ENUMERATED",
540
+ /* 79 */ "meta_block ::= meta_block meta_line",
541
+ /* 80 */ "meta_block ::= LINE_YAML LINE_META",
542
+ /* 81 */ "para ::= LINE_PLAIN chunk",
543
+ /* 82 */ "setext_1 ::= para LINE_SETEXT_1",
544
+ /* 83 */ "setext_2 ::= para LINE_SETEXT_2",
545
+ /* 84 */ "table ::= table_header table_body",
546
+ /* 85 */ "table_header ::= header_rows LINE_TABLE_SEPARATOR",
547
+ /* 86 */ "table_header ::= LINE_TABLE_SEPARATOR",
548
+ /* 87 */ "header_rows ::= header_rows LINE_TABLE",
549
+ /* 88 */ "table_body ::= table_body table_section",
550
+ /* 89 */ "table_section ::= all_rows LINE_EMPTY",
551
+ /* 90 */ "table_section ::= all_rows",
552
+ /* 91 */ "all_rows ::= all_rows row",
553
+ /* 92 */ "para ::= all_rows",
554
+ /* 93 */ "chunk ::= chunk_line",
555
+ /* 94 */ "chunk_line ::= LINE_CONTINUATION",
556
+ /* 95 */ "chunk_line ::= LINE_STOP_COMMENT",
557
+ /* 96 */ "nested_chunks ::= nested_chunk",
558
+ /* 97 */ "nested_chunk ::= empty",
559
+ /* 98 */ "indented_line ::= LINE_INDENTED_TAB",
560
+ /* 99 */ "indented_line ::= LINE_INDENTED_SPACE",
561
+ /* 100 */ "opt_ext_chunk ::= chunk",
562
+ /* 101 */ "tail ::= opt_ext_chunk",
563
+ /* 102 */ "tail ::= nested_chunks",
564
+ /* 103 */ "blockquote ::= LINE_BLOCKQUOTE",
565
+ /* 104 */ "quote_line ::= LINE_BLOCKQUOTE",
566
+ /* 105 */ "quote_line ::= LINE_CONTINUATION",
567
+ /* 106 */ "def_citation ::= LINE_DEF_CITATION",
568
+ /* 107 */ "def_footnote ::= LINE_DEF_FOOTNOTE",
569
+ /* 108 */ "def_glossary ::= LINE_DEF_GLOSSARY",
570
+ /* 109 */ "def_link ::= LINE_DEF_LINK",
571
+ /* 110 */ "def_abbreviation ::= LINE_DEF_ABBREVIATION",
572
+ /* 111 */ "defs ::= def",
573
+ /* 112 */ "empty ::= LINE_EMPTY",
574
+ /* 113 */ "fenced_block ::= fenced_3",
575
+ /* 114 */ "fenced_3 ::= LINE_FENCE_BACKTICK_3",
576
+ /* 115 */ "fenced_3 ::= LINE_FENCE_BACKTICK_START_3",
577
+ /* 116 */ "fenced_block ::= fenced_4",
578
+ /* 117 */ "fenced_4 ::= LINE_FENCE_BACKTICK_4",
579
+ /* 118 */ "fenced_4 ::= LINE_FENCE_BACKTICK_START_4",
580
+ /* 119 */ "fenced_block ::= fenced_5",
581
+ /* 120 */ "fenced_5 ::= LINE_FENCE_BACKTICK_5",
582
+ /* 121 */ "fenced_5 ::= LINE_FENCE_BACKTICK_START_5",
583
+ /* 122 */ "fenced_line ::= LINE_CONTINUATION",
584
+ /* 123 */ "fenced_line ::= LINE_EMPTY",
585
+ /* 124 */ "fenced_line ::= LINE_FALLBACK",
586
+ /* 125 */ "fenced_line ::= LINE_HR",
587
+ /* 126 */ "fenced_line ::= LINE_HTML",
588
+ /* 127 */ "fenced_line ::= LINE_START_COMMENT",
589
+ /* 128 */ "fenced_line ::= LINE_STOP_COMMENT",
590
+ /* 129 */ "html_block ::= LINE_HTML",
591
+ /* 130 */ "html_line ::= LINE_CONTINUATION",
592
+ /* 131 */ "html_line ::= LINE_FALLBACK",
593
+ /* 132 */ "html_line ::= LINE_HR",
594
+ /* 133 */ "html_line ::= LINE_HTML",
595
+ /* 134 */ "html_com_block ::= html_comment",
596
+ /* 135 */ "html_comment ::= LINE_START_COMMENT",
597
+ /* 136 */ "comment_line ::= LINE_CONTINUATION",
598
+ /* 137 */ "comment_line ::= LINE_EMPTY",
599
+ /* 138 */ "comment_line ::= LINE_FALLBACK",
600
+ /* 139 */ "comment_line ::= LINE_HR",
601
+ /* 140 */ "comment_line ::= LINE_HTML",
602
+ /* 141 */ "indented_code ::= indented_line",
603
+ /* 142 */ "list_bullet ::= item_bullet",
604
+ /* 143 */ "list_enum ::= item_enum",
605
+ /* 144 */ "meta_block ::= LINE_META",
606
+ /* 145 */ "meta_line ::= LINE_META",
607
+ /* 146 */ "meta_line ::= LINE_CONTINUATION",
608
+ /* 147 */ "para ::= LINE_PLAIN",
609
+ /* 148 */ "para ::= LINE_STOP_COMMENT",
610
+ /* 149 */ "table ::= table_header",
611
+ /* 150 */ "header_rows ::= LINE_TABLE",
612
+ /* 151 */ "table_body ::= table_section",
613
+ /* 152 */ "all_rows ::= row",
614
+ /* 153 */ "row ::= header_rows",
615
+ /* 154 */ "row ::= LINE_TABLE_SEPARATOR",
616
+ /* 155 */ "para ::= defs",
617
+ };
618
+ #endif /* NDEBUG */
619
+
620
+
621
+ #if YYSTACKDEPTH<=0
622
+ /*
623
+ ** Try to increase the size of the parser stack. Return the number
624
+ ** of errors. Return 0 on success.
625
+ */
626
+ static int yyGrowStack(yyParser *p){
627
+ int newSize;
628
+ int idx;
629
+ yyStackEntry *pNew;
630
+
631
+ newSize = p->yystksz*2 + 100;
632
+ idx = p->yytos ? (int)(p->yytos - p->yystack) : 0;
633
+ if( p->yystack==&p->yystk0 ){
634
+ pNew = malloc(newSize*sizeof(pNew[0]));
635
+ if( pNew ) pNew[0] = p->yystk0;
636
+ }else{
637
+ pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
638
+ }
639
+ if( pNew ){
640
+ p->yystack = pNew;
641
+ p->yytos = &p->yystack[idx];
642
+ #ifndef NDEBUG
643
+ if( yyTraceFILE ){
644
+ fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n",
645
+ yyTracePrompt, p->yystksz, newSize);
646
+ }
647
+ #endif
648
+ p->yystksz = newSize;
649
+ }
650
+ return pNew==0;
651
+ }
652
+ #endif
653
+
654
+ /* Datatype of the argument to the memory allocated passed as the
655
+ ** second argument to ParseAlloc() below. This can be changed by
656
+ ** putting an appropriate #define in the %include section of the input
657
+ ** grammar.
658
+ */
659
+ #ifndef YYMALLOCARGTYPE
660
+ # define YYMALLOCARGTYPE size_t
661
+ #endif
662
+
663
+ /*
664
+ ** This function allocates a new parser.
665
+ ** The only argument is a pointer to a function which works like
666
+ ** malloc.
667
+ **
668
+ ** Inputs:
669
+ ** A pointer to the function used to allocate memory.
670
+ **
671
+ ** Outputs:
672
+ ** A pointer to a parser. This pointer is used in subsequent calls
673
+ ** to Parse and ParseFree.
674
+ */
675
+ void *ParseAlloc(void *(*mallocProc)(YYMALLOCARGTYPE)){
676
+ yyParser *pParser;
677
+ pParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) );
678
+ if( pParser ){
679
+ #ifdef YYTRACKMAXSTACKDEPTH
680
+ pParser->yyhwm = 0;
681
+ #endif
682
+ #if YYSTACKDEPTH<=0
683
+ pParser->yytos = NULL;
684
+ pParser->yystack = NULL;
685
+ pParser->yystksz = 0;
686
+ if( yyGrowStack(pParser) ){
687
+ pParser->yystack = &pParser->yystk0;
688
+ pParser->yystksz = 1;
689
+ }
690
+ #endif
691
+ #ifndef YYNOERRORRECOVERY
692
+ pParser->yyerrcnt = -1;
693
+ #endif
694
+ pParser->yytos = pParser->yystack;
695
+ pParser->yystack[0].stateno = 0;
696
+ pParser->yystack[0].major = 0;
697
+ }
698
+ return pParser;
699
+ }
700
+
701
+ /* The following function deletes the "minor type" or semantic value
702
+ ** associated with a symbol. The symbol can be either a terminal
703
+ ** or nonterminal. "yymajor" is the symbol code, and "yypminor" is
704
+ ** a pointer to the value to be deleted. The code used to do the
705
+ ** deletions is derived from the %destructor and/or %token_destructor
706
+ ** directives of the input grammar.
707
+ */
708
+ static void yy_destructor(
709
+ yyParser *yypParser, /* The parser */
710
+ YYCODETYPE yymajor, /* Type code for object to destroy */
711
+ YYMINORTYPE *yypminor /* The object to be destroyed */
712
+ ){
713
+ ParseARG_FETCH;
714
+ switch( yymajor ){
715
+ /* Here is inserted the actions which take place when a
716
+ ** terminal or non-terminal is destroyed. This can happen
717
+ ** when the symbol is popped from the stack during a
718
+ ** reduce or during error processing or when a parser is
719
+ ** being destroyed before it is finished parsing.
720
+ **
721
+ ** Note: during a reduce, the only symbols destroyed are those
722
+ ** which appear on the RHS of the rule, but which are *not* used
723
+ ** inside the C code.
724
+ */
725
+ /********* Begin destructor definitions ***************************************/
726
+ /********* End destructor definitions *****************************************/
727
+ default: break; /* If no destructor action specified: do nothing */
728
+ }
729
+ }
730
+
731
+ /*
732
+ ** Pop the parser's stack once.
733
+ **
734
+ ** If there is a destructor routine associated with the token which
735
+ ** is popped from the stack, then call it.
736
+ */
737
+ static void yy_pop_parser_stack(yyParser *pParser){
738
+ yyStackEntry *yytos;
739
+ assert( pParser->yytos!=0 );
740
+ assert( pParser->yytos > pParser->yystack );
741
+ yytos = pParser->yytos--;
742
+ #ifndef NDEBUG
743
+ if( yyTraceFILE ){
744
+ fprintf(yyTraceFILE,"%sPopping %s\n",
745
+ yyTracePrompt,
746
+ yyTokenName[yytos->major]);
747
+ }
748
+ #endif
749
+ yy_destructor(pParser, yytos->major, &yytos->minor);
750
+ }
751
+
752
+ /*
753
+ ** Deallocate and destroy a parser. Destructors are called for
754
+ ** all stack elements before shutting the parser down.
755
+ **
756
+ ** If the YYPARSEFREENEVERNULL macro exists (for example because it
757
+ ** is defined in a %include section of the input grammar) then it is
758
+ ** assumed that the input pointer is never NULL.
759
+ */
760
+ void ParseFree(
761
+ void *p, /* The parser to be deleted */
762
+ void (*freeProc)(void*) /* Function used to reclaim memory */
763
+ ){
764
+ yyParser *pParser = (yyParser*)p;
765
+ #ifndef YYPARSEFREENEVERNULL
766
+ if( pParser==0 ) return;
767
+ #endif
768
+ while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser);
769
+ #if YYSTACKDEPTH<=0
770
+ if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack);
771
+ #endif
772
+ (*freeProc)((void*)pParser);
773
+ }
774
+
775
+ /*
776
+ ** Return the peak depth of the stack for a parser.
777
+ */
778
+ #ifdef YYTRACKMAXSTACKDEPTH
779
+ int ParseStackPeak(void *p){
780
+ yyParser *pParser = (yyParser*)p;
781
+ return pParser->yyhwm;
782
+ }
783
+ #endif
784
+
785
+ /*
786
+ ** Find the appropriate action for a parser given the terminal
787
+ ** look-ahead token iLookAhead.
788
+ */
789
+ static unsigned int yy_find_shift_action(
790
+ yyParser *pParser, /* The parser */
791
+ YYCODETYPE iLookAhead /* The look-ahead token */
792
+ ){
793
+ int i;
794
+ int stateno = pParser->yytos->stateno;
795
+
796
+ if( stateno>=YY_MIN_REDUCE ) return stateno;
797
+ assert( stateno <= YY_SHIFT_COUNT );
798
+ do{
799
+ i = yy_shift_ofst[stateno];
800
+ assert( iLookAhead!=YYNOCODE );
801
+ i += iLookAhead;
802
+ if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
803
+ #ifdef YYFALLBACK
804
+ YYCODETYPE iFallback; /* Fallback token */
805
+ if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
806
+ && (iFallback = yyFallback[iLookAhead])!=0 ){
807
+ #ifndef NDEBUG
808
+ if( yyTraceFILE ){
809
+ fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
810
+ yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
811
+ }
812
+ #endif
813
+ assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */
814
+ iLookAhead = iFallback;
815
+ continue;
816
+ }
817
+ #endif
818
+ #ifdef YYWILDCARD
819
+ {
820
+ int j = i - iLookAhead + YYWILDCARD;
821
+ if(
822
+ #if YY_SHIFT_MIN+YYWILDCARD<0
823
+ j>=0 &&
824
+ #endif
825
+ #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
826
+ j<YY_ACTTAB_COUNT &&
827
+ #endif
828
+ yy_lookahead[j]==YYWILDCARD && iLookAhead>0
829
+ ){
830
+ #ifndef NDEBUG
831
+ if( yyTraceFILE ){
832
+ fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
833
+ yyTracePrompt, yyTokenName[iLookAhead],
834
+ yyTokenName[YYWILDCARD]);
835
+ }
836
+ #endif /* NDEBUG */
837
+ return yy_action[j];
838
+ }
839
+ }
840
+ #endif /* YYWILDCARD */
841
+ return yy_default[stateno];
842
+ }else{
843
+ return yy_action[i];
844
+ }
845
+ }while(1);
846
+ }
847
+
848
+ /*
849
+ ** Find the appropriate action for a parser given the non-terminal
850
+ ** look-ahead token iLookAhead.
851
+ */
852
+ static int yy_find_reduce_action(
853
+ int stateno, /* Current state number */
854
+ YYCODETYPE iLookAhead /* The look-ahead token */
855
+ ){
856
+ int i;
857
+ #ifdef YYERRORSYMBOL
858
+ if( stateno>YY_REDUCE_COUNT ){
859
+ return yy_default[stateno];
860
+ }
861
+ #else
862
+ assert( stateno<=YY_REDUCE_COUNT );
863
+ #endif
864
+ i = yy_reduce_ofst[stateno];
865
+ assert( i!=YY_REDUCE_USE_DFLT );
866
+ assert( iLookAhead!=YYNOCODE );
867
+ i += iLookAhead;
868
+ #ifdef YYERRORSYMBOL
869
+ if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
870
+ return yy_default[stateno];
871
+ }
872
+ #else
873
+ assert( i>=0 && i<YY_ACTTAB_COUNT );
874
+ assert( yy_lookahead[i]==iLookAhead );
875
+ #endif
876
+ return yy_action[i];
877
+ }
878
+
879
+ /*
880
+ ** The following routine is called if the stack overflows.
881
+ */
882
+ static void yyStackOverflow(yyParser *yypParser){
883
+ ParseARG_FETCH;
884
+ yypParser->yytos--;
885
+ #ifndef NDEBUG
886
+ if( yyTraceFILE ){
887
+ fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
888
+ }
889
+ #endif
890
+ while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
891
+ /* Here code is inserted which will execute if the parser
892
+ ** stack every overflows */
893
+ /******** Begin %stack_overflow code ******************************************/
894
+ /******** End %stack_overflow code ********************************************/
895
+ ParseARG_STORE; /* Suppress warning about unused %extra_argument var */
896
+ }
897
+
898
+ /*
899
+ ** Print tracing information for a SHIFT action
900
+ */
901
+ #ifndef NDEBUG
902
+ static void yyTraceShift(yyParser *yypParser, int yyNewState){
903
+ if( yyTraceFILE ){
904
+ if( yyNewState<YYNSTATE ){
905
+ fprintf(yyTraceFILE,"%sShift '%s', go to state %d\n",
906
+ yyTracePrompt,yyTokenName[yypParser->yytos->major],
907
+ yyNewState);
908
+ }else{
909
+ fprintf(yyTraceFILE,"%sShift '%s'\n",
910
+ yyTracePrompt,yyTokenName[yypParser->yytos->major]);
911
+ }
912
+ }
913
+ }
914
+ #else
915
+ # define yyTraceShift(X,Y)
916
+ #endif
917
+
918
+ /*
919
+ ** Perform a shift action.
920
+ */
921
+ static void yy_shift(
922
+ yyParser *yypParser, /* The parser to be shifted */
923
+ int yyNewState, /* The new state to shift in */
924
+ int yyMajor, /* The major token to shift in */
925
+ ParseTOKENTYPE yyMinor /* The minor token to shift in */
926
+ ){
927
+ yyStackEntry *yytos;
928
+ yypParser->yytos++;
929
+ #ifdef YYTRACKMAXSTACKDEPTH
930
+ if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
931
+ yypParser->yyhwm++;
932
+ assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) );
933
+ }
934
+ #endif
935
+ #if YYSTACKDEPTH>0
936
+ if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH] ){
937
+ yyStackOverflow(yypParser);
938
+ return;
939
+ }
940
+ #else
941
+ if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){
942
+ if( yyGrowStack(yypParser) ){
943
+ yyStackOverflow(yypParser);
944
+ return;
945
+ }
946
+ }
947
+ #endif
948
+ if( yyNewState > YY_MAX_SHIFT ){
949
+ yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
950
+ }
951
+ yytos = yypParser->yytos;
952
+ yytos->stateno = (YYACTIONTYPE)yyNewState;
953
+ yytos->major = (YYCODETYPE)yyMajor;
954
+ yytos->minor.yy0 = yyMinor;
955
+ yyTraceShift(yypParser, yyNewState);
956
+ }
957
+
958
+ /* The following table contains information about every rule that
959
+ ** is used during the reduce.
960
+ */
961
+ static const struct {
962
+ YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
963
+ unsigned char nrhs; /* Number of right-hand side symbols in the rule */
964
+ } yyRuleInfo[] = {
965
+ { 41, 1 },
966
+ { 42, 2 },
967
+ { 42, 1 },
968
+ { 43, 1 },
969
+ { 43, 1 },
970
+ { 43, 1 },
971
+ { 43, 1 },
972
+ { 43, 1 },
973
+ { 43, 1 },
974
+ { 43, 1 },
975
+ { 43, 1 },
976
+ { 43, 1 },
977
+ { 43, 1 },
978
+ { 43, 1 },
979
+ { 43, 1 },
980
+ { 43, 1 },
981
+ { 43, 1 },
982
+ { 43, 1 },
983
+ { 43, 1 },
984
+ { 43, 1 },
985
+ { 43, 1 },
986
+ { 43, 1 },
987
+ { 43, 1 },
988
+ { 43, 1 },
989
+ { 43, 1 },
990
+ { 43, 1 },
991
+ { 43, 1 },
992
+ { 43, 2 },
993
+ { 43, 1 },
994
+ { 43, 1 },
995
+ { 43, 1 },
996
+ { 43, 1 },
997
+ { 63, 2 },
998
+ { 65, 2 },
999
+ { 66, 3 },
1000
+ { 66, 2 },
1001
+ { 68, 2 },
1002
+ { 69, 2 },
1003
+ { 44, 2 },
1004
+ { 46, 2 },
1005
+ { 47, 2 },
1006
+ { 48, 2 },
1007
+ { 49, 2 },
1008
+ { 45, 2 },
1009
+ { 50, 2 },
1010
+ { 72, 2 },
1011
+ { 73, 2 },
1012
+ { 73, 1 },
1013
+ { 51, 2 },
1014
+ { 52, 2 },
1015
+ { 52, 2 },
1016
+ { 52, 2 },
1017
+ { 74, 2 },
1018
+ { 52, 2 },
1019
+ { 52, 2 },
1020
+ { 76, 2 },
1021
+ { 76, 2 },
1022
+ { 76, 2 },
1023
+ { 52, 2 },
1024
+ { 77, 2 },
1025
+ { 77, 2 },
1026
+ { 77, 2 },
1027
+ { 77, 2 },
1028
+ { 77, 2 },
1029
+ { 53, 2 },
1030
+ { 54, 2 },
1031
+ { 79, 2 },
1032
+ { 55, 2 },
1033
+ { 55, 2 },
1034
+ { 56, 2 },
1035
+ { 81, 2 },
1036
+ { 81, 2 },
1037
+ { 81, 2 },
1038
+ { 81, 1 },
1039
+ { 57, 2 },
1040
+ { 82, 2 },
1041
+ { 82, 2 },
1042
+ { 82, 2 },
1043
+ { 82, 1 },
1044
+ { 58, 2 },
1045
+ { 58, 2 },
1046
+ { 59, 2 },
1047
+ { 60, 2 },
1048
+ { 61, 2 },
1049
+ { 62, 2 },
1050
+ { 84, 2 },
1051
+ { 84, 1 },
1052
+ { 86, 2 },
1053
+ { 85, 2 },
1054
+ { 87, 2 },
1055
+ { 87, 1 },
1056
+ { 88, 2 },
1057
+ { 59, 1 },
1058
+ { 63, 1 },
1059
+ { 64, 1 },
1060
+ { 64, 1 },
1061
+ { 65, 1 },
1062
+ { 66, 1 },
1063
+ { 67, 1 },
1064
+ { 67, 1 },
1065
+ { 69, 1 },
1066
+ { 70, 1 },
1067
+ { 70, 1 },
1068
+ { 44, 1 },
1069
+ { 71, 1 },
1070
+ { 71, 1 },
1071
+ { 46, 1 },
1072
+ { 47, 1 },
1073
+ { 48, 1 },
1074
+ { 49, 1 },
1075
+ { 45, 1 },
1076
+ { 72, 1 },
1077
+ { 51, 1 },
1078
+ { 52, 1 },
1079
+ { 74, 1 },
1080
+ { 74, 1 },
1081
+ { 52, 1 },
1082
+ { 76, 1 },
1083
+ { 76, 1 },
1084
+ { 52, 1 },
1085
+ { 77, 1 },
1086
+ { 77, 1 },
1087
+ { 75, 1 },
1088
+ { 75, 1 },
1089
+ { 75, 1 },
1090
+ { 75, 1 },
1091
+ { 75, 1 },
1092
+ { 75, 1 },
1093
+ { 75, 1 },
1094
+ { 53, 1 },
1095
+ { 78, 1 },
1096
+ { 78, 1 },
1097
+ { 78, 1 },
1098
+ { 78, 1 },
1099
+ { 54, 1 },
1100
+ { 79, 1 },
1101
+ { 80, 1 },
1102
+ { 80, 1 },
1103
+ { 80, 1 },
1104
+ { 80, 1 },
1105
+ { 80, 1 },
1106
+ { 55, 1 },
1107
+ { 56, 1 },
1108
+ { 57, 1 },
1109
+ { 58, 1 },
1110
+ { 83, 1 },
1111
+ { 83, 1 },
1112
+ { 59, 1 },
1113
+ { 59, 1 },
1114
+ { 62, 1 },
1115
+ { 86, 1 },
1116
+ { 85, 1 },
1117
+ { 88, 1 },
1118
+ { 89, 1 },
1119
+ { 89, 1 },
1120
+ { 59, 1 },
1121
+ };
1122
+
1123
+ static void yy_accept(yyParser*); /* Forward Declaration */
1124
+
1125
+ /*
1126
+ ** Perform a reduce action and the shift that must immediately
1127
+ ** follow the reduce.
1128
+ */
1129
+ static void yy_reduce(
1130
+ yyParser *yypParser, /* The parser */
1131
+ unsigned int yyruleno /* Number of the rule by which to reduce */
1132
+ ){
1133
+ int yygoto; /* The next state */
1134
+ int yyact; /* The next action */
1135
+ yyStackEntry *yymsp; /* The top of the parser's stack */
1136
+ int yysize; /* Amount to pop the stack */
1137
+ ParseARG_FETCH;
1138
+ yymsp = yypParser->yytos;
1139
+ #ifndef NDEBUG
1140
+ if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
1141
+ yysize = yyRuleInfo[yyruleno].nrhs;
1142
+ fprintf(yyTraceFILE, "%sReduce [%s], go to state %d.\n", yyTracePrompt,
1143
+ yyRuleName[yyruleno], yymsp[-yysize].stateno);
1144
+ }
1145
+ #endif /* NDEBUG */
1146
+
1147
+ /* Check that the stack is large enough to grow by a single entry
1148
+ ** if the RHS of the rule is empty. This ensures that there is room
1149
+ ** enough on the stack to push the LHS value */
1150
+ if( yyRuleInfo[yyruleno].nrhs==0 ){
1151
+ #ifdef YYTRACKMAXSTACKDEPTH
1152
+ if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
1153
+ yypParser->yyhwm++;
1154
+ assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack));
1155
+ }
1156
+ #endif
1157
+ #if YYSTACKDEPTH>0
1158
+ if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH-1] ){
1159
+ yyStackOverflow(yypParser);
1160
+ return;
1161
+ }
1162
+ #else
1163
+ if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
1164
+ if( yyGrowStack(yypParser) ){
1165
+ yyStackOverflow(yypParser);
1166
+ return;
1167
+ }
1168
+ yymsp = yypParser->yytos;
1169
+ }
1170
+ #endif
1171
+ }
1172
+
1173
+ switch( yyruleno ){
1174
+ /* Beginning here are the reduction cases. A typical example
1175
+ ** follows:
1176
+ ** case 0:
1177
+ ** #line <lineno> <grammarfile>
1178
+ ** { ... } // User supplied code
1179
+ ** #line <lineno> <thisfile>
1180
+ ** break;
1181
+ */
1182
+ /********** Begin reduce actions **********************************************/
1183
+ YYMINORTYPE yylhsminor;
1184
+ case 0: /* doc ::= blocks */
1185
+ { engine->root = yymsp[0].minor.yy0; }
1186
+ break;
1187
+ case 1: /* blocks ::= blocks block */
1188
+ {
1189
+ strip_line_tokens_from_block(engine, yymsp[0].minor.yy0);
1190
+ if (yymsp[-1].minor.yy0 == NULL) { yymsp[-1].minor.yy0 = yymsp[0].minor.yy0; yymsp[0].minor.yy0 = NULL;}
1191
+ yylhsminor.yy0 = yymsp[-1].minor.yy0;
1192
+ token_chain_append(yylhsminor.yy0, yymsp[0].minor.yy0);
1193
+ #ifndef NDEBUG
1194
+ fprintf(stderr, "Next block %d\n", yylhsminor.yy0->tail->type);
1195
+ #endif
1196
+ }
1197
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1198
+ break;
1199
+ case 2: /* blocks ::= block */
1200
+ {
1201
+ engine->root = yymsp[0].minor.yy0; // In case the first block is metadata and we just want to know if it exists
1202
+ strip_line_tokens_from_block(engine, yymsp[0].minor.yy0);
1203
+ #ifndef NDEBUG
1204
+ fprintf(stderr, "First block %d\n", yymsp[0].minor.yy0->type);
1205
+ #endif
1206
+ yylhsminor.yy0 = yymsp[0].minor.yy0;
1207
+ }
1208
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1209
+ break;
1210
+ case 3: /* block ::= LINE_ATX_1 */
1211
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H1); stack_push(engine->header_stack, yylhsminor.yy0); }
1212
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1213
+ break;
1214
+ case 4: /* block ::= LINE_ATX_2 */
1215
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H2); stack_push(engine->header_stack, yylhsminor.yy0); }
1216
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1217
+ break;
1218
+ case 5: /* block ::= LINE_ATX_3 */
1219
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H3); stack_push(engine->header_stack, yylhsminor.yy0); }
1220
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1221
+ break;
1222
+ case 6: /* block ::= LINE_ATX_4 */
1223
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H4); stack_push(engine->header_stack, yylhsminor.yy0); }
1224
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1225
+ break;
1226
+ case 7: /* block ::= LINE_ATX_5 */
1227
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H5); stack_push(engine->header_stack, yylhsminor.yy0); }
1228
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1229
+ break;
1230
+ case 8: /* block ::= LINE_ATX_6 */
1231
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_H6); stack_push(engine->header_stack, yylhsminor.yy0); }
1232
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1233
+ break;
1234
+ case 9: /* block ::= LINE_HR */
1235
+ case 10: /* block ::= LINE_YAML */ yytestcase(yyruleno==10);
1236
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HR); }
1237
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1238
+ break;
1239
+ case 11: /* block ::= LINE_TOC */
1240
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TOC); }
1241
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1242
+ break;
1243
+ case 12: /* block ::= blockquote */
1244
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_BLOCKQUOTE); recursive_parse_blockquote(engine, yylhsminor.yy0); }
1245
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1246
+ break;
1247
+ case 13: /* block ::= def_abbreviation */
1248
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_ABBREVIATION); stack_push(engine->definition_stack, yylhsminor.yy0); }
1249
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1250
+ break;
1251
+ case 14: /* block ::= def_citation */
1252
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_CITATION); stack_push(engine->definition_stack, yylhsminor.yy0); }
1253
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1254
+ break;
1255
+ case 15: /* block ::= def_footnote */
1256
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_FOOTNOTE); stack_push(engine->definition_stack, yylhsminor.yy0); recursive_parse_indent(engine, yylhsminor.yy0); }
1257
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1258
+ break;
1259
+ case 16: /* block ::= def_glossary */
1260
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_GLOSSARY); stack_push(engine->definition_stack, yylhsminor.yy0); recursive_parse_indent(engine, yylhsminor.yy0); }
1261
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1262
+ break;
1263
+ case 17: /* block ::= def_link */
1264
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEF_LINK); stack_push(engine->definition_stack, yylhsminor.yy0); }
1265
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1266
+ break;
1267
+ case 18: /* block ::= definition_block */
1268
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFLIST); }
1269
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1270
+ break;
1271
+ case 19: /* block ::= empty */
1272
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_EMPTY); }
1273
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1274
+ break;
1275
+ case 20: /* block ::= fenced_block */
1276
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_FENCED); yymsp[0].minor.yy0->child->type = CODE_FENCE; }
1277
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1278
+ break;
1279
+ case 21: /* block ::= html_block */
1280
+ case 22: /* block ::= html_com_block */ yytestcase(yyruleno==22);
1281
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_HTML); }
1282
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1283
+ break;
1284
+ case 23: /* block ::= indented_code */
1285
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_CODE_INDENTED); }
1286
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1287
+ break;
1288
+ case 24: /* block ::= list_bullet */
1289
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_BULLETED); is_list_loose(yylhsminor.yy0); }
1290
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1291
+ break;
1292
+ case 25: /* block ::= list_enum */
1293
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ENUMERATED); is_list_loose(yylhsminor.yy0); }
1294
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1295
+ break;
1296
+ case 26: /* block ::= meta_block */
1297
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_META); }
1298
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1299
+ break;
1300
+ case 27: /* block ::= meta_block LINE_SETEXT_2 */
1301
+ { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_META); token_append_child(yylhsminor.yy0, yymsp[0].minor.yy0); }
1302
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1303
+ break;
1304
+ case 28: /* block ::= para */
1305
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_PARA); is_para_html(engine, yylhsminor.yy0); }
1306
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1307
+ break;
1308
+ case 29: /* block ::= setext_1 */
1309
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_SETEXT_1); stack_push(engine->header_stack, yylhsminor.yy0); }
1310
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1311
+ break;
1312
+ case 30: /* block ::= setext_2 */
1313
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_SETEXT_2); stack_push(engine->header_stack, yylhsminor.yy0); }
1314
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1315
+ break;
1316
+ case 31: /* block ::= table */
1317
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE); stack_push(engine->table_stack, yylhsminor.yy0); }
1318
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1319
+ break;
1320
+ case 32: /* chunk ::= chunk chunk_line */
1321
+ case 33: /* nested_chunks ::= nested_chunks nested_chunk */ yytestcase(yyruleno==33);
1322
+ case 36: /* ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==36);
1323
+ case 37: /* opt_ext_chunk ::= chunk nested_chunks */ yytestcase(yyruleno==37);
1324
+ case 38: /* blockquote ::= blockquote quote_line */ yytestcase(yyruleno==38);
1325
+ case 39: /* def_citation ::= LINE_DEF_CITATION tail */ yytestcase(yyruleno==39);
1326
+ case 40: /* def_footnote ::= LINE_DEF_FOOTNOTE tail */ yytestcase(yyruleno==40);
1327
+ case 41: /* def_glossary ::= LINE_DEF_GLOSSARY tail */ yytestcase(yyruleno==41);
1328
+ case 42: /* def_link ::= LINE_DEF_LINK chunk */ yytestcase(yyruleno==42);
1329
+ case 43: /* def_abbreviation ::= LINE_DEF_ABBREVIATION chunk */ yytestcase(yyruleno==43);
1330
+ case 45: /* defs ::= defs def */ yytestcase(yyruleno==45);
1331
+ case 48: /* empty ::= empty LINE_EMPTY */ yytestcase(yyruleno==48);
1332
+ case 52: /* fenced_3 ::= fenced_3 fenced_line */ yytestcase(yyruleno==52);
1333
+ case 55: /* fenced_4 ::= fenced_4 fenced_line */ yytestcase(yyruleno==55);
1334
+ case 56: /* fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==56);
1335
+ case 57: /* fenced_4 ::= fenced_4 LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==57);
1336
+ case 59: /* fenced_5 ::= fenced_5 fenced_line */ yytestcase(yyruleno==59);
1337
+ case 60: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==60);
1338
+ case 61: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==61);
1339
+ case 62: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==62);
1340
+ case 63: /* fenced_5 ::= fenced_5 LINE_FENCE_BACKTICK_START_4 */ yytestcase(yyruleno==63);
1341
+ case 64: /* html_block ::= html_block html_line */ yytestcase(yyruleno==64);
1342
+ case 65: /* html_com_block ::= html_comment LINE_STOP_COMMENT */ yytestcase(yyruleno==65);
1343
+ case 66: /* html_comment ::= html_comment comment_line */ yytestcase(yyruleno==66);
1344
+ case 67: /* indented_code ::= indented_code indented_line */ yytestcase(yyruleno==67);
1345
+ case 68: /* indented_code ::= indented_code LINE_EMPTY */ yytestcase(yyruleno==68);
1346
+ case 69: /* list_bullet ::= list_bullet item_bullet */ yytestcase(yyruleno==69);
1347
+ case 74: /* list_enum ::= list_enum item_enum */ yytestcase(yyruleno==74);
1348
+ case 79: /* meta_block ::= meta_block meta_line */ yytestcase(yyruleno==79);
1349
+ case 80: /* meta_block ::= LINE_YAML LINE_META */ yytestcase(yyruleno==80);
1350
+ case 81: /* para ::= LINE_PLAIN chunk */ yytestcase(yyruleno==81);
1351
+ case 82: /* setext_1 ::= para LINE_SETEXT_1 */ yytestcase(yyruleno==82);
1352
+ case 83: /* setext_2 ::= para LINE_SETEXT_2 */ yytestcase(yyruleno==83);
1353
+ case 84: /* table ::= table_header table_body */ yytestcase(yyruleno==84);
1354
+ case 87: /* header_rows ::= header_rows LINE_TABLE */ yytestcase(yyruleno==87);
1355
+ case 88: /* table_body ::= table_body table_section */ yytestcase(yyruleno==88);
1356
+ case 91: /* all_rows ::= all_rows row */ yytestcase(yyruleno==91);
1357
+ { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
1358
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1359
+ break;
1360
+ case 34: /* nested_chunk ::= empty indented_line chunk */
1361
+ { yylhsminor.yy0 = yymsp[-2].minor.yy0; token_chain_append(yymsp[-2].minor.yy0, yymsp[-1].minor.yy0); token_chain_append(yymsp[-2].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = LINE_CONTINUATION; }
1362
+ yymsp[-2].minor.yy0 = yylhsminor.yy0;
1363
+ break;
1364
+ case 35: /* nested_chunk ::= empty indented_line */
1365
+ { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->type = LINE_CONTINUATION; }
1366
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1367
+ break;
1368
+ case 44: /* definition_block ::= para defs */
1369
+ { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[-1].minor.yy0->type = BLOCK_TERM; }
1370
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1371
+ break;
1372
+ case 46: /* def ::= LINE_DEFINITION tail */
1373
+ { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_DEFINITION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_indent(engine, yylhsminor.yy0); }
1374
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1375
+ break;
1376
+ case 47: /* def ::= LINE_DEFINITION */
1377
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_DEFINITION); }
1378
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1379
+ break;
1380
+ case 49: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_3 */
1381
+ case 50: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==50);
1382
+ case 51: /* fenced_block ::= fenced_3 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==51);
1383
+ case 53: /* fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==53);
1384
+ case 54: /* fenced_block ::= fenced_4 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==54);
1385
+ case 58: /* fenced_block ::= fenced_5 LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==58);
1386
+ { yylhsminor.yy0 = yymsp[-1].minor.yy0; token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); yymsp[0].minor.yy0->child->type = CODE_FENCE; }
1387
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1388
+ break;
1389
+ case 70: /* item_bullet ::= LINE_LIST_BULLETED ext_chunk */
1390
+ case 72: /* item_bullet ::= LINE_LIST_BULLETED nested_chunks */ yytestcase(yyruleno==72);
1391
+ case 75: /* item_enum ::= LINE_LIST_ENUMERATED ext_chunk */ yytestcase(yyruleno==75);
1392
+ case 77: /* item_enum ::= LINE_LIST_ENUMERATED nested_chunks */ yytestcase(yyruleno==77);
1393
+ { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_list_item(engine, yylhsminor.yy0); }
1394
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1395
+ break;
1396
+ case 71: /* item_bullet ::= LINE_LIST_BULLETED chunk */
1397
+ case 76: /* item_enum ::= LINE_LIST_ENUMERATED chunk */ yytestcase(yyruleno==76);
1398
+ { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_LIST_ITEM_TIGHT); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); recursive_parse_list_item(engine, yylhsminor.yy0); }
1399
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1400
+ break;
1401
+ case 73: /* item_bullet ::= LINE_LIST_BULLETED */
1402
+ case 78: /* item_enum ::= LINE_LIST_ENUMERATED */ yytestcase(yyruleno==78);
1403
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_LIST_ITEM_TIGHT); }
1404
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1405
+ break;
1406
+ case 85: /* table_header ::= header_rows LINE_TABLE_SEPARATOR */
1407
+ { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_HEADER); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
1408
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1409
+ break;
1410
+ case 86: /* table_header ::= LINE_TABLE_SEPARATOR */
1411
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_HEADER); }
1412
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1413
+ break;
1414
+ case 89: /* table_section ::= all_rows LINE_EMPTY */
1415
+ { yylhsminor.yy0 = token_new_parent(yymsp[-1].minor.yy0, BLOCK_TABLE_SECTION); token_chain_append(yymsp[-1].minor.yy0, yymsp[0].minor.yy0); }
1416
+ yymsp[-1].minor.yy0 = yylhsminor.yy0;
1417
+ break;
1418
+ case 90: /* table_section ::= all_rows */
1419
+ { yylhsminor.yy0 = token_new_parent(yymsp[0].minor.yy0, BLOCK_TABLE_SECTION); }
1420
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1421
+ break;
1422
+ case 92: /* para ::= all_rows */
1423
+ { yylhsminor.yy0 = yymsp[0].minor.yy0; }
1424
+ yymsp[0].minor.yy0 = yylhsminor.yy0;
1425
+ break;
1426
+ default:
1427
+ /* (93) chunk ::= chunk_line (OPTIMIZED OUT) */ assert(yyruleno!=93);
1428
+ /* (94) chunk_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==94);
1429
+ /* (95) chunk_line ::= LINE_STOP_COMMENT */ yytestcase(yyruleno==95);
1430
+ /* (96) nested_chunks ::= nested_chunk (OPTIMIZED OUT) */ assert(yyruleno!=96);
1431
+ /* (97) nested_chunk ::= empty */ yytestcase(yyruleno==97);
1432
+ /* (98) indented_line ::= LINE_INDENTED_TAB */ yytestcase(yyruleno==98);
1433
+ /* (99) indented_line ::= LINE_INDENTED_SPACE */ yytestcase(yyruleno==99);
1434
+ /* (100) opt_ext_chunk ::= chunk */ yytestcase(yyruleno==100);
1435
+ /* (101) tail ::= opt_ext_chunk (OPTIMIZED OUT) */ assert(yyruleno!=101);
1436
+ /* (102) tail ::= nested_chunks */ yytestcase(yyruleno==102);
1437
+ /* (103) blockquote ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==103);
1438
+ /* (104) quote_line ::= LINE_BLOCKQUOTE */ yytestcase(yyruleno==104);
1439
+ /* (105) quote_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==105);
1440
+ /* (106) def_citation ::= LINE_DEF_CITATION */ yytestcase(yyruleno==106);
1441
+ /* (107) def_footnote ::= LINE_DEF_FOOTNOTE */ yytestcase(yyruleno==107);
1442
+ /* (108) def_glossary ::= LINE_DEF_GLOSSARY */ yytestcase(yyruleno==108);
1443
+ /* (109) def_link ::= LINE_DEF_LINK */ yytestcase(yyruleno==109);
1444
+ /* (110) def_abbreviation ::= LINE_DEF_ABBREVIATION */ yytestcase(yyruleno==110);
1445
+ /* (111) defs ::= def (OPTIMIZED OUT) */ assert(yyruleno!=111);
1446
+ /* (112) empty ::= LINE_EMPTY */ yytestcase(yyruleno==112);
1447
+ /* (113) fenced_block ::= fenced_3 */ yytestcase(yyruleno==113);
1448
+ /* (114) fenced_3 ::= LINE_FENCE_BACKTICK_3 */ yytestcase(yyruleno==114);
1449
+ /* (115) fenced_3 ::= LINE_FENCE_BACKTICK_START_3 */ yytestcase(yyruleno==115);
1450
+ /* (116) fenced_block ::= fenced_4 */ yytestcase(yyruleno==116);
1451
+ /* (117) fenced_4 ::= LINE_FENCE_BACKTICK_4 */ yytestcase(yyruleno==117);
1452
+ /* (118) fenced_4 ::= LINE_FENCE_BACKTICK_START_4 */ yytestcase(yyruleno==118);
1453
+ /* (119) fenced_block ::= fenced_5 */ yytestcase(yyruleno==119);
1454
+ /* (120) fenced_5 ::= LINE_FENCE_BACKTICK_5 */ yytestcase(yyruleno==120);
1455
+ /* (121) fenced_5 ::= LINE_FENCE_BACKTICK_START_5 */ yytestcase(yyruleno==121);
1456
+ /* (122) fenced_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==122);
1457
+ /* (123) fenced_line ::= LINE_EMPTY */ yytestcase(yyruleno==123);
1458
+ /* (124) fenced_line ::= LINE_FALLBACK */ yytestcase(yyruleno==124);
1459
+ /* (125) fenced_line ::= LINE_HR */ yytestcase(yyruleno==125);
1460
+ /* (126) fenced_line ::= LINE_HTML */ yytestcase(yyruleno==126);
1461
+ /* (127) fenced_line ::= LINE_START_COMMENT */ yytestcase(yyruleno==127);
1462
+ /* (128) fenced_line ::= LINE_STOP_COMMENT */ yytestcase(yyruleno==128);
1463
+ /* (129) html_block ::= LINE_HTML */ yytestcase(yyruleno==129);
1464
+ /* (130) html_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==130);
1465
+ /* (131) html_line ::= LINE_FALLBACK */ yytestcase(yyruleno==131);
1466
+ /* (132) html_line ::= LINE_HR */ yytestcase(yyruleno==132);
1467
+ /* (133) html_line ::= LINE_HTML */ yytestcase(yyruleno==133);
1468
+ /* (134) html_com_block ::= html_comment */ yytestcase(yyruleno==134);
1469
+ /* (135) html_comment ::= LINE_START_COMMENT */ yytestcase(yyruleno==135);
1470
+ /* (136) comment_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==136);
1471
+ /* (137) comment_line ::= LINE_EMPTY */ yytestcase(yyruleno==137);
1472
+ /* (138) comment_line ::= LINE_FALLBACK */ yytestcase(yyruleno==138);
1473
+ /* (139) comment_line ::= LINE_HR */ yytestcase(yyruleno==139);
1474
+ /* (140) comment_line ::= LINE_HTML */ yytestcase(yyruleno==140);
1475
+ /* (141) indented_code ::= indented_line (OPTIMIZED OUT) */ assert(yyruleno!=141);
1476
+ /* (142) list_bullet ::= item_bullet (OPTIMIZED OUT) */ assert(yyruleno!=142);
1477
+ /* (143) list_enum ::= item_enum (OPTIMIZED OUT) */ assert(yyruleno!=143);
1478
+ /* (144) meta_block ::= LINE_META */ yytestcase(yyruleno==144);
1479
+ /* (145) meta_line ::= LINE_META */ yytestcase(yyruleno==145);
1480
+ /* (146) meta_line ::= LINE_CONTINUATION */ yytestcase(yyruleno==146);
1481
+ /* (147) para ::= LINE_PLAIN */ yytestcase(yyruleno==147);
1482
+ /* (148) para ::= LINE_STOP_COMMENT */ yytestcase(yyruleno==148);
1483
+ /* (149) table ::= table_header */ yytestcase(yyruleno==149);
1484
+ /* (150) header_rows ::= LINE_TABLE */ yytestcase(yyruleno==150);
1485
+ /* (151) table_body ::= table_section (OPTIMIZED OUT) */ assert(yyruleno!=151);
1486
+ /* (152) all_rows ::= row (OPTIMIZED OUT) */ assert(yyruleno!=152);
1487
+ /* (153) row ::= header_rows */ yytestcase(yyruleno==153);
1488
+ /* (154) row ::= LINE_TABLE_SEPARATOR */ yytestcase(yyruleno==154);
1489
+ /* (155) para ::= defs */ yytestcase(yyruleno==155);
1490
+ break;
1491
+ /********** End reduce actions ************************************************/
1492
+ };
1493
+ assert( yyruleno<sizeof(yyRuleInfo)/sizeof(yyRuleInfo[0]) );
1494
+ yygoto = yyRuleInfo[yyruleno].lhs;
1495
+ yysize = yyRuleInfo[yyruleno].nrhs;
1496
+ yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
1497
+ if( yyact <= YY_MAX_SHIFTREDUCE ){
1498
+ if( yyact>YY_MAX_SHIFT ){
1499
+ yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE;
1500
+ }
1501
+ yymsp -= yysize-1;
1502
+ yypParser->yytos = yymsp;
1503
+ yymsp->stateno = (YYACTIONTYPE)yyact;
1504
+ yymsp->major = (YYCODETYPE)yygoto;
1505
+ yyTraceShift(yypParser, yyact);
1506
+ }else{
1507
+ assert( yyact == YY_ACCEPT_ACTION );
1508
+ yypParser->yytos -= yysize;
1509
+ yy_accept(yypParser);
1510
+ }
1511
+ }
1512
+
1513
+ /*
1514
+ ** The following code executes when the parse fails
1515
+ */
1516
+ #ifndef YYNOERRORRECOVERY
1517
+ static void yy_parse_failed(
1518
+ yyParser *yypParser /* The parser */
1519
+ ){
1520
+ ParseARG_FETCH;
1521
+ #ifndef NDEBUG
1522
+ if( yyTraceFILE ){
1523
+ fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
1524
+ }
1525
+ #endif
1526
+ while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser);
1527
+ /* Here code is inserted which will be executed whenever the
1528
+ ** parser fails */
1529
+ /************ Begin %parse_failure code ***************************************/
1530
+
1531
+ fprintf(stderr, "Parser failed to successfully parse.\n");
1532
+ /************ End %parse_failure code *****************************************/
1533
+ ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
1534
+ }
1535
+ #endif /* YYNOERRORRECOVERY */
1536
+
1537
+ /*
1538
+ ** The following code executes when a syntax error first occurs.
1539
+ */
1540
+ static void yy_syntax_error(
1541
+ yyParser *yypParser, /* The parser */
1542
+ int yymajor, /* The major type of the error token */
1543
+ ParseTOKENTYPE yyminor /* The minor type of the error token */
1544
+ ){
1545
+ ParseARG_FETCH;
1546
+ #define TOKEN yyminor
1547
+ /************ Begin %syntax_error code ****************************************/
1548
+
1549
+ #ifndef NDEBUG
1550
+ fprintf(stderr,"Parser syntax error.\n");
1551
+ int n = sizeof(yyTokenName) / sizeof(yyTokenName[0]);
1552
+ for (int i = 0; i < n; ++i) {
1553
+ int a = yy_find_shift_action(yypParser, (YYCODETYPE)i);
1554
+ if (a < YYNSTATE + YYNRULE) {
1555
+ fprintf(stderr,"expected token: %s\n", yyTokenName[i]);
1556
+ }
1557
+ }
1558
+ #endif
1559
+ /************ End %syntax_error code ******************************************/
1560
+ ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
1561
+ }
1562
+
1563
+ /*
1564
+ ** The following is executed when the parser accepts
1565
+ */
1566
+ static void yy_accept(
1567
+ yyParser *yypParser /* The parser */
1568
+ ){
1569
+ ParseARG_FETCH;
1570
+ #ifndef NDEBUG
1571
+ if( yyTraceFILE ){
1572
+ fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
1573
+ }
1574
+ #endif
1575
+ #ifndef YYNOERRORRECOVERY
1576
+ yypParser->yyerrcnt = -1;
1577
+ #endif
1578
+ assert( yypParser->yytos==yypParser->yystack );
1579
+ /* Here code is inserted which will be executed whenever the
1580
+ ** parser accepts */
1581
+ /*********** Begin %parse_accept code *****************************************/
1582
+ /*********** End %parse_accept code *******************************************/
1583
+ ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
1584
+ }
1585
+
1586
+ /* The main parser program.
1587
+ ** The first argument is a pointer to a structure obtained from
1588
+ ** "ParseAlloc" which describes the current state of the parser.
1589
+ ** The second argument is the major token number. The third is
1590
+ ** the minor token. The fourth optional argument is whatever the
1591
+ ** user wants (and specified in the grammar) and is available for
1592
+ ** use by the action routines.
1593
+ **
1594
+ ** Inputs:
1595
+ ** <ul>
1596
+ ** <li> A pointer to the parser (an opaque structure.)
1597
+ ** <li> The major token number.
1598
+ ** <li> The minor token number.
1599
+ ** <li> An option argument of a grammar-specified type.
1600
+ ** </ul>
1601
+ **
1602
+ ** Outputs:
1603
+ ** None.
1604
+ */
1605
+ void Parse(
1606
+ void *yyp, /* The parser */
1607
+ int yymajor, /* The major token code number */
1608
+ ParseTOKENTYPE yyminor /* The value for the token */
1609
+ ParseARG_PDECL /* Optional %extra_argument parameter */
1610
+ ){
1611
+ YYMINORTYPE yyminorunion;
1612
+ unsigned int yyact; /* The parser action. */
1613
+ #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
1614
+ int yyendofinput; /* True if we are at the end of input */
1615
+ #endif
1616
+ #ifdef YYERRORSYMBOL
1617
+ int yyerrorhit = 0; /* True if yymajor has invoked an error */
1618
+ #endif
1619
+ yyParser *yypParser; /* The parser */
1620
+
1621
+ yypParser = (yyParser*)yyp;
1622
+ assert( yypParser->yytos!=0 );
1623
+ #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
1624
+ yyendofinput = (yymajor==0);
1625
+ #endif
1626
+ ParseARG_STORE;
1627
+
1628
+ #ifndef NDEBUG
1629
+ if( yyTraceFILE ){
1630
+ fprintf(yyTraceFILE,"%sInput '%s'\n",yyTracePrompt,yyTokenName[yymajor]);
1631
+ }
1632
+ #endif
1633
+
1634
+ do{
1635
+ yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
1636
+ if( yyact <= YY_MAX_SHIFTREDUCE ){
1637
+ yy_shift(yypParser,yyact,yymajor,yyminor);
1638
+ #ifndef YYNOERRORRECOVERY
1639
+ yypParser->yyerrcnt--;
1640
+ #endif
1641
+ yymajor = YYNOCODE;
1642
+ }else if( yyact <= YY_MAX_REDUCE ){
1643
+ yy_reduce(yypParser,yyact-YY_MIN_REDUCE);
1644
+ }else{
1645
+ assert( yyact == YY_ERROR_ACTION );
1646
+ yyminorunion.yy0 = yyminor;
1647
+ #ifdef YYERRORSYMBOL
1648
+ int yymx;
1649
+ #endif
1650
+ #ifndef NDEBUG
1651
+ if( yyTraceFILE ){
1652
+ fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
1653
+ }
1654
+ #endif
1655
+ #ifdef YYERRORSYMBOL
1656
+ /* A syntax error has occurred.
1657
+ ** The response to an error depends upon whether or not the
1658
+ ** grammar defines an error token "ERROR".
1659
+ **
1660
+ ** This is what we do if the grammar does define ERROR:
1661
+ **
1662
+ ** * Call the %syntax_error function.
1663
+ **
1664
+ ** * Begin popping the stack until we enter a state where
1665
+ ** it is legal to shift the error symbol, then shift
1666
+ ** the error symbol.
1667
+ **
1668
+ ** * Set the error count to three.
1669
+ **
1670
+ ** * Begin accepting and shifting new tokens. No new error
1671
+ ** processing will occur until three tokens have been
1672
+ ** shifted successfully.
1673
+ **
1674
+ */
1675
+ if( yypParser->yyerrcnt<0 ){
1676
+ yy_syntax_error(yypParser,yymajor,yyminor);
1677
+ }
1678
+ yymx = yypParser->yytos->major;
1679
+ if( yymx==YYERRORSYMBOL || yyerrorhit ){
1680
+ #ifndef NDEBUG
1681
+ if( yyTraceFILE ){
1682
+ fprintf(yyTraceFILE,"%sDiscard input token %s\n",
1683
+ yyTracePrompt,yyTokenName[yymajor]);
1684
+ }
1685
+ #endif
1686
+ yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion);
1687
+ yymajor = YYNOCODE;
1688
+ }else{
1689
+ while( yypParser->yytos >= yypParser->yystack
1690
+ && yymx != YYERRORSYMBOL
1691
+ && (yyact = yy_find_reduce_action(
1692
+ yypParser->yytos->stateno,
1693
+ YYERRORSYMBOL)) >= YY_MIN_REDUCE
1694
+ ){
1695
+ yy_pop_parser_stack(yypParser);
1696
+ }
1697
+ if( yypParser->yytos < yypParser->yystack || yymajor==0 ){
1698
+ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
1699
+ yy_parse_failed(yypParser);
1700
+ #ifndef YYNOERRORRECOVERY
1701
+ yypParser->yyerrcnt = -1;
1702
+ #endif
1703
+ yymajor = YYNOCODE;
1704
+ }else if( yymx!=YYERRORSYMBOL ){
1705
+ yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor);
1706
+ }
1707
+ }
1708
+ yypParser->yyerrcnt = 3;
1709
+ yyerrorhit = 1;
1710
+ #elif defined(YYNOERRORRECOVERY)
1711
+ /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
1712
+ ** do any kind of error recovery. Instead, simply invoke the syntax
1713
+ ** error routine and continue going as if nothing had happened.
1714
+ **
1715
+ ** Applications can set this macro (for example inside %include) if
1716
+ ** they intend to abandon the parse upon the first syntax error seen.
1717
+ */
1718
+ yy_syntax_error(yypParser,yymajor, yyminor);
1719
+ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
1720
+ yymajor = YYNOCODE;
1721
+
1722
+ #else /* YYERRORSYMBOL is not defined */
1723
+ /* This is what we do if the grammar does not define ERROR:
1724
+ **
1725
+ ** * Report an error message, and throw away the input token.
1726
+ **
1727
+ ** * If the input token is $, then fail the parse.
1728
+ **
1729
+ ** As before, subsequent error messages are suppressed until
1730
+ ** three input tokens have been successfully shifted.
1731
+ */
1732
+ if( yypParser->yyerrcnt<=0 ){
1733
+ yy_syntax_error(yypParser,yymajor, yyminor);
1734
+ }
1735
+ yypParser->yyerrcnt = 3;
1736
+ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
1737
+ if( yyendofinput ){
1738
+ yy_parse_failed(yypParser);
1739
+ #ifndef YYNOERRORRECOVERY
1740
+ yypParser->yyerrcnt = -1;
1741
+ #endif
1742
+ }
1743
+ yymajor = YYNOCODE;
1744
+ #endif
1745
+ }
1746
+ }while( yymajor!=YYNOCODE && yypParser->yytos>yypParser->yystack );
1747
+ #ifndef NDEBUG
1748
+ if( yyTraceFILE ){
1749
+ yyStackEntry *i;
1750
+ char cDiv = '[';
1751
+ fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt);
1752
+ for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){
1753
+ fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]);
1754
+ cDiv = ' ';
1755
+ }
1756
+ fprintf(yyTraceFILE,"]\n");
1757
+ }
1758
+ #endif
1759
+ return;
1760
+ }