代码保护区
CommonMark 的围栏代码块和行内代码具有最高词法优先级,内部所有 DraMark 特殊标记失效。
保护范围
| 类型 | 起始标记 | 结束标记 | 保护内容 |
|---|---|---|---|
| 围栏代码块 | ``` 或 ~~~ | 同等长度/类型的围栏标记 | 块内全部文本 |
| 行内代码 | ` | 匹配的起始标记 | 标记间全部文本 |
保护区内失效的语法
@角色声明$$唱段标记=译配标记<<...>>/<<<...>>>Tech Cue%注释标记{}动作提示
围栏代码块示例
dramark
```cpp
// 这里的所有 DraMark 标记都失效
template <typename T>
class RolePair {
vector<vector<int>> matrix; // 不触发 Tech Cue
};
void setup() {
std::cout << "Hello, World! >>" << std::endl; // 不触发 Tech Cue
}
```带 info string
dramark
```javascript
// 代码块内 @ 不触发角色声明
function greet() {
console.log("Hello @world");
}
```
```dramark
@角色 % 在代码块内,这是纯文本
台词...
```行内代码示例
dramark
使用 `vector<vector<int>>` 定义矩阵。
按 `Ctrl + @` 快捷键。
价格是 `$50` 美元。为什么需要代码保护区?
C++ 模板安全
cpp
vector<vector<int>> matrix; // 在非保护区会解析错误位移操作符
cpp
int value = 1 << 8; // 在非保护区 << 被识别为 Tech Cue包含特殊字符的技术文档
剧本中可能需要包含代码片段、配置示例等技术内容。
嵌套规则
围栏代码块内部
所有 DraMark Block 标记均不触发栈操作:
dramark
```dramark
@角色 % 这是代码块内的纯文本,不是角色声明
--- % 这是代码块内的纯文本,不是场景分隔
```行内代码内部
所有 DraMark 行内标记失效:
dramark
这是 `{动作}` 示例。 % 行内代码内的 {} 不触发动作提示最佳实践
- 代码示例使用围栏代码块:确保技术内容正确显示
- 行内代码使用反引号:保护行内的特殊字符
- 不需要在代码块内转义:代码块内的
\@会显示为\@