1# 2# 3# Copyright (c) 2018, Red Hat, Inc. 4# Copyright (c) 2018, Masatake YAMATO 5# 6# Author: Masatake YAMATO <yamato@redhat.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# 24 25--langdef=Markdown 26--map-Markdown=+.md 27--map-Markdown=+.markdown 28 29--_scopesep-Markdown=*/*:"" 30 31--kinddef-Markdown=c,chapter,chapsters 32--kinddef-Markdown=s,section,sections 33--kinddef-Markdown=S,subsection,subsections 34--kinddef-Markdown=t,subsubsection,subsubsections 35--kinddef-Markdown=T,l4subsection,level 4 subsections 36--kinddef-Markdown=u,l5subsection,level 5 subsections 37 38--_fielddef-Markdown=sectionMarker,character used for declaring section(#, ##, =, or -) 39 40 41--_prelude-Markdown={{ 42 % group:int SCOPEPOPWITHADJUSTMENT - 43 /scopePopWithAdjustment { 44 _scopetop { 45 % group:int index:int 46 dup 3 -1 roll 47 % index:int index:int group:int 48 _matchloc end: 49 % index:int 50 dup :end 51 % index:int endline:int true 52 % or index:int false 53 { 54 dup 1 gt { 55 1 sub end: 56 } { pop } ifelse 57 } if 58 _scopepop 59 } if 60 } def 61}} 62 63--_tabledef-Markdown=frontmatter 64--_tabledef-Markdown=main 65--_tabledef-Markdown=main_sharp 66--_tabledef-Markdown=chapter 67--_tabledef-Markdown=chapter_sharp 68--_tabledef-Markdown=section 69--_tabledef-Markdown=section_sharp 70--_tabledef-Markdown=subsection 71--_tabledef-Markdown=subsection_sharp 72--_tabledef-Markdown=subsubsection 73--_tabledef-Markdown=subsubsection_sharp 74--_tabledef-Markdown=l4subsection 75--_tabledef-Markdown=l4subsection_sharp 76--_tabledef-Markdown=l5subsection 77--_tabledef-Markdown=l5subsection_sharp 78 79--_tabledef-Markdown=emptyLine 80--_tabledef-Markdown=gfmLeave 81--_tabledef-Markdown=rest 82--_tabledef-Markdown=code 83 84# Handle GFM style codeblock in this table. 85# https://github.github.com/gfm/#fenced-code-blocks 86--_tabledef-Markdown=codeblockBacktick 87--_tabledef-Markdown=codeblockTildes 88 89 90--_mtable-regex-Markdown=emptyLine/^([\t ]*)[\n]+// 91 92--_mtable-extend-Markdown=gfmLeave+emptyLine 93--_mtable-regex-Markdown=gfmLeave/^([^\n]+)[\n](=+|-+)[\n]//{tleave}{_advanceTo=0start}{{ 94 1 scopePopWithAdjustment 95}} 96 97--_mtable-regex-Markdown=rest/^[^\n]*[\n]+// 98--_mtable-regex-Markdown=rest/^[^\n]*//{tquit} 99 100--_mtable-regex-Markdown=code/^[ \t]*````*[ \t]*([a-zA-Z0-9][-#+a-zA-Z0-9]*)?[^`\n]*[\n]//{tenter=codeblockBacktick}{_guest=\1,0end,} 101--_mtable-regex-Markdown=code/^[ \t]*~~~~*[ \t]*([a-zA-Z0-9][-#+a-zA-Z0-9]*)?[^~\n]*[\n]//{tenter=codeblockTildes}{_guest=\1,0end,} 102 103# 104# Frontmatter 105# 106# https://gohugo.io/content-management/front-matter/ 107# 108 109# YAML area 110--_mtable-regex-Markdown=frontmatter/(---[\n]).*(---[\n])//{tjump=main} 111 112# JSON area 113--_mtable-regex-Markdown=frontmatter/(;;;[\n]).*(;;;[\n])//{tjump=main} 114 115# TOML area 116--_mtable-regex-Markdown=frontmatter/(\+\+\+[\n]).*(\+\+\+[\n])//{tjump=main} 117 118# No frontmatter 119--_mtable-regex-Markdown=frontmatter/.//{_advanceTo=0start}{tjump=main} 120 121 122# 123# Main 124# 125--_mtable-regex-Markdown=main_sharp/^#[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/c/{_field=sectionMarker:##}{scope=push}{tenter=chapter,main} 126--_mtable-regex-Markdown=main_sharp/^#[ \t]+([^\n]+)[\n]*/\1/c/{_field=sectionMarker:#}{scope=push}{tenter=chapter,main} 127--_mtable-regex-Markdown=main_sharp/^##[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/s/{_field=sectionMarker:##}{scope=push}{tenter=section,main} 128--_mtable-regex-Markdown=main_sharp/^##[ \t]+([^\n]+)[\n]*/\1/s/{_field=sectionMarker:#}{scope=push}{tenter=section,main} 129--_mtable-regex-Markdown=main_sharp/^###[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/S/{_field=sectionMarker:##}{scope=push}{tenter=subsection,main} 130--_mtable-regex-Markdown=main_sharp/^###[ \t]+([^\n]+)[\n]*/\1/S/{_field=sectionMarker:#}{scope=push}{tenter=subsection,main} 131--_mtable-regex-Markdown=main_sharp/^####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/t/{_field=sectionMarker:##}{scope=push}{tenter=subsubsection,main} 132--_mtable-regex-Markdown=main_sharp/^####[ \t]+([^\n]+)[\n]*/\1/t/{_field=sectionMarker:#}{scope=push}{tenter=subsubsection,main} 133--_mtable-regex-Markdown=main_sharp/^#####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/T/{_field=sectionMarker:##}{scope=push}{tenter=l4subsection,main} 134--_mtable-regex-Markdown=main_sharp/^#####[ \t]+([^\n]+)[\n]*/\1/T/{_field=sectionMarker:#}{scope=push}{tenter=l4subsection,main} 135--_mtable-regex-Markdown=main_sharp/^######[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/u/{_field=sectionMarker:##}{scope=push}{tenter=l5subsection,main} 136--_mtable-regex-Markdown=main_sharp/^######[ \t]+([^\n]+)[\n]*/\1/u/{_field=sectionMarker:#}{scope=push}{tenter=l5subsection,main} 137--_mtable-regex-Markdown=main_sharp/.//{tjump=main} 138 139--_mtable-regex-Markdown=main/^#//{_advanceTo=0start}{tjump=main_sharp} 140--_mtable-extend-Markdown=main+emptyLine 141--_mtable-extend-Markdown=main+code 142--_mtable-regex-Markdown=main/^([^\n]+)[\n]=+[\n]/\1/c/{_field=sectionMarker:=}{scope=push}{tenter=chapter} 143--_mtable-regex-Markdown=main/^([^\n]+)[\n]-+[\n]/\1/s/{_field=sectionMarker:-}{scope=push}{tenter=section} 144--_mtable-extend-Markdown=main+rest 145 146 147# 148# Chapter 149# 150--_mtable-regex-Markdown=chapter_sharp/(^#{1,1}[ \t]+[^\n]+)//{tleave}{_advanceTo=0start}{{ 151 1 scopePopWithAdjustment 152}} 153--_mtable-regex-Markdown=chapter_sharp/^##[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/s/{_field=sectionMarker:##}{scope=push}{tenter=section,chapter} 154--_mtable-regex-Markdown=chapter_sharp/^##[ \t]+([^\n]+)[\n]*/\1/s/{_field=sectionMarker:#}{scope=push}{tenter=section,chapter} 155--_mtable-regex-Markdown=chapter_sharp/^###[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/S/{_field=sectionMarker:##}{scope=push}{tenter=subsection,chapter} 156--_mtable-regex-Markdown=chapter_sharp/^###[ \t]+([^\n]+)[\n]*/\1/S/{_field=sectionMarker:#}{scope=push}{tenter=subsection,chapter} 157--_mtable-regex-Markdown=chapter_sharp/^####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/t/{_field=sectionMarker:##}{scope=push}{tenter=subsubsection,chapter} 158--_mtable-regex-Markdown=chapter_sharp/^####[ \t]+([^\n]+)[\n]*/\1/t/{_field=sectionMarker:#}{scope=push}{tenter=subsubsection,chapter} 159--_mtable-regex-Markdown=chapter_sharp/^#####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/T/{_field=sectionMarker:##}{scope=push}{tenter=l4subsection,chapter} 160--_mtable-regex-Markdown=chapter_sharp/^#####[ \t]+([^\n]+)[\n]*/\1/T/{_field=sectionMarker:#}{scope=push}{tenter=l4subsection,chapter} 161--_mtable-regex-Markdown=chapter_sharp/^######[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/u/{_field=sectionMarker:##}{scope=push}{tenter=l5subsection,chapter} 162--_mtable-regex-Markdown=chapter_sharp/^######[ \t]+([^\n]+)[\n]*/\1/u/{_field=sectionMarker:#}{scope=push}{tenter=l5subsection,chapter} 163--_mtable-regex-Markdown=chapter_sharp/.//{tjump=chapter} 164 165--_mtable-regex-Markdown=chapter/^#//{_advanceTo=0start}{tjump=chapter_sharp} 166--_mtable-extend-Markdown=chapter+emptyLine 167--_mtable-regex-Markdown=chapter/^([^\n]+)[\n]-+[\n]/\1/s/{_field=sectionMarker:-}{scope=push}{tenter=section} 168--_mtable-regex-Markdown=chapter/^([^\n]+)[\n]=+[\n]//{tleave}{_advanceTo=0start}{{ 169 1 scopePopWithAdjustment 170}} 171--_mtable-extend-Markdown=chapter+code 172--_mtable-extend-Markdown=chapter+rest 173 174# 175# Section 176# 177--_mtable-regex-Markdown=section_sharp/(^#{1,2}[ \t]+[^\n]+)//{tleave}{_advanceTo=0start}{{ 178 1 scopePopWithAdjustment 179}} 180--_mtable-regex-Markdown=section_sharp/^###[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/S/{_field=sectionMarker:##}{scope=push}{tenter=subsection,section} 181--_mtable-regex-Markdown=section_sharp/^###[ \t]+([^\n]+)[\n]*/\1/S/{_field=sectionMarker:#}{scope=push}{tenter=subsection,section} 182--_mtable-regex-Markdown=section_sharp/^####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/t/{_field=sectionMarker:##}{scope=push}{tenter=subsubsection,section} 183--_mtable-regex-Markdown=section_sharp/^####[ \t]+([^\n]+)[\n]*/\1/t/{_field=sectionMarker:#}{scope=push}{tenter=subsubsection,section} 184--_mtable-regex-Markdown=section_sharp/^#####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/T/{_field=sectionMarker:##}{scope=push}{tenter=l4subsection,section} 185--_mtable-regex-Markdown=section_sharp/^#####[ \t]+([^\n]+)[\n]*/\1/T/{_field=sectionMarker:#}{scope=push}{tenter=l4subsection,section} 186--_mtable-regex-Markdown=section_sharp/^######[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/u/{_field=sectionMarker:##}{scope=push}{tenter=l5subsection,section} 187--_mtable-regex-Markdown=section_sharp/^######[ \t]+([^\n]+)[\n]*/\1/u/{_field=sectionMarker:#}{scope=push}{tenter=l5subsection,section} 188--_mtable-regex-Markdown=section_sharp/.//{tjump=section} 189 190--_mtable-regex-Markdown=section/^#//{_advanceTo=0start}{tjump=section_sharp} 191--_mtable-extend-Markdown=section+gfmLeave 192--_mtable-extend-Markdown=section+code 193--_mtable-extend-Markdown=section+rest 194 195 196# 197# Subsection 198# 199--_mtable-regex-Markdown=subsection_sharp/(^#{1,3}[ \t]+[^\n]+)//{tleave}{_advanceTo=0start,subsection}{{ 200 1 scopePopWithAdjustment 201}} 202--_mtable-regex-Markdown=subsection_sharp/^####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/t/{_field=sectionMarker:##}{scope=push}{tenter=subsubsection,subsection} 203--_mtable-regex-Markdown=subsection_sharp/^####[ \t]+([^\n]+)[\n]*/\1/t/{_field=sectionMarker:#}{scope=push}{tenter=subsubsection,subsection} 204--_mtable-regex-Markdown=subsection_sharp/^#####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/T/{_field=sectionMarker:##}{scope=push}{tenter=l4subsection,subsection} 205--_mtable-regex-Markdown=subsection_sharp/^#####[ \t]+([^\n]+)[\n]*/\1/T/{_field=sectionMarker:#}{scope=push}{tenter=l4subsection,subsection} 206--_mtable-regex-Markdown=subsection_sharp/^######[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/u/{_field=sectionMarker:##}{scope=push}{tenter=l5subsection,subsection} 207--_mtable-regex-Markdown=subsection_sharp/^######[ \t]+([^\n]+)[\n]*/\1/u/{_field=sectionMarker:#}{scope=push}{tenter=l5subsection,subsection} 208--_mtable-regex-Markdown=subsection_sharp/.//{tjump=subsection} 209 210--_mtable-regex-Markdown=subsection/^#//{_advanceTo=0start}{tjump=subsection_sharp} 211--_mtable-extend-Markdown=subsection+gfmLeave 212--_mtable-extend-Markdown=subsection+code 213--_mtable-extend-Markdown=subsection+rest 214 215 216# 217# SubSubsection 218# 219--_mtable-regex-Markdown=subsubsection_sharp/(^#{1,4}[ \t]+[^\n]+)//{tleave}{_advanceTo=0start}{{ 220 1 scopePopWithAdjustment 221}} 222--_mtable-regex-Markdown=subsubsection_sharp/^#####[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/T/{_field=sectionMarker:##}{scope=push}{tenter=l4subsection,subsubsection} 223--_mtable-regex-Markdown=subsubsection_sharp/^#####[ \t]+([^\n]+)[\n]*/\1/T/{_field=sectionMarker:#}{scope=push}{tenter=l4subsection,subsubsection} 224--_mtable-regex-Markdown=subsubsection_sharp/^######[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/u/{_field=sectionMarker:##}{scope=push}{tenter=l5subsection,subsubsection} 225--_mtable-regex-Markdown=subsubsection_sharp/^######[ \t]+([^\n]+)[\n]*/\1/u/{_field=sectionMarker:#}{scope=push}{tenter=l5subsection,subsubsection} 226--_mtable-regex-Markdown=subsubsection_sharp/.//{tjump=subsubsection} 227 228--_mtable-regex-Markdown=subsubsection/^#//{_advanceTo=0start}{tjump=subsubsection_sharp} 229--_mtable-extend-Markdown=subsubsection+gfmLeave 230--_mtable-extend-Markdown=subsubsection+code 231--_mtable-extend-Markdown=subsubsection+rest 232 233 234# 235# L4subsection 236# 237--_mtable-regex-Markdown=l4subsection_sharp/(^#{1,5}[ \t]+[^\n]+)//{tleave}{_advanceTo=0start}{{ 238 1 scopePopWithAdjustment 239}} 240--_mtable-regex-Markdown=l4subsection_sharp/^######[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/u/{_field=sectionMarker:##}{scope=push}{tenter=l5subsection,l4subsection} 241--_mtable-regex-Markdown=l4subsection_sharp/^######[ \t]+([^\n]+)[\n]*/\1/u/{_field=sectionMarker:#}{scope=push}{tenter=l5subsection,l4subsection} 242--_mtable-regex-Markdown=l4subsection_sharp/.//{tjump=l4subsection} 243 244--_mtable-regex-Markdown=l4subsection/^#//{_advanceTo=0start}{tjump=l4subsection_sharp} 245--_mtable-extend-Markdown=l4subsection+gfmLeave 246--_mtable-extend-Markdown=l4subsection+code 247--_mtable-extend-Markdown=l4subsection+rest 248 249 250# 251# L5subsection 252# 253--_mtable-regex-Markdown=l5subsection_sharp/^#{1,6}[ \t]+([^\n]+)//{tleave}{_advanceTo=0start}{{ 254 1 scopePopWithAdjustment 255}} 256--_mtable-regex-Markdown=l5subsection_sharp/.//{tjump=l5subsection} 257 258--_mtable-regex-Markdown=l5subsection/^#//{_advanceTo=0start}{tjump=l5subsection_sharp} 259--_mtable-extend-Markdown=l5subsection+gfmLeave 260--_mtable-extend-Markdown=l5subsection+code 261--_mtable-extend-Markdown=l5subsection+rest 262 263 264# 265# Codeblock 266# 267--_mtable-regex-Markdown=codeblockBacktick/^[ \t]*````*[ \t]*[\n]//{tleave}{_guest=,,0start} 268--_mtable-extend-Markdown=codeblockBacktick+rest 269 270--_mtable-regex-Markdown=codeblockTildes/^[ \t]*~~~~*[ \t]*[\n]//{tleave}{_guest=,,0start} 271--_mtable-extend-Markdown=codeblockTildes+rest 272