• 请不要在回答技术问题时复制粘贴 AI 生成的内容
akfish
V2EX  ›  程序员

这两天在改 marked.js,吐槽一下各种用 js 写的 parser 都不爱在 token 里带 location data

  •  
  •   akfish ·
    akfish · May 5, 2014 · 8356 views
    This topic created in 4418 days ago, the information mentioned may be changed or developed.
    比如大家用各种双栏预览式的markdown editor都会注意到,markdown源码和生成的预览页面往往不等长。

    于是很难真正的side-by-side的预览,epiceditor根本就懒得尝试做同步滚动,马克飞象好些略有同步滚(好吧,我只用过这两种)。

    看了下marked.js的源码才知道,原来parse出来的token里直接把这个token在源代码里的位置信息给无视了,使得从生成的内容追述到源代码几乎不可能。

    正经写过compiler的人都知道,在开发时加上这种基本信息就是举手之劳,事后改就等着蛋碎一地吧,而开发各种编辑工具都需要依赖这样的信息。

    也许这就是到现在markdown的editor功能依然很有限的原因,当然另一种解释是geek情怀不屑于用editor。

    还好markdown的语法不是很复杂,marked.js的源代码还算清晰没有什么nasty hack,所以还是可以做到的。之前尝试对MathJax做类似的修改,一个月后放弃了。

    目前还没完全改好,略buggy,过几天就能发pull request了,撸了个visualizer试了下效果先:



    想象下完事后,左边光标所在的token会和右边对应生成的element完全对其同步滚动是多么爽的感受。然后也许终于可以撸一个一直希望能有的markdown in-place preview editor出来(http://www.v2ex.com/t/110988)。
    7 replies    2014-05-06 11:14:47 +08:00
    zzNucker
        1
    zzNucker  
       May 5, 2014
    额其实也没啥好吐槽的啦别人没想到这个功能可能就没顺手加上去。。。。 虽然对后面的人来说可能就很烦 - -
    akfish
        2
    akfish  
    OP
       May 5, 2014
    @zzNucker 其实吐槽的目的还是其次,开源库拿来经常都不够用要自己加功能。
    主要是觉得这现象有点过于普遍了而已,js实现的parser库好多都这样。
    zzNucker
        3
    zzNucker  
       May 5, 2014
    @akfish 大概都比较随便吧。。。
    amio
        4
    amio  
       May 6, 2014
    大赞,求Github地址
    sxd
        5
    sxd  
       May 6, 2014
    我觉得你发的帖子很ok,吐槽的也非常right.
    akfish
        6
    akfish  
    OP
       May 6, 2014
    @amio Bug没修完还没push。
    目前还只是在改parser,改完发PR被merge了就没自己的地址了。
    Editor还得另做,Visualizer那个也就为了调试用用,不会发布。

    进度可以看这个issue:
    https://github.com/chjj/marked/issues/338
    SoloCompany
        7
    SoloCompany  
       May 6, 2014
    good job!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3191 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 14:02 · PVG 22:02 · LAX 07:02 · JFK 10:02
    ♥ Do have faith in what you're doing.