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