/
section.py
115 lines (79 loc) · 2.69 KB
/
section.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# -*- coding: utf-8 -*-
"""
This module implements the section type classes.
.. :copyright: (c) 2014 by Jelte Fennema.
:license: MIT, see License for more details.
"""
from .base_classes import Container, Command
from .labelref import Marker, Label
class Section(Container):
"""A class that represents a section."""
#: A section should normally start in its own paragraph
end_paragraph = True
#: Default prefix to use with Marker
marker_prefix = "sec"
#: Number the sections when the section element is compatible,
#: by changing the `~.Section` class default all
#: subclasses will also have the new default.
numbering = True
def __init__(self, title, numbering=None, *, label=True, **kwargs):
"""
Args
----
title: str
The section title.
numbering: bool
Add a number before the section title.
label: Label or bool or str
Can set a label manually or use a boolean to set
preference between automatic or no label
"""
self.title = title
if numbering is not None:
self.numbering = numbering
if isinstance(label, Label):
self.label = label
elif isinstance(label, str):
if ':' in label:
label = label.split(':', 1)
self.label = Label(Marker(label[1], label[0]))
else:
self.label = Label(Marker(label, self.marker_prefix))
elif label:
self.label = Label(Marker(title, self.marker_prefix))
else:
self.label = None
super().__init__(**kwargs)
def dumps(self):
"""Represent the section as a string in LaTeX syntax.
Returns
-------
str
"""
if not self.numbering:
num = '*'
else:
num = ''
string = Command(self.latex_name + num, self.title).dumps()
if self.label is not None:
string += '%\n' + self.label.dumps()
string += '%\n' + self.dumps_content()
return string
class Part(Section):
"""A class that represents a part."""
marker_prefix = "part"
class Chapter(Section):
"""A class that represents a chapter."""
marker_prefix = "chap"
class Subsection(Section):
"""A class that represents a subsection."""
marker_prefix = "subsec"
class Subsubsection(Section):
"""A class that represents a subsubsection."""
marker_prefix = "ssubsec"
class Paragraph(Section):
"""A class that represents a paragraph."""
marker_prefix = "para"
class Subparagraph(Section):
"""A class that represents a subparagraph."""
marker_prefix = "subpara"