src/XMLDocumentConstructor.h
branchv_0
changeset 33 57cb51fb5212
parent 32 82b7f6e41a65
child 34 0b0d214c3cb2
equal deleted inserted replaced
32:82b7f6e41a65 33:57cb51fb5212
    85 	}
    85 	}
    86 
    86 
    87 	void appendScalarValue(Glib::ustring value, Glib::ustring cborType, bool isNull = false) {
    87 	void appendScalarValue(Glib::ustring value, Glib::ustring cborType, bool isNull = false) {
    88 		// TODO: null
    88 		// TODO: null
    89 		if (mode.back() == Mode::ARRAY) {
    89 		if (mode.back() == Mode::ARRAY) {
    90 			current->add_child(itemName)->add_child_text(value);
    90 			xmlpp::Element* element = current->add_child(itemName);
       
    91 			element->add_child_text(value);
       
    92 			element->set_attribute("value-type", cborType);
    91 		} else if (mode.back() == Mode::MAP_KEY) {
    93 		} else if (mode.back() == Mode::MAP_KEY) {
    92 			current = current->add_child(value);
    94 			current = current->add_child(value);
       
    95 			current->set_attribute("key-type", cborType);
    93 			mode.push_back(Mode::MAP_VALUE);
    96 			mode.push_back(Mode::MAP_VALUE);
    94 		} else if (mode.back() == Mode::MAP_VALUE) {
    97 		} else if (mode.back() == Mode::MAP_VALUE) {
    95 			current->add_child_text(value);
    98 			current->add_child_text(value);
       
    99 			current->set_attribute("value-type", cborType);
    96 			current = parentOrSelf(current);
   100 			current = parentOrSelf(current);
    97 			mode.pop_back();
   101 			mode.pop_back();
    98 		} else if (mode.back() == Mode::ROOT) {
   102 		} else if (mode.back() == Mode::ROOT) {
    99 			current->add_child_text(value);
   103 			current->add_child_text(value);
   100 		} else {
   104 		} else {
   121 
   125 
   122 	void mapStart(ssize_t size) {
   126 	void mapStart(ssize_t size) {
   123 		if (mode.back() == Mode::ROOT) {
   127 		if (mode.back() == Mode::ROOT) {
   124 		} else if (mode.back() == Mode::ARRAY) {
   128 		} else if (mode.back() == Mode::ARRAY) {
   125 			current = current->add_child(itemName);
   129 			current = current->add_child(itemName);
       
   130 			current->set_attribute("value-type", "map");
   126 		} else if (mode.back() == Mode::MAP_VALUE) {
   131 		} else if (mode.back() == Mode::MAP_VALUE) {
   127 			mode.pop_back();
   132 			mode.pop_back();
   128 			// TODO: remainingItems
   133 			// TODO: remainingItems
   129 		} else {
   134 		} else {
   130 			// TODO: map might be a key of another map → wrap/nest
   135 			// TODO: map might be a key of another map → wrap/nest
   134 		mode.push_back(Mode::MAP_KEY);
   139 		mode.push_back(Mode::MAP_KEY);
   135 		remainingItems.push_back(size);
   140 		remainingItems.push_back(size);
   136 	}
   141 	}
   137 
   142 
   138 	void containerEnd() {
   143 	void containerEnd() {
   139 		current->add_child_comment(Glib::ustring::compose("end of a container: mode = %1", (int) mode.back())); // FIXME: remove
       
   140 		remainingItems.pop_back();
   144 		remainingItems.pop_back();
   141 		if (mode.back() == Mode::MAP_KEY || mode.back() == Mode::MAP_VALUE) current = parentOrSelf(current);
   145 		if (mode.back() == Mode::MAP_KEY || mode.back() == Mode::MAP_VALUE) current = parentOrSelf(current);
   142 		mode.pop_back(); // TODO: assert map/array
   146 		mode.pop_back(); // TODO: assert map/array
   143 	}
   147 	}
   144 
   148