我设计了一种文本标记格式,用来代替 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 条回复
zxgngl
2016-02-03 23:19:51 +08:00
@Livid 有没有兴趣在 V2EX 支持这种文本标记格式?如果有的话,我们现在还需要给它起一个可爱的名字并写一个能把它转换为 HTML 的翻译器。
bdbai
2016-02-03 23:20:12 +08:00
这能比 markdown 好读?还没有编译器?
楼主不要总想搞个大新闻出来。
bitbegin
2016-02-03 23:20:59 +08:00
把()换[]就好了,方便输入
liuxey
2016-02-03 23:27:40 +08:00
(img src=|photo.jpg| width=|60px| height=|40px|)

<img src="photo.jpg" width="60px" height="40px" >
oott123
2016-02-03 23:39:41 +08:00
我觉得我还不如用 jade 去……
zxgngl
2016-02-03 23:48:57 +08:00
@oott123 Jade http://jade-lang.com/ 使用的是基于空格的语法,有时候多一个或少一个空格就会导致错误结果与预期不同。 Jade 很有用,但有些人觉得它的语法比较脆弱,我设计的语法没有这个问题。
ragnaroks
2016-02-03 23:51:14 +08:00
可能比较先入为主,但是我还是觉得 html 的 xml 类文本比较适合编写
zxgngl
2016-02-03 23:52:03 +08:00
补充一个特性:

我设计的语法支持在插入的代码里面再进行对部分字符添加格式。

由于评论里不能保存空格,我把这个例子贴在这里了: http://v2ex.com/t/255292
zxgngl
2016-02-03 23:56:46 +08:00
@ragnaroks 是的,因为 Markdown 的表达力很有限,好多时候比如插入图片,还不如直接用 HTML 。我们设计的语法与 HTML 在表达力上是完全等价的。有的时候还能少敲几个字符。

HTML :

<p>这个句子里有<i>斜体</i>字。</p>

新语法:

(p . 这个句子里有(i . 斜体)字。)
Tink
2016-02-04 00:00:02 +08:00
好难读啊
zxgngl
2016-02-04 00:05:48 +08:00
@bitbegin 谢谢。我有考虑过使用 [ 和 ],但有一个顾虑就是由于使用了 | 来表示一个字符串,而 | ] 放在一起可能会引起混淆,所以决定还是使用 ( ) 。

为什么使用 | | 来表示字符串而不是 "" 或 ''?这是因为 (p . xxx) 中“.”后面的内容里面很可能会出现 " 或 ',所以有可能产生视觉上的混淆,而 | 又是使用频率相对少的字符,所以使用它来表示字符串。
yinheli
2016-02-04 00:09:12 +08:00
table 要怎么玩? 会不会嵌套太多, 头大
finian
2016-02-04 00:20:48 +08:00
和直接用 HTML 没什么区别,就是少敲些字符而已。 Markdown 的优势在于让你写作时更专注内容而非格式,而且原始格式即便不经过转化也能体现基本的「视觉效果」
zxgngl
2016-02-04 00:23:26 +08:00
@bdbai @Tink 是否好读是主观的,我觉得挺好读的,但这都不是大事儿。重要的是我们不能把“形状上更直观对称”(比如 Markdown 的 ** hello ** 相对于王婆今天想卖的新语法的 (strong . hello) )等同于好理解、容易被头脑翻译。

王婆今天想卖的新语法的一个很大的优点是它 (strong . 只有一条语法),这样新手也能很快读懂别人写的文档, Markdown 的语法就很多,至少要学十分钟,而且隔段时间不用忘了,又要再学十分钟;)

万一需要在文档中插入图片,就要使用 Markdown 的如下语法:

![Alt text](/path/to/img.jpg "Optional title")

与 Markdown 的其他的“好看”的语法规则没有任何一致性。而在新语法中,只有一中形势:

(img alt-text=|alt text| src=|/path/to/img.jpg|)
learnshare
2016-02-04 00:26:14 +08:00
Markdown 的优势就是简单到几乎不破坏内容。你这个格式有些复杂了,为什么不 XML 呢
yuuko
2016-02-04 00:33:55 +08:00
这样的话,为什么不直接 html 呢
oott123
2016-02-04 00:37:00 +08:00
其实我认为更像是一个 HTML 的改进版(或者说…查找替换版),而和 markdown 不沾边…
zxgngl
2016-02-04 00:43:27 +08:00
@yinheli 谢谢,这是一个好问题。关于 table ,有两个思路,一个就是直接向 HTML 那样嵌套,由于我们的语法与 XML 能表达相同的语义,所以这么做至少是可行的。

另一个思路就是通过插件的形势来支持其他格式,比如我们可以直接使用 CSV 格式表示 table ,然后自动由插件转换为 HTML 输出。例子:

(table plugin=|csv-paser| .
name, sex, age
Tom, 23, male
Sue, 34, female
)

然后输出是漂亮的 HTML 表格。
minsheng
2016-02-04 00:50:25 +08:00
@zxgngl 你这个自定义插件的思路倒是和 Haskell 的 Quasiquotation 差不多了。

总的来看我觉得挺有前途的,特别是那个 (@ @) 比较新颖,我之前自己写是让用户随便换 () [] <> {} 但是如果写自己的文档就会傻逼。但是若要替代 Markdown ,你需要加入两个支持,一个是最顶层的文本可以被直接当做段落处理,另一个是 Markdown 那个段内标记,**hello** 什么的。此外,你这个这么贴近 HTML ,你可能需要允许用户重新定义下 **hello** 的语义,所以 parse 完了之后可能还需要个 interpreter 。
minsheng
2016-02-04 00:51:43 +08:00
我读错了,楼主是专门反 **Markdown** 的这种 ad hoc 的做法啊,不过就连 TeX 都加入了 $1+2$,楼主可能要失望了

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

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

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

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

© 2021 V2EX