V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxgngl
V2EX  ›  程序员

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

  •  1
     
  •   zxgngl · 2016-02-03 23:12:11 +08:00 · 13552 次点击
    这是一个创建于 3221 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    (标签 属性 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 . 斜体)字。)
    

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

    第 1 条附言  ·  2016-02-05 16:36:41 +08:00
    请大家认真看一下我举的例子和我在回复中的说明,再来评价或改进这个语言。欢迎拍砖,但请不要看到别人拍砖就盲目跟着拍砖。
    第 2 条附言  ·  2016-02-23 21:45:33 +08:00

    补充一个特性:在插入的代码里面再进行对部分字符添加格式。

    (@code lang=|C++| .
    #include <iostream>
    
    int main()
    {
        std::cout << "(@span color=|red| . Hello, World!@)\n";
    }
    @)
    
    第 3 条附言  ·  2016-02-23 21:46:56 +08:00
    我有考虑过使用 [ 和 ],但有一个顾虑就是由于使用了 | 来表示一个字符串,而 | ] 放在一起可能会引起混淆,所以决定还是使用 ( ) 。

    为什么使用 | | 来表示字符串而不是 "" 或 ''?这是因为 (p . xxx) 中“.”后面的内容里面很可能会出现 " 或 ',所以有可能产生视觉上的混淆,而 | 又是使用频率相对少的字符,所以使用它来表示字符串。
    第 4 条附言  ·  2016-02-23 21:48:57 +08:00
    我们不能把“形状上更直观对称”(比如 Markdown 的 ** hello ** 相对于新语法的 (strong . hello) )等同于好理解、容易被头脑翻译。

    新语法的一个很大的优点是它 (strong . 只有一条语法),这样新手也能很快读懂别人写的文档, Markdown 的语法就很多,至少要学十分钟,而且隔段时间不用忘了,又要再学十分钟;)
    第 5 条附言  ·  2016-02-23 21:50:11 +08:00
    关于 table ,有两个思路,一个就是直接向 HTML 那样嵌套,由于我们的语法与 XML 能表达相同的语义,所以这么做至少是可行的。

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

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

    然后输出是漂亮的 HTML 表格。
    第 6 条附言  ·  2016-02-23 21:52:05 +08:00
    * 我们的新语法中,插入任何代码都是不需要转义的,方便拷贝来、拷贝去,代码内容不会被破坏。

    *新语法中可以对代码进行“再格式”, Markdown 似乎做不到这点。

    *新语法中可以通过 plugin 的方式支持其他的格式,比如 CSV 表格,不需要像 Markdown 那样手动画 ASCII 表格。

    *比 XML 敲的字少。

    *只有一条语法,几个特殊字符,而且绝大多数情况下不会遇到需要转义的情况。
    第 7 条附言  ·  2016-02-23 21:58:32 +08:00
    是的,在语法上就是简化的 XML ,虽然它相对于 XML 有一个非常大的优点是:插入任何代码都是不需要转义的,方便拷贝来、拷贝去,代码内容不会被破坏。

    这个新语法是颠覆性创新吗?肯定不是啊,要是颠覆性创新,至少在语义表达力上要有多突破吧。 XML 已经是语义表达力的极限了,新语法也仅仅是达到了这个极限而已。一个东西有用、好用,不一定非要是颠覆性创新的。
    第 8 条附言  ·  2016-02-23 22:00:22 +08:00
    在 XML 里面使用 CDATA ,需要把 “]]>” 这样的字符串转义为“]]]]><![CDATA[>”,这已经很难看了。而且 CDATA 不能嵌套,也不能对 CDATA 里面的内容进行二次格式话。而这些问题在我的新语法里都被解决了。
    第 9 条附言  ·  2016-02-23 22:04:51 +08:00
    问:

    HTML :
    <p>这个句子里有<i>(i . 斜体)</i>字。</p>

    用你的新语法怎么搞?

    答:

    这样写:

    (p .
    这个句子里有(@i . (i . 斜体)@)字。
    )
    第 10 条附言  ·  2016-02-23 22:06:00 +08:00
    “瞧,你这个设计并没有什么颠覆性创新嘛,和 HTML 没什么不一样的嘛。”是的,这不是颠覆性创新,并不能推翻整个世界:)一个东西有用、好用,不一定非要是颠覆性创新的。
    144 条回复    2016-06-26 20:01:27 +08:00
    1  2  
    SilentDepth
        101
    SilentDepth  
       2016-02-04 20:37:01 +08:00
    @vvsun 不考虑 Caret 吗,程序员的话也许会更喜欢这个
    laosb
        102
    laosb  
       2016-02-04 21:14:59 +08:00
    @zxgngl 这样可读性比 Markdown 差多了,而且文字工作者不会想去弄明白「 span 」「 plugin 」「 table 」这些略复杂的概念,这些实意字符很大程度上影响了可读性。更糟糕的是,你广泛运用的括号,在实际文本中还是实意的。如果读者不知道这个语法,他会忽略其他乱糟糟的东西但是括号不会被忽略,可能会引起歧义,在英语文章中就更不用说了。

    Mike is **not** a gay. 看起来强调了 not
    Mike is (**.not) a gay. 看起来像是 Mike is (maybe not?) a gay.

    Markdown 采用的多数是特殊字符,就是为了避免实意字符带来阅读上的困扰。事实上, Markdown 的规范可以说是**约定俗成**,而不是**生硬的规定**。 Markdown 是自然语言的衍生。

    Product Name | Number | Price | Total
    ------------------|----------|-------|-------
    Butter | 2| 3| 6

    >Ah, a price table

    (table plugin=|csv-paser| .
    csv, based, table
    Product Name, Number, Price, Total
    Butter, 2, 3, 6
    )

    >Wtf?!

    除了样例,在这篇回复里我用了几处 Markdown ,也许你根本都没有感觉到,我自己发现是在写这一段的时候。
    你看看你的回复,充满了十足的装逼的香味。别的不说,「"quote" 是什么意思?」
    zxgngl
        103
    zxgngl  
    OP
       2016-02-04 23:02:29 +08:00
    @laosb

    我的(不全面且主观臆断的)观察是,多数情况下人们通过纯文本模式或者编辑器的 Markdown 辅助模式来“写”文档;但“读”的时候,多数情况都是渲染过的样子,而不是原始的 Markdown 文本,这也是为什么 Markdown 编辑器这种按照 Markdown 设计初衷本来不应该存在的东西广为流传甚至还能卖钱的原因。

    “ quote ”的意思是“引文”,语义类似于 HTML 里面的 blockquote 标签。这个帖子发表在“程序员”节点下,所以我假设大家是懂的。没有让大家清楚明白地知道这个单词的意思是我的错,抱歉各位。
    zhulaole
        104
    zhulaole  
       2016-02-04 23:31:09 +08:00
    专门注册的帐号,@zxgngl 请看 csdn 或豆瓣的私信,这里没私信没法联系你
    LioMore
        105
    LioMore  
       2016-02-04 23:33:26 +08:00
    无论如何,支持一下作者!源码分享一下?

    ---

    然后说下,如果不能使用 markdown 我会优选 reStructuredText

    还有,切勿只是为了让你的文本标记格式去实现 xml , html 中的强大功能,不然,我会认为你写的东西和易语言本质上是没有区别的

    markdown 的功能不多,但是完全足够用了,如果需要其他的功能能够直接插入 html 代码,这就是 markdown 的魅力,不是吗?
    bramblex
        106
    bramblex  
       2016-02-04 23:39:12 +08:00
    嗯……怎么说呢……想法不错,但是然并卵的赶脚……
    zxgngl
        107
    zxgngl  
    OP
       2016-02-05 01:28:53 +08:00
    @zhulaole 可以发邮件联系我。地址请见签名。
    cevincheung
        108
    cevincheung  
       2016-02-05 02:29:46 +08:00
    __ ___ ... .. _.. .. ._ _. __ ._
    LioMore
        109
    LioMore  
       2016-02-05 04:06:50 +08:00
    补充:
    刚看了其他人的回复,现在觉得楼主的语言和 HTML 的关系越来越像易语言和 VB 的关系了
    dcoder
        110
    dcoder  
       2016-02-05 05:21:34 +08:00
    @zxgngl 为啥不直接用 emmet 写 HTML?
    jemyzhang
        111
    jemyzhang  
       2016-02-05 08:50:49 +08:00
    看上去楼主并不理解 md 的精华所在,那就是可读性
    woai110120130
        112
    woai110120130  
       2016-02-05 08:56:13 +08:00
    程序在哪
    CJey
        113
    CJey  
       2016-02-05 09:27:21 +08:00
    这和 Markdown 并没什么关系吧,看起来你这核心表达方式就是 XML 的做法
    你和我斗承认 XML 的表达力几乎是极限,但这也是他的缺陷,为啥?很简单,你想无所不能这很简单, binary digit 就是你要的
    所以你要看到的是你到底要做什么,解决什么问题,解决问题的手段是否优雅
    在这里,我看不到简洁,除了复杂和弱表现力,剩下的就是可能解决了让你不爽的 quota 方式, so ,没意义,因为 quota 无法避免,更不要试图更改大家的习惯,这会让人排斥

    说到 quota ,突然想到个主意,参照大多数正则的做法,文档开头首行首个字符会被当成转义符,个人按习惯来,用中文,泰文,各自随意。但带来的问题是,文档局部不可用,这其实缺陷也挺大,缺点东西文档就不能读,这不是人类友好的设计
    nekocode
        114
    nekocode  
       2016-02-05 09:44:53 +08:00
    nekocode
        115
    nekocode  
       2016-02-05 10:13:44 +08:00
    主要是你连竞争对象都选错了。和 Markdown 这种『专注内容,任何人都可以很容易书写』的格式来比,真的差得不是一般的多。
    zxgngl
        116
    zxgngl  
    OP
       2016-02-05 10:17:59 +08:00
    @dcoder Emmet ( http://emmet.io/ )通过语法的扩充和编辑器的辅助功能,使写 HTML 变得容易快速了,但并没有解决读 HTML 以及在 HTML 中插入代码可能需要转义的问题。
    zxgngl
        117
    zxgngl  
    OP
       2016-02-05 10:22:20 +08:00
    @nekocode 我觉得我设计的格式才是专注内容,任何人都可以很容易书写,而且“可以方便地书写任何内容”的格式。
    EugeneQiu
        118
    EugeneQiu  
       2016-02-05 10:22:20 +08:00
    @Delbert 哈哈哈,蒙逼了,是 Shift 键, anyway ,反正每次按多一个键这种输入感觉还是有点不够友好。
    zxgngl
        119
    zxgngl  
    OP
       2016-02-05 10:24:20 +08:00
    @woai110120130 现在没有程序,只有设计。
    zxgngl
        120
    zxgngl  
    OP
       2016-02-05 10:39:53 +08:00
    @CJey

    > 在这里,我看不到简洁,除了复杂和弱表现力,剩下的就是可能解决了让你不爽的 quota 方式, so ,没意义,因为 quota 无法避免,更不要试图更改大家的习惯,这会让人排斥

    我假设你说的“ quota ”指的是“引用文字或代码”( quote ?)。我设计的语法一劳永逸地消灭了插入文字和代码时可能会需要对插入对象中的某些字符进行转义的问题。

    是否简洁是主观的,就不说了。

    你用了“弱表现力”这个词来形容我设计的格式。我想知道,有什么你觉得这个新语法表现不了么?
    10iii
        121
    10iii  
       2016-02-05 10:43:35 +08:00
    回想起当年在天涯战民科。
    zxgngl
        122
    zxgngl  
    OP
       2016-02-05 10:44:44 +08:00
    @LioMore

    > 刚看了其他人的回复,现在觉得楼主的语言和 HTML 的关系越来越像易语言和 VB 的关系了

    我想,你想说的是我的语法和 HTML 差不多。但我的语法是可以解决诸如易读性差,入代码可能需要转义等直接使用 HTML 会遇到的问题。

    另外,请不要光看其他人的回复。请看我的原帖、我的回复以及补充说明。
    zxgngl
        123
    zxgngl  
    OP
       2016-02-05 10:46:54 +08:00
    @10iii 你这种表达方式是可能伤到人的,而且帮不到人。请看我的原帖、我的回复以及回复中对语法的补充说明。
    zxgngl
        124
    zxgngl  
    OP
       2016-02-05 10:47:56 +08:00
    @cevincheung 看不懂。请说中文。
    zxgngl
        125
    zxgngl  
    OP
       2016-02-05 10:54:34 +08:00
    @jemyzhang

    > 看上去楼主并不理解 md 的精华所在,那就是可读性

    窃以为, Markdown 就是一些约定俗成的 hack 拼凑,没有什么原则可言,也没有什么精华的。
    xcodebuild
        126
    xcodebuild  
       2016-02-05 11:44:43 +08:00   ❤️ 1
    @zxgngl 可以说 markdown 存在不少缺陷但也不用贬得一文不值,你的做法确实降低了可读性,写起来也更麻烦了,和 markdown 的受众完全不是一种人来着。
    话虽这么说,但是创造总是应该鼓励的,你完全可以用在自己喜欢的地方么,例如给 hexo 写个渲染插件然后用在自己的博客里什么的。
    我个人更加喜欢 orgmode (在有 emacs 的情况下),徒手写我还是倾向于 markdown 。
    zxgngl
        127
    zxgngl  
    OP
       2016-02-05 14:23:43 +08:00 via Android
    @codefalling 这个语法一开始的定位之一就是博客的“源代码”:)
    master13
        128
    master13  
       2016-02-05 14:26:04 +08:00
    所以这种语言跟 HTML5 的区别在哪里?
    popbones
        129
    popbones  
       2016-02-05 15:39:45 +08:00 via iPhone
    不太适合人类阅读,容易出现行为一大串)和修饰字符和正文自负不好分辨的情况。可以作为 XML 的某种模板或为了节省空间的存储格式(节省有限)因为表达集基本差不多,但是和 Markdown 比没什么优势, Markdown 的一个重要优势是即时当作纯文本来读对人类来说大部分时候也很容易。如果作为编译成输出文档的源码,不太关心可读性但是比较在意表达能力的话竞争太多,比如 LaTex
    zxgngl
        130
    zxgngl  
    OP
       2016-02-05 15:55:01 +08:00
    @master13

    > 所以这种语言跟 HTML5 的区别在哪里?

    在 HTML 里面如果想表示 “<你好>” 需要输入转义后的 “&lt;你好&gt;”,使用我设计的语法对于任何字符或字符串都不需要转义,方便拷贝和修改。第二个好处是可以支持第三方格式,如 CSV 表格。第三个好处是写的少,语法一致性高(只有一条语法)。
    zxgngl
        131
    zxgngl  
    OP
       2016-02-05 16:28:24 +08:00
    @popbones

    > 不太适合人类阅读,容易出现行为一大串)和修饰字符和正文自负不好分辨的情况。

    可以举个具体的行尾出现一大串 ) 的例子吗?

    > 可以作为 XML 的某种模板或为了节省空间的存储格式(节省有限)因为表达集基本差不多,但是和 Markdown 比没什么优势, Markdown 的一个重要优势是即时当作纯文本来读对人类来说大部分时候也很容易。

    请举个具体的 Markdown 很好读但我设计的格式不好读的例子吧。

    > 如果作为编译成输出文档的源码,不太关心可读性但是比较在意表达能力的话竞争太多,比如 LaTex

    在功能上,由于我的格式语言只是处在设计阶段,所以跟 LaTex 比功能(如输出 PDF 、 PS ,画数学公式)是望尘莫及的。但在语言设计上 LaTex 等语言有一个致命的问题就是当用 LaTex 写 LaTex 的说明文档的时候会由于转义字符的原因导致非常难写。具体例子:

    LaTex 有以下十个特殊字符:

    & % $ # _ { } ~ ^ \

    如果要在 LaTex 文档中表示它们需要这样写:

    \documentclass{article}
    \begin{document}
    \& \% \$ \# \_ \{ \} \textasciitilde \textasciicircum \textbackslash
    \end{document}

    我设计的语法包含以下六个特殊字符:

    ( ) @ = | .

    在新语法中表达它们是这样的:

    (@article .
    (@document .
    ( ) @ = | .
    @)
    @)

    哪一种语法更清晰简洁比一下立刻就见分晓。
    zxgngl
        132
    zxgngl  
    OP
       2016-02-05 16:30:46 +08:00
    补充上一条回复:

    新语法包含七个特殊字符(不是六个):

    ( ) @ = | . \
    heraldboy
        133
    heraldboy  
       2016-02-05 16:56:40 +08:00
    太复杂了, markdown 这么简单的都不是很多人用。
    MiskoLee
        134
    MiskoLee  
       2016-02-05 19:03:52 +08:00
    没看到这个和 html 的差异是啥。。。。
    zxgngl
        135
    zxgngl  
    OP
       2016-02-05 22:13:37 +08:00
    @MiskoLee 请看 130 楼的回复。
    oska874
        136
    oska874  
       2016-02-05 22:28:29 +08:00 via Android
    不就是模板么。
    zxgngl
        137
    zxgngl  
    OP
       2016-02-05 22:45:28 +08:00
    看来要再秀一下两个特性了:

    对插入的代码进行再格式化(局部上色)
    http://v2ex.com/t/255292

    支持插入 CSV 表格
    http://v2ex.com/t/255591
    iyangyuan
        138
    iyangyuan  
       2016-02-05 22:56:30 +08:00 via iPhone
    然并卵,无理论基础
    zxgngl
        139
    zxgngl  
    OP
       2016-02-05 23:31:21 +08:00
    @iyangyuan 请指教,如何才能有理论基础?
    hinkal
        140
    hinkal  
       2016-02-06 09:33:36 +08:00 via Android   ❤️ 1
    道理我都懂,为什么回复里只看到了拍砖,并没有看到夸楼主的(img src=|doge.jpg|)
    LioMore
        141
    LioMore  
       2016-02-06 18:38:00 +08:00
    @zxgngl 谢谢你的回复,嗯,你说的很对,把重要的回复写在附言里吧?大家一个一个翻也很麻烦

    附言中贴上项目地址如何?
    xiaof
        142
    xiaof  
       2016-02-14 09:19:41 +08:00
    我觉得楼主设计的这种文本标记格式和 MD 的用户群是不同的,非竞品没必要讨论谁好谁坏。

    属性和 html 是一样的吧? 有多少普通人能记得住那么多属性(大部分普通人英文并不好)?

    MD 使用较少的“属性名词”(姑且这么称呼吧),可以满足大多数的文档写作场景使用,入门的门槛低,容易上手,源码的易读性也比较好。
    zxgngl
        143
    zxgngl  
    OP
       2016-02-15 03:14:53 +08:00
    @xiaof 属性可用也可不用,多数情况下可以不用;但在 MD 中有时候想用也不能用。
    wizardforcel
        144
    wizardforcel  
       2016-06-26 20:01:27 +08:00
    还是基于标签的,用做模板倒还好。。。写作的话。。我宁愿用 jade 。
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1045 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:15 · PVG 05:15 · LAX 13:15 · JFK 16:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.