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:
copilot-swe-agent[bot]
2026-04-07 07:16:43 +00:00
committed by GitHub
parent 3c97fc0891
commit e9731f08a6
34 changed files with 2945 additions and 0 deletions
+92
View File
@@ -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 |
+37
View File
@@ -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.
+82
View File
@@ -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
+97
View File
@@ -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 image](https://via.placeholder.com/50){.inline}
### White Background
![White background image](https://via.placeholder.com/100){.bgw}
### Text Alignment
This is centered text.{.text-center}
This is right-aligned text.{.text-right}
This is left-aligned text.{.text-left}
### Border
![Image with border](https://via.placeholder.com/100){.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
![Sized image](https://via.placeholder.com/200){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}
+150
View File
@@ -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
![Alt text](https://via.placeholder.com/150 "Image Title")
![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)
+194
View File
@@ -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
```
+75
View File
@@ -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
+147
View File
@@ -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!
:::
:::
:::
+47
View File
@@ -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
+127
View File
@@ -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.
+59
View File
@@ -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 |
+94
View File
@@ -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
```
+53
View File
@@ -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.].
+102
View File
@@ -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--.
+56
View File
@@ -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.
+46
View File
@@ -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 #)
+84
View File
@@ -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
View File
@@ -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
+68
View File
@@ -0,0 +1,68 @@
# Image Enhancements Test
This document tests image enhancement features in Yank Note.
## Basic Image
![Basic image](https://via.placeholder.com/300x200)
## Image with Size
### Width and Height
![Sized image](https://via.placeholder.com/300x200 =100x80)
### Width Only (auto height)
![Width only](https://via.placeholder.com/300x200 =150x)
### Percentage Width
![Percentage](https://via.placeholder.com/300x200 =50%x)
## Image with Query Parameters
### Inline Display
![Inline image](https://via.placeholder.com/50?.inline) This text is next to the inline image.
### White Background
![White bg](https://via.placeholder.com/100?.bgw)
### Combined Parameters
![Combined](https://via.placeholder.com/80?.inline?.bgw)
## Image Centering
When a paragraph contains only a single image, it is automatically centered:
![Centered image](https://via.placeholder.com/200x100)
## Image with Attributes
![Styled image](https://via.placeholder.com/200){style="border-radius: 50%;"}
![Bordered image](https://via.placeholder.com/150){.with-border}
![Reduced brightness](https://via.placeholder.com/150){.reduce-brightness}
## Image in Different Contexts
### Image in List
- ![Small](https://via.placeholder.com/30?.inline) Item with image
- ![Small](https://via.placeholder.com/30?.inline) Another item
### Image in Table
| Image | Description |
|-------|-------------|
| ![A](https://via.placeholder.com/50) | First image |
| ![B](https://via.placeholder.com/50) | Second image |
### Image in Blockquote
> ![Quote image](https://via.placeholder.com/100)
> An image inside a blockquote.
+162
View File
@@ -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
+55
View File
@@ -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
+23
View File
@@ -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
+81
View File
@@ -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 */ }) =]
+43
View File
@@ -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.
+85
View File
@@ -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
+118
View File
@@ -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
$$
+145
View File
@@ -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
```
+68
View File
@@ -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
+87
View File
@@ -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 (`||`)
+108
View File
@@ -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
+91
View File
@@ -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`
+43
View File
@@ -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^
+61
View File
@@ -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.
+47
View File
@@ -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]]