我设计了一种文本标记格式,用来代替 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 . 斜体)字。)

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

13637 次点击
所在节点    程序员
144 条回复
victor
2016-02-04 13:12:21 +08:00
HTML :
<p>这个句子里有<i>(i . 斜体)</i>字。</p>

用你的新语法怎么搞?
zxgngl
2016-02-04 13:18:05 +08:00
@victor

这样写:

(p .
这个句子里有(@i . (i . 斜体)@)字。
)
zxgngl
2016-02-04 13:33:07 +08:00
@liuxey

(@quote .

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

@)

我想,你想说明的是“瞧,你这个设计并没有什么颠覆性创新嘛,和 HTML 没什么不一样的嘛。”是的,这不是颠覆性创新,并不能推翻整个世界:)一个东西有用、好用,不一定非要是颠覆性创新的。另外,你只是看到相思的地方,但没有领会有创新的地方。请看一下 19 楼的留言。
zxgngl
2016-02-04 13:34:55 +08:00
@vanxining 谢谢提醒,我会研究一下 XML 的标准( https://www.w3.org/TR/REC-xml/ ),看看有什么可以借鉴的~
breeswish
2016-02-04 13:52:31 +08:00
拙见:思路上和 HTML 一样,语法上比 HTML 简练(类似于 yaml 之于 json 的关系?),但要说代替 Markdown 那还是不够,因为这个思路太复杂了 :-) Markdown 最重要的特色在于可以轻易阅读的源文件,而 HTML 和你的这个正是因为想表达千千万万种东西,所以不具备可以轻易阅读的属性。
zxgngl
2016-02-04 14:06:38 +08:00
@StarBrilliant

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

我的这套东西真的永远不需要转义的,如果要贴一份所有 2 ASCII 字符组合的清单,这样表示就可以了:

(@@div . .. AA AB AC AD ... (= (> (? (@ ...@@)

好,抗住了。;)

可能,你没有认真看我的说明。在我的语法里,"@"的个数是任意的,只要前后匹配即可。其实我一直没有点出来,但这个设计其实是个比较大的革新,因为它意味着这个语言的 parser 不能是像 Markdown 那样基于正则表达式来设计了。这是因为正则表达式的所能表达的正则语言的表达力其实是有限的。
zxgngl
2016-02-04 14:18:49 +08:00
@StarBrilliant

(quote .
你可以推广你这套 Markup ,但是永远不能替代 Markdown (或许 Jade ,也或许 TeX )。
)

虽然这句话是对我的脑力劳动成果的某种否定,但我内心和你的看法很像。好东西不一定流行,这个世界就是这样。我们也没啥子办法~
zxgngl
2016-02-04 14:40:55 +08:00
@StarBrilliant

哎呦喂~大爷不要生气,小的应该早点回复这一点的:

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

我努力尝试去耐心解答和解释每一个人的问题和质疑,尽可能去吸收每一个思想碰撞的火花,对大家的评论都是认真对待的,从来没有想表达对任何人的不敬。使用自己的 Quote 语法也是想在实用中检验一下,尝试看能否暴露出问题。

如果真的认真读帖的朋友,应该可以在一秒钟内看懂 (quote . 引文),所以看懂是不难的,所以我觉得是有可行性。另外,大家用什么语法回复我,我都是欣然聆听的。我觉得只要不限制别人一定要用某种东西,大家就能够平等交流。

我不知道用这个帖子里重点讨论的语法回复你会导致你觉得自己不被尊重,向你表示歉意。之后回复你的评论,我会用“>”语法。但是在其他回复中我会继续使用新语法,也欢迎大家也尝试使用新语法,目的在于尝试发现问题。如果哪位朋友也对这个问题觉得敏感,希望别人使用“>”来引用 Ta 的话,请留言说明,我们会尽可能地让你感觉舒服的。
manfay
2016-02-04 14:44:57 +08:00
现在各种标记语言都使用半格字符,写英文或代码为主的时候很方便,但是对于写中文为主的普通用户,就需要频繁切换输入法,这是个大问题!楼主能不能发明个适合中文输入法的标记语言?
zxgngl
2016-02-04 14:45:16 +08:00
@StarBrilliant

> 我也可以基于 Brainf*ck 语法来发明一个 Markup 语言,然后用来回复你的帖子,这样真的好吗?
-----[->+++++<]>-.[--->++++<]>+.---------.[++++>-<]>++++.[++>-----<]>+.[--->++++<]>+.--[->+++<]>-.---[->+++<]>.+++++.--[--->+<]>-.+++[->+++<]>+.---.-[--->+<]>-.[->+++<]>.[++>---------<]>.+[->+++<]>.+[->++++<]>.-[--->+<]>.-[++++>-<]>++.[++>-----<]>+.>++[++>-<]>-.[++++>-<]>++++.[++>-----<]>-.-[--->+++++<]>.[++++>-<]>+++.--[->++++<]>+.+[--->++<]>+.[--->+<]>.--[->++++<]>.>+[--->+<]>---.+[--->+<]>.>++[++>-<]>-.++.

我们设计的语法,认真读过帖子的说明是可以用头脑快速解析的;但 Brainf*ck 的语法即使了解 Brainf*ck 的工作机制,也不能很快用人脑解析。所以,不好。
oldj
2016-02-04 14:49:46 +08:00
有点意思。

如果属性里有“|”怎么表示呢?

比如: <div x="a|b"></div> 。
zxgngl
2016-02-04 14:55:42 +08:00
@oldj 用转义。这是这个语言里极少需要用到转义的地方。但由于属性通常比较短(相对于插入的代码段),所以实际使用应该不成问题。

例子:

(div x=|a\|b|)
KylinRoc
2016-02-04 14:58:26 +08:00
名字帮楼主想好了,叫: LispML
geekyteen
2016-02-04 14:58:57 +08:00
嗯,我看完,能看懂(不能准确看懂),但是确实不能写……感觉学习成本太高了……类 HTML 学习成本都很高。

首先,你可以用 HTML 来写,有经验一点的人都能看得懂<del>,但是小白不一定了。</del>
如果我用 ** Markdown ** 来写,小白也能一眼看出来我强调的是哪里。 Markdown 的优点是看上去符合直觉。
说到底这是一个原则的问题,即解析优先还是阅读优先的问题。
zxgngl
2016-02-04 15:05:35 +08:00
@manfay

(quote .
现在各种标记语言都使用半格字符,写英文或代码为主的时候很方便,但是对于写中文为主的普通用户,就需要频繁切换输入法,这是个大问题!楼主能不能发明个适合中文输入法的标记语言?
)

谢谢。你的建议很有启发性,我们会考虑支持中文全角的特殊字符。我已经想好了如何支持这个特性,但现在还是倾向于不支持,因为将 ( 和 (等同起来意味着有时候要多敲两个“@”。请看:

半角模式:

(div .
拼( pin1 )音( yin1 )
)

半角加全角模式:

(@div .
拼( pin1 )音( yin1 )
@)

这是一个取舍问题,我们会再探讨。
rubyvector
2016-02-04 15:07:46 +08:00
初衷是什么呢.那个是软件开发之本啊.功能强大且全面的有 HTML,MARKDOWN 是为了全心书写而不顾及太多格式操作.
另外,MARKDOWN,先入为主,语法学习有成本,这个也是需要考虑的地方
xuboying
2016-02-04 15:08:51 +08:00
按照楼主这样,我也能设计一种解释语言了,连解释器都写好了

#!/usr/bin/env perl

###解释器
sub F{
my $FMT = shift;
my $Text = shift;
if ($FMT eq 'i'){
return "<i>$Text</i>";
}
if ($FMT eq 'b'){
return "<b>$Text</b>";
}
return $Text;
}

###要被解释的语言
my $STR = <<"HEREDOC";
italic: ${(\F i,italic)}
strong: ${(\F b,bold)}
HEREDOC

print $STR;

================
运行结果
italic: <i>italic</i>
strong: <b>bold</b>
Arthur2e5
2016-02-04 15:12:03 +08:00
要不要玩玩这个?
http://www.nongnu.org/skribilo/
sxd
2016-02-04 15:13:44 +08:00
设计语言也要按照基本法
zxgngl
2016-02-04 15:15:10 +08:00
@geekyteen

(quote .
嗯,我看完,能看懂(不能准确看懂),但是确实不能写……感觉学习成本太高了……类 HTML 学习成本都很高。
)

我能理解你。其实,我们很多时候很容易把“不熟悉”等同于“难理解”,这是一个人类的认知陷阱。

新语法其实很简单(只有一条),而且规则。另外,属性其实是 optional 的,复杂度是可控的。

如果只要求达到 Markdown 的表达力的话,

(image src=|pic.jpg| width=|xxx| height=|xxx| title=|xxx| alt-text=|xxx|)

可以简写为:

(image src=|pic.jpg|)

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

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

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

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

© 2021 V2EX