95 lines
2.5 KiB
Text
95 lines
2.5 KiB
Text
@import ../template.nml
|
|
%<make_doc({"Blocks"}, "Code", "Code")>%
|
|
|
|
# Full blocks of code
|
|
|
|
NML supports different kind of code blocks. The *full block* modes creates a (optionally titled), numbered code block.
|
|
You can also specify the language of the block to get proper highlighting via the [syntect](https://docs.rs/syntect/latest/syntect/) crate.
|
|
|
|
**Example:**
|
|
#+LAYOUT_BEGIN Split
|
|
*The following...*
|
|
``Markdown
|
|
`\``C, Factorial in C
|
|
int factorial(int n)
|
|
{
|
|
if (n <= 1)
|
|
return 1;
|
|
return n * factorial(n - 1);
|
|
}
|
|
`\``
|
|
``
|
|
#+LAYOUT_NEXT
|
|
*...gives the following*
|
|
```C, Factorial in C
|
|
int factorial(int n)
|
|
{
|
|
if (n <= 1)
|
|
return 1;
|
|
return n * factorial(n - 1);
|
|
}
|
|
```
|
|
#+LAYOUT_END
|
|
|
|
##+* Properties
|
|
* ``line_offset``: (number) The number of the first line (defaults: 0)
|
|
|
|
# Mini blocks
|
|
|
|
Mini blocks are code blocks that can span on a single line (thus blending within a paragraph).
|
|
|
|
**Example:**
|
|
* ``Plain Text,\``Rust, str.chars().iter().fold(0, |acc, _| acc + 1)\`` `` → ``Rust, str.chars().iter().fold(0, |acc, _| acc + 1)``
|
|
* ``Plain Text, \``C++, auto car{ std::make_unique<Car>(...) };\`` `` → ``C++, auto car{ std::make_unique<Car>(...) };``
|
|
|
|
Mini blocks can span multiple lines, in which case they become similar to full code blocks with the following differences:
|
|
- **No title:** Mini blocks cannot have a title at all
|
|
- **No line numbers:** Line numbers won't be shown
|
|
|
|
**Example:**
|
|
#+LAYOUT_BEGIN Split
|
|
*The following...*
|
|
``Markdown
|
|
\``Rust
|
|
fn real_position(
|
|
source: Rc<dyn Source>,
|
|
position: usize
|
|
) -> (Rc<dyn Source>, usize)
|
|
{
|
|
if let Some(parent) = source.parent
|
|
{
|
|
return real_position(parent.clone(), source.apply_offsets(position));
|
|
}
|
|
return (source.clone(), source.apply_offsets(position));
|
|
}
|
|
\``
|
|
``
|
|
#+LAYOUT_NEXT
|
|
*...gives the following*
|
|
``Rust
|
|
fn real_position(
|
|
source: Rc<dyn Source>,
|
|
position: usize
|
|
) -> (Rc<dyn Source>, usize)
|
|
{
|
|
if let Some(parent) = source.parent
|
|
{
|
|
return real_position(parent.clone(), source.apply_offsets(position));
|
|
}
|
|
return (source.clone(), source.apply_offsets(position));
|
|
}
|
|
``
|
|
#+LAYOUT_END
|
|
|
|
# Code theme
|
|
|
|
Code theme can be controlled by the variable ``code.theme``. The default value is ``base16-ocean.dark``.
|
|
According to [syntect](https://docs.rs/syntect/latest/syntect/highlighting/struct.ThemeSet.html#method.load_defaults)'s
|
|
documentation, the following themes are enabled:
|
|
* ``base16-ocean.dark``
|
|
* ``base16-eighties.dark``
|
|
* ``base16-mocha.dark``
|
|
* ``base16-ocean.light``
|
|
* ``InspiredGitHub``
|
|
* ``Solarized (dark)``
|
|
* ``Solarized (light)``
|