regex corrections and added indentation tests for class diagrams

correct indentation regexs found by tests for class diagrams
This commit is contained in:
René Schmelzer 2019-03-10 21:35:24 +01:00
parent c31480fcd1
commit 96ec931f64
2 changed files with 304 additions and 3 deletions

View File

@ -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)

View File

@ -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