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 
codemethod 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_boxcreates 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_boxcreates 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 thenthargument.style_namecan 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).