function preg_quote (str) { return (str+'').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!<>\|\:\/])/g, "\\$1"); } // Returns true if character c is a letter or digit. var reLetterOrDigit = /[a-zA-Z\d]+/; function hasLetterOrDigit (s) { if (reLetterOrDigit.test(s)) { return true; } return false; } var nr_lookup = Array(); var nr_ignore = "";var nr_max_links_page = 20; var nr_min_link_space = 5; var nr_a_style = " style=\' color: green;\'"; var nr_autolink_dic = Array(); var nr_len=0; function nr_highlight(nr_source, nr_ignore, nr_search, nr_replace, nr_case_sensitive, nr_num_linkings){ //alert("nr_highlight called for: " + nr_search + " | to | " + nr_replace); var nr_replaces = 0; var nr_replacement = ""; var position = nr_min_link_space; var rpos = -1; var nr_rei = "i"; if (nr_case_sensitive) { nr_rei = ""; } function nr_handle(nr_a, nr_b, nr_c) { if (nr_replaces >= nr_num_linkings) { return nr_a; } position++; if (nr_a.charAt(0) == '<' && nr_a.charAt(nr_a.length - 1) == '>') { if (nr_a.indexOf("nr_autolink")) { position = 0; } return nr_a; } if (nr_case_sensitive) { rpos = nr_a.indexOf(nr_search); } else { rpos = nr_a.toLowerCase().indexOf(nr_search.toLowerCase()); } if (rpos >= 0) { part1 = nr_a.substring(0, rpos); //part1 shouldn't have any character or digit part2 = nr_a.substr(rpos, nr_search.length); //part2 should be equal to nr_search.toLowerCase() part3 = nr_a.substr(rpos + nr_search.length); //part3 shouldn't have any character or digit if (hasLetterOrDigit(part1.toString()) || hasLetterOrDigit(part3.toString())) { return nr_a; } cmp1 = part2; cmp2 = nr_search; if (!nr_case_sensitive) { cmp1 = cmp1.toLowerCase(); cmp2 = cmp2.toLowerCase(); } if(cmp1 == cmp2) { if (position > nr_min_link_space) { nr_replaces++; nr_replacement = nr_a.replace(part2, nr_replace.replace(new RegExp(preg_quote(">" + part2 + "<"), nr_rei), ">" + part2 + "<")); return nr_replacement; } } } return nr_a; } var nr_regex_src = nr_ignore + '()|()|()|(' + preg_quote(nr_search) +'[\\W\\D\\S]{0,2})(?=[\\s<]+)|([\\w\\d]+[\\W\\D\\S]{0,2})(?=[\\s<]+)'; var nr_regex = new RegExp(nr_regex_src, nr_rei + 'g'); return {'nr_word':nr_source.replace(nr_regex, nr_handle), 'linkings':nr_replaces}; } function nr_get_data() { var nr_global_cnt = 0; var nr_tag = ""; var nr_tag_iteration = 0; var nr_tag_max_replace = 0; var nr_tag_replaces = Array(); var nr_this_pending_replacements = 0; for (var i in nr_autolink_dic) { nr_this_pending_replacements = nr_autolink_dic[i]['num_linkings']; for (t1 in nr_lookup) { if (!nr_tag_replaces[t1]) { nr_tag_replaces[t1] = Array(); nr_tag_replaces[t1][0] = 1; } nr_tag = nr_lookup[t1][0]; nr_tag_iteration = nr_lookup[t1][1]; nr_tag_replace = nr_lookup[t1][2]; var nr_tags = jQuery(nr_tag).get(); var nr_tag_i = 0; for (t2 in nr_tags) { if (nr_tag_replaces[t1][t2]) { if (nr_tag_replaces[t1][t2] > nr_tag_replace) { continue; } } if (!(nr_this_pending_replacements >= 1)) { break; } var nr_word = nr_tags[t2].innerHTML; nr_highlight_res = nr_highlight(nr_word, nr_ignore, i, ""+i+"", nr_autolink_dic[i]['case_sensitive'], nr_this_pending_replacements); nr_this_pending_replacements -= nr_highlight_res['linkings']; if (nr_highlight_res['linkings']>=1) { //alert("Autolinked: " + i); nr_tags[t2].innerHTML = nr_highlight_res['nr_word']; if (nr_tag_replaces[t1][t2]) { nr_tag_replaces[t1][t2] += nr_highlight_res['linkings']; } else { nr_tag_replaces[t1][t2] = nr_highlight_res['linkings']; } } nr_tag_i++; if ((nr_tag_iteration > 0) && (nr_tag_i >= nr_tag_iteration)) { break; } } } if (nr_global_cnt >= nr_max_links_page) { break; } nr_global_cnt += 1; } } nr_get_data();