xref: /Universal-ctags/optlib/rdoc.ctags (revision d876d1767e93ecd47ebb5aed65bc0687c2586dbf)
1*d876d176SMasatake YAMATO#
2*d876d176SMasatake YAMATO#  Copyright (c) 2022, Red Hat, Inc.
3*d876d176SMasatake YAMATO#  Copyright (c) 2022, Masatake YAMATO
4*d876d176SMasatake YAMATO#
5*d876d176SMasatake YAMATO#  Author: Masatake YAMATO <yamato@redhat.com>
6*d876d176SMasatake YAMATO#
7*d876d176SMasatake YAMATO# This program is free software; you can redistribute it and/or
8*d876d176SMasatake YAMATO# modify it under the terms of the GNU General Public License
9*d876d176SMasatake YAMATO# as published by the Free Software Foundation; either version 2
10*d876d176SMasatake YAMATO# of the License, or (at your option) any later version.
11*d876d176SMasatake YAMATO#
12*d876d176SMasatake YAMATO# This program is distributed in the hope that it will be useful,
13*d876d176SMasatake YAMATO# but WITHOUT ANY WARRANTY; without even the implied warranty of
14*d876d176SMasatake YAMATO# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*d876d176SMasatake YAMATO# GNU General Public License for more details.
16*d876d176SMasatake YAMATO#
17*d876d176SMasatake YAMATO# You should have received a copy of the GNU General Public License
18*d876d176SMasatake YAMATO# along with this program; if not, write to the Free Software
19*d876d176SMasatake YAMATO# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20*d876d176SMasatake YAMATO# USA.
21*d876d176SMasatake YAMATO#
22*d876d176SMasatake YAMATO# This parser extracts headers written in the RDoc Markup explained in
23*d876d176SMasatake YAMATO# https://ruby.github.io/rdoc/RDoc/Markup.html#class-RDoc::Markup-label-RDoc+Markup+Reference
24*d876d176SMasatake YAMATO#
25*d876d176SMasatake YAMATO--langdef=RDoc
26*d876d176SMasatake YAMATO--map-RDoc=+.rdoc
27*d876d176SMasatake YAMATO
28*d876d176SMasatake YAMATO--kinddef-RDoc=h,L1Header, Level 1 headers
29*d876d176SMasatake YAMATO--kinddef-RDoc=i,L2Header, Level 2 headers
30*d876d176SMasatake YAMATO--kinddef-RDoc=j,L3Header, Level 3 headers
31*d876d176SMasatake YAMATO--kinddef-RDoc=k,L4Header, Level 4 headers
32*d876d176SMasatake YAMATO--kinddef-RDoc=l,L5Header, Level 5 headers
33*d876d176SMasatake YAMATO--kinddef-RDoc=m,L6Header, Level 6 headers
34*d876d176SMasatake YAMATO
35*d876d176SMasatake YAMATO# Separator definitions must come after kind definitions.
36*d876d176SMasatake YAMATO# This is the limitation of optlib2c.
37*d876d176SMasatake YAMATO--_scopesep-RDoc=*/*:""
38*d876d176SMasatake YAMATO
39*d876d176SMasatake YAMATO--_prelude-RDoc={{
40*d876d176SMasatake YAMATO    /kindTable [
41*d876d176SMasatake YAMATO        /L1Header /L2Header /L3Header /L4Header /L5Header /L6Header
42*d876d176SMasatake YAMATO    ] def
43*d876d176SMasatake YAMATO
44*d876d176SMasatake YAMATO    /depthForCork {
45*d876d176SMasatake YAMATO        :kind kindTable exch _aindex pop
46*d876d176SMasatake YAMATO    } def
47*d876d176SMasatake YAMATO    /depthForStr {
48*d876d176SMasatake YAMATO        length 1 sub
49*d876d176SMasatake YAMATO    } def
50*d876d176SMasatake YAMATO
51*d876d176SMasatake YAMATO    % endline:int goal:int scopePopUpTo -
52*d876d176SMasatake YAMATO    /scopePopUpTo
53*d876d176SMasatake YAMATO    {
54*d876d176SMasatake YAMATO        {
55*d876d176SMasatake YAMATO            _scopetop {
56*d876d176SMasatake YAMATO                dup
57*d876d176SMasatake YAMATO                % endline goal scope scope
58*d876d176SMasatake YAMATO                depthForCork 2 index depthForStr ge {
59*d876d176SMasatake YAMATO                    % endline goal scope
60*d876d176SMasatake YAMATO                    2 index end:
61*d876d176SMasatake YAMATO                    _scopepop
62*d876d176SMasatake YAMATO                } {
63*d876d176SMasatake YAMATO                    pop
64*d876d176SMasatake YAMATO                    exit
65*d876d176SMasatake YAMATO                } ifelse
66*d876d176SMasatake YAMATO            } {
67*d876d176SMasatake YAMATO                exit
68*d876d176SMasatake YAMATO            } ifelse
69*d876d176SMasatake YAMATO        } loop
70*d876d176SMasatake YAMATO        pop
71*d876d176SMasatake YAMATO        pop
72*d876d176SMasatake YAMATO    } def
73*d876d176SMasatake YAMATO}}
74*d876d176SMasatake YAMATO
75*d876d176SMasatake YAMATO--regex-RDoc=/^(?:#[ \t])*(={1,6})[ \t]*([^=].*)[ \t]*$//{pcre2}{{
76*d876d176SMasatake YAMATO    \1 length kindTable length le {
77*d876d176SMasatake YAMATO        \2
78*d876d176SMasatake YAMATO        kindTable \1 length 1 sub get
79*d876d176SMasatake YAMATO        2 /start _matchloc
80*d876d176SMasatake YAMATO        _tag _commit
81*d876d176SMasatake YAMATO        dup :line 1 sub \1 scopePopUpTo
82*d876d176SMasatake YAMATO        _scopetop {
83*d876d176SMasatake YAMATO            1 index exch scope: _scopepush
84*d876d176SMasatake YAMATO        } {
85*d876d176SMasatake YAMATO            _scopepush
86*d876d176SMasatake YAMATO        } ifelse
87*d876d176SMasatake YAMATO    } if
88*d876d176SMasatake YAMATO}}
89