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