1# $MirOS: contrib/code/jupp/syntax/perl.jsf.in,v 1.4 2017/12/02 05:38:06 tg Exp $
2#-
3# JOE syntax highlight file for Perl
4
5# Still need:
6
7# _ in numbers
8# 0b for binary
9# \cC for Ctrl-C
10# \x{hex} unicode
11# no escapes in single quotes (except \\ and \')
12# \N{NAME} named character
13
14# / .. / regex
15# s/ .. / .. /
16# $name allowed in regex
17# m//  same as //
18# s///
19# tr/// y///
20# qr//
21
22# can also do this: s(egg)<larva>
23# s' ' ' - no interpolation
24
25
26# Always reparse from beginning
27-
28
29
30# Define colors
31
32=Idle
33=Preproc yellow
34=Comment green
35=Constant cyan
36=Escape bold cyan
37=Type bold
38=Keyword bold
39=Bad bold red
40
41:idle Idle
42	*		idle
43	"#"		line_comment	recolor=-1
44	"\n"		idle
45	"0"		first_digit	recolor=-1
46	"1-9"		decimal	recolor=-1
47	"."		maybe_float
48	"\""		string		recolor=-1
49	"\\"		not_string
50	"'"		char		recolor=-1
51	"`"		backtick	recolor=-1
52	"a-zA-Z_"	ident		buffer
53
54:not_string Idle
55	*		idle noeat
56	"\"'`"		idle
57
58:line_comment Comment
59	*		line_comment
60	"\n"		idle
61
62:first_digit Constant
63	*		idle	noeat
64	"x"		hex
65	"b"		binary
66	"."		float
67	"eE"		epart
68	"0-7"		octal
69	"89"		bad_number	recolor=-1
70
71:bad_number Bad
72	*		idle	noeat
73	"0-9"		bad_number
74
75:octal Constant
76	*		idle	noeat
77	"0-7_"		octal
78	"89"		bad_number	recolor=-1
79
80:binary Constant
81	*		idle	noeat
82	"01_"		binary
83	"2-9"		bad_number	recolor=-1
84
85:hex Constant
86	*		idle	noeat
87	"0-9A-Fa-f_"	hex
88
89:decimal Constant
90	*		idle	noeat
91	"0-9_"		decimal
92	"eE"		epart
93	"."		float
94
95:maybe_float Constant
96	*		idle	recolor=-2	noeat
97	"0-9"		float		recolor=-2
98
99:float Constant
100	*		idle	noeat
101	"eE"		epart
102	"0-9_"		float
103
104:epart Constant
105	*		idle	noeat
106	"0-9+\-"	enum
107
108:enum Constant
109	*		idle	noeat
110	"0-9_"		enum
111
112:string	Constant
113	*		string
114	"\""		idle
115	"\\"		string_escape	recolor=-1
116	"$@"		string_subst	recolor=-1
117
118:string_subst Escape
119	*		string	noeat recolor=-1
120	"a-zA-Z_0-9"	string_subst
121
122:string_escape Escape
123	*		string
124	"x"		string_hex1
125	"c"		string_ctrl
126	"N"		string_named
127	"0-7"		string_octal2
128	"\n"		string		recolor=-2
129
130:string_named Escape
131	*		string
132	"{"		string_named_rest
133
134:string_named_rest Escape
135	*		string_named_rest
136	"}"		string
137
138:string_ctrl Escape
139	*		string
140
141:string_hex1 Escape
142	*		string		noeat
143	"{"		string_unicode
144	"0-9a-fA-F"	string_hex2
145
146:string_unicode Escape
147	*		string_unicode
148	"}"		string
149
150:string_hex2 Escape
151	*		string		noeat
152	"0-9a-fA-F"	string
153
154:string_octal2 Escape
155	*		string		noeat
156	"0-7"		string_octal3
157
158:string_octal3 Escape
159	*		string		noeat
160	"0-7"		string
161
162:char Constant
163	*		char
164	"\n"		reset
165	"'"		idle
166	"\\"		char_escape	recolor=-1
167
168:char_escape	Escape
169	*		char		recolor=-2
170	"\\'"	char
171
172:backtick	Constant
173	*		backtick
174	"`"		idle
175	"\\"		backtick_escape	recolor=-1
176	"$@"		backtick_subst recolor=-1
177
178:backtick_subst Escape
179	*		backtick	noeat recolor=-1
180	"a-zA-Z_0-9"	backtick_subst
181
182:backtick_escape Escape
183	*		backtick
184	"x"		backtick_hex1
185	"c"		backtick_ctrl
186	"N"		backtick_named
187	"0-7"		backtick_octal2
188	"\n"		backtick		recolor=-2
189
190:backtick_named Escape
191	*		backtick
192	"{"		backtick_named_rest
193
194:backtick_named_rest Escape
195	*		backtick_named_rest
196	"}"		backtick
197
198:backtick_ctrl Escape
199	*		backtick
200
201:backtick_hex1 Escape
202	*		backtick		noeat
203	"{"		backtick_unicode
204	"0-9a-fA-F"	backtick_hex2
205
206:backtick_unicode Escape
207	*		backtick_unicode
208	"}"		backtick
209
210:backtick_hex2 Escape
211	*		backtick		noeat
212	"0-9a-fA-F"	backtick
213
214:backtick_octal2 Escape
215	*		backtick		noeat
216	"0-7"		backtick_octal3
217
218:backtick_octal3 Escape
219	*		backtick		noeat
220	"0-7"		backtick
221
222:ident	Idle
223	*		idle		noeat strings
224	"if"		kw
225	"unless"	kw
226	"while"		kw
227	"until"		kw
228	"foreach"	kw
229	"sub"		kw
230	"my"		kw
231	"do"		kw
232	"if"		kw
233	"else"		kw
234	"elsif"		kw
235	"for"		kw
236	"continue"	kw
237	"last"		kw
238	"print"		kw
239	"reset"		kw
240	"die"		kw
241	"goto"		kw
242	"require"	kw
243	"use"		kw
244	"eval"		kw
245	"redo"		kw
246	"next"		kw
247	"warn"		kw
248done
249	"a-zA-Z0-9_"	ident
250
251:type Type
252	*	idle	noeat
253
254:kw Keyword
255	*	idle	noeat
256