10a9e78a8SMasatake YAMATO# 20a9e78a8SMasatake YAMATO# 30a9e78a8SMasatake YAMATO# Copyright (c) 2016, Red Hat, Inc. 40a9e78a8SMasatake YAMATO# Copyright (c) 2016, Masatake YAMATO 50a9e78a8SMasatake YAMATO# 60a9e78a8SMasatake YAMATO# Author: Masatake YAMATO <yamato@redhat.com> 70a9e78a8SMasatake YAMATO# 80a9e78a8SMasatake YAMATO# This program is free software; you can redistribute it and/or 90a9e78a8SMasatake YAMATO# modify it under the terms of the GNU General Public License 100a9e78a8SMasatake YAMATO# as published by the Free Software Foundation; either version 2 110a9e78a8SMasatake YAMATO# of the License, or (at your option) any later version. 120a9e78a8SMasatake YAMATO# 130a9e78a8SMasatake YAMATO# This program is distributed in the hope that it will be useful, 140a9e78a8SMasatake YAMATO# but WITHOUT ANY WARRANTY; without even the implied warranty of 150a9e78a8SMasatake YAMATO# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 160a9e78a8SMasatake YAMATO# GNU General Public License for more details. 170a9e78a8SMasatake YAMATO# 180a9e78a8SMasatake YAMATO# You should have received a copy of the GNU General Public License 190a9e78a8SMasatake YAMATO# along with this program; if not, write to the Free Software 200a9e78a8SMasatake YAMATO# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 210a9e78a8SMasatake YAMATO# USA. 220a9e78a8SMasatake YAMATO# 230a9e78a8SMasatake YAMATO# 246b1ec470SMasatake YAMATO--langdef=Man 256b1ec470SMasatake YAMATO--map-Man=+.1 266b1ec470SMasatake YAMATO--map-Man=+.2 276b1ec470SMasatake YAMATO--map-Man=+.3 286b1ec470SMasatake YAMATO--map-Man=+.4 296b1ec470SMasatake YAMATO--map-Man=+.5 306b1ec470SMasatake YAMATO--map-Man=+.6 316b1ec470SMasatake YAMATO--map-Man=+.7 326b1ec470SMasatake YAMATO--map-Man=+.8 336b1ec470SMasatake YAMATO--map-Man=+.9 34f8d15bd7SMasatake YAMATO 355d3bedcdSMasatake YAMATO# For perl modules 365d3bedcdSMasatake YAMATO--map-Man=+.3pm 375d3bedcdSMasatake YAMATO 385d3bedcdSMasatake YAMATO# For systemtap 395d3bedcdSMasatake YAMATO--map-Man=+.3stap 405d3bedcdSMasatake YAMATO--map-Man=+.7stap 415d3bedcdSMasatake YAMATO 426b1ec470SMasatake YAMATO--kinddef-Man=t,title,titles 436b1ec470SMasatake YAMATO--kinddef-Man=s,section,sections 44*a2073a83SMasatake YAMATO--kinddef-Man=S,subsection,sub sections 45*a2073a83SMasatake YAMATO 46*a2073a83SMasatake YAMATO--_scopesep-Man=*/*:"" 47f8d15bd7SMasatake YAMATO 4880fd3f70SMasatake YAMATO--_tabledef-Man=main 49373135a8SMasatake YAMATO--_tabledef-Man=section 502b2165a2SMasatake YAMATO--_tabledef-Man=sectionheading 51*a2073a83SMasatake YAMATO--_tabledef-Man=subsection 52*a2073a83SMasatake YAMATO--_tabledef-Man=subsectionheading 532b2165a2SMasatake YAMATO 542b2165a2SMasatake YAMATO--_prelude-Man={{ 55*a2073a83SMasatake YAMATO % adjustment:int FILL-END-OF-SCOPE - 56*a2073a83SMasatake YAMATO % 57*a2073a83SMasatake YAMATO % Note: The group 1 of a regex matching is assumed. 58*a2073a83SMasatake YAMATO % An entry on the scope stack is assumed. 59*a2073a83SMasatake YAMATO /fill-end-of-scope { 60*a2073a83SMasatake YAMATO _scopetop pop exch 61*a2073a83SMasatake YAMATO % scope-top:int adjustment:int 62*a2073a83SMasatake YAMATO 1 /start _matchloc _matchloc2line exch 63*a2073a83SMasatake YAMATO % scope-top:int line adjustment:int 64*a2073a83SMasatake YAMATO 2 copy gt { 65*a2073a83SMasatake YAMATO sub end: 662b2165a2SMasatake YAMATO } { 67*a2073a83SMasatake YAMATO pop pop pop 682b2165a2SMasatake YAMATO } ifelse 69*a2073a83SMasatake YAMATO } def 70*a2073a83SMasatake YAMATO % adjustment:int /replace HEADING-ACTION - 71*a2073a83SMasatake YAMATO % /push HEADING-ACTION - 72*a2073a83SMasatake YAMATO /heading-action { 73*a2073a83SMasatake YAMATO /replace eq { 74*a2073a83SMasatake YAMATO % 75*a2073a83SMasatake YAMATO % Before removing the tag at the top of the scope stack, 76*a2073a83SMasatake YAMATO % fill the end field of the tag. 77*a2073a83SMasatake YAMATO % 78*a2073a83SMasatake YAMATO % input0.man 79*a2073a83SMasatake YAMATO % ---------------------------------------------------- 80*a2073a83SMasatake YAMATO % .SH SEC1 81*a2073a83SMasatake YAMATO % ... 82*a2073a83SMasatake YAMATO %E: This is the end of the SEC1. 83*a2073a83SMasatake YAMATO % .SH 84*a2073a83SMasatake YAMATO %C: SEC2 85*a2073a83SMasatake YAMATO % 86*a2073a83SMasatake YAMATO % ---------------------------------------------------- 87*a2073a83SMasatake YAMATO % 88*a2073a83SMasatake YAMATO % C represents the current input line. The parser must 89*a2073a83SMasatake YAMATO % fill the end field of "SEC1", the tag at the top, 90*a2073a83SMasatake YAMATO % with the line number of E. 91*a2073a83SMasatake YAMATO % 92*a2073a83SMasatake YAMATO % E = C - 2 93*a2073a83SMasatake YAMATO % 94*a2073a83SMasatake YAMATO % input1.man 95*a2073a83SMasatake YAMATO % ---------------------------------------------------- 96*a2073a83SMasatake YAMATO % .SH SEC3 97*a2073a83SMasatake YAMATO % ... 98*a2073a83SMasatake YAMATO %E: This is the end of the SEC1. 99*a2073a83SMasatake YAMATO %C: .SH SEC4 100*a2073a83SMasatake YAMATO % 101*a2073a83SMasatake YAMATO % ---------------------------------------------------- 102*a2073a83SMasatake YAMATO % 103*a2073a83SMasatake YAMATO % In this case 104*a2073a83SMasatake YAMATO % 105*a2073a83SMasatake YAMATO % E = C - 1 106*a2073a83SMasatake YAMATO % 107*a2073a83SMasatake YAMATO % The offset for the adjustment depends on the conctxt. 108*a2073a83SMasatake YAMATO % 109*a2073a83SMasatake YAMATO fill-end-of-scope 1102b2165a2SMasatake YAMATO _scopepop 1112b2165a2SMasatake YAMATO } if 1122b2165a2SMasatake YAMATO 1132b2165a2SMasatake YAMATO _scopetop { 1142b2165a2SMasatake YAMATO . exch scope: 1152b2165a2SMasatake YAMATO } if 1162b2165a2SMasatake YAMATO . _scopepush 1172b2165a2SMasatake YAMATO } def 1182b2165a2SMasatake YAMATO}} 11980fd3f70SMasatake YAMATO 120373135a8SMasatake YAMATO--_tabledef-Man=EOF 121373135a8SMasatake YAMATO--_tabledef-Man=SKIP 122373135a8SMasatake YAMATO--_tabledef-Man=REST 123373135a8SMasatake YAMATO--_tabledef-Man=GUARD 124373135a8SMasatake YAMATO 125*a2073a83SMasatake YAMATO# 126*a2073a83SMasatake YAMATO# helper tables 127*a2073a83SMasatake YAMATO# 128373135a8SMasatake YAMATO--_mtable-regex-Man=GUARD/([^\n.]|\.[^\nst])[^\n]*\n//{icase} 129373135a8SMasatake YAMATO--_mtable-regex-Man=SKIP/[^\n]*\n|[^\n]+// 130373135a8SMasatake YAMATO--_mtable-regex-Man=EOF///{scope=clear}{tquit} 131373135a8SMasatake YAMATO--_mtable-extend-Man=REST+SKIP 132373135a8SMasatake YAMATO--_mtable-extend-Man=REST+EOF 133373135a8SMasatake YAMATO 134*a2073a83SMasatake YAMATO# 135*a2073a83SMasatake YAMATO# main table 136*a2073a83SMasatake YAMATO# 137373135a8SMasatake YAMATO--_mtable-extend-Man=main+GUARD 138373135a8SMasatake YAMATO--_mtable-regex-Man=main/\.TH[\t ]+"([^"]+)"[^\n]*\n/\1/t/{icase}{scope=set} 139373135a8SMasatake YAMATO--_mtable-regex-Man=main/\.TH[\t ]+([^\t \n]+)[^\n]*\n/\1/t/{icase}{scope=set} 140373135a8SMasatake YAMATO--_mtable-regex-Man=main/\.SH[\t ]+"([^"\n]+)"[^\n]*\n/\1/s/{icase}{scope=push}{tenter=section} 141373135a8SMasatake YAMATO--_mtable-regex-Man=main/\.SH[\t ]+([^\n]+)\n/\1/s/{icase}{scope=push}{tenter=section} 1422b2165a2SMasatake YAMATO--_mtable-regex-Man=main/\.SH[\t ]*\n//{icase}{tenter=sectionheading}{{ 1432b2165a2SMasatake YAMATO /push 1442b2165a2SMasatake YAMATO}} 145373135a8SMasatake YAMATO--_mtable-extend-Man=main+REST 146373135a8SMasatake YAMATO 147*a2073a83SMasatake YAMATO# 148*a2073a83SMasatake YAMATO# section table 149*a2073a83SMasatake YAMATO# 150373135a8SMasatake YAMATO--_mtable-extend-Man=section+GUARD 151373135a8SMasatake YAMATO--_mtable-regex-Man=section/\.SH[\t ]+"([^"\n]+)"[^\n]*\n/\1/s/{icase}{scope=replace} 152373135a8SMasatake YAMATO--_mtable-regex-Man=section/\.SH[\t ]+([^\n]+)\n/\1/s/{icase}{scope=replace} 153*a2073a83SMasatake YAMATO--_mtable-regex-Man=section/(\.SH)[\t ]*\n//{icase}{tjump=sectionheading}{{ 154*a2073a83SMasatake YAMATO 2 /replace 155*a2073a83SMasatake YAMATO}} 156*a2073a83SMasatake YAMATO--_mtable-regex-Man=section/\.SS[\t ]+"([^"\n]+)"[^\n]*\n/\1/S/{icase}{scope=push}{tenter=subsection} 157*a2073a83SMasatake YAMATO--_mtable-regex-Man=section/\.SS[\t ]+([^\n]+)\n/\1/S/{icase}{scope=push}{tenter=subsection} 158*a2073a83SMasatake YAMATO--_mtable-regex-Man=section/\.SS[\t ]*\n//{icase}{tenter=subsectionheading}{{ 159*a2073a83SMasatake YAMATO /push 1602b2165a2SMasatake YAMATO}} 161373135a8SMasatake YAMATO--_mtable-extend-Man=section+REST 1622b2165a2SMasatake YAMATO 163*a2073a83SMasatake YAMATO# 164*a2073a83SMasatake YAMATO# sectionheading 165*a2073a83SMasatake YAMATO# 166*a2073a83SMasatake YAMATO--_mtable-regex-Man=sectionheading/[ \t]*([^\n]+)\n/\1/s/{tjump=section}{{ 167*a2073a83SMasatake YAMATO heading-action 1682b2165a2SMasatake YAMATO}} 1692b2165a2SMasatake YAMATO--_mtable-extend-Man=sectionheading+REST 170*a2073a83SMasatake YAMATO 171*a2073a83SMasatake YAMATO# 172*a2073a83SMasatake YAMATO# subsection 173*a2073a83SMasatake YAMATO# 174*a2073a83SMasatake YAMATO--_mtable-extend-Man=subsection+GUARD 175*a2073a83SMasatake YAMATO--_mtable-regex-Man=subsection/\.SS[\t ]+"([^"\n]+)"[^\n]*\n/\1/S/{icase}{scope=replace} 176*a2073a83SMasatake YAMATO--_mtable-regex-Man=subsection/\.SS[\t ]+([^\n]+)\n/\1/S/{icase}{scope=replace} 177*a2073a83SMasatake YAMATO--_mtable-regex-Man=subsection/\.SS[\t ]*\n//{icase}{tjump=subsectionheading}{{ 178*a2073a83SMasatake YAMATO 2 /replace 179*a2073a83SMasatake YAMATO}} 180*a2073a83SMasatake YAMATO--_mtable-regex-Man=subsection/(\.SH)///{icase}{_advanceTo=0start}{tleave}{{ 181*a2073a83SMasatake YAMATO 1 fill-end-of-scope 182*a2073a83SMasatake YAMATO _scopepop 183*a2073a83SMasatake YAMATO}} 184*a2073a83SMasatake YAMATO--_mtable-extend-Man=subsection+REST 185*a2073a83SMasatake YAMATO 186*a2073a83SMasatake YAMATO# 187*a2073a83SMasatake YAMATO# subsectionheading 188*a2073a83SMasatake YAMATO# 189*a2073a83SMasatake YAMATO--_mtable-regex-Man=subsectionheading/[ \t]*([^\n]+)\n/\1/S/{tjump=subsection}{{ 190*a2073a83SMasatake YAMATO heading-action 191*a2073a83SMasatake YAMATO}} 192*a2073a83SMasatake YAMATO--_mtable-extend-Man=subsectionheading+REST 193