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