#ifndef PARSEE_FORM_H #define PARSEE_FORM_H /*-* * This is a szt of macros to handle XML forms. Aya does not yet support * macros. TODO! * -------- * Written-By: LDA */ #define Report(id, label) do \ { \ field = XMLCreateTag("field"); \ XMLAddAttr(field, "var", id); \ XMLAddAttr(field, "label", label); \ XMLAddChild(reported, field); \ } \ while(0) #define BeginItem() item = XMLCreateTag("item") #define EndItem() XMLAddChild(x, item) #define SetField(id, val) do \ { \ field = XMLCreateTag("field"); \ value = XMLCreateTag("value"); \ txt = XMLCreateText(val); \ XMLAddAttr(field, "var", id); \ XMLAddChild(value, txt); \ XMLAddChild(field, value); \ XMLAddChild(item, field); \ } \ while(0) #define SetFixed(id, val) do \ { \ field = XMLCreateTag("field"); \ value = XMLCreateTag("value"); \ txt = XMLCreateText(val); \ XMLAddAttr(field, "var", id); \ XMLAddAttr(field, "type", "fixed"); \ XMLAddChild(value, txt); \ XMLAddChild(field, value); \ XMLAddChild(item, field); \ } \ while(0) #define GetFieldValue(to, id, form) do \ { \ XMLElement *field_content = XMLookForTKV(form, "field", "var", id); \ XMLElement *value = XMLookForUnique(field_content, "value"); \ XMLElement *val_data = value ? ArrayGet(value->children, 0) : NULL; \ if (val_data && val_data->data) \ { \ to = val_data->data; \ } \ } \ while(0) #define GFVMulti(to,id,form,n) do \ { \ XMLElement *field_content = XMLookForTKV(form, "field", "var", id); \ XMLElement *value = field_content ? ArrayGet(field_content->children, n) : NULL; \ XMLElement *val_data = value ? ArrayGet(value->children, 0) : NULL; \ if (val_data && val_data->data) \ { \ to = val_data->data; \ } \ } \ while(0) #define GFVCount(to,id,form) do \ { \ XMLElement *field_content = XMLookForTKV(form, "field", "var", id); \ to = field_content ? ArraySize(field_content->children) : 0; \ } \ while(0) #define SetNote(type, text) do \ { \ XMLElement *note_xml = XMLCreateTag("note"); \ XMLElement *note_msg = XMLCreateText(text); \ XMLAddAttr(note_xml, "type", type); \ XMLAddChild(note_xml, note_msg); \ XMLAddChild(out, note_xml); \ } \ while(0) #define SetTitle(form, text) do \ { \ XMLElement *title_xml, *title_txt; \ title_xml = XMLCreateTag("title"); \ title_txt = XMLCreateText(text); \ XMLAddChild(title_xml, title_txt); \ XMLAddChild(form, title_xml); \ } \ while(0) #endif