#P2395. BBCode转换Markdown

BBCode转换Markdown

题目背景

BBCode和Markdown是两种常用的格式语言。所谓格式语言指,例如在某些网站评论区发表评论时,可以使用其对你的评论进行修饰,使文字可以有颜色、粗体等各种样式。

题目描述

PDF版题目: http://pan.baidu.com/s/1i3mxk4t 提取密码hayc

BBCode的语法如下所示:

[h1]Hello World![/h1]
[h2][i]This is a BBCode[/i][/h2]
[b][i]I love[/i] Olympic [i]Informatics[/i][/b]

例如,在标签[h1]中,在[h1]和[/h1]之间包裹的内容属于一级标题,对于这之间的文字要按照一级标题的样式渲染。

请注意BBCode要求标签的开闭必须完整且且嵌套无误,也就是说,如下列的例子都是不合法的BBCode:

[h1]Hello World! //标签未闭合
[h1]Hello World![/h2] //两个标签不匹配
[h1][i]Hello World![/h1][/i] //嵌套次序错误

另外,极其重要的一点是,BBCode有一个特殊的标签[quote][/quote],在其中的任意文字都不应被解析为BBCode代码,而应该对其进行Markdown化处理后被原样输出。

现在介绍Markdown。其语法如下所示:

# Hello World! #
## *This is a Markdown* ##
__*I love* Olympic *Informatics*__

你的任务就是将给定的一串BBCode转换成Markdown,并对不合法的输入报错。

题目数据中会出现的所有BBCode的标签与其对应Markdown对应关系如下,保证不出现除此之外的对应:

对于[quote]标签的附加说明:

输入格式

所需转换的BBCode。

[h1]Hello World![/h1]
[h2]How are [i]you[/i]?[/h2]
# Hello World! #
## How are *you*? ##
[h1]Introducing Swift.[/h1][quote]
import SpriteKit
let object = SKSpriteNode(imageNamed: “[L2/Ascention]”
[/quote]
# Introducing Swift. #
> import SpriteKit
> let object = SKSpriteNode(imageNamed: “[L2/Ascention]”
[h1]I knew you were
trouble when you walked in[/h1]
[url=http://www.example.com]By Taylor Swift[/url]
# I knew you were
trouble when you walked in #
[By Taylor Swift](http://www.example.com)
[h1]Thanks for [i]inviting[/h1] me.[/i]
Match Error
[h2]Your gift is awesome!
Unclosed Mark
[quote][/quote][/quote]
Match Error
(对该数据的解释: 匹配到第一个关闭标签后即不认为后面的内容仍是代码段)
[quote][quote][/quote]
> [quote]

提示

为保证评测顺利不被误判,请注意下列要求:

尊重原输入输出的换行,不自行添删。

对于第一条的例外是, 遇到[quote]标签不在新的一行时,Markdown中请另起一行。另外[quote]标签中的代码段头尾空行请去除,不会出现空白的quote。

请注意上表中的空格。

对于不合法的BBCode输入,你的程序必须报错:对于匹配错误的标签输出Match Error,对于未闭合的标签输出Unclosed Mark,请参考样例。两种情况同时出现的时候(即同时有匹配错误和未闭合的标签时),按照匹配错误处理,输出Match Error。由于quote标签的特殊性,为保证不出现歧义,数据保证quote标签不会出现错误。(对于出现如[i][h1]Text[/i]这样的情况,按照Match Error处理,对于[i][h1]Text[/h1]这样的情况,按照Unclosed Mark处理)

由于洛谷限制,请大家在输出Unclosed Mark的时候在close中间切开分为两段字符串输出,否则会被吞记录。

保证以下三种字符不出现在除quote标签包裹的段落中的文字中:[,],/,*,_,#,>,但地址中可能会出现/字符。

保证输入不会出现标签不完整的情况,例如[h1]Text[/h

对于曾经在其他地方使用过Markdown与BBCode的同学:题中的格式不是严格的BBCode与Markdown格式,请勿被经验迷惑。