打开/关闭搜索
搜索
打开/关闭菜单
65
32
5
2690
导航
首页
总览
沙盒页
备忘页
最近更改
随机页面
上传文件
打开/关闭外观设置菜单
无法加载偏好设置。请检查您的网络连接并重试。
重试
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
查看“︁Richard Markup 帮助文档”︁的源代码
来自 LNN的:not(博客)?
分享此页面
查看
阅读
查看源代码
查看历史
associated-pages
页面
讨论
更多操作
←
Richard Markup 帮助文档
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于这些用户组的用户执行:
用户
、导入者
您可以查看和复制此页面的源代码。
{{Richard Markup}} '''Richard Markup''' 是我专为 Richard ([https://space.bilibili.com/300711293 @天府灵山行者])的互动式小说设计的一种文本标记语言,它注重剧情逻辑,而数据存储、用户界面由解释器完成。 == 文件结构 == Richard Markup 存储为<code>.richard</code>扩展名的文件,格式与 HTML 和 XML 有些相似,使用 UTF-8 或 GB-18030 编码。 文件的开头是头部信息,它写在<code><?</code> <code>?></code>之间: <pre><?richard-markup v1?></pre> 其中<code>v1</code>是文件格式的版本号。 随后的内容是正文,由'''文本'''、'''元素'''、'''注释'''组成。 '''文本'''是除元素、注释外的文字内容,它会逐字显示在控制台上,一般每显示完一行后用户可以按任意键继续,并可以在逐字显示的过程中按任意键跳过。 '''元素'''会改变文本的行为。在 Richard Markup 中,元素有'''类型'''、'''属性'''、'''内容''',其中只有类型是必须的。 '''类型'''可以包含英文字母、横杠<code>-</code>、下划线<code>_</code>、冒号<code>:</code>,但只能以英文字母开头;'''内容'''可以是纯文本,也可以包含其他元素。 每个'''属性'''有'''属性键'''和'''属性值''',属性键是必须的。如果没有值,直接写属性键即可;如果有值,用<code>属性键="属性值"</code>表示,如果属性值中没有换行、空格、大于号<code>></code>、斜杠<code>/</code>,可以省略引号。 当元素没有内容时,用'''自闭合标签'''<code><类型/></code>表示,如果有属性,它们依次跟在类型之后,用空格隔开: <pre><类型 属性=值 属性.../></pre> 如果元素有内容,就把内容写在'''开始标签'''<code><类型></code>和'''结束标签'''<code></类型></code>之间,如果有属性,就写在开始标签的类型之后,用空格隔开: <pre><类型 属性=值 属性...>内容</类型></pre> 当然,也可以让开始标签和结束标签单独占一行: <pre><类型 属性=值 属性...> 内容 </类型></pre> 解释器会在运行前先去掉多余的换行和空格:行首的空格会被忽略,并且如果一个自闭合标签、开始标签或结束标签或注释独占一行,那么紧挨在它们后面的换行会被忽略。 在 Richard Markup 中,每种元素要么必须有内容,要么不能有内容。所以对于不能有内容的元素类型, Richard Markup 规定它们的自闭合标签中的斜杠可以省略:<code><类型></code>。 '''注释'''会被 Richard Markup 解释器直接忽略。与 HTML 和 XML 一样,它这样表示: <pre><!-- 注释内容 --></pre> == Richard Markup 中的元素 == === <code><s></code>元素 === <code><s></code>元素代表文本片段,它必须有内容。 可以有一个<code>name</code>属性,指定片段的名称。也可以指定<code>color</code>属性来改变片段中文字的颜色: <pre><s name="welcome"> 欢迎来到<s color="#33bfab">灵魂小站</s>! </s></pre> === <code><a></code>元素 === <code><a></code>元素代表锚点(Anchor),它不能有内容。 可以有一个<code>name</code>属性指定锚点的名称。另外也可以设置一个<code>call</code>属性,值是另一个有内容的元素的<code>name</code>,这样来重复使用那个元素。例如: <pre>Love with <s name="richard" color="#baf">Richard</s> under epidemic 8B班同学<a call="richard">。</pre> === '''''新增''''' <code><def></code>元素 === <code><def></code>元素专门用来定义需要重复使用的子程序(函数)。可以直接在它里面写若干个有<code>name</code>属性的元素,然后在其他地方用<code>call</code>属性来调用。如果程序在正常按顺序运行时,中途遇到<code><def></code>元素,会直接跳过。 <pre><def> <s name="richard" color="#baf">Richard</s> <s name="sunny" color="#daf">Sunny</s> <s name="separator"> Love with <a call="richard"> under epidemic ♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡♡ </s> </def></pre> === <code><choices></code>、<code><choice></code>和<code><prompt></code>元素 === <code><choices></code>代表一个互动选择题,它的内容是一个可省略的<code><prompt></code>和若干个<code><choice></code>。可以给<code><choices></code>指定<code>name</code>属性。 <code><prompt></code>表示选择题的提示文本;<code><choice></code>表示一个选项,它的内容是选项的文案。可以有一个<code>goto</code>属性,指定当选项被选定后要跳转到的位置。 <pre><?richard-markup v1?> Hello, world! <choices> <prompt>Are you...</prompt> <choice goto="roy">Roy</choice> <choice goto="richard">Richard</choice> <choice>Neither</choice> </choices> <def> <s name="youare_roy"> Hi, <s color=12>Roy</s>! </s> <s name="youare_richard"> Hello <s color=15>Richard</s>! </s> <s name="youare_neither"> Hello... whoever you are! </s> </def></pre> ----- 另外,还可以用<code><script></code>元素来嵌入JavaScript代码。 == <code>if</code>、<code>else</code>和<code>set</code>属性 == 除了上文提到的属性之外,还可以给元素添加<code>if</code>、<code>else</code>和<code>set</code>属性。 <code>set</code>属性用来存储和修改变量。变量名可以由英文字母、数字、下划线组成,但不能以数字开头。目前变量只能是浮点数。<code>set</code>属性像这样表示:<code>set="变量名 = 表达式"</code>。 <code>set</code>属性单独不会对剧情造成影响,要配合<code>if</code>和<code>else</code>属性使用。这两个属性用来控制元素是否会运行。<code>else</code>属性没有值,直接在开始标签中写<code>else</code>即可;<code>if</code>属性的值是一个表达式,像这样:<code>if="表达式"</code>。带<code>else</code>的元素必须跟在带<code>if</code>的元素后面;可以连用<code>else</code>和<code>if</code>来达到“elif”的效果。 如果给定的条件成立(表达式的结果不是0),元素的内容、上面的<code>goto</code>和<code>set</code>属性会正常运行;否则整个元素会被跳过。如果是<code><choice></code>,则控制的是这个选项是否会显示。 元素上的属性总是按“<code>else</code>——<code>if</code>——<code>set</code>——<code>call</code>”的顺序执行,无论它们实际出现的顺序。 表达式中可以使用'''数字字面量'''(如<code>123</code>)、其他变量、'''运算符'''和圆括号。可用的运算符有: # 乘除运算符:乘<code>*</code>、除<code>/</code>、取模<code>%</code>; # 加减运算符:加<code>+</code>、减<code>-</code>; # 比较运算符:等于<code>==</code>、大于<code>></code>、小于<code><</code>、大于或等于<code>>=</code>、小于或等于<code><=</code>、不等于<code>!=</code>; # 逻辑运算符:与<code>and</code>、或<code>or</code>。 在不加括号的情况下,运算顺序就按以上四类的顺序进行,且<code>and</code>比<code>or</code>先进行。 如果一个变量还没有创建,默认它的值是0。 <pre><?richard-markup v1?> <a set="crap = 20"> <choices> 这是一道选择题 <choice set="crap = crap + 40">az</choice> <choice set="crap = crap * 4">az</choice> <choice set="crap = crap - 10">az</choice> </choices> <s if="crap < 20"> crap现在小于20 </s> <s elif="crap < 60"> crap现在大于或等于20,小于60 </s> <s else> crap现在大于或等于60 </s></pre> 建议使用一个<code>_choice</code>变量来存储选择的选项,代替<code>goto</code>: <pre><?richard-markup v1?> <choices> <prompt>Are you...</prompt> <choice set="_choice = 1">Roy</choice> <choice set="_choice = 2">Richard</choice> <choice set="_choice = 3">Neither</choice> </choices> <s if="_choice == 1"> Hi, <s color=12>Roy</s>! </s> <s elif="_choice == 2"> Hello <s color=15>Richard</s>! </s> <s else> Hello... whoever you are! </s></pre> 以上就是 Richard Markup 帮助文档的全部内容了。由于解释器还没有完全实现,此文档以后还可能会修改。 ---- 原文发布于2020年12月8日 [[分类:存档]]
此页面嵌入的页面:
模板:Info
(
查看源代码
)
模板:MywikiParaHack
(
查看源代码
)
模板:Richard Markup
(
查看源代码
)
返回
Richard Markup 帮助文档
。
查看“︁Richard Markup 帮助文档”︁的源代码
来自 LNN的:not(博客)?