# aardio 范例: Markdown 转 RTF 



````aardio
import fonts.fontAwesome;
import win.ui;
/*DSG{{*/
var winform = win.form(text="Markdown 转 RTF ";right=881;bottom=594;bgcolor=0xF6F4F3)
winform.add(
bkplus={cls="bkplus";left=8;top=11;right=873;bottom=585;align="left";bgcolor=0xFFFFFF;border={color=0xC0C0C0;radius=8;width=1};db=1;dl=1;dr=1;dt=1;z=1};
editMarkdown={cls="richedit";left=14;top=14;right=405;bottom=581;aw=1;bgcolor=0xFFFFFF;db=1;dl=1;dt=1;hscroll=1;multiline=1;vscroll=1;z=3};
editRtf={cls="richedit";left=413;top=14;right=867;bottom=581;bgcolor=0xFFFFFF;db=1;dr=1;dt=1;hscroll=1;multiline=1;vscroll=1;z=2};
splitter={cls="splitter";left=406;top=11;right=411;bottom=585;bgcolor=0xB4B4B4;db=1;dt=1;z=4}
)
/*}}*/

winform.show();
winform.editMarkdown.enablePopMenu();
winform.editRtf.enablePopMenu(function(){
	return { 
		{ /*分隔线*/ }; 
		{ "复制 RTF 代码";  function(id){
			import win.clip;
			
			var rtf = winform.editRtf.streamOut(0x8002);
			if(!#rtf) rtf = winform.editRtf.rtf;
			win.clip.write(rtf);
		}}; 
	}
})

import win.debounce;
import string.markdown.toRtf;
winform.editMarkdown.onChange = win.debounce(function(){ 
	winform.editRtf.rtf = string.markdown.toRtf(owner.text);
	
},500)

winform.editMarkdown.langOptions = 2/*_IMF_AUTOFONT*/;
winform.editMarkdown.text = "# 一级标题

这是一段 **粗体**、*斜体*、`行内代码` 和 ~~删除线~~ 的混合文本。
这一行通过软换行测试是否会被折叠成空格而不是断行。

&#xF014; 删除图标 - 支持 NCR 编码表示 FontAwesome 字体图标。需要 fonts.fontAwesome 字体库。  

支持 emoji 🔥 

高频 KaTex 单符号公式 $\Rightarrow$

> 引用块

## 代码块
```aardio
var x = 1;
var y = 2;
print(x + y)
```

## 表格
| 姓名 | 年龄 | 城市 |
| --- | --- | --- |
| 张三 | 18 | 北京 |
| 李四 | 20 | 上海 |


## 二级标题

### 无序列表
- 项目一
- 项目二
- 项目三

### 有序列表
1. 第一步
2. 第二步
3. 第三步

### 任务列表
- [x] 已完成的任务
- [ ] 待办的任务

## 引用块
> 这是一段引用文字
> 引用的第二行


## 链接
访问 [aardio 官网](https://www.aardio.com) 了解更多。

---

文档结束。";

winform.splitter.split(winform.editMarkdown,winform.editRtf);

win.loopMessage();
````

