function process(match, info)
  {
    var code = match.code,
        results = [],
        regexList = scriptBrush.regexList,
        offset = match.index + match.left.length,
        htmlScript = scriptBrush.htmlScript,
        matches
        ;

    function add(matches)
    {
      results = results.concat(matches);
    }

    matches = parser.parse(code, regexList);
    offsetMatches(matches, offset);
    add(matches);

    // add left script bracket
    if (htmlScript.left != null && match.left != null)
    {
      matches = parser.parse(match.left, [htmlScript.left]);
      offsetMatches(matches, match.index);
      add(matches);
    }

    // add right script bracket
    if (htmlScript.right != null && match.right != null)
    {
      matches = parser.parse(match.right, [htmlScript.right]);
      offsetMatches(matches, match.index + match[0].lastIndexOf(match.right));
      add(matches);
    }

    for (var j = 0, l = results.length; j < l; j++)
      results[j].brushName = brushClass.brushName;

    return results;
  }
  highlight: function(globalParams, element)
  {
    var elements = this.findElements(globalParams, element),
        propertyName = 'innerHTML',
        brush = null,
        // id,
        renderer,
        conf = sh.config
        ;

    if (elements.length === 0)
      return;

    for (var i = 0, l = elements.length; i < l; i++)
    {
      var element = elements[i],
          target = element.target,
          params = element.params,
          brushName = params.brush,
          brush,
          code
          ;

      if (brushName == null)
        continue;

      brush = findBrush(brushName);

      if (!brush)
        continue;

      // local params take precedence over defaults
      params = optsParser.defaults(params || {}, defaults);
      params = optsParser.defaults(params, config);

      // Instantiate a brush
      if (params['html-script'] == true || defaults['html-script'] == true)
      {
        brush = new HtmlScript(brush);
        brushName = 'htmlscript';
      }
      else
      {
        brush = new brush();
      }

      code = target[propertyName];

      // remove CDATA from <SCRIPT/> tags if it's present
      if (conf.useScriptTags)
        code = stripCData(code);

      // Inject title if the attribute is present
      if ((target.title || '') != '')
        params.title = target.title;

      params['brush'] = brushName;

      code = transformers(code, params);
      matches = parser.parse(code, brush.regexList, params);
      element = dom.create('div');

      renderer = new Renderer(code, matches, params);
      element.innerHTML = renderer.render();
      // id = utils.guid();
      // element.id = highlighters.id(id);
      // highlighters.set(id, element);

      if (params.quickCode)
        dom.attachEvent(dom.findElement(element, '.code'), 'dblclick', dom.quickCodeHandler);

      // carry over ID
      if ((target.id || '') != '')
        element.id = target.id;

      target.parentNode.replaceChild(element, target);
    }
  },