# Codewars' Markdown Extensions

Codewars adds a few Markdown extensions for writing kata descriptions.

## Sequential Code Blocks

Used to display code blocks only in the language selected by the user.

### Details

- Each code block must have an info string set to a valid language ID. To find the language ID, visit its documentation from the languages page.
- The order of the code blocks/languages doesn't matter.
- To avoid rendering errors/problems:
- Always put an empty line before and after the complete group of code blocks
- Never put empty lines between individual code blocks of the same sequential group.

### Example

```
```javascript
const add = (a, b) => a + b;
```
```typescript
const add = (a: number, b: number) => a + b;
```
```ruby
def add(a, b)
a + b
end
```
```

```
```javascript
const add = (a, b) => a + b;
```
```typescript
const add = (a: number, b: number) => a + b;
```
```ruby
def add(a, b)
a + b
end
```
```

If the active language of the user is TypeScript, the above Markdown is rendered to the following:

`const add = (a: number, b: number) => a + b;`

`const add = (a: number, b: number) => a + b;`

## Conditional Rendering

Conditional rendering blocks renders the content when the language selected by the user matches the condition specified in the info string.

### Basic syntax

```
```if:java
For java, use `Preloaded.check(input)`.
```
```

```
```if:java
For java, use `Preloaded.check(input)`.
```
```

If the selected language is java, this block is showing up in the description, rendered to:

For java, use

`Preloaded.check(input)`

.

### Details

- The language name in the info string has to match a valid language ID. To find the language ID, visit its documentation from the languages page.
- To obtain proper rendering, language-specific blocks need an empty line before and after them, just like code blocks.
- You can use Markdown inside conditional blocks, but be careful when inserting code blocks.
- You can use different kinds of conditions or assigned them to groups of languages using the following syntaxes:
`if:language`

`if:language,language2`

`if-not:language`

`if-not:language1,language2`

### Examples

`if:languages`

```
```if:javascript,typescript
Shown _if_ the active language is JavaScript **or** TypeScript.
```
```if:ruby
Shown _if_ the active language is Ruby.
```
```

```
```if:javascript,typescript
Shown _if_ the active language is JavaScript **or** TypeScript.
```
```if:ruby
Shown _if_ the active language is Ruby.
```
```

If the active language is Ruby, the above renders:

Shown

ifthe active language is Ruby.

`if-not:languages`

```
```if-not:javascript,typescript
Hidden _if_ the active language is JavaScript **or** TypeScript.
```
```if-not:ruby
Hidden _if_ the active language is Ruby.
```
```

```
```if-not:javascript,typescript
Hidden _if_ the active language is JavaScript **or** TypeScript.
```
```if-not:ruby
Hidden _if_ the active language is Ruby.
```
```

If the active language is Ruby, the above renders:

Hidden

ifthe active language is JavaScriptorTypeScript.

### Using Code Blocks Inside Conditional Blocks

To use code blocks within these conditional blocks, use tildes (`~`

) to declare the conditional block or increase the number of backticks used.

```
~~~if:javascript
Used tilde to open conditional block.
```javascript
// Regular code block
```
~~~
```

```
~~~if:javascript
Used tilde to open conditional block.
```javascript
// Regular code block
```
~~~
```

```
````if:javascript
Used 4 backticks
```javascript
// Regular code block
```
````
```

```
````if:javascript
Used 4 backticks
```javascript
// Regular code block
```
````
```

## Math Typesetting

Math typesetting is supported with the following two syntaxes:

- Inline: code span starting and ending with
`$`

- Block: code block with info string
`math`

See the support table on KaTeX to find all of the supported syntaxes.

### Commonly used Symbols/Functions

Symbol/Function | Represents |
---|---|

`x_n` | indice |

`x^n` | exponant |

`\lt` | lower than |

`\leq` | lower or equal |

`\lgt` | greater than |

`\geq` | greater or equal |

`\sum` | sigma (sum) |

`\prod` | pi (big) |

`\pi` | pi (small) |

`\to` | arrow |

`\lim` | limit |

`\infty` | infinite |

`{ ... }` | to group instructions |

### Example

```
Suppose `$ x_n \leq l \leq y_n $` and `$ \lim_{n\to\infty} (x_n - y_n) = 0 $`,
prove that `$ \lim_{n\to\infty} x_n = \lim_{n\to\infty} y_n = l $`.
```math
x_n \leq l \leq y_n
```
```math
\lim_{n\to\infty} (x_n - y_n) = 0
```
```math
\lim_{n\to\infty} x_n = \lim_{n\to\infty} y_n = l
```
```

```
Suppose `$ x_n \leq l \leq y_n $` and `$ \lim_{n\to\infty} (x_n - y_n) = 0 $`,
prove that `$ \lim_{n\to\infty} x_n = \lim_{n\to\infty} y_n = l $`.
```math
x_n \leq l \leq y_n
```
```math
\lim_{n\to\infty} (x_n - y_n) = 0
```
```math
\lim_{n\to\infty} x_n = \lim_{n\to\infty} y_n = l
```
```

Renders: