Syntax highlighting#
Elsie uses Pygments
to provide syntax highlighting. You can use any supported language from
this list.
You can use the code
function on a
box to render text with syntax highlighting. The first parameter of the function is the language
syntax that should be highlighted.
slide.box().code("python", """
name = "Elsie"
print("Hello", name)
""")
Differences to text
#
The code
method behaves similarly as the text
method, with two exceptions:
- The
code
method uses the text style"code"
as a base style (instead of"default"
). - If you want to use inline styles, you have to explicitly enable them by passing
use_styles=True
.
Line numbering#
You can render line numbers using the parameter line_numbers
. The style of line numbers can be
modified by changing the code_lineno
style.
style = slide.get_style(
"code_lineno",
full_style=False
).compose(elsie.TextStyle(color="red"))
slide.set_style("code_lineno", style)
slide.box().code("python", """
a = 1
b = 2
c = 3
""", line_numbers=True)
Line and inline boxes#
The text
and code
methods
return a special TextBoxItem
item that offers the following two
methods:
line_box
creates a box around a specified line (line numbers are counted from 0). Other arguments are forwarded to the box. You can use this to create e.g. colored boxes around selected code lines.
box = slide.box().code("python", """
name = "Elsie"
print("Hello", name)
""")
box.line_box(1, z_level=-1).rect(bg_color="orange")
inline_box
creates a box around text which is wrapped with the given style. If there are multiple occurrences of the specified inline style, you can specify which one do you want by thenth
argument.style_name
can be any existing style name or a dummy style that starts with the"#"
character. Dummy styles do not have to be defined and they do not have any visual effect. They serve purely for defining inline boxes.
text_item = slide.box().text("""This is a long
text ~#A{that} takes
3 lines.
""")
text_item.inline_box("#A", z_level=-1).rect(bg_color="green")
Note that boxes created by line_box
and inline_box
are always created after the box containing
the text. Therefore, to render them below the text, you have to use the z_level
or below
parameters (see Modifying render order).