很纠结: @装饰器 和 @Username 同时都需要用到 @ 符号,怎么办?

2016-08-13 21:56:20 +08:00
 woweiqingkuang

现在开发的一个系统,在文章中用户 @ZhangSan 就可以点名 ZhangSan 来看这篇文章,同时还有授权给 Zhangsan 阅读这篇文章的权限。由于系统还提供用户发布 Markdown 格式文章的功能,特别当用户是发布代码时,代码中含有装饰器 @decorator ,就会有 @符号。这个时候,本来被 pre/code 包裹的代码片段,就被系统的 @Username 给破坏啦。

目前有考虑几个方案:

上面 3 个方式目前都有问题,方式 1 就是 90%以上的情况都不需要用到功能,要一直占着一个重要位置;方式 2 会给用户添麻烦;方式 3 只能通过 Markdown 语法代码前面会有 4 个空格来区分,但是一旦用户没有完全遵守这个方式,或者直接加 pre/code 包裹,同样会被 @Username 破坏样式。还有其他什么好的方式可以考虑吗?

实际运行的情形,在这儿:

@Username with Markdown

2812 次点击
所在节点    Python
13 条回复
Bardon
2016-08-13 23:19:00 +08:00
排除 4 个空格或`code`或```code```
不知道 liquid 是怎么处理的
SoloCompany
2016-08-14 00:23:38 +08:00
@param
@override
@deprecated
@return
@throws
@exception

看看还有哪个没被注册的
adoal
2016-08-14 00:34:23 +08:00
一个会有用户贴程序源代码的社区里,就不要考虑“一旦用户没有完全遵守这个方式,或者直接加 pre/code 包裹”了。无规矩不成方圆。
rogwan
2016-08-14 07:38:02 +08:00
@Bardon 代码包裹的方式也不统一,还有各个用户的习惯其实也不同,用空格、 tab 、``` 、或直接用 pre 、 code 标签。只要用户出现空格多一个或少一个这样的小差错,被转译后样式就乱了(虽然可以再修改,看到被系统插入了一些转译代码,用户看着会头疼)。另外,后期总还是要考虑这些包裹方式的转义符,想想都是醉了。。。
srlp
2016-08-14 11:35:48 +08:00
这还用说吗,当然是方法三了。比如说 github 也支持 at 别人,但是引用代码内部并没有问题。
可以这样:先 render 标准 markdown ,在生成 html 之后才处理 at 的内容。而不是预处理 at 内容后才 render 页面。
woweiqingkuang
2016-08-14 12:39:53 +08:00
@srlp
----------------------
@zhangsan
@decorator1
@lisi
@decorator2
----------------------
比如上面这种,@装饰器 和 @用户名 前后混合,尝试先处理 html 再 at ,结果要么就是个别 @装饰器被 render ,要么就是个别 @用户名没被 render 。向前匹配判断有没有空格 /tab 或 pre/code 标,可能中间还隔着个 @符合。
woweiqingkuang
2016-08-14 12:49:47 +08:00
@srlp 刚刚看了下 github 的处理方式,@XXX 只要 XXX 是注册用户名,就会当作用户名渲染。假如有人注册的用户名是 Decorator 也会被渲染的。
iEverX
2016-08-14 19:50:14 +08:00
渲染成 html 之后,遍历 dom 树,不处理 pre 和 code 之间的 @ 其他都替换
srlp
2016-08-14 22:55:45 +08:00
像楼上说的,生成的 html 应该确保符合标准无错的,正确闭合的(你总不想网页崩掉吧),然后对除了 pre 或 code 包围的文字之外的文字进行处理。

刚在 github issue 尝试了一下,毫无问题,代码块之外的 at 都连接成用户名,代码块内的 at 都语法高亮。

不明白你在纠结什么,你在 6 楼的例子 **并没有** 使用 ``` 之类的标签把 code 包围起来,所以 at 翻译成用户名,有什么问题吗。。。
woweiqingkuang
2016-08-15 19:19:52 +08:00
@srlp 我说的例子,用了 4 个空格,貌似 V2EX 不支持这种方式来处理代码。我在试试,下面的第一行用了四个空格,第二行用了 ···,看看效果:
@srlp
```@srlp```
woweiqingkuang
2016-08-15 19:20:24 +08:00
```
@srlp
```
param
2016-08-26 09:27:19 +08:00
@override 是我小号。。
Override
2016-08-26 09:33:15 +08:00
@SoloCompany

@param 和 @Override 都是我的号。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/299126

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX