mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-11-06 13:54:09 +01:00
fix: shifted matchAsActorOrParticipant function to sequenceDB file from sequenceDiagram.jison file
on-behalf-of: @Mermaid-Chart <hello@mermaidchart.com>
This commit is contained in:
@@ -12,24 +12,6 @@
|
|||||||
|
|
||||||
%options case-insensitive
|
%options case-insensitive
|
||||||
|
|
||||||
%{
|
|
||||||
function matchAsActorOrParticipant(tokenName, tokenType) {
|
|
||||||
const ahead = this._input;
|
|
||||||
|
|
||||||
// Detect if an arrow or colon is coming right after the token
|
|
||||||
const arrowLike = /^(?:\s)*(->>|-->>|->|-->|<<->>|<<-->>)/;
|
|
||||||
const colonLike = /^\s*:/;
|
|
||||||
|
|
||||||
// Treat as ACTOR if database appears inline in a message (arrow or colon follows)
|
|
||||||
if (arrowLike.test(ahead) || colonLike.test(ahead)) {
|
|
||||||
yytext = tokenName;
|
|
||||||
return 'ACTOR';
|
|
||||||
}
|
|
||||||
// Otherwise treat as a participant type declaration
|
|
||||||
this.begin('ID');
|
|
||||||
return tokenType;
|
|
||||||
}
|
|
||||||
%}
|
|
||||||
|
|
||||||
// Special states for recognizing aliases
|
// Special states for recognizing aliases
|
||||||
// A special state for grabbing text up to the first comment/newline
|
// A special state for grabbing text up to the first comment/newline
|
||||||
@@ -50,12 +32,12 @@ function matchAsActorOrParticipant(tokenName, tokenType) {
|
|||||||
"box" { this.begin('LINE'); return 'box'; }
|
"box" { this.begin('LINE'); return 'box'; }
|
||||||
"participant" { this.begin('ID'); return 'participant'; }
|
"participant" { this.begin('ID'); return 'participant'; }
|
||||||
"actor" { this.begin('ID'); return 'participant_actor'; }
|
"actor" { this.begin('ID'); return 'participant_actor'; }
|
||||||
"boundary" { return matchAsActorOrParticipant.call(this, 'boundary', 'participant_boundary'); }
|
"boundary" { return yy.matchAsActorOrParticipant('boundary', 'participant_boundary', this._input, this); }
|
||||||
"control" { return matchAsActorOrParticipant.call(this, 'control', 'participant_control'); }
|
"control" { return yy.matchAsActorOrParticipant('control', 'participant_control', this._input, this); }
|
||||||
"entity" { return matchAsActorOrParticipant.call(this, 'entity', 'participant_entity'); }
|
"entity" { return yy.matchAsActorOrParticipant('entity', 'participant_entity', this._input, this); }
|
||||||
"database" { return matchAsActorOrParticipant.call(this, 'database', 'participant_database'); }
|
"database" { return yy.matchAsActorOrParticipant('database', 'participant_database', this._input, this); }
|
||||||
"collections" { return matchAsActorOrParticipant.call(this, 'collections', 'participant_collections'); }
|
"collections" { return yy.matchAsActorOrParticipant('collections', 'participant_collections', this._input, this); }
|
||||||
"queue" { return matchAsActorOrParticipant.call(this, 'queue', 'participant_queue'); }
|
"queue" { return yy.matchAsActorOrParticipant('queue', 'participant_queue', this._input, this); }
|
||||||
"create" return 'create';
|
"create" return 'create';
|
||||||
"destroy" { this.begin('ID'); return 'destroy'; }
|
"destroy" { this.begin('ID'); return 'destroy'; }
|
||||||
<ID>[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; }
|
<ID>[^\<->\->:\n,;]+?([\-]*[^\<->\->:\n,;]+?)*?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; }
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ export class SequenceDB implements DiagramDB {
|
|||||||
this.apply = this.apply.bind(this);
|
this.apply = this.apply.bind(this);
|
||||||
this.parseBoxData = this.parseBoxData.bind(this);
|
this.parseBoxData = this.parseBoxData.bind(this);
|
||||||
this.parseMessage = this.parseMessage.bind(this);
|
this.parseMessage = this.parseMessage.bind(this);
|
||||||
|
this.matchAsActorOrParticipant = this.matchAsActorOrParticipant.bind(this);
|
||||||
|
|
||||||
this.clear();
|
this.clear();
|
||||||
|
|
||||||
@@ -341,6 +342,23 @@ export class SequenceDB implements DiagramDB {
|
|||||||
return message;
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public matchAsActorOrParticipant(
|
||||||
|
tokenName: string,
|
||||||
|
tokenType: string,
|
||||||
|
inputRemainder: string,
|
||||||
|
lexer: any
|
||||||
|
): string {
|
||||||
|
log.info({ tokenName });
|
||||||
|
const arrowLike = /^\s*(->>|-->>|->|-->|<<->>|<<-->>|-x|--x|-\))/;
|
||||||
|
const colonLike = /^\s*:/;
|
||||||
|
|
||||||
|
if (arrowLike.test(inputRemainder) || colonLike.test(inputRemainder)) {
|
||||||
|
return 'ACTOR';
|
||||||
|
}
|
||||||
|
lexer.begin('ID'); // used the passed lexer
|
||||||
|
return tokenType;
|
||||||
|
}
|
||||||
|
|
||||||
// We expect the box statement to be color first then description
|
// We expect the box statement to be color first then description
|
||||||
// The color can be rgb,rgba,hsl,hsla, or css code names #hex codes are not supported for now because of the way the char # is handled
|
// The color can be rgb,rgba,hsl,hsla, or css code names #hex codes are not supported for now because of the way the char # is handled
|
||||||
// We extract first segment as color, the rest of the line is considered as text
|
// We extract first segment as color, the rest of the line is considered as text
|
||||||
|
|||||||
@@ -7,10 +7,16 @@ import { setConfig } from '../../diagram-api/diagramAPI.js';
|
|||||||
import renderer from './sequenceRenderer.js';
|
import renderer from './sequenceRenderer.js';
|
||||||
import type { MermaidConfig } from '../../config.type.js';
|
import type { MermaidConfig } from '../../config.type.js';
|
||||||
|
|
||||||
|
const db = new SequenceDB();
|
||||||
|
parser.yy = {
|
||||||
|
parseMessage: db.parseMessage.bind(db),
|
||||||
|
matchAsActorOrParticipant: db.matchAsActorOrParticipant.bind(db),
|
||||||
|
};
|
||||||
|
|
||||||
export const diagram: DiagramDefinition = {
|
export const diagram: DiagramDefinition = {
|
||||||
parser,
|
parser,
|
||||||
get db() {
|
get db() {
|
||||||
return new SequenceDB();
|
return db;
|
||||||
},
|
},
|
||||||
renderer,
|
renderer,
|
||||||
styles,
|
styles,
|
||||||
|
|||||||
Reference in New Issue
Block a user