109 } else if (event.type == YAML_ALIAS_EVENT) { |
109 } else if (event.type == YAML_ALIAS_EVENT) { |
110 // TODO: alias? |
110 // TODO: alias? |
111 } else if (event.type == YAML_SCALAR_EVENT) { |
111 } else if (event.type == YAML_SCALAR_EVENT) { |
112 if (mode.back() == Mode::SEQUENCE) { |
112 if (mode.back() == Mode::SEQUENCE) { |
113 current->add_child(itemName)->add_child_text(y2x(event.data.scalar.value)); |
113 current->add_child(itemName)->add_child_text(y2x(event.data.scalar.value)); |
114 } else if (mode.back() == Mode::MAPPING) { |
114 } else if (mode.back() == Mode::MAP_KEY) { |
115 current = current->add_child(y2xname(event.data.scalar.value)); |
115 current = current->add_child(y2xname(event.data.scalar.value)); |
116 mode.push_back(Mode::MAP_KEY); |
116 mode.push_back(Mode::MAP_VALUE); |
117 } else if (mode.back() == Mode::MAP_KEY) { |
117 } else if (mode.back() == Mode::MAP_VALUE) { |
118 current->add_child_text(y2x(event.data.scalar.value)); |
118 current->add_child_text(y2x(event.data.scalar.value)); |
119 current = parentOrSelf(current); |
119 current = parentOrSelf(current); |
120 mode.pop_back(); |
120 mode.pop_back(); |
121 } else if (mode.back() == Mode::ROOT) { |
121 } else if (mode.back() == Mode::ROOT) { |
122 current->add_child_text(y2x(event.data.scalar.value)); |
122 current->add_child_text(y2x(event.data.scalar.value)); |
131 parent->remove_child(current); |
131 parent->remove_child(current); |
132 current = parent; |
132 current = parent; |
133 } else { |
133 } else { |
134 itemName = "item"; |
134 itemName = "item"; |
135 } |
135 } |
136 if (mode.back() == Mode::MAP_KEY) mode.pop_back(); |
136 if (mode.back() == Mode::MAP_VALUE) mode.pop_back(); |
137 mode.push_back(Mode::SEQUENCE); |
137 mode.push_back(Mode::SEQUENCE); |
138 } else if (event.type == YAML_SEQUENCE_END_EVENT) { |
138 } else if (event.type == YAML_SEQUENCE_END_EVENT) { |
139 mode.pop_back(); // TODO: assert sequence? |
139 mode.pop_back(); // TODO: assert sequence? |
140 } else if (event.type == YAML_MAPPING_START_EVENT) { |
140 } else if (event.type == YAML_MAPPING_START_EVENT) { |
141 |
141 |
142 if (mode.back() == Mode::ROOT) { |
142 if (mode.back() == Mode::ROOT) { |
143 } else if (mode.back() == Mode::SEQUENCE) { |
143 } else if (mode.back() == Mode::SEQUENCE) { |
144 current = current->add_child(itemName); |
144 current = current->add_child(itemName); |
145 } else if (mode.back() == Mode::MAP_KEY) { |
145 } else if (mode.back() == Mode::MAP_VALUE) { |
146 mode.pop_back(); |
146 mode.pop_back(); |
147 } else { |
147 } else { |
148 // TODO: map might be a key of another map → wrap/nest |
148 // TODO: map might be a key of another map → wrap/nest |
149 } |
149 } |
150 |
150 |
151 mode.push_back(Mode::MAPPING); |
151 mode.push_back(Mode::MAP_KEY); |
152 } else if (event.type == YAML_MAPPING_END_EVENT) { |
152 } else if (event.type == YAML_MAPPING_END_EVENT) { |
153 current = parentOrSelf(current); |
153 current = parentOrSelf(current); |
154 mode.pop_back(); // TODO: assert map? |
154 mode.pop_back(); // TODO: assert map? |
155 } else { |
155 } else { |
156 // TODO: unsupported type? |
156 // TODO: unsupported type? |