//'); } function countNewLines(str) { var n = 0; var lastIndex = 0; var matchIndex = str.indexOf('\n', lastIndex); while (matchIndex != -1) { n += 1; lastIndex = matchIndex + 1; matchIndex = str.indexOf('\n', lastIndex); } return n; } function findPointers() { var oldPointerInfo = pointerInfo; pointerInfo = {}; var usedColors = {}; displayedHtml = ''; var numPointers = 0; var pointerRegexText = $('#pointerRegex').val(); if (pointerRegexText == '') { return; } var isCaseInsensitive = $('#pointerRegexCaseInsensitive').attr('checked'); var pointerRE = new RegExp(pointerRegexText, isCaseInsensitive ? "i" : ""); var lastIndex = 0; var match = pointerRE.exec(origText); var lineNumber = 1; while (match) { var matchIndex = match.index + lastIndex; // Copy up until the match. displayedHtml += processSource(origText.substring(lastIndex, matchIndex)); var pointerVal = match[0]; if (isCaseInsensitive) { pointerVal = pointerVal.toLowerCase(); } lineNumber += countNewLines(origText.substring(lastIndex, matchIndex + pointerVal.length)); lastIndex = matchIndex + pointerVal.length; //alert(pointerVal + ': ' + matchIndex); // See if we have it already. if (!(pointerVal in pointerInfo)) { pointerInfo[pointerVal] = {pointer: pointerVal, label: pointerVal, color: '', c: 'pointer' + numPointers, count: 0, firstLine: lineNumber, lastLine: lineNumber}; // Keep old data if we had this value before. if (pointerVal in oldPointerInfo) { pointerInfo[pointerVal].label = oldPointerInfo[pointerVal].label; pointerInfo[pointerVal].color = oldPointerInfo[pointerVal].color; usedColors[pointerInfo[pointerVal].color] = 1; } ++numPointers; } else { pointerInfo[pointerVal].lastLine = lineNumber; } pointerInfo[pointerVal].count++; var info = pointerInfo[pointerVal]; displayedHtml += '' + info.label + ''; // Keep trucking along //alert('about to match: ' + origText.substr(lastIndex)); match = pointerRE.exec(origText.substr(lastIndex)); } displayedHtml += processSource(origText.substr(lastIndex)); // Fix up the colors. var panicColorIndex = 1; for (var i in pointerInfo) { if (pointerInfo[i].color == '') { // Pick an unused color. var foundColor = false; for (var j in colors) { if (!(colors[j] in usedColors)) { pointerInfo[i].color = colors[j]; usedColors[colors[j]] = 1; foundColor = true; break; } } if (!foundColor) { // Just pick something, sheesh. pointerInfo[i].color = 'rgb(' + panicColorIndex + ', ' + panicColorIndex + ', ' + panicColorIndex + ')'; ++panicColorIndex; } } } } function updateDisplayedPointers() { for (var i in pointerInfo) { var info = pointerInfo[i]; if (typeof(info.label) != 'string') { alert(typeof(info.label)); } $('.' + info.c).text(info.label); $('.' + info.c).css('color', info.color); $('.' + info.c + 'color').css('color', info.color); } } function showPointerInfo() { //$('#pointerKey').html(); var newHtml = ['