ThirdParty/Pygments/pygments/lexers/j.py

changeset 4697
c2e9bf425554
child 5713
6762afd9f963
equal deleted inserted replaced
4696:bf4d19a7cade 4697:c2e9bf425554
1 # -*- coding: utf-8 -*-
2 """
3 pygments.lexers.j
4 ~~~~~~~~~~~~~~~~~
5
6 Lexer for the J programming language.
7
8 :copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS.
9 :license: BSD, see LICENSE for details.
10 """
11
12 from pygments.lexer import RegexLexer, words, include
13 from pygments.token import Comment, Keyword, Name, Number, Operator, Punctuation, \
14 String, Text
15
16 __all__ = ['JLexer']
17
18
19 class JLexer(RegexLexer):
20 """
21 For `J <http://jsoftware.com/>`_ source code.
22
23 .. versionadded:: 2.1
24 """
25
26 name = 'J'
27 aliases = ['j']
28 filenames = ['*.ijs']
29 mimetypes = ['text/x-j']
30
31 validName = r'\b[a-zA-Z]\w*'
32
33 tokens = {
34 'root': [
35 # Shebang script
36 (r'#!.*$', Comment.Preproc),
37
38 # Comments
39 (r'NB\..*', Comment.Single),
40 (r'\n+\s*Note', Comment.Multiline, 'comment'),
41 (r'\s*Note.*', Comment.Single),
42
43 # Whitespace
44 (r'\s+', Text),
45
46 # Strings
47 (r"'", String, 'singlequote'),
48
49 # Definitions
50 (r'0\s+:\s*0|noun\s+define\s*$', Name.Entity, 'nounDefinition'),
51 (r'\b(([1-4]|13)\s+:\s*0)|((adverb|conjunction|dyad|monad|verb)\s+define)\b',
52 Name.Function, 'explicitDefinition'),
53
54 # Flow Control
55 (words(('for_', 'goto_', 'label_'), suffix=validName+'\.'), Name.Label),
56 (words((
57 'assert', 'break', 'case', 'catch', 'catchd',
58 'catcht', 'continue', 'do', 'else', 'elseif',
59 'end', 'fcase', 'for', 'if', 'return',
60 'select', 'throw', 'try', 'while', 'whilst',
61 ), suffix='\.'), Name.Label),
62
63 # Variable Names
64 (validName, Name.Variable),
65
66 # Standard Library
67 (words((
68 'ARGV', 'CR', 'CRLF', 'DEL', 'Debug',
69 'EAV', 'EMPTY', 'FF', 'JVERSION', 'LF',
70 'LF2', 'Note', 'TAB', 'alpha17', 'alpha27',
71 'apply', 'bind', 'boxopen', 'boxxopen', 'bx',
72 'clear', 'cutLF', 'cutopen', 'datatype', 'def',
73 'dfh', 'drop', 'each', 'echo', 'empty',
74 'erase', 'every', 'evtloop', 'exit', 'expand',
75 'fetch', 'file2url', 'fixdotdot', 'fliprgb', 'getargs',
76 'getenv', 'hfd', 'inv', 'inverse', 'iospath',
77 'isatty', 'isutf8', 'items', 'leaf', 'list',
78 'nameclass', 'namelist', 'namelist', 'names', 'nc',
79 'nl', 'on', 'pick', 'pick', 'rows',
80 'script', 'scriptd', 'sign', 'sminfo', 'smoutput',
81 'sort', 'split', 'stderr', 'stdin', 'stdout',
82 'table', 'take', 'timespacex', 'timex', 'tmoutput',
83 'toCRLF', 'toHOST', 'toJ', 'tolower', 'toupper',
84 'type', 'ucp', 'ucpcount', 'usleep', 'utf8',
85 'uucp',
86 )), Name.Function),
87
88 # Copula
89 (r'=[.:]', Operator),
90
91 # Builtins
92 (r'[-=+*#$%@!~`^&";:.,<>{}\[\]\\|/]', Operator),
93
94 # Short Keywords
95 (r'[abCdDeEfHiIjLMoprtT]\.', Keyword.Reserved),
96 (r'[aDiLpqsStux]\:', Keyword.Reserved),
97 (r'(_[0-9])\:', Keyword.Constant),
98
99 # Parens
100 (r'\(', Punctuation, 'parentheses'),
101
102 # Numbers
103 include('numbers'),
104 ],
105
106 'comment': [
107 (r'[^)]', Comment.Multiline),
108 (r'^\)', Comment.Multiline, '#pop'),
109 (r'[)]', Comment.Multiline),
110 ],
111
112 'explicitDefinition': [
113 (r'\b[nmuvxy]\b', Name.Decorator),
114 include('root'),
115 (r'[^)]', Name),
116 (r'^\)', Name.Label, '#pop'),
117 (r'[)]', Name),
118 ],
119
120 'numbers': [
121 (r'\b_{1,2}\b', Number),
122 (r'_?\d+(\.\d+)?(\s*[ejr]\s*)_?\d+(\.?=\d+)?', Number),
123 (r'_?\d+\.(?=\d+)', Number.Float),
124 (r'_?\d+x', Number.Integer.Long),
125 (r'_?\d+', Number.Integer),
126 ],
127
128 'nounDefinition': [
129 (r'[^)]', String),
130 (r'^\)', Name.Label, '#pop'),
131 (r'[)]', String),
132 ],
133
134 'parentheses': [
135 (r'\)', Punctuation, '#pop'),
136 # include('nounDefinition'),
137 include('explicitDefinition'),
138 include('root'),
139 ],
140
141 'singlequote': [
142 (r"[^']", String),
143 (r"''", String),
144 (r"'", String, '#pop'),
145 ],
146 }

eric ide

mercurial