# string.markdown 库模块帮助文档

<details>  <summary>说明</summary>  <p>

string.markdown（Sundown） 解析器默认规则：

- 列表解析默认使用宽松规则。
无论一级列表还是二级列表（无论类型是否相同），都不要求前面有或没有空行。
- 标题的开始标记 `#` 号后面必须有空格。
- 强调语法对于下划线使用严格模式，其他标记使用宽松模式

	* 所有强调标记内侧都不能紧邻空白字符
	* 强调标记为 `*`、 `*`、`~~` 时对外侧紧邻字符不作要求。
	* 强调标记为下划线 `_` 时，
	如果指定了 `_MD_MKDEXT_NO_INTRA_EMPHASIS` 选项（默认设置）：

		* 首尾标记内侧都不能有空白字符
		* 开始标记外侧不能是字母或数字。
		* 结束标记如果是**单下划线**则要求尾部紧邻的字符不能是字母或数字。

		目前主流的 Markdon 解析器 `*`、 `*`、`~~` 的要求与上面相同（宽松规则）。
		但对下划线强调语法多采用严格规则，要求首尾外侧有空白字符或标点符号（一些解析器识别中文标点）。
		`_MD_MKDEXT_NO_INTRA_EMPHASIS` 对下划线强调的要求则更为宽松（仅检测英文字母数字）。

		目前主流的写法基本都不会使用下划线表示强调。
		但基本所有解析器都对下划线强调语法保持了兼容。

		文档中下划线开头的常量或变量可以置入内联代码块。
		例如 `` `_CMDLINE ` ``，代码块内不会解析其他 Markdown 语法（包括强调标记）。
		或者用在下划线前面加上 Markdown 转义符（反斜杆）。
		例如 `` \_CMDLINE `` 。

- 默认启用删除线扩展，示例： ~~这里显示删除线~~ 。
- 默认启用表格扩展。
- 默认启用围栏代码块（Fenced Code Blocks）扩展。
  多行围栏代码块支持嵌套，可使用 3 个以上的反引号，要点：
  * 首尾反引号数目要配对。
  * 首尾反引号都必须是单独一行。
  * 开始的反引号标记后面可以写语言名称，尾部反引号标记后面不能有其他非空白字符。
- 默认支持可选列表（checklist）扩展。

	可选列表（checklist）除了兼容只读的任务列表格式，也可以设为可选状态，并支持自动识别与转换字符序号。
	方便用于 AI 生成试题（答案可用 details,summary 标签折叠显示。

	HTML 渲染选项指定 `0x400/*_MD_HTML_TASK_ENABLED*/` 则复选框显示为启用状态。
	也可以调用 setTaskCheckboxEnabled 方法设置复选框是否显示为启用状态，默认显示为禁用状态。

- 支持字母排序列表。

	* 如果列表项列表项以 `+ `、`- `、`* ` 开始，
	而列表内容以“大写字母 + 圆点 + 空格”的大写字母序号开始则转换为字母排序列表。
	* 如果同时指定了复选框，复选框标记必须在字母序号之前。

	示例：

	```
	- A. 列表项 1
	- B. 列表项 2
		- [ ] A. 选项一
		- [ ] B. 选项二
	```
- 可识别并跳过 Front Matter 。
</p></details>

## string 成员列表 <a id="string" href="#string">&#x23;</a>

### string.markdown() <a id="string.markdown" href="#string.markdown">&#x23;</a>
[返回对象:stringMarkdownObject](#stringMarkdownObject)

### string.markdown(extensions,maxNesting,htmlRenderFlags) <a id="string.markdown" href="#string.markdown">&#x23;</a>
创建 MARKDOWN 解析器,所有参数可选。  
- 参数 @extensions 用 _MD_MKDEXT_ 前缀常量组合自定义需要启用的扩展。参数 @maxNesting 指定最大嵌套级别，默认为 16，一般不必修改。  
- 参数 @htmlRenderFlags 指定 HTML 渲染选项（多个选或用 `|` 连接），  
如果指定 `0x400/*_MD_HTML_TASK_ENABLED*/` 则任务列表中的复选框显示为启用状态。  
@htmlRenderFlags 如果指定 `1/*_MD_HTML_SKIP_HTML*/` 则丢弃所有 HTML 标签。

### string.markdown(extensions,maxNesting,htmlRenderFlags,useCallbacks) <a id="string.markdown" href="#string.markdown">&#x23;</a>

```aardio
string.markdown(8,,,{  
	blockcode = function(ob, text, lang, opaque){    
		ob = string.markdown.buffer(ob);  
		text = string.markdown.buffer(text);  
		ob.put( tostring(text) )  
	};   
} );
```

## string.markdown 成员列表 <a id="string.markdown" href="#string.markdown">&#x23;</a>

### string.markdown.buffer() <a id="string.markdown.buffer" href="#string.markdown.buffer">&#x23;</a>
[返回对象:stringMarkdownBufObject](#stringMarkdownBufObject)

### string.markdown.buffer(缓冲区初始大小) <a id="string.markdown.buffer" href="#string.markdown.buffer">&#x23;</a>
创建缓冲区,参数可选

## stringMarkdownBufObject 成员列表 <a id="stringMarkdownBufObject" href="#stringMarkdownBufObject">&#x23;</a>

### stringMarkdownBufObject.data() <a id="stringMarkdownBufObject.data" href="#stringMarkdownBufObject.data">&#x23;</a>
返回缓冲区指针

### stringMarkdownBufObject.grow(增加大小) <a id="stringMarkdownBufObject.grow" href="#stringMarkdownBufObject.grow">&#x23;</a>
增加缓冲区大小

### stringMarkdownBufObject.printf("%s",其他格式化参数) <a id="stringMarkdownBufObject.printf" href="#stringMarkdownBufObject.printf">&#x23;</a>
写放格式化字符串,  
格式化语法与 string.format相同

### stringMarkdownBufObject.put(写入数据,长度) <a id="stringMarkdownBufObject.put" href="#stringMarkdownBufObject.put">&#x23;</a>
写入数据到缓冲区,长度为可选参数

### stringMarkdownBufObject.size() <a id="stringMarkdownBufObject.size" href="#stringMarkdownBufObject.size">&#x23;</a>
返回缓冲区数据大小

### stringMarkdownBufObject.totring() <a id="stringMarkdownBufObject.totring" href="#stringMarkdownBufObject.totring">&#x23;</a>
返回缓冲区文本

## stringMarkdownObject 成员列表 <a id="stringMarkdownObject" href="#stringMarkdownObject">&#x23;</a>

### stringMarkdownObject.codeBlock(code,lang) <a id="stringMarkdownObject.codeBlock" href="#stringMarkdownObject.codeBlock">&#x23;</a>
将 @code 参数指定的代码首尾加上三连反引号代码块标记。  
如果代码已经包含三连反引号，则会重复首尾三连反引号直到没有冲突。  
可选用 lang 参数指定编程语言名称

### stringMarkdownObject.free() <a id="stringMarkdownObject.free" href="#stringMarkdownObject.free">&#x23;</a>
释放解析器对象,  
该函数可在对象回收时自动调用

### stringMarkdownObject.render(markdownText) <a id="stringMarkdownObject.render" href="#stringMarkdownObject.render">&#x23;</a>
解析参数 @markdownText 指定的 Markdown 文本并返回 HTML。  
自动调用 tostring 函数将参数 @markdownText 转换为字符串。

### stringMarkdownObject.renderCode(code,lang) <a id="stringMarkdownObject.renderCode" href="#stringMarkdownObject.renderCode">&#x23;</a>
将 @cdode 参数指定的编程代码置入 Markkdown 围栏代码块中，  
然后转换并返回为 HTML 代码，自动处理嵌套的 Markkdown 代码块标记。  
可选用 lang 参数指定编程语言名称

### stringMarkdownObject.renderFile(markdownFilePath) <a id="stringMarkdownObject.renderFile" href="#stringMarkdownObject.renderFile">&#x23;</a>
解析参数 @markdownFilePath 指定的 Markdown 文件并返回 HTML

### stringMarkdownObject.setRenderFlags(flags,disabled) <a id="stringMarkdownObject.setRenderFlags" href="#stringMarkdownObject.setRenderFlags">&#x23;</a>
设置 HTML 渲染选项。  
- 参数 @1 指定一个或多个（按位或） _MD_HTML_ 前缀的选项数值。  
- 参数 @2 为 true 则禁用指定的选项，否则启用。

### stringMarkdownObject.setTaskCheckboxEnabled() <a id="stringMarkdownObject.setTaskCheckboxEnabled" href="#stringMarkdownObject.setTaskCheckboxEnabled">&#x23;</a>
任务列表中显示的复选项是否显示为启用状态。  
参数 @1 指定是否启用，默认显示为禁用状态。

### 自动完成常量
_MD_HTML_ESCAPE=0x200  
_MD_HTML_EXPAND_TABS=0x10  
_MD_HTML_HARD_WRAP=0x80  
_MD_HTML_SAFELINK=0x20  
_MD_HTML_SKIP_HTML=1  
_MD_HTML_SKIP_IMAGES=4  
_MD_HTML_SKIP_LINKS=8  
_MD_HTML_SKIP_STYLE=2  
_MD_HTML_TAG_CLOSE=2  
_MD_HTML_TAG_NONE=0  
_MD_HTML_TAG_OPEN=1  
_MD_HTML_TASK_ENABLED=0x400  
_MD_HTML_TOC=0x40  
_MD_HTML_USE_XHTML=0x100  
_MD_MKDA_EMAIL=2  
_MD_MKDA_NORMAL=1  
_MD_MKDA_NOT_AUTOLINK=0  
_MD_MKDEXT_AUTOLINK=8  
_MD_MKDEXT_FENCED_CODE=4  
_MD_MKDEXT_LAX_SPACING=0x100  
_MD_MKDEXT_NO_INTRA_EMPHASIS=1  
_MD_MKDEXT_SPACE_HEADERS=0x40  
_MD_MKDEXT_STRIKETHROUGH=0x10  
_MD_MKDEXT_SUPERSCRIPT=0x80  
_MD_MKDEXT_TABLES=2  
_MD_MKD_TABLE_ALIGNMASK=3  
_MD_MKD_TABLE_ALIGN_CENTER=3  
_MD_MKD_TABLE_ALIGN_L=1  
_MD_MKD_TABLE_ALIGN_R=2  
_MD_MKD_TABLE_HEADER=4  
