Documentation
¶
Index ¶
- Constants
- Variables
- func DeserializeGraph(bytes []byte, g *Graph) error
- func Key(k *d2ast.KeyPath) []string
- func SerializeGraph(g *Graph) ([]byte, error)
- type Attributes
- type ContainerLevel
- type Edge
- type EdgeReference
- type Graph
- type Object
- func (obj *Object) AbsID() string
- func (obj *Object) AbsIDArray() []string
- func (obj *Object) AppendReferences(ida []string, ref Reference, unresolvedObj *Object)
- func (obj *Object) Connect(srcID, dstID []string, srcArrow, dstArrow bool, label string) (*Edge, error)
- func (o *Object) ContainedBy(obj *Object) bool
- func (obj *Object) ContainsAnyEdge(edges []*Edge) bool
- func (obj *Object) ContainsAnyObject(objects []*Object) bool
- func (obj *Object) EnsureChild(ids []string) *Object
- func (obj *Object) FindEdges(mk *d2ast.Key) ([]*Edge, bool)
- func (obj *Object) GetFill(theme *d2themes.Theme) string
- func (obj *Object) GetStroke(theme *d2themes.Theme, dashGapSize interface{}) string
- func (obj *Object) HasChild(ids []string) (*Object, bool)
- func (obj *Object) HasEdge(mk *d2ast.Key) (*Edge, bool)
- func (obj *Object) IsContainer() bool
- func (obj *Object) IsSequenceDiagram() bool
- func (obj *Object) IsSequenceDiagramGroup() bool
- func (obj *Object) IsSequenceDiagramNote() bool
- func (obj *Object) Level() ContainerLevel
- func (obj *Object) OuterSequenceDiagram() *Object
- func (obj *Object) Text() *d2target.MText
- type Reference
- type Scalar
- type SerializedEdge
- type SerializedGraph
- type SerializedObject
- type Style
Constants ¶
const INNER_LABEL_PADDING int = 5
Variables ¶
var ReservedKeywordHolders = map[string]struct{}{
"style": {},
"source-arrowhead": {},
"target-arrowhead": {},
}
ReservedKeywordHolders are reserved keywords that are meaningless on its own and exist solely to hold a set of reserved keywords
var ReservedKeywords = map[string]struct{}{
"label": {},
"desc": {},
"shape": {},
"icon": {},
"constraint": {},
"tooltip": {},
"link": {},
"near": {},
"width": {},
"height": {},
"direction": {},
}
var StyleKeywords = map[string]struct{}{
"opacity": {},
"stroke": {},
"fill": {},
"stroke-width": {},
"stroke-dash": {},
"border-radius": {},
"font": {},
"font-size": {},
"font-color": {},
"bold": {},
"italic": {},
"underline": {},
"shadow": {},
"multiple": {},
"3d": {},
"animated": {},
"filled": {},
}
StyleKeywords are reserved keywords which cannot exist outside of the "style" keyword
Functions ¶
func DeserializeGraph ¶
func SerializeGraph ¶
Types ¶
type Attributes ¶
type Attributes struct {
Label Scalar `json:"label"`
Style Style `json:"style"`
Icon *url.URL `json:"icon,omitempty"`
Tooltip string `json:"tooltip,omitempty"`
Link string `json:"link,omitempty"`
// Only applicable for images right now
Width *Scalar `json:"width,omitempty"`
Height *Scalar `json:"height,omitempty"`
// TODO consider separate Attributes struct for shape-specific and edge-specific
// Shapes only
NearKey *d2ast.KeyPath `json:"near_key"`
Language string `json:"language,omitempty"`
// TODO: default to ShapeRectangle instead of empty string
Shape Scalar `json:"shape"`
Direction Scalar `json:"direction"`
}
type ContainerLevel ¶
type ContainerLevel int
func (ContainerLevel) LabelSize ¶
func (l ContainerLevel) LabelSize() int
type Edge ¶
type Edge struct {
Index int `json:"index"`
MinWidth int `json:"minWidth"`
MinHeight int `json:"minHeight"`
SrcTableColumnIndex *int `json:"srcTableColumnIndex,omitempty"`
DstTableColumnIndex *int `json:"dstTableColumnIndex,omitempty"`
LabelDimensions d2target.TextDimensions `json:"label_dimensions"`
LabelPosition *string `json:"labelPosition,omitempty"`
LabelPercentage *float64 `json:"labelPercentage,omitempty"`
IsCurve bool `json:"isCurve"`
Route []*geo.Point `json:"route,omitempty"`
Src *Object `json:"-"`
SrcArrow bool `json:"src_arrow"`
SrcArrowhead *Attributes `json:"srcArrowhead,omitempty"`
Dst *Object `json:"-"`
// TODO alixander (Mon Sep 12 2022): deprecate SrcArrow and DstArrow and just use SrcArrowhead and DstArrowhead
DstArrow bool `json:"dst_arrow"`
DstArrowhead *Attributes `json:"dstArrowhead,omitempty"`
References []EdgeReference `json:"references,omitempty"`
Attributes Attributes `json:"attributes"`
ZIndex int `json:"zIndex"`
}
func (*Edge) ArrowString ¶
func (*Edge) ContainedBy ¶ added in v0.1.0
type EdgeReference ¶
type Graph ¶
type Graph struct {
AST *d2ast.Map `json:"ast"`
Root *Object `json:"root"`
Edges []*Edge `json:"edges"`
Objects []*Object `json:"objects"`
}
TODO: Refactor with a light abstract layer on top of AST implementing scenarios, variables, imports, substitutions and then a final set of structures representing a final graph.
func (*Graph) SetDimensions ¶
type Object ¶
type Object struct {
Graph *Graph `json:"-"`
Parent *Object `json:"-"`
// IDVal is the actual value of the ID whereas ID is the value in d2 syntax.
// e.g. ID: "yes'\""
// IDVal: yes'"
//
// ID allows joining on . naively and construct a valid D2 key path
ID string `json:"id"`
IDVal string `json:"id_val"`
Map *d2ast.Map `json:"-"`
LabelDimensions d2target.TextDimensions `json:"label_dimensions"`
References []Reference `json:"references,omitempty"`
*geo.Box `json:"box,omitempty"`
LabelPosition *string `json:"labelPosition,omitempty"`
LabelWidth *int `json:"labelWidth,omitempty"`
LabelHeight *int `json:"labelHeight,omitempty"`
IconPosition *string `json:"iconPosition,omitempty"`
Class *d2target.Class `json:"class,omitempty"`
SQLTable *d2target.SQLTable `json:"sql_table,omitempty"`
Children map[string]*Object `json:"-"`
ChildrenArray []*Object `json:"-"`
Attributes Attributes `json:"attributes"`
ZIndex int `json:"zIndex"`
}
TODO maybe rename to Shape
func ResolveUnderscoreKey ¶
func (*Object) AbsIDArray ¶
func (*Object) AppendReferences ¶
func (*Object) ContainedBy ¶ added in v0.1.0
func (*Object) ContainsAnyEdge ¶ added in v0.1.0
func (*Object) ContainsAnyObject ¶ added in v0.1.0
func (*Object) EnsureChild ¶
EnsureChild grabs the child by ids or creates it if it does not exist including all intermediate nodes.
func (*Object) IsContainer ¶
func (*Object) IsSequenceDiagram ¶ added in v0.1.0
func (*Object) IsSequenceDiagramGroup ¶ added in v0.1.0
groups are objects in sequence diagrams that have no messages connected and does not have a note as a child (a note can appear within a group, but it's a child of an actor)
func (*Object) IsSequenceDiagramNote ¶ added in v0.1.0
notes are descendant of actors with no edges and no children
func (*Object) Level ¶
func (obj *Object) Level() ContainerLevel
func (*Object) OuterSequenceDiagram ¶ added in v0.1.0
type Reference ¶
type Reference struct {
Key *d2ast.KeyPath `json:"key"`
KeyPathIndex int `json:"key_path_index"`
MapKey *d2ast.Key `json:"-"`
MapKeyEdgeIndex int `json:"map_key_edge_index"`
Scope *d2ast.Map `json:"-"`
// The ScopeObj and UnresolvedScopeObj are the same except when the key contains underscores
ScopeObj *Object `json:"-"`
UnresolvedScopeObj *Object `json:"-"`
}
TODO references at the root scope should have their Scope set to root graph AST
func (Reference) MapKeyEdgeDest ¶
type Scalar ¶
TODO consider having different Scalar types Right now we'll hold any types in Value and just convert, e.g. floats
type SerializedEdge ¶
type SerializedEdge map[string]interface{}
type SerializedGraph ¶
type SerializedGraph struct {
Root SerializedObject `json:"root"`
Edges []SerializedEdge `json:"edges"`
Objects []SerializedObject `json:"objects"`
}
type SerializedObject ¶
type SerializedObject map[string]interface{}
type Style ¶
type Style struct {
Opacity *Scalar `json:"opacity,omitempty"`
Stroke *Scalar `json:"stroke,omitempty"`
Fill *Scalar `json:"fill,omitempty"`
StrokeWidth *Scalar `json:"strokeWidth,omitempty"`
StrokeDash *Scalar `json:"strokeDash,omitempty"`
BorderRadius *Scalar `json:"borderRadius,omitempty"`
Shadow *Scalar `json:"shadow,omitempty"`
ThreeDee *Scalar `json:"3d,omitempty"`
Multiple *Scalar `json:"multiple,omitempty"`
Font *Scalar `json:"font,omitempty"`
FontSize *Scalar `json:"fontSize,omitempty"`
FontColor *Scalar `json:"fontColor,omitempty"`
Animated *Scalar `json:"animated,omitempty"`
Bold *Scalar `json:"bold,omitempty"`
Italic *Scalar `json:"italic,omitempty"`
Underline *Scalar `json:"underline,omitempty"`
Filled *Scalar `json:"filled,omitempty"`
}