初音ミクの激唱(从初音未来到荷兹:人们为啥会迷恋“虚拟偶像”?)

来源头条作者:骑单车去带娃

1. AsciiDoc 简介

AsciiDoc 是一种文本文档格式(轻量级的标记语言),用于编写注释、文档、文章、书籍、电子书、幻灯片、网页、手册页和博客。

AsciiDoc 文件可以翻译成多种格式,包括 HTML、PDF、EPUB、手册页面等。

AsciiDoc 是高度可配置的,用户可以定制和扩展 AsciiDoc 源文件语法和后端输出标记(几乎可以是任何类型的 SGML/XML 标记)。

AsciiDoc 是免费软件,并根据 GNU 通用公共许可证版本 2(GPLV2)的条款进行许可。

1.1 语法

1.1.1 文档头

可以包含文档头、作者、修订行、自定义属性等。

头部可选但是必须在文档的顶部。

= My Document\’s Title
Doc Writer

v1.0, 2018-04-11
:toc:
:imagesdir: assets/images
:homepage: https://asciidoctor.org
My document provides…

1.1.2 标题

需要靠左侧顶格。

可以包含文档头、第 1 ~ 第 5 章节标题。

当使用项目文档类型(默认值)时,只能有一个 0 级的节标题(即,文档标题),并且它必须位于文档头中。

等号的数目与 HTML 输出中的标题级别相匹配。

例如,(=)转换成为

标签。

= 文档标题 (0级) =
== 段落标题 (1级) ==
=== 段落标题 (2级) ===
==== 段落标题 (3级) ====
===== 段落标题 (4级) =====

1.1.3 段落

段落不需要任何特殊的标记,段落只需要是连续文本的一行或多行。

开始新的段落需要用一个空行进行分隔。

文档中的大部分内容是段落文本,因此 AsciiDoc 不需要任何特殊的标记或属性来指定段落内容。

Paragraphs don’t require any special markup in AsciiDoc. A paragraph is just one or more lines of consecutive text.
To begin a new paragraph, separate it by at least one blank line. Newlines within a paragraph are not displayed.

1.1.3.1 换行

在 AsciiDoc 中,相邻或连续的文本行形成段落元素。若要在另一个元素(如节标题或表)之后开始新的段落,则插入空行,然后继续键入内容即可。

因为 AsciiDoc 转换文档时,相邻的文本行会被合并为单个段落,这意味着可以包装段落文本或将每个句子或短语放在单独的行上,输出中是不会出现换行的。

如果希望保留段落中的换行符,可以使用加号 (+) 后的空格或 hardbreaks 属性。这样会导致每一行之后增加可见的换行标记(例如

)。

Rubies are red, +
Topazes are blue.
[%hardbreaks]
Ruby is red.
Java is black.

通过将 hardbreaks 属性添加到文档头部,可以在整个文档中保留换行符。

:hardbreaks:
……
Rubies are red,
Topazes are blue.

1.1.3.2 文字段落

由至少一个空间偏移的段落成为文字段落,文字段落中的所有行必须是相邻的。

文本段落显示为预格式化文本,文本以固定宽度字体显示,空格和换行符都会被保留下来。

1.1.3.3 提示段落

主要是为了引起读者注意,用标签开头。

标签必须大写,后面跟着冒号(:)。

标签说明 NOTE 注释,TIP 提示,WARNING 警告,IMPORTANT 重要,CAUTION 注意。

TIP: Pro tip…
IMPORTANT: Don\’t forget…
WARNING: Watch out for…
CAUTION: Ensure that…

当想对复杂内容应用警告时,可以将标签设置为块上的样式属性。

下例是在分隔块上的属性列表中设置标签,标签必须大写。

[IMPORTANT]
.Feeding the Werewolves
====
While werewolves are hardy community members, keep in mind the following dietary concerns:
. They are allergic to cinnamon.
. More than two glasses of orange juice in 24 hours makes them howl in harmony with alarms and sirens.
. Celery makes them sad.
====

可以使用 icons 参数制定图标的路径。

[icons=\”./images/icons/wink.png\”]
NOTE: What lovely war.

使用 caption 参数定义警告标题返回的文本信息(在警告图标设置为可用时 icons 参数必须设置为 icons=None)。

[icons=None, caption=\”特殊提示\”]
NOTE: This is my special note.

1.1.3.3.1 图标

AsciiDoc 提供三种显示图标的策略。

作为文本

作为图像

作为从图标字体中选择的字符。

使用图标属性控制策略。默认行显示返回的文本。

如果希望使用图像显示图标,可以在文档头中将图标属性设置为空值。如果正在转换为 DocBook,或者希望使用一种简单的方法使 HTML 可以脱机查看,则建议采用此策略。DocBook 工具链提供了警告和标注等图标的图像,这些图标可以用自己的自定义图标替换。如果使用内联图标宏,则需要为这些图标提供图像。

也可以使用字体图标设置为 AsciiDoc 图标,若要使用此特性,需要将图标文件属性的值设置为文档标题中的字体。可以从 Awesome 中获得更多的字体图标。这种方式默认情况下需要在线访问。

= Document Title
:icons: font
……
NOTE: Asciidoctor supports font-based admonition icons, powered by Font Awesome!

HTML 格式输出。

Asciidoctor supports font-based admonition icons, powered by Font Awesome!

AsciiDoc 中添加了 Awesome 的字体超强样式表和字体文件的引用。

1.1.3.3.2 Unicode 文本图标

代替图像或基于字体的图标,可以通过使用一个小技巧使用 Unicode 文本来表示警告图标。

如果在文档上没有设置图标属性,AsciiDoc 输出一个标识警告类型的文本标签。此标签的文本来自 AsciiDoc 属性。

属性的名称是

标题,其中

是小写中的警告类型。例如,提示提示的属性是提示字幕。

可以将一个 Unicode 字形赋值给这个属性,而不是单词。

:tip-caption:
[TIP]
It\’s possible to use Unicode glyphs as admonition icons.

HTML 格式输出。

1.1.3.3.3 内联图标

图标可以插入到段落内容的任意位置,内嵌宏。

icon:tags[] ruby, asciidoctor

HTML 格式输出。

ruby, asciidoctor

内联图标宏和角色语法。

icon:tags[role=\”blue\”] ruby, asciidoctor

图标大小

默认为 1x

icon:heart[2x]
icon:heart[size=2x]

图标旋转和翻转

icon:shield[rotate=90, flip=vertical]

链接

icon:download[link=\”http://rubygems.org/downloads/asciidoctor-1.5.2.gem\”]

1.1.3.4 引文段落

将引文样式应用到任何段落,它将使用更大的字体大小。

自动将引文段落进行样式化。

可以采用 (.) 的方式设置引文角色和分配到段落上。

当将文档转换为 HTML 并使用默认样式表查看时,前导的第一段将自动样式化为前导段。

[.lead]
This text will be styled as a lead paragraph (i.e., larger font).

1.1.4 块结构

任何块都可以有一个标题,位于块的上方。块标题是从一个点开始的文本行。

1.1.4.1 文本块

文字块定义为三种方式

用一个或多个空格缩进段落的第一行。

将文字属性应用于段落或区块。

使用文字块定界符(…)。

error: The requested operation returned error: 1954 Forbidden search for defensive operations manual
absolutely fatal: operation initiation lost in the dodecahedron of doom
would you like to die again? y/n
….
Lazarus: Where is the *defensive operations manual*?
Computer: Calculating …
Can not locate object that you are not authorized to know exists.
Would you like to ask another question?
Lazarus: Did the werewolves tell you to say that?
Computer: Calculating …
….

注意:在输出中,粗体文本格式没有应用于文本。

当希望整个文本块是文本,并且不希望缩进时,可在元素的顶部设置文本属性。

[literal]
error: The requested operation returned error: 1954 Forbidden search for defensive operations manual
absolutely fatal: operation initiation lost in the dodecahedron of doom
would you like to die again? y/n

1.1.4.2 注释块

不会输出到目标文件。

行注释

行注释可用于分割元素,如两个相邻列表。

// A single-line comment.

块注释

////
CommentBlock
////

1.1.4.3 清单块(列表块)

用于计算机的输出和文件列表、可用于程序代码。

里面特殊字符不替换。

列表块内容被转换为

文本。

列表块中的内容只受特殊字符和标注替换的限制。

列表块名称应用于内容的两种方式。

在元素上设置列表属性。

包含分隔符列表块中的内容。

将列表块名称应用于元素,例如段落,通过在该元素上设置列表属性。

[listing]
This is an example of a paragraph styled with `listing`.
Notice that the monospace markup is preserved in the output.

包含分隔的列表块由四个连字符(—-)组成的行包围。

列表块有利于显示原始源代码,尤其是与源代码和源代码突出显示器属性一起使用时。

.app.rb
[source,ruby]
—-
require \’sinatra\’
get \’/hi\’ do
\”Hello World!\”
end

具有自定义替换语法的列表块。

:version: 1.5.6.1
[source,xml,subs=\”verbatim,attributes\”]
—-

org.asciidoctor

asciidoctor-java-integration

{version}

—-

滚动支持

nowrap 会增加(css 样式 white-space:nowrap 和 word-wrap: normal)到

元素上。

[source%nowrap,java]
—-
public class ApplicationConfigurationProvider extends HttpConfigurationProvider
{
@Override
public Configuration getConfiguration(ServletContext context)
{
return ConfigurationBuilder.begin()
.addRule()
.when(Direction.isInbound().and(Path.matches(\”/{path}\”)))
.perform(Log.message(Level.INFO, \”Client requested path: {path}\”))
.where(\”path\”).matches(\”.*\”);
}
}
—-

全局强制不换行 ,可以设置 prewrap 属性。

:prewrap!:

带标题的列表块

.Gemfile.lock
—-
GEM
remote: https://rubygems.org/
specs:
asciidoctor (1.5.6.1)
PLATFORMS
ruby
DEPENDENCIES
asciidoctor (~> 1.5.6.1)
—-

带标注的代码块

[source,ruby]
—-
require \’sinatra\’ //

get \’/hi\’ do //

\”Hello World!\” //

end
—-

Library import

URL mapping

HTTP response body

带不可选择标注的代码块

—-
line of code //

line of code #

line of code ;;

—-

A callout behind a line comment for C-style languages.

A callout behind a line comment for Ruby, Python, Perl, etc.

A callout behind a line comment for Clojure.

具有不可选标注的 XML 代码块

[source,xml]
—-

Section Title

—-

The section title is required.

直接引入源文件的代码块

[source,ruby]
—-
include::app.rb[]
—-

源文件相对源目录的代码块

:sourcedir: src/main/java
[source,java]
—-
include::{sourcedir}/org/asciidoctor/Asciidoctor.java[]
—-

引入源文件一部分的代码块

[source,ruby,indent=0]
—-
include::lib/document.rb[lines=5..10]
—-

无分隔符的代码块

[source,xml]

This is normal content.

代码列表块启动语法高亮可以在文档头中设置。

高亮属性有 coderay、highlightjs、prettify 和 pygments。

:source-highlighter: pygments

1.1.4.4 侧边栏块

有边框显示。

.AsciiDoc history
****
AsciiDoc was first released in Nov 2002 by Stuart Rackham.
It was designed from the start to be a shorthand syntax
for producing professional documents like DocBook and LaTeX.
****

1.1.4.5 引用文本块

文本块左上角显示一个双引号图片。

____
QuoteBlock
____

负责引用块

[quote, Abraham Lincoln, Address delivered at the dedication of the Cemetery at Gettysburg]
____
Four score and seven years ago our fathers brought forth
on this continent a new nation…
____
[quote, Albert Einstein]
A person who never made a mistake never tried anything new.
____
A person who never made a mistake never tried anything new.
____
[quote, Charles Lutwidge Dodgson, \’Mathematician and author, also known as http://en.wikipedia.org/wiki/Lewis_Carroll[Lewis Carroll]\’]
____
If you don\’t know where you are going, any road will get you there.
____

缩写块引用(只有 Asciidoctor 支持)

\”I hold it that a little rebellion now and then is a good thing,
and as necessary in the political world as storms in the physical.\”
— Thomas Jefferson, Papers of Thomas Jefferson: Volume 11

空引用

[, James Baldwin]
\”\”
Not everything that is faced can be changed.
But nothing can be changed until it is faced.
\”\”

1.1.4.6 案例文本块

可以使用 NOTE、TIP、IMPORTANT、WARNING、CAUTION 显示提示块。

====
ExampleBlock
====

1.1.4.7 混合使用

.Sample document
====
Here\’s a sample AsciiDoc document:
[listing]
….
= Title of Document
Doc Writer
:toc:
This guide provides…
….
The document header is useful, but not required.
====
[NOTE]
====
An admonition block may contain complex content.
.A list
– one
– two
– three
Another paragraph.
====

1.1.4.8 开放块


An open block can be an anonymous container,
or it can masquerade as any other block.

[source]

puts \”I\’m a source block!\”

1.1.5 列表

1.1.5.1 有序列表

通过在第一个列表之后插入一个空白行和一行注释,可以将两个相邻的列表分开。-

约定使用(//)作为行注释向其他作者提供一个提示,即它是一个列表分隔符。

1. ***数字标注的列表项目.
a. 小写字母标注的列表项目.
F. 大写字母标注的列表项目.
iii) 小写罗马数字标注的列表项目.
IX) 大写罗马数字标注的列表项目.

1.1.5.2 无序列表

– List item.
* List item.
** List item.
*** List item.
**** List item.
***** List item.

1.1.5.3 自定义列表

字母或数字开始 1-4 个冒号或两个分号结束。

Operating Systems::
Linux:::
. Fedora
* Desktop
. Ubuntu
* Desktop
* Server
BSD:::
. FreeBSD
. NetBSD
Cloud Providers::
PaaS:::
. OpenShift
. CloudBees
IaaS:::
. Amazon EC2
. Rackspace

1.1.5.4 问答列表

[qanda]
What is Asciidoctor?::
An implementation of the AsciiDoc processor in Ruby.
What is the answer to the Ultimate Question?:: 42

1.1.5.5 复选框列表

* [*] checked
* [x] also checked
* [ ] not checked
* normal list item

1.1.5.6 单行标记

first term:: definition of first term
second term:: definition of second term

1.1.5.7 多行标记

first term::
definition of first term
second term::
definition of second term

1.1.5.8 专业术语列表

[glossary]
术语1::
解释1.
术语2::
解释2.

1.1.6 文本格式

1.1.6.1 粗体

*bold phrase* & **char**acter**s**

1.1.6.2 斜体

_italic phrase_ & __char__acter__s__

1.1.6.3 等宽字体

`monospace phrase` & “char“acter“s“

如果要在等宽字体中用到({name})这样的格式(需要直译),那么可以使用(+ 和 +)符号或者转义符(\\)。

You can reference the value of a document attribute using the syntax `+{name}+`, where `name` is the attribute name.

1.1.6.4 混合使用

`*_monospace bold italic phrase_*` & “**__char__**“acter“**__s__**“

1.1.6.5 标记字体(黄色背景)

Werewolves are allergic to #cassia cinnamon#.

1.1.6.6 字体缩小

Did the werewolves read the [.small]##small print##?

1.1.6.7 字体扩大

[.big]##O##nce upon an infinite loop.

1.1.6.8 删除线

We need [.line-through]#ten# make that twenty VMs.

1.1.6.9 下划线

Where did all the [.underline]#cores# run off to?

1.1.6.10 上标

^super^script phrase

1.1.6.11 下标

~sub~script phrase

1.1.6.12 智能引号

如果不希望应用智能引号,可以使用 (\\)进行转义。

\”`double curved quotes`\”
\’`single curved quotes`\’
Olaf\’s desk was a mess.
All of the werewolves`\’ desks were a mess.
Olaf had been with the company since the `\’60s.
“double curved quotes”
‘single curved quotes’
Olaf’s desk was a mess.
All of the werewolves’ desks were a mess.
Olaf had been with the company since the ’60s.

1.1.6.13 文本替换

符号显示说明(C)?版权(TM)?商标(R)?注册商标…?…省略号->→右箭头

?右双箭头<=?左双箭头??数字–—破折号(只能在两个字符之间使用)

文本替换是指其字符的通用字符集 / Unicode 代码,使用格式。

https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references 可查询通用字符集。

hhhh;

1.1.7 其他标签

1.1.7.1 文件包含语句

如果不在相邻的文件包含语句之间插入空白行以保持内容分离,务必在源文档中添加空白行,以避免意外的结果,如吞并部分标题等。

= Reference Documentation
Lead Developer
This is documentation for project X.
include::basics.adoc[]
include::installation.adoc[]
include::example.adoc[]

包含 URL 文件

include::https://raw.githubusercontent.com/asciidoctor/asciidoctor/master/README.adoc[]

1.1.7.2 水平线

\’\’\’

1.1.7.3 分页符

<<<

1.1.7.4 超链接

外部链接

https://asciidoctor.org – automatic!
https://asciidoctor.org[Asciidoctor]
https://github.com/asciidoctor[Asciidoctor @ *GitHub*]

具有空格和特殊字符

link:++https://example.org/?q=[a b]++[URL with special characters]
link:https://example.org/?q=%5Ba%20b%5D[URL with special characters]

Windows 路径

link:\\\\server\\share\\whitepaper.pdf[Whitepaper]

相对路径

link:index.html[Docs]

电子邮件和 IRC

devel@discuss.arquillian.org
mailto:devel@discuss.arquillian.org[Discuss Arquillian]
mailto:devel-join@discuss.arquillian.org[Subscribe, Subscribe me, I want to join!]
irc://irc.freenode.org/#fedora

1.1.7.5 锚点

锚点:[[A88]]
链接:

>

1.1.7.6 图片

块图像

image::sunset.jpg[]
image::sunset.jpg[Sunset]
.A mountain sunset
[#img-sunset]

image::sunset.jpg[Sunset,300,200]
image::https://asciidoctor.org/images/octocat.jpg[GitHub mascot]

内联图

Click image:icons/play.png[Play, title=\”Play\”] to get the party started.
Click image:icons/pause.png[title=\”Pause\”] when you need a break.

具有定位角色的内联图

image:sunset.jpg[Sunset,150,150,role=\”right\”] What a beautiful sunset!

1.1.7.7 视频

块视频

video::video_file.mp4[]
video::video_file.mp4[width=640, start=60, end=140, options=autoplay]

1.1.7.8 源码

内联方式(等宽字体)

Reference code like `types` or `methods` inline.

内联方式(直译方法)

Output literal monospace text such as `+{backtick}+` by
enclosing the text in pluses, then again in backticks.

1.1.7.9 文档目录(ToC)

= AsciiDoc Writer\’s Guide
Doc Writer

v1.0, 2013-08-01
:toc: right

1.1.7.10 参考文献

_The Pragmatic Programmer_

> should be required reading for all developers.
To learn all about design patterns, refer to the book by the \”`Gang of Four`\”

>.
[bibliography]
== References
– [[[pp]]] Andy Hunt & Dave Thomas. The Pragmatic Programmer:
From Journeyman to Master. Addison-Wesley. 1999.
– [[[gof,2]]] Erich Gamma, Richard Helm, Ralph Johnson & John Vlissides. Design Patterns:
Elements of Reusable Object-Oriented Software. Addison-Wesley. 1994.

1.1.7.11 脚注

A statement.footnote:[Clarification about this statement.]
A bold statement!footnoteref:[disclaimer,Opinions are my own.]
Another bold statement.footnoteref:[disclaimer]

1.1.8 表格

除非指定了 cols 属性,否则列的数量等于块分隔符之间的第一行(非空)上的单元格分隔符字符的数量。

当空白行跟随第一个非空行时,第一行中的单元格将升迁到表标题。

.Table Title
|===
|Name of Column 1 |Name of Column 2 |Name of Column 3
|Cell in column 1, row 1
|Cell in column 2, row 1
|Cell in column 3, row 1
|Cell in column 1, row 2
|Cell in column 2, row 2
|Cell in column 3, row 2
|===

cols 属性中的(*)是重复运算符,意味着在列的其余部分重复列规范。

当头中的单元格没有在一行上定义时,必须使用 cols 属性设置表中的列数,使用 %header 选项(或 .=header 属性)将第一行提升到表头。

[%header,cols=2*]
|===
|Name of Column 1
|Name of Column 2
|Cell in column 1, row 1
|Cell in column 2, row 1
|Cell in column 1, row 2
|Cell in column 2, row 2
|===

下例中指定该表有三列,并设置它们的相对宽度。

[cols=\”1,1,2\”, options=\”header\”]
.Applications
|===
|Name
|Category
|Description
|Firefox
|Browser
|Mozilla Firefox is an open-source web browser.
It\’s designed for standards compliance,
performance, portability.
|Arquillian
|Testing
|An innovative and highly extensible testing platform.
Empowers developers to easily create real, automated tests.
|===

包含其他标签的表

[cols=\”2,2,5a\”]
|===
|Firefox
|Browser
|Mozilla Firefox is an open-source web browser.
It\’s designed for:
* standards compliance
* performance
* portability
http://getfirefox.com[Get Firefox]!
|===

CSV 格式的表

[%header,format=csv]
|===
Artist,Track,Genre
Baauer,Harlem Shake,Hip Hop
The Lumineers,Ho Hey,Folk Rock
|===

CSV 格式速记表(只有 Asciidoctor 支持)

,===
Artist,Track,Genre
Baauer,Harlem Shake,Hip Hop
,===

引入 CSV 文件表

|===
include::customers.csv[]
|===

DSV 数据使用速记表

:===
Artist:Track:Genre
Robyn:Indestructable:Dance
:===

带格式化、对齐和合并单元的表

[cols=\”e,m,^,>s\”, width=\”25%\”]
|===
|1 >s|2 |3 |4
^|5 2.2+^.^|6 .3+

m|7
^|8
|9 2+>|10
|===

1.1.9 属性

定义和使用

:url-home: https://asciidoctor.org
:link-docs: https://asciidoctor.org/docs[documentation]
:summary: Asciidoctor is a mature, plain-text document format for \\
writing notes, articles, documentation, books, and more. \\
It\’s also a text processor & toolchain for translating \\
documents into various output formats (i.e., backends), \\
including HTML, DocBook, PDF and ePub.
:checkedbox: pass:normal[{startsb}?{endsb}]
Check out {url-home}[Asciidoctor]!
{summary}
Be sure to read the {link-docs} too!
{checkedbox} That\’s done!

计数器属性


.Parts{counter2:index:0}
|===
|Part Id |Description
|PX-{counter:index}
|Description of PX-{index}
|PX-{counter:index}
|Description of PX-{index}
|===

1.1.10 直译方式

转移符直译

\\*Stars* is not rendered as bold text.
The asterisks around the word are preserved.
\\{author} is not resolved to the author name.
The curly brackets around the word are preserved.
`A\\–Z` connects A to Z in monospace using two dashes.
The dashes are not replaced by an em dash.
\\[[Word]] is not interpreted as an anchor.
The double brackets around the word are preserved.
[\\[[Word]]] is not interpreted as a bibliography anchor.
The triple brackets around the word are preserved.
In these cases, the backslash character is automatically removed.

(+)号直译

`+Text inside {plus} characters+` is not formatted.
However, special characters like ++ are still escaped.

pass 宏直译

pass:[

underline me

] is also underlined.

三(+)直译

+++

underline me

+++ is underlined.

1.2 兼容 Markdown

兼容 Markdown 标题

# Document Title (Level 0)
## Section Level 1
### Section Level 2
#### Section Level 3
##### Section Level 4
###### Section Level 5

兼容 Markdown 代码块

“`ruby
require \’sinatra\’
get \’/hi\’ do
\”Hello World!\”
end
\\“` \\\\ 去除第一个 \\ 符号

兼容 Markdown 引用块

> I hold it that a little rebellion now and then is a good thing,
> and as necessary in the political world as storms in the physical.
> — Thomas Jefferson, Papers of Thomas Jefferson: Volume 11

兼容 Markdown 引用块和块内容

> > What\’s new?
>
> I\’ve got Markdown in my AsciiDoc!
>
> > Like what?
>
> * Blockquotes
> * Headings
> * Fenced code blocks
>
> > Is there more?
>
> Yep. AsciiDoc and Markdown share a lot of common syntax already.

兼容 Markdown 水平线


– – –
***
* * *

参考资料

https://asciidoctor.org/docs/

本站无法对海量内容真伪性鉴别,请勿相信本站任何号码,邮件,站外网址等信息,如有需要,请自行甄别。版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至net@163.com举报,一经查实,本站将立刻删除。
(0)
上一篇 2023年2月8日 上午8:31
下一篇 2023年2月8日 上午8:34

相关推荐

发表回复

登录后才能评论