010editor 模板编写
以linux上的归档文件AR,或者说windows上的静态库LIB为例看看模板是咋写的
总的来说,写010editor模板就是定义结构体.
AR结构
需要结合AR文件的结构,理解AR模板
程序员的自我修养 chapter 9 LIB | Deutschball's blog (dustball.top)
AR文件由一个签名魔数!<arch>\n
还有多个obj模块组成,
每个obj模块之前都会有一个头,作用是描述该obj模块的信息
这个头的定义大概是这样的,字节数是对的,但是变量名叫啥无所谓
1 | typedef struct { |
后面紧跟着就是obj模块正文了
如果obj模块的大小是一个奇数,则后面再填充一个字节
这就是一个obj模块在AR文件中的状态
AR模板
结构定义
AR 模板的主体就是这么一个ar_flie结构体,成员他都有,又附加了一些额外的函数等等
1 | typedef struct { |
读回调函数的返回值是一个string字符串,将会显示在Value栏
控制流
上述typedef struct ar_file
和ReadArFile都只是定义,这一点和C语言相同,并没有实例化ar_file结构体的对象,也没有调用ReadArFile函数,下面才开始控制流
1 | // Read the file signature |
每个obj模块的正文长度都是不一样的,但是读取的时候都是创建ar_file,怎么体现对于不同模块的区别对待呢?
已经包含在ar_file结构体的定义中了
1 | if( size > 0 )//如果size>0说明本头是有对应obj模块的,obj模块的大小已经在filesize中给出了 |
不得不说,优雅,真的太优雅了,010editor将复杂的工作留给自己
模板的组成
变量
只要是在控制流中创建的变量,都分成两种,带local
的和不带local
的
带local
的是临时变量,不会显示在界面上,只用于承载临时变量,比如作为循环变量或者中间结果
在AR模板中local int size
就作为中间结果承载filesize
字符串的转换值
不带local
的就是界面变量,会显示在界面上.比如ar_file file;
比如char signature[8];
属性
尖括号内可以附加属性
比如uchar padding <bgcolor=cLtGray>;
这就把一个字节的填充设置为亮灰色
比如char signature[8] <bgcolor=cLtPurple>;
就把魔数签名设置为亮紫色了
又如ar_file <read=ReadArFile>;
就给每个ar_file
头都设置了读回调函数ReadArFile
该函数的作用是在头的value域上写f.fileName + " size=" + f.fileSize
常用的属性有
1 | <format=hex|decimal|octal|binary>,//设置数字显示格式 |
API
参考010Editor脚本语法入门 - 简书 (jianshu.com)
想用啥功能就去查010editor的啥函数