大家好,我是渔夫子。
今天给大家推荐的开源工具是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学堂」,分享有用、有趣的编程知识。