Markdown Overview Buttons Tabs Footnotes Collapse ToC Navigation Formula Page-Specific Meta Custom Components
To highlight a line in a code snippet, add /*!*/
symbol to the beginning
of the line:
1link```go | clojure-example.go
2linkpackage main
3link
4linkimport "fmt"
5link
6linkfunc intSeq() func() int {
7link/*!*/ i := 0
8link/*!*/ return func() int {
9link/*!*/ i++
10link/*!*/ return i
11link/*!*/ }
12link}
13link
14linkfunc main() {
15link nextInt := intSeq()
16link fmt.Println(nextInt())
17link fmt.Println(nextInt())
18link fmt.Println(nextInt())
19link
20link/*!*/ newInts := intSeq()
21link/*!*/ fmt.Println(newInts())
22link}
23link```
1linkpackage main
2link
3linkimport "fmt"
4link
5linkfunc intSeq() func() int {
6link i := 0
7link return func() int {
8link i++
9link return i
10link }
11link}
12link
13linkfunc main() {
14link nextInt := intSeq()
15link fmt.Println(nextInt())
16link fmt.Println(nextInt())
17link fmt.Println(nextInt())
18link
19link newInts := intSeq()
20link fmt.Println(newInts())
21link}
The symbol /*!*/
is pre-processed by codedoc before syntax highlighting and removed from the code,
so it will not cause any issues in languages where /* ... */
is not a valid comment syntax. This
also means that you should not factor it in for line indentation and spacing:
1link```go
2linkfunc a() int {
3link/*!*/ i := 0 // --> these two lines will have same indentation
4link i++ // --> these two lines will have same indentation
5link}
6link```
1linkfunc a() int {
2link i := 0 // --> these two lines will have same indentation
3link i++ // --> these two lines will have same indentation
4link}
Similar to /*!*/
syntax, you can add /*+*/
or /*-*/
at the beginning of each
line to indicate that this is an added or removed line:
1link```rust
2linkuse std::net::TcpListener;
3link/*+*/use std::net::TcpStream;
4link/*+*/use std::io::prelude::*;
5link
6linkfn main() {
7link let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
8link
9link for stream in listener.incoming() {
10link let stream = stream.unwrap();
11link
12link/*-*/ println!("Connection established!");
13link/*+*/ handle_connection(stream);
14link }
15link}
16link
17link/*+*/fn handle_connection(mut stream: TcpStream) {
18link/*+*/ let mut buffer = [0; 512];
19link/*+*/ stream.read(&mut buffer).unwrap();
20link/*+*/ println!("Request: {}", String::from_utf8_lossy(&buffer[..]));
21link/*+*/}
22link```
1linkuse std::net::TcpListener;
2linkuse std::net::TcpStream;
3linkuse std::io::prelude::*;
4link
5linkfn main() {
6link let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
7link
8link for stream in listener.incoming() {
9link let stream = stream.unwrap();
10link
11link println!("Connection established!");
12link handle_connection(stream);
13link }
14link}
15link
16linkfn handle_connection(mut stream: TcpStream) {
17link let mut buffer = [0; 512];
18link stream.read(&mut buffer).unwrap();
19link println!("Request: {}", String::from_utf8_lossy(&buffer[..]));
20link}
Similar to /*!*/
, /*+*/
and /*-*/
are pre-processed and language independent, i.e. you can use exactly the same
syntax regardless of the language you are using it in.
You can use /*~*/
in your code snippets to underline some part that would result in an error:
1link```csharp
2linkpublic Option method() =>
3link new Dictionary()./*~*/TryGetValue/*~*/(0);
4link```
1linkpublic Option<int> method() =>
2link new Dictionary<int, int>()./*~*/TryGetValue~~~~~~~~~~~/*~*/(0);
Similarly you can use /*~warn~*/
to underline parts that would result in a warning:
1link```csharp
2linkpublic Option method() =>
3link new Dictionary()./*~warn~*/TryGetValue/*~warn~*/(0);
4link```
1linkpublic Option<int> method() =>
2link new Dictionary<int, int>()./*~warn~*/TryGetValue~~~~~~~~~~~/*~warn~*/(0);
Both /*~*/
and /*~warn~*/
work on multiple lines:
1link```csharp
2linkpublic Option /*~*/method() =>
3link new Dictionary().TryGetValue/*~*/(0);
4link```
1linkpublic Option<int> /*~*/method~~~~~~(~)~ ~=>~~
2link ~~new~~~ ~Dictionary<int, int>~~~~~~~~~~~~~~~~~~~~(~)~.~TryGetValue~~~~~~~~~~~/*~*/(0);
warning WARNING
Since
/*~*/
and/*~warn~*/
are interleaved within rest of the syntax, they ONLY WORK in languages supporting/* ... */
or(* ... *)
comment syntax. They are also not pre-processed, so they will be copied alongside the rest of the code.
info NOTE
For languages supporting
(* ... *)
syntax (such as F#), you can simply use(*~*)
and(*~warn~*)
for achieving this effect.