Description: Ruby highlighting rules for enscript.
Author: Mike Wilson <wmwilson01@hotmail.com>
Bug-Debian: http://bugs.debian.org/147116

--- /dev/null
+++ b/states/hl/ruby.st
@@ -0,0 +1,205 @@
+/**
+ * Name: ruby
+ * Description: Ruby programming language.
+ * Author: Mike Wilson <wmwilson01@hotmail.com>
+ */
+
+state ruby_comment
+{
+  /\*\\\// {
+    language_print ($0);
+    return;
+  }
+  LANGUAGE_SPECIALS {
+   language_print ($0);
+  }
+}
+
+state ruby_dquot_string
+{
+  /\\\\./ {
+    language_print ($0);
+  }
+  /\"/ {
+    language_print ($0);
+    return;
+  }
+  LANGUAGE_SPECIALS {
+    language_print ($0);
+  }
+}
+
+state ruby_quot_string
+{
+  /\\\\./ {
+    language_print ($0);
+  }
+  /[\']/ {
+    language_print ($0);
+    return;
+  }
+  LANGUAGE_SPECIALS {
+    language_print ($0);
+  }
+}
+
+state ruby_bquot_string
+{
+  /\\\\./ {
+    language_print ($0);
+  }
+  /`/ {
+    language_print ($0);
+    return;
+  }
+  LANGUAGE_SPECIALS {
+    language_print ($0);
+  }
+}
+
+state ruby
+{
+  BEGIN {
+    header ();
+  }
+  END {
+    trailer ();
+  }
+
+  /* Comments. */
+  /#[^{].*$/ {
+    comment_face (true);
+    language_print ($0);
+    comment_face (false);
+  }
+
+  /* Ignore escaped quote marks */
+  /\\\"/ {
+    language_print ($0);
+  }
+  /\\\'/ {
+    language_print ($0);
+  }
+  /\\\`/ {
+    language_print ($0);
+  }
+
+  /* In cgi files, JavaScript might be imbedded, so we need to look out
+   * for the JavaScript comments, because they might contain something
+   * we don't like, like a contraction (don't, won't, etc.)
+   * We won't put them in comment face, because they are not ruby
+   * comments.
+   */
+  /\/\// {
+    language_print ($0);
+    call (eat_one_line);
+  }
+
+  /* String constants. */
+  /\"/ {
+    string_face (true);
+    language_print ($0);
+    call (ruby_dquot_string);
+    string_face (false);
+  }
+  /[\']/ {
+    string_face (true);
+    language_print ($0);
+    call (ruby_quot_string);
+    string_face (false);
+  }
+
+  /* Backquoted command string */
+  /`/ {
+    string_face (true);
+    language_print ($0);
+    call (ruby_bquot_string);
+    string_face (false);
+  }
+
+  /* Variables globals and instance */
+  /[$@]\w+/ {
+    variable_name_face (true);
+    language_print ($0);
+    variable_name_face (false);
+  }
+
+  /* Variables class variable */
+  /@@\w+/ {
+    variable_name_face (true);
+    language_print ($0);
+    variable_name_face (false);
+  }
+
+   /([ \t]*)(def)([ \t]+)([^(]*)/ {
+    /* indentation */
+    language_print ($1);
+
+    /* def */
+    keyword_face (true);
+    language_print ($2);
+    keyword_face (false);
+
+    /* middle */
+    language_print ($3);
+
+    /* Function name. */
+    function_name_face (true);
+    language_print ($4);
+    function_name_face (false);
+  }
+
+  /* Highlighting
+	--Type face
+ 	private protected public
+
+	--Builtin face (I consider these to be somewhat special)
+	alias alias_method attr attr_accessor attr_reader attr_writer
+	module_alias module_function self super
+
+	--Reference face
+	require include
+
+	--Keyword face
+	and begin break case class def defined? do else elsif end
+	ensure eval extend false for if in method module next nil not
+	or redo rescue retry return then true undef unless until when
+	while yield
+   */
+/\\b(private|protected|public)\\b/ {
+    type_face (true);
+    language_print ($0);
+    type_face (false);
+  }
+
+/\\b(alias|alias_method|attr|attr_(accessor|reader|writer)\\
+|module_(alias|function)|self|super)\\b/ {
+    builtin_face (true);
+    language_print ($0);
+    builtin_face (false);
+  }
+
+/\\b(include|require)\\b/ {
+    reference_face (true);
+    language_print ($0);
+    reference_face (false);
+  }
+
+/\\b(and|begin|break|case|class|def|defined?|do|else|elsif|end|ensure|eval\\
+|extend|false|for|if|in|method|module|next|nil|not|or|raise|redo|rescue|retry\\
+|return|then|true|undef|unless|until|when|while|yield)\\b/ {
+    keyword_face (true);
+    language_print ($0);
+    keyword_face (false);
+  }
+
+  LANGUAGE_SPECIALS {
+    language_print ($0);
+  }
+
+  /\$[!@&`'+~=\/\\,;.<>_*$?:"]/ {
+    variable_name_face (true);
+    language_print ($0);
+    variable_name_face (false);
+  }
+}
--- a/states/hl/Makefile.am
+++ b/states/hl/Makefile.am
@@ -37,7 +37,7 @@
 postscript.st python.st pyrex.st rfc.st scheme.st sh.st skill.st	\
 sql.st states.st synopsys.st tcl.st tcsh.st tex.st vba.st verilog.st	\
 vhdl.st vrml.st wmlscript.st zsh.st eiffel.st erlang.st dylan.st oz.st	\
-lua.st oberon2.st icon.st smalltalk.st forth.st sml.st
+lua.st oberon2.st icon.st smalltalk.st forth.st sml.st ruby.st
 
 hldir = $(pkgdatadir)/hl
 dist_hl_DATA = $(misc) $(styles) $(languages) $(highlightings)
