// rcomment statt comment um Kollision mit typo zu vermeiden
CodeHighlighter.addStyle("ruby",{
  // o string muss zuerst gematcht werden, sonst geht was schief
  // o Referenzen auf submatches innerhalb vom RegExp selbst beginnen
  // erst bei \2, weil in code_highlighter.js->addStyle noch ein Klammerpaar ganz
  // aussen um den RegExp gesetzt wird, wodurch sich die Variablen verschieben.
  string : {
    exp  : /("|')([^\2]*?)(\2)/,    // als regexp
    //exp  : '("|\')([^\\2]*)(\\2)', // dasselbe als string
    replacement:  "<span class=\"$0\"><span class=\"quotemark\">$1</span>$2<span class=\"quotemark\">$3</span></span>"
  },
  rcomment : {
	  exp  : /#[^\n]+/
  },
  /*
  brackets : {
	  exp  : /\(|\)/
  },
  */
  // Klammern separat links und rechts matchen
  brackets_left  : {
	  exp  : /\(|\[/
  },
  brackets_right : {
	  exp  : /\)|\]/
  },
  // class separat matchen, ist sonst bei classname Rule zu kompliziert auch noch
  // dynamisch erzeugtes HTML aus vorherigen Rule mit zu matchen
  keywords : {
	  exp  : /\b(do|end|self|def|in|if|module|yield|then|else|for|until|unless|while|exit|elsif|case|when|break|retry|redo|rescue|require|raise)\b/
  },
  /* Added by Shelly Fisher (shelly@agileevolved.com) */
  symbol : {
    //exp : /([^:])(:[A-Za-z0-9_!?]+)/,
    //replacement : "$1<span class=\"$0\">$2</span>"
    // Einfacher, aber Probleme bei Type::Class
    exp : /:[A-Za-z0-9_!?]+/
  },
  namespaced : {
    // um :: von :symbol abzugrenzen 
    exp : /([A-Za-z0-9_!?]+)(::)([A-Za-z0-9_!?]+)/,
    replacement : "$1<span class=\"$0\">$2</span>$3"
  },
  buildins : {
     exp  : /\b(Hash|Array|String)\b/
  },
  coremethods : {
     exp  : /\b(puts|print|initialize|clone|to_s|to_a|to_i|new)\b/
  },
  nil : {
     exp  : /\b(nil)\b/
  },
  classname : {
    exp : /(class\s+)([A-Za-z0-9_!?]+)/,
    replacement : "<span class=\"keywords\">$1</span><span class=\"$0\">$2</span>"
  },
  instancevar : {
    exp : /([^@])(@[A-Za-z0-9_!?]+)/,
    replacement : "$1<span class=\"$0\">$2</span>"
  },
  classvar : {
    exp : /([^@])(@@[A-Za-z0-9_!?]+)/,
    replacement : "$1<span class=\"$0\">$2</span>"
  },
  lineno : {
    exp : /(\s{2}\d+\s)/,
    replacement : "<span class=\"lineno\">$1</span>"
  },
  constants : {
    exp : /\b([A-Z_]+)\b/,
    replacement : "<span class=\"constant\">$1</span>"
  }
});

// z.B. "<a href=\"...\">...</a>"
CodeHighlighter.addStyle("ruby_stringgreedy",{
  string : {
    exp  : /("|')(.*)(\2)/,
    replacement:  "<span class=\"$0\"><span class=\"quotemark\">$1</span>$2<span class=\"quotemark\">$3</span></span>"
  }
});

