Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

LaTeX.ebnf 4.81 KB
Newer Older
Eckhart Arnold's avatar
Eckhart Arnold committed
1
# LaTeX-Grammar for DHParser
Eckhart Arnold's avatar
Eckhart Arnold committed
2

3
@ testing    = True
4
@ whitespace = /[ \t]*(?:\n(?![ \t]*\n)[ \t]*)?/    # optional whitespace, including at most one linefeed
5
@ comment    = /%.*(?:\n|$)/
Eckhart Arnold's avatar
Eckhart Arnold committed
6

7

Eckhart Arnold's avatar
Eckhart Arnold committed
8
9
10
11
12
latexdoc       = preamble document
preamble       = { command }+

document       = [PARSEP] "\begin{document}" [PARSEP]
                 frontpages [PARSEP]
13
14
                 (Chapters | Sections) [PARSEP]
                 [Bibliography] [Index] [PARSEP]
Eckhart Arnold's avatar
Eckhart Arnold committed
15
16
17
                 "\end{document}" [PARSEP] §EOF
frontpages     = sequence

Eckhart Arnold's avatar
Eckhart Arnold committed
18
19
20
21
22
23
24

#######################################################################
#
# document structure
#
#######################################################################

Eckhart Arnold's avatar
Eckhart Arnold committed
25
26
Chapters       = { Chapter [PARSEP] }+
Chapter        = "\Chapter" block [PARSEP] { sequence | Sections }
Eckhart Arnold's avatar
Eckhart Arnold committed
27

Eckhart Arnold's avatar
Eckhart Arnold committed
28
29
Sections       = { Section [PARSEP] }+
Section        = "\Section" block [PARSEP] { sequence | SubSections }
Eckhart Arnold's avatar
Eckhart Arnold committed
30

Eckhart Arnold's avatar
Eckhart Arnold committed
31
32
SubSections    = { SubSection [PARSEP] }+
SubSection     = "\SubSection" block [PARSEP] { sequence | SubSubSections }
Eckhart Arnold's avatar
Eckhart Arnold committed
33

34
SubSubSections = { SubSubSection [PARSEP] }+
Eckhart Arnold's avatar
Eckhart Arnold committed
35
36
SubSubSection  = "\SubSubSection" block [PARSEP] { sequence | Paragraphs }

Eckhart Arnold's avatar
Eckhart Arnold committed
37
38
Paragraphs     = { Paragraph [PARSEP] }+
Paragraph      = "\paragraph" block [PARSEP] { sequence | SubParagraphs }
Eckhart Arnold's avatar
Eckhart Arnold committed
39

Eckhart Arnold's avatar
Eckhart Arnold committed
40
41
SubParagraphs  = { SubParagraph [PARSEP] }+
SubParagraph   = "\subparagpaph" block [PARSEP] { sequence }
Eckhart Arnold's avatar
Eckhart Arnold committed
42

43
44
Bibliography   = "\bibliography" block [PARSEP]
Index          = "\printindex" [PARSEP]
Eckhart Arnold's avatar
Eckhart Arnold committed
45
46
47
48
49
50
51


#######################################################################
#
# document content
#
#######################################################################
52

Eckhart Arnold's avatar
Eckhart Arnold committed
53

Eckhart Arnold's avatar
Eckhart Arnold committed
54
55
56
#### block environments ####

block_enrivonment   = known_enrivonment | generic_enrivonment
57
58
known_enrivonment   = itemize | enumerate | figure | table | quotation
                    | verbatim
Eckhart Arnold's avatar
Eckhart Arnold committed
59
60
61
62
63
64
generic_enrivonment = begin_enrivonment sequence §end_enrivonment

itemize             = "\begin{itemize}" [PARSEP] { item } §"\end{itemize}"
enumerate           = "\begin{enumerate}" [PARSEP] {item } §"end{enumerate}"
item                = "\item" [PARSEP] sequence

65
66
67
68
69
70
71
figure              = "\begin{figure}" sequence "\end{figure}"
quotation           = ("\begin{quotation}" sequence "\end{quotation}")
                    | ("\begin{quote}" sequence "\end{quote}")
verbatim            = "\begin{verbatim}" sequence "\end{verbatim}"
table               = "\begin{tabular}" table_config sequence "\end{tabular}"
table_config        = "{" /[lcr|]+/~ "}"

Eckhart Arnold's avatar
Eckhart Arnold committed
72
73
74
75
76
77

#### paragraphs and sequences of paragraphs ####

block_of_paragraphs = /{/ sequence §/}/
sequence            = { (paragraph | block_enrivonment ) [PARSEP] }+

78
79
paragraph           = { !blockcmd text_elements //~ }+
text_elements       = command | text | block | inline_enrivonment
Eckhart Arnold's avatar
Eckhart Arnold committed
80
81
82
83
84
85


#### inline enivronments ####

inline_enrivonment  = known_inline_env | generic_inline_env
known_inline_env    = inline_math
86
generic_inline_env  = begin_enrivonment { text_elements }+ §end_enrivonment
Eckhart Arnold's avatar
Eckhart Arnold committed
87
88
89
begin_enrivonment   = "\begin{" §NAME §"}"
end_enrivonment     = "\end{" §::NAME §"}"

90
inline_math         = "$" MATH "$"
Eckhart Arnold's avatar
Eckhart Arnold committed
91
92
93


#### commands ####
Eckhart Arnold's avatar
Eckhart Arnold committed
94

95
command             = known_command | generic_command
Eckhart Arnold's avatar
Eckhart Arnold committed
96
known_command       = footnote | includegraphics | caption
Eckhart Arnold's avatar
Eckhart Arnold committed
97
generic_command     = CMDNAME [[ //~ config ] //~ block ]
Eckhart Arnold's avatar
Eckhart Arnold committed
98

Eckhart Arnold's avatar
Eckhart Arnold committed
99
footnote            = "\footnote" block_of_paragraphs
Eckhart Arnold's avatar
Eckhart Arnold committed
100
101
includegraphics     = "\includegraphics" config block
caption             = "\caption" block
Eckhart Arnold's avatar
Eckhart Arnold committed
102
103
104
105
106
107

#######################################################################
#
# low-level text and character sequences
#
#######################################################################
108

109
config     = "[" cfgtext §"]"
110
block      = /{/ { text_elements } §/}/
Eckhart Arnold's avatar
Eckhart Arnold committed
111

112
113
114
text       = { cfgtext | (BRACKETS //~) }+
cfgtext    = { word_sequence | (ESCAPED //~) }+
word_sequence = { TEXTCHUNK //~ }+
115

Eckhart Arnold's avatar
Eckhart Arnold committed
116
117
118
119
blockcmd   = "\" ("begin{" ("enumerate" | "itemize" | "figure" | "quote"
                            | "quotation" | "tabular") "}"
                 | "subsection" | "section" | "chapter" | "subsubsection"
                 | "paragraph" | "subparagraph" | "item")
120

Eckhart Arnold's avatar
Eckhart Arnold committed
121
122
123
124
125
126
127

#######################################################################
#
# Primitives
#
#######################################################################

128
CMDNAME    = /\\(?:(?!_)\w)+/~
129
NAME       = /\w+/~
130
MATH       = /[\w_^{}[\]]*/~
Eckhart Arnold's avatar
Eckhart Arnold committed
131

132
ESCAPED    = /\\[%$&_\/]/
133
134
135
136
137
138
139
BRACKETS   = /[\[\]]/                       # left or right square bracket: [ ]
TEXTCHUNK  = /[^\\%$&\{\}\[\]\s\n]+/        # some piece of text excluding whitespace,
                                            # linefeed and special characters
WSPC       = /[ \t]+/                       # (horizontal) whitespace
LF         = !PARSEP /[ \t]*\n[ \t]*/       # LF but not an empty line
PARSEP     = /[ \t]*(?:\n[ \t]*)+\n[ \t]*/  # at least one empty line, i.e.
                                            # [whitespace] linefeed [whitespace] linefeed
140
EOF        = !/./