我设计了一种文本标记格式,用来代替 Markdown 格式。请大家一定来夸我,或者拍砖:)

2016-02-03 23:12:11 +08:00
 zxgngl

它的语法特别简单,只有一条:

(标签 属性 1=|属性内容 1| 属性 2=|属性内容 2| . 内容)

虽然它的语法简单,但语义十分强大,强大到与 XML (或 HTML ) 的语义表达能力一样。

例子们:

图片:

(img src=|photo.jpg| width=|60px| height=|40px|)

说明:如果没有“内容”的话,“.”可以省略。

代码:

(@code lang=|C++| .
#include <iostream>

int main()
{
    std::cout << "Hello, World!\n";
}
@)

说明:不需要对插入的代码中的“(”和")"进行任何“转义”,只需要使用“(@”和“@)”来代替“(”和")"即可。“@”的个数个可以任意多,只要前后匹配即可。

代码 2 :

(@@code lang=|Scheme| .
(define weird-string
  (lambda ()
    "(@)"))
@@)

说明:无论插入的代码中包含任何字符或字符串,都不需要转义。

普通的文本格式化可以很简单:

(p . 这个句子里有(i . 斜体)字。)

希望大家喜欢,有什么问题请留言:)

13528 次点击
所在节点    程序员
144 条回复
zealic
2016-02-04 10:47:55 +08:00
我感觉就是简化的 XML
zxgngl
2016-02-04 10:54:09 +08:00
@ThomasZ

(quote .
建议用[] 方便, 另外代码块的格式易读性和书写感觉并不高
)

考虑过使用 [ 和 ],但一个顾虑就是由于使用了 | 来表示一个字符串,而 | ] 放在一起可能会引起混淆,所以决定还是使用 ( ) 。

为什么使用 | | 来表示字符串而不是 "" 或 ''?这是因为 (p . xxx) 中“.”后面的内容里面很可能会出现 " 或 ',所以有可能产生视觉上的混淆,而 | 又是使用频率相对少的字符,所以使用它来表示字符串。
zxgngl
2016-02-04 11:01:25 +08:00
@zealic

(quote . 我感觉就是简化的 XML)

是的,在语法上就是简化的 XML ,虽然它相对于 XML 有一个非常大的优点是:插入任何代码都是不需要转义的,方便拷贝来、拷贝去,代码内容不会被破坏。

这个新语法是颠覆性创新吗?肯定不是啊,要是颠覆性创新,至少在语义表达力上要有多突破吧。 XML 已经是语义表达力的极限了,新语法也仅仅是达到了这个极限而已。一个东西有用、好用,不一定非要是颠覆性创新的。
zxgngl
2016-02-04 11:04:44 +08:00
@EugeneQiu 我想你想说的是 Shift 键吧?选择()而不是[]是有原因的(请参考 42 楼),另外,有那么多快乐的 Lisp 程序员说明按一下 Shift 键并不会影响用户体验。
zxgngl
2016-02-04 11:06:53 +08:00
@Livid

(quote .
创建新回复过程中遇到一些问题:

你回复过于频繁了,请稍等 1800 秒之后再试
)

经常会遇到这种情况,可不可以把阈值调高一点?
ivvei
2016-02-04 11:07:02 +08:00
这个是 XML 改,跟 Markdown 不搭边吧。
StarBrilliant
2016-02-04 11:08:12 +08:00
@zxgngl
> 是的,在语法上就是简化的 XML ,虽然它相对于 XML 有一个非常大的优点是:插入任何代码都是不需要转义的,方便拷贝来、拷贝去,代码内容不会被破坏。

你忘了 XML 有个东西叫做 CDATA ?
zxgngl
2016-02-04 11:10:49 +08:00
@zbz

(quote . 可读性不高呀,其实觉得在 markdown 基础上面多点语法糖就可以了)

Markdown 的问题就是语法糖太多了,而且语法之间没有一致性,画个表、插个图,语法就变得非常难写难记。而且一段时间不用 Markdown 后再用它,语法还要从新学一遍。
bombless
2016-02-04 11:11:26 +08:00
md 主要是维持了原来人们在邮件列表中习惯了的格式(你在一些文档例如 IETF RFC 里面也能看到类似的格式)。我觉得你应该向 TeX 使用者推销。有时候我觉得 TeX 爱好者挺疯的。
xcatliu
2016-02-04 11:11:53 +08:00
为什么要用 () 而不是 <> 呢?

非 monospace 的字体,<> 应该比 () 易读一些
StarBrilliant
2016-02-04 11:18:50 +08:00
@zxgngl

> Markdown 的问题就是语法糖太多了,而且语法之间没有一致性

因为 Markdown 的语法是众多网民一起发明的。基于 30 年前的邮件排版格式。

> 画个表、插个图,语法就变得非常难写难记。

参看 26 楼,我可以插一幅 ![泣不成声.jpg] 在这里。
然后到整个文章写完了再补充这个图片的 URL 地址:

脚注:
[泣不成声.jpg] http 什么 www 什么什么.jpg
zxgngl
2016-02-04 11:19:03 +08:00
@StarBrilliant

(quote . 你忘了 XML 有个东西叫做 CDATA ?)

在 XML 里面使用 CDATA ,需要把 “]]>” 这样的字符串转义为“]]]]><![CDATA[>”,这已经很难看了。而且 CDATA 不能嵌套,也不能对 CDATA 里面的内容进行二次格式话。而这些问题在我的新语法里都被解决了。

新语法支持在插入的代码里面再进行对部分字符添加格式。由于评论里不能保存空格,我把这个例子贴在这里了: http://v2ex.com/t/255292
vanxining
2016-02-04 11:21:15 +08:00
其实 XML 的标准是一本几百页的大部头……
那么问题来了,考虑到楼主的语法就是 XML 的极端简化版,假如要达到它的表达能力,要不要往里面加东西呢?
StarBrilliant
2016-02-04 11:26:53 +08:00
@zxgngl

迫真认为你的那套东西永远不需要转义似的?
如果我要贴一份所有 2 ASCII 字符组合的清单:
就像这样:
.. AA AB AC AD ... (= (> (? (@ ...
好,挂掉了。

当然你可以狡辩说我可以转义啊。
那就转义: (= (> (? (@ span . ( @) (@ span . @ @) (A 。
好吧,这个转义比 XML 那个还恐怖,还引入了新的 DOM Node 。

当然你会说这种情况出现的非常少啊。

那我请问 XML 里面 CDATA 需要转义的情况有多少?

你可以推广你这套 Markup ,但是永远不能替代 Markdown (或许 Jade ,也或许 TeX )。
因为 Markdown 可以通过电子邮件传送,你这套 Markup 不行。
StarBrilliant
2016-02-04 11:39:08 +08:00
Markdown 的特点在于,这个世界上是先有“ Markdown ”,后有 HTML 的。
Markdown 并不依附于 HTML 。现在也有 Markdown 编译到 Microsoft Word 或者 LaTeX 的编译器。

而且, Markdown 并没有定义“加粗”“斜体”“下划线”“删除线”这些东西,这些东西是实现 Markdown 的人认为规定的。
比如,在中文当中,强调是用着重号,而英文当中,强调是用意大利体( italic ,俗称真斜体)。 Markdown *从来没有规定* 什么符号是表示要用意大利体,而是简单地规定了 * 表示“强调”。
至于强调到底是强调成什么表现,或许是着重号,或许是意大利体,也或许只是读者的脑补(比如读者没安装 MD 阅读器)罢了。

Markdown 贴代码,最早的方案是前面加四个空格,因为 30 年前大家在电子邮件里发代码的时候就是这么做的。后来发现每行前面加空格不方便,大家转用三个 ` 的符号。这只是方便而已。

况且现在的 Markdown 语法已经非常自由了,我几乎随便写,编译器最后都能解析出来,没有什么标准语法。(只要你经常阅读邮件列表,就能自然而然收到 Markdown 文化的薰陶。你说你不读?抱歉,你在远离这个世界上最顶尖的技术大牛所在的地方。)

这个世界上是先有“ Markdown ”,后有 HTML 的。
这个世界上是先有“ Markdown ”,后有 HTML 的。
这个世界上是先有“ Markdown ”,后有 HTML 的。

重要的事情说三遍。

然而你的 Markup 语言一上来就捆绑了 DOM Node 这套,已经不可能替代 Markdown 了。你可以去劝说 Lisp 用户基于你这套东西开发脚本引擎。然而并不能劝说 Markdown 用户放弃这种已经有 30 多年历史的纯文本排版方式。

另外,你知道 UBB Code 是怎么死的么?这语法最早发明是为了安全:让用户手动输入 HTML 不好检查安全性。 UBB Code 之死,并不是因为 [b]这种语法[/b] 太难打了,而是 [i]它是基于 HTML 的,并不能替代 HTML[/i],以及 UBB 的 [b]加粗[/b] 只能解释成 [b]加粗[/b],不能解析成任何别的具有强调意义的形式。
wph95
2016-02-04 11:43:19 +08:00
@StarBrilliant 我感觉 其实 4 楼真相了
StarBrilliant
2016-02-04 11:45:31 +08:00
@zxgngl

我很反感你在大家开始普遍接受你的 Markup 语法之前,就使用这种语法来回复人。
这很不尊重。因为语言是给大家能看懂的。

我也可以基于 Brainf*ck 语法来发明一个 Markup 语言,然后用来回复你的帖子,这样真的好吗?
-----[->+++++<]>-.[--->++++<]>+.---------.[++++>-<]>++++.[++>-----<]>+.[--->++++<]>+.--[->+++<]>-.---[->+++<]>.+++++.--[--->+<]>-.+++[->+++<]>+.---.-[--->+<]>-.[->+++<]>.[++>---------<]>.+[->+++<]>.+[->++++<]>.-[--->+<]>.-[++++>-<]>++.[++>-----<]>+.>++[++>-<]>-.[++++>-<]>++++.[++>-----<]>-.-[--->+++++<]>.[++++>-<]>+++.--[->++++<]>+.+[--->++<]>+.[--->+<]>.--[->++++<]>.>+[--->+<]>---.+[--->+<]>.>++[++>-<]>-.++.
StarBrilliant
2016-02-04 11:46:12 +08:00
@wph95
233333333333 我只是水贴混经验而已 ;-)
sampeng
2016-02-04 12:42:05 +08:00
你高兴就好
contmonad
2016-02-04 13:03:31 +08:00
真心是 Markdown 容易读呀,看看 LISP 有多少人用就知道了。

比较一下:

搞个**大**新闻
搞个(b . 大)新闻

问问非程序员哪个更直观

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

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

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

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

© 2021 V2EX