跳至主要內容

NodeFlow 列表语法

LincZero大约 4 分钟

NodeFlow 列表语法

介绍,一种基于Markdown列表的便于输入的节点描述语法

新增一种能手写的格式,说真的有时设计语法比开发成就感还强……大家讨论讨论语法,看有没有什么可以优化的地方

  1. 该语法可以和AnyBlock插件配合,从列表进行声明
  2. 参考了:JSON、JSONL、YAML、Mermaid/Mehrmaid 流程图语法

示例

语法示例

Plugin effect (插件效果)

实际用例

Plugin effect (插件效果)

超简化

语法规则

通用规则

  1. 一行一个项,“项” 有四种:节点、节点上I/O Socket或属性项、线、节点组,他们的声明方式:
    • 节点/组 id(:name)?, ()="node" 不写冒号表示id和节点名是一样的,type可以不写,默认为 "node"
    • 接口 id(:name), (i|o|v|""), (value)="" type为 input/output 表述输入或输出接口,value 表示并非这两种之一属性
    • 线条 from, from socket, to, to socket, (name)? 从哪个节点id,的哪个socket id,到哪个节点id,的哪个socket id
  2. 缩进关系表示包含关系。例如节点组可以包含节点,节点可以包含节点组

特殊规则 (进阶)

  1. 最外层是两个特殊组,nodes和edges,固定的。
    • 当然,有一个写法变形可以去掉最外层,用如果该项有四个参数就是edges组,否则则为nodes组,但我觉得虽然能写少了,但可能更容易造成混乱?待定
  2. 当不声明节点socket时,会默认声明四个隐藏节点:left、right、top、bottom

语法设计亮点

  • 隐藏key值设计
    • 传统k-v语法,必须声明key-value对,而省略key可以大幅简化语法。例如nodeflow listGrammer的key、name、type、value键都是隐藏的。 这一设计参考了:变量命名中的可选变量、for语句中的三个位置、函数的形参设计
  • 缩进表示包含关系
    • 这一设计参考了:python流程控制语句、yaml语法
  • 一项一行
    • 这一设计参考了:JSONL
  • 列表式声明
    • 对一项一行设计的补充,允许了一项包含多行文本的情况 这一设计参考了:Markdown语法、Obsidian AnyBlock的list选择器用法

命名规则

  • value可以是任意内容
  • id、name、socket传参类型、socket参值类型:不可以包含逗号

类型表

  • item类型
    • 主动声明:node、socket、edge
    • 自动声明:node可以有group类型
  • socket类型
    • 传参类型 (TransType):i、o、fi、fo、v(默认为v,通过什么方式获取参数,获取参数的时机是什么,引用还是拷贝)
    • 参值类型 (ValueType):int、float、boolean、color、enum等(任意声明,默认使用id/name作为类型)
  • node类型

运行socket