引言
标记语言分为四种类型:
- 自动替换 在文章开始处理之前执行。因此,自动替换允许在文章中添加新的代码,这些代码随后会作为语法被处理。详见 [[include]] 章节。
- 段落划分 按既定规则自动进行。
- 自由语法 没有严格的格式;每个标记元素可能以完全不可预测的方式被解析。这些元素不总是彼此兼容,也不一定与块级元素兼容。
- 块级元素 具有严格规则;其格式在外观上类似于 HTML 标记或 BBCode。块级元素具有名称、属性、修饰符。那些原则上可以包含其他元素的块级元素,对其所包含元素的类型不作限制(包括其他块级元素)。
自动替换
[[include]]:从其他文章插入代码
语法:
[[include 文章名称 参数1 = 值1 | 参数2 = 值2]]
为了使该元素正常工作,在起始的 [[ 前面从行首开始不得有任何文本(包括空格)。同样,在结束的 ]] 之后也不能有任何文本。
元素 [[include]],以及其中的各个参数,都可以占用多行。
使用该元素时,系统会访问指定的站点文章,获取其源代码,并将该源代码插入到 [[include]] 所在的位置。
在插入之前,会对指定文章中的所有变量进行自动替换。例如,形如 {$参数1} 的变量将被替换为在该元素中指定的对应参数值。
由于插入源代码是在“行级”而非“元素级”进行的,因此被嵌入的文章中可以包含完整或部分源代码。同样,[[include]] 的参数中也可以包含完整或部分源代码。
示例:
- 文章 page1 中的代码:
{$param}
- 使用 [[include]] 的文章中的代码:
[[include page1 param=[[div class="code"]] ]]
text
[[include page1 param=[[/div]] ]]
- 结果:
[[div class="code"]]
text
[[/div]]
[[noinclude]]:在被插入到其他页面时忽略部分代码
语法:
[[noinclude]]
...任意文本...
[[/noinclude]]
某些站点组件同时包含可调用代码(组件本身)、使用说明文档以及预览内容。
为了防止这些可视化元素被包含到作者文章中,可以使用 [[noinclude]] 标签。
无论是起始还是结束的 [[noinclude]] 标签,都必须单独占据一整行,否则标签不会生效。这样设计是为了降低误触发或错误触发的概率,例如在记录该功能自身文档时。
分类模板
分类模板是形如 component:_template 的隐藏页面。对于主分类,页面名称为 _template.
如果为某个分类(例如此处的 component)指定了模板,那么该模板将会为该分类下的所有文章渲染显示,而不是文章的实际代码。同时,模板中支持 ListPages 模块 中使用的所有变量。例如,可以通过 %%content%% 获取原始文章代码。
%%path%%, %%path_expr%%, %%path_url%%:页面参数
站点引擎支持通过形如 /参数/值 的语法在页面地址中传递参数。
例如,为了在文章 page1 中访问参数 %%param%% 和 %%param2%%,可以通过如下地址访问:
https://projwikit.unitreaty.org/page1/param/example1/param2/example2
由于这些变量替换属于自动替换,目标文章可以通过三种方式访问参数:
- %%path|param%% 直接将变量值插入文章代码;如果未指定该变量,则插入文本 %%path|param%%。
- "%%path_expr|param%%" 以 JSON 字符串格式插入变量值;若未指定,则插入文本 ""%%path_expr|param%%""。这允许在块级元素属性中传递包含特殊字符的复杂值(例如 [[input type="text" value="%%path_expr|param%%"]] 可确保即便用户使用特殊字符,值也能正确写入)。
- %25%25path_url%7Cparam%25%25 插入 URL 编码格式的变量值;若未指定,则插入 %25%25path_url%7Cparam%25%25。这允许在链接或传递给其他页面的参数中使用这些值(例如 [[module Redirect to="/other_page/param/%25%25path_url%7Cparam%25%25"]])。
排版符号的自动替换
- `文本' —— 替换为 ‘文本’。
- ``文本'' —— 替换为 “文本”。
- ,,文本'' —— 替换为 „文本”。
需要注意的是,由于这些符号替换发生在自动替换阶段,因此可能跨多行发生,甚至包括在 字面量、[[code]]、[[module]] 等内容中;请务必注意。
段落划分
系统中所有可以包含其他元素的元素,分为两大类:
- 行内元素。包括普通文本、所有文本格式元素,以及 [[span]] 和其他诸如 [[image]]、[[user]] 等元素。一般来说,如果该元素默认显示为 display: inline 或 display: inline-block,则可视为行内元素。
- 全宽元素。包括标题、分隔线、列表、[[toc]]、[[div]]、[[blockquote]]、[[footnoteblock]]、[[collapsible]] 等。大致对应 display: block。
尽管上文提及 CSS 属性,但该属性的实际值不会影响段落生成,因为元素的分类是在其从标记转换为 HTML 的初始阶段完成的。
段落会被创建:
- 在全宽块级元素中,如果未为其指定修饰符 _(例如 [[div_]])。_
该修饰符并非对所有块级元素都可用,详见各元素说明。
- 在简单引用块(>)中。
段落不会被创建:
- 在任何行内元素中。
- 在块级表格([[table]])中。
- 在大多数自由语法元素中(> 除外)。_
可以通过将所需文本包裹在 [[div]] 或 [[p]] 中来绕过该限制,例如:_
|| [[div]]第一行 第二行[[/div]] || 下一个表格单元格 ||
在此示例中,[[div]] 内的内容会被包裹为段落,而下一个表格单元格则会被直接作为文本添加。_
该技巧同样适用于块级表格。
要在支持段落的元素中创建或分隔新段落,需要满足以下多个条件:
- 该行必须是元素中的第一行,或者其上方至少有一整行空行,或者其上方存在一个全宽元素。
- 该行必须仅包含行内元素。全宽元素周围不会创建段落。在段落内部插入全宽元素会在该处终止当前段落,并在该全宽元素之后创建新段落。
如果在不创建段落的元素中存在文本(根据上述任一条件),文本中的空行将被视为普通换行(<br>,而不是 <p>)。
控制换行
如果你希望空行仅作为空行,而不是创建段落,可以使用两种方法:
- 在该行放置任何视觉上为空的元素(但在段落判定上不视为空)。例如 [[span]][[/span]]、@@@@、@<>@。
- 在该行末尾添加符号 _。该符号会被明确解释为换行,并且绝不会转换为段落。
你也可以在代码分成多行时阻止换行(以及段落创建)。这在编写复杂代码时非常有用,可以保持可读性,同时不在视觉上拆分文本。为此,请在行末添加 \,则下一行会“粘连”到当前行。例如,下列代码在插入文章后将显示为一行 “abc”:
a\
[[span class="some-class"]]\
b\
[[/span]]\
c
自由语法
文本格式
- **文本** —— 粗体 文本。
- //文本// —— 斜体 文本。
- {{文本}} —— 等宽文本。
- --文本-- ——
删除线文本。
- ^^文本^^ —— 上标 文本。
- ,,文本,, —— 下标 文本。
- __文本__ —— 下划线 文本。
所有上述文本格式化方式都遵循相同的规则:
- 元素与其内部文本之间不得有空格(例如,__ 文本 __ 不是正确语法)。
- 元素可以跨多行,但不能跨多个段落。
正确:
//a b c//
错误:
//a b c//
- 元素内部可以包含任何其他元素,包括块级元素。在使用块级元素的情况下,段落限制将被解除。例如:
//[[div]]a b c[[/div]]//
同时也支持文本着色:
- ##颜色|文本## — 有颜色的 文本。
颜色可以使用任何 CSS 支持的颜色,例如表达式 ##rgba(255, 127, 0, 0.5)|文本## 是合法的。
当使用十六进制值表示颜色(RRGGBB、RRGGBBAA、RGB、RGBA)时,不必额外使用 # 符号(例如:##ffe|文本## 与 ###ffe|文本## 等效)。
链接
- [地址 文本] 或 [*地址 文本] — 普通链接。
通常用于外部链接,或在站内文章之间使用参数进行链接,或用于锚点链接(例如:[#toc-0 指向第一个标题的链接])。
地址不能包含空格,而链接文本可以包含空格。链接文本不得跨多行。
如果链接以星号 * 开头,则会在新窗口(标签页)中打开。 - [[[文章]]] 或 [[[文章|]]] 或 [[[文章|链接文本]]] — 使用完整标识符(地址)创建站内文章链接。
此类链接会显示在文章的反向链接中;如果目标文章不存在,则会以不同颜色显示。
语法变体:- [[[category:page1]]] — 创建指向 category:page1 的链接,链接文本大致对应文章标识符(符号 - 会被替换为空格,分类前缀会被移除等)。
- [[[category:page1|]]] — 创建指向 category:page1 的链接。
如果该文章存在,则自动使用其标题作为链接文本;否则使用其标识符。 - [[[category:page1|文本]]] — 创建指向 category:page1 的链接,并使用指定文本作为链接名称。
链接文本同样不得跨多行。
- 自动链接:形如 http://...、ftp://... 的文本会自动转换为对应链接。
这种自动替换可能会引发问题并破坏其他语法。如需避免,可以使用 字面量。
元素位置控制
- = 文本 — 段落居中。必须放在段落开头使用,此后整个段落(包括后续行)都会居中对齐。
- _ — 显式换行。只能用于行尾。
例如,可用于防止两个连续空行被合并为一个段落,如下所示:
a _ _ b
此外,_ 允许在原本不支持换行的元素中插入换行(例如表格或列表)。
为了正确生效,显式换行符必须与前面的文本或元素之间用空格分隔。
- ~~~、~~~<、~~~> — 清除浮动元素。
仅在行首使用时有效。
分别等同于:
[[div style="clear: both"]][/div]]
[[div style="clear: left"]][[/div]]
[[div style="clear: right"]][[/div]]
标题
+ 文本、
++ 文本、
+++ 文本、
++++ 文本、
+++++ 文本、
++++++ 文本 — 分别对应一级至六级标题。
不支持六级以上标题。
该元素只能在新行使用。
内部不支持换行,但可以嵌入块级元素或显式换行,例如:
++ 第一行 _ 第二行
在标题文本前可以添加符号 *,例如 ++* 文本。
此时该标题不会被加入目录。
水平线
--- — 添加水平分隔线。
该元素只能在新行使用。
前三个 - 之后的数量没有限制。
引用
以下语法会创建两个嵌套的引用块:
> 第一级 >> 第二级 >> 第二级的第二行 > 回到第一级
由于 [[blockquote]] 具有更好的可读性(和可编辑性),因此不推荐使用此语法。
列表
网站支持三种列表类型:有序列表、无序列表和字典列表。
前两种可以相互嵌套。
示例:无序列表中嵌套有序列表:
* 元素1 * 元素2 # 元素2.1 # 元素2.2 * 元素3
列表的嵌套级别由 * 或 # 前的空格或制表符数量决定。
列表项中可以通过 _ 或使用 [[span]] 包裹内容来实现多行,例如:
* 元素1 _ 下一行 * [[span]]元素2 下一行[[/span]]
字典列表定义如下:
: 术语1 : 定义 : 术语2 : 定义 : 术语3 : 定义
在术语或定义中同样可以使用 _ 或 [[span]]。
表格
简化(自由)语法的表格如下所示:
||~ 标题 ||~ 标题2 || ||> 右对齐文本 ||= 居中文本 || |||| 横向跨越两列的单元格 ||
要在单元格中添加多行文本,可以使用 _ 或 [[span]]。
该元素无法创建跨越多行(纵向合并)的单元格。在这种情况下,可以使用块级元素 [[table]],它不受此限制。
其他
- [[# anchor]] — 创建一个具有指定标识符的元素,从而可以通过链接跳转到该位置(例如:[#anchor 跳转到锚点])。
该元素在视觉上类似于块级元素,但实际上并不是。
在元素定义中,# 后必须保留一个空格。
- [!-- 注释 --] — 定义一段在最终页面显示时不会呈现的源代码区域。
可用于在代码中添加技术性备注。
始终生成一行文本(字面量)。
可用于在出于视觉效果使用标记符号时避免歧义(例如,并非链接用途的单个方括号)。
也可用于破坏自动替换语法(当不希望发生自动替换时),例如:
%%pat@@h|param%% 始终会显示为文本 %%path|param%%,即便指定了参数 param。
也可用于像 _ 那样创建空行(但不推荐这样使用)。
- @<—©>@ — 插入指定的 HTML 实体符号(或多个符号)。
- 符号 «、» 和 — 的替换
由于这些替换不属于自动替换,因此在仅支持纯文本的场景下不会生效(例如块属性或链接名称中)。
- << — 左引号:«
- >> — 右引号:»
- -- — 长破折号:—
需要注意的是,为了使该元素被解析为破折号而不是删除线语法,其两侧必须有空格。
块级元素
所有块级元素都遵循类似规则构建。
每个块级元素都有名称(例如 div、iftags、blockquote 等)、可选的标识符,以及一个起始标签(例如 [[div]])。
可以包含文本或其他块级元素的块级元素,还必须有与起始标签对应名称的结束标签(例如 [[/div]])。
某些块可以使用修饰符 _。
该修饰符写在块名称之后,用于阻止在块内自动创建段落(文本会直接放入块中,换行通过 <br> 实现)。
修饰符只写在起始标签中,因此以下语法是正确的:
[[div_]]text[[/div]]
块的标识符是可选文本,写在块名称之后(但在修饰符 _ 之前),通过 : 指定。例如:
[[module:lu ListUsers]]
[[module CSS]]
body {
background: url(%%avatar%%);
}
[[/module]]
[[/module:lu]]块标识符允许在接受文本内容的块(如 [[code]]、[[module]]、[[html]])内部使用该块的标准结束标签,而不会真正关闭它。
这样可以将多个模块相互嵌套,或在该块内部写出 [[code]] 的示例:
[[code:2]]
[[code:b]]
示例:使用块 [[cоde]]
[[/code:b]]
[[/code:2]]大多数块可以以某种形式接受属性(要么是 HTML 属性,要么是特定块自定义属性)。
属性写法为 参数=值 或 参数="值"。
不同于 HTML,在属性值中使用特殊字符时,不使用 HTML 实体(如 "),而是通过 \ 转义:
例如 [[collapsible show="协议 \"忧郁\""]]。
标准 HTML 属性
某些元素(例如 [[a]]、[[span]] 等)是 HTML 的直接接口,
其标记中的属性会直接插入生成的 HTML 页面中。
并非所有 HTML 属性都允许在标记中使用。
允许使用的属性列表如下;更多详情请参阅
https://www.w3schools.com/tags/ref_attributes.asp 的 HTML 文档。
在本网站语境中最常用的属性已用 红色 标出。
- alt
- class
- colspan
- href
- id:该属性会被特殊处理。标识符必须以 u- 作为前缀。如果未指定此前缀,系统会自动添加。例如,id="myid" 将会被转换为 id="u-myid"。
- rowspan
- style
- target
- accept
- align
- autocapitalize
- autoplay
- background
- bgcolor
- border
- buffered
- checked
- cite
- cols
- contenteditable
- controls
- coords
- datetime
- decoding
- default
- dir
- dirname
- disabled
- download
- draggable
- for
- form
- headers
- height
- hidden
- high
- hreflang
- inputmode
- ismap
- itemprop
- kind
- label
- lang
- list
- loop
- low
- max
- maxlength
- min
- minlength
- multiple
- muted
- name
- optimum
- pattern
- placeholder
- poster
- preload
- readonly
- required
- reversed
- role
- rows
- scope
- selected
- shape
- size
- sizes
- span
- spellcheck
- src
- srclang
- srcset
- start
- step
- tabindex
- title
- translate
- type
- usemap
- value
- width
- wrap
- scrolling
- frameborder
布尔属性
文档中标记为可接受布尔值的属性,在实际使用中可以用以下字符串表示:
True:
- true
- t
- 1
- yes
False:
- false
- f
- 0
- no
同样适用于以下内置 HTML 属性:
- allowfullscreen
- allowpaymentrequest
- async
- autofocus
- autoplay
- checked
- controls
- default
- disabled
- formnovalidate
- hidden
- ismap
- itemscope
- loop
- multiple
- muted
- nomodule
- novalidate
- open
- playsinline
- readonly
- required
- reversed
- selected
- truespeed
[[<]]、[[>]]、[[=]]、[[==]]:对齐
- 类型
- 全宽
- 段落
- ✅
- 支持属性
- ❌
- [[<]] — 将内部文本左对齐。
- [[>]] — 将内部文本右对齐。
- [[=]] — 将内部文本居中对齐。
- [[==]] — 将内部文本两端对齐。
[[a]]:链接
- 类型
- 行内
- 别名
- [[anchor]]
- 支持 HTML 属性
- ✅
- 支持 *
- ✅
- 支持 _
- ✅
使用修饰符 *(例如 [[*a href="https://google.com"]]Google[[/a]])等同于使用 target="_blank";该链接会在新窗口(标签页)中打开。
若同时使用该修饰符和 target,其值将会叠加。
通过该元素创建的链接会经过 标准过滤。
[[blockquote]]:引用块
- 类型
- 全宽
- 段落
- ✅
- 别名
- [[quote]]
- 支持 HTML 属性
- ✅
在功能上等同于使用 >,但在标记层面更加“干净”和易读。
[[b]]:加粗文本
- 类型
- 行内
- 别名
- [[bold]]、[[strong]]
- 支持 HTML 属性
- ✅
[[char]]:HTML 字符
- 类型
- 行内
- 别名
- [[character]]
- 支持属性
- ❌
在文本中插入一个 HTML 实体字符。
其工作方式与 @<>@ 语法几乎相同。
使用示例:[[char —]]
[[code]]:代码块
- 类型
- 全宽
- 段落
- ❌
- 支持属性
- ✅
允许忽略 [[code]] 与 [[/code]] 之间的标记规则。
主要用于展示标记示例而不被立即解析。
该元素也可用于代码高亮。
通过该元素添加到页面的代码,可以通过如下格式的单独文件访问:
https://files.projwikit.unitreaty.org/local--code/<页面名称>/<页面中的代码块编号,从 1 开始>
对于 HTML、JavaScript、XML、CSS 语言,将设置对应的 MIME 类型,
从而可以在 <script src>、<link rel> 等需要类型匹配的场景中使用。
仅支持一个属性:
- type — 需要高亮的编程语言名称。
[[collapsible]]:可折叠区块
- 类型
- 全宽
- 段落
- ✅
- 支持 HTML 属性
- ❌
创建一个可通过按钮展开或折叠的区块。
除 HTML 属性外,还支持以下属性:
- show — 区块关闭时按钮显示的文本。
- hide — 区块打开时按钮显示的文本。
- align — 按钮文本对齐方式。可选值:
left、right、center、justify。
- folded — 指示区块是否默认展开。布尔值。
- hideLocation — 指示展开后关闭按钮的显示位置。
可选值:top、bottom、both、neither、none。
后两个选项等价。
[[date]]:日期
- 类型
- 行内
- 支持 HTML 属性
- ❌
插入日期,并根据查看者计算机的时区自动调整显示。
使用特殊属性语法;日期直接写在块名后,而非单独属性:
[[date 2024-02-18T00:00:00Z format="%H:%M:%S %d.%m.%Y"]]
例如,该日期以 UTC 指定,
但在 UTC+0200 时区的计算机上将显示为:
"02:00:00 18.02.2024"
[[div]]:全宽通用容器
- 类型
- 全宽
- 段落
- ✅
- 支持 HTML 属性
- ✅
- 支持 _
- ✅
[[footnote]]:脚注
- 类型
- 行内
- 支持属性
- ❌
在文本中添加编号脚注。
其内容默认显示在页面底部,或显示在 [[footnoteblock]] 所在位置(若手动指定)。
[[footnoteblock]]:脚注块
- 类型
- 全宽
- 支持 HTML 属性
- ❌
显示文章中所有脚注的列表。
支持以下属性:
- title — 显示在脚注列表上方的标题文本。
- hide — 布尔值。
若指定,该脚注块将不显示。
可用于移除页面自动添加的默认脚注块,使脚注仅以悬浮提示形式显示。
{{@@
点击“提交”后,将跳转到文章 search,
例如:
https://projwikit.unitreaty.org/search/s/你的_字符串
随后可在目标文章中使用 %%path%% 功能读取该参数。
[[html]]: HTML 代码
- 类型
- 全宽
- 段落
- ❌
- 支持属性
- ✅
允许插入任意 HTML 代码,系统会自动将其包裹在 [[iframe]] 中。以这种方式创建的框架会自动根据其内容大小进行自适应。
在当前版本的网站中,该元素通过 <iframe srcdoc="..."> 实现。通过这种方式创建的框架没有域名,因此在框架内部的 JS 代码中无法使用 window.localStorage 和 document.cookie。
支持以下属性:
- external — 布尔值(默认 — false);启用该参数后,区块将通过媒体域名(https://files.projwikit.unitreaty.org)进行渲染,其方式与 Wikidot 平台相同。此类区块通常加载时间会稍慢几秒,但支持使用 window.localStorage 和 document.cookie。
注意: 当前页面版本系统在启用 external 的 HTML 区块中无法正常工作,因此始终会显示你代码的最新版本(包括在预览和查看旧版本页面时)。此外,此类区块不会读取 页面参数。
[[iframe]]: 通过链接嵌入外部页面
- 类型
- 全宽
- 段落
- ❌
- 支持 HTML 属性
- ✅
语法:
[[iframe 链接 属性1="值" 属性2="值"]]
支持所有允许的 HTML 属性。
通过该元素插入的链接会经过 标准过滤。
[[#if]], [[if]]: 根据值是否存在显示内容
- 类型
- 取决于内容
- 支持属性
- ❌
行内示例:
[[#if {$param} | param exists | param does not exist]]全宽示例:
[[if {$param}]]
param exists
[[else]]
param does not exist
[[/if]]只要是非空字符串都被视为“存在”,除了 {$变量} 或 %%变量%% 这种格式的字符串。由于未在 [[include]] 或模块中传递的参数会保留为文本值,因此可以借此判断参数是否被传入。
[[#ifexpr]], [[ifexpr]]: 根据条件表达式显示内容
- 类型
- 取决于内容
- 支持属性
- ❌
块级示例:
[[module CountPages fullname="main"]] [[#ifexpr %%count%% > 0 | yes | no]] [[/module]]
全宽示例:
[[module CountPages fullname="main"]]
[[ifexpr %%count%% > 0]]
main page exists
[[else]]
main page does not exist
[[/ifexpr]]
[[/module]]若表达式语法错误(例如变量不存在或参数传递错误),表达式视为 false。
否则,除 False、0、0.0 或 "" 以外的任何值都视为 true。
支持的运算符:*, /, +, -, <<, >>, 以及比较运算 ==, !=, <, >, <=, >=。
除直接比较外,大多数运算仅支持数字。字符串必须以 JSON 格式表示(例如 "值")。
还支持以下函数:
- min(x, y, ...) — 返回最小值。
- max(x, y, ...) — 返回最大值。
- abs(x) — 返回绝对值。
- round(x) — 四舍五入为整数。
- lower(str) — 转为小写。
- upper(str) — 转为大写。
[[ifcategory]]: 根据文章分类显示内容
- 类型
- 取决于内容
- 支持属性
- ❌
示例:
[[ifcategory +theme]] 该文本仅在 theme 分类页面中显示。 [[/ifcategory]] [[ifcategory -theme]] 该文本在除 theme 外的所有页面显示。 [[/ifcategory]]
该元素主要用于与 [[include]] 配合使用,使插入的代码根据所在页面的分类产生不同效果。
若存在多个分类,应以空格分隔。
[[iftags]]: 根据文章标签显示内容
- 类型
- 取决于内容
- 支持属性
- ❌
标签条件写在区块名称后,以空格分隔,格式如下:
- +标签 — 页面必须包含该标签。
- -标签 — 页面不得包含该标签。
- 标签 — 页面至少包含列出的其中一个标签。
示例:
[[iftags 对象 故事 +ru]] 该文章属于俄罗斯分部的对象或故事。 [[/iftags]]
[[image]]: 图片
- 类型
- 行内 / 全宽
- 支持 HTML 属性
- ✅
插入当前页面附件图片:
[[image img.png alt="my img"]]
插入其他页面附件图片:
[[image main/ico_arthub.svg alt="image from another page"]]
也可以插入互联网图片(不推荐,因为可能发生链接失效——上传至站点的文件会随文章长期保留,而网络图片可能随时失效)。
支持对齐修饰符 f<, f>, <, >, =。后三种会使图片成为全宽元素。
- [[f<image]] — 左浮动图片,文字会环绕。
- [[f>image]] — 右浮动图片。
- [[<image]] — 左对齐全宽图片。
- [[>image]] — 右对齐全宽图片。
- [[=image]] — 居中全宽图片。
支持 link 属性,可将图片自动包裹为链接。该链接会经过 标准过滤,效果等同于 [[a href="..."]][[image ...]][[/a]]。
[[input]]: 输入框
- 类型
- 行内
- 支持 HTML 属性
- ✅
可单独使用,也可与表单搭配使用。
[[i]]: 斜体文本
- 类型
- 行内
- 别名
- [[italics]], [[em]], [[emphasis]]
- 支持 HTML 属性
- ✅
[[lines]]: 插入空行
- 类型
- 行内
- 支持属性
- ❌
用于插入多行空白。
示例:
[[lines 8]]
[[ul]], [[ol]], [[li]]: 列表
- 类型
- 行内 / 全宽
- 支持 HTML 属性
- ✅
- 支持 _
- ✅
- [[ul]] — 无序列表(全宽)。
- [[ol]] — 有序列表(全宽)。
- [[li]] — 列表项(行内)。
示例:
[[ul]]
[[li]]第一项[[/li]]
[[li]]第二项[[/li]]
[[li]]
[[ol]]
[[li]]第一条编号[[/li]]
[[li]]第二条编号[[/li]]
[[/ol]]
[[/li]]
[[li]]第三项[[/li]]
[[/ul]]所有列表元素均支持标准 HTML 属性。
[[mark]]: 高亮文本
- 类型
- 行内
- 别名
- [[highlight]]
- 支持 HTML 属性
- ✅
[[module]]: 插入站点模块
- 类型
- 全宽
- 别名
- [[module654]]
- 支持 HTML 属性
- ❌
通用语法:
[[module 模块名称 属性1="值" 属性2="值"]] 模块内容(仅适用于支持内容的模块) [[/module]]
模块列表及其属性见“模块”章节。
对于不支持内容的模块(如 [[module Rate]]),无需写关闭标签。
[[table]], [[row]], [[hcell]], [[cell]]: 表格
- 类型
- 全宽
- 段落
- ❌
- 支持 HTML 属性
- ✅
类似于标准 HTML 表格。
- [[table]] — <table>
- [[row]] — <tr>
- [[hcell]] — <th>
- [[cell]] — <td>
不支持 <thead>、<tbody>、<tfoot>。
示例:
[[table class="wiki-content-table"]]
[[row]]
[[hcell]]标题 1[[/hcell]]
[[hcell]]标题 2[[/hcell]]
[[cell rowspan="2"]]跨行单元格[[/cell]]
[[/row]]
[[row]]
[[cell colspan="2"]]跨列单元格[[/cell]]
[[/row]]
[[/table]][[tabview]], [[tab]]: 标签页
- 类型
- 全宽
- 段落
- ✅
- 别名
- [[tabs]](对应 [[tabview]])
- 支持 HTML 属性
- ❌
用于在页面中创建可切换的标签页。
示例:
[[tabview]]
[[tab 标签 1]]
标签 1 内容
[[/tab]]
[[tab 标签 2]]
标签 2 内容
[[/tab]]
[[/tabview]]标签名称也可使用 [[tab title="标签名称"]] 格式。
[[tt]]: 等宽文本
- 类型
- 行内
- 别名
- [[mono]], [[monospace]]
- 支持 HTML 属性
- ✅
[[p]]:显式段落
- 类型
- 全宽
- 替代名称
- [[paragraph]]
- 段落
- ❌
- 支持 HTML 属性
- ✅
允许为当前段落指定 HTML 属性,就像为 <p> 指定属性一样。
示例:
[[p style="color: red"]] 红色段落。 [[/p]]
[[ruby]], [[rt]]:汉字注音标注
- 类型
- 行内
- 替代名称
- [[rubytext]](用于 [[rt]])
- 支持 HTML 属性
- ✅
使用示例:
[[ruby]]マレニア[[rt]]Malenia[[/rt]][[/ruby]]
[[rb]]:简化汉字注音标注
- 类型
- 行内
- 替代名称
- [[ruby2]]
- 支持 HTML 属性
- ✅
使用示例:
[[rb マレニア | Malenia]]
[[size]]:字体大小
- 类型
- 行内
- 支持属性
- ❌
允许修改字体大小。尺寸可以使用任何 CSS 允许的数值。
使用示例:
这段文字非常[[size 200%]]大[[/size]],同时又[[size 6px]]小[[/size]]。
[[span]]:行内通用容器
- 类型
- 行内
- 支持 HTML 属性
- ✅
- 支持 _
- ✅
可以包含任何其他元素,也可用于为文章中的文本添加样式。
[[s]]:删除线文本
- 类型
- 行内
- 替代名称
- [[strikethrough]], [[del]], [[deletion]]
- 支持 HTML 属性
- ✅
[[sup]]:上标文本
- 类型
- 行内
- 替代名称
- [[super]], [[superscript]]
- 支持 HTML 属性
- ✅
[[sub]]:下标文本
- 类型
- 行内
- 替代名称
- [[subscript]]
- 支持 HTML 属性
- ✅
[[toc]]:自动目录
- 类型
- 全宽
- 支持属性
- ❌
在页面中添加一个可展开的标题列表块。
可使用以下前缀改变元素位置:
- [[f<toc]] — 左侧浮动块。该块会被周围文本和块级元素环绕。
- [[f>toc]] — 右侧浮动块。
[[u]]:下划线文本
- 类型
- 行内
- 替代名称
- [[underline]], [[ins]], [[insertion]]
- 支持 HTML 属性
- ✅
[[user]]:用户链接
- 类型
- 行内
- 支持属性
- ❌
- 支持 *
- ✅
可以以两种形式使用:
- [[user 用户名]] — 输出普通用户链接。
- [[*user 用户名]] — 输出用户链接及其头像。
补充:链接处理
出于安全原因,某些链接会被网站屏蔽。
除非某个元素或模块的文档中另有说明,否则所有链接(例如 []、[[[|]]]、[[a href="..."]]、[[image ... link="..."]] 等)都会按照以下规则进行检查。
明确 禁止 的绝对链接协议:
- data:
- javascript:(除 "javascript:;" 之外,该形式表示“空链接”)
明确允许的绝对链接协议:
- blob:
- chrome-extension://
- chrome://
- content://
- data:
- dns:
- feed:
- file://
- ftp://
- git://
- gopher://
- http://
- https://
- irc6://
- irc://
- ircs://
- mailto:
- resource://
- rtmp://
- sftp://
对于块级元素,下列以指定字符开头的链接同样被视为合法链接:
- A-Z, a-z, 0-9, .(普通相对链接)。
- /, //(基于当前域名和协议的绝对链接)。
- #(锚点跳转)。
- ?(跳转到当前页面并附带 GET 参数)。
- $, &, +, ,, :, ;, =, @, %, -, ~(其他允许用于相对链接的特殊字符)。
对于自由语法元素,会采用更严格的校验规则,并允许更少的特殊字符,以便将链接与语法本身区分开来:
- # + (A-Z, a-z, 0-9, _, -, %)(锚点跳转)。
- //地址(使用当前协议的绝对链接)。
- /地址(使用当前域名的绝对链接)。
- 任何不以 / 开头,但包含它的文本。
补充:模块
模块提供了网站中不属于普通文章的全部功能。这包括交互元素(评分、论坛、标签云)以及扩展功能(向文章添加 CSS 样式、获取其他文章或当前用户的信息等)。
如果模块的运行导致网站功能异常,可以通过添加参数 /nomodule/true 访问页面(例如:https://projwikit.unitreaty.org/main/nomodule/true)。
该参数会完全禁用此页面上的 所有 模块。
关于如何在文章中插入模块的详细说明,请参见 章节 [[module]]。
此外,需要注意的是,对于支持内部标记的模块(例如 ListUsers、ListPages 和 CountPages),模块内容在技术上并不属于文章内容的一部分。例如,在模块内部定义的任何 标题 或 脚注,都只会在该模块范围内显示。
模块 Rate
- 支持参数
- ❌
- 支持内容
- ❌
为文章添加评分组件,效果类似于页面底部“评分”按钮下方的评分模块。
从发布规则角度来看,该模块是必需的,但从技术角度来看并非强制。如果文章中未包含该模块,仍然可以通过“评分”按钮进行投票。
该模块不接受任何参数。
模块 CSS
- 支持参数
- ❌
- 支持内容
- ✅
该模块的内容会原样作为 CSS 样式应用到当前页面。例如:
[[module CSS]]
body {
background: red;
}
[[/module]]可以通过如下地址获取页面上所有 CSS 模块合并后的结果文件:
https://files.projwikit.unitreaty.org/local--theme/<页面名称>/style.css
该方法会处理 [[if]]、[[ifexpr]] 和 [[noinclude]]。
可以通过参数 ?includeParams=<JSON 格式参数> 传递参数。
模块 ListPages
- 支持参数
- ✅
- 支持内容
- ✅
用于根据指定参数获取文章列表。
对于每一篇找到的文章,模块内容都会被复制并作为标记进行处理,并进行 自动替换,替换以下变量:
- %%name%% — 文章的自身标识符(例如 main)。
- %%category%% — 文章类别(例如 sandbox)。
- %%fullname%% — 包含类别的完整标识符(例如 sandbox:main)。
- %%title%% — 文章标题。
- %%title_linked%% — 包含标题的 内部链接。
- %%link%% — 从当前域名开始的绝对链接(以 / 开头)。
- %%content%% — 文章内容(标记格式)。
- %%rating%% — 文章评分。
- %%rating_votes%% — 文章投票数。
- %%current_user_voted%% — True/False,表示当前用户是否投票。
- %%popularity%% — 文章人气值:正向投票比例(在点赞系统下)或高于 3.0 的评分比例(在星级系统下)。
- %%revisions%% — 文章修订次数。
- %%index%% — 在搜索结果中的序号。
- %%total%% — 符合条件的文章总数。
- %%created_by%% — 创建文章的用户名。
- %%created_by_linked%% — 创建者的用户名、头像及个人主页链接。
- %%updated_by%% — 最后编辑者用户名。
- %%updated_by_linked%% — 最后编辑者的用户名、头像及个人主页链接。
- %%tags%% — 以逗号分隔的标签列表。
- %%tags_linked%% — 以逗号分隔的标签链接列表,格式为 /system:page-tags/tag/标签名。
- %%created_at%% — 创建日期。
- %%updated_at%% — 最后修改日期。
ListPages 模块参数列表:
- range — 只能使用 range="." 格式。
用于优化当前页面变量获取。
使用该参数时,其它参数将被忽略。
- fullname — 限制为指定完整标识符的单一文章。
可使用 . 表示当前文章。
使用该参数时,其它参数将被忽略。
- pagetype — 按文章类型筛选。
类型可为 hidden(标识符以 _ 开头)或 normal(其它文章)。
默认值为 normal。
- name — 按文章自身标识符筛选(不含类别)。
例如 name="main" 可能匹配 wl:main 或 sandbox:main。
可接受值:
- *(默认)— 不限制。
- . — 当前文章(使用后忽略其它参数)。
- = — 与当前文章相同标识符。
- 文本% 或 文本* — 指定前缀。
- 具体标识符 — 精确匹配。
- tags — 按标签筛选。
可接受值:
- *(默认)— 不限制。
- - — 无标签文章。
- = — 至少包含当前文章标签(允许额外标签)。
- == — 标签完全一致。
- iftags 表达式。
- category — 按类别筛选。
可接受值:
- * — 不限制。
- .(默认)— 当前类别。
- ifcategory 表达式。
- parent — 按父页面筛选。
可接受值:
- - — 无父页面。
- = — 与当前页面相同父页面。
- -= — 与当前页面不同父页面。
- . — 父页面为当前页面。
- 完整标识符 — 指定父页面。
- created_by — 按作者筛选。
可接受值:
- . — 当前用户。
- 用户名 — 指定作者。
- created_at — 按创建日期筛选。
格式 年-月-日(月日可省略)。
支持比较运算:=, <>, >=, >, <=, <。
- rating — 按评分筛选。
注意:添加该参数会显著降低查询速度。
支持 =, <>, >=, >, <=, <。
- votes — 按投票数筛选。
注意:添加该参数会显著降低查询速度。
支持 =, <>, >=, >, <=, <。
- popularity — 按人气值筛选。
注意:添加该参数会显著降低查询速度。
支持 =, <>, >=, >, <=, <。
- order — 排序。
默认升序。降序需添加 desc,例如 order="created_at desc"。
支持排序字段:
- created_at
- created_by
- updated_at
- name
- fullname
- title
- rating (注意:会显著降低查询速度)
- votes (注意:会显著降低查询速度)
- popularity (注意:会显著降低查询速度)
- random — 随机排序。
- offset — 相对于第一篇找到的文章的偏移量,从该位置开始渲染模块;例如 offset="1" 表示第一篇找到的文章将不会被显示。
- limit — 模块中最多渲染的文章数量。
- perpage — 模块单页最多显示的文章数量。
若超过该值,模块中将出现分页列表,可在页面之间切换。
注意:当参数 wrapper 被设置为负值时,文章数量仍会受到限制,但分页列表 不会 出现。
- p — 当文章数量超过一页时,模块的初始页码。
此外,还可以使用以下参数控制文章信息的输出方式:
- prependLine — 此参数中的标记将在文章列表渲染之前输出;通常用于表格标题行。
该参数中不支持变量。
- appendLine — 此参数中的标记将在文章列表渲染完成后输出。
该参数中不支持变量。
- separate — 布尔值(默认值为 true);启用后,每篇文章的标记(以及 appendLine 和 prependLine)都会作为完全独立的元素处理。
这主要影响 [[iftags]] 与 [[ifcategory]] 的行为、通过 [[image]] 使用这些文章中的图片,以及是否可以将标记拼接为完整代码(例如用于表格)。
因此,若使用 ListPages 渲染表格,必须设置 separate="false"。
- wrapper — 布尔值(默认值为 true);启用后,模块内容会被包裹在带有 list-pages-box 类名的 <div> 元素中。
同时启用 ListPages 的动态(AJAX)功能,例如分页切换。
不建议关闭此参数。
- reverse — 布尔值(默认值为 false);启用后,文章列表顺序将被反转。
该操作将在通过 order 参数完成普通排序之后执行。
对于上述任意属性,都可以通过 @URL|默认值 从页面地址中的变量获取值。
该结构会将模块属性设置为与属性同名的 URL 变量值,若未指定则使用 默认值。例如,若目标文章包含 [[module ListPages category="@URL|sandbox"]],并通过 /category/fragment 访问页面,则模块将输出 fragment 分类下的页面;若未传递变量,则输出 sandbox 分类下的页面。
模块 CountPages
- 支持参数
- ✅
- 支持内容
- ✅
支持与 模块 ListPages 相同的参数,但不会输出任何文章信息。
可包含标记内容,并通过 自动替换 使用以下变量:
- %%total%%, %%count%% — 符合条件的文章数量。
模块 ListUsers
- 支持参数
- ✅
- 支持内容
- ✅
该模块可用于获取当前用户的信息。
可包含标记内容,并通过 自动替换 使用以下变量:
- %%number%% — 用户 ID。
- %%title%%, %%name%% — 用户名。
- %%avatar%% — 用户头像链接。
默认情况下,若当前用户未登录,模块将不会显示。
可使用布尔参数 always 防止该行为。
当其为正值时,模块内容仍会显示,但除 %%avatar%%(默认头像链接)外,其它变量将不可用。
因此,可以使用以下方式检测用户是否已登录:
[[module ListUsers always="yes"]]
[[if %%number%%]]
用户已登录
[[else]]
用户未登录
[[/if]]
[[/module]]模块 Redirect
- 支持参数
- ✅
- 支持内容
- ❌
将当前页面重定向至另一页面。支持参数:
- destination — 目标地址。
不会进行标准过滤,仅禁止以 data: 或 javascript: 开头的链接。
- noredirect — 当为正的 布尔值 时,阻止模块在当前页面生效。
通常在编辑包含该模块的页面时使用(/noredirect/true)。
示例:
[[module Redirect destination="/scp-1730"]]
模块 InterWiki
- 支持参数
- ✅
- 支持内容
- ✅
系统模块。用于在侧边栏显示当前页面的多语言翻译。
通过 API Crom 实现,由英文 SCP 社区创建并维护。
对于每个找到的翻译,模块内容会被复制并作为标记处理,并进行 自动替换,可使用以下变量:
- %%url%% — 翻译页面地址。
- %%language%% — 翻译语言名称或对应维基名称(若同一语言有多个维基),语言由 language 参数指定。
- %%language_native%% — 翻译语言在其自身语言中的名称。
- %%language_code%% — 翻译语言代码(例如 en, ru)。
InterWiki 模块参数:
- article — 要获取翻译列表的文章名称。
- prependLine — 若翻译数量超过一个,该参数中的标记将在翻译列表渲染前输出。
不支持变量。
- appendLine — 若翻译数量超过一个,该参数中的标记将在翻译列表渲染后输出。
不支持变量。
- language — %%language%% 所使用的显示语言。
- order — 排序方向与变量。可使用 url, language, language_native, language_code。
可添加 desc 表示降序(例如 order="language_native desc")。
- omitlanguage — 在获取翻译列表时忽略的语言(通常为当前维基语言)。
- empty — 若未找到任何翻译时显示的标记。
- loading — 页面加载完成后立即显示,在获取翻译数据之前显示的标记。
模块 TagCloud 与 PagesByTag
系统模块,用于支持页面 «标签云» 的功能。
模块 SiteChanges
系统模块,用于支持页面 «最近更改» 的功能。
模块 ForumStart、ForumCategory、ForumThread、ForumNewThread、ForumNewPost
系统模块,用于支持论坛功能。
- ForumStart 模块必须位于系统页面 forum:start,用于显示分区列表。
- ForumCategory 模块必须位于系统页面 forum:category,用于显示指定分区的主题列表。
- ForumThread 模块必须位于系统页面 forum:thread,用于显示指定主题中的帖子。
- ForumNewThread 模块必须位于系统页面 forum:new-thread,用于在指定分区创建新主题。
- ForumNewPost 不直接用于页面,而通过主题页面的模块 API 使用。
模块 RecentPosts
系统模块,用于支持页面 «论坛最新帖子» 的功能。
