summaryrefslogtreecommitdiff
path: root/Documentation/sphinx/kernel_include.py
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>2025-08-22 16:19:28 +0200
committerJonathan Corbet <corbet@lwn.net>2025-08-29 15:54:43 -0600
commit9be2a5c3c8b7aad78341677002c428c996cc9570 (patch)
tree3f2e9ab99ae33a139ba58bfd29417b9084a9c3f9 /Documentation/sphinx/kernel_include.py
parent67faed5d213d87f3b5bdfc78a12d1d9d3e7aac46 (diff)
downloadlwn-9be2a5c3c8b7aad78341677002c428c996cc9570.tar.gz
lwn-9be2a5c3c8b7aad78341677002c428c996cc9570.zip
docs: kernel_include.py: move code and literal functions
Simplify run() even more by moving the code which handles with code and literal blocks to their own functions. No functional changes. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Link: https://lore.kernel.org/r/78d08dfa3f08adabc30bf93b8a1cde4e19b7bd41.1755872208.git.mchehab+huawei@kernel.org
Diffstat (limited to 'Documentation/sphinx/kernel_include.py')
-rwxr-xr-xDocumentation/sphinx/kernel_include.py102
1 files changed, 60 insertions, 42 deletions
diff --git a/Documentation/sphinx/kernel_include.py b/Documentation/sphinx/kernel_include.py
index 4cdd1c77982e..0909eb3a07ea 100755
--- a/Documentation/sphinx/kernel_include.py
+++ b/Documentation/sphinx/kernel_include.py
@@ -160,6 +160,52 @@ class KernelInclude(Include):
return rawtext
+ def literal(self, path, tab_width, rawtext):
+ """Output a literal block"""
+
+ # Convert tabs to spaces, if `tab_width` is positive.
+ if tab_width >= 0:
+ text = rawtext.expandtabs(tab_width)
+ else:
+ text = rawtext
+ literal_block = nodes.literal_block(rawtext, source=path,
+ classes=self.options.get("class", []))
+ literal_block.line = 1
+ self.add_name(literal_block)
+ if "number-lines" in self.options:
+ try:
+ startline = int(self.options["number-lines"] or 1)
+ except ValueError:
+ raise self.error(":number-lines: with non-integer start value")
+ endline = startline + len(include_lines)
+ if text.endswith("\n"):
+ text = text[:-1]
+ tokens = NumberLines([([], text)], startline, endline)
+ for classes, value in tokens:
+ if classes:
+ literal_block += nodes.inline(value, value,
+ classes=classes)
+ else:
+ literal_block += nodes.Text(value, value)
+ else:
+ literal_block += nodes.Text(text, text)
+ return [literal_block]
+
+ def code(self, path, include_lines):
+ """Output a code block"""
+
+ self.options["source"] = path
+ codeblock = CodeBlock(self.name,
+ [self.options.pop("code")], # arguments
+ self.options,
+ include_lines,
+ self.lineno,
+ self.content_offset,
+ self.block_text,
+ self.state,
+ self.state_machine)
+ return codeblock.run()
+
def run(self):
"""Include a file as part of the content of this reST file."""
env = self.state.document.settings.env
@@ -200,6 +246,13 @@ class KernelInclude(Include):
startline = self.options.get("start-line", None)
endline = self.options.get("end-line", None)
+ if "literal" in self.options:
+ ouptut_type = "literal"
+ elif "code" in self.options:
+ ouptut_type = "code"
+ else:
+ ouptut_type = "normal"
+
# Get optional arguments to related to cross-references generation
if 'generate-cross-refs' in self.options:
rawtext = self.read_rawtext_with_xrefs(env, path)
@@ -213,50 +266,15 @@ class KernelInclude(Include):
rawtext = self.apply_range(rawtext)
+ if ouptut_type == "literal":
+ return self.literal(path, tab_width, rawtext)
+
include_lines = statemachine.string2lines(rawtext, tab_width,
convert_whitespace=True)
- if "literal" in self.options:
- # Convert tabs to spaces, if `tab_width` is positive.
- if tab_width >= 0:
- text = rawtext.expandtabs(tab_width)
- else:
- text = rawtext
- literal_block = nodes.literal_block(rawtext, source=path,
- classes=self.options.get("class", [])
- )
- literal_block.line = 1
- self.add_name(literal_block)
- if "number-lines" in self.options:
- try:
- startline = int(self.options["number-lines"] or 1)
- except ValueError:
- raise self.error(":number-lines: with non-integer start value")
- endline = startline + len(include_lines)
- if text.endswith("\n"):
- text = text[:-1]
- tokens = NumberLines([([], text)], startline, endline)
- for classes, value in tokens:
- if classes:
- literal_block += nodes.inline(value, value,
- classes=classes)
- else:
- literal_block += nodes.Text(value, value)
- else:
- literal_block += nodes.Text(text, text)
- return [literal_block]
-
- if "code" in self.options:
- self.options["source"] = path
- codeblock = CodeBlock(self.name,
- [self.options.pop("code")], # arguments
- self.options,
- include_lines, # content
- self.lineno,
- self.content_offset,
- self.block_text,
- self.state,
- self.state_machine)
- return codeblock.run()
+
+ if ouptut_type == "code":
+ return self.code(path, include_lines)
+
self.state_machine.insert_input(include_lines, path)
return []