POML 空白控制(White Space Control)
参考官方文档:
- White Space(稳定版):microsoft.github.io/poml/stable...
- 样式表(Stylesheet):microsoft.github.io/poml/stable...
- IR(中间表示):microsoft.github.io/poml/stable...
注意:该特性为"实验性(experimental)",未来版本可能变更,请谨慎使用。
概览
- whiteSpace / white-space 属性 可用于大多数 POML 组件,用来精细控制文本空白(空格、换行、缩进)的处理方式。
- 常见使用场景:精确排版、与不同"目标语法(Markdown/JSON/XML 等)"配合时的空白稳定性。
取值与默认行为(White Space Options)
- 可用取值:
- pre:原样保留所有空白(空格、Tab、换行)。
- filter:移除首尾空白;在元素之间的空白做"标准化"(比如连续换行归并为空格)。
- trim:仅移除内容开头与结尾的空白。
- 默认值:
- 当
syntax="text"
时,默认是pre
。 - 其他语法默认是
filter
。
- 当
- 作用范围:仅作用于"当前组件本身",不影响其子组件。若要批量应用,请考虑使用
<stylesheet>
(见下文)。
基本示例(Example Usage)
poml
<poml>
<!-- 原样保留(pre) -->
<p whiteSpace="pre" syntax="markdown">
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
</p>
<!-- 归并空白(filter) -->
<p whiteSpace="filter">
This text will have normalized spacing.
New lines will also be reduced to a space.
</p>
<!-- 去首尾空白(trim) -->
<p whiteSpace="trim">
This text will have leading and trailing spaces removed.
</p>
</poml>
渲染后的整体文本(概念示意):
vbnet
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
This text will have normalized spacing. New lines will also be reduced to a space.
This text will have leading and trailing spaces removed.
与"语法(syntax)"的关系(White Space Related to Syntax)
whiteSpace
仅控制渲染到 IR(中间表示) 时的空白处理。- 当 IR 再被写出为 Markdown/JSON/XML 等具体格式时,生成器可能按目标语法规则进一步影响空白。
示例(Markdown 语法对空白的影响):
poml
<poml syntax="markdown" whiteSpace="pre">
Marker 0
Marker 1
<p>
The first paragraph.
</p>
Marker 2
<p>
The second paragraph.
</p>
Marker 3
</poml>
可能写出为(单行示意):
sql
Marker 0 Marker 1 The first paragraph. Marker 2 The second paragraph. Marker 3
若你需要"完全按字面保留空白",建议:
- 使用
syntax="text"
且whiteSpace="pre"
; - 但注意:在
syntax="text"
下不能使用如<p>
这类标签组件。
示例:
poml
<poml syntax="text" whiteSpace="pre">
Line 1
Line 2 (indented)
Line 3
</poml>
用样式表批量应用空白策略(Stylesheet)
当需要对多处/多类元素统一设置空白规则时,可使用 <stylesheet>
:
poml
<poml>
<stylesheet>
{ "p": { "whiteSpace": "pre" } }
</stylesheet>
<p> A B C </p>
<p> D\n\nE </p>
</poml>
上例将对所有 <p>
应用 whiteSpace="pre"
。
实践建议与常见坑
- 仅影响当前组件 :
whiteSpace
不会递归影响子节点;需要全局/批量请用<stylesheet>
。 - 目标语法影响:即使 IR 中保留了空白,写出到 Markdown/JSON/XML 时仍可能被目标语法再次规整。
- 与 syntax 配合 :追求"字面保持"时优先
syntax="text"
+pre
;但不能混用结构化标签(如<p>
)。 - 属性别名 :同时支持
whiteSpace
与white-space
两种写法;风格上建议统一。 - 实验性特性:未来可能变更,升级 POML 后应回归测试关键模板。
参考与下一步
- White Space:microsoft.github.io/poml/stable...
- 样式与运行配置(Meta/Stylesheet/Runtime):microsoft.github.io/poml/stable...
- IR 深入理解:microsoft.github.io/poml/stable...
- 组件总览: microsoft.github.io/poml/stable...
POML 空白控制(White Space Control)
参考官方文档:
- White Space(稳定版):microsoft.github.io/poml/stable...
- 样式表(Stylesheet):microsoft.github.io/poml/stable...
- IR(中间表示):microsoft.github.io/poml/stable...
注意:该特性为"实验性(experimental)",未来版本可能变更,请谨慎使用。
概览
- whiteSpace / white-space 属性 可用于大多数 POML 组件,用来精细控制文本空白(空格、换行、缩进)的处理方式。
- 常见使用场景:精确排版、与不同"目标语法(Markdown/JSON/XML 等)"配合时的空白稳定性。
取值与默认行为(White Space Options)
- 可用取值:
- pre:原样保留所有空白(空格、Tab、换行)。
- filter:移除首尾空白;在元素之间的空白做"标准化"(比如连续换行归并为空格)。
- trim:仅移除内容开头与结尾的空白。
- 默认值:
- 当
syntax="text"
时,默认是pre
。 - 其他语法默认是
filter
。
- 当
- 作用范围:仅作用于"当前组件本身",不影响其子组件。若要批量应用,请考虑使用
<stylesheet>
(见下文)。
基本示例(Example Usage)
poml
<poml>
<!-- 原样保留(pre) -->
<p whiteSpace="pre" syntax="markdown">
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
</p>
<!-- 归并空白(filter) -->
<p whiteSpace="filter">
This text will have normalized spacing.
New lines will also be reduced to a space.
</p>
<!-- 去首尾空白(trim) -->
<p whiteSpace="trim">
This text will have leading and trailing spaces removed.
</p>
</poml>
渲染后的整体文本(概念示意):
vbnet
This text has multiple spaces and indentation preserved.
You can also include endless new lines.
This text will have normalized spacing. New lines will also be reduced to a space.
This text will have leading and trailing spaces removed.
与"语法(syntax)"的关系(White Space Related to Syntax)
whiteSpace
仅控制渲染到 IR(中间表示) 时的空白处理。- 当 IR 再被写出为 Markdown/JSON/XML 等具体格式时,生成器可能按目标语法规则进一步影响空白。
示例(Markdown 语法对空白的影响):
poml
<poml syntax="markdown" whiteSpace="pre">
Marker 0
Marker 1
<p>
The first paragraph.
</p>
Marker 2
<p>
The second paragraph.
</p>
Marker 3
</poml>
可能写出为(单行示意):
sql
Marker 0 Marker 1 The first paragraph. Marker 2 The second paragraph. Marker 3
若你需要"完全按字面保留空白",建议:
- 使用
syntax="text"
且whiteSpace="pre"
; - 但注意:在
syntax="text"
下不能使用如<p>
这类标签组件。
示例:
poml
<poml syntax="text" whiteSpace="pre">
Line 1
Line 2 (indented)
Line 3
</poml>
用样式表批量应用空白策略(Stylesheet)
当需要对多处/多类元素统一设置空白规则时,可使用 <stylesheet>
:
poml
<poml>
<stylesheet>
{ "p": { "whiteSpace": "pre" } }
</stylesheet>
<p> A B C </p>
<p> D\n\nE </p>
</poml>
上例将对所有 <p>
应用 whiteSpace="pre"
。
实践建议与常见坑
- 仅影响当前组件 :
whiteSpace
不会递归影响子节点;需要全局/批量请用<stylesheet>
。 - 目标语法影响:即使 IR 中保留了空白,写出到 Markdown/JSON/XML 时仍可能被目标语法再次规整。
- 与 syntax 配合 :追求"字面保持"时优先
syntax="text"
+pre
;但不能混用结构化标签(如<p>
)。 - 属性别名 :同时支持
whiteSpace
与white-space
两种写法;风格上建议统一。 - 实验性特性:未来可能变更,升级 POML 后应回归测试关键模板。
参考与下一步
- White Space:microsoft.github.io/poml/stable...
- 样式与运行配置(Meta/Stylesheet/Runtime):microsoft.github.io/poml/stable...
- IR 深入理解:microsoft.github.io/poml/stable...
- 组件总览: microsoft.github.io/poml/stable...