# beefirm
**Repository Path**: lafeier/beefirm
## Basic Information
- **Project Name**: beefirm
- **Description**: beefirm定义了一份简单的java语法文件,将普通的java类定义转为plantuml类图定义, 目的是从plantuml的晦涩语法种摆脱出来,让你高效阅读代码!
- **Primary Language**: Java
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 0
- **Created**: 2021-12-03
- **Last Updated**: 2022-08-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Java, plantuml, Antlr
## README
# Beefirm

beefirm,毕方,源自山海经异兽中的一种神鸟。
beefirm定义了一份简单的类似java的语法,直接生成类图,相比传统的拖拽的画图工具提供了更高的灵活性,并且支持字段标注,方法标注,字段/参数和类之间的关联,让你更高效阅读源码,理解源码!
# 效果图

beefirm定义一份类图,几乎和java语法没有任何区别,而且还简化了一些(类型,可见性等可省略不写):
```beefirm
interface Interface01
interface Interface02
class Class01
class Class03
class Class04
class Class02 extends Class01 implements Interface01,Interface02{
//字段f1
public override void f1;
//+right 字段f2
public override void f2;
public override Class03 f3;
/*
方法m1
*/
public override void m1(
/*参数p1*/
int p1,
/*参数p2*/
string p2
);
public void m2(Class04 p1);
}
```
# 已实现功能
## 类定义
```beefirm
class Class01
class Class01{}
```
## 抽象类定义
```beefirm
abstract class Class01
abstract class Class01{}
```
## 接口定义
```beefirm
interface Interface01
interface Interface01{}
```
## 继承
```beefirm
class Class02 extends Class01
```
## 实现
```beefirm
class Class02 implements Interface01,Interface02
```
## 聚合
表示做为类**成员字段**,显示为**实心虚线菱形**
```
class Class02{
Class03 f2;
}
class Class03
```

***note:成员字段的类型需要定义才会绘图***
## 关联
作为**方法参数**or**返回值**,显示为**空心虚线菱形**的
```
//参数
class Class02 {
public void m1(Class03 p1);
}
class Class03
//返回值
class Class02 {
public Class03 m1();
}
class Class03
```

## 范型
支持`字段类型`,`返回值类型`,`参数类型`的范型定义
支持`List` `List[String]`两种方式定义范型
支持范型的聚合/关联关系,如`List `会和Person产生关系,而不是List
## 注释
- 单行注释
`//注释`
- 多行注释
`/*注释*/`
- 注释方向
默认:`//+left` or `/*+left 注释*/`
支持:`left`,`right`,`top`(方法除外),`bottom`(方法除外)
e g .
`//+right 注释`
`/*+right 注释*/`

## 字段定义
- 可见性(可选)
- 类型 (可选)
- 字段名
- 注释 (可选)
- 重载
```java
//+right 字段age
public override void age;
```

## 方法定义
- 可见性(可选)
- 类型(可选)
- 方法名
- 方法注释 (可选)
- 参数列表(可选)
- 参数注释,**只能用多行注释(**可选)
```beefirm
/*
方法m1
*/
public override void m1(
/*参数p1*/
int p1,
/*参数p2*/
string p2
);
```

# 使用指南
## 编译安装
下载二进制包beefirm-${version}.tar.gz,解压
运行`./bin/beefirm xxx.beefirm`
:smile: : 输出内容可使用plantuml官方的online server渲染,也可以自行下载安装plantuml
参考:https://plantuml.com/zh/
运行`./bin/beefirm xxx.beefirm -url` ,会生成一个预览连接,点击查看
### 全局可用配置
配置环境变量
```angular2html
export BEEFIRM_HOME=~/dev/env/beefirm
export PATH=$BEEFIRM_HOME/bin:$PATH
```
然后就可以使用了,直接: `beefirm xxx.beefirm`
## 开发构建(针对开发者)
在源码目录下./dev-build,就会将新构建的jar包放到BEEFIRM_HOME/lib下
然后就可以使用命令:beefirm xxx.beefirm 测试了
beefirm xxx.beefirm -url 可以生成一个在线预览的链接
# VSCode插件支持
项目地址:https://gitee.com/lafeier/beefirm-vscode
支持vscode直接编写预览,目前已经支持语法高亮,使用步骤:
1.安装插件,插件在:plugins/beefirm-0.0.1.vsix
2.编辑代码
3.右键,beefirm


# todo
- [x] 聚合/关联关系中对范化类型的支持,如 `List`
- [ ] 集成plantuml api,提供通用api,生产图片,svg,文件流用于与其他系统集成
- [ ] 排版支持(继承/实现/聚合/组合),线框的位置
- [ ] 语法高亮(可借用java的)
- [ ] web服务开发(前台+后台),实现在线编辑,预览
- [ ] 支持更多图,比如流程图
- [ ] 枚举