mkrf 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. data/CHANGELOG +2 -0
  2. data/MIT-LICENSE +7 -0
  3. data/README +54 -0
  4. data/Rakefile +107 -0
  5. data/lib/mkrf.rb +4 -0
  6. data/lib/mkrf/availability.rb +219 -0
  7. data/lib/mkrf/generator.rb +146 -0
  8. data/test/abstract_unit.rb +4 -0
  9. data/test/fixtures/down_a_directory/header_down_a_directory.h +1 -0
  10. data/test/fixtures/stdmkrf.h +1 -0
  11. data/test/sample_files/libtrivial/Rakefile +31 -0
  12. data/test/sample_files/libtrivial/extconf.rb +3 -0
  13. data/test/sample_files/libtrivial/lib/libtrivial.c +5 -0
  14. data/test/sample_files/libtrivial/lib/libtrivial.o +0 -0
  15. data/test/sample_files/libtrivial/libtrivial_so.bundle +0 -0
  16. data/test/sample_files/libtrivial/mkrf.log +1 -0
  17. data/test/sample_files/libxml-ruby-0.3.8/CHANGELOG +74 -0
  18. data/test/sample_files/libxml-ruby-0.3.8/LICENSE +22 -0
  19. data/test/sample_files/libxml-ruby-0.3.8/README +144 -0
  20. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/cbg.c +76 -0
  21. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/extconf.rb +49 -0
  22. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/libxml.c +86 -0
  23. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/libxml.h +82 -0
  24. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/libxml.rb +107 -0
  25. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/mkrf.log +1 -0
  26. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/old_extconf.rb +95 -0
  27. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attr.c +372 -0
  28. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attr.h +21 -0
  29. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attribute.c +224 -0
  30. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attribute.h +21 -0
  31. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_document.c +1159 -0
  32. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_document.h +27 -0
  33. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_dtd.c +168 -0
  34. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_dtd.h +17 -0
  35. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_input_cbg.c +167 -0
  36. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_input_cbg.h +21 -0
  37. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node.c +2139 -0
  38. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node.h +28 -0
  39. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node_set.c +248 -0
  40. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node_set.h +26 -0
  41. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_ns.c +153 -0
  42. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_ns.h +21 -0
  43. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser.c +1417 -0
  44. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser.h +31 -0
  45. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser_context.c +715 -0
  46. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser_context.h +22 -0
  47. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_sax_parser.c +426 -0
  48. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_sax_parser.h +52 -0
  49. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_schema.c +142 -0
  50. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_schema.h +16 -0
  51. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_tree.c +43 -0
  52. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_tree.h +12 -0
  53. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xinclude.c +20 -0
  54. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xinclude.h +13 -0
  55. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath.c +363 -0
  56. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath.h +24 -0
  57. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath_context.c +125 -0
  58. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath_context.h +24 -0
  59. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer.c +100 -0
  60. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer.h +27 -0
  61. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer_context.c +21 -0
  62. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer_context.h +18 -0
  63. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/sax_parser_callbacks.inc +202 -0
  64. data/test/sample_files/syck-0.55/CHANGELOG +186 -0
  65. data/test/sample_files/syck-0.55/COPYING +54 -0
  66. data/test/sample_files/syck-0.55/Makefile +582 -0
  67. data/test/sample_files/syck-0.55/Makefile.am +5 -0
  68. data/test/sample_files/syck-0.55/Makefile.in +582 -0
  69. data/test/sample_files/syck-0.55/README +105 -0
  70. data/test/sample_files/syck-0.55/README.BYTECODE +484 -0
  71. data/test/sample_files/syck-0.55/README.EXT +444 -0
  72. data/test/sample_files/syck-0.55/RELEASE +123 -0
  73. data/test/sample_files/syck-0.55/TODO +25 -0
  74. data/test/sample_files/syck-0.55/aclocal.m4 +883 -0
  75. data/test/sample_files/syck-0.55/bootstrap +7 -0
  76. data/test/sample_files/syck-0.55/config.h +79 -0
  77. data/test/sample_files/syck-0.55/config.h.in +78 -0
  78. data/test/sample_files/syck-0.55/config.status +1197 -0
  79. data/test/sample_files/syck-0.55/config/README +14 -0
  80. data/test/sample_files/syck-0.55/config/depcomp +529 -0
  81. data/test/sample_files/syck-0.55/config/install-sh +323 -0
  82. data/test/sample_files/syck-0.55/config/missing +357 -0
  83. data/test/sample_files/syck-0.55/configure +6728 -0
  84. data/test/sample_files/syck-0.55/configure.in +36 -0
  85. data/test/sample_files/syck-0.55/ext/ruby/CHANGELOG +303 -0
  86. data/test/sample_files/syck-0.55/ext/ruby/README +400 -0
  87. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/MANIFEST +1 -0
  88. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/bytecode.c +1170 -0
  89. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/emitter.c +1224 -0
  90. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/extconf.rb +10 -0
  91. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/gram.c +1894 -0
  92. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/gram.h +79 -0
  93. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/handler.c +174 -0
  94. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/implicit.c +2989 -0
  95. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/mkrf.log +1 -0
  96. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/node.c +407 -0
  97. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/rubyext.c +2385 -0
  98. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/syck.c +504 -0
  99. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/syck.h +458 -0
  100. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/token.c +2707 -0
  101. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/yaml2byte.c +250 -0
  102. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/yamlbyte.h +170 -0
  103. data/test/sample_files/syck-0.55/ext/ruby/install.rb +1022 -0
  104. data/test/sample_files/syck-0.55/ext/ruby/lib/okay.rb +161 -0
  105. data/test/sample_files/syck-0.55/ext/ruby/lib/okay/news.rb +69 -0
  106. data/test/sample_files/syck-0.55/ext/ruby/lib/okay/rpc.rb +434 -0
  107. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml.rb +436 -0
  108. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/baseemitter.rb +247 -0
  109. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/basenode.rb +216 -0
  110. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/compat.rb +26 -0
  111. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/constants.rb +45 -0
  112. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/dbm.rb +111 -0
  113. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/emitter.rb +107 -0
  114. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/encoding.rb +33 -0
  115. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/error.rb +34 -0
  116. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/rubytypes.rb +438 -0
  117. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/store.rb +29 -0
  118. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/stream.rb +40 -0
  119. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/stringio.rb +83 -0
  120. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/syck.rb +19 -0
  121. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/tag.rb +86 -0
  122. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/types.rb +188 -0
  123. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/yamlnode.rb +54 -0
  124. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/ypath.rb +52 -0
  125. data/test/sample_files/syck-0.55/ext/ruby/lib/yod.rb +1168 -0
  126. data/test/sample_files/syck-0.55/ext/ruby/samples/okayNews-modules.rb +27 -0
  127. data/test/sample_files/syck-0.55/ext/ruby/samples/okayNews-sample.rb +336 -0
  128. data/test/sample_files/syck-0.55/ext/ruby/samples/okayNews-validate.rb +341 -0
  129. data/test/sample_files/syck-0.55/ext/ruby/samples/okayRpc-client.rb +51 -0
  130. data/test/sample_files/syck-0.55/ext/ruby/samples/okayRpc-server.rb +85 -0
  131. data/test/sample_files/syck-0.55/ext/ruby/samples/yaml-sortHashKeys.rb +128 -0
  132. data/test/sample_files/syck-0.55/ext/ruby/tests/basic.rb +1653 -0
  133. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsAnchorAlias.yml +51 -0
  134. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsBasicTests.yml +282 -0
  135. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsBlockMapping.yml +78 -0
  136. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsBlockSequence.yml +0 -0
  137. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsDocumentSeparator.yml +102 -0
  138. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsErrorTests.yml +23 -0
  139. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsFlowCollections.yml +73 -0
  140. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsFoldedScalars.yml +215 -0
  141. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsMapInSeq.yml +0 -0
  142. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsNullsAndEmpties.yml +66 -0
  143. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsRubyTests.yml +182 -0
  144. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsSpecificationExamples.yml +2699 -0
  145. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsTypeTransfers.yml +265 -0
  146. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsYpath.yml +221 -0
  147. data/test/sample_files/syck-0.55/ext/ruby/yts/cookbook.rb +159 -0
  148. data/test/sample_files/syck-0.55/ext/ruby/yts/index.yml +10 -0
  149. data/test/sample_files/syck-0.55/ext/ruby/yts/yts.rb +193 -0
  150. data/test/sample_files/syck-0.55/lib/Makefile +497 -0
  151. data/test/sample_files/syck-0.55/lib/Makefile.am +27 -0
  152. data/test/sample_files/syck-0.55/lib/Makefile.in +497 -0
  153. data/test/sample_files/syck-0.55/lib/bytecode.c +1170 -0
  154. data/test/sample_files/syck-0.55/lib/bytecode.re +525 -0
  155. data/test/sample_files/syck-0.55/lib/emitter.c +1224 -0
  156. data/test/sample_files/syck-0.55/lib/gram.c +1894 -0
  157. data/test/sample_files/syck-0.55/lib/gram.h +79 -0
  158. data/test/sample_files/syck-0.55/lib/gram.output +2005 -0
  159. data/test/sample_files/syck-0.55/lib/gram.y +481 -0
  160. data/test/sample_files/syck-0.55/lib/handler.c +174 -0
  161. data/test/sample_files/syck-0.55/lib/implicit.c +2989 -0
  162. data/test/sample_files/syck-0.55/lib/implicit.re +206 -0
  163. data/test/sample_files/syck-0.55/lib/node.c +407 -0
  164. data/test/sample_files/syck-0.55/lib/syck.c +504 -0
  165. data/test/sample_files/syck-0.55/lib/syck.h +458 -0
  166. data/test/sample_files/syck-0.55/lib/syck_st.c +577 -0
  167. data/test/sample_files/syck-0.55/lib/syck_st.h +46 -0
  168. data/test/sample_files/syck-0.55/lib/token.c +2707 -0
  169. data/test/sample_files/syck-0.55/lib/token.re +1139 -0
  170. data/test/sample_files/syck-0.55/lib/yaml2byte.c +250 -0
  171. data/test/sample_files/syck-0.55/lib/yamlbyte.h +170 -0
  172. data/test/sample_files/syck-0.55/stamp-h1 +1 -0
  173. data/test/sample_files/syck-0.55/tests/Basic.c +141 -0
  174. data/test/sample_files/syck-0.55/tests/CuTest.c +294 -0
  175. data/test/sample_files/syck-0.55/tests/CuTest.h +84 -0
  176. data/test/sample_files/syck-0.55/tests/Emit.c +87 -0
  177. data/test/sample_files/syck-0.55/tests/Makefile +480 -0
  178. data/test/sample_files/syck-0.55/tests/Makefile.am +13 -0
  179. data/test/sample_files/syck-0.55/tests/Makefile.in +480 -0
  180. data/test/sample_files/syck-0.55/tests/Parse.c +208 -0
  181. data/test/sample_files/syck-0.55/tests/YTS.c +2310 -0
  182. data/test/sample_files/syck-0.55/tests/YTS.c.erb +326 -0
  183. data/test/sample_files/syck-0.55/tests/YTS.c.rb +44 -0
  184. data/test/test_availability.rb +68 -0
  185. data/test/test_generator.rb +74 -0
  186. metadata +252 -0
@@ -0,0 +1,481 @@
1
+ /*
2
+ * gram.y
3
+ *
4
+ * $Author: why $
5
+ * $Date: 2005/04/13 06:27:54 $
6
+ *
7
+ * Copyright (C) 2003 why the lucky stiff
8
+ */
9
+
10
+ %start doc
11
+ %pure-parser
12
+
13
+
14
+ %{
15
+
16
+ #include "syck.h"
17
+
18
+ void apply_seq_in_map( SyckParser *parser, SyckNode *n );
19
+
20
+ #define YYPARSE_PARAM parser
21
+ #define YYLEX_PARAM parser
22
+
23
+ #define NULL_NODE(parser, node) \
24
+ SyckNode *node = syck_new_str( "", scalar_plain ); \
25
+ if ( ((SyckParser *)parser)->taguri_expansion == 1 ) \
26
+ { \
27
+ node->type_id = syck_taguri( YAML_DOMAIN, "null", 4 ); \
28
+ } \
29
+ else \
30
+ { \
31
+ node->type_id = syck_strndup( "null", 4 ); \
32
+ }
33
+ %}
34
+
35
+ %union {
36
+ SYMID nodeId;
37
+ SyckNode *nodeData;
38
+ char *name;
39
+ };
40
+
41
+ %token <name> YAML_ANCHOR YAML_ALIAS YAML_TRANSFER YAML_TAGURI YAML_ITRANSFER
42
+ %token <nodeData> YAML_WORD YAML_PLAIN YAML_BLOCK
43
+ %token YAML_DOCSEP YAML_IOPEN YAML_INDENT YAML_IEND
44
+
45
+ %type <nodeId> doc basic_seq
46
+ %type <nodeData> atom word_rep ind_rep struct_rep atom_or_empty empty
47
+ %type <nodeData> implicit_seq inline_seq implicit_map inline_map inline_seq_atom inline_map_atom
48
+ %type <nodeData> top_imp_seq in_implicit_seq in_inline_seq basic_mapping complex_key complex_value
49
+ %type <nodeData> top_imp_map in_implicit_map in_inline_map complex_mapping
50
+
51
+ %left '-' ':'
52
+ %left '[' ']' '{' '}' ',' '?'
53
+
54
+ %%
55
+
56
+ doc : atom
57
+ {
58
+ ((SyckParser *)parser)->root = syck_hdlr_add_node( (SyckParser *)parser, $1 );
59
+ }
60
+ | YAML_DOCSEP atom_or_empty
61
+ {
62
+ ((SyckParser *)parser)->root = syck_hdlr_add_node( (SyckParser *)parser, $2 );
63
+ }
64
+ |
65
+ {
66
+ ((SyckParser *)parser)->eof = 1;
67
+ }
68
+ ;
69
+
70
+ atom : word_rep
71
+ | ind_rep
72
+ ;
73
+
74
+ ind_rep : struct_rep
75
+ | YAML_TRANSFER ind_rep
76
+ {
77
+ syck_add_transfer( $1, $2, ((SyckParser *)parser)->taguri_expansion );
78
+ $$ = $2;
79
+ }
80
+ | YAML_TAGURI ind_rep
81
+ {
82
+ syck_add_transfer( $1, $2, 0 );
83
+ $$ = $2;
84
+ }
85
+ | YAML_ANCHOR ind_rep
86
+ {
87
+ /*
88
+ * _Anchors_: The language binding must keep a separate symbol table
89
+ * for anchors. The actual ID in the symbol table is returned to the
90
+ * higher nodes, though.
91
+ */
92
+ $$ = syck_hdlr_add_anchor( (SyckParser *)parser, $1, $2 );
93
+ }
94
+ | indent_open ind_rep indent_flex_end
95
+ {
96
+ $$ = $2;
97
+ }
98
+ ;
99
+
100
+ atom_or_empty : atom
101
+ | empty
102
+ ;
103
+
104
+ empty : indent_open empty indent_end
105
+ {
106
+ $$ = $2;
107
+ }
108
+ |
109
+ {
110
+ NULL_NODE( parser, n );
111
+ $$ = n;
112
+ }
113
+ | YAML_ITRANSFER empty
114
+ {
115
+ if ( ((SyckParser *)parser)->implicit_typing == 1 )
116
+ {
117
+ try_tag_implicit( $2, ((SyckParser *)parser)->taguri_expansion );
118
+ }
119
+ $$ = $2;
120
+ }
121
+ | YAML_TRANSFER empty
122
+ {
123
+ syck_add_transfer( $1, $2, ((SyckParser *)parser)->taguri_expansion );
124
+ $$ = $2;
125
+ }
126
+ | YAML_TAGURI empty
127
+ {
128
+ syck_add_transfer( $1, $2, 0 );
129
+ $$ = $2;
130
+ }
131
+ | YAML_ANCHOR empty
132
+ {
133
+ /*
134
+ * _Anchors_: The language binding must keep a separate symbol table
135
+ * for anchors. The actual ID in the symbol table is returned to the
136
+ * higher nodes, though.
137
+ */
138
+ $$ = syck_hdlr_add_anchor( (SyckParser *)parser, $1, $2 );
139
+ }
140
+ ;
141
+
142
+ /*
143
+ * Indentation abstractions
144
+ */
145
+ indent_open : YAML_IOPEN
146
+ | indent_open YAML_INDENT
147
+ ;
148
+
149
+ indent_end : YAML_IEND
150
+ ;
151
+
152
+ indent_sep : YAML_INDENT
153
+ ;
154
+
155
+ indent_flex_end : YAML_IEND
156
+ | indent_sep indent_flex_end
157
+ ;
158
+
159
+ /*
160
+ * Words are broken out to distinguish them
161
+ * as keys in implicit maps and valid elements
162
+ * for the inline structures
163
+ */
164
+ word_rep : YAML_TRANSFER word_rep
165
+ {
166
+ syck_add_transfer( $1, $2, ((SyckParser *)parser)->taguri_expansion );
167
+ $$ = $2;
168
+ }
169
+ | YAML_TAGURI word_rep
170
+ {
171
+ syck_add_transfer( $1, $2, 0 );
172
+ $$ = $2;
173
+ }
174
+ | YAML_ITRANSFER word_rep
175
+ {
176
+ if ( ((SyckParser *)parser)->implicit_typing == 1 )
177
+ {
178
+ try_tag_implicit( $2, ((SyckParser *)parser)->taguri_expansion );
179
+ }
180
+ $$ = $2;
181
+ }
182
+ | YAML_ANCHOR word_rep
183
+ {
184
+ $$ = syck_hdlr_add_anchor( (SyckParser *)parser, $1, $2 );
185
+ }
186
+ | YAML_ALIAS
187
+ {
188
+ /*
189
+ * _Aliases_: The anchor symbol table is scanned for the anchor name.
190
+ * The anchor's ID in the language's symbol table is returned.
191
+ */
192
+ $$ = syck_hdlr_get_anchor( (SyckParser *)parser, $1 );
193
+ }
194
+ | YAML_WORD
195
+ {
196
+ SyckNode *n = $1;
197
+ if ( ((SyckParser *)parser)->taguri_expansion == 1 )
198
+ {
199
+ n->type_id = syck_taguri( YAML_DOMAIN, "str", 3 );
200
+ }
201
+ else
202
+ {
203
+ n->type_id = syck_strndup( "str", 3 );
204
+ }
205
+ $$ = n;
206
+ }
207
+ | YAML_PLAIN
208
+ | indent_open word_rep indent_flex_end
209
+ {
210
+ $$ = $2;
211
+ }
212
+ ;
213
+
214
+ /*
215
+ * Any of these structures can be used as
216
+ * complex keys
217
+ */
218
+ struct_rep : YAML_BLOCK
219
+ | implicit_seq
220
+ | inline_seq
221
+ | implicit_map
222
+ | inline_map
223
+ ;
224
+
225
+ /*
226
+ * Implicit sequence
227
+ */
228
+ implicit_seq : indent_open top_imp_seq indent_end
229
+ {
230
+ $$ = $2;
231
+ }
232
+ | indent_open in_implicit_seq indent_end
233
+ {
234
+ $$ = $2;
235
+ }
236
+ ;
237
+
238
+ basic_seq : '-' atom_or_empty
239
+ {
240
+ $$ = syck_hdlr_add_node( (SyckParser *)parser, $2 );
241
+ }
242
+ ;
243
+
244
+ top_imp_seq : YAML_TRANSFER indent_sep in_implicit_seq
245
+ {
246
+ syck_add_transfer( $1, $3, ((SyckParser *)parser)->taguri_expansion );
247
+ $$ = $3;
248
+ }
249
+ | YAML_TRANSFER top_imp_seq
250
+ {
251
+ syck_add_transfer( $1, $2, ((SyckParser *)parser)->taguri_expansion );
252
+ $$ = $2;
253
+ }
254
+ | YAML_TAGURI indent_sep in_implicit_seq
255
+ {
256
+ syck_add_transfer( $1, $3, 0 );
257
+ $$ = $3;
258
+ }
259
+ | YAML_TAGURI top_imp_seq
260
+ {
261
+ syck_add_transfer( $1, $2, 0 );
262
+ $$ = $2;
263
+ }
264
+ | YAML_ANCHOR indent_sep in_implicit_seq
265
+ {
266
+ $$ = syck_hdlr_add_anchor( (SyckParser *)parser, $1, $3 );
267
+ }
268
+ | YAML_ANCHOR top_imp_seq
269
+ {
270
+ $$ = syck_hdlr_add_anchor( (SyckParser *)parser, $1, $2 );
271
+ }
272
+ ;
273
+
274
+ in_implicit_seq : basic_seq
275
+ {
276
+ $$ = syck_new_seq( $1 );
277
+ }
278
+ | in_implicit_seq indent_sep basic_seq
279
+ {
280
+ syck_seq_add( $1, $3 );
281
+ $$ = $1;
282
+ }
283
+ | in_implicit_seq indent_sep
284
+ {
285
+ $$ = $1;
286
+ }
287
+ ;
288
+
289
+ /*
290
+ * Inline sequences
291
+ */
292
+ inline_seq : '[' in_inline_seq ']'
293
+ {
294
+ $$ = $2;
295
+ }
296
+ | '[' ']'
297
+ {
298
+ $$ = syck_alloc_seq();
299
+ }
300
+ ;
301
+
302
+ in_inline_seq : inline_seq_atom
303
+ {
304
+ $$ = syck_new_seq( syck_hdlr_add_node( (SyckParser *)parser, $1 ) );
305
+ }
306
+ | in_inline_seq ',' inline_seq_atom
307
+ {
308
+ syck_seq_add( $1, syck_hdlr_add_node( (SyckParser *)parser, $3 ) );
309
+ $$ = $1;
310
+ }
311
+ ;
312
+
313
+ inline_seq_atom : atom
314
+ | basic_mapping
315
+ ;
316
+
317
+ /*
318
+ * Implicit maps
319
+ */
320
+ implicit_map : indent_open top_imp_map indent_end
321
+ {
322
+ apply_seq_in_map( (SyckParser *)parser, $2 );
323
+ $$ = $2;
324
+ }
325
+ | indent_open in_implicit_map indent_end
326
+ {
327
+ apply_seq_in_map( (SyckParser *)parser, $2 );
328
+ $$ = $2;
329
+ }
330
+ ;
331
+
332
+ top_imp_map : YAML_TRANSFER indent_sep in_implicit_map
333
+ {
334
+ syck_add_transfer( $1, $3, ((SyckParser *)parser)->taguri_expansion );
335
+ $$ = $3;
336
+ }
337
+ | YAML_TRANSFER top_imp_map
338
+ {
339
+ syck_add_transfer( $1, $2, ((SyckParser *)parser)->taguri_expansion );
340
+ $$ = $2;
341
+ }
342
+ | YAML_TAGURI indent_sep in_implicit_map
343
+ {
344
+ syck_add_transfer( $1, $3, 0 );
345
+ $$ = $3;
346
+ }
347
+ | YAML_TAGURI top_imp_map
348
+ {
349
+ syck_add_transfer( $1, $2, 0 );
350
+ $$ = $2;
351
+ }
352
+ | YAML_ANCHOR indent_sep in_implicit_map
353
+ {
354
+ $$ = syck_hdlr_add_anchor( (SyckParser *)parser, $1, $3 );
355
+ }
356
+ | YAML_ANCHOR top_imp_map
357
+ {
358
+ $$ = syck_hdlr_add_anchor( (SyckParser *)parser, $1, $2 );
359
+ }
360
+ ;
361
+
362
+ complex_key : word_rep
363
+ | '?' atom indent_sep
364
+ {
365
+ $$ = $2;
366
+ }
367
+ ;
368
+
369
+ complex_value : atom_or_empty
370
+ ;
371
+
372
+ /* Default needs to be added to SyckSeq i think...
373
+ | '=' ':' atom
374
+ {
375
+ result = [ :DEFAULT, val[2] ]
376
+ }
377
+ */
378
+
379
+ complex_mapping : complex_key ':' complex_value
380
+ {
381
+ $$ = syck_new_map(
382
+ syck_hdlr_add_node( (SyckParser *)parser, $1 ),
383
+ syck_hdlr_add_node( (SyckParser *)parser, $3 ) );
384
+ }
385
+ /*
386
+ | '?' atom
387
+ {
388
+ NULL_NODE( parser, n );
389
+ $$ = syck_new_map(
390
+ syck_hdlr_add_node( (SyckParser *)parser, $2 ),
391
+ syck_hdlr_add_node( (SyckParser *)parser, n ) );
392
+ }
393
+ */
394
+ ;
395
+
396
+ in_implicit_map : complex_mapping
397
+ | in_implicit_map indent_sep basic_seq
398
+ {
399
+ if ( $1->shortcut == NULL )
400
+ {
401
+ $1->shortcut = syck_new_seq( $3 );
402
+ }
403
+ else
404
+ {
405
+ syck_seq_add( $1->shortcut, $3 );
406
+ }
407
+ $$ = $1;
408
+ }
409
+ | in_implicit_map indent_sep complex_mapping
410
+ {
411
+ apply_seq_in_map( (SyckParser *)parser, $1 );
412
+ syck_map_update( $1, $3 );
413
+ syck_free_node( $3 );
414
+ $3 = NULL;
415
+ $$ = $1;
416
+ }
417
+ | in_implicit_map indent_sep
418
+ {
419
+ $$ = $1;
420
+ }
421
+ ;
422
+
423
+ /*
424
+ * Inline maps
425
+ */
426
+ basic_mapping : atom ':' atom_or_empty
427
+ {
428
+ $$ = syck_new_map(
429
+ syck_hdlr_add_node( (SyckParser *)parser, $1 ),
430
+ syck_hdlr_add_node( (SyckParser *)parser, $3 ) );
431
+ }
432
+ ;
433
+
434
+ inline_map : '{' in_inline_map '}'
435
+ {
436
+ $$ = $2;
437
+ }
438
+ | '{' '}'
439
+ {
440
+ $$ = syck_alloc_map();
441
+ }
442
+ ;
443
+
444
+ in_inline_map : inline_map_atom
445
+ | in_inline_map ',' inline_map_atom
446
+ {
447
+ syck_map_update( $1, $3 );
448
+ syck_free_node( $3 );
449
+ $3 = NULL;
450
+ $$ = $1;
451
+ }
452
+ ;
453
+
454
+ inline_map_atom : atom
455
+ {
456
+ NULL_NODE( parser, n );
457
+ $$ = syck_new_map(
458
+ syck_hdlr_add_node( (SyckParser *)parser, $1 ),
459
+ syck_hdlr_add_node( (SyckParser *)parser, n ) );
460
+ }
461
+ | basic_mapping
462
+ ;
463
+
464
+ %%
465
+
466
+ void
467
+ apply_seq_in_map( SyckParser *parser, SyckNode *n )
468
+ {
469
+ long map_len;
470
+ if ( n->shortcut == NULL )
471
+ {
472
+ return;
473
+ }
474
+
475
+ map_len = syck_map_count( n );
476
+ syck_map_assign( n, map_value, map_len - 1,
477
+ syck_hdlr_add_node( parser, n->shortcut ) );
478
+
479
+ n->shortcut = NULL;
480
+ }
481
+