我想制作一个可以从javascript源代码生成html文件的工具,并在其中显示语法高亮的代码。我想在HTML中保持完全相同的代码格式(注释,换行符,空白)。我尝试了babel-parser / traverse,但是在构建AST时会丢弃这些标记(而babel-generator在生成代码时仅使用最少数量的空格)。有其他选择吗?
答案 0 :(得分:2)
JavaScript解析器可以收集其原始格式的信息吗?
可以可以。对于随后执行代码,这不是必需的,这就是为什么某些解析器会丢弃有关基础源代码的任何信息的原因,因为它永远不需要。但是,对于JavaScript解析器来说,有一个关于如何存储称为ESTree的AST的社区协议,并且specifies认为树的每个节点都有一个loc
属性,其中包含start
和{{1 }}中源代码中的某个节点。
还有其他选择吗?
创建此类ESTree的解析器之一是acorn,但可能还有更多。
答案 1 :(得分:0)
您几乎不需要解析器或AST即可完成所需的工作。
如果我了解您的目标,那么您真正要做的就是以不同的方式突出显示语言中的标记,并保留它们相对于左边距的相对位置。
为此,您需要做的就是提取令牌并跟踪每个令牌的起始列号。您可以很容易地将这种词法分析器构建为JavaScript。由于转义字符,字符串文字标记将是最混乱的。您可以使用诸如flex之类的词法生成器,也可以手动滚动自己使用的临时处理和/或正则表达式(flex使您能够以有组织的方式进行操作)。这样,您可以处理空格以帮助跟踪列号并捕获注释,以便再现它们。
如果使用flex,则可以提供一些代码,以在识别每个令牌时执行;那会吐出你的HTML。如果您通过临时方法构建词法分析器,那么仍然会有散布HTML的机会。
如果您想快速启动此过程,则可能会使用开源解析器的源头,丢弃解析器部分,并修复词法分析器部分。