regex corrections and added indentation tests for class diagrams
correct indentation regexs found by tests for class diagrams
This commit is contained in:
parent
c31480fcd1
commit
96ec931f64
|
@ -346,9 +346,9 @@ Uses prefix (as PREFIX) to choose where to display it:
|
|||
(defvar plantuml-preprocessors-regexp (concat "^\\s *" (regexp-opt plantuml-preprocessors 'words)))
|
||||
|
||||
(defvar plantuml-indent-regexp-block-start "^.*{\s*$"
|
||||
"Indentation regex for all plantuml elements that might define a {} or [] block.
|
||||
"Indentation regex for all plantuml elements that might define a {} block.
|
||||
Plantuml elements like skinparam, rectangle, sprite, package, ….
|
||||
The opening { or [ has to be the last visible character in the line (whitespace
|
||||
The opening { has to be the last visible character in the line (whitespace
|
||||
might follow).")
|
||||
(defvar plantuml-indent-regexp-note-start "^\s*\\(note\s+over\\|note\sas\s.*\\|note\s+\\(\\(?:\\(?:button\\|left\\|right\\|top\\)\\)\\)\\(?:\s+of\\)?\\)"
|
||||
"Indentation regex for all plantuml note elements")
|
||||
|
@ -373,7 +373,7 @@ or it is followed by line end.")
|
|||
plantuml-indent-regexp-footer-start
|
||||
plantuml-indent-regexp-legend-start
|
||||
plantuml-indent-regexp-if-start))
|
||||
(defvar plantuml-indent-regexp-end "^\s*\\(?:endif\\|else\s*.*\\|end\\|end\s+note\\|end\s+box\\|.*}\\|deactivate\s+.+\\|end\s+title\\|endheader\\|endfooter\\|endlegend\\)")
|
||||
(defvar plantuml-indent-regexp-end "^\s*\\(?:endif\\|else\s*.*\\|end\\|end\s+note\\|end\s+box\\|}\\|deactivate\s+.+\\|end\s+title\\|endheader\\|endfooter\\|endlegend\\)$")
|
||||
(setq plantuml-font-lock-keywords
|
||||
`(
|
||||
(,plantuml-types-regexp . font-lock-type-face)
|
||||
|
|
|
@ -0,0 +1,301 @@
|
|||
;;; plantuml-indentation-class-test.el --- PlantUML Mode indentation tests -*- lexical-binding: t; -*-
|
||||
|
||||
;; Author: René Schmelzer
|
||||
;; Maintainer: Carlo Sciolla (skuro)
|
||||
;; URL: https://github.com/skuro/plantuml-mode
|
||||
|
||||
;;; Commentary:
|
||||
|
||||
;; Test indentation for class diagrams.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(ert-deftest plantuml-test-indentation/class-diagram ()
|
||||
"Test correct indentation of plantuml class diagram elements.
|
||||
These code examples are taken from www.plantuml.com"
|
||||
(plantuml-test-indent-block
|
||||
|
||||
"
|
||||
class Dummy {
|
||||
String data
|
||||
void methods()
|
||||
}
|
||||
|
||||
class Flight {
|
||||
flightNumber : Integer
|
||||
departureTime : Date
|
||||
}
|
||||
|
||||
class Dummy1 {
|
||||
{field} A field (despite parentheses)
|
||||
{method} Some method
|
||||
}
|
||||
|
||||
class Dummy2 {
|
||||
-field1
|
||||
#field2
|
||||
~method1()
|
||||
+method2()
|
||||
}
|
||||
|
||||
class Dummy3 {
|
||||
{static} String id
|
||||
{abstract} void methods()
|
||||
}
|
||||
|
||||
class Foo1 {
|
||||
You can use
|
||||
several lines
|
||||
..
|
||||
as you want
|
||||
and group
|
||||
==
|
||||
things together.
|
||||
__
|
||||
You can have as many groups
|
||||
as you want
|
||||
--
|
||||
End of class
|
||||
}
|
||||
|
||||
class User {
|
||||
.. Simple Getter ..
|
||||
+ getName()
|
||||
+ getAddress()
|
||||
.. Some setter ..
|
||||
+ setName()
|
||||
__ private data __
|
||||
int age
|
||||
-- encrypted --
|
||||
String password
|
||||
}
|
||||
|
||||
class ArrayList {
|
||||
Object[] elementData
|
||||
size()
|
||||
}
|
||||
|
||||
enum TimeUnit {
|
||||
DAYS
|
||||
HOURS
|
||||
MINUTES
|
||||
}
|
||||
|
||||
class Dummy4 <<Serializable>> {
|
||||
String name
|
||||
}
|
||||
|
||||
class Foo<? extends Element> {
|
||||
int size()
|
||||
}
|
||||
|
||||
package \"Classic Collections\" #DDDDDD {
|
||||
Object <|-- ArrayList
|
||||
}
|
||||
|
||||
package net.sourceforge.plantuml {
|
||||
Object <|-- Demo1
|
||||
Demo1 *- Demo2
|
||||
}
|
||||
|
||||
package foo1 <<Node>> {
|
||||
class Class1
|
||||
}
|
||||
|
||||
package foo2 <<Rectangle>> {
|
||||
class Class2
|
||||
}
|
||||
|
||||
package foo3 <<Folder>> {
|
||||
class Class3
|
||||
}
|
||||
|
||||
package foo4 <<Frame>> {
|
||||
class Class4
|
||||
}
|
||||
|
||||
package foo5 <<Cloud>> {
|
||||
class Class5
|
||||
}
|
||||
|
||||
package foo6 <<Database>> {
|
||||
class Class6
|
||||
}
|
||||
|
||||
package foo1.foo2 {
|
||||
class ObjectFoo1Foo2
|
||||
}
|
||||
|
||||
package foo1.foo2.foo3 {
|
||||
class Objectfoo1.foo2.foo3
|
||||
}
|
||||
|
||||
namespace net.dummy #DDDDDD {
|
||||
.BaseClass <|-- Person
|
||||
Meeting o-- Person
|
||||
|
||||
.BaseClass <|- Meeting
|
||||
}
|
||||
|
||||
namespace net.foo {
|
||||
net.dummy.Person <|- Person
|
||||
.BaseClass <|-- Person
|
||||
|
||||
net.dummy.Meeting o-- Person
|
||||
}
|
||||
|
||||
set namespaceSeparator ::
|
||||
class X1::X2::foo {
|
||||
some info
|
||||
}
|
||||
|
||||
together {
|
||||
class Together1
|
||||
class Together2
|
||||
class Together3
|
||||
}
|
||||
"
|
||||
"
|
||||
class Dummy {
|
||||
String data
|
||||
void methods()
|
||||
}
|
||||
|
||||
class Flight {
|
||||
flightNumber : Integer
|
||||
departureTime : Date
|
||||
}
|
||||
|
||||
class Dummy1 {
|
||||
{field} A field (despite parentheses)
|
||||
{method} Some method
|
||||
}
|
||||
|
||||
class Dummy2 {
|
||||
-field1
|
||||
#field2
|
||||
~method1()
|
||||
+method2()
|
||||
}
|
||||
|
||||
class Dummy3 {
|
||||
{static} String id
|
||||
{abstract} void methods()
|
||||
}
|
||||
|
||||
class Foo1 {
|
||||
You can use
|
||||
several lines
|
||||
..
|
||||
as you want
|
||||
and group
|
||||
==
|
||||
things together.
|
||||
__
|
||||
You can have as many groups
|
||||
as you want
|
||||
--
|
||||
End of class
|
||||
}
|
||||
|
||||
class User {
|
||||
.. Simple Getter ..
|
||||
+ getName()
|
||||
+ getAddress()
|
||||
.. Some setter ..
|
||||
+ setName()
|
||||
__ private data __
|
||||
int age
|
||||
-- encrypted --
|
||||
String password
|
||||
}
|
||||
|
||||
class ArrayList {
|
||||
Object[] elementData
|
||||
size()
|
||||
}
|
||||
|
||||
enum TimeUnit {
|
||||
DAYS
|
||||
HOURS
|
||||
MINUTES
|
||||
}
|
||||
|
||||
class Dummy4 <<Serializable>> {
|
||||
String name
|
||||
}
|
||||
|
||||
class Foo<? extends Element> {
|
||||
int size()
|
||||
}
|
||||
|
||||
package \"Classic Collections\" #DDDDDD {
|
||||
Object <|-- ArrayList
|
||||
}
|
||||
|
||||
package net.sourceforge.plantuml {
|
||||
Object <|-- Demo1
|
||||
Demo1 *- Demo2
|
||||
}
|
||||
|
||||
package foo1 <<Node>> {
|
||||
class Class1
|
||||
}
|
||||
|
||||
package foo2 <<Rectangle>> {
|
||||
class Class2
|
||||
}
|
||||
|
||||
package foo3 <<Folder>> {
|
||||
class Class3
|
||||
}
|
||||
|
||||
package foo4 <<Frame>> {
|
||||
class Class4
|
||||
}
|
||||
|
||||
package foo5 <<Cloud>> {
|
||||
class Class5
|
||||
}
|
||||
|
||||
package foo6 <<Database>> {
|
||||
class Class6
|
||||
}
|
||||
|
||||
package foo1.foo2 {
|
||||
class ObjectFoo1Foo2
|
||||
}
|
||||
|
||||
package foo1.foo2.foo3 {
|
||||
class Objectfoo1.foo2.foo3
|
||||
}
|
||||
|
||||
namespace net.dummy #DDDDDD {
|
||||
.BaseClass <|-- Person
|
||||
Meeting o-- Person
|
||||
|
||||
.BaseClass <|- Meeting
|
||||
}
|
||||
|
||||
namespace net.foo {
|
||||
net.dummy.Person <|- Person
|
||||
.BaseClass <|-- Person
|
||||
|
||||
net.dummy.Meeting o-- Person
|
||||
}
|
||||
|
||||
set namespaceSeparator ::
|
||||
class X1::X2::foo {
|
||||
some info
|
||||
}
|
||||
|
||||
together {
|
||||
class Together1
|
||||
class Together2
|
||||
class Together3
|
||||
}
|
||||
"))
|
||||
|
||||
(provide 'plantuml-indentation-class-test)
|
||||
|
||||
;;; plantuml-indentation-class-test.el ends here
|
Loading…
Reference in New Issue