int XmlEnc_EncodingStyle_1 (OSCTXT* pctxt, EncodingStyle_1* pvalue, const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) { int stat = 0; if (elemName != 0) { stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, TRUE); if (stat != 0) return LOG_RTERR (pctxt, stat); } { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://schemas.xmlsoap.org/soap/envelope/")); { OSRTDListNode* pnode = pvalue->head; while (0 != pnode) { stat = rtXmlEncUTF8Str (pctxt, ((const OSUTF8CHAR*)pnode->data) , OSUTF8(""), 0); if (stat != 0) return LOG_RTERR (pctxt, stat); OSRTSAFEPUTCHAR (pctxt, ' '); pnode = pnode->next; }} nsPrefix = savedPrefix; } stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); return (stat); }
int XmlEnc_Model (OSCTXT* pctxt, Model* pvalue, const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) { int stat = 0; if (0 != elemName) { stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, FALSE); if (stat != 0) return LOG_RTERR (pctxt, stat); } /* add attributes */ { OSRTDListNode* pnode = pvalue->attr.head; size_t len; while (0 != pnode) { len = rtxUTF8LenBytes (pnode->data); stat = rtxCheckBuffer (pctxt, len + 1); if (stat != 0) return LOG_RTERR (pctxt, stat); OSRTPUTCHAR (pctxt, ' '); OSRTMEMCPY (pctxt, pnode->data, len); pnode = pnode->next; }} OSRTSAFEPUTCHAR (pctxt, '>'); pctxt->flags &= ~OSTERMSTART; pctxt->state = OSXMLSTART; { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://www.w3.org/2002/xforms")); /* encode element14_list */ { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://www.w3.org/2002/xforms")); { OSRTDListNode* pnode = pvalue->element14_list.head; while (0 != pnode) { stat = XmlEnc_Odf_Element14 (pctxt, *((Odf_Element14*)pnode->data) , 0, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); pnode = pnode->next; }} nsPrefix = savedPrefix; } nsPrefix = savedPrefix; } stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); return (stat); }
EXTXMLMETHOD int rtXmlEncTermStartElement (OSCTXT* pctxt) { if (pctxt->state == OSXMLSTART && pctxt->flags & OSTERMSTART) { if (rtxCtxtTestFlag (pctxt, OSXMLC14N)) { int stat = rtXmlEncEndAttrC14N (pctxt); if (stat < 0) return LOG_RTERRNEW (pctxt, stat); } /* If empty element, terminate with '/>', otherwise '>' */ if (pctxt->flags & OSEMPTYELEM) OSRTSAFEPUTCHAR (pctxt, '/'); OSRTSAFEPUTCHAR (pctxt, '>'); /* Indicate element is terminated */ pctxt->flags &= ~(OSTERMSTART | OSEMPTYELEM); } return 0; }
EXTXMLMETHOD int SAX2XMLStreamCharacters (void *userData, const OSUTF8CHAR* chars, int length) { OSCTXT* pctxt = (OSCTXT*) userData; if (pctxt->state == OSXMLSTART) { OSRTSAFEPUTCHAR (pctxt, '>'); } rtXmlEncStringValue2 (pctxt, chars, length); pctxt->state = OSXMLDATA; return 0; }
int XmlEnc_Xcrdtype (OSCTXT* pctxt, Xcrdtype* pvalue, const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) { int stat = 0; if (elemName != 0) { stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, TRUE); if (stat != 0) return LOG_RTERR (pctxt, stat); } { OSUINT32 xx1; for (xx1 = 0; xx1 < pvalue->n; xx1++) { stat = rtXmlEncDouble (pctxt, pvalue->elem[xx1], 0, 0, 0); if (stat != 0) return LOG_RTERR (pctxt, stat); OSRTSAFEPUTCHAR (pctxt, ' '); }} stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); return (stat); }
EXTXMLMETHOD int rtXmlEncUnicodeData (OSCTXT* pctxt, const OSUNICHAR* value, OSUINT32 nchars) { int step; OSUINT32 inbufx; OSUNICHAR wc; for (inbufx = 0; inbufx < nchars; inbufx++) { wc = value[inbufx]; if (wc < 0x80) { char c = (char) wc; /* One byte sequence */ OSRTSAFEPUTCHAR (pctxt, c); } else { char outbuf[10]; int sz; for (step = 2; step < 6; ++step) if ((wc & encoding_mask[step - 2]) == 0) break; sz = step; /* Copy multi-byte sequence to output buffer */ outbuf[0] = encoding_byte[step - 2]; --step; do { outbuf[step] = (OSOCTET) (0x80 | (wc & 0x3f)); wc >>= 6; } while (--step > 0); outbuf[0] |= wc; OSRTSAFEMEMCPY (pctxt, (void*)outbuf, sz); } } return 0; }
EXTXMLMETHOD int SAX2XMLStreamStartElement (void *userData, const OSUTF8CHAR* localname, const OSUTF8CHAR* qname, const OSUTF8CHAR* const* attrs) { OSCTXT* pctxt = (OSCTXT*) userData; if (pctxt->state == OSXMLINIT) { rtXmlEncStartDocument (pctxt); } else if (pctxt->state == OSXMLSTART) { OSRTSAFEPUTCHAR (pctxt, '>'); } if (pctxt->state != OSXMLDATA) { rtXmlEncIndent (pctxt); } pctxt->level++; pctxt->state = OSXMLSTART; /* Verify element will fit in encode buffer */ if (0 == rtxCheckBuffer (pctxt, OSUTF8LEN(qname) + 1)) { /* Copy element QName to buffer */ OSRTPUTCHAR (pctxt, '<'); OSRTMEMCPY (pctxt, qname, OSUTF8LEN(qname)); if (0 != attrs && 0 != attrs[0]) { OSUINT32 i = 0; while (0 != attrs[i]) { rtXmlEncUTF8Attr (pctxt, attrs[i], attrs[i+1]); i += 2; } } } if (0 != localname) {} /* to suppress level 4 warning */ return 0; }
int XmlEnc_Detail (OSCTXT* pctxt, Detail* pvalue, const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) { int stat = 0; if (0 != elemName) { stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, FALSE); if (stat != 0) return LOG_RTERR (pctxt, stat); } /* add attributes */ { OSRTDListNode* pnode = pvalue->attr.head; size_t len; while (0 != pnode) { len = rtxUTF8LenBytes (pnode->data); stat = rtxCheckBuffer (pctxt, len + 1); if (stat != 0) return LOG_RTERR (pctxt, stat); OSRTPUTCHAR (pctxt, ' '); OSRTMEMCPY (pctxt, pnode->data, len); pnode = pnode->next; }} OSRTSAFEPUTCHAR (pctxt, '>'); pctxt->flags &= ~OSTERMSTART; pctxt->state = OSXMLSTART; { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://schemas.xmlsoap.org/soap/envelope/")); /* encode elem_list */ { const OSUTF8CHAR* savedPrefix = nsPrefix; nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8( "http://schemas.xmlsoap.org/soap/envelope/")); { OSRTDListNode* pnode = pvalue->elem_list.head; while (0 != pnode) { if (((OSXSDAny*)pnode->data)->t == OSXSDAny_xmlText) { stat = rtXmlEncAnyStr (pctxt, ((OSXSDAny*)pnode->data)->u.xmlText , OSUTF8(""), 0); if (stat != 0) return LOG_RTERR (pctxt, stat); } else { char buf[40]; os_snprintf (buf, 40, "%d", ((OSXSDAny*)pnode->data)->t); rtxErrAddStrParm (pctxt, buf); return LOG_RTERR (pctxt, RTERR_INVOPT); } pnode = pnode->next; }} nsPrefix = savedPrefix; } nsPrefix = savedPrefix; } stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix); if (stat != 0) return LOG_RTERR (pctxt, stat); return (stat); }
EXTXMLMETHOD int rtXmlEncStringValue2 (OSCTXT* pctxt, const OSUTF8CHAR* value, size_t valueLen) { if (0 != value && 0 != *value) { size_t i; if (rtxCtxtTestFlag (pctxt, OSXMLC14N)) { /* C14N text node */ if (pctxt->state == OSXMLDATA) { for (i = 0; i < valueLen; i++) { switch (value[i]) { case '&': OSRTSAFEMEMCPY (pctxt, "&", 5); break; case '<': OSRTSAFEMEMCPY (pctxt, "<", 4); break; case '>': OSRTSAFEMEMCPY (pctxt, ">", 4); break; case 0xD: OSRTSAFEMEMCPY (pctxt, "
", 5); break; default: OSRTSAFEPUTCHAR (pctxt, value[i]); } } } else { /* C14N attribute node */ for (i = 0; i < valueLen; i++) { switch (value[i]) { case '&': OSRTSAFEMEMCPY (pctxt, "&", 5); break; case '"': OSRTSAFEMEMCPY (pctxt, """, 6); break; case 0x9: OSRTSAFEMEMCPY (pctxt, "	", 5); break; case 0xA: OSRTSAFEMEMCPY (pctxt, "
", 5); break; case 0xD: OSRTSAFEMEMCPY (pctxt, "
", 5); break; case '<': OSRTSAFEMEMCPY (pctxt, "<", 4); break; default: OSRTSAFEPUTCHAR (pctxt, value[i]); } } } } else { /* not C14N */ for (i = 0; i < valueLen; i++) { switch (value[i]) { case '<': OSRTSAFEMEMCPY (pctxt, "<", 4); break; case '>': OSRTSAFEMEMCPY (pctxt, ">", 4); break; case '&': OSRTSAFEMEMCPY (pctxt, "&", 5); break; case '\'': OSRTSAFEMEMCPY (pctxt, "'", 6); break; case '"': OSRTSAFEMEMCPY (pctxt, """, 6); break; default: OSRTSAFEPUTCHAR (pctxt, value[i]); } } } } OSRT_CHECK_EVAL_DATE1(pctxt); return 0; }