/* maf.c autoXml generated file */ #include "common.h" #include "xap.h" #include "maf.h" #include "mafXml.h" void *mafStartHandler(struct xap *xp, char *name, char **atts); /* Called by expat with start tag. Does most of the parsing work. */ void mafEndHandler(struct xap *xp, char *name); /* Called by expat with end tag. Checks all required children are loaded. */ void mafMafSave(struct mafFile *obj, int indent, FILE *f) /* Save mafFile to file. */ { struct mafAli *mafAli; boolean isNode = TRUE; if (obj == NULL) return; xapIndent(indent, f); fprintf(f, "version); if (obj->scoring != NULL) fprintf(f, " scoring=\"%s\"", obj->scoring); fprintf(f, ">"); for (mafAli = obj->alignments; mafAli != NULL; mafAli = mafAli->next) { if (isNode) { fprintf(f, "\n"); isNode = FALSE; } mafAliSave(mafAli, indent+2, f); } if (!isNode) xapIndent(indent, f); fprintf(f, "\n"); } struct mafFile *mafMafLoad(char *fileName) /* Load mafFile from file. */ { struct mafFile *obj; xapParseAny(fileName, "MAF", mafStartHandler, mafEndHandler, NULL, &obj); return obj; } void mafAliSave(struct mafAli *obj, int indent, FILE *f) /* Save mafAli to file. */ { struct mafComp *mafComp; if (obj == NULL) return; xapIndent(indent, f); fprintf(f, "score != 0.0) fprintf(f, " score=\"%f\"", obj->score); fprintf(f, ">"); fprintf(f, "\n"); for (mafComp = obj->components; mafComp != NULL; mafComp = mafComp->next) { mafSSave(mafComp, indent+2, f); } xapIndent(indent, f); fprintf(f, "\n"); } struct mafAli *mafAliLoad(char *fileName) /* Load mafAli from file. */ { struct mafAli *obj; xapParseAny(fileName, "ALI", mafStartHandler, mafEndHandler, NULL, &obj); return obj; } void mafSSave(struct mafComp *obj, int indent, FILE *f) /* Save mafComp to file. */ { if (obj == NULL) return; xapIndent(indent, f); fprintf(f, "src); fprintf(f, " srcSize=\"%d\"", obj->srcSize); fprintf(f, " strand=\"%c\"", obj->strand); fprintf(f, " start=\"%d\"", obj->start); fprintf(f, " size=\"%d\"", obj->size); fprintf(f, ">"); fprintf(f, "%s", obj->text); fprintf(f, "\n"); } struct mafComp *mafSLoad(char *fileName) /* Load mafComp from file. */ { struct mafComp *obj; xapParseAny(fileName, "S", mafStartHandler, mafEndHandler, NULL, &obj); return obj; } void *mafStartHandler(struct xap *xp, char *name, char **atts) /* Called by expat with start tag. Does most of the parsing work. */ { struct xapStack *st = xp->stack+1; int depth = xp->stackDepth; int i; if (sameString(name, "MAF")) { struct mafFile *obj; AllocVar(obj); for (i=0; atts[i] != NULL; i += 2) { char *name = atts[i], *val = atts[i+1]; if (sameString(name, "version")) obj->version = atoi(val); else if (sameString(name, "scoring")) obj->scoring = cloneString(val); } return obj; } else if (sameString(name, "ALI")) { struct mafAli *obj; AllocVar(obj); for (i=0; atts[i] != NULL; i += 2) { char *name = atts[i], *val = atts[i+1]; if (sameString(name, "score")) obj->score = atof(val); } if (depth > 1) { if (sameString(st->elName, "MAF")) { struct mafFile *parent = st->object; slAddHead(&parent->alignments, obj); } } return obj; } else if (sameString(name, "S")) { struct mafComp *obj; AllocVar(obj); for (i=0; atts[i] != NULL; i += 2) { char *name = atts[i], *val = atts[i+1]; if (sameString(name, "src")) obj->src = cloneString(val); else if (sameString(name, "srcSize")) obj->srcSize = atoi(val); else if (sameString(name, "strand")) obj->strand = val[0]; else if (sameString(name, "start")) obj->start = atoi(val); else if (sameString(name, "size")) obj->size = atoi(val); } if (obj->src == NULL) xapError(xp, "missing src"); if (obj->strand == 0) xapError(xp, "missing strand"); if (depth > 1) { if (sameString(st->elName, "ALI")) { struct mafAli *parent = st->object; slAddHead(&parent->components, obj); } } return obj; } else { xapSkip(xp); return NULL; } } void mafEndHandler(struct xap *xp, char *name) /* Called by expat with end tag. Checks all required children are loaded. */ { struct xapStack *stack = xp->stack; if (sameString(name, "MAF")) { struct mafFile *obj = stack->object; slReverse(&obj->alignments); } else if (sameString(name, "ALI")) { struct mafAli *obj = stack->object; if (obj->components == NULL) xapError(xp, "Missing S"); slReverse(&obj->components); } else if (sameString(name, "S")) { struct mafComp *obj = stack->object; obj->text = cloneString(stack->text->string); } }