void CommandDispatcher::addCmdLine(string line) { int CRLNRidx = 0; do { CRLNRidx = line.find("\n"); string s; if (CRLNRidx >=0) { s = line.substr(0,CRLNRidx); line = line.substr(CRLNRidx+1); } else { s = line; } if (line.compare("") != 0) { int idx = cortexCmdJson.find("\"line\""); if (idx >= 0) cortexCmdJson += ", "; string time = currentTimeToString(); cortexCmdJson += "{\"id\":" + int_to_string(cmdLineCounter++) + ", \"time\":\"" + htmlEncode(time) + "\"" + ", \"traj\":\"" + htmlEncode(oneTimeTrajectoryName) + "\"" + ", \"line\":\"" + htmlEncode(s) + "\"" + "}"; oneTimeTrajectoryName = ""; } } while ((CRLNRidx >= 0)); }
void CommandDispatcher::addLogLine(string line) { string time; if ((line.length() > 24) && (line[13] == ':') && (line[16] == ':')) { time = line.substr(11,12); line = line.substr(24); } else time = currentTimeToString(); int idx = cortexLogJson.find("\"line\""); if (idx >= 0) cortexLogJson += ", "; cortexLogJson += "{\"id\":" + int_to_string(logLineCounter++) + ", \"time\":\"" + htmlEncode(time) + "\"" + ", \"line\":\"" + htmlEncode(line) + "\"}"; // remove staff from beginning if log gets loo long to be displayed while (cortexLogJson.length() > LOGVIEW_MAXSIZE) { int idx = cortexLogJson.find("{\"id\""); if (idx >= 0) { idx = cortexLogJson.find("{\"id\"", idx+1); if (idx>= 0) { cortexLogJson = cortexLogJson.substr(idx); } } } }
void MainWindow::send() { bool ok = true; QString horas = ui->hoursLineEdit->text(); int h = horas.toInt(&ok); if(!ok || h < 1 || h > 24){ msgBox->setText("Invalid Hours field"); msgBox->setIcon(QMessageBox::Warning); msgBox->setStandardButtons(QMessageBox::Ok); msgBox->exec(); ui->hoursLineEdit->clear(); }else{ QString projectId = ui->projectBox->itemData(ui->projectBox->currentIndex()).toString(); QString description = ui->descriptionEdit->toPlainText(); htmlEncode(&description); QString shortDescription = description; if (description.length() > 30) { shortDescription.truncate(30); shortDescription += "..."; } QString str = QString("Added %1 hours to %2 (%3)").arg(horas).arg(ui->projectBox->currentText()).arg(shortDescription); ui->statusLog->setText(str); acdp.send(projectId,horas,description); } }
void CommandDispatcher::addAlert(string line) { int idx = alertJson.find("\"line\""); if (idx >= 0) alertJson += ", "; alertJson += "{\"id\":" + int_to_string(alertCounter++) + ", \"line\":\"" + htmlEncode(line) + "\"}"; }
void hPrintEncodedNonBreak(char *s) /* Print with htmlEncode and non-break */ { char *encoded = htmlEncode(s); hPrintNonBreak(encoded); freeMem(encoded); }
void bamMethods(struct track *track) /* Methods for BAM alignment files. */ { knetUdcInstall(); boolean isBamWig = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, BAMWIG_MODE, (trackDbSettingClosestToHome(track->tdb, BAMWIG_MODE) != NULL)); if (isBamWig) { bamWigMethods(track, track->tdb, 0, NULL); return; } track->canPack = TRUE; boolean isPaired = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, BAM_PAIR_ENDS_BY_NAME, (trackDbSettingClosestToHome(track->tdb, BAM_PAIR_ENDS_BY_NAME) != NULL)); char *tdbShowNames = trackDbSetting(track->tdb, BAM_SHOW_NAMES); boolean showNames = cartUsualBooleanClosestToHome(cart, track->tdb, FALSE, BAM_SHOW_NAMES, SETTING_IS_ON(tdbShowNames)); char *colorMode = cartOrTdbString(cart, track->tdb, BAM_COLOR_MODE, BAM_COLOR_MODE_DEFAULT); char *userTag = cartOrTdbString(cart, track->tdb, BAM_COLOR_TAG, BAM_COLOR_TAG_DEFAULT); if (sameString(colorMode, BAM_COLOR_MODE_TAG) && userTag != NULL) { if (! (isalpha(userTag[0]) && isalnum(userTag[1]) && userTag[2] == '\0')) { warn("%s: BAM tag '%s' is not valid -- must be a letter followed by a letter or number.", track->tdb->shortLabel, htmlEncode(userTag)); cartRemoveVariableClosestToHome(cart, track->tdb, FALSE, BAM_COLOR_TAG); } } addBamBaseAndIndelSettings(track->tdb); if (isPaired) { linkedFeaturesSeriesMethods(track); track->loadItems = bamPairedLoadItems; track->drawItems = bamLinkedFeaturesSeriesDraw; track->drawItemAt = bamPairedDrawAt; } else { linkedFeaturesMethods(track); track->loadItems = bamLoadItems; track->drawItems = bamLinkedFeaturesDraw; track->drawItemAt = bamDrawAt; } if (!showNames) { track->drawName = TRUE; // ironic, but this is how to suppress item labels in pack mode. track->drawLeftLabels = maybeDrawLeftLabels; } track->nextItemButtonable = track->nextExonButtonable = FALSE; track->nextPrevItem = NULL; track->nextPrevExon = NULL; if (sameString(colorMode, BAM_COLOR_MODE_GRAY)) track->colorShades = shadesOfGray; }
QString StringUtils::htmlEncode( QString text, bool urlAsLinks, bool newlineAsBr) { QString s; QHash<int,int> linksIndexes; // start of link index -> length of link if (urlAsLinks) { QRegularExpressionMatchIterator it = linkRe.globalMatch(text); while (it.hasNext()) { QRegularExpressionMatch match = it.next(); linksIndexes.insert(match.capturedStart(0), match.capturedLength(0)); } } for (int i = 0; i < text.length(); ) { if (urlAsLinks && linksIndexes.contains(i)) { int l = linksIndexes.value(i); QString html = htmlEncode(text.mid(i, l), false), href = html; href.replace("\"", "%22"); s.append("<a href=\"").append(href).append("\">").append(html) .append("</a>"); i += l; } else { const QChar c = text.at(i); switch(c.toLatin1()) { case '<': s.append("<"); break; case '>': s.append(">"); break; case '&': s.append("&"); break; case '"': s.append("""); break; case '\'': s.append("'"); break; case '\n': if (newlineAsBr) s.append("<br/>\n"); else s.append(c); break; default: s.append(c); } ++i; } } return s; }
char *bamGetTagString(const bam1_t *bam, char *tag, char *buf, size_t bufSize) /* If bam's tags include the given 2-character tag, place the value into * buf (zero-terminated, trunc'd if nec) and return a pointer to buf, * or NULL if tag is not present. */ { if (tag == NULL) errAbort("NULL tag passed to bamGetTagString"); if (! (isalpha(tag[0]) && isalnum(tag[1]) && tag[2] == '\0')) errAbort("bamGetTagString: invalid tag '%s'", htmlEncode(tag)); char *val = NULL; // adapted from part of bam.c bam_format1: uint8_t *s = bam1_aux(bam); while (s < bam->data + bam->data_len) { uint8_t type, key[2]; key[0] = s[0]; key[1] = s[1]; s += 2; type = *s; ++s; if (key[0] == tag[0] && key[1] == tag[1]) { if (type == 'A') { snprintf(buf, bufSize, "%c", *s);} else if (type == 'C') { snprintf(buf, bufSize, "%u", *s); } else if (type == 'c') { snprintf(buf, bufSize, "%d", *s); } else if (type == 'S') { snprintf(buf, bufSize, "%u", *(uint16_t*)s); } else if (type == 's') { snprintf(buf, bufSize, "%d", *(int16_t*)s); } else if (type == 'I') { snprintf(buf, bufSize, "%u", *(uint32_t*)s); } else if (type == 'i') { snprintf(buf, bufSize, "%d", *(int32_t*)s); } else if (type == 'f') { snprintf(buf, bufSize, "%g", *(float*)s); } else if (type == 'd') { snprintf(buf, bufSize, "%lg", *(double*)s); } else if (type == 'Z' || type == 'H') strncpy(buf, (char *)s, bufSize); else buf[0] = '\0'; buf[bufSize-1] = '\0'; // TODO: is this nec?? see man pages val = buf; break; } else { if (type == 'A' || type == 'C' || type == 'c') { ++s; } else if (type == 'S' || type == 's') { s += 2; } else if (type == 'I' || type == 'i' || type == 'f') { s += 4; } else if (type == 'd') { s += 8; } else if (type == 'Z' || type == 'H') { while (*s++); } } } return val; }
static void makeDisplayAlleles(struct vcfRecord *rec, boolean showLeftBase, char leftBase, int endLength, boolean showLength, boolean encodeHtml, char **displayAls) /* If necessary, show the left base that we trimmed and/or abbreviate long sequences. */ { struct dyString *dy = dyStringNew(128); int i; for (i = 0; i < rec->alleleCount; i++) { dyStringClear(dy); if (showLeftBase) dyStringPrintf(dy, "(%c)", leftBase); abbreviateLongSeq(rec->alleles[i], endLength, showLength, dy); if (encodeHtml) displayAls[i] = htmlEncode(dy->string); else displayAls[i] = cloneString(dy->string); } }
static void printValueHistogram(char *db, char *table, char *field) /* Print very simple-minded text histogram. */ { double maxHist = 60; double scale = -1.0; struct sqlConnection *conn = hAllocConn(db); struct sqlResult *sr; char **row; char query[256]; sqlSafef(query, sizeof(query), "select %s, count(*) as count from %s group by %s order by count desc", field, table, field); sr = sqlGetResult(conn, query); hTableStart(); hPrintf("<TR>"); hPrintf("<TH>value</TH>"); hPrintf("<TH>count</TH>"); hPrintf("<TH>graph</TH>"); hPrintf("</TR>"); while ((row = sqlNextRow(sr)) != NULL) { char *name = htmlEncode(row[0]); int count = atoi(row[1]); int starCount; if (scale < 0) scale = (maxHist)/count; hPrintf("<TR><TD>%s</TD>", name); hPrintf("<TD ALIGN=RIGHT>%d</TD>", count); hPrintf("<TD>"); starCount = round(scale*count); if (starCount > 0) starOut(stdout, starCount); else hPrintf(" "); hPrintf("</TD></TR>\n"); freeMem(name); } // hPrintf("</TABLE>"); hTableEnd(); hFreeConn(&conn); }
static void printKeysWithDescriptions(struct vcfFile *vcff, int wordCount, char **words, struct vcfInfoDef *infoDefs, boolean stripToSymbol) /* Given an array of keys, print out a list of values with descriptions if descriptions are * available. If stripToSymbol, when searching infoDefs, pick the actual key out of * <>'s and other extraneous stuff (e.g. "(C)<DEL>" --> "DEL"). */ { int i; for (i = 0; i < wordCount; i++) { if (i > 0) printf(", "); char *displayKey = words[i]; char *descKey = displayKey; if (stripToSymbol) { char *p = strchr(displayKey, '<'); if (p) { descKey = cloneString(p+1); p = strchr(descKey, '>'); if (p) *p = '\0'; } } char *description = NULL; struct vcfInfoDef *def; for (def = infoDefs; def != NULL; def = def->next) if (sameString(descKey, def->key)) { description = def->description; break; } char *htmlKey = htmlEncode(displayKey); if (description) printf("%s (%s)", htmlKey, description); else printf("%s", htmlKey); } printf("<BR>\n"); }
char *checkParams(char *database, char *prefix, char *type) /* If we don't have valid CGI parameters, quit with a Bad Request HTTP response. */ { pushWarnHandler(htmlVaBadRequestAbort); pushAbortHandler(htmlVaBadRequestAbort); if(prefix == NULL || database == NULL) errAbort("%s", "Missing prefix and/or db CGI parameter"); if (! hDbIsActive(database)) errAbort("'%s' is not a valid, active database", htmlEncode(database)); if (isNotEmpty(type) && differentString(type, ALT_OR_PATCH)) errAbort("'%s' is not a valid type", type); char *table = NULL; if (! sameOk(type, ALT_OR_PATCH)) { struct sqlConnection *conn = hAllocConn(database); table = connGeneSuggestTable(conn); hFreeConn(&conn); if(table == NULL) errAbort("gene autosuggest is not supported for db '%s'", database); } popWarnHandler(); popAbortHandler(); return table; }
WString htmlEncode(const WString& text, WFlags<HtmlEncodingFlag> flags) { return WString::fromUTF8(htmlEncode(text.toUTF8(), flags)); }
TCHAR* SimpleHTMLEncoder::encodeText(TCHAR* originalText) { return htmlEncode(originalText); }
void doUserFiles(char *u, struct commit *commits) /* process one user's files-view (or all if u is NULL) */ { // http://hgwdev.cse.ucsc.edu/cvs-reports/branch/user/galt/index-by-file.html // if u is NULL // http://hgwdev.cse.ucsc.edu/cvs-reports/branch/file/index.html char userPath[1024]; if (u) safef(userPath, sizeof(userPath), "%s/%s/%s/%s/index-by-file.html", outDir, outPrefix, "user", u); else safef(userPath, sizeof(userPath), "%s/%s/%s/index.html", outDir, outPrefix, "file"); FILE *h = mustOpen(userPath, "w"); if (u) { fprintf(h, "<html>\n<head>\n<title>File Changes for %s</title>\n</head>\n</body>\n", u); fprintf(h, "<h1>File Changes for %s</h1>\n", u); fprintf(h, "switch to <A href=\"index.html\">commits view</A>, <A href=\"../index.html\">user index</A>"); } else { fprintf(h, "<html>\n<head>\n<title>All File Changes</title>\n</head>\n</body>\n"); fprintf(h, "<h1>All File Changes</h1>\n"); } fprintf(h, "<h3>%s to %s (%s to %s) %s</h3>\n", startTag, endTag, startDate, endDate, title); fprintf(h, "<ul>\n"); int totalLinesChanged = 0; int totalFileCount = 0; char *cDiff = NULL, *cHtml = NULL, *fDiff = NULL, *fHtml = NULL; char *relativePath = NULL; struct commit *c = NULL; struct files *f = NULL; struct comFile *comFiles = NULL, *cf = NULL; // pre-filter for u if u is not NULL for(c = commits; c; c = c->next) { if (!u || (u && sameString(c->author, u))) { for(f = c->files; f; f = f->next) { AllocVar(cf); cf->f = f; cf->commit = c; slAddHead(&comFiles, cf); } } } // sort by file path, and then by commitNumber // so that newest commit is on the bottom. slSort(&comFiles, slComFileCmp); char *lastPath = ""; char *closure = ""; for(cf = comFiles; cf; cf = cf->next) { c = cf->commit; f = cf->f; if (!sameString(f->path, lastPath)) { fprintf(h, "%s", closure); lastPath = f->path; fprintf(h, "<li>%s\n", f->path); closure = "</li>\n"; } char path[1024]; // context unified if (u) safef(path, sizeof(path), "%s/%s%s", "context", f->path, c->commitId); else safef(path, sizeof(path), "../user/%s/%s/%s%s", c->author, "context", f->path, c->commitId); relativePath = cloneString(path); safef(path, sizeof(path), "%s.html", relativePath); cHtml = cloneString(path); safef(path, sizeof(path), "%s.diff", relativePath); cDiff = cloneString(path); // full text (up to 10,000 lines) freeMem(relativePath); if (u) safef(path, sizeof(path), "%s/%s%s", "full", f->path, c->commitId); else safef(path, sizeof(path), "../user/%s/%s/%s%s", c->author, "context", f->path, c->commitId); relativePath = cloneString(path); safef(path, sizeof(path), "%s.html", relativePath); fHtml = cloneString(path); safef(path, sizeof(path), "%s.diff", relativePath); fDiff = cloneString(path); // make file view links fprintf(h, "<ul><li>"); fprintf(h, " lines changed %d, " "context: <A href=\"%s\">html</A>, <A href=\"%s\">text</A>, " "full: <A href=\"%s\">html</A>, <A href=\"%s\">text</A><br>\n" , f->linesChanged , cHtml, cDiff, fHtml, fDiff); //fprintf(h, " %s\n", c->commitId); //fprintf(h, " %s\n", c->date); char *cc = htmlEncode(c->comment); char *ccc = replaceChars(cc, "\n", "<br>\n"); fprintf(h, " %s\n", ccc); freeMem(cc); freeMem(ccc); fprintf(h, "</li></ul>\n"); freeMem(relativePath); freeMem(cDiff); freeMem(cHtml); freeMem(fDiff); freeMem(fHtml); totalLinesChanged += f->linesChanged; ++totalFileCount; fprintf(h, "\n"); } fprintf(h, "%s", closure); fprintf(h, "</ul>\n"); if (u) { fprintf(h, "switch to <A href=\"index.html\">commits view</A>, <A href=\"../index.html\">user index</A>"); } else { fprintf(h, "<ul>\n"); fprintf(h, "<li> lines changed: %d</li>\n", totalLinesChanged); fprintf(h, "<li> files changed: %d</li>\n", totalFileCount); fprintf(h, "</ul>\n"); } fprintf(h, "</body>\n</html>\n"); fclose(h); }
void doUserCommits(char *u, struct commit *commits, int *saveUlc, int *saveUfc) /* process one user, commit-view */ { char userPath[1024]; safef(userPath, sizeof(userPath), "%s/%s/%s/%s/index.html", outDir, outPrefix, "user", u); FILE *h = mustOpen(userPath, "w"); fprintf(h, "<html>\n<head>\n<title>Commits for %s</title>\n</head>\n</body>\n", u); fprintf(h, "<h1>Commits for %s</h1>\n", u); fprintf(h, "switch to <A href=\"index-by-file.html\">files view</A>, <A href=\"../index.html\">user index</A>\n"); fprintf(h, "<h3>%s to %s (%s to %s) %s</h3>\n", startTag, endTag, startDate, endDate, title); fprintf(h, "<ul>\n"); int userLinesChanged = 0; int userFileCount = 0; char *cDiff = NULL, *cHtml = NULL, *fDiff = NULL, *fHtml = NULL; char *relativePath = NULL; char *commonPath = NULL; struct commit *c = NULL; struct files *f = NULL; for(c = commits; c; c = c->next) { if (sameString(c->author, u)) { //fprintf(h, "%s\n", c->commitId); //fprintf(h, "%s\n", c->date); char *cc = htmlEncode(c->comment); char *ccc = replaceChars(cc, "\n", "<br>\n"); fprintf(h, "<li>%s\n", ccc); freeMem(cc); freeMem(ccc); makeDiffAndSplit(c, u, FALSE); makeDiffAndSplit(c, u, TRUE); for(f = c->files; f; f = f->next) { char path[1024]; // context unified safef(path, sizeof(path), "%s/%s%s", "context", f->path, c->commitId); relativePath = cloneString(path); safef(path, sizeof(path), "%s/%s/%s/%s/%s", outDir, outPrefix, "user", u, relativePath); commonPath = cloneString(path); safef(path, sizeof(path), "%s.html", commonPath); cHtml = cloneString(path); safef(path, sizeof(path), "%s.diff", commonPath); cDiff = cloneString(path); // make context html page f->linesChanged = makeHtml(cDiff, cHtml, f->path, c->commitId); userLinesChanged += f->linesChanged; ++userFileCount; freeMem(cDiff); freeMem(cHtml); safef(path, sizeof(path), "%s.html", relativePath); cHtml = cloneString(path); safef(path, sizeof(path), "%s.diff", relativePath); cDiff = cloneString(path); // full text (up to 10,000 lines) freeMem(relativePath); safef(path, sizeof(path), "%s/%s%s", "full", f->path, c->commitId); relativePath = cloneString(path); safef(path, sizeof(path), "%s/%s/%s/%s/%s", outDir, outPrefix, "user", u, relativePath); freeMem(commonPath); commonPath = cloneString(path); safef(path, sizeof(path), "%s.html", commonPath); fHtml = cloneString(path); safef(path, sizeof(path), "%s.diff", commonPath); fDiff = cloneString(path); //git show --unified=10000 11a20b6cd113d75d84549eb642b7f2ac7a2594fe src/utils/qa/weeklybld/buildEnv.csh // make full html page makeHtml(fDiff, fHtml, f->path, c->commitId); freeMem(fDiff); freeMem(fHtml); safef(path, sizeof(path), "%s.html", relativePath); fHtml = cloneString(path); safef(path, sizeof(path), "%s.diff", relativePath); fDiff = cloneString(path); // make file diff links fprintf(h, "<ul><li> %s - lines changed %d, " "context: <A href=\"%s\">html</A>, <A href=\"%s\">text</A>, " "full: <A href=\"%s\">html</A>, <A href=\"%s\">text</A></li></ul>\n" , f->path, f->linesChanged , cHtml, cDiff, fHtml, fDiff); freeMem(relativePath); freeMem(commonPath); freeMem(cDiff); freeMem(cHtml); freeMem(fDiff); freeMem(fHtml); } fprintf(h, "</li>\n"); } } fprintf(h, "</ul>\n"); fprintf(h, "switch to <A href=\"index-by-file.html\">files view</A>, <A href=\"../index.html\">user index</A>\n"); fprintf(h, "</body>\n</html>\n"); fclose(h); *saveUlc = userLinesChanged; *saveUfc = userFileCount; }
int makeHtml(char *diffPath, char *htmlPath, char *path, char *commitId) /* Make a color-coded html diff * Return the number of lines changed */ { int linesChanged = 0; FILE *h = mustOpen(htmlPath, "w"); struct lineFile *lf = lineFileOpen(diffPath, TRUE); int lineSize; char *line; char *xline = NULL; char fmtString[256]; boolean inBody = FALSE; boolean inBlock = TRUE; int blockP = 0, blockN = 0; fprintf(h, "<html>\n<head>\n<title>%s %s</title>\n</head>\n</body>\n<pre>\n", path, commitId); boolean hasMore = TRUE; while (hasMore) { boolean checkEob = FALSE; hasMore = lineFileNext(lf, &line, &lineSize); if (hasMore) { char *color = NULL; xline = htmlEncode(line); if (line[0] == '-') { color = "#FF9999"; /* deleted text light red */ if (inBody) { inBlock = TRUE; ++blockN; } } else if (line[0] == '+') { color = "#99FF99"; /* added text light green */ if (inBody) { inBlock = TRUE; ++blockP; } } else { if (line[0] == '@') color = "#FFFF99"; /* diff control text light yellow (red+green) */ checkEob = TRUE; } if (color) safef(fmtString, sizeof(fmtString), "<span style=\"background-color:%s\">%%s</span>\n", color); else safef(fmtString, sizeof(fmtString), "%%s\n"); fprintf(h, fmtString, xline); if (line[0] == '@') inBody = TRUE; freeMem(xline); } else { checkEob = TRUE; } if (checkEob && inBlock) { inBlock = FALSE; if (blockP >= blockN) linesChanged += blockP; else linesChanged += blockN; blockP = 0; blockN = 0; } } lineFileClose(&lf); fprintf(h, "</pre>\n</body>\n</html>\n"); fclose(h); return linesChanged; }
static struct hgPositions *genomePosCJ(struct jsonWrite *jw, char *db, char *spec, char **retChromName, int *retWinStart, int *retWinEnd, struct cart *cart) /* Search for positions in genome that match user query. * Return an hgp unless there is a problem. hgp->singlePos will be set if a single * position matched. * Otherwise display list of positions, put # of positions in retWinStart, * and return NULL. */ { char *hgAppName = "cartJson"; struct hgPositions *hgp = NULL; char *chrom = NULL; int start = BIGNUM; int end = 0; char *terms[16]; int termCount = chopByChar(cloneString(spec), ';', terms, ArraySize(terms)); boolean multiTerm = (termCount > 1); int i = 0; for (i = 0; i < termCount; i++) { trimSpaces(terms[i]); if (isEmpty(terms[i])) continue; hgp = hgPositionsFind(db, terms[i], "", hgAppName, cart, multiTerm); if (hgp == NULL || hgp->posCount == 0) { jsonWriteStringf(jw, "error", "Sorry, couldn't locate %s in genome database", htmlEncode(terms[i])); if (multiTerm) jsonWriteStringf(jw, "error", "%s not uniquely determined -- can't do multi-position search.", terms[i]); *retWinStart = 0; return NULL; } if (hgp->singlePos != NULL) { if (chrom != NULL && !sameString(chrom, hgp->singlePos->chrom)) { jsonWriteStringf(jw, "error", "Sites occur on different chromosomes: %s, %s.", chrom, hgp->singlePos->chrom); return NULL; } chrom = hgp->singlePos->chrom; if (hgp->singlePos->chromStart < start) start = hgp->singlePos->chromStart; if (hgp->singlePos->chromEnd > end) end = hgp->singlePos->chromEnd; } else { hgPositionsJson(jw, db, hgp, cart); if (multiTerm && hgp->posCount != 1) { jsonWriteStringf(jw, "error", "%s not uniquely determined (%d locations) -- " "can't do multi-position search.", terms[i], hgp->posCount); return NULL; } break; } } if (hgp != NULL) { *retChromName = chrom; *retWinStart = start; *retWinEnd = end; } return hgp; }
QString MainWindow::formatChange(int index,QString c){ c="\n"+c+"\n"; QVector<QString> lines = c.split("\n").toVector(); QString formatted = ""; QString tmp; QString tmp2; QString tmp3; QString afterName = ""; for(int i=1;i<lines.size()-1;i++){ tmp = lines.at(i); tmp2 = lines.at(i+1); tmp3 = lines.at(i-1); if(tmp.startsWith("---") && tmp3.startsWith("index")){ if(tmp.startsWith("--- a/") && tmp2.startsWith("+++ b/")){ bool a = false; if(tmp.indexOf("\"")>0){ a = true; tmp.replace("\"",""); } tmp = tmp.mid(6); tmp = (a?"\"":"") + path + "/" + htmlEncode(tmp) + (a?"\"":""); tmp="<hr><p style='line-height:16px;color:#921AFF'>修改文件 : "+tmp+"</p>\n"; formatted.append(tmp); }else if(tmp == "--- /dev/null"){ bool a = false; if(tmp2.indexOf("\"")>0){ a = true; tmp2.replace("\"",""); } tmp2=tmp2.mid(6); tmp2 = (a?"\"":"") + path + "/" + htmlEncode(tmp2) + (a?"\"":""); tmp="<hr><p style='line-height:16px;color:#921AFF'>新建文件 : "+tmp2+"</p>\n"; formatted.append(tmp); }else if(tmp2 == "+++ /dev/null"){ bool a = false; if(tmp.indexOf("\"")>0){ a = true; tmp.replace("\"",""); } tmp = tmp.mid(6); tmp = (a?"\"":"") + path + "/" + htmlEncode(tmp) + (a?"\"":""); tmp="<hr><p style='line-height:16px;color:#921AFF'>删除文件 : "+tmp+"</p>\n"; formatted.append(tmp); }else{ tmp="<hr><p style='line-height:16px;color:#FF8000'>"+htmlEncode(tmp)+"</p>\n"; formatted.append(tmp); tmp2="<hr><p style='line-height:16px;color:#2828FF'>"+htmlEncode(tmp2)+"</p>\n"; formatted.append(tmp); } tmp="<p style='line-height:16px'><font style='color:#2828FF'>"+mList.at(index).at(0)+"</font> 对比于 <font style='color:#FF8000'>"+mList.at(index+1).at(0)+"</font> 的差异</p>\n"; formatted.append(tmp); if(afterName!=""){ formatted.append(afterName); } afterName=""; }else if(tmp.startsWith("new file mode ")){ tmp = tmp.mid(14); afterName="<p style='line-height:16px'>新建的文件权限 : <font style='color:#00EC00'>"+tmp+"</font></p>\n"; }else if(tmp.startsWith("old mode ")){ tmp = tmp.mid(9); tmp2 = tmp2.mid(9); afterName="<p style='line-height:16px'>新权限 : <font style='color:#00EC00'>"+tmp2+"</font> 旧权限 : <font style='color:#FF9797'>"+tmp+"</font></p>\n"; }else if(tmp.startsWith("deleted file mode ")){ tmp = tmp.mid(18); afterName="<p style='line-height:16px'>删除的文件权限 : <font style='color:#FF9797'>"+tmp+"</font></p>\n"; }else if(tmp.startsWith("+++")){ continue; }else if(tmp.startsWith("+")){ tmp="<p style='line-height:16px;color:#00BB00'>"+htmlEncode(tmp)+"</p>\n"; formatted.append(tmp); }else if(tmp.startsWith("-")){ tmp="<p style='line-height:16px;color:#FF2D2D'>"+htmlEncode(tmp)+"</p>\n"; formatted.append(tmp); }else if(tmp.startsWith("@@")){ if(tmp.endsWith("@@")){ tmp="<p style='line-height:16px;color:#4A4AFF'>"+htmlEncode(tmp)+"</p>"; formatted.append(tmp+"\n"); }else{ tmp2 = tmp.left(tmp.lastIndexOf("@@")+2); tmp2="<p style='line-height:16px;color:#4A4AFF'>"+htmlEncode(tmp2)+"</p>"; formatted.append(tmp2+"\n"); tmp2 = tmp.mid(tmp.lastIndexOf("@@")+2); tmp2="<p style='line-height:16px;color:#4A4AFF'>"+htmlEncode(tmp2)+"</p>"; formatted.append(tmp2+"\n"); } }else if(tmp.startsWith(" ")){ tmp="<p style='line-height:16px;color:#000000'>"+htmlEncode(tmp)+"</p>"; formatted.append(tmp+"\n"); } } return "<body style='font-family:Droid Sans Mono;'>"+formatted+"</body>"; }
struct linkedFeatures *bamToLf(const bam1_t *bam, void *data) /* Translate a BAM record into a linkedFeatures item. */ { struct bamTrackData *btd = (struct bamTrackData *)data; const bam1_core_t *core = &bam->core; struct linkedFeatures *lf; struct psl *original = pslFromBam(bam); if (original == NULL) return NULL; AllocVar(lf); lf->score = core->qual; lf->name = cloneString(bam1_qname(bam)); lf->orientation = (core->flag & BAM_FREVERSE) ? -1 : 1; int length; lf->components = sfFromNumericCigar(bam, &length); lf->start = lf->tallStart = core->pos; lf->end = lf->tallEnd = core->pos + length; lf->extra = bamGetQuerySequence(bam, FALSE); // cds.c reverses if psl != NULL lf->original = original; int clippedQLen; bamGetSoftClipping(bam, NULL, NULL, &clippedQLen); if (sameString(btd->colorMode, BAM_COLOR_MODE_GRAY) && sameString(btd->grayMode, BAM_GRAY_MODE_ALI_QUAL)) { lf->grayIx = shadeTransform(btd->aliQualShadeMin, btd->aliQualShadeMax, core->qual); } else if (sameString(btd->colorMode, BAM_COLOR_MODE_GRAY) && sameString(btd->grayMode, BAM_GRAY_MODE_BASE_QUAL)) { UBYTE *quals = bamGetQueryQuals(bam, TRUE); lf->components = expandSfQuals(lf->components, quals, lf->orientation, clippedQLen, btd->baseQualShadeMin, btd->baseQualShadeMax); lf->grayIx = maxShade - 3; } else if (sameString(btd->colorMode, BAM_COLOR_MODE_TAG) && isNotEmpty(btd->userTag)) { char buf[16]; char *rgb = bamGetTagString(bam, btd->userTag, buf, sizeof(buf)); if (rgb != NULL) { // We don't have access to hvg at loadtime, so can't allocate color here. // Instead, pack RGB values into lf->filterColor which fortunately is an int. unsigned char r, g, b; if (parseRgb(rgb, &r, &g, &b)) lf->filterColor = MAKECOLOR_32(r,g,b); else { static boolean already = FALSE; if (! already) { warn("%s: At least one BAM tag value for %s (%s) is not in the expected " "RGB format: N,N,N where each N is from 0 to 255.", btd->tg->tdb->shortLabel, btd->userTag, htmlEncode(rgb)); already = TRUE; btd->userTag = NULL; } } } else lf->grayIx = maxShade; } else lf->grayIx = maxShade; return lf; }
String SimpleHTMLEncoder::encodeText(const String& originalText) { return htmlEncode(originalText); }
int documentLink(struct hash *ra, char *term, char *docTerm,char *dir, char *title,boolean genericDoc) // Compare controlled vocab based on term value { boolean docsPrinted = 0; char *s; if (title == NULL) title = docTerm; //can use hg.conf to direct links back to main UCSC server if a mirror doesn't //want all the PDFs char *baseUrl = cfgOptionDefault("hgEncodeVocabDocBaseUrl", ""); // add links to protocol doc if it exists char docUrl[PATH_LEN]; char docFile[PATH_LEN]; // parse setting s = hashFindVal(ra,docTerm); if (s != NULL) { if (sameWord(s,"missing")) printf(" <em>missing</em>\n"); else { char *docSetting = cloneString(s); char *settings=docSetting; int count=0; while ((s = nextWord(&settings)) != NULL) { char *docTitle = NULL; char *fileName = NULL; if (strchr(s,':')) // lab Specific setting { docTitle = strSwapChar(s,':',0); fileName = docTitle + strlen(docTitle) + 1; } else { docTitle = title; fileName = s; } if (count>0) printf("<BR>"); count++; docTitle = htmlEncode(strSwapChar(docTitle,'_',' ')); if (sameWord(fileName,"missing")) printf("%s<em>missing</em>\n",docTitle); else { safef(docUrl, sizeof(docUrl), "%s%s%s", baseUrl, dir, fileName); safef(docFile, sizeof(docFile), "%s%s", hDocumentRoot(), docUrl); printf(" <A TARGET=_BLANK HREF=%s>%s</A>\n", docUrl,docTitle); docsPrinted++; } freeMem(docTitle); } freeMem(docSetting); } } else if (genericDoc) { // generate a standard name safef(docUrl, sizeof(docUrl), "%s%s%s_protocol.pdf", baseUrl, dir, term); safef(docFile, sizeof(docFile), "%s%s", hDocumentRoot(), docUrl); if (fileExists(docFile)) { printf(" <A TARGET=_BLANK HREF=%s>%s</A>\n", docUrl,title); docsPrinted++; } } return docsPrinted; }
void doGvf(struct trackDb *tdb, char *item) /* Show details for variants represented as GVF, stored in a bed8Attrs table */ { struct sqlConnection *conn = hAllocConn(database); int start = cartInt(cart, "o"); char query[1024]; sqlSafef(query, sizeof(query), "select * from %s where name = '%s' and chrom = '%s' and chromStart = %d", tdb->table, item, seqName, start); struct sqlResult *sr = sqlGetResult(conn, query); char **row; if ((row = sqlNextRow(sr)) == NULL) errAbort("doGvfDetails: can't find item '%s' in %s at %s:%d", item, database, seqName, start); int rowOffset = hOffsetPastBin(database, seqName, tdb->table); struct bed8Attrs *ba = bed8AttrsLoad(row+rowOffset); bedPrintPos((struct bed *)ba, 3, tdb); int i = 0; // Note: this loop modifies ba->attrVals[i], assuming we won't use them again: for (i = 0; i < ba->attrCount; i++) { // The ID is the bed8Attrs name and has already been displayed: if (sameString(ba->attrTags[i], "ID")) continue; cgiDecode(ba->attrVals[i], ba->attrVals[i], strlen(ba->attrVals[i])); char *tag = ba->attrTags[i]; // User-defined keywords used in dbVar's GVF: if (sameString(tag, "var_type")) // This one isn't anymore, but I add it back (hg18.txt). tag = "Variant type"; else if (sameString(tag, "clinical_int")) tag = "Clinical interpretation"; else if (sameString(tag, "var_origin")) tag = "Variant origin"; else if (islower(tag[0])) // Uppercase for nice display, assuming user doesn't care which keywords are // user-defined vs. GVF standard: tag[0] = toupper(tag[0]); // GVF standard Start_range and End_range tags (1-based coords): if (sameString(tag, "Start_range") || sameString(tag, "End_range")) { char *copy = cloneString(ba->attrVals[i]); char *words[3]; int wordCount = chopCommas(copy, words); if (wordCount == 2 && (sameString(".", words[0]) || isInteger(words[0])) && (sameString(".", words[1]) || isInteger(words[1]))) { boolean isStartRange = sameString(tag, "Start_range"); char *rangeStart = words[0], *rangeEnd = words[1]; if (sameString(".", rangeStart)) rangeStart = "unknown"; if (sameString(".", rangeEnd)) rangeEnd = "unknown"; if (isStartRange) printf("<B>Start range</B>: outer start %s, inner start %s<BR>\n", rangeStart, rangeEnd); else printf("<B>End range</B>: inner end %s, outer end %s<BR>\n", rangeStart, rangeEnd); } else // not formatted as expected, just print as-is: printf("<B>%s</B>: %s<BR>\n", tag, htmlEncode(ba->attrVals[i])); } // Parent sounds like mom or dad (as in var_origin)... tweak it too: else if (sameString(tag, "Parent")) { printf("<B>Variant region:</B> " "<A HREF=\"http://www.ncbi.nlm.nih.gov/dbvar/variants/%s/\" " "TARGET=_BLANK>%s</A><BR>\n", ba->attrVals[i], htmlEncode(ba->attrVals[i])); } else if (sameString(tag, "Name")) { char *url = trackDbSetting(tdb, "url"); // Show the Name only if it hasn't already appeared in the URL: if (url == NULL || !stringIn("$$", url)) printf("<B>%s</B>: %s<BR>\n", tag, htmlEncode(ba->attrVals[i])); } else if (sameWord(tag, "Phenotype_id") && startsWith("HPO:HP:", ba->attrVals[i])) { subChar(tag, '_', ' '); printf("<B>%s</B>: <A HREF=\"http://www.berkeleybop.org/obo/%s\" " "TARGET=_BLANK>%s</A><BR>\n", tag, ba->attrVals[i]+strlen("HPO:"), htmlEncode(ba->attrVals[i])); } else { subChar(tag, '_', ' '); printf("<B>%s</B>: %s<BR>\n", tag, htmlEncode(ba->attrVals[i])); } } sqlFreeResult(&sr); hFreeConn(&conn); /* printTrackHtml is done in genericClickHandlerPlus. */ }
static void explainIdentifiers(char *db, struct sqlConnection *conn, char *idField) /* Tell the user what field(s) they may paste/upload values for, and give * some examples. */ { char *xrefTable = NULL, *xrefIdField = NULL, *aliasField = NULL; getXrefInfo(conn, &xrefTable, &xrefIdField, &aliasField); hPrintf("The items must be values of the <B>%s</B> field of the currently " "selected table, <B>%s</B>", idField, curTable); if (aliasField != NULL) { if (sameString(curTable, xrefTable)) { if (!sameString(idField, aliasField)) hPrintf(", or the <B>%s</B> field.\n", aliasField); else hPrintf(".\n"); } else hPrintf(", or the <B>%s</B> field of the alias table <B>%s</B>.\n", aliasField, xrefTable); } else hPrintf(".\n"); hPrintf("(The \"describe table schema\" button shows more information about " "the table fields.)\n"); // on a browserbox, db is on the UCSC server, so cannot select into db, even if temporary if (!isCustomTrack(curTable) && !hIsBrowserbox() && sqlCanCreateTemp(conn)) { struct slName *exampleList = NULL, *ex; hPrintf("Some example values:<BR>\n"); exampleList = getExamples(db, conn, curTable, idField, aliasField != NULL ? 3 : 5); for (ex = exampleList; ex != NULL; ex = ex->next) { char *tmp = htmlEncode(ex->name); hPrintf("<TT>%s</TT><BR>\n", tmp); freeMem(tmp); } if (aliasField != NULL) { char tmpTable[512]; char query[2048]; // do not use any db. prefix on curTable for name char *plainCurTable = strrchr(curTable, '.'); if (plainCurTable) plainCurTable++; else plainCurTable = curTable; safef(tmpTable, sizeof(tmpTable), "hgTemp.tmp%s%s", plainCurTable, xrefTable); if (differentString(xrefTable, curTable)) sqlSafef(query, sizeof(query), "create temporary table %s select %s.%s as %s from %s,%s " "where %s.%s = %s.%s and %s.%s != %s.%s limit 100000", tmpTable, xrefTable, aliasField, aliasField, xrefTable, curTable, xrefTable, xrefIdField, curTable, idField, xrefTable, xrefIdField, xrefTable, aliasField); else sqlSafef(query, sizeof(query), "create temporary table %s select %s from %s " "where %s != %s limit 100000", tmpTable, aliasField, xrefTable, aliasField, xrefIdField); sqlUpdate(conn, query); exampleList = getExamples(db, conn, tmpTable, aliasField, 3); for (ex = exampleList; ex != NULL; ex = ex->next) hPrintf("<TT>%s</TT><BR>\n", ex->name); } hPrintf("\n"); } }