Well, either nobody wants me to post this, or nobody cares if I do ;)
Either way, here's the diff for my enscript.st.  At the bottom, there's a 
few lines that define a regex and apply it to a "face".  I've put keywords 
in different faces, this is based on my view of the roles and  associations 
of those keywords.  If anyone has a minute, please take a look and see if my 
sanity is intacted ;).  Also, there's 2 ^L (CTL-L)'s in there that need to 
be put in by hand, they don't transfer in the cut and paste, so I've just 
put them in as carat L instead.


Mike Wilson
Unix Administrator
http://ruby.weblogs.com

---- enscript.st.diff follows

*** enscript.st.bak	Mon Feb  5 14:38:08 2001
--- enscript.st	Tue Feb  6 10:54:41 2001
***************
*** 1285,1290 ****
--- 1285,1291 ----
    /\.idl$/				idl;
    /\.(hs|lhs|gs|lgs)$/			haskell;
    /\.(pm|pl)$/				perl;
+   /\.rb$/				ruby;
    /\.(eps|EPS|ps|PS)$/			postscript;
    /\.py$/				python;
    /\.js$/				javascript;
***************
*** 1313,1318 ****
--- 1314,1321 ----
    /-\*- [Ii][Dd][Ll] -\*-/				idl;
    /-\*- [Pp][Ee][Rr][Ll] -\*-/				perl;
    /^#![ \t]*\/.*\/perl/					perl;
+   /-\*- [Rr][Uu][Bb][Yy] -\*-/                          ruby;
+   /^#![ \t]*\/.*\/ruby/                                 ruby;
    /^\04?%!/						postscript;
    /^From:/						mail;
    /^#![ \t]*(\/usr)?\/bin\/[ngmt]?awk/			awk;
***************
*** 4530,4535 ****
--- 4533,4739 ----

  }

+ ^L
+ /**
+  * 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);
+   }
+ }
+
  ^L
  /**
   * Name: scheme
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com