mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-11-17 19:24:10 +01:00
fix parsing issue with class diagrams
This commit is contained in:
@@ -361,72 +361,6 @@ export const drawNote = function (elem, note, conf, diagObj) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const parseMember = function (text) {
|
export const parseMember = function (text) {
|
||||||
// Note: these two regular expressions don't parse the official UML syntax for attributes
|
|
||||||
// and methods. They parse a Java-style syntax of the form
|
|
||||||
// "String name" (for attributes) and "String name(int x)" for methods
|
|
||||||
const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/;
|
|
||||||
const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/;
|
|
||||||
|
|
||||||
let fieldMatch = text.match(fieldRegEx);
|
|
||||||
let methodMatch = text.match(methodRegEx);
|
|
||||||
|
|
||||||
if (fieldMatch && !methodMatch) {
|
|
||||||
return buildFieldDisplay(fieldMatch);
|
|
||||||
} else if (methodMatch) {
|
|
||||||
return buildMethodDisplay(methodMatch);
|
|
||||||
} else {
|
|
||||||
return buildLegacyDisplay(text);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildFieldDisplay = function (parsedText) {
|
|
||||||
let cssStyle = '';
|
|
||||||
let displayText = '';
|
|
||||||
|
|
||||||
try {
|
|
||||||
let visibility = parsedText[1] ? parsedText[1].trim() : '';
|
|
||||||
let fieldType = parsedText[2] ? parsedText[2].trim() : '';
|
|
||||||
let genericType = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : '';
|
|
||||||
let fieldName = parsedText[4] ? parsedText[4].trim() : '';
|
|
||||||
let classifier = parsedText[5] ? parsedText[5].trim() : '';
|
|
||||||
|
|
||||||
displayText = visibility + fieldType + genericType + ' ' + fieldName;
|
|
||||||
cssStyle = parseClassifier(classifier);
|
|
||||||
} catch (err) {
|
|
||||||
displayText = parsedText;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
displayText: displayText,
|
|
||||||
cssStyle: cssStyle,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildMethodDisplay = function (parsedText) {
|
|
||||||
let cssStyle = '';
|
|
||||||
let displayText = '';
|
|
||||||
|
|
||||||
try {
|
|
||||||
let visibility = parsedText[1] ? parsedText[1].trim() : '';
|
|
||||||
let methodName = parsedText[2] ? parsedText[2].trim() : '';
|
|
||||||
let parameters = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : '';
|
|
||||||
let classifier = parsedText[4] ? parsedText[4].trim() : '';
|
|
||||||
let returnType = parsedText[5] ? ' : ' + parseGenericTypes(parsedText[5]).trim() : '';
|
|
||||||
|
|
||||||
displayText = visibility + methodName + '(' + parameters + ')' + returnType;
|
|
||||||
cssStyle = parseClassifier(classifier);
|
|
||||||
} catch (err) {
|
|
||||||
displayText = parsedText;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
displayText: displayText,
|
|
||||||
cssStyle: cssStyle,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildLegacyDisplay = function (text) {
|
|
||||||
// if for some reason we don't have any match, use old format to parse text
|
|
||||||
let displayText = '';
|
let displayText = '';
|
||||||
let cssStyle = '';
|
let cssStyle = '';
|
||||||
let returnType = '';
|
let returnType = '';
|
||||||
|
|||||||
Reference in New Issue
Block a user