node shape
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Timo Hocker 2023-03-25 14:12:10 +01:00
parent 019647b04a
commit 78556c6c98
Signed by: Timo
GPG Key ID: DFAC2CF4E1D1BEC9
7 changed files with 78 additions and 26 deletions

View File

@ -1,5 +1,9 @@
# Changelog # Changelog
## 1.4.0
Allow specifying shapes for nodes
## 1.3.0 ## 1.3.0
Stream: Stream:

View File

@ -1,6 +1,6 @@
# @sapphirecode/graphviz-builder # @sapphirecode/graphviz-builder
version: 1.3.x version: 1.4.x
constructing graphviz files using an easy typescript interface constructing graphviz files using an easy typescript interface

View File

@ -6,6 +6,7 @@
*/ */
import { NodeStyles } from '../enums/Styles'; import { NodeStyles } from '../enums/Styles';
import { NodeShapes } from '../enums/Shapes';
import { Element } from './Element'; import { Element } from './Element';
import { Color } from './Color'; import { Color } from './Color';
@ -15,6 +16,7 @@ export class Node extends Element {
public table_contents?: Array<Array<string>>; public table_contents?: Array<Array<string>>;
public style?: NodeStyles; public style?: NodeStyles;
public color?: Color; public color?: Color;
public shape?: NodeShapes;
public constructor (name: string, parent: string, label?: string) { public constructor (name: string, parent: string, label?: string) {
super (name, parent); super (name, parent);
@ -47,6 +49,8 @@ export class Node extends Element {
} }
if (this.style) if (this.style)
attributes.push ({ name: 'style', value: this.style.toString () }); attributes.push ({ name: 'style', value: this.style.toString () });
if (this.shape)
attributes.push ({ name: 'shape', value: this.shape.toString () });
if (this.color) if (this.color)
attributes.push ({ name: 'color', value: this.color.toString () }); attributes.push ({ name: 'color', value: this.color.toString () });

63
lib/enums/Shapes.ts Normal file
View File

@ -0,0 +1,63 @@
type NodeShapes =
''
|'box'
|'polygon'
|'ellipse'
|'oval'
|'circle'
|'point'
|'egg'
|'triangle'
|'plaintext'
|'plain'
|'diamond'
|'trapezium'
|'parallelogram'
|'house'
|'pentagon'
|'hexagon'
|'septagon'
|'octagon'
|'doublecircle'
|'doubleoctagon'
|'tripleoctagon'
|'invtriangle'
|'invtrapezium'
|'invhouse'
|'Mdiamond'
|'Msquare'
|'Mcircle'
|'rect'
|'rectangle'
|'square'
|'star'
|'none'
|'underline'
|'cylinder'
|'note'
|'tab'
|'folder'
|'box3d'
|'component'
|'promoter'
|'cds'
|'terminator'
|'utr'
|'primersite'
|'restrictionsite'
|'fivepoverhang'
|'threepoverhang'
|'noverhang'
|'assembly'
|'signature'
|'insulator'
|'ribosite'
|'rnastab'
|'proteasesite'
|'proteinstab'
|'rpromoter'
|'rarrow'
|'larrow'
|'lpromoter'
export {NodeShapes}

View File

@ -6,34 +6,14 @@
*/ */
type EdgeStyles = type EdgeStyles =
'' '' | 'bold' | 'dashed' | 'dotted' | 'solid'
|'solid'
|'dashed'
|'dotted'
|'bold'
type NodeStyles = type NodeStyles =
'' '' | 'bold' | 'dashed' | 'diagonals' | 'dotted' | 'filled' | 'invis' | 'rounded' | 'solid' | 'striped' | 'wedged'
|'solid'
|'dashed'
|'dotted'
|'bold'
|'rounded'
|'diagonals'
|'filled'
|'striped'
|'wedged'
|'invis'
type GraphStyles = type GraphStyles =
'solid' 'bold' | 'dashed' | 'dotted' | 'filled' | 'rounded' | 'solid' | 'striped'
| 'dashed'
| 'dotted'
| 'bold'
| 'rounded'
| 'filled'
| 'striped'
export { EdgeStyles, NodeStyles, GraphStyles }; export { EdgeStyles, NodeStyles, GraphStyles };

View File

@ -1,7 +1,7 @@
{ {
"name": "@sapphirecode/graphviz-builder", "name": "@sapphirecode/graphviz-builder",
"main": "dist/lib/index.js", "main": "dist/lib/index.js",
"version": "1.3.4", "version": "1.4.0",
"author": { "author": {
"name": "Timo Hocker", "name": "Timo Hocker",
"email": "timo@scode.ovh" "email": "timo@scode.ovh"

View File

@ -8,7 +8,7 @@
import { Node, Color } from '../../lib'; import { Node, Color } from '../../lib';
const serialized_simple const serialized_simple
= 'bar_foo [label="baz", style="dashed", color="#00ff00"]'; = 'bar_foo [label="baz", style="dashed", shape="tripleoctagon", color="#00ff00"]';
const serialized_table = `bar_foo [label=<<table> const serialized_table = `bar_foo [label=<<table>
<tr><td>foo</td><td>bar</td><td>baz</td></tr> <tr><td>foo</td><td>bar</td><td>baz</td></tr>
<tr><td>bar</td><td>baz</td><td>foo</td></tr> <tr><td>bar</td><td>baz</td><td>foo</td></tr>
@ -21,6 +21,7 @@ describe ('node', () => {
g.color = Color.green; g.color = Color.green;
g.style = 'dashed'; g.style = 'dashed';
g.shape = 'tripleoctagon';
const serialized = g.toString (); const serialized = g.toString ();