Code docs

This commit is contained in:
ef3d0c3e 2024-11-03 10:03:18 +01:00
parent bab2a9431d
commit 6266e7373b

View file

@ -1,8 +1,95 @@
@import ../template.nml @import ../template.nml
%<make_doc({"Blocks"}, "Code", "Code")>% %<make_doc({"Blocks"}, "Code", "Code")>%
# Code # Full blocks of code
```C, NML supports different kind of code blocks. The *full block* modes creates a (optionally titled), numbered code block.
TEST 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)``