K-Meleon

KMeleonWiki > Resources > MacroLibrary > MacroLibrary2 > Highlight

Submitted by: Rayven



Notes:

Created by hugo_heden. Works on html files, but doesn't work on txt files.


In Macros:

#_
# A global variable for storing the words
# searched for, as a string with
# non-alnum separated words:
$_highlight_strings = "";



#_
highlight{
menu = "Highlight.."
$old_clip = getclipboard();
# get current selection:
setclipboard("");
id(ID_EDIT_COPY);
$q = getclipboard();
$q = gsub( "\n", " ", $q );
$q = gsub( " ", " ", $q );
# Prompt for searched words (with
# current selection as default):
$_highlight_strings = prompt("Highlight words", "Highlight words:", $q);
# Call the highlighter macro (which will
# use the strings stored in $_highlight_strings):
macros(_highlight__);
setclipboard($old_clip);
$_highlight_strings = "";
}
#_



#
_highlight__ {
$javascript_enabled = getpref(BOOL, "javascript.enabled") ;
setpref(BOOL, "javascript.enabled", true) ;
#_ script starts here, no line breaks in it!___
   open("javascript: var styles = new Array( 'background-color:#ffff66;font-weight:bolder;color:black' , 'background-color:#66ffff;font-weight:bolder;color:black' , 'background-color:#ff66ff;font-weight:bolder;color:black' , 'background-color:#9999ff;font-weight:bolder;color:black' , 'background-color:#ff9999;font-weight:bolder;color:black' , 'background-color:#ff99ff;font-weight:bolder;color:black' ); var endTag = '</span>'; var cssStartTags = new Array(); for(var j=0; j<styles.length; j){ spanTag = '<span style='+stylesj?+' class=Highlighted>'; cssStartTags.push(spanTag); } function removeEmpties(stringarr){ var ret = new Array(); var j; for (j=0; j<stringarr.length; j) if (stringarrj?.length != 0) ret.push(stringarrj?); return ret; } function insertBetweenAll(arr, element) { var ret = new Array(); var j; for (j=0; j< arr.length; j) { ret.push(arrj?); ret.push(element); } ret.pop(); return ret; } function indexOfByValue(arr, str){ var check = /A-ZÅÄÖa-zåäö0-9_-?/i; if (check.test(str)) return -1; var j; var regexp = new RegExp?('^'+str+'$', 'i'); for(j=0; j<arr.length; j){ if (regexp.test(arrj?.valueOf())) return j; } return -1; } function createRE(arrWordsToHighlight){ var tmp = insertBetweenAll(arrWordsToHighlight, '|'); var wordToHighlightRegExpStr = tmp.join(); var regstr = '(?:<!(?:.*?)>)|(?:<(script|textarea|style|head|option|xmp)(?:\\s*)(?:>|>?*>)(?:<?)*<\\/\\1(\\s?)*>)|(?:<(?:(?:\\%22(?:\\%22?*?)\\%22)|>?)*>)|' + wordToHighlightRegExpStr ; return new RegExp?(regstr, 'ig'); } function getSelectedInFrame(aFrame){ var str = new String(aFrame.getSelection()); for (var j=0; j<aFrame.frames.length; j) str += ' ' + aFrame.framesj?.getSelection(); return str; } var newHtml = new Array(100); var lastCut = 0; var re, html, cssStartTags, endTag, wordsArr; var _highlight_count = 0; function userStopIt(event){ if (event.which != 19 && event.which != 27) return; stopIt(); } function stopIt(){ window.status = 'Finishing...'; if (interval != null) { clearInterval(interval); interval = null } newHtml.push(html.substring(lastCut)); finishMarkUp(newHtml.join()); } function loopChunk(){ var result; for (var j =0; j<2000; j){ if (!(result=re.exec(html))){ stopIt(); return; } var foundOn = result.index; var wordNum = indexOfByValue(wordsArr, result0?); newHtml.push(html.substring(lastCut, foundOn)); if ( wordNum != -1 ) { newHtml.push(cssStartTags[wordNum % cssStartTags.length]); _highlight_count; } newHtml.push(result0?); if ( wordNum != -1 ) newHtml.push(endTag); lastCut = re.lastIndex; } window.status = Math.round(foundOn*100/html.length)+'% ... Press Escape to interrupt.'; } function insertMarkups(re, html, cssStartTags, endTag, wordsArr){ re = re; html=html; cssStartTags = cssStartTags; endTag = endTag; wordsArr = wordsArr; window.status = 'Scanning ...'; interval = setInterval('loopChunk()', 1); } var _element = null, _wordArr = null, _wordsRE = null; var _currentSubFrame = -1 ; function getProperDocElement(aFrame){ if (aFrame.document.body) return aFrame.document.body; return aFrame.document.documentElement; } function finishMarkUp(newhtml){ _element.innerHTML = newhtml; _element = null; if (window.frames){ _currentSubFrame; if (_currentSubFrame < window.frames.length){ newHtml = new Array(100); __lastCut = 0; _element = getProperDocElement(window.frames_currentSubFrame?); markUpInElement(); return; } } window.status = 'Done. Highlighted words: '+_wordArr.join(',') + '. Found total: '+ _highlight_count; _highlight_count = 0; document.onkeyup = null; } function markUpInElement(){ var html = _element.innerHTML; insertMarkups(_wordsRE, html, cssStartTags, endTag, _wordArr); } function highlight(){ var wordArr = '".$_highlight_strings."'; wordArr = removeEmpties(wordArr.split(/A-ZÅÄÖa-zåäö0-9_-?/gi)) ; if (wordArr.length == 0) return; var element; document.onkeyup = userStopIt; var wordsRE = createRE(wordArr); if (document.body) element = document.body; else element = document.documentElement; _element = element; _wordArr = wordArr; _wordsRE = wordsRE; markUpInElement(); }  highlight();");
#_ script ends here ___
setpref(BOOL, "javascript.enabled", $javascript_enabled);
}
#


In Menus:

macros(highlight)


User Comments:

K-Meleon

(c) 2000-2010 kmeleonbrowser.org. All rights reserved.
design by splif.