forked from kenkeiras/org-rw
Explicitly extract code block language.
This commit is contained in:
parent
8fe3c27595
commit
5432c23202
@ -113,7 +113,7 @@ BEGIN_BLOCK_RE = re.compile(r"^\s*#\+BEGIN_(?P<subtype>[^ ]+)(?P<arguments>.*)$"
|
||||
END_BLOCK_RE = re.compile(r"^\s*#\+END_(?P<subtype>[^ ]+)\s*$", re.I)
|
||||
RESULTS_DRAWER_RE = re.compile(r"^\s*:results:\s*$", re.I)
|
||||
CodeSnippet = collections.namedtuple(
|
||||
"CodeSnippet", ("name", "content", "result", "arguments")
|
||||
"CodeSnippet", ("name", "content", "result", "language", "arguments")
|
||||
)
|
||||
|
||||
# Groupings
|
||||
@ -916,12 +916,22 @@ class Headline:
|
||||
# the content parsing must be re-thinked
|
||||
contents = contents[:-1]
|
||||
|
||||
language = None
|
||||
if arguments is not None:
|
||||
arguments = arguments.strip()
|
||||
if " " in arguments:
|
||||
language = arguments[: arguments.index(" ")]
|
||||
arguments = arguments[arguments.index(" ") + 1 :]
|
||||
else:
|
||||
language = arguments
|
||||
arguments = None
|
||||
sections.append(
|
||||
{
|
||||
"line_first": start + 1,
|
||||
"line_last": end - 1,
|
||||
"content": contents,
|
||||
"arguments": arguments,
|
||||
"language": language,
|
||||
"name": name,
|
||||
}
|
||||
)
|
||||
@ -977,12 +987,14 @@ class Headline:
|
||||
content = section["content"]
|
||||
code_result = section.get("result", None)
|
||||
arguments = section.get("arguments", None)
|
||||
language = section.get("language", None)
|
||||
name = section.get("name", None)
|
||||
results.append(
|
||||
CodeSnippet(
|
||||
content=content,
|
||||
result=code_result,
|
||||
arguments=arguments,
|
||||
language=language,
|
||||
name=name,
|
||||
)
|
||||
)
|
||||
|
@ -481,6 +481,7 @@ class TestSerde(unittest.TestCase):
|
||||
snippets = list(doc.get_code_snippets())
|
||||
self.assertEqual(len(snippets), 3)
|
||||
self.assertEqual(snippets[0].name, "first-code-name")
|
||||
self.assertEqual(snippets[0].language, "shell")
|
||||
self.assertEqual(
|
||||
snippets[0].content,
|
||||
'echo "This is a test"\n'
|
||||
@ -488,7 +489,7 @@ class TestSerde(unittest.TestCase):
|
||||
+ "exit 0 # Exit successfully",
|
||||
)
|
||||
self.assertEqual(
|
||||
snippets[0].arguments.split(), ["shell", ":results", "verbatim"]
|
||||
snippets[0].arguments.split(), [":results", "verbatim"]
|
||||
)
|
||||
self.assertEqual(
|
||||
snippets[0].result,
|
||||
@ -496,6 +497,7 @@ class TestSerde(unittest.TestCase):
|
||||
)
|
||||
|
||||
self.assertEqual(snippets[1].name, None)
|
||||
self.assertEqual(snippets[1].language, "shell")
|
||||
self.assertEqual(
|
||||
snippets[1].content,
|
||||
'echo "This is another test"\n'
|
||||
@ -507,6 +509,7 @@ class TestSerde(unittest.TestCase):
|
||||
)
|
||||
|
||||
self.assertEqual(snippets[2].name, None)
|
||||
self.assertEqual(snippets[2].language, "c")
|
||||
self.assertEqual(
|
||||
snippets[2].content,
|
||||
"/* This code has to be escaped to\n"
|
||||
|
Loading…
Reference in New Issue
Block a user