mirror of
https://github.com/purocean/yn.git
synced 2026-08-30 17:47:18 +08:00
Add test/md directory with comprehensive markdown feature test documents
Agent-Logs-Url: https://github.com/purocean/yn/sessions/423ca3b8-9674-4d0f-98d1-bc1fd5c33c5d Co-authored-by: purocean <7115690+purocean@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
3c97fc0891
commit
e9731f08a6
@@ -0,0 +1,92 @@
|
||||
# Yank Note Markdown Feature Tests
|
||||
|
||||
This directory contains test documents for all markdown features and extensions supported by Yank Note.
|
||||
|
||||
## Core Markdown Syntax
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [basic-syntax.md](./basic-syntax.md) | Headings, paragraphs, emphasis, links, images, blockquotes, lists, horizontal rules, inline code, code blocks, escape characters, line breaks |
|
||||
| [extended-syntax.md](./extended-syntax.md) | Tables, task lists, definition lists, fenced code blocks with languages |
|
||||
|
||||
## Yank Note Built-in Features
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [front-matter.md](./front-matter.md) | YAML front matter configuration: headingNumber, enableMacro, define, tags, mdOptions, render settings |
|
||||
| [toc.md](./toc.md) | Table of Contents generation with `[toc]{type, level}` syntax |
|
||||
| [macro.md](./macro.md) | Macro replacement with `[= expression =]` syntax, `$doc`, `$seq`, `$export`, `$include` |
|
||||
| [wiki-links.md](./wiki-links.md) | Wiki links `[[file#anchor\|text]]`, image wiki links `![[image]]` |
|
||||
| [hashtags.md](./hashtags.md) | Hashtag/tag syntax `#TagName` |
|
||||
| [footnotes.md](./footnotes.md) | Footnotes with `[^id]` syntax |
|
||||
| [heading-number.md](./heading-number.md) | Automatic heading numbering via `headingNumber: true` |
|
||||
| [list-collapsible.md](./list-collapsible.md) | Collapsible nested lists |
|
||||
|
||||
## Markdown-it Plugin Features
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [superscript-subscript.md](./superscript-subscript.md) | Superscript `^text^` and subscript `~text~` |
|
||||
| [mark.md](./mark.md) | Text highlighting with `==text==` |
|
||||
| [abbreviations.md](./abbreviations.md) | Abbreviation definitions `*[ABBR]: Full Text` |
|
||||
| [emoji.md](./emoji.md) | Emoji shortcodes `:smile:` and emoticons `:)` |
|
||||
| [attributes.md](./attributes.md) | Element attributes `{.class style="..." id="..."}` |
|
||||
| [multimd-table.md](./multimd-table.md) | Advanced tables: multiline cells, row/column span, headerless, multi-body |
|
||||
| [github-alerts.md](./github-alerts.md) | GitHub-style alerts: `[!NOTE]`, `[!TIP]`, `[!WARNING]`, `[!IMPORTANT]`, `[!CAUTION]` |
|
||||
| [containers.md](./containers.md) | Container blocks: tip, warning, danger, details, code-group, group, row/col, section, div |
|
||||
|
||||
## Code Features
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [code-features.md](./code-features.md) | Syntax highlighting, code execution (`--run--`), copy button, line numbers, wrapping |
|
||||
| [code-line-highlighting.md](./code-line-highlighting.md) | Line highlighting with `{.h:lines}` syntax (extension) |
|
||||
|
||||
## Math & Science
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [math-katex.md](./math-katex.md) | KaTeX math: inline `$...$`, block `$$...$$`, matrices, aligned equations, mhchem chemistry |
|
||||
|
||||
## Image & Media
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [image-enhancements.md](./image-enhancements.md) | Image sizing `=WxH`, inline display `?.inline`, white background `?.bgw` |
|
||||
| [html.md](./html.md) | Raw HTML support: tags, styled containers, details/summary, mixed HTML/markdown |
|
||||
|
||||
## Diagrams & Visualization
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [mermaid.md](./mermaid.md) | Mermaid diagrams: flowchart, sequence, class, state, gantt, pie, ER, journey (extension) |
|
||||
| [plantuml.md](./plantuml.md) | PlantUML diagrams: sequence, use case, class, activity, component, state |
|
||||
| [mindmap.md](./mindmap.md) | Mind map with `{.mindmap}` on list items (kityminder-core) |
|
||||
| [echarts.md](./echarts.md) | ECharts: line, bar, pie, scatter, radar charts (extension) |
|
||||
| [drawio.md](./drawio.md) | Draw.io diagrams: link and inline XML syntax (extension) |
|
||||
| [kroki.md](./kroki.md) | Kroki diagrams: WaveDrom, GraphViz, Ditaa, BlockDiag, SeqDiag, ERD, SVGBob, C4 (extension) |
|
||||
| [markmap.md](./markmap.md) | Markmap interactive mind maps with `{.markmap}` or code blocks (extension) |
|
||||
|
||||
## Interactive & Presentation
|
||||
|
||||
| Document | Description |
|
||||
|----------|-------------|
|
||||
| [applet.md](./applet.md) | HTML applets with `<!-- --applet-- -->` marker |
|
||||
| [reveal-js.md](./reveal-js.md) | Reveal.js presentations with `::: section` containers (extension) |
|
||||
| [luckysheet.md](./luckysheet.md) | Luckysheet spreadsheet embedding (extension) |
|
||||
|
||||
## Extension Requirements
|
||||
|
||||
Some features require optional extensions from [@yank-note/extension](https://github.com/purocean/yank-note-extension):
|
||||
|
||||
| Extension | Features |
|
||||
|-----------|----------|
|
||||
| `@yank-note/extension-mermaid` | Mermaid diagrams |
|
||||
| `@yank-note/extension-echarts` | ECharts visualizations |
|
||||
| `@yank-note/extension-drawio` | Draw.io diagrams |
|
||||
| `@yank-note/extension-kroki` | Kroki multi-format diagrams |
|
||||
| `@yank-note/extension-markmap` | Markmap mind maps |
|
||||
| `@yank-note/extension-reveal-js` | Reveal.js presentations |
|
||||
| `@yank-note/extension-code-line-highlighting` | Code line highlighting |
|
||||
| `@yank-note/extension-repl` | Vue REPL applets |
|
||||
| `@yank-note/extension-cloze` | Cloze/flashcard mode |
|
||||
@@ -0,0 +1,37 @@
|
||||
# Abbreviations Test
|
||||
|
||||
This document tests the abbreviation syntax supported by Yank Note via markdown-it-abbr.
|
||||
|
||||
*[HTML]: Hyper Text Markup Language
|
||||
*[CSS]: Cascading Style Sheets
|
||||
*[JS]: JavaScript
|
||||
*[API]: Application Programming Interface
|
||||
*[URL]: Uniform Resource Locator
|
||||
*[JSON]: JavaScript Object Notation
|
||||
*[REST]: Representational State Transfer
|
||||
*[DOM]: Document Object Model
|
||||
*[YAML]: YAML Ain't Markup Language
|
||||
|
||||
## Usage
|
||||
|
||||
When abbreviations are defined, hovering over the abbreviation in the rendered output shows the full form.
|
||||
|
||||
### Web Technologies
|
||||
|
||||
HTML is the standard markup language for creating web pages.
|
||||
|
||||
CSS is used for styling HTML documents.
|
||||
|
||||
JS is the programming language of the web.
|
||||
|
||||
### APIs
|
||||
|
||||
A REST API uses HTTP methods to interact with resources via a URL.
|
||||
|
||||
Data is commonly exchanged in JSON format.
|
||||
|
||||
### Configuration
|
||||
|
||||
YAML is often used for configuration files.
|
||||
|
||||
The DOM represents the structure of an HTML document.
|
||||
@@ -0,0 +1,82 @@
|
||||
# HTML Applet Test
|
||||
|
||||
This document tests the HTML applet feature in Yank Note.
|
||||
|
||||
## Basic Applet
|
||||
|
||||
```html
|
||||
<!-- --applet-- Hello Applet -->
|
||||
<button id="btn" onclick="document.getElementById('output').textContent = 'Hello from Yank Note Applet!'">
|
||||
Click Me
|
||||
</button>
|
||||
<p id="output" style="color: green; font-weight: bold;"></p>
|
||||
```
|
||||
|
||||
## Counter Applet
|
||||
|
||||
```html
|
||||
<!-- --applet-- Counter -->
|
||||
<div style="text-align: center; padding: 20px;">
|
||||
<h3>Counter: <span id="count">0</span></h3>
|
||||
<button onclick="updateCount(1)" style="margin: 5px; padding: 5px 15px;">+1</button>
|
||||
<button onclick="updateCount(-1)" style="margin: 5px; padding: 5px 15px;">-1</button>
|
||||
<button onclick="updateCount(0)" style="margin: 5px; padding: 5px 15px;">Reset</button>
|
||||
</div>
|
||||
<script>
|
||||
let count = 0;
|
||||
function updateCount(delta) {
|
||||
if (delta === 0) count = 0;
|
||||
else count += delta;
|
||||
document.getElementById('count').textContent = count;
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
## Color Picker Applet
|
||||
|
||||
```html
|
||||
<!-- --applet-- Color Picker -->
|
||||
<div style="padding: 10px;">
|
||||
<label>Choose a color: </label>
|
||||
<input type="color" id="colorInput" value="#5470c6" onchange="updateColor()">
|
||||
<div id="colorDisplay" style="width: 100px; height: 100px; margin-top: 10px; background: #5470c6; border-radius: 8px;"></div>
|
||||
<p id="colorValue">#5470c6</p>
|
||||
</div>
|
||||
<script>
|
||||
function updateColor() {
|
||||
const color = document.getElementById('colorInput').value;
|
||||
document.getElementById('colorDisplay').style.background = color;
|
||||
document.getElementById('colorValue').textContent = color;
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
## Hash Calculator Applet
|
||||
|
||||
```html
|
||||
<!-- --applet-- Hash Calculator -->
|
||||
<div style="padding: 10px;">
|
||||
<textarea id="hashInput" rows="3" style="width: 100%;" placeholder="Enter text to hash..."></textarea>
|
||||
<br>
|
||||
<button onclick="calcHash()" style="margin-top: 5px; padding: 5px 15px;">Calculate SHA-256</button>
|
||||
<p><strong>Hash:</strong> <code id="hashOutput">-</code></p>
|
||||
</div>
|
||||
<script>
|
||||
async function calcHash() {
|
||||
const text = document.getElementById('hashInput').value;
|
||||
const encoder = new TextEncoder();
|
||||
const data = encoder.encode(text);
|
||||
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
|
||||
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
||||
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
||||
document.getElementById('hashOutput').textContent = hashHex;
|
||||
}
|
||||
</script>
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Use `<!-- --applet-- [Title] -->` marker in the first line of an HTML code block
|
||||
- Applets have access to the `ctx` object for Yank Note API interaction
|
||||
- Applets run in a sandboxed iframe environment
|
||||
- Both HTML and JavaScript can be used within applets
|
||||
@@ -0,0 +1,97 @@
|
||||
# Element Attributes Test
|
||||
|
||||
This document tests the element attributes syntax supported by Yank Note via markdown-it-attributes.
|
||||
|
||||
## Basic Attributes
|
||||
|
||||
### Class Attribute
|
||||
|
||||
This paragraph has a custom class.{.custom-class}
|
||||
|
||||
**Bold text with class**{.highlight}
|
||||
|
||||
### Style Attribute
|
||||
|
||||
**Red colored text**{style="color: red;"}
|
||||
|
||||
*Blue italic text*{style="color: blue; font-size: 1.2em;"}
|
||||
|
||||
### ID Attribute
|
||||
|
||||
#### Section with ID {#my-section}
|
||||
|
||||
You can link to this section using `#my-section`.
|
||||
|
||||
### Multiple Attributes
|
||||
|
||||
**Styled text**{.custom-class style="color: green; font-weight: bold;" id="styled-element"}
|
||||
|
||||
## Built-in CSS Classes
|
||||
|
||||
### Inline Display
|
||||
|
||||
{.inline}
|
||||
|
||||
### White Background
|
||||
|
||||
{.bgw}
|
||||
|
||||
### Text Alignment
|
||||
|
||||
This is centered text.{.text-center}
|
||||
|
||||
This is right-aligned text.{.text-right}
|
||||
|
||||
This is left-aligned text.{.text-left}
|
||||
|
||||
### Border
|
||||
|
||||
{.with-border}
|
||||
|
||||
### Print Control
|
||||
|
||||
This content will not appear in print/PDF.{.skip-print}
|
||||
|
||||
This content will not appear in HTML export.{.skip-export}
|
||||
|
||||
Start a new page before this in print.{.new-page}
|
||||
|
||||
Avoid breaking this across pages.{.avoid-page-break}
|
||||
|
||||
### Brightness
|
||||
|
||||
This image has reduced brightness in dark mode.{.reduce-brightness}
|
||||
|
||||
### Copy Text
|
||||
|
||||
Click to copy this text.{.copy-inner-text}
|
||||
|
||||
## Attributes on Different Elements
|
||||
|
||||
### On Headings
|
||||
|
||||
#### Custom Heading {.text-center style="color: purple;"}
|
||||
|
||||
### On Links
|
||||
|
||||
[Styled link](https://example.com){style="color: orange; text-decoration: none;"}
|
||||
|
||||
### On Images
|
||||
|
||||
{style="width: 100px; border-radius: 8px;"}
|
||||
|
||||
### On Code
|
||||
|
||||
`highlighted code`{style="background: yellow; color: black;"}
|
||||
|
||||
### On Blockquotes
|
||||
|
||||
> This blockquote has a custom style.
|
||||
{style="border-left-color: green;"}
|
||||
|
||||
### On Lists
|
||||
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Item 3
|
||||
{.custom-list}
|
||||
@@ -0,0 +1,150 @@
|
||||
# Basic Markdown Syntax Test
|
||||
|
||||
This document tests all basic markdown syntax features supported by Yank Note.
|
||||
|
||||
## Headings
|
||||
|
||||
# Heading 1
|
||||
## Heading 2
|
||||
### Heading 3
|
||||
#### Heading 4
|
||||
##### Heading 5
|
||||
###### Heading 6
|
||||
|
||||
## Paragraphs
|
||||
|
||||
This is a paragraph. It contains multiple sentences.
|
||||
This sentence is on a new line but in the same paragraph (with `breaks: true`, it renders as a line break).
|
||||
|
||||
This is another paragraph separated by a blank line.
|
||||
|
||||
## Emphasis
|
||||
|
||||
*italic text* and _also italic_
|
||||
|
||||
**bold text** and __also bold__
|
||||
|
||||
***bold and italic*** and ___also bold and italic___
|
||||
|
||||
~~strikethrough text~~
|
||||
|
||||
## Links
|
||||
|
||||
[Inline link](https://example.com)
|
||||
|
||||
[Link with title](https://example.com "Example Site")
|
||||
|
||||
[Reference link][ref1]
|
||||
|
||||
[ref1]: https://example.com "Reference Link"
|
||||
|
||||
Auto-linked URL: https://example.com (with `linkify: true`)
|
||||
|
||||
## Images
|
||||
|
||||

|
||||
|
||||
![Reference image][img1]
|
||||
|
||||
[img1]: https://via.placeholder.com/100 "Reference Image"
|
||||
|
||||
## Blockquotes
|
||||
|
||||
> This is a blockquote.
|
||||
>
|
||||
> It can span multiple paragraphs.
|
||||
|
||||
> Nested blockquotes:
|
||||
>
|
||||
> > This is a nested blockquote.
|
||||
> >
|
||||
> > > And even deeper.
|
||||
|
||||
## Lists
|
||||
|
||||
### Unordered List
|
||||
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Sub-item 2.1
|
||||
- Sub-item 2.2
|
||||
- Sub-sub-item 2.2.1
|
||||
- Item 3
|
||||
|
||||
* Alternative bullet style
|
||||
* Item B
|
||||
|
||||
+ Another bullet style
|
||||
+ Item C
|
||||
|
||||
### Ordered List
|
||||
|
||||
1. First item
|
||||
2. Second item
|
||||
1. Sub-item 2.1
|
||||
2. Sub-item 2.2
|
||||
3. Third item
|
||||
|
||||
### Mixed List
|
||||
|
||||
1. Ordered item
|
||||
- Unordered sub-item
|
||||
- Another sub-item
|
||||
2. Another ordered item
|
||||
|
||||
## Horizontal Rules
|
||||
|
||||
---
|
||||
|
||||
***
|
||||
|
||||
___
|
||||
|
||||
## Inline Code
|
||||
|
||||
Use `console.log()` to print output.
|
||||
|
||||
Inline code with backticks: ``code with ` inside``.
|
||||
|
||||
## Code Blocks
|
||||
|
||||
Indented code block:
|
||||
|
||||
function hello() {
|
||||
console.log("Hello, World!");
|
||||
}
|
||||
|
||||
Fenced code block:
|
||||
|
||||
```javascript
|
||||
function greet(name) {
|
||||
return `Hello, ${name}!`;
|
||||
}
|
||||
```
|
||||
|
||||
```python
|
||||
def greet(name):
|
||||
return f"Hello, {name}!"
|
||||
```
|
||||
|
||||
```
|
||||
Plain code block without language
|
||||
```
|
||||
|
||||
## Escape Characters
|
||||
|
||||
\*Not italic\*
|
||||
|
||||
\# Not a heading
|
||||
|
||||
\[Not a link\]
|
||||
|
||||
\`Not inline code\`
|
||||
|
||||
## Line Breaks
|
||||
|
||||
First line with two trailing spaces
|
||||
Second line (hard break)
|
||||
|
||||
First line with backslash\
|
||||
Second line (hard break)
|
||||
@@ -0,0 +1,194 @@
|
||||
# Code Features Test
|
||||
|
||||
This document tests code-related features in Yank Note: highlighting, running, copying, and wrapping.
|
||||
|
||||
## Syntax Highlighting
|
||||
|
||||
### JavaScript
|
||||
|
||||
```javascript
|
||||
class Calculator {
|
||||
constructor() {
|
||||
this.result = 0;
|
||||
}
|
||||
|
||||
add(value) {
|
||||
this.result += value;
|
||||
return this;
|
||||
}
|
||||
|
||||
multiply(value) {
|
||||
this.result *= value;
|
||||
return this;
|
||||
}
|
||||
|
||||
getResult() {
|
||||
return this.result;
|
||||
}
|
||||
}
|
||||
|
||||
const calc = new Calculator();
|
||||
console.log(calc.add(5).multiply(3).getResult()); // 15
|
||||
```
|
||||
|
||||
### TypeScript
|
||||
|
||||
```typescript
|
||||
interface User {
|
||||
id: number;
|
||||
name: string;
|
||||
email: string;
|
||||
roles: string[];
|
||||
}
|
||||
|
||||
function greetUser(user: User): string {
|
||||
return `Hello, ${user.name}! You have ${user.roles.length} roles.`;
|
||||
}
|
||||
|
||||
const user: User = {
|
||||
id: 1,
|
||||
name: "Alice",
|
||||
email: "alice@example.com",
|
||||
roles: ["admin", "editor"],
|
||||
};
|
||||
```
|
||||
|
||||
### HTML
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Test Page</title>
|
||||
<style>
|
||||
body { font-family: sans-serif; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello World</h1>
|
||||
<p>This is a test page.</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
### Rust
|
||||
|
||||
```rust
|
||||
fn fibonacci(n: u32) -> u64 {
|
||||
match n {
|
||||
0 => 0,
|
||||
1 => 1,
|
||||
_ => fibonacci(n - 1) + fibonacci(n - 2),
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
for i in 0..10 {
|
||||
println!("fib({}) = {}", i, fibonacci(i));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Code Execution (`--run--`)
|
||||
|
||||
### JavaScript Execution
|
||||
|
||||
```js
|
||||
// --run--
|
||||
const items = ['apple', 'banana', 'cherry'];
|
||||
items.forEach((item, index) => {
|
||||
console.log(`${index + 1}. ${item}`);
|
||||
});
|
||||
```
|
||||
|
||||
### JavaScript with HTML Output
|
||||
|
||||
```js
|
||||
// --run-- --output-html--
|
||||
const colors = ['red', 'green', 'blue'];
|
||||
const html = colors.map(c =>
|
||||
`<span style="color: ${c}; font-weight: bold;">${c}</span>`
|
||||
).join(' | ');
|
||||
output = html;
|
||||
```
|
||||
|
||||
### Node.js Execution
|
||||
|
||||
```js
|
||||
// --run-- node
|
||||
const os = require('os');
|
||||
console.log('Platform:', os.platform());
|
||||
console.log('Architecture:', os.arch());
|
||||
console.log('CPUs:', os.cpus().length);
|
||||
```
|
||||
|
||||
### Python Execution
|
||||
|
||||
```python
|
||||
# --run--
|
||||
import math
|
||||
|
||||
for i in range(1, 6):
|
||||
print(f"sqrt({i}) = {math.sqrt(i):.4f}")
|
||||
```
|
||||
|
||||
### Shell Execution
|
||||
|
||||
```bash
|
||||
# --run--
|
||||
echo "Current date: $(date)"
|
||||
echo "Current directory: $(pwd)"
|
||||
echo "User: $(whoami)"
|
||||
```
|
||||
|
||||
### Custom Compile Command (C)
|
||||
|
||||
```c
|
||||
// --run-- gcc $tmpFile.c -o $tmpFile.out && $tmpFile.out
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
printf("Hello from C!\n");
|
||||
for (int i = 1; i <= 5; i++) {
|
||||
printf("Count: %d\n", i);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
## Code Copy
|
||||
|
||||
All code blocks support a copy button on hover. The language label is displayed in the top-right corner.
|
||||
|
||||
Inline code also supports `Ctrl/Cmd + Click` to copy: `npm install yank-note`
|
||||
|
||||
## Code Wrapping
|
||||
|
||||
Code wrapping can be enabled with `wrap-code: true` in front matter or render settings.
|
||||
|
||||
```text
|
||||
This is a very long line that should demonstrate code wrapping behavior when the wrap-code option is enabled. Without wrapping, this line will overflow and require horizontal scrolling. With wrapping enabled, it should break into multiple lines.
|
||||
```
|
||||
|
||||
## Line Numbers
|
||||
|
||||
Code blocks automatically display line numbers with a sticky left panel:
|
||||
|
||||
```javascript
|
||||
// Line 1
|
||||
// Line 2
|
||||
// Line 3
|
||||
// Line 4
|
||||
// Line 5
|
||||
// Line 6
|
||||
// Line 7
|
||||
// Line 8
|
||||
// Line 9
|
||||
// Line 10
|
||||
// Line 11
|
||||
// Line 12
|
||||
// Line 13
|
||||
// Line 14
|
||||
// Line 15
|
||||
```
|
||||
@@ -0,0 +1,75 @@
|
||||
# Code Line Highlighting Test
|
||||
|
||||
This document tests code line highlighting in Yank Note.
|
||||
|
||||
> **Note**: Requires the `@yank-note/extension-code-line-highlighting` extension.
|
||||
|
||||
## Highlight Specific Lines
|
||||
|
||||
```js {.h:1,4-6,11}
|
||||
// Line 1 - highlighted
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
// Line 4 - highlighted
|
||||
// Line 5 - highlighted
|
||||
// Line 6 - highlighted
|
||||
const PORT = 3000;
|
||||
|
||||
app.get('/', (req, res) => {
|
||||
res.send('Hello World!');
|
||||
// Line 11 - highlighted
|
||||
});
|
||||
|
||||
app.listen(PORT);
|
||||
```
|
||||
|
||||
## Highlight with Data Attribute
|
||||
|
||||
```python {data-line-numbers="2,5-7"}
|
||||
# Line 1
|
||||
import os # Line 2 - highlighted
|
||||
import sys
|
||||
|
||||
def main(): # Line 5 - highlighted
|
||||
print("Hello") # Line 6 - highlighted
|
||||
return 0 # Line 7 - highlighted
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
## Highlight a Range
|
||||
|
||||
```typescript {.h:3-8}
|
||||
class App {
|
||||
private name: string;
|
||||
// Lines 3-8 highlighted
|
||||
constructor(name: string) {
|
||||
this.name = name;
|
||||
}
|
||||
getName(): string {
|
||||
return this.name;
|
||||
}
|
||||
// Not highlighted
|
||||
run(): void {
|
||||
console.log(this.getName());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Highlight Single Line
|
||||
|
||||
```rust {.h:3}
|
||||
fn main() {
|
||||
let x = 5;
|
||||
let y = x * 2; // This line is highlighted
|
||||
println!("y = {}", y);
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Use `{.h:line-numbers}` syntax after the language identifier
|
||||
- Alternatively use `{data-line-numbers="..."}` format
|
||||
- Supports single lines (`1`), ranges (`4-6`), and combinations (`1,4-6,11`)
|
||||
- Highlighted lines have a distinct background color
|
||||
@@ -0,0 +1,147 @@
|
||||
# Container Blocks Test
|
||||
|
||||
This document tests all container block types supported by Yank Note.
|
||||
|
||||
## Tip Container
|
||||
|
||||
::: tip
|
||||
This is a tip container. Use it for helpful advice.
|
||||
:::
|
||||
|
||||
::: tip Custom Tip Title
|
||||
This tip has a custom title.
|
||||
:::
|
||||
|
||||
## Warning Container
|
||||
|
||||
::: warning
|
||||
This is a warning container. Use it for important notices.
|
||||
:::
|
||||
|
||||
::: warning Caution
|
||||
Be careful with this operation!
|
||||
:::
|
||||
|
||||
## Danger Container
|
||||
|
||||
::: danger
|
||||
This is a danger container. Use it for critical warnings.
|
||||
:::
|
||||
|
||||
::: danger STOP
|
||||
Do not proceed without backup!
|
||||
:::
|
||||
|
||||
## Details (Collapsible) Container
|
||||
|
||||
::: details Click to expand
|
||||
This content is hidden by default and can be revealed by clicking.
|
||||
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Item 3
|
||||
:::
|
||||
|
||||
::: details Show Code Example
|
||||
```javascript
|
||||
function example() {
|
||||
return "Hidden code";
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
## Code Group Container
|
||||
|
||||
::: code-group
|
||||
```javascript
|
||||
// JavaScript
|
||||
function hello() {
|
||||
console.log("Hello!");
|
||||
}
|
||||
```
|
||||
|
||||
```python
|
||||
# Python
|
||||
def hello():
|
||||
print("Hello!")
|
||||
```
|
||||
|
||||
```go
|
||||
// Go
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
func main() {
|
||||
fmt.Println("Hello!")
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
||||
## Group Container
|
||||
|
||||
::: group
|
||||
::: group-item Tab 1
|
||||
Content for tab 1.
|
||||
:::
|
||||
|
||||
::: group-item Tab 2
|
||||
Content for tab 2.
|
||||
:::
|
||||
|
||||
::: group-item Tab 3
|
||||
Content for tab 3.
|
||||
:::
|
||||
:::
|
||||
|
||||
## Row and Column Layout
|
||||
|
||||
::: row
|
||||
::: col
|
||||
**Column 1**
|
||||
|
||||
This is the first column content.
|
||||
:::
|
||||
|
||||
::: col
|
||||
**Column 2**
|
||||
|
||||
This is the second column content.
|
||||
:::
|
||||
|
||||
::: col
|
||||
**Column 3**
|
||||
|
||||
This is the third column content.
|
||||
:::
|
||||
:::
|
||||
|
||||
## Section Container
|
||||
|
||||
::: section
|
||||
This is a section container. It groups content together.
|
||||
|
||||
### Section Heading
|
||||
|
||||
Section content with various elements.
|
||||
:::
|
||||
|
||||
## Div Container
|
||||
|
||||
::: div {style="background: #f0f0f0; padding: 1em; border-radius: 8px;"}
|
||||
This is a div container with custom styling.
|
||||
:::
|
||||
|
||||
## Nested Containers
|
||||
|
||||
::: tip Nested Example
|
||||
This tip contains a details block:
|
||||
|
||||
::: details Nested Details
|
||||
This is nested inside a tip container.
|
||||
|
||||
::: warning Deep Nesting
|
||||
This is a warning inside details inside a tip!
|
||||
:::
|
||||
:::
|
||||
:::
|
||||
@@ -0,0 +1,47 @@
|
||||
# Draw.io Test
|
||||
|
||||
This document tests Draw.io diagram integration in Yank Note.
|
||||
|
||||
> **Note**: Requires the `@yank-note/extension-drawio` extension.
|
||||
|
||||
## Link Syntax
|
||||
|
||||
Use a link with `link-type="drawio"` attribute to embed a Draw.io file:
|
||||
|
||||
[Architecture Diagram](./example.drawio){link-type="drawio"}
|
||||
|
||||
### With Page Selection
|
||||
|
||||
[Page 1](./example.drawio){link-type="drawio" page="0"}
|
||||
|
||||
[Page 2](./example.drawio){link-type="drawio" page="1"}
|
||||
|
||||
## Inline XML Syntax
|
||||
|
||||
Draw.io diagrams can also be embedded as inline XML in a code block:
|
||||
|
||||
```xml
|
||||
<!-- --drawio-- -->
|
||||
<mxGraphModel>
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="Start" style="rounded=1;whiteSpace=wrap;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="100" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="Process" style="whiteSpace=wrap;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="200" width="120" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="4" value="" style="endArrow=classic;" edge="1" parent="1" source="2" target="3">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Draw.io files (`.drawio`) are XML-based diagram files
|
||||
- Supports multi-page diagrams via the `page` attribute
|
||||
- Diagrams can be edited inline in the Yank Note editor
|
||||
- Both file reference and inline XML approaches are supported
|
||||
@@ -0,0 +1,127 @@
|
||||
# ECharts Test
|
||||
|
||||
This document tests ECharts chart rendering in Yank Note.
|
||||
|
||||
> **Note**: Requires the `@yank-note/extension-echarts` extension.
|
||||
|
||||
## Line Chart
|
||||
|
||||
```js
|
||||
// --echarts--
|
||||
const option = {
|
||||
title: { text: 'Monthly Sales' },
|
||||
tooltip: { trigger: 'axis' },
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
|
||||
},
|
||||
yAxis: { type: 'value' },
|
||||
series: [{
|
||||
data: [820, 932, 901, 1034, 1290, 1330],
|
||||
type: 'line',
|
||||
smooth: true
|
||||
}]
|
||||
}
|
||||
chart.setOption(option, true)
|
||||
```
|
||||
|
||||
## Bar Chart
|
||||
|
||||
```js
|
||||
// --echarts--
|
||||
const option = {
|
||||
title: { text: 'Weekly Report' },
|
||||
tooltip: {},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
|
||||
},
|
||||
yAxis: { type: 'value' },
|
||||
series: [{
|
||||
data: [120, 200, 150, 80, 70, 110, 130],
|
||||
type: 'bar',
|
||||
itemStyle: { color: '#5470c6' }
|
||||
}]
|
||||
}
|
||||
chart.setOption(option, true)
|
||||
```
|
||||
|
||||
## Pie Chart
|
||||
|
||||
```js
|
||||
// --echarts--
|
||||
const option = {
|
||||
title: {
|
||||
text: 'Technology Stack',
|
||||
left: 'center'
|
||||
},
|
||||
tooltip: { trigger: 'item' },
|
||||
series: [{
|
||||
type: 'pie',
|
||||
radius: '60%',
|
||||
data: [
|
||||
{ value: 40, name: 'JavaScript' },
|
||||
{ value: 25, name: 'TypeScript' },
|
||||
{ value: 15, name: 'Vue.js' },
|
||||
{ value: 12, name: 'Node.js' },
|
||||
{ value: 8, name: 'Other' }
|
||||
]
|
||||
}]
|
||||
}
|
||||
chart.setOption(option, true)
|
||||
```
|
||||
|
||||
## Scatter Chart
|
||||
|
||||
```js
|
||||
// --echarts--
|
||||
const data = [];
|
||||
for (let i = 0; i < 50; i++) {
|
||||
data.push([Math.random() * 100, Math.random() * 100]);
|
||||
}
|
||||
const option = {
|
||||
title: { text: 'Random Distribution' },
|
||||
xAxis: { type: 'value' },
|
||||
yAxis: { type: 'value' },
|
||||
series: [{
|
||||
type: 'scatter',
|
||||
data: data,
|
||||
symbolSize: 8
|
||||
}]
|
||||
}
|
||||
chart.setOption(option, true)
|
||||
```
|
||||
|
||||
## Radar Chart
|
||||
|
||||
```js
|
||||
// --echarts--
|
||||
const option = {
|
||||
title: { text: 'Skill Assessment' },
|
||||
radar: {
|
||||
indicator: [
|
||||
{ name: 'JavaScript', max: 100 },
|
||||
{ name: 'CSS', max: 100 },
|
||||
{ name: 'HTML', max: 100 },
|
||||
{ name: 'Node.js', max: 100 },
|
||||
{ name: 'Vue.js', max: 100 },
|
||||
{ name: 'React', max: 100 }
|
||||
]
|
||||
},
|
||||
series: [{
|
||||
type: 'radar',
|
||||
data: [{
|
||||
value: [90, 85, 95, 80, 88, 70],
|
||||
name: 'Developer A'
|
||||
}]
|
||||
}]
|
||||
}
|
||||
chart.setOption(option, true)
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Use `// --echarts--` marker in the first line of a JavaScript code block
|
||||
- The `chart` object is available for calling `setOption`
|
||||
- All ECharts configuration options are supported
|
||||
- Charts are interactive with tooltips, zoom, etc.
|
||||
@@ -0,0 +1,59 @@
|
||||
# Emoji Test
|
||||
|
||||
This document tests emoji support in Yank Note via markdown-it-emoji.
|
||||
|
||||
## Emoji Shortcodes
|
||||
|
||||
:smile: :laughing: :blush: :heart_eyes: :star:
|
||||
|
||||
:thumbsup: :thumbsdown: :clap: :wave: :pray:
|
||||
|
||||
:rocket: :fire: :sparkles: :tada: :confetti_ball:
|
||||
|
||||
:warning: :exclamation: :question: :bulb: :mag:
|
||||
|
||||
:white_check_mark: :x: :heavy_check_mark: :heavy_multiplication_x:
|
||||
|
||||
:heart: :broken_heart: :blue_heart: :green_heart: :yellow_heart:
|
||||
|
||||
:coffee: :pizza: :hamburger: :apple: :grapes:
|
||||
|
||||
:sunny: :cloud: :umbrella: :snowflake: :zap:
|
||||
|
||||
## Emoticons
|
||||
|
||||
Classic emoticons that are converted to emoji:
|
||||
|
||||
:) :( ;) :D :P
|
||||
|
||||
:-) :-( ;-) :-D :-P
|
||||
|
||||
8-) :O :/
|
||||
|
||||
## Emoji in Context
|
||||
|
||||
:rocket: This project is taking off!
|
||||
|
||||
:bulb: Here's an idea worth considering.
|
||||
|
||||
:warning: Be careful with this operation.
|
||||
|
||||
:tada: Congratulations on the achievement!
|
||||
|
||||
:memo: Don't forget to document your changes.
|
||||
|
||||
## Emoji in Lists
|
||||
|
||||
- :white_check_mark: Task completed
|
||||
- :x: Task failed
|
||||
- :hourglass: Task in progress
|
||||
- :star: Starred item
|
||||
|
||||
## Emoji in Tables
|
||||
|
||||
| Status | Icon | Meaning |
|
||||
|--------|------|---------|
|
||||
| Success | :white_check_mark: | Operation succeeded |
|
||||
| Failure | :x: | Operation failed |
|
||||
| Warning | :warning: | Needs attention |
|
||||
| Info | :bulb: | Informational |
|
||||
@@ -0,0 +1,94 @@
|
||||
# Extended Markdown Syntax Test
|
||||
|
||||
This document tests extended markdown syntax features supported by Yank Note.
|
||||
|
||||
## Tables
|
||||
|
||||
### Basic Table
|
||||
|
||||
| Header 1 | Header 2 | Header 3 |
|
||||
|----------|----------|----------|
|
||||
| Cell 1 | Cell 2 | Cell 3 |
|
||||
| Cell 4 | Cell 5 | Cell 6 |
|
||||
| Cell 7 | Cell 8 | Cell 9 |
|
||||
|
||||
### Alignment
|
||||
|
||||
| Left Aligned | Center Aligned | Right Aligned |
|
||||
|:------------|:-------------:|-------------:|
|
||||
| Left | Center | Right |
|
||||
| Data 1 | Data 2 | Data 3 |
|
||||
|
||||
### Table with Inline Formatting
|
||||
|
||||
| Feature | Syntax | Result |
|
||||
|------------|-------------------|----------------|
|
||||
| Bold | `**bold**` | **bold** |
|
||||
| Italic | `*italic*` | *italic* |
|
||||
| Code | `` `code` `` | `code` |
|
||||
| Link | `[link](url)` | [link](#) |
|
||||
| Strikethrough | `~~text~~` | ~~text~~ |
|
||||
|
||||
## Task Lists
|
||||
|
||||
- [ ] Unchecked task
|
||||
- [x] Checked task
|
||||
- [X] Also checked task (uppercase X)
|
||||
- [ ] Another unchecked task
|
||||
- [ ] Nested unchecked
|
||||
- [x] Nested checked
|
||||
|
||||
## Definition Lists
|
||||
|
||||
Term 1
|
||||
: Definition for term 1
|
||||
|
||||
Term 2
|
||||
: Definition A for term 2
|
||||
: Definition B for term 2
|
||||
|
||||
## Fenced Code Blocks with Language
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "yank-note",
|
||||
"version": "3.0.0",
|
||||
"description": "A markdown editor"
|
||||
}
|
||||
```
|
||||
|
||||
```yaml
|
||||
name: Yank Note
|
||||
features:
|
||||
- markdown
|
||||
- diagrams
|
||||
- macros
|
||||
```
|
||||
|
||||
```sql
|
||||
SELECT * FROM users
|
||||
WHERE active = true
|
||||
ORDER BY created_at DESC;
|
||||
```
|
||||
|
||||
```css
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
echo "Hello, World!"
|
||||
for i in {1..5}; do
|
||||
echo "Count: $i"
|
||||
done
|
||||
```
|
||||
|
||||
```diff
|
||||
- old line
|
||||
+ new line
|
||||
unchanged line
|
||||
```
|
||||
@@ -0,0 +1,53 @@
|
||||
# Footnotes Test
|
||||
|
||||
This document tests footnote syntax supported by Yank Note.
|
||||
|
||||
## Basic Footnotes
|
||||
|
||||
This is a sentence with a footnote[^1].
|
||||
|
||||
Another sentence with a different footnote[^2].
|
||||
|
||||
[^1]: This is the first footnote content.
|
||||
[^2]: This is the second footnote content.
|
||||
|
||||
## Named Footnotes
|
||||
|
||||
Yank Note supports named footnotes[^note1] as well as numeric ones[^note2].
|
||||
|
||||
[^note1]: Named footnotes use descriptive identifiers.
|
||||
[^note2]: They work the same way as numeric footnotes.
|
||||
|
||||
## Multi-line Footnotes
|
||||
|
||||
This references a longer footnote[^long].
|
||||
|
||||
[^long]: This is a longer footnote that spans
|
||||
multiple lines. Each continuation line must be
|
||||
indented with at least 4 spaces or 1 tab.
|
||||
|
||||
It can even contain multiple paragraphs.
|
||||
|
||||
## Footnotes with Formatting
|
||||
|
||||
Check this footnote with formatting[^formatted].
|
||||
|
||||
[^formatted]: This footnote contains **bold**, *italic*, and `code` formatting.
|
||||
|
||||
## Multiple References
|
||||
|
||||
The same footnote can be referenced multiple times in the text[^shared]. See the previous reference[^shared] again.
|
||||
|
||||
[^shared]: This footnote is referenced multiple times in the document.
|
||||
|
||||
## Footnotes in Lists
|
||||
|
||||
- Item with footnote[^list1]
|
||||
- Another item[^list2]
|
||||
|
||||
[^list1]: Footnote from a list item.
|
||||
[^list2]: Another footnote from a list item.
|
||||
|
||||
## Inline Footnote
|
||||
|
||||
This sentence has an inline footnote^[This is an inline footnote that doesn't need a separate definition.].
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
headingNumber: true
|
||||
enableMacro: true
|
||||
define:
|
||||
--APP_NAME--: Yank Note
|
||||
--APP_VERSION--: 3.x
|
||||
tags:
|
||||
- test
|
||||
- front-matter
|
||||
- yank-note
|
||||
mdOptions:
|
||||
html: true
|
||||
breaks: true
|
||||
linkify: true
|
||||
typographer: false
|
||||
katex: {}
|
||||
render:
|
||||
md-html: true
|
||||
md-breaks: true
|
||||
md-linkify: true
|
||||
md-typographer: false
|
||||
md-sup: true
|
||||
md-sub: true
|
||||
md-wiki-links: true
|
||||
md-hash-tags: true
|
||||
multimd-multiline: true
|
||||
multimd-rowspan: true
|
||||
multimd-headerless: false
|
||||
multimd-multibody: false
|
||||
list-collapsible: true
|
||||
wrap-code: false
|
||||
---
|
||||
|
||||
# Front Matter Test
|
||||
|
||||
This document tests the YAML front matter configuration supported by Yank Note.
|
||||
|
||||
## Front Matter Options Explained
|
||||
|
||||
The front matter above configures the following:
|
||||
|
||||
### `headingNumber`
|
||||
|
||||
Enables automatic heading numbering (CSS counter based). Headings h2-h6 will be numbered.
|
||||
|
||||
### `enableMacro`
|
||||
|
||||
Enables macro replacement with `[= expression =]` syntax.
|
||||
|
||||
### `define`
|
||||
|
||||
Defines text replacement variables:
|
||||
- `--APP_NAME--` will be replaced with "Yank Note"
|
||||
- `--APP_VERSION--` will be replaced with "3.x"
|
||||
|
||||
Example: --APP_NAME-- version --APP_VERSION--
|
||||
|
||||
### `tags`
|
||||
|
||||
Document tags for organization and search.
|
||||
|
||||
### `mdOptions`
|
||||
|
||||
Markdown-it configuration options:
|
||||
- `html: true` — Allow raw HTML tags
|
||||
- `breaks: true` — Convert newlines to `<br>` tags
|
||||
- `linkify: true` — Auto-detect and link URLs
|
||||
- `typographer: false` — Disable smart quotes and typographic replacements
|
||||
|
||||
### `katex`
|
||||
|
||||
KaTeX rendering options (empty object uses defaults).
|
||||
|
||||
### `render`
|
||||
|
||||
Fine-grained control over rendering features:
|
||||
- `md-html` — HTML rendering
|
||||
- `md-breaks` — Line break handling
|
||||
- `md-linkify` — URL auto-linking
|
||||
- `md-typographer` — Typography processing
|
||||
- `md-sup` — Superscript support
|
||||
- `md-sub` — Subscript support
|
||||
- `md-wiki-links` — Wiki-style linking
|
||||
- `md-hash-tags` — Hashtag support
|
||||
- `multimd-multiline` — Multi-line table cells
|
||||
- `multimd-rowspan` — Table row spanning
|
||||
- `list-collapsible` — Collapsible list items
|
||||
- `wrap-code` — Code block word wrapping
|
||||
|
||||
## Verify Front Matter Effects
|
||||
|
||||
### Heading Numbering
|
||||
|
||||
All headings in this document should be automatically numbered.
|
||||
|
||||
#### Sub-heading Example
|
||||
|
||||
##### Deeper Heading
|
||||
|
||||
### Variable Replacement
|
||||
|
||||
The app name is --APP_NAME-- and the version is --APP_VERSION--.
|
||||
@@ -0,0 +1,56 @@
|
||||
# GitHub Alerts Test
|
||||
|
||||
This document tests GitHub-style alert syntax supported by Yank Note.
|
||||
|
||||
## Note Alert
|
||||
|
||||
> [!NOTE]
|
||||
> Useful information that users should know, even when skimming content.
|
||||
|
||||
## Tip Alert
|
||||
|
||||
> [!TIP]
|
||||
> Helpful advice for doing things better or more easily.
|
||||
|
||||
## Important Alert
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Key information users need to know to achieve their goal.
|
||||
|
||||
## Warning Alert
|
||||
|
||||
> [!WARNING]
|
||||
> Urgent info that needs immediate user attention to avoid problems.
|
||||
|
||||
## Caution Alert
|
||||
|
||||
> [!CAUTION]
|
||||
> Advises about risks or negative outcomes of certain actions.
|
||||
|
||||
## Alerts with Rich Content
|
||||
|
||||
> [!NOTE]
|
||||
> This alert contains **bold**, *italic*, and `code` formatting.
|
||||
>
|
||||
> It can also contain:
|
||||
> - List item 1
|
||||
> - List item 2
|
||||
>
|
||||
> And even [links](https://example.com).
|
||||
|
||||
> [!WARNING]
|
||||
> ```javascript
|
||||
> // Code blocks work inside alerts too
|
||||
> console.warn("Be careful!");
|
||||
> ```
|
||||
|
||||
## Multiple Alerts
|
||||
|
||||
> [!TIP]
|
||||
> First tip about the feature.
|
||||
|
||||
> [!WARNING]
|
||||
> Important warning about the same feature.
|
||||
|
||||
> [!NOTE]
|
||||
> Additional notes to consider.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Hashtags Test
|
||||
|
||||
This document tests the hashtag/tag syntax supported by Yank Note.
|
||||
|
||||
## Basic Hashtags
|
||||
|
||||
#YankNote
|
||||
|
||||
#Markdown
|
||||
|
||||
#Test
|
||||
|
||||
## Hashtags with Special Characters
|
||||
|
||||
#my-tag
|
||||
|
||||
#my_tag
|
||||
|
||||
#tag/subtag
|
||||
|
||||
## Chinese Hashtags
|
||||
|
||||
#笔记
|
||||
|
||||
#测试标签
|
||||
|
||||
#Yank笔记
|
||||
|
||||
## Hashtags in Context
|
||||
|
||||
This is a paragraph with a #hashtag in the middle.
|
||||
|
||||
Multiple tags: #tag1 #tag2 #tag3
|
||||
|
||||
## Hashtags in Lists
|
||||
|
||||
- #feature1 First feature
|
||||
- #feature2 Second feature
|
||||
- #bug Fix for a bug
|
||||
|
||||
## Notes
|
||||
|
||||
- Hashtags must be preceded by whitespace or be at the start of a line
|
||||
- Supported characters: alphanumeric, Chinese characters, `_`, `/`, `-`
|
||||
- A `#` immediately following text (like C#) is NOT treated as a hashtag
|
||||
- Example of non-hashtag: This is C# language (no space before #)
|
||||
@@ -0,0 +1,84 @@
|
||||
---
|
||||
headingNumber: true
|
||||
---
|
||||
|
||||
# Heading Numbering Test
|
||||
|
||||
This document tests automatic heading numbering in Yank Note.
|
||||
|
||||
> **Note**: Enable heading numbering by setting `headingNumber: true` in front matter.
|
||||
|
||||
## First Section
|
||||
|
||||
Content of the first section.
|
||||
|
||||
### Sub-section A
|
||||
|
||||
Content of sub-section A.
|
||||
|
||||
### Sub-section B
|
||||
|
||||
Content of sub-section B.
|
||||
|
||||
#### Detail B.1
|
||||
|
||||
Detail content.
|
||||
|
||||
#### Detail B.2
|
||||
|
||||
Detail content.
|
||||
|
||||
##### Deep Detail B.2.1
|
||||
|
||||
Deep content.
|
||||
|
||||
## Second Section
|
||||
|
||||
Content of the second section.
|
||||
|
||||
### Sub-section A
|
||||
|
||||
Content.
|
||||
|
||||
### Sub-section B
|
||||
|
||||
Content.
|
||||
|
||||
### Sub-section C
|
||||
|
||||
Content.
|
||||
|
||||
#### Detail C.1
|
||||
|
||||
Content.
|
||||
|
||||
## Third Section
|
||||
|
||||
Content of the third section.
|
||||
|
||||
### Sub-section A
|
||||
|
||||
Content.
|
||||
|
||||
#### Detail A.1
|
||||
|
||||
Content.
|
||||
|
||||
#### Detail A.2
|
||||
|
||||
Content.
|
||||
|
||||
##### Deep Detail A.2.1
|
||||
|
||||
Content.
|
||||
|
||||
###### Deepest Detail A.2.1.1
|
||||
|
||||
Content.
|
||||
|
||||
## Numbering Notes
|
||||
|
||||
- Heading numbering uses CSS counters for h2 through h6
|
||||
- h1 is not numbered (used as document title)
|
||||
- Numbering resets appropriately for each level
|
||||
- The format is: `2.`, `2.1.`, `2.1.1.`, etc.
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
# HTML Support Test
|
||||
|
||||
This document tests raw HTML rendering in Yank Note.
|
||||
|
||||
> **Note**: HTML support requires `html: true` in mdOptions (enabled by default).
|
||||
|
||||
## Basic HTML Tags
|
||||
|
||||
<p>This is a paragraph in HTML.</p>
|
||||
|
||||
<strong>Bold text</strong> and <em>italic text</em>
|
||||
|
||||
<u>Underlined text</u>
|
||||
|
||||
<mark>Highlighted text via HTML</mark>
|
||||
|
||||
## Div and Span
|
||||
|
||||
<div style="background: #f0f0f0; padding: 1em; border-radius: 8px; margin: 1em 0;">
|
||||
<p style="color: #333;">This is a styled div container.</p>
|
||||
<p>With <span style="color: red;">colored</span> <span style="color: blue;">span</span> elements.</p>
|
||||
</div>
|
||||
|
||||
## HTML Table
|
||||
|
||||
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse;">
|
||||
<thead>
|
||||
<tr style="background: #e0e0e0;">
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Feature A</td>
|
||||
<td>Enhancement</td>
|
||||
<td style="color: green;">✅ Done</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Feature B</td>
|
||||
<td>Bug Fix</td>
|
||||
<td style="color: orange;">🔄 In Progress</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
## Details and Summary
|
||||
|
||||
<details>
|
||||
<summary>Click to expand</summary>
|
||||
<p>This is hidden content revealed by clicking the summary.</p>
|
||||
<ul>
|
||||
<li>Item 1</li>
|
||||
<li>Item 2</li>
|
||||
<li>Item 3</li>
|
||||
</ul>
|
||||
</details>
|
||||
|
||||
<details open>
|
||||
<summary>This is open by default</summary>
|
||||
<p>Content visible from the start.</p>
|
||||
</details>
|
||||
|
||||
## Keyboard Input
|
||||
|
||||
Press <kbd>Ctrl</kbd> + <kbd>C</kbd> to copy.
|
||||
|
||||
Press <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> to open command palette.
|
||||
|
||||
## Abbreviation and Definition
|
||||
|
||||
<abbr title="Yank Note">YN</abbr> is a great markdown editor.
|
||||
|
||||
<dl>
|
||||
<dt>Markdown</dt>
|
||||
<dd>A lightweight markup language</dd>
|
||||
<dt>Yank Note</dt>
|
||||
<dd>A feature-rich markdown editor</dd>
|
||||
</dl>
|
||||
|
||||
## Figure and Figcaption
|
||||
|
||||
<figure style="text-align: center;">
|
||||
<img src="https://via.placeholder.com/200x150" alt="Placeholder">
|
||||
<figcaption>Figure 1: A placeholder image</figcaption>
|
||||
</figure>
|
||||
|
||||
## Colored Text
|
||||
|
||||
<span style="color: red;">Red text</span>
|
||||
<span style="color: green;">Green text</span>
|
||||
<span style="color: blue;">Blue text</span>
|
||||
<span style="color: purple;">Purple text</span>
|
||||
|
||||
## Progress Bar
|
||||
|
||||
<progress value="75" max="100" style="width: 200px;"></progress> 75%
|
||||
|
||||
## Mixed HTML and Markdown
|
||||
|
||||
<div style="border: 2px solid #ccc; padding: 1em; border-radius: 8px;">
|
||||
|
||||
**This is markdown** inside an HTML div.
|
||||
|
||||
- List item 1
|
||||
- List item 2
|
||||
|
||||
`Code` works here too.
|
||||
|
||||
</div>
|
||||
|
||||
## Notes
|
||||
|
||||
- HTML rendering is controlled by `mdOptions.html` (default: `true`)
|
||||
- In safe mode, certain tags and attributes are filtered
|
||||
- Script tags are prevented for security
|
||||
- HTML can be freely mixed with markdown content
|
||||
@@ -0,0 +1,68 @@
|
||||
# Image Enhancements Test
|
||||
|
||||
This document tests image enhancement features in Yank Note.
|
||||
|
||||
## Basic Image
|
||||
|
||||

|
||||
|
||||
## Image with Size
|
||||
|
||||
### Width and Height
|
||||
|
||||

|
||||
|
||||
### Width Only (auto height)
|
||||
|
||||

|
||||
|
||||
### Percentage Width
|
||||
|
||||

|
||||
|
||||
## Image with Query Parameters
|
||||
|
||||
### Inline Display
|
||||
|
||||
 This text is next to the inline image.
|
||||
|
||||
### White Background
|
||||
|
||||

|
||||
|
||||
### Combined Parameters
|
||||
|
||||

|
||||
|
||||
## Image Centering
|
||||
|
||||
When a paragraph contains only a single image, it is automatically centered:
|
||||
|
||||

|
||||
|
||||
## Image with Attributes
|
||||
|
||||
{style="border-radius: 50%;"}
|
||||
|
||||
{.with-border}
|
||||
|
||||
{.reduce-brightness}
|
||||
|
||||
## Image in Different Contexts
|
||||
|
||||
### Image in List
|
||||
|
||||
-  Item with image
|
||||
-  Another item
|
||||
|
||||
### Image in Table
|
||||
|
||||
| Image | Description |
|
||||
|-------|-------------|
|
||||
|  | First image |
|
||||
|  | Second image |
|
||||
|
||||
### Image in Blockquote
|
||||
|
||||
> 
|
||||
> An image inside a blockquote.
|
||||
@@ -0,0 +1,162 @@
|
||||
# Kroki Diagrams Test
|
||||
|
||||
This document tests Kroki diagram rendering in Yank Note.
|
||||
|
||||
> **Note**: Requires the `@yank-note/extension-kroki` extension.
|
||||
|
||||
## WaveDrom (Digital Timing Diagram)
|
||||
|
||||
```js
|
||||
// --kroki-- wavedrom
|
||||
{
|
||||
signal: [
|
||||
{ name: "clk", wave: "p.....|..." },
|
||||
{ name: "data", wave: "x.345x|=.x", data: ["head", "body", "tail", "data"] },
|
||||
{ name: "req", wave: "0.1..0|1.0" },
|
||||
{},
|
||||
{ name: "ack", wave: "1.....|01." }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## GraphViz (DOT)
|
||||
|
||||
```js
|
||||
// --kroki-- graphviz
|
||||
digraph G {
|
||||
rankdir=LR;
|
||||
node [shape=box, style=filled, fillcolor=lightblue];
|
||||
|
||||
A [label="Input"];
|
||||
B [label="Process"];
|
||||
C [label="Output"];
|
||||
D [label="Log"];
|
||||
|
||||
A -> B;
|
||||
B -> C;
|
||||
B -> D [style=dashed];
|
||||
}
|
||||
```
|
||||
|
||||
## Ditaa (ASCII Art Diagrams)
|
||||
|
||||
```js
|
||||
// --kroki-- ditaa
|
||||
+--------+ +-------+ +-------+
|
||||
| +---+ ditaa | | |
|
||||
| Text | +-------+ |diagram|
|
||||
|Document| |!magic!| | |
|
||||
| {d}| | | | |
|
||||
+---+----+ +-------+ +-------+
|
||||
: ^
|
||||
| Lots of work |
|
||||
+-------------------------+
|
||||
```
|
||||
|
||||
## BlockDiag
|
||||
|
||||
```js
|
||||
// --kroki-- blockdiag
|
||||
blockdiag {
|
||||
A -> B -> C -> D;
|
||||
A -> E -> F -> G;
|
||||
|
||||
group {
|
||||
label = "Group 1";
|
||||
color = "#FF9900";
|
||||
A; B; C;
|
||||
}
|
||||
|
||||
group {
|
||||
label = "Group 2";
|
||||
color = "#3399FF";
|
||||
E; F;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## SeqDiag (Sequence Diagram)
|
||||
|
||||
```js
|
||||
// --kroki-- seqdiag
|
||||
seqdiag {
|
||||
browser -> webserver [label = "GET /index.html"];
|
||||
browser <-- webserver;
|
||||
browser -> webserver [label = "POST /form"];
|
||||
browser <-- webserver;
|
||||
browser -> webserver [label = "GET /image.png"];
|
||||
browser <-- webserver;
|
||||
}
|
||||
```
|
||||
|
||||
## ActDiag (Activity Diagram)
|
||||
|
||||
```js
|
||||
// --kroki-- actdiag
|
||||
actdiag {
|
||||
write -> convert -> review
|
||||
|
||||
lane user {
|
||||
label = "User"
|
||||
write [label = "Write document"];
|
||||
review [label = "Review result"];
|
||||
}
|
||||
|
||||
lane engine {
|
||||
label = "Engine"
|
||||
convert [label = "Convert to HTML"];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## ERD (Entity Relationship Diagram)
|
||||
|
||||
```js
|
||||
// --kroki-- erd
|
||||
[Person]
|
||||
*name
|
||||
height
|
||||
weight
|
||||
|
||||
[Pet]
|
||||
*name
|
||||
breed
|
||||
|
||||
Person *--* Pet
|
||||
```
|
||||
|
||||
## SVGBob (ASCII Art to SVG)
|
||||
|
||||
```js
|
||||
// --kroki-- svgbob
|
||||
.---.
|
||||
/-o-/--
|
||||
.-/ / /->
|
||||
( * \/
|
||||
'-. \
|
||||
\ /
|
||||
'
|
||||
```
|
||||
|
||||
## C4 Diagram (PlantUML)
|
||||
|
||||
```js
|
||||
// --kroki-- c4plantuml
|
||||
@startuml
|
||||
!include C4_Context.puml
|
||||
|
||||
Person(user, "User", "A user of Yank Note")
|
||||
System(yn, "Yank Note", "Markdown editor")
|
||||
System_Ext(ext, "Extensions", "Plugin system")
|
||||
|
||||
Rel(user, yn, "Uses")
|
||||
Rel(yn, ext, "Loads")
|
||||
@enduml
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Kroki supports many diagram types through a unified API
|
||||
- Use `// --kroki-- [diagram-type]` marker in JS code blocks
|
||||
- Supported types include: wavedrom, graphviz, ditaa, blockdiag, seqdiag, actdiag, nwdiag, erd, svgbob, c4plantuml, and more
|
||||
- Diagrams are rendered server-side via the Kroki API
|
||||
@@ -0,0 +1,55 @@
|
||||
# Collapsible Lists Test
|
||||
|
||||
This document tests the collapsible list feature in Yank Note.
|
||||
|
||||
> **Note**: Enable collapsible lists by setting `render.list-collapsible: true` in front matter or settings.
|
||||
|
||||
## Basic Collapsible List
|
||||
|
||||
- Parent item 1
|
||||
- Child item 1.1
|
||||
- Child item 1.2
|
||||
- Grandchild 1.2.1
|
||||
- Grandchild 1.2.2
|
||||
- Child item 1.3
|
||||
- Parent item 2
|
||||
- Child item 2.1
|
||||
- Child item 2.2
|
||||
- Parent item 3 (no children, not collapsible)
|
||||
|
||||
## Deeply Nested List
|
||||
|
||||
- Level 1
|
||||
- Level 2
|
||||
- Level 3
|
||||
- Level 4
|
||||
- Level 5
|
||||
- Level 6
|
||||
|
||||
## Mixed List Types
|
||||
|
||||
1. Ordered parent 1
|
||||
- Unordered child A
|
||||
- Unordered child B
|
||||
1. Ordered grandchild I
|
||||
2. Ordered grandchild II
|
||||
2. Ordered parent 2
|
||||
- Unordered child C
|
||||
|
||||
## Collapsible with Content
|
||||
|
||||
- **Project Structure**
|
||||
- `src/` - Source code
|
||||
- `main/` - Main application
|
||||
- `renderer/` - UI renderer
|
||||
- `share/` - Shared utilities
|
||||
- `test/` - Test files
|
||||
- `build/` - Build configuration
|
||||
- `scripts/` - Build scripts
|
||||
|
||||
## Usage Notes
|
||||
|
||||
- Click the chevron icon to collapse/expand nested lists
|
||||
- The chevron appears on hover for items with children
|
||||
- Leaf items (no children) are not collapsible
|
||||
- Configure via `render.list-collapsible` setting
|
||||
@@ -0,0 +1,23 @@
|
||||
# Luckysheet Test
|
||||
|
||||
This document tests Luckysheet (spreadsheet) integration in Yank Note.
|
||||
|
||||
## Embed Luckysheet File
|
||||
|
||||
Use a link with `link-type="luckysheet"` attribute to embed a Luckysheet spreadsheet:
|
||||
|
||||
[My Spreadsheet](./example.luckysheet){link-type="luckysheet"}
|
||||
|
||||
## Multiple Sheets
|
||||
|
||||
[Financial Data](./financial.luckysheet){link-type="luckysheet"}
|
||||
|
||||
[Inventory Tracker](./inventory.luckysheet){link-type="luckysheet"}
|
||||
|
||||
## Notes
|
||||
|
||||
- Luckysheet provides Excel-like spreadsheet functionality within Yank Note
|
||||
- Files use the `.luckysheet` extension
|
||||
- Spreadsheets are embedded using the link syntax with `link-type="luckysheet"` attribute
|
||||
- Supports formulas, formatting, charts, and other spreadsheet features
|
||||
- **Known Issues**: There may be bugs with this integration; use with caution
|
||||
@@ -0,0 +1,81 @@
|
||||
---
|
||||
enableMacro: true
|
||||
define:
|
||||
--February--: February
|
||||
--�ÿ月--: 二月
|
||||
---
|
||||
|
||||
# Macro Replacement Test
|
||||
|
||||
This document tests the macro replacement feature (`[= expression =]`) of Yank Note.
|
||||
|
||||
> **Note**: Macros require `enableMacro: true` in front matter to work.
|
||||
|
||||
## Basic Expressions
|
||||
|
||||
Simple math: [= 1 + 2 =]
|
||||
|
||||
String operation: [= 'Hello' + ' ' + 'World' =]
|
||||
|
||||
Ternary: [= true ? 'Yes' : 'No' =]
|
||||
|
||||
## Built-in Variables
|
||||
|
||||
### Document Information (`$doc`)
|
||||
|
||||
Document basename: [= $doc.basename =]
|
||||
|
||||
Document name: [= $doc.name =]
|
||||
|
||||
## Sequence Numbering (`$seq`)
|
||||
|
||||
Figure [= $seq('figure') =]: First diagram
|
||||
|
||||
Figure [= $seq('figure') =]: Second diagram
|
||||
|
||||
Figure [= $seq('figure') =]: Third diagram
|
||||
|
||||
Table [= $seq('table') =]: First table
|
||||
|
||||
Table [= $seq('table') =]: Second table
|
||||
|
||||
## Variable Export (`$export`)
|
||||
|
||||
[= $export('greeting', 'Hello from Yank Note') =]
|
||||
|
||||
The exported value is: [= greeting =]
|
||||
|
||||
[= $export('count', 42) =]
|
||||
|
||||
The count is: [= count =]
|
||||
|
||||
## Date and Time
|
||||
|
||||
Current timestamp: [= new Date().toISOString() =]
|
||||
|
||||
Year: [= new Date().getFullYear() =]
|
||||
|
||||
## Conditional Content
|
||||
|
||||
[= 1 > 0 ? '✅ Condition is true' : '❌ Condition is false' =]
|
||||
|
||||
## Text Define Replacement
|
||||
|
||||
The month is: --FEBRUARY--
|
||||
|
||||
中文月份: --二月--
|
||||
|
||||
## Complex Expressions
|
||||
|
||||
Array operation: [= [1,2,3,4,5].reduce((a,b) => a+b, 0) =]
|
||||
|
||||
String repeat: [= '⭐'.repeat(5) =]
|
||||
|
||||
## Include Other Documents
|
||||
|
||||
<!-- Uncomment the following line and create a fragment file to test includes -->
|
||||
<!-- [= $include('./fragment.md') =] -->
|
||||
|
||||
## After Macro Hook
|
||||
|
||||
[= $afterMacro(() => { /* post-processing logic */ }) =]
|
||||
@@ -0,0 +1,43 @@
|
||||
# Mark / Highlight Test
|
||||
|
||||
This document tests the mark (highlight) syntax supported by Yank Note.
|
||||
|
||||
## Basic Highlighting
|
||||
|
||||
==This text is highlighted==
|
||||
|
||||
This sentence has ==highlighted words== in the middle.
|
||||
|
||||
## Multiple Highlights
|
||||
|
||||
==First highlight== and ==second highlight== in one line.
|
||||
|
||||
## Highlight with Other Formatting
|
||||
|
||||
==**Bold and highlighted**==
|
||||
|
||||
==*Italic and highlighted*==
|
||||
|
||||
==`Code and highlighted`==
|
||||
|
||||
==~~Strikethrough and highlighted~~==
|
||||
|
||||
## Highlight in Context
|
||||
|
||||
Important: ==Remember to save your work== before closing the editor.
|
||||
|
||||
The key takeaway is ==Yank Note supports rich markdown features==.
|
||||
|
||||
## Highlight in Lists
|
||||
|
||||
- ==Important item==
|
||||
- Normal item
|
||||
- ==Another important item==
|
||||
|
||||
## Highlight in Blockquote
|
||||
|
||||
> The most important part of this quote is ==right here==.
|
||||
|
||||
## Cloze Extension Note
|
||||
|
||||
When the `@yank-note/extension-cloze` extension is installed, highlighted text (`==text==`) can also function as cloze deletions for flashcard-style learning. The highlighted text can be toggled between visible and hidden states.
|
||||
@@ -0,0 +1,85 @@
|
||||
# Markmap Test
|
||||
|
||||
This document tests Markmap (interactive mind map) rendering in Yank Note.
|
||||
|
||||
> **Note**: Requires the `@yank-note/extension-markmap` extension.
|
||||
|
||||
## Using `{.markmap}` Class on List
|
||||
|
||||
+ Yank Note{.markmap}
|
||||
+ **Editing**
|
||||
+ Markdown syntax
|
||||
+ Code highlighting
|
||||
+ Auto-completion
|
||||
+ **Preview**
|
||||
+ Real-time rendering
|
||||
+ Diagrams
|
||||
+ Math formulas
|
||||
+ **Organization**
|
||||
+ Wiki links
|
||||
+ Tags
|
||||
+ TOC
|
||||
+ **Extensions**
|
||||
+ Mermaid
|
||||
+ ECharts
|
||||
+ Draw.io
|
||||
|
||||
## Software Architecture Markmap
|
||||
|
||||
+ Application Architecture{.markmap}
|
||||
+ **Frontend**
|
||||
+ Vue.js
|
||||
+ TypeScript
|
||||
+ CSS/SCSS
|
||||
+ **Backend**
|
||||
+ Electron
|
||||
+ Node.js
|
||||
+ File System API
|
||||
+ **Plugins**
|
||||
+ markdown-it
|
||||
+ KaTeX
|
||||
+ PrismJS
|
||||
+ **Build**
|
||||
+ Vite
|
||||
+ electron-builder
|
||||
|
||||
## Using Markmap Code Block
|
||||
|
||||
```markmap
|
||||
# Learning Path
|
||||
|
||||
## Frontend
|
||||
### HTML
|
||||
### CSS
|
||||
### JavaScript
|
||||
#### React
|
||||
#### Vue
|
||||
#### Angular
|
||||
|
||||
## Backend
|
||||
### Node.js
|
||||
### Python
|
||||
### Go
|
||||
|
||||
## DevOps
|
||||
### Docker
|
||||
### Kubernetes
|
||||
### CI/CD
|
||||
```
|
||||
|
||||
## Full Document Markmap
|
||||
|
||||
To render the entire document as a markmap, add this to the front matter:
|
||||
|
||||
```yaml
|
||||
---
|
||||
defaultPreviewer: 'Markmap'
|
||||
---
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Add `{.markmap}` class to a list root item for inline markmap
|
||||
- Use `markmap` code block for standalone markmaps
|
||||
- Set `defaultPreviewer: 'Markmap'` to render entire document as markmap
|
||||
- Markmaps are interactive: zoom, pan, expand/collapse nodes
|
||||
@@ -0,0 +1,118 @@
|
||||
# KaTeX Math Test
|
||||
|
||||
This document tests KaTeX math formula rendering in Yank Note.
|
||||
|
||||
## Inline Math
|
||||
|
||||
The quadratic formula is $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$.
|
||||
|
||||
Einstein's equation: $E = mc^2$.
|
||||
|
||||
Simple expression: $a^2 + b^2 = c^2$.
|
||||
|
||||
Greek letters: $\alpha$, $\beta$, $\gamma$, $\delta$, $\epsilon$, $\theta$, $\lambda$, $\mu$, $\pi$, $\sigma$, $\omega$.
|
||||
|
||||
## Block Math
|
||||
|
||||
$$
|
||||
\sum_{i=1}^{n} i = \frac{n(n+1)}{2}
|
||||
$$
|
||||
|
||||
$$
|
||||
\int_{0}^{\infty} e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
|
||||
$$
|
||||
|
||||
$$
|
||||
f(x) = \begin{cases}
|
||||
x^2 & \text{if } x \geq 0 \\
|
||||
-x^2 & \text{if } x < 0
|
||||
\end{cases}
|
||||
$$
|
||||
|
||||
## Matrix
|
||||
|
||||
$$
|
||||
A = \begin{pmatrix}
|
||||
a_{11} & a_{12} & a_{13} \\
|
||||
a_{21} & a_{22} & a_{23} \\
|
||||
a_{31} & a_{32} & a_{33}
|
||||
\end{pmatrix}
|
||||
$$
|
||||
|
||||
$$
|
||||
\begin{bmatrix}
|
||||
1 & 0 & 0 \\
|
||||
0 & 1 & 0 \\
|
||||
0 & 0 & 1
|
||||
\end{bmatrix}
|
||||
$$
|
||||
|
||||
## Aligned Equations
|
||||
|
||||
$$
|
||||
\begin{aligned}
|
||||
a &= b + c \\
|
||||
d &= e + f + g \\
|
||||
h &= i + j + k + l
|
||||
\end{aligned}
|
||||
$$
|
||||
|
||||
## Fractions and Binomials
|
||||
|
||||
$$
|
||||
\frac{n!}{k!(n-k)!} = \binom{n}{k}
|
||||
$$
|
||||
|
||||
## Limits and Calculus
|
||||
|
||||
$$
|
||||
\lim_{x \to 0} \frac{\sin x}{x} = 1
|
||||
$$
|
||||
|
||||
$$
|
||||
\frac{d}{dx}\left( \int_{a}^{x} f(t)\,dt \right) = f(x)
|
||||
$$
|
||||
|
||||
## Chemical Equations (mhchem)
|
||||
|
||||
$\ce{H2O}$
|
||||
|
||||
$\ce{CO2 + H2O -> H2CO3}$
|
||||
|
||||
$\ce{2H2 + O2 ->[\text{combustion}] 2H2O}$
|
||||
|
||||
$\ce{Fe^{2+} + 2OH^{-} -> Fe(OH)2 v}$
|
||||
|
||||
## Trigonometric Functions
|
||||
|
||||
$$
|
||||
\sin^2\theta + \cos^2\theta = 1
|
||||
$$
|
||||
|
||||
$$
|
||||
e^{i\pi} + 1 = 0
|
||||
$$
|
||||
|
||||
## Summation and Product
|
||||
|
||||
$$
|
||||
\prod_{i=1}^{n} x_i = x_1 \cdot x_2 \cdots x_n
|
||||
$$
|
||||
|
||||
$$
|
||||
\sum_{k=0}^{\infty} \frac{x^k}{k!} = e^x
|
||||
$$
|
||||
|
||||
## Set Notation
|
||||
|
||||
$$
|
||||
A \cup B = \{x : x \in A \text{ or } x \in B\}
|
||||
$$
|
||||
|
||||
$$
|
||||
A \cap B = \{x : x \in A \text{ and } x \in B\}
|
||||
$$
|
||||
|
||||
$$
|
||||
\forall x \in \mathbb{R}, \exists y \in \mathbb{R} : x + y = 0
|
||||
$$
|
||||
@@ -0,0 +1,145 @@
|
||||
# Mermaid Diagrams Test
|
||||
|
||||
This document tests Mermaid diagram rendering in Yank Note.
|
||||
|
||||
> **Note**: Requires the `@yank-note/extension-mermaid` extension.
|
||||
|
||||
## Flowchart
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Start] --> B{Is it working?}
|
||||
B -->|Yes| C[Great!]
|
||||
B -->|No| D[Debug]
|
||||
D --> B
|
||||
C --> E[End]
|
||||
```
|
||||
|
||||
## Flowchart (Left to Right)
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[Hard Edge] -->|Link text| B(Round Edge)
|
||||
B --> C{Decision}
|
||||
C -->|One| D[Result 1]
|
||||
C -->|Two| E[Result 2]
|
||||
C -->|Three| F[Result 3]
|
||||
```
|
||||
|
||||
## Sequence Diagram
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Alice
|
||||
participant Bob
|
||||
participant Charlie
|
||||
Alice->>Bob: Hello Bob, how are you?
|
||||
Bob-->>Alice: I'm good, thanks!
|
||||
Alice->>Charlie: Hi Charlie!
|
||||
Charlie-->>Alice: Hey Alice!
|
||||
Bob->>Charlie: Hi there!
|
||||
Note over Alice,Charlie: A group conversation
|
||||
```
|
||||
|
||||
## Class Diagram
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Animal {
|
||||
+String name
|
||||
+int age
|
||||
+makeSound()
|
||||
}
|
||||
class Dog {
|
||||
+String breed
|
||||
+fetch()
|
||||
}
|
||||
class Cat {
|
||||
+String color
|
||||
+purr()
|
||||
}
|
||||
Animal <|-- Dog
|
||||
Animal <|-- Cat
|
||||
```
|
||||
|
||||
## State Diagram
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> Idle
|
||||
Idle --> Processing : Start
|
||||
Processing --> Success : Complete
|
||||
Processing --> Error : Fail
|
||||
Error --> Idle : Retry
|
||||
Success --> [*]
|
||||
```
|
||||
|
||||
## Gantt Chart
|
||||
|
||||
```mermaid
|
||||
gantt
|
||||
title Project Timeline
|
||||
dateFormat YYYY-MM-DD
|
||||
section Planning
|
||||
Requirements :a1, 2024-01-01, 10d
|
||||
Design :a2, after a1, 15d
|
||||
section Development
|
||||
Backend :b1, after a2, 20d
|
||||
Frontend :b2, after a2, 25d
|
||||
section Testing
|
||||
Integration :c1, after b1, 10d
|
||||
UAT :c2, after c1, 5d
|
||||
```
|
||||
|
||||
## Pie Chart
|
||||
|
||||
```mermaid
|
||||
pie title Language Distribution
|
||||
"JavaScript" : 40
|
||||
"TypeScript" : 30
|
||||
"Python" : 15
|
||||
"Go" : 10
|
||||
"Other" : 5
|
||||
```
|
||||
|
||||
## Entity Relationship Diagram
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
USER ||--o{ ORDER : places
|
||||
ORDER ||--|{ LINE-ITEM : contains
|
||||
PRODUCT ||--o{ LINE-ITEM : "is in"
|
||||
USER {
|
||||
int id
|
||||
string name
|
||||
string email
|
||||
}
|
||||
ORDER {
|
||||
int id
|
||||
date created
|
||||
string status
|
||||
}
|
||||
PRODUCT {
|
||||
int id
|
||||
string name
|
||||
float price
|
||||
}
|
||||
```
|
||||
|
||||
## Journey Map
|
||||
|
||||
```mermaid
|
||||
journey
|
||||
title My Working Day
|
||||
section Go to Work
|
||||
Wake up: 1: Me
|
||||
Get dressed: 2: Me
|
||||
Commute: 3: Me, Bus
|
||||
section At Work
|
||||
Code: 5: Me
|
||||
Meeting: 2: Me, Boss
|
||||
Lunch: 4: Me, Colleagues
|
||||
section Go Home
|
||||
Commute: 3: Me, Bus
|
||||
Relax: 5: Me
|
||||
```
|
||||
@@ -0,0 +1,68 @@
|
||||
# Mind Map Test
|
||||
|
||||
This document tests the mind map feature in Yank Note.
|
||||
|
||||
## Basic Mind Map
|
||||
|
||||
- Central Topic{.mindmap}
|
||||
- [1] Branch A
|
||||
- Sub-topic A1
|
||||
- Sub-topic A2
|
||||
- [2] Branch B
|
||||
- Sub-topic B1
|
||||
- Sub-topic B2
|
||||
- Sub-topic B3
|
||||
- [3] Branch C
|
||||
- Sub-topic C1
|
||||
|
||||
## Project Planning Mind Map
|
||||
|
||||
- Project Plan{.mindmap}
|
||||
- [1] Requirements
|
||||
- User Stories
|
||||
- Acceptance Criteria
|
||||
- Constraints
|
||||
- [2] Design
|
||||
- Architecture
|
||||
- UI/UX
|
||||
- Database Schema
|
||||
- [3] Development
|
||||
- Frontend
|
||||
- Backend
|
||||
- API
|
||||
- [4] Testing
|
||||
- Unit Tests
|
||||
- Integration Tests
|
||||
- E2E Tests
|
||||
- [5] Deployment
|
||||
- CI/CD
|
||||
- Monitoring
|
||||
- Documentation
|
||||
|
||||
## Knowledge Map
|
||||
|
||||
- Yank Note Features{.mindmap}
|
||||
- [1] Markdown
|
||||
- Basic Syntax
|
||||
- Extended Syntax
|
||||
- Custom Extensions
|
||||
- [2] Diagrams
|
||||
- Mermaid
|
||||
- PlantUML
|
||||
- Draw.io
|
||||
- ECharts
|
||||
- [3] Code
|
||||
- Highlighting
|
||||
- Execution
|
||||
- Copy
|
||||
- [4] Organization
|
||||
- Wiki Links
|
||||
- Tags
|
||||
- TOC
|
||||
|
||||
## Notes
|
||||
|
||||
- Add `{.mindmap}` class to the root list item to render as a mind map
|
||||
- Uses kityminder-core as the rendering engine
|
||||
- Numbers in brackets `[1]`, `[2]` etc. are used for ordering branches
|
||||
- Nested list items become child nodes
|
||||
@@ -0,0 +1,87 @@
|
||||
# Multi-Markdown Table Test
|
||||
|
||||
This document tests advanced table features provided by markdown-it-multimd-table.
|
||||
|
||||
## Basic Table
|
||||
|
||||
| Header 1 | Header 2 | Header 3 |
|
||||
|----------|----------|----------|
|
||||
| A1 | A2 | A3 |
|
||||
| B1 | B2 | B3 |
|
||||
|
||||
## Multiline Cells
|
||||
|
||||
Enable with `multimd-multiline: true` in render settings.
|
||||
|
||||
| Feature | Description |
|
||||
|---------|-------------|
|
||||
| Multiline | This cell spans \
|
||||
multiple lines using \
|
||||
the backslash continuation |
|
||||
| Single | This is a single line cell |
|
||||
|
||||
## Column Span
|
||||
|
||||
| Header 1 | Header 2 | Header 3 |
|
||||
|----------|----------|----------|
|
||||
| A1 | A2 | A3 |
|
||||
| Merged Cell || | B3 |
|
||||
| C1 | Merged Cell ||
|
||||
|
||||
## Row Span
|
||||
|
||||
Enable with `multimd-rowspan: true` in render settings.
|
||||
|
||||
| Header 1 | Header 2 | Header 3 |
|
||||
|----------|----------|----------|
|
||||
| A1 | A2 | A3 |
|
||||
| ^^ | B2 | B3 |
|
||||
| C1 | C2 | ^^ |
|
||||
|
||||
The `^^` indicates the cell above spans into this row.
|
||||
|
||||
## Headerless Table
|
||||
|
||||
Enable with `multimd-headerless: true` in render settings.
|
||||
|
||||
| | | |
|
||||
|----------|----------|----------|
|
||||
| A1 | A2 | A3 |
|
||||
| B1 | B2 | B3 |
|
||||
|
||||
## Multi-body Table
|
||||
|
||||
Enable with `multimd-multibody: true` in render settings.
|
||||
|
||||
| Header 1 | Header 2 |
|
||||
|----------|----------|
|
||||
| Body 1 A | Body 1 B |
|
||||
| Body 1 C | Body 1 D |
|
||||
|----------|----------|
|
||||
| Body 2 A | Body 2 B |
|
||||
| Body 2 C | Body 2 D |
|
||||
|
||||
## Complex Table
|
||||
|
||||
| Project | Status | Priority | Notes |
|
||||
|---------|--------|----------|-------|
|
||||
| Feature A | ✅ Done | High | Merged Cell ||
|
||||
| Feature B | 🔄 In Progress || Medium | Needs review |
|
||||
| Feature C | ❌ Blocked | Low | Waiting for \
|
||||
dependency resolution |
|
||||
|
||||
## Table with Alignment and Formatting
|
||||
|
||||
| Left | Center | Right |
|
||||
|:-----|:------:|------:|
|
||||
| **Bold** | *Italic* | `Code` |
|
||||
| [Link](#) | ~~Strike~~ | ==Mark== |
|
||||
| Normal | $E=mc^2$ | :smile: |
|
||||
|
||||
## Notes
|
||||
|
||||
- `multimd-multiline`: Enable multi-line cells using `\` continuation
|
||||
- `multimd-rowspan`: Enable row spanning using `^^` marker
|
||||
- `multimd-headerless`: Allow tables without header rows
|
||||
- `multimd-multibody`: Allow multiple table bodies separated by horizontal rules
|
||||
- Column spanning uses empty cells (`||`)
|
||||
@@ -0,0 +1,108 @@
|
||||
# PlantUML Test
|
||||
|
||||
This document tests PlantUML diagram rendering in Yank Note.
|
||||
|
||||
## Sequence Diagram
|
||||
|
||||
@startuml
|
||||
Alice -> Bob: Authentication Request
|
||||
Bob --> Alice: Authentication Response
|
||||
|
||||
Alice -> Bob: Another authentication Request
|
||||
Alice <-- Bob: Another authentication Response
|
||||
@enduml
|
||||
|
||||
## Use Case Diagram
|
||||
|
||||
@startuml
|
||||
left to right direction
|
||||
actor User
|
||||
actor Admin
|
||||
|
||||
rectangle "Yank Note" {
|
||||
User --> (Edit Document)
|
||||
User --> (View Preview)
|
||||
User --> (Export PDF)
|
||||
Admin --> (Manage Extensions)
|
||||
Admin --> (Configure Settings)
|
||||
(Edit Document) --> (Save Document)
|
||||
}
|
||||
@enduml
|
||||
|
||||
## Class Diagram
|
||||
|
||||
@startuml
|
||||
class Document {
|
||||
-title: String
|
||||
-content: String
|
||||
-tags: List<String>
|
||||
+render(): HTML
|
||||
+save(): void
|
||||
+export(format: String): File
|
||||
}
|
||||
|
||||
class Editor {
|
||||
-document: Document
|
||||
-plugins: List<Plugin>
|
||||
+open(path: String): void
|
||||
+close(): void
|
||||
}
|
||||
|
||||
class Plugin {
|
||||
-name: String
|
||||
-version: String
|
||||
+activate(): void
|
||||
+deactivate(): void
|
||||
}
|
||||
|
||||
Editor "1" --> "1" Document : edits
|
||||
Editor "1" --> "*" Plugin : uses
|
||||
@enduml
|
||||
|
||||
## Activity Diagram
|
||||
|
||||
@startuml
|
||||
start
|
||||
:Open Document;
|
||||
if (Document exists?) then (yes)
|
||||
:Load Content;
|
||||
:Render Preview;
|
||||
else (no)
|
||||
:Create New Document;
|
||||
:Initialize Template;
|
||||
endif
|
||||
:Edit Content;
|
||||
:Save Document;
|
||||
stop
|
||||
@enduml
|
||||
|
||||
## Component Diagram
|
||||
|
||||
@startuml
|
||||
package "Yank Note" {
|
||||
[Editor] --> [Markdown Engine]
|
||||
[Markdown Engine] --> [Plugins]
|
||||
[Editor] --> [File System]
|
||||
[Plugins] --> [KaTeX]
|
||||
[Plugins] --> [Mermaid]
|
||||
[Plugins] --> [PlantUML]
|
||||
}
|
||||
@enduml
|
||||
|
||||
## State Diagram
|
||||
|
||||
@startuml
|
||||
[*] --> Draft
|
||||
Draft --> Editing : open
|
||||
Editing --> Saved : save
|
||||
Saved --> Editing : edit
|
||||
Editing --> Preview : toggle
|
||||
Preview --> Editing : toggle
|
||||
Saved --> [*] : close
|
||||
@enduml
|
||||
|
||||
## Notes
|
||||
|
||||
- PlantUML requires Java and Graphviz for local rendering
|
||||
- Can be configured to use an online API endpoint
|
||||
- Diagrams are enclosed between `@startuml` and `@enduml` markers
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
defaultPreviewer: 'Reveal.js'
|
||||
revealJsOpts:
|
||||
theme: moon
|
||||
progress: true
|
||||
controls: true
|
||||
slideNumber: true
|
||||
---
|
||||
|
||||
# Reveal.js Presentation Test
|
||||
|
||||
This document tests Reveal.js presentation rendering in Yank Note.
|
||||
|
||||
> **Note**: Requires the `@yank-note/extension-reveal-js` extension.
|
||||
|
||||
::: section
|
||||
|
||||
## Slide 1: Introduction
|
||||
|
||||
Welcome to the Yank Note Presentation!
|
||||
|
||||
- Feature-rich markdown editor
|
||||
- Extensible with plugins
|
||||
- Cross-platform support
|
||||
|
||||
:::
|
||||
|
||||
::: section
|
||||
|
||||
## Slide 2: Markdown Support
|
||||
|
||||
Yank Note supports rich markdown features:
|
||||
|
||||
| Feature | Status |
|
||||
|---------|--------|
|
||||
| Headings | ✅ |
|
||||
| Tables | ✅ |
|
||||
| Code | ✅ |
|
||||
| Math | ✅ |
|
||||
| Diagrams | ✅ |
|
||||
|
||||
:::
|
||||
|
||||
::: section
|
||||
|
||||
## Slide 3: Code Highlighting
|
||||
|
||||
```javascript
|
||||
function fibonacci(n) {
|
||||
if (n <= 1) return n;
|
||||
return fibonacci(n - 1) + fibonacci(n - 2);
|
||||
}
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: section
|
||||
|
||||
## Slide 4: Math Formulas
|
||||
|
||||
The Euler's identity:
|
||||
|
||||
$$e^{i\pi} + 1 = 0$$
|
||||
|
||||
The quadratic formula:
|
||||
|
||||
$$x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$
|
||||
|
||||
:::
|
||||
|
||||
::: section
|
||||
|
||||
## Slide 5: Thank You!
|
||||
|
||||
:tada: Thanks for watching!
|
||||
|
||||
- GitHub: [purocean/yn](https://github.com/purocean/yn)
|
||||
- Extensions: [yank-note-extension](https://github.com/purocean/yank-note-extension)
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## Configuration Notes
|
||||
|
||||
To create a Reveal.js presentation:
|
||||
|
||||
1. Set `defaultPreviewer: 'Reveal.js'` in front matter
|
||||
2. Configure options via `revealJsOpts`
|
||||
3. Use `::: section` containers to separate slides
|
||||
4. Available themes: `moon`, `black`, `white`, `league`, `beige`, `sky`, `night`, `serif`, `simple`, `solarized`
|
||||
@@ -0,0 +1,43 @@
|
||||
# Superscript and Subscript Test
|
||||
|
||||
This document tests superscript and subscript syntax supported by Yank Note.
|
||||
|
||||
## Superscript (`^text^`)
|
||||
|
||||
This is the 29^th^ of the month.
|
||||
|
||||
E = mc^2^
|
||||
|
||||
x^n^ + y^n^ = z^n^
|
||||
|
||||
2^10^ = 1024
|
||||
|
||||
a^b+c^
|
||||
|
||||
## Subscript (`~text~`)
|
||||
|
||||
Water is H~2~O.
|
||||
|
||||
Carbon dioxide: CO~2~
|
||||
|
||||
The chemical formula for sulfuric acid is H~2~SO~4~.
|
||||
|
||||
x~1~, x~2~, x~3~, ..., x~n~
|
||||
|
||||
a~ij~ represents the element in row i, column j.
|
||||
|
||||
## Combined Usage
|
||||
|
||||
The formula a~n~ = r^n^ demonstrates both subscript and superscript.
|
||||
|
||||
Chemical reaction: 2H~2~ + O~2~ → 2H~2~O
|
||||
|
||||
x~i~^2^ + y~i~^2^ = r^2^
|
||||
|
||||
## Superscript and Subscript in Context
|
||||
|
||||
In physics, the speed of light is approximately 3 × 10^8^ m/s.
|
||||
|
||||
The general term of a geometric sequence: a~n~ = a~1~ × r^n-1^
|
||||
|
||||
Avogadro's number: 6.022 × 10^23^ mol^-1^
|
||||
@@ -0,0 +1,61 @@
|
||||
# Table of Contents (TOC) Test
|
||||
|
||||
This document tests the TOC generation feature of Yank Note.
|
||||
|
||||
## TOC with Unordered List
|
||||
|
||||
[toc]{type: "ul", level: [1,2,3]}
|
||||
|
||||
## TOC with Ordered List
|
||||
|
||||
[toc]{type: "ol", level: [2,3]}
|
||||
|
||||
## TOC with Custom Levels
|
||||
|
||||
[toc]{type: "ul", level: [2,3,4,5]}
|
||||
|
||||
---
|
||||
|
||||
## Section One
|
||||
|
||||
Content of section one.
|
||||
|
||||
### Sub-section 1.1
|
||||
|
||||
Content of sub-section 1.1.
|
||||
|
||||
#### Sub-sub-section 1.1.1
|
||||
|
||||
Content of sub-sub-section 1.1.1.
|
||||
|
||||
### Sub-section 1.2
|
||||
|
||||
Content of sub-section 1.2.
|
||||
|
||||
## Section Two
|
||||
|
||||
Content of section two.
|
||||
|
||||
### Sub-section 2.1
|
||||
|
||||
Content of sub-section 2.1.
|
||||
|
||||
### Sub-section 2.2
|
||||
|
||||
Content of sub-section 2.2.
|
||||
|
||||
#### Sub-sub-section 2.2.1
|
||||
|
||||
Content of sub-sub-section 2.2.1.
|
||||
|
||||
##### Deep Heading 2.2.1.1
|
||||
|
||||
Deep content.
|
||||
|
||||
## Section Three
|
||||
|
||||
Content of section three.
|
||||
|
||||
### Sub-section 3.1
|
||||
|
||||
Content of sub-section 3.1.
|
||||
@@ -0,0 +1,47 @@
|
||||
# Wiki Links Test
|
||||
|
||||
This document tests the wiki links syntax supported by Yank Note.
|
||||
|
||||
## Basic Wiki Links
|
||||
|
||||
Link to a file: [[basic-syntax]]
|
||||
|
||||
Link to a file with extension: [[basic-syntax.md]]
|
||||
|
||||
## Wiki Links with Anchors
|
||||
|
||||
Link to a heading: [[basic-syntax#headings]]
|
||||
|
||||
Link to a specific section: [[toc#section-one]]
|
||||
|
||||
## Wiki Links with Display Text
|
||||
|
||||
Custom display: [[basic-syntax|Click here for basic syntax]]
|
||||
|
||||
Custom display with anchor: [[toc#section-two|Go to Section Two]]
|
||||
|
||||
## Wiki Links with Line/Column Position
|
||||
|
||||
Link to specific line: [[basic-syntax:10,1|Line 10 of basic syntax]]
|
||||
|
||||
Link to line and column: [[basic-syntax:5,3|Line 5, Column 3]]
|
||||
|
||||
## Image Wiki Links
|
||||
|
||||
Embed an image: ![[example-image.png]]
|
||||
|
||||
## Cross-reference Examples
|
||||
|
||||
See the [[front-matter|Front Matter documentation]] for configuration options.
|
||||
|
||||
Check [[macro|Macro features]] for expression evaluation.
|
||||
|
||||
Review [[containers|Container blocks]] for layout options.
|
||||
|
||||
## Wiki Links in Lists
|
||||
|
||||
- [[basic-syntax|Basic Syntax]]
|
||||
- [[extended-syntax|Extended Syntax]]
|
||||
- [[math-katex|Math & KaTeX]]
|
||||
- [[code-features|Code Features]]
|
||||
- [[mermaid|Mermaid Diagrams]]
|
||||
Reference in New Issue
Block a user