static struct joiner *joinerParsePassOne(char *fileName) /* Do first pass parsing of joiner file and return list of * joinerSets. */ { struct lineFile *lf = lineFileOpen(fileName, TRUE); char *line, *word; struct dyString *dyBuf = dyStringNew(0); struct joiner *joiner; struct joinerSet *js; AllocVar(joiner); joiner->fileName = cloneString(fileName); joiner->symHash = newHash(9); joiner->databasesChecked = newHash(8); joiner->databasesIgnored = newHash(8); while ((line = nextSubbedLine(lf, joiner->symHash, dyBuf)) != NULL) { if ((word = nextWord(&line)) != NULL) { if (sameString("set", word)) { char *var, *val; var = nextWord(&line); if (var == NULL) errAbort("set what line %d of %s", lf->lineIx, lf->fileName); val = trimSpaces(line); if (isEmpty(val)) errAbort("Set with no value line %d of %s", lf->lineIx, lf->fileName); hashAdd(joiner->symHash, var, cloneString(val)); } else if (sameString("identifier", word)) { js = parseIdentifierSet(lf, line, joiner->symHash, dyBuf); if (js != NULL) slAddHead(&joiner->jsList, js); } else if (sameString("exclusiveSet", word)) { struct hash *exHash = newHash(8); addDatabasesToHash(exHash, line, lf); slAddHead(&joiner->exclusiveSets, exHash); } else if (sameString("databasesChecked", word)) { addDatabasesToHash(joiner->databasesChecked, line, lf); } else if (sameString("databasesIgnored", word)) { addDatabasesToHash(joiner->databasesIgnored, line, lf); } else if (sameString("tablesIgnored", word)) { struct joinerIgnore *ig; ig = parseTablesIgnored(lf, line, joiner->symHash, dyBuf); slAddHead(&joiner->tablesIgnored, ig); } else if (sameString("dependency", word)) { struct joinerDependency *dep; dep = parseDependency(lf, line); slAddHead(&joiner->dependencyList, dep); } else if (sameString("type", word)) { struct joinerType *type; type = parseType(lf, line, joiner->symHash, dyBuf); slAddHead(&joiner->typeList, type); } else { errAbort("unrecognized '%s' line %d of %s", word, lf->lineIx, lf->fileName); } } } lineFileClose(&lf); dyStringFree(&dyBuf); slReverse(&joiner->jsList); slReverse(&joiner->tablesIgnored); slReverse(&joiner->typeList); return joiner; }
void Data::externalDataReady(Data::Type type, const QVariantMap &metaData, const QVariantMap &data) { if (acceptDependency(type, metaData) && parseDependency(type, metaData, data)) finish(); }