From: Mike Wilson Date: 2001-02-07T03:57:27+09:00 Subject: [ruby-talk:10443] enscript.st 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 + */ + + 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