1# inko.ctags --- regex parser for the Inko programming language
2# (https://inko-lang.org/)
3#
4#  Copyright (c) 2019, Yorick Peterse
5#
6#  Author: Yorick Peterse <yorick@yorickpeterse.com>
7#
8# This program is free software; you can redistribute it and/or
9# modify it under the terms of the GNU General Public License
10# as published by the Free Software Foundation; either version 2
11# of the License, or (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
21# USA.
22
23--langdef=Inko
24--map-Inko=+.inko
25--kinddef-Inko=o,class,Class definition
26--kinddef-Inko=m,method,Method definition
27--kinddef-Inko=t,trait,Trait definition
28--kinddef-Inko=a,attribute,Attribute definition
29--kinddef-Inko=c,constant,Constant definition
30--kinddef-Inko=r,reopen,Reopen class
31
32--_fielddef-Inko=implements,Trait being implemented
33
34--fields-Inko=+{implements}
35
36--_tabledef-Inko=toplevel
37--_tabledef-Inko=class
38--_tabledef-Inko=trait
39--_tabledef-Inko=method
40--_tabledef-Inko=comment
41--_tabledef-Inko=impl
42--_tabledef-Inko=let
43--_tabledef-Inko=sstring
44--_tabledef-Inko=dstring
45--_tabledef-Inko=tstring
46
47# Handle and ignore the bodies of strings
48--_mtable-regex-Inko=toplevel/'//{tenter=sstring}
49--_mtable-regex-Inko=toplevel/"//{tenter=dstring}
50--_mtable-regex-Inko=toplevel/`//{tenter=tstring}
51
52--_mtable-regex-Inko=sstring/'//{tleave}
53--_mtable-regex-Inko=sstring/\\'//
54--_mtable-regex-Inko=sstring/.//
55
56--_mtable-regex-Inko=dstring/"//{tleave}
57--_mtable-regex-Inko=dstring/\\"//
58--_mtable-regex-Inko=dstring/.//
59
60--_mtable-regex-Inko=tstring/`//{tleave}
61--_mtable-regex-Inko=tstring/\\`//
62--_mtable-regex-Inko=tstring/.//
63
64--_mtable-regex-Inko=toplevel/#//{tenter=comment}
65--_mtable-regex-Inko=toplevel/[[:blank:]]*class[[:blank:]]+//{tenter=class}
66--_mtable-regex-Inko=toplevel/[[:blank:]]*trait[[:blank:]]+//{tenter=trait}
67--_mtable-regex-Inko=toplevel/[[:blank:]]*def[[:blank:]]+//{tenter=method}
68--_mtable-regex-Inko=toplevel/[[:blank:]]*impl[[:blank:]]+//{tenter=impl}
69--_mtable-regex-Inko=toplevel/[[:blank:]]*let[[:blank:]]+//{tenter=let}
70--_mtable-regex-Inko=toplevel/\{//{placeholder}{scope=push}
71--_mtable-regex-Inko=toplevel/\}//{scope=pop}
72--_mtable-regex-Inko=toplevel/(@[a-zA-Z0-9_]+):/\1/a/{scope=ref}
73--_mtable-regex-Inko=toplevel/.//
74
75--_mtable-regex-Inko=class/([A-Z][a-zA-Z0-9_?]*)[^{]*/\1/o/{scope=push}
76--_mtable-regex-Inko=class/\{//{tleave}
77--_mtable-regex-Inko=class/.//
78
79--_mtable-regex-Inko=trait/([A-Z][a-zA-Z0-9_?]*)[^{]*/\1/t/{scope=push}
80--_mtable-regex-Inko=trait/\{//{tleave}
81--_mtable-regex-Inko=trait/.//
82
83--_mtable-regex-Inko=method/([a-zA-Z0-9_?]+|\[\]=?|\^|&|\||\*|\+|\-|\/|>>|<<|%)/\1/m/{scope=push}
84--_mtable-regex-Inko=method/\{|\n//{scope=pop}{tleave}
85--_mtable-regex-Inko=method/.//
86
87--_mtable-regex-Inko=impl/([A-Z][a-zA-Z0-9_?]*)[[:blank:]]+for[[:blank:]]+([A-Z][a-zA-Z0-9_?]*)[^{]*/\2/r/{scope=push}{_field=implements:\1}
88--_mtable-regex-Inko=impl/([A-Z][a-zA-Z0-9_?]*)[^{]*/\1/r/{scope=push}
89--_mtable-regex-Inko=impl/\{//{tleave}
90--_mtable-regex-Inko=impl/.//
91
92--_mtable-regex-Inko=let/([A-Z][a-zA-Z0-9_]+)/\1/c/{scope=ref}{tleave}
93
94--_mtable-regex-Inko=comment/\n//{tleave}
95--_mtable-regex-Inko=comment/.//
96