User:红石小蝈/WikitextLogic
这个页面将以贴近本质的方式讲述MediaWiki是如何把您输入的Wikitext解析成HTML。
阅读此页面可能需要一定的逻辑思维基础,若无特殊说明,这里所有的符号默认是半角的。
由于萌百相对于原生 Mediawiki 装了很多的额外插件,这篇内容里的许多信息可能并不适用于其他 wiki.
序言 - Wikitext和HTML
对于Wikitext,在座的各位一定有所了解,Wikitext就是我们用来编辑萌百之类的媒体维基(Media Wiki)网站的语言,更准确地说,是标记语言
(Markup Language),什么是标记语言呢?你可能听说过一些其他的标记语言,比如HTML, Markdown, LaTeX之类的,这些语言都属于标记语言。标记语言通俗讲就是能被软件解析成能给你看的界面的语言。MediaWiki所做的就是将Wikitext这种标记语言转换成HTML, 通过浏览器展现给你。
换行
在Wikitext中,两个连着的换行(Line Break, 即大多数语言中的"\n
")一般情况下对应着HTML里的一个段落间隔,即两个不同的<p></p>
标签,特殊情况下,当有一个<div>
标签仍未闭合(即得到对应的</div>
标签)时,会直接在div内生成<p>
标签。
通常情况下,仅有一个换行的时候,这个换行对应着HTML文件里的一个换行,但当内容包含在列表元素里(即Wikitext中#
(井号, Hash),*
(星号, Asterisk), ;
(分号, Semicolon)或:
(冒号, Colon)开头的一行代码中)时,无论这个换行是直接体现在代码里的,或是出现在引用里的,都会导致这个列表的结束。
标题
比如某一行Wikitext的内容是== blablabla ==
,那么这一行会被解析成<h2>blablabla</h2>
,至于页面端标题后面带的“编辑”与移动端标题后面编辑的符号,是MW内置的。而这允许“一级标题”在正文中存在(尽管并不推荐这种写法)。
列表
Wikitext中存在3种不同的列表,分别是有序列表,无序列表,和混合列表,其中有序列表用#
声明,无序列表用*
声明,混合列表用;
与:
共同声明。
有序列表
无序列表
混合列表
链接
Wikitext中的链接有两种格式,内链和外链。[1]
内链
内链,即内部链接,是链向自己维基(即萌娘百科)的超链接。
Wikitext中内链的写法是[[ooo]]
或[[ooo|xxx]]
, 即为用两对"[
" 和 "]
"(中括号, Square Brackets)包起来的一段文字。若中括号中有"|
"(管道符, Pipe),则管道符之前是链向的页面名称,之后则是链接上显示的文字;若没有管道符,则会将链想的页面名称作为链接上显示的文字。具体来说,[[ooo]]
和[[ooo|xxx]]
都是链向https://zh.moegirl.org/ooo
的链接(其中ooo是页面名称)。若有管道符但管道符后面无内容则会按照这样的逻辑预编译:去掉标题文字":
"(冒号)及之前的内容或/和第一个"(
"与最后一个")
"(圆括号, Parentheses)及括号间的内容,放到管道符之后作为显示文字。
特殊内链
Wikitext中有两种内链比较特殊,分别是File名字空间下的内链(形如[[File:ooo|xxx|xxx|xxx|xxx]]
, 具体见Help:图像,这里不再阐述细节)和Category名字空间名字空间下的内链(形如[[Category:ooo|xxx]]
),前者会生成成一张图片,后者会使写入这段的这个页面包含在此分类里,并按照xxx排序。
正确生成链向这两个名字空间内链的方法是在链接前面加一个:
,形如[[:ooo:xxx]]
,这样就会生成到对应页面的链接了。
跨wiki链
跨维基链接是一种介于内链和外链之间的链接[2],它用内链的格式书写(此特性在下面还会被提到),但会链接到别的维基。跨维基链的格式是[[prefix:name]]
,其中的 "prefix" 是链向的维基名,所有的萌百能用的 prefix 见Special:跨wiki。
跨wiki链的原理类似同一名字空间的不同别名,这里就不再赘述。
跨语言链接
跨语言链接是一种特殊的跨wiki链接,格式为[[lang:oo]]
(这里的lang
是语言代码,汉语对应zh
,英语对应en
,日语对应ja
),它并不会原地生成一个链接,而是在侧边栏上生成一个到对应语言萌百的链接(e.g. 二次元)
若想原地生成到对应语言萌百的链接,需要和特殊内链这里一样的技巧,写[[:lang:oo]]
即可。
外链
引用
魔术字
表格
预编译
杂项
注释与外部链接
- ↑ mw:Help:Links
- ↑ 事实上,跨维基链接并不是原生 MediaWiki 的功能,而是某个插件的作用