freeze:一个能将源代码转换成图片的工具

今天给大家推荐的开源工具是freeze,该工具可以将源代码或终端中的输出内容转换成对应的图片。如下图效果:图片

比如,我们想把一个go语言编写的源代码main.go转换成图片,则可以按如下方式操作:

freeze main.go --output main.png

生成的效果如下:图片

你看,就把对应的代码按照高亮的形式生成了图片。

实现原理

那这个freeze的实现原理是什么呢?通过阅读代码,我们发现该包本质上依赖github.com/alecthomas/chroma这个包和svg。

通过chroma将源代码格式化输出成html文件,然后通过svg将html文件转换成图片。

我们来看下这个chroma包具体是做什么的?图片

嗯,根据主页说明,Chroma是一个用go语言编写的语法高亮包。它可以按照编程语言的规则高亮显示并转换成html文件。

其实Chroma包含3部分:lexers、formatters和styles。图片

其中lexers是将源码转换成对应的tokens,即语法分析。styles是将对应的语法token映射成对应的样式。最后,通过formatters将语法tokens和样式转进行格式化输出成html。

最后,freeze通过svg将html输出成对应的图片。具体svg是什么,大家可以百度,这里不再介绍。

总之,通过开源包,不仅能学习到很多编程方面的知识,也能开拓我们的计算机视野。

这里是「Go学堂」,分享有用、有趣的编程知识。

Was this helpful?

0 / 0

发表回复 0