43c1ad49687da203d0be65ce7b2bc2c42cf5543a
angie
Fri Jul 1 16:31:15 2011 -0700
Feature #986 (VCF): keys can have <>'s, so html encode them for display.
diff --git src/hg/hgc/vcfClick.c src/hg/hgc/vcfClick.c
index 2fa75f4..4a1565d 100644
--- src/hg/hgc/vcfClick.c
+++ src/hg/hgc/vcfClick.c
@@ -1,53 +1,54 @@
/* vcfTrack -- handlers for Variant Call Format data. */
#ifdef USE_TABIX
#include "common.h"
#include "dystring.h"
#include "errCatch.h"
#include "hCommon.h"
#include "hdb.h"
#include "hgc.h"
+#include "htmshell.h"
#if (defined USE_TABIX && defined KNETFILE_HOOKS)
#include "knetUdc.h"
#include "udc.h"
#endif//def USE_TABIX && KNETFILE_HOOKS
#include "pgSnp.h"
#include "trashDir.h"
#include "vcf.h"
#define NA "n/a"
static void printListWithDescriptions(struct vcfFile *vcff, char *str, char *sep, struct vcfInfoDef *infoDefs)
/* Given a VCF field, its separator char and a list of vcfInfoDefs, print out a list
* of values with descriptions if descriptions are available. */
{
char *copy = cloneString(str);
char *words[256];
int i, wordCount = chopString(copy, sep, words, ArraySize(words));
for (i = 0; i < wordCount; i++)
{
if (i > 0)
printf(", ");
char *key = words[i];
const struct vcfInfoDef *def = vcfInfoDefForKey(vcff, key);
if (def != NULL)
- printf("%s (%s)", key, def->description);
+ printf("%s (%s)", htmlEncode(key), def->description);
else
- printf("%s", key);
+ printf("%s", htmlEncode(key));
}
printf("
\n");
}
static void vcfAltAlleleDetails(struct vcfRecord *rec)
/* If VCF header specifies any symbolic alternate alleles, pull in descriptions. */
{
printf("Alternate allele(s): ");
if (sameString(rec->alt, "."))
{
printf(NA"
\n");
return;
}
struct vcfFile *vcff = rec->file;
printListWithDescriptions(vcff, rec->alt, ",", vcff->altDefs);