diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-10-13 19:32:56 +0200 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-11 18:14:41 +0100 |
| commit | 006b15b467a5cd835a6eab1b49023100bdc8f2e6 (patch) | |
| tree | 949c7295c2e206f42357f135bab4696ddf6576ec /public/prism/prism-plant-uml.js | |
| parent | 00f147a7a687d5772bcc538bc606cfff972178cd (diff) | |
refactor(components): rewrite Code component and usePrism hook
* move Prism styles to Sass placeholders to avoid repeats
* let usePrism consumer define its plugins (remove default ones)
* remove `plugins` prop from Code component
* add new props to Code component to let consumer configure plugins
(and handle plugin list from the given options)
However there are some problems with Prism plugins: line-highlight and
treeview does not seems to be loaded. I don't want to use Babel instead
of SWC so I have no solution for now.
Diffstat (limited to 'public/prism/prism-plant-uml.js')
| -rw-r--r-- | public/prism/prism-plant-uml.js | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/public/prism/prism-plant-uml.js b/public/prism/prism-plant-uml.js new file mode 100644 index 0000000..cec64b3 --- /dev/null +++ b/public/prism/prism-plant-uml.js @@ -0,0 +1,124 @@ +(function (Prism) { + var variable = /\$\w+|%[a-z]+%/; + + var arrowAttr = /\[[^[\]]*\]/.source; + var arrowDirection = /(?:[drlu]|do|down|le|left|ri|right|up)/.source; + var arrowBody = + '(?:-+' + + arrowDirection + + '-+|\\.+' + + arrowDirection + + '\\.+|-+(?:' + + arrowAttr + + '-*)?|' + + arrowAttr + + '-+|\\.+(?:' + + arrowAttr + + '\\.*)?|' + + arrowAttr + + '\\.+)'; + var arrowLeft = /(?:<{1,2}|\/{1,2}|\\{1,2}|<\||[#*^+}xo])/.source; + var arrowRight = /(?:>{1,2}|\/{1,2}|\\{1,2}|\|>|[#*^+{xo])/.source; + var arrowPrefix = /[[?]?[ox]?/.source; + var arrowSuffix = /[ox]?[\]?]?/.source; + var arrow = + arrowPrefix + + '(?:' + + arrowBody + + arrowRight + + '|' + + arrowLeft + + arrowBody + + '(?:' + + arrowRight + + ')?' + + ')' + + arrowSuffix; + + Prism.languages['plant-uml'] = { + comment: { + pattern: /(^[ \t]*)(?:'.*|\/'[\s\S]*?'\/)/m, + lookbehind: true, + greedy: true, + }, + preprocessor: { + pattern: /(^[ \t]*)!.*/m, + lookbehind: true, + greedy: true, + alias: 'property', + inside: { + variable: variable, + }, + }, + delimiter: { + pattern: /(^[ \t]*)@(?:end|start)uml\b/m, + lookbehind: true, + greedy: true, + alias: 'punctuation', + }, + + arrow: { + pattern: RegExp( + /(^|[^-.<>?|\\[\]ox])/.source + arrow + /(?![-.<>?|\\\]ox])/.source + ), + lookbehind: true, + greedy: true, + alias: 'operator', + inside: { + expression: { + pattern: /(\[)[^[\]]+(?=\])/, + lookbehind: true, + inside: null, // see below + }, + punctuation: /\[(?=$|\])|^\]/, + }, + }, + + string: { + pattern: /"[^"]*"/, + greedy: true, + }, + text: { + pattern: /(\[[ \t]*[\r\n]+(?![\r\n]))[^\]]*(?=\])/, + lookbehind: true, + greedy: true, + alias: 'string', + }, + + keyword: [ + { + pattern: + /^([ \t]*)(?:abstract\s+class|end\s+(?:box|fork|group|merge|note|ref|split|title)|(?:fork|split)(?:\s+again)?|activate|actor|agent|alt|annotation|artifact|autoactivate|autonumber|backward|binary|boundary|box|break|caption|card|case|circle|class|clock|cloud|collections|component|concise|control|create|critical|database|deactivate|destroy|detach|diamond|else|elseif|end|end[hr]note|endif|endswitch|endwhile|entity|enum|file|folder|footer|frame|group|[hr]?note|header|hexagon|hide|if|interface|label|legend|loop|map|namespace|network|newpage|node|nwdiag|object|opt|package|page|par|participant|person|queue|rectangle|ref|remove|repeat|restore|return|robust|scale|set|show|skinparam|stack|start|state|stop|storage|switch|title|together|usecase|usecase\/|while)(?=\s|$)/m, + lookbehind: true, + greedy: true, + }, + /\b(?:elseif|equals|not|while)(?=\s*\()/, + /\b(?:as|is|then)\b/, + ], + + divider: { + pattern: /^==.+==$/m, + greedy: true, + alias: 'important', + }, + + time: { + pattern: /@(?:\d+(?:[:/]\d+){2}|[+-]?\d+|:[a-z]\w*(?:[+-]\d+)?)\b/i, + greedy: true, + alias: 'number', + }, + + color: { + pattern: /#(?:[a-z_]+|[a-fA-F0-9]+)\b/, + alias: 'symbol', + }, + variable: variable, + + punctuation: /[:,;()[\]{}]|\.{3}/, + }; + + Prism.languages['plant-uml'].arrow.inside.expression.inside = + Prism.languages['plant-uml']; + + Prism.languages['plantuml'] = Prism.languages['plant-uml']; +})(Prism); |
