langium-railroad
Version:
Use Langium as source for railroad syntax diagrams
204 lines (172 loc) • 5.74 kB
TypeScript
/******************************************************************************
* Copyright 2023 TypeFox GmbH
* This program and the accompanying materials are made available under the
* terms of the MIT License, which is available in the project root.
******************************************************************************/
declare module 'railroad-diagrams' {
export type Direction = 'cw' | 'ccw';
export type CardinalDirection = 'n' | 'ne' | 'e' | 'se' | 's' | 'sw' | 'w' | 'nw';
export type DiagramItem = FakeSVG | string;
export class FakeSVG {
needsSpace: boolean;
up: number;
down: number;
height: number;
width: number;
tagName: string;
attrs: Record<string, string>;
children: DiagramItem[] | string;
constructor(tagName: string, attrs?: Record<string, string>, text?: DiagramItem[]);
format(x: number, y: number, width: number): this;
addTo(parent: unknown): this;
toString(): string;
walk(cb: (item: this) => void): void;
}
export class Path extends FakeSVG {
constructor(x: number, y: number);
m(x: number, y: number): this;
h(val: number): this;
right(val: number): this;
left(val: number): this;
v(val: number): this;
down(val: number): this;
up(val: number): this;
arc(sweep: number): this;
arc_8(start: CardinalDirection, dir: Direction): this;
l(x: number, y: number): this;
format(): this;
}
export class DiagramMultiContainer extends FakeSVG {
items: DiagramItem[];
constructor(tagName: string, items: DiagramItem[], attrs?: Record<string, string>, text?: string);
}
export class Diagram extends DiagramMultiContainer {
formatted: boolean;
constructor(items: DiagramItem[]);
format(paddingt?: number, paddingr?: number, paddingb?: number, paddingl?: number): this;
toStandalone(style?: string): string;
}
export class ComplexDiagram extends FakeSVG {
constructor(items: DiagramItem[]): Diagram;
}
export class Sequence extends DiagramMultiContainer {
constructor(items: DiagramItem[]);
}
export class Stack extends DiagramMultiContainer {
constructor(items: DiagramItem[]);
}
export class OptionalSequence extends DiagramMultiContainer {
constructor(items: DiagramItem[]);
}
export class AlternatingSequence extends DiagramMultiContainer {
constructor(items: DiagramItem[]);
}
export class Choice extends DiagramMultiContainer {
constructor(normal: number, items: DiagramItem[]);
}
export class HorizontalChoice extends DiagramMultiContainer {
constructor(items: DiagramItem[]);
}
export class MultipleChoice extends DiagramMultiContainer {
constructor(items: DiagramItem[]);
}
export class Optional extends FakeSVG {
constructor(item: DiagramItem, skip?: 'skip'): Choice;
}
export class OneOrMore extends FakeSVG {
constructor(item: DiagramItem, rep?: DiagramItem);
}
export class ZeroOrMore extends FakeSVG {
constructor(item: DiagramItem, rep?: DiagramItem, skip?: 'skip'): Choice;
}
export class Group extends FakeSVG {
item: FakeSVG;
label?: FakeSVG;
constructor(item: DiagramItem, label?: DiagramItem): Choice;
}
type StartOptions = {
type?: string;
label?: string;
}
export class Start extends FakeSVG {
type: string;
label?: string;
constructor(options?: StartOptions)
}
type EndOptions = {
type?: string;
}
export class End extends FakeSVG {
type: string;
constructor(options?: EndOptions);
}
type TerminalOptions = {
href?: string;
title?: DiagramItem;
cls?: string;
}
export class Terminal extends FakeSVG {
text: string;
href?: string;
title?: DiagramItem;
cls?: string;
constructor(text: string, options?: TerminalOptions);
}
type NonTerminalOptions = TerminalOptions;
export class NonTerminal extends FakeSVG {
text: string;
href?: string;
title?: DiagramItem;
cls?: string;
constructor(text: string, options?: NonTerminalOptions);
}
type CommentOptions = TerminalOptions;
export class Comment extends FakeSVG {
text: string;
href?: string;
title?: DiagramItem;
cls?: string;
constructor(text: string, options?: CommentOptions);
}
export class Skip extends FakeSVG {
constructor();
}
type BlockOptions = {
width?: number;
up?: number;
height?: number;
down?: number;
needsSpace?: boolean;
}
export class Block extends FakeSVG {
constructor(options?: BlockOptions);
}
export default {
FakeSVG,
Path,
DiagramMultiContainer,
Diagram,
ComplexDiagram,
Sequence,
Stack,
OptionalSequence,
AlternatingSequence,
Choice,
MultipleChoice,
HorizontalChoice,
Optional,
OneOrMore,
ZeroOrMore,
Group,
Start,
End,
Terminal,
NonTerminal,
Comment,
Block,
Skip,
Direction,
CardinalDirection,
DiagramItem
};
}