现在开发的一个系统,在文章中用户 @ZhangSan 就可以点名 ZhangSan 来看这篇文章,同时还有授权给 Zhangsan 阅读这篇文章的权限。由于系统还提供用户发布 Markdown 格式文章的功能,特别当用户是发布代码时,代码中含有装饰器 @decorator ,就会有 @符号。这个时候,本来被 pre/code 包裹的代码片段,就被系统的 @Username 给破坏啦。
目前有考虑几个方案:
上面 3 个方式目前都有问题,方式 1 就是 90%以上的情况都不需要用到功能,要一直占着一个重要位置;方式 2 会给用户添麻烦;方式 3 只能通过 Markdown 语法代码前面会有 4 个空格来区分,但是一旦用户没有完全遵守这个方式,或者直接加 pre/code 包裹,同样会被 @Username 破坏样式。还有其他什么好的方式可以考虑吗?
实际运行的情形,在这儿:
1
Bardon 2016-08-13 23:19:00 +08:00
排除 4 个空格或`code`或```code```
不知道 liquid 是怎么处理的 |
2
SoloCompany 2016-08-14 00:23:38 +08:00
|
3
adoal 2016-08-14 00:34:23 +08:00
一个会有用户贴程序源代码的社区里,就不要考虑“一旦用户没有完全遵守这个方式,或者直接加 pre/code 包裹”了。无规矩不成方圆。
|
4
rogwan 2016-08-14 07:38:02 +08:00
@Bardon 代码包裹的方式也不统一,还有各个用户的习惯其实也不同,用空格、 tab 、``` 、或直接用 pre 、 code 标签。只要用户出现空格多一个或少一个这样的小差错,被转译后样式就乱了(虽然可以再修改,看到被系统插入了一些转译代码,用户看着会头疼)。另外,后期总还是要考虑这些包裹方式的转义符,想想都是醉了。。。
|
5
srlp 2016-08-14 11:35:48 +08:00
这还用说吗,当然是方法三了。比如说 github 也支持 at 别人,但是引用代码内部并没有问题。
可以这样:先 render 标准 markdown ,在生成 html 之后才处理 at 的内容。而不是预处理 at 内容后才 render 页面。 |
6
woweiqingkuang OP @srlp
---------------------- @zhangsan @decorator1 @lisi @decorator2 ---------------------- 比如上面这种,@装饰器 和 @用户名 前后混合,尝试先处理 html 再 at ,结果要么就是个别 @装饰器被 render ,要么就是个别 @用户名没被 render 。向前匹配判断有没有空格 /tab 或 pre/code 标,可能中间还隔着个 @符合。 |
7
woweiqingkuang OP @srlp 刚刚看了下 github 的处理方式,@XXX 只要 XXX 是注册用户名,就会当作用户名渲染。假如有人注册的用户名是 Decorator 也会被渲染的。
|
8
iEverX 2016-08-14 19:50:14 +08:00
渲染成 html 之后,遍历 dom 树,不处理 pre 和 code 之间的 @ 其他都替换
|
9
srlp 2016-08-14 22:55:45 +08:00
像楼上说的,生成的 html 应该确保符合标准无错的,正确闭合的(你总不想网页崩掉吧),然后对除了 pre 或 code 包围的文字之外的文字进行处理。
刚在 github issue 尝试了一下,毫无问题,代码块之外的 at 都连接成用户名,代码块内的 at 都语法高亮。 不明白你在纠结什么,你在 6 楼的例子 **并没有** 使用 ``` 之类的标签把 code 包围起来,所以 at 翻译成用户名,有什么问题吗。。。 |
10
woweiqingkuang OP |
11
woweiqingkuang OP |
13
Override 2016-08-26 09:33:15 +08:00
|