static int lengthOfAttrs(PT_Attrs attrs) { int length = 0; while (PT_hasAttrsHead(attrs)) { length += lengthOfAttr(PT_getAttrsHead(attrs)) + 2; attrs = PT_getAttrsTail(attrs); } return length > 0 ? length - 2 : 0; }
static int yieldAttrs(PT_Attrs attrs, int idx, char *buf, int bufSize) { assert(idx <= bufSize); while (PT_hasAttrsHead(attrs)) { idx = yieldAttr(PT_getAttrsHead(attrs), idx, buf, bufSize); attrs = PT_getAttrsTail(attrs); if (PT_hasAttrsHead(attrs)) { buf[idx++] = ','; buf[idx++] = ' '; } } assert(idx <= bufSize); return idx; }
static SDF_AttributeList PTAttrsToSDFAttributeList(PT_Attrs ptAttrs) { SDF_AttributeList result; PT_Attr ptAttr; SDF_Attribute sdfAttribute; ptAttr = PT_getAttrsHead(ptAttrs); sdfAttribute = PTAttrToSDFAttribute(ptAttr); if (PT_isAttrsSingle(ptAttrs)) { result = SDF_makeAttributeListSingle(sdfAttribute); } else { PT_Attrs ptAttrsTail = PT_getAttrsTail(ptAttrs); result = PTAttrsToSDFAttributeList(ptAttrsTail); result = SDF_makeAttributeListMany(sdfAttribute, SDF_makeLayoutEmpty(), ",", /* FIXME in ApiGen!! */ SDF_makeLayoutEmpty(), result); } return result; }