eric6/ThirdParty/Pygments/pygments/lexers/ruby.py

Thu, 14 Jan 2021 18:14:15 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 14 Jan 2021 18:14:15 +0100
changeset 7983
54c5cfbb1e29
parent 7701
25f42e208e08
permissions
-rw-r--r--

Third Party packages
- updated Pygments to 2.7.4

7983
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
1 # -*- coding: utf-8 -*-
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
2 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
3 pygments.lexers.ruby
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
5
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
6 Lexers for Ruby and related languages.
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
7
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
8 :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
9 :license: BSD, see LICENSE for details.
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
10 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
11
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
12 import re
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
13
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
14 from pygments.lexer import Lexer, RegexLexer, ExtendedRegexLexer, include, \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
15 bygroups, default, LexerContext, do_insertions, words
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
16 from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
17 Number, Punctuation, Error, Generic
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
18 from pygments.util import shebang_matches
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
19
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
20 __all__ = ['RubyLexer', 'RubyConsoleLexer', 'FancyLexer']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
21
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
22 line_re = re.compile('.*?\n')
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
23
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
24
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
25 RUBY_OPERATORS = (
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
26 '*', '**', '-', '+', '-@', '+@', '/', '%', '&', '|', '^', '`', '~',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
27 '[]', '[]=', '<<', '>>', '<', '<>', '<=>', '>', '>=', '==', '==='
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
28 )
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
29
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
30
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
31 class RubyLexer(ExtendedRegexLexer):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
32 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
33 For `Ruby <http://www.ruby-lang.org>`_ source code.
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
34 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
35
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
36 name = 'Ruby'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
37 aliases = ['rb', 'ruby', 'duby']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
38 filenames = ['*.rb', '*.rbw', 'Rakefile', '*.rake', '*.gemspec',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
39 '*.rbx', '*.duby', 'Gemfile']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
40 mimetypes = ['text/x-ruby', 'application/x-ruby']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
41
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
42 flags = re.DOTALL | re.MULTILINE
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
43
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
44 def heredoc_callback(self, match, ctx):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
45 # okay, this is the hardest part of parsing Ruby...
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
46 # match: 1 = <<[-~]?, 2 = quote? 3 = name 4 = quote? 5 = rest of line
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
47
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
48 start = match.start(1)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
49 yield start, Operator, match.group(1) # <<[-~]?
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
50 yield match.start(2), String.Heredoc, match.group(2) # quote ", ', `
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
51 yield match.start(3), String.Delimiter, match.group(3) # heredoc name
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
52 yield match.start(4), String.Heredoc, match.group(4) # quote again
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
53
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
54 heredocstack = ctx.__dict__.setdefault('heredocstack', [])
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
55 outermost = not bool(heredocstack)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
56 heredocstack.append((match.group(1) in ('<<-', '<<~'), match.group(3)))
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
57
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
58 ctx.pos = match.start(5)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
59 ctx.end = match.end(5)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
60 # this may find other heredocs, so limit the recursion depth
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
61 if len(heredocstack) < 100:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
62 yield from self.get_tokens_unprocessed(context=ctx)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
63 else:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
64 yield ctx.pos, String.Heredoc, match.group(5)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
65 ctx.pos = match.end()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
66
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
67 if outermost:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
68 # this is the outer heredoc again, now we can process them all
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
69 for tolerant, hdname in heredocstack:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
70 lines = []
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
71 for match in line_re.finditer(ctx.text, ctx.pos):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
72 if tolerant:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
73 check = match.group().strip()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
74 else:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
75 check = match.group().rstrip()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
76 if check == hdname:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
77 for amatch in lines:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
78 yield amatch.start(), String.Heredoc, amatch.group()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
79 yield match.start(), String.Delimiter, match.group()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
80 ctx.pos = match.end()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
81 break
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
82 else:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
83 lines.append(match)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
84 else:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
85 # end of heredoc not found -- error!
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
86 for amatch in lines:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
87 yield amatch.start(), Error, amatch.group()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
88 ctx.end = len(ctx.text)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
89 del heredocstack[:]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
90
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
91 def gen_rubystrings_rules():
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
92 def intp_regex_callback(self, match, ctx):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
93 yield match.start(1), String.Regex, match.group(1) # begin
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
94 nctx = LexerContext(match.group(3), 0, ['interpolated-regex'])
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
95 for i, t, v in self.get_tokens_unprocessed(context=nctx):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
96 yield match.start(3)+i, t, v
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
97 yield match.start(4), String.Regex, match.group(4) # end[mixounse]*
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
98 ctx.pos = match.end()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
99
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
100 def intp_string_callback(self, match, ctx):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
101 yield match.start(1), String.Other, match.group(1)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
102 nctx = LexerContext(match.group(3), 0, ['interpolated-string'])
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
103 for i, t, v in self.get_tokens_unprocessed(context=nctx):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
104 yield match.start(3)+i, t, v
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
105 yield match.start(4), String.Other, match.group(4) # end
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
106 ctx.pos = match.end()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
107
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
108 states = {}
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
109 states['strings'] = [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
110 # easy ones
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
111 (r'\:@{0,2}[a-zA-Z_]\w*[!?]?', String.Symbol),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
112 (words(RUBY_OPERATORS, prefix=r'\:@{0,2}'), String.Symbol),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
113 (r":'(\\\\|\\[^\\]|[^'\\])*'", String.Symbol),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
114 (r':"', String.Symbol, 'simple-sym'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
115 (r'([a-zA-Z_]\w*)(:)(?!:)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
116 bygroups(String.Symbol, Punctuation)), # Since Ruby 1.9
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
117 (r'"', String.Double, 'simple-string-double'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
118 (r"'", String.Single, 'simple-string-single'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
119 (r'(?<!\.)`', String.Backtick, 'simple-backtick'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
120 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
121
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
122 # quoted string and symbol
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
123 for name, ttype, end in ('string-double', String.Double, '"'), \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
124 ('string-single', String.Single, "'"),\
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
125 ('sym', String.Symbol, '"'), \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
126 ('backtick', String.Backtick, '`'):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
127 states['simple-'+name] = [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
128 include('string-intp-escaped'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
129 (r'[^\\%s#]+' % end, ttype),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
130 (r'[\\#]', ttype),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
131 (end, ttype, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
132 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
133
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
134 # braced quoted strings
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
135 for lbrace, rbrace, bracecc, name in \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
136 ('\\{', '\\}', '{}', 'cb'), \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
137 ('\\[', '\\]', '\\[\\]', 'sb'), \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
138 ('\\(', '\\)', '()', 'pa'), \
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
139 ('<', '>', '<>', 'ab'):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
140 states[name+'-intp-string'] = [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
141 (r'\\[\\' + bracecc + ']', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
142 (lbrace, String.Other, '#push'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
143 (rbrace, String.Other, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
144 include('string-intp-escaped'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
145 (r'[\\#' + bracecc + ']', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
146 (r'[^\\#' + bracecc + ']+', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
147 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
148 states['strings'].append((r'%[QWx]?' + lbrace, String.Other,
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
149 name+'-intp-string'))
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
150 states[name+'-string'] = [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
151 (r'\\[\\' + bracecc + ']', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
152 (lbrace, String.Other, '#push'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
153 (rbrace, String.Other, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
154 (r'[\\#' + bracecc + ']', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
155 (r'[^\\#' + bracecc + ']+', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
156 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
157 states['strings'].append((r'%[qsw]' + lbrace, String.Other,
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
158 name+'-string'))
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
159 states[name+'-regex'] = [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
160 (r'\\[\\' + bracecc + ']', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
161 (lbrace, String.Regex, '#push'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
162 (rbrace + '[mixounse]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
163 include('string-intp'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
164 (r'[\\#' + bracecc + ']', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
165 (r'[^\\#' + bracecc + ']+', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
166 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
167 states['strings'].append((r'%r' + lbrace, String.Regex,
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
168 name+'-regex'))
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
169
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
170 # these must come after %<brace>!
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
171 states['strings'] += [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
172 # %r regex
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
173 (r'(%r([\W_]))((?:\\\2|(?!\2).)*)(\2[mixounse]*)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
174 intp_regex_callback),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
175 # regular fancy strings with qsw
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
176 (r'%[qsw]([\W_])((?:\\\1|(?!\1).)*)\1', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
177 (r'(%[QWx]([\W_]))((?:\\\2|(?!\2).)*)(\2)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
178 intp_string_callback),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
179 # special forms of fancy strings after operators or
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
180 # in method calls with braces
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
181 (r'(?<=[-+/*%=<>&!^|~,(])(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
182 bygroups(Text, String.Other, None)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
183 # and because of fixed width lookbehinds the whole thing a
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
184 # second time for line startings...
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
185 (r'^(\s*)(%([\t ])(?:(?:\\\3|(?!\3).)*)\3)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
186 bygroups(Text, String.Other, None)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
187 # all regular fancy strings without qsw
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
188 (r'(%([^a-zA-Z0-9\s]))((?:\\\2|(?!\2).)*)(\2)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
189 intp_string_callback),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
190 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
191
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
192 return states
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
193
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
194 tokens = {
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
195 'root': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
196 (r'\A#!.+?$', Comment.Hashbang),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
197 (r'#.*?$', Comment.Single),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
198 (r'=begin\s.*?\n=end.*?$', Comment.Multiline),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
199 # keywords
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
200 (words((
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
201 'BEGIN', 'END', 'alias', 'begin', 'break', 'case', 'defined?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
202 'do', 'else', 'elsif', 'end', 'ensure', 'for', 'if', 'in', 'next', 'redo',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
203 'rescue', 'raise', 'retry', 'return', 'super', 'then', 'undef',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
204 'unless', 'until', 'when', 'while', 'yield'), suffix=r'\b'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
205 Keyword),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
206 # start of function, class and module names
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
207 (r'(module)(\s+)([a-zA-Z_]\w*'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
208 r'(?:::[a-zA-Z_]\w*)*)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
209 bygroups(Keyword, Text, Name.Namespace)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
210 (r'(def)(\s+)', bygroups(Keyword, Text), 'funcname'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
211 (r'def(?=[*%&^`~+-/\[<>=])', Keyword, 'funcname'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
212 (r'(class)(\s+)', bygroups(Keyword, Text), 'classname'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
213 # special methods
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
214 (words((
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
215 'initialize', 'new', 'loop', 'include', 'extend', 'raise', 'attr_reader',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
216 'attr_writer', 'attr_accessor', 'attr', 'catch', 'throw', 'private',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
217 'module_function', 'public', 'protected', 'true', 'false', 'nil'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
218 suffix=r'\b'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
219 Keyword.Pseudo),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
220 (r'(not|and|or)\b', Operator.Word),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
221 (words((
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
222 'autoload', 'block_given', 'const_defined', 'eql', 'equal', 'frozen', 'include',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
223 'instance_of', 'is_a', 'iterator', 'kind_of', 'method_defined', 'nil',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
224 'private_method_defined', 'protected_method_defined',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
225 'public_method_defined', 'respond_to', 'tainted'), suffix=r'\?'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
226 Name.Builtin),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
227 (r'(chomp|chop|exit|gsub|sub)!', Name.Builtin),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
228 (words((
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
229 'Array', 'Float', 'Integer', 'String', '__id__', '__send__', 'abort',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
230 'ancestors', 'at_exit', 'autoload', 'binding', 'callcc', 'caller',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
231 'catch', 'chomp', 'chop', 'class_eval', 'class_variables',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
232 'clone', 'const_defined?', 'const_get', 'const_missing', 'const_set',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
233 'constants', 'display', 'dup', 'eval', 'exec', 'exit', 'extend', 'fail', 'fork',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
234 'format', 'freeze', 'getc', 'gets', 'global_variables', 'gsub',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
235 'hash', 'id', 'included_modules', 'inspect', 'instance_eval',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
236 'instance_method', 'instance_methods',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
237 'instance_variable_get', 'instance_variable_set', 'instance_variables',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
238 'lambda', 'load', 'local_variables', 'loop',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
239 'method', 'method_missing', 'methods', 'module_eval', 'name',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
240 'object_id', 'open', 'p', 'print', 'printf', 'private_class_method',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
241 'private_instance_methods',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
242 'private_methods', 'proc', 'protected_instance_methods',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
243 'protected_methods', 'public_class_method',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
244 'public_instance_methods', 'public_methods',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
245 'putc', 'puts', 'raise', 'rand', 'readline', 'readlines', 'require',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
246 'scan', 'select', 'self', 'send', 'set_trace_func', 'singleton_methods', 'sleep',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
247 'split', 'sprintf', 'srand', 'sub', 'syscall', 'system', 'taint',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
248 'test', 'throw', 'to_a', 'to_s', 'trace_var', 'trap', 'untaint',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
249 'untrace_var', 'warn'), prefix=r'(?<!\.)', suffix=r'\b'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
250 Name.Builtin),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
251 (r'__(FILE|LINE)__\b', Name.Builtin.Pseudo),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
252 # normal heredocs
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
253 (r'(?<!\w)(<<[-~]?)(["`\']?)([a-zA-Z_]\w*)(\2)(.*?\n)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
254 heredoc_callback),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
255 # empty string heredocs
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
256 (r'(<<[-~]?)("|\')()(\2)(.*?\n)', heredoc_callback),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
257 (r'__END__', Comment.Preproc, 'end-part'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
258 # multiline regex (after keywords or assignments)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
259 (r'(?:^|(?<=[=<>~!:])|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
260 r'(?<=(?:\s|;)when\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
261 r'(?<=(?:\s|;)or\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
262 r'(?<=(?:\s|;)and\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
263 r'(?<=\.index\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
264 r'(?<=\.scan\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
265 r'(?<=\.sub\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
266 r'(?<=\.sub!\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
267 r'(?<=\.gsub\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
268 r'(?<=\.gsub!\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
269 r'(?<=\.match\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
270 r'(?<=(?:\s|;)if\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
271 r'(?<=(?:\s|;)elsif\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
272 r'(?<=^when\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
273 r'(?<=^index\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
274 r'(?<=^scan\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
275 r'(?<=^sub\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
276 r'(?<=^gsub\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
277 r'(?<=^sub!\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
278 r'(?<=^gsub!\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
279 r'(?<=^match\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
280 r'(?<=^if\s)|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
281 r'(?<=^elsif\s)'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
282 r')(\s*)(/)', bygroups(Text, String.Regex), 'multiline-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
283 # multiline regex (in method calls or subscripts)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
284 (r'(?<=\(|,|\[)/', String.Regex, 'multiline-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
285 # multiline regex (this time the funny no whitespace rule)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
286 (r'(\s+)(/)(?![\s=])', bygroups(Text, String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
287 'multiline-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
288 # lex numbers and ignore following regular expressions which
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
289 # are division operators in fact (grrrr. i hate that. any
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
290 # better ideas?)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
291 # since pygments 0.7 we also eat a "?" operator after numbers
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
292 # so that the char operator does not work. Chars are not allowed
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
293 # there so that you can use the ternary operator.
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
294 # stupid example:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
295 # x>=0?n[x]:""
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
296 (r'(0_?[0-7]+(?:_[0-7]+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
297 bygroups(Number.Oct, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
298 (r'(0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
299 bygroups(Number.Hex, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
300 (r'(0b[01]+(?:_[01]+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
301 bygroups(Number.Bin, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
302 (r'([\d]+(?:_\d+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
303 bygroups(Number.Integer, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
304 # Names
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
305 (r'@@[a-zA-Z_]\w*', Name.Variable.Class),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
306 (r'@[a-zA-Z_]\w*', Name.Variable.Instance),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
307 (r'\$\w+', Name.Variable.Global),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
308 (r'\$[!@&`\'+~=/\\,;.<>_*$?:"^-]', Name.Variable.Global),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
309 (r'\$-[0adFiIlpvw]', Name.Variable.Global),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
310 (r'::', Operator),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
311 include('strings'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
312 # chars
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
313 (r'\?(\\[MC]-)*' # modifiers
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
314 r'(\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})|\S)'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
315 r'(?!\w)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
316 String.Char),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
317 (r'[A-Z]\w+', Name.Constant),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
318 # this is needed because ruby attributes can look
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
319 # like keywords (class) or like this: ` ?!?
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
320 (words(RUBY_OPERATORS, prefix=r'(\.|::)'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
321 bygroups(Operator, Name.Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
322 (r'(\.|::)([a-zA-Z_]\w*[!?]?|[*%&^`~+\-/\[<>=])',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
323 bygroups(Operator, Name)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
324 (r'[a-zA-Z_]\w*[!?]?', Name),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
325 (r'(\[|\]|\*\*|<<?|>>?|>=|<=|<=>|=~|={3}|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
326 r'!~|&&?|\|\||\.{1,3})', Operator),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
327 (r'[-+/*%=<>&!^|~]=?', Operator),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
328 (r'[(){};,/?:\\]', Punctuation),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
329 (r'\s+', Text)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
330 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
331 'funcname': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
332 (r'\(', Punctuation, 'defexpr'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
333 (r'(?:([a-zA-Z_]\w*)(\.))?'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
334 r'([a-zA-Z_]\w*[!?]?|\*\*?|[-+]@?|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
335 r'[/%&|^`~]|\[\]=?|<<|>>|<=?>|>=?|===?)',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
336 bygroups(Name.Class, Operator, Name.Function), '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
337 default('#pop')
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
338 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
339 'classname': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
340 (r'\(', Punctuation, 'defexpr'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
341 (r'<<', Operator, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
342 (r'[A-Z_]\w*', Name.Class, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
343 default('#pop')
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
344 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
345 'defexpr': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
346 (r'(\))(\.|::)?', bygroups(Punctuation, Operator), '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
347 (r'\(', Operator, '#push'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
348 include('root')
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
349 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
350 'in-intp': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
351 (r'\{', String.Interpol, '#push'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
352 (r'\}', String.Interpol, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
353 include('root'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
354 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
355 'string-intp': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
356 (r'#\{', String.Interpol, 'in-intp'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
357 (r'#@@?[a-zA-Z_]\w*', String.Interpol),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
358 (r'#\$[a-zA-Z_]\w*', String.Interpol)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
359 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
360 'string-intp-escaped': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
361 include('string-intp'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
362 (r'\\([\\abefnrstv#"\']|x[a-fA-F0-9]{1,2}|[0-7]{1,3})',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
363 String.Escape)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
364 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
365 'interpolated-regex': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
366 include('string-intp'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
367 (r'[\\#]', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
368 (r'[^\\#]+', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
369 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
370 'interpolated-string': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
371 include('string-intp'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
372 (r'[\\#]', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
373 (r'[^\\#]+', String.Other),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
374 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
375 'multiline-regex': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
376 include('string-intp'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
377 (r'\\\\', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
378 (r'\\/', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
379 (r'[\\#]', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
380 (r'[^\\/#]+', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
381 (r'/[mixounse]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
382 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
383 'end-part': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
384 (r'.+', Comment.Preproc, '#pop')
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
385 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
386 }
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
387 tokens.update(gen_rubystrings_rules())
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
388
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
389 def analyse_text(text):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
390 return shebang_matches(text, r'ruby(1\.\d)?')
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
391
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
392
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
393 class RubyConsoleLexer(Lexer):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
394 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
395 For Ruby interactive console (**irb**) output like:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
396
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
397 .. sourcecode:: rbcon
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
398
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
399 irb(main):001:0> a = 1
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
400 => 1
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
401 irb(main):002:0> puts a
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
402 1
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
403 => nil
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
404 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
405 name = 'Ruby irb session'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
406 aliases = ['rbcon', 'irb']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
407 mimetypes = ['text/x-ruby-shellsession']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
408
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
409 _prompt_re = re.compile(r'irb\([a-zA-Z_]\w*\):\d{3}:\d+[>*"\'] '
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
410 r'|>> |\?> ')
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
411
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
412 def get_tokens_unprocessed(self, text):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
413 rblexer = RubyLexer(**self.options)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
414
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
415 curcode = ''
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
416 insertions = []
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
417 for match in line_re.finditer(text):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
418 line = match.group()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
419 m = self._prompt_re.match(line)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
420 if m is not None:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
421 end = m.end()
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
422 insertions.append((len(curcode),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
423 [(0, Generic.Prompt, line[:end])]))
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
424 curcode += line[end:]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
425 else:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
426 if curcode:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
427 yield from do_insertions(
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
428 insertions, rblexer.get_tokens_unprocessed(curcode))
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
429 curcode = ''
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
430 insertions = []
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
431 yield match.start(), Generic.Output, line
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
432 if curcode:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
433 yield from do_insertions(
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
434 insertions, rblexer.get_tokens_unprocessed(curcode))
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
435
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
436
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
437 class FancyLexer(RegexLexer):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
438 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
439 Pygments Lexer For `Fancy <http://www.fancy-lang.org/>`_.
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
440
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
441 Fancy is a self-hosted, pure object-oriented, dynamic,
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
442 class-based, concurrent general-purpose programming language
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
443 running on Rubinius, the Ruby VM.
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
444
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
445 .. versionadded:: 1.5
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
446 """
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
447 name = 'Fancy'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
448 filenames = ['*.fy', '*.fancypack']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
449 aliases = ['fancy', 'fy']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
450 mimetypes = ['text/x-fancysrc']
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
451
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
452 tokens = {
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
453 # copied from PerlLexer:
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
454 'balanced-regex': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
455 (r'/(\\\\|\\[^\\]|[^/\\])*/[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
456 (r'!(\\\\|\\[^\\]|[^!\\])*![egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
457 (r'\\(\\\\|[^\\])*\\[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
458 (r'\{(\\\\|\\[^\\]|[^}\\])*\}[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
459 (r'<(\\\\|\\[^\\]|[^>\\])*>[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
460 (r'\[(\\\\|\\[^\\]|[^\]\\])*\][egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
461 (r'\((\\\\|\\[^\\]|[^)\\])*\)[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
462 (r'@(\\\\|\\[^\\]|[^@\\])*@[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
463 (r'%(\\\\|\\[^\\]|[^%\\])*%[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
464 (r'\$(\\\\|\\[^\\]|[^$\\])*\$[egimosx]*', String.Regex, '#pop'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
465 ],
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
466 'root': [
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
467 (r'\s+', Text),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
468
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
469 # balanced delimiters (copied from PerlLexer):
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
470 (r's\{(\\\\|\\[^\\]|[^}\\])*\}\s*', String.Regex, 'balanced-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
471 (r's<(\\\\|\\[^\\]|[^>\\])*>\s*', String.Regex, 'balanced-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
472 (r's\[(\\\\|\\[^\\]|[^\]\\])*\]\s*', String.Regex, 'balanced-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
473 (r's\((\\\\|\\[^\\]|[^)\\])*\)\s*', String.Regex, 'balanced-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
474 (r'm?/(\\\\|\\[^\\]|[^///\n])*/[gcimosx]*', String.Regex),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
475 (r'm(?=[/!\\{<\[(@%$])', String.Regex, 'balanced-regex'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
476
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
477 # Comments
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
478 (r'#(.*?)\n', Comment.Single),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
479 # Symbols
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
480 (r'\'([^\'\s\[\](){}]+|\[\])', String.Symbol),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
481 # Multi-line DoubleQuotedString
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
482 (r'"""(\\\\|\\[^\\]|[^\\])*?"""', String),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
483 # DoubleQuotedString
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
484 (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
485 # keywords
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
486 (r'(def|class|try|catch|finally|retry|return|return_local|match|'
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
487 r'case|->|=>)\b', Keyword),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
488 # constants
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
489 (r'(self|super|nil|false|true)\b', Name.Constant),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
490 (r'[(){};,/?|:\\]', Punctuation),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
491 # names
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
492 (words((
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
493 'Object', 'Array', 'Hash', 'Directory', 'File', 'Class', 'String',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
494 'Number', 'Enumerable', 'FancyEnumerable', 'Block', 'TrueClass',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
495 'NilClass', 'FalseClass', 'Tuple', 'Symbol', 'Stack', 'Set',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
496 'FancySpec', 'Method', 'Package', 'Range'), suffix=r'\b'),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
497 Name.Builtin),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
498 # functions
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
499 (r'[a-zA-Z](\w|[-+?!=*/^><%])*:', Name.Function),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
500 # operators, must be below functions
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
501 (r'[-+*/~,<>=&!?%^\[\].$]+', Operator),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
502 (r'[A-Z]\w*', Name.Constant),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
503 (r'@[a-zA-Z_]\w*', Name.Variable.Instance),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
504 (r'@@[a-zA-Z_]\w*', Name.Variable.Class),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
505 ('@@?', Operator),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
506 (r'[a-zA-Z_]\w*', Name),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
507 # numbers - / checks are necessary to avoid mismarking regexes,
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
508 # see comment in RubyLexer
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
509 (r'(0[oO]?[0-7]+(?:_[0-7]+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
510 bygroups(Number.Oct, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
511 (r'(0[xX][0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
512 bygroups(Number.Hex, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
513 (r'(0[bB][01]+(?:_[01]+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
514 bygroups(Number.Bin, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
515 (r'([\d]+(?:_\d+)*)(\s*)([/?])?',
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
516 bygroups(Number.Integer, Text, Operator)),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
517 (r'\d+([eE][+-]?[0-9]+)|\d+\.\d+([eE][+-]?[0-9]+)?', Number.Float),
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
518 (r'\d+', Number.Integer)
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
519 ]
54c5cfbb1e29 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7701
diff changeset
520 }

eric ide

mercurial