// ==UserScript==
// @name                Usenet Formatting
// @namespace   http://eschew.org/
// @description         Converts _underlined_text_ and *bold text* to real HTML formatting
// @include             http://groups.google.com/group/*
// ==/UserScript==

// By Ben Karel

(function() {
function makeUnderline(str) { return '<span style="text-decoration: underline;">'+str+'</span>'; }
function makeBold(str) { return '<span style="font-weight: bold;">'+str+'</span>'; }

var xapply = function(xpath, func) {
         var x = document.evaluate(xpath, document, null, 6, null);
         for(var i = 0; i < x.snapshotLength; i++)
                func(x.snapshotItem(i));
};

function format(ele) {
  if(/script/i.test(ele.tagName)) return;

  var mod = ele.innerHTML;
  mod = mod.replace(/ _([^ ][a-z0-9! ]+)_/g, function(s,m) { return ' ' + makeUnderline( m.replace(/_/g, " ") ); });
  mod = mod.replace(/ \*([^ ][a-z0-9! ]+)\*/g, function(s,m) { return ' ' + makeBold(m); });
  ele.innerHTML = mod;
}

window.addEventListener('load', function() {
  xapply("//*[text()[contains(.,' _') or contains(.,' *')]]", format);
}, true);

})();
