static void appendExternalID(CFMutableStringRef str, CFXMLExternalID *extID) { if (extID->publicID) { CFStringAppendCString(str, " PUBLIC ", kCFStringEncodingASCII); appendQuotedString(str, extID->publicID); if (extID->systemID) { // Technically, for externalIDs, systemID must not be NULL. However, by testing for a NULL systemID, we can use this to emit publicIDs, too. REW, 2/15/2000 CFStringAppendCString(str, " ", kCFStringEncodingASCII); appendQuotedString(str, CFURLGetString(extID->systemID)); } } else if (extID->systemID) { CFStringAppendCString(str, " SYSTEM ", kCFStringEncodingASCII); appendQuotedString(str, CFURLGetString(extID->systemID)); } else { // Should never get here } }
static int write_samples_header(const LoggerMessage *msg) { int i; ChannelSample *sample = msg->channelSamples; size_t channelCount = msg->sampleCount; for (i = 0; 0 < channelCount; channelCount--, sample++, i++) { appendFileBuffer(0 == i ? "" : ","); uint8_t precision = sample->cfg->precision; appendQuotedString(sample->cfg->label); appendFileBuffer("|"); appendQuotedString(sample->cfg->units); appendFileBuffer("|"); appendFloat(decodeSampleRate(sample->cfg->min), precision); appendFileBuffer("|"); appendFloat(decodeSampleRate(sample->cfg->max), precision); appendFileBuffer("|"); appendInt(decodeSampleRate(sample->cfg->sampleRate)); } appendFileBuffer("\n"); return writeFileBuffer(); }
static void appendElementProlog(CFMutableStringRef str, CFXMLTreeRef tree) { const CFXMLElementInfo *data = (CFXMLElementInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)); CFStringAppendFormat(str, NULL, CFSTR("<%@"), CFXMLNodeGetString(CFXMLTreeGetNode(tree))); if (data->attributeOrder) { CFIndex i, c = CFArrayGetCount(data->attributeOrder); for (i = 0; i < c; i ++) { CFStringRef attr = (CFStringRef)CFArrayGetValueAtIndex(data->attributeOrder, i); CFStringRef value = (CFStringRef)CFDictionaryGetValue(data->attributes, attr); CFStringAppendFormat(str, NULL, CFSTR(" %@="), attr); appendQuotedString(str, value); } } if (data->isEmpty) { CFStringAppendCString(str, "/>", kCFStringEncodingASCII); } else { CFStringAppendCString(str, ">", kCFStringEncodingASCII); } }
/* Although named "prolog", for leafs of the tree, this is the only XML generation function called. This is why Comments, Processing Instructions, etc. generate their XML during this function. REW, 2/11/2000 */ static void _CFAppendXMLProlog(CFMutableStringRef str, const CFXMLTreeRef tree) { switch (CFXMLNodeGetTypeCode(CFXMLTreeGetNode(tree))) { case kCFXMLNodeTypeDocument: break; case kCFXMLNodeTypeElement: appendElementProlog(str, tree); break; case kCFXMLNodeTypeAttribute: // Should never be encountered break; case kCFXMLNodeTypeProcessingInstruction: { CFXMLProcessingInstructionInfo *data = (CFXMLProcessingInstructionInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)); if (data->dataString) { CFStringAppendFormat(str, NULL, CFSTR("<?%@ %@?>"), CFXMLNodeGetString(CFXMLTreeGetNode(tree)), data->dataString); } else { CFStringAppendFormat(str, NULL, CFSTR("<?%@?>"), CFXMLNodeGetString(CFXMLTreeGetNode(tree))); } break; } case kCFXMLNodeTypeComment: CFStringAppendFormat(str, NULL, CFSTR("<!--%@-->"), CFXMLNodeGetString(CFXMLTreeGetNode(tree))); break; case kCFXMLNodeTypeText: CFStringAppend(str, CFXMLNodeGetString(CFXMLTreeGetNode(tree))); break; case kCFXMLNodeTypeCDATASection: CFStringAppendFormat(str, NULL, CFSTR("<![CDATA[%@]]>"), CFXMLNodeGetString(CFXMLTreeGetNode(tree))); break; case kCFXMLNodeTypeDocumentFragment: break; case kCFXMLNodeTypeEntity: { CFXMLEntityInfo *data = (CFXMLEntityInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)); CFStringAppendCString(str, "<!ENTITY ", kCFStringEncodingASCII); if (data->entityType == kCFXMLEntityTypeParameter) { CFStringAppend(str, CFSTR("% ")); } CFStringAppend(str, CFXMLNodeGetString(CFXMLTreeGetNode(tree))); CFStringAppend(str, CFSTR(" ")); if (data->replacementText) { appendQuotedString(str, data->replacementText); CFStringAppendCString(str, ">", kCFStringEncodingASCII); } else { appendExternalID(str, &(data->entityID)); if (data->notationName) { CFStringAppendFormat(str, NULL, CFSTR(" NDATA %@"), data->notationName); } CFStringAppendCString(str, ">", kCFStringEncodingASCII); } break; } case kCFXMLNodeTypeEntityReference: { CFXMLEntityTypeCode entityType = ((CFXMLEntityReferenceInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)))->entityType; if (entityType == kCFXMLEntityTypeParameter) { CFStringAppendFormat(str, NULL, CFSTR("%%%@;"), CFXMLNodeGetString(CFXMLTreeGetNode(tree))); } else { CFStringAppendFormat(str, NULL, CFSTR("&%@;"), CFXMLNodeGetString(CFXMLTreeGetNode(tree))); } break; } case kCFXMLNodeTypeDocumentType: CFStringAppendCString(str, "<!DOCTYPE ", kCFStringEncodingASCII); CFStringAppend(str, CFXMLNodeGetString(CFXMLTreeGetNode(tree))); if (CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree))) { CFXMLExternalID *extID = &((CFXMLDocumentTypeInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)))->externalID; appendExternalID(str, extID); } CFStringAppendCString(str, " [", kCFStringEncodingASCII); break; case kCFXMLNodeTypeWhitespace: CFStringAppend(str, CFXMLNodeGetString(CFXMLTreeGetNode(tree))); break; case kCFXMLNodeTypeNotation: { CFXMLNotationInfo *data = (CFXMLNotationInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)); CFStringAppendFormat(str, NULL, CFSTR("<!NOTATION %@ "), CFXMLNodeGetString(CFXMLTreeGetNode(tree))); appendExternalID(str, &(data->externalID)); CFStringAppendCString(str, ">", kCFStringEncodingASCII); break; } case kCFXMLNodeTypeElementTypeDeclaration: CFStringAppendFormat(str, NULL, CFSTR("<!ELEMENT %@ %@>"), CFXMLNodeGetString(CFXMLTreeGetNode(tree)), ((CFXMLElementTypeDeclarationInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)))->contentDescription); break; case kCFXMLNodeTypeAttributeListDeclaration: { CFXMLAttributeListDeclarationInfo *attListData = (CFXMLAttributeListDeclarationInfo *)CFXMLNodeGetInfoPtr(CFXMLTreeGetNode(tree)); CFIndex idx; CFStringAppendCString(str, "<!ATTLIST ", kCFStringEncodingASCII); CFStringAppend(str, CFXMLNodeGetString(CFXMLTreeGetNode(tree))); for (idx = 0; idx < attListData->numberOfAttributes; idx ++) { CFXMLAttributeDeclarationInfo *attr = &(attListData->attributes[idx]); CFStringAppendFormat(str, NULL, CFSTR("\n\t%@ %@ %@"), attr->attributeName, attr->typeString, attr->defaultString); } CFStringAppendCString(str, ">", kCFStringEncodingASCII); break; } default: CFAssert1(false, __kCFLogAssertion, "Encountered unexpected XMLDataTypeID %d", CFXMLNodeGetTypeCode(CFXMLTreeGetNode(tree))); } }