Skip to content
JuanZoran edited this page May 14, 2023 · 3 revisions

目录结构

├── demo.mp4
├── doc
│   └── Trans.txt               自动生成的文档
├── lua
│   └── Trans                   插件代码
│       ├── backend             翻译后端
│       │   ├── baidu.lua
│       │   ├── iciba.lua
│       │   ├── offline.lua
│       │   └── youdao.lua
│       ├── core                核心代码
│       │   ├── backend.lua     翻译后端的管理(主要为元表和配置的加载)
│       │   ├── buffer.lua      封装neovim的buffer代码, 旨在面向对象
│       │   ├── conf.lua        插件的默认配置
│       │   ├── curl.lua        简易封装的curl请求, 兼容plenary.curl的api
│       │   ├── data.lua
│       │   ├── frontend.lua    和core/backend.lua类似, 为前端的管理
│       │   ├── install.lua     安装插件依赖的函数
│       │   ├── setup.lua       加载用户配置和初始化
│       │   ├── translate.lua   主要逻辑
│       │   ├── util.lua        一些工具函数
│       │   └── window.lua      和core/buffer.lua类似, 为窗口的管理
│       ├── frontend
│       │   ├── float.lua       有想法但是没实现的浮动窗口
│       │   └── hover           光标悬停窗口
│       │       ├── execute.lua 配置的keymap执行逻辑
│       │       ├── init.lua    初始化hover对象
│       │       ├── load.lua    将backend的翻译结果渲染到hover对象
│       │       ├── offline.lua offline的渲染逻辑
│       │       └── youdao.lua  youdao的渲染逻辑
│       ├── health.lua          checkhealth Trans
│       ├── init.lua            插件入口, 设置元表
│       ├── README.md
│       ├── style               内置的一些ui样式
│       │   ├── spinner.lua     等待动画的样式
│       │   └── theme.lua       全局主题配色
│       └── util
│           ├── base64.lua      一些工具函数, 用于后端encode
│           ├── bing_node.lua
│           ├── init.lua
│           ├── md5.lua
│           └── node.lua        buffer缓冲区文本的设置
├── plugin
│   └── Trans.lua               定义插件的命令
├── README.md
├── theme                       主题配色展示图片
│   ├── default.png
│   ├── dracula.png
│   └── tokyonight.png
└── tts                         tts 用的node依赖,(现已移出
    ├── node_modules
    │   ├── one-time
    │   │   ├── index.js
    │   │   ├── LICENSE
    │   │   ├── package.json
    │   │   ├── README.md
    │   │   └── test.js
    │   └── say
    │       ├── index.d.ts
    │       ├── index.js
    │       ├── LICENSE.txt
    │       ├── package.json
    │       ├── platform
    │       │   ├── base.js
    │       │   ├── darwin.js
    │       │   ├── linux.js
    │       │   └── win32.js
    │       ├── README.md
    │       └── typings.json
    ├── package.json
    ├── package-lock.json
    └── say.js

目录说明

为了避免代码里出现大量的 require, 同时为了方便扩展, 所以插件的类扩展方法, 一般都设置为元表, 自动 require

  • Trans.xxx -> core/xxx.lua

    比如:

      `Trans.curl`在`init.lua`里没有找到curl的定义, 会**自动在require'Trans.core.curl', 返回的数据会作为Trans.curl返回, 同时更新Trans.curl的值**
      下一次在请求就不需要require了
    

    所以, 可以将 core 目录视为 Trans 表的扩展

  • Trans.backend.xxx -> backend/xxx.lua

    同 core 目录一样, 该目录作为 Trans.backend 的扩展

  • Trans.frontend.xxx -> frontend/xxx.lua

  • Trans.theme.xxx -> theme/xxx.lua

  • Trans.util.xxx -> util/xxx.lua

核心逻辑

获取字符串(Trans.util.get_str) -> 创建TransData对象 -> 交给配置的对应的后端处理 -> 返回处理后的数据 -> 交给前端渲染

Clone this wiki locally