diff --git a/plantuml-mode.el b/plantuml-mode.el
index 5e34393..df30bcd 100644
--- a/plantuml-mode.el
+++ b/plantuml-mode.el
@@ -350,32 +350,41 @@ Uses prefix (as PREFIX) to choose where to display it:
Plantuml elements like skinparam, rectangle, sprite, package, ….
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")
+ ;; (defconst plantuml-indent-regexp-note-color "\\(?:\s+#\\w+\\)?" "optional color specification")
+ ;; (defconst plantuml-indent-regexp-note-position "\\(?:\s+\\(?:left\\|right\\|top\\|bottom\\)\\)?" "optional position specification")
+ ;; (defconst plantuml-indent-regexp-note-floating "\\(floating\s+\\)?" "optional floating specification")
+ ;; (defvar plantuml-indent-regexp-base-note-start (concat "^\s*" plantuml-indent-regexp-note-floating "note" plantuml-indent-regexp-note-position "\\(?:\s+of\s+[^:]+?\\)?" plantuml-indent-regexp-note-color "$")
+ ;; "Indentation regex for plantuml: note, note right, note left, note bottom, note top, note xxx of")
+ ;; (defvar plantuml-indent-regexp-note-on-link-start (concat "^\s*note" plantuml-indent-regexp-note-position "\s+on\s+link" plantuml-indent-regexp-note-color "$")
+ ;; "Indentation regex for plantuml: note on link")
+ ;; (defvar plantuml-indent-regexp-note-over-start "^\s*note\s+over[^:]+?$"
+ ;; "Indentation regex for plantuml: note over")
+ (defvar plantuml-indent-regexp-note-start "^\s*\\(floating\s+\\)?[hr]?note[^:]*?$" "simplyfied regex; note syntax is especially inconsistent across diagrams")
(defvar plantuml-indent-regexp-group-start "^\s*\\(alt\\|else\\|opt\\|loop\\|par\\|break\\|critical\\|group\\)\\(?:\s+.+\\|$\\)"
"Indentation regex for plantuml group elements that are defined for sequence diagrams.
Two variants for groups: keyword is either followed by whitespace and some text
or it is followed by line end.")
(defvar plantuml-indent-regexp-activate-start "^\s*activate\s+.+$")
(defvar plantuml-indent-regexp-box-start "^\s*box\s+.+$")
- (defvar plantuml-indent-regexp-ref-start "^ref +over +[^:]+?$")
+ (defvar plantuml-indent-regexp-ref-start "^ref\s+over\s+[^:]+?$")
(defvar plantuml-indent-regexp-title-start "^\s*title$")
(defvar plantuml-indent-regexp-header-start "^\s*\\(?:\\(?:center\\|left\\|right\\)\s+header\\|header\\)$")
(defvar plantuml-indent-regexp-footer-start "^\s*\\(?:\\(?:center\\|left\\|right\\)\s+footer\\|footer\\)$")
(defvar plantuml-indent-regexp-legend-start "^\s*\\(?:legend\\|legend\s+\\(?:bottom\\|top\\)\\|legend\s+\\(?:center\\|left\\|right\\)\\|legend\s+\\(?:bottom\\|top\\)\s+\\(?:center\\|left\\|right\\)\\)$")
- (defvar plantuml-indent-regexp-oldif-start "^.*if\s+\".*\"\s+then$")
+ (defvar plantuml-indent-regexp-oldif-start "^.*if\s+\".*\"\s+then$" "current activity diagram, sometimes already mentioned as deprecated")
(defvar plantuml-indent-regexp-start (list plantuml-indent-regexp-block-start
- plantuml-indent-regexp-note-start
plantuml-indent-regexp-group-start
plantuml-indent-regexp-activate-start
plantuml-indent-regexp-box-start
plantuml-indent-regexp-ref-start
+ plantuml-indent-regexp-legend-start
+ plantuml-indent-regexp-note-start
+ plantuml-indent-regexp-oldif-start
plantuml-indent-regexp-title-start
plantuml-indent-regexp-header-start
plantuml-indent-regexp-footer-start
- plantuml-indent-regexp-legend-start
plantuml-indent-regexp-oldif-start))
- (defvar plantuml-indent-regexp-end "^\s*\\(?:}\\|endif\\|else\s*.*\\|end\\|end\s+note\\|end\s+box\\|end\s+ref\\|deactivate\s+.+\\|end\s+title\\|endheader\\|endfooter\\|endlegend\\)$")
+ (defvar plantuml-indent-regexp-end "^\s*\\(?:}\\|endif\\|else\s*.*\\|end\\|end\s+note\\|endhnote\\|endrnote\\|end\s+box\\|end\s+ref\\|deactivate\s+.+\\|end\s+title\\|endheader\\|endfooter\\|endlegend\\)$")
(setq plantuml-font-lock-keywords
`(
(,plantuml-types-regexp . font-lock-type-face)
diff --git a/test/plantuml-indentation-commons-test.el b/test/plantuml-indentation-commons-test.el
index f93b158..8069098 100644
--- a/test/plantuml-indentation-commons-test.el
+++ b/test/plantuml-indentation-commons-test.el
@@ -313,22 +313,4 @@ this is no correct legend
endlegend
"))
-
-(ert-deftest plantuml-test-block-indentation/note-as ()
- "Test correct indentation of a note-as block."
- (plantuml-test-indent-block
- "
-note as N1
-This is a note
-end note
-"
- "
-note as N1
- This is a note
-end note
-"
- ))
-
-(provide 'plantuml-indentation-commons-test)
-
;;; plantuml-indentation-commons-test.el ends here
diff --git a/test/plantuml-indentation-notes-test.el b/test/plantuml-indentation-notes-test.el
new file mode 100644
index 0000000..b58f2b4
--- /dev/null
+++ b/test/plantuml-indentation-notes-test.el
@@ -0,0 +1,403 @@
+;;; plantuml-indentation-notes-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 of note elements.
+;; Notes are used in almost all diagrams, but not all types of notes
+;; are supported in every diagram type.
+
+;;; Code:
+
+(ert-deftest plantuml-test-block-indentation/note-simple ()
+ "Test correct indentation of a simple note block."
+ (plantuml-test-indent-block
+ "
+note: single line note
+
+note
+multi line note
+end note
+"
+ "
+note: single line note
+
+note
+ multi line note
+end note
+"
+ ))
+
+(ert-deftest plantuml-test-block-indentation/note-left-right ()
+ "Test correct indentation of a note left/right block."
+ (plantuml-test-indent-block
+ "
+(*) --> \"Some Activity\"
+note right: This activity has to be defined
+\"Some Activity\" --> (*)
+
+note right
+This note is on
+several lines
+end note
+
+(*) --> \"Some Activity\"
+note left: This activity has to be defined
+\"Some Activity\" --> (*)
+
+note left
+This note is on
+several lines
+end note
+"
+ "
+(*) --> \"Some Activity\"
+note right: This activity has to be defined
+\"Some Activity\" --> (*)
+
+note right
+ This note is on
+ several lines
+end note
+
+(*) --> \"Some Activity\"
+note left: This activity has to be defined
+\"Some Activity\" --> (*)
+
+note left
+ This note is on
+ several lines
+end note
+" ))
+
+(ert-deftest plantuml-test-block-indentation/note-xxx-of ()
+ "Test correct indentation of a note xxx of block.
+plantuml.com:
+You can use the note left of, note right of, note top of,
+note bottom of keywords to define notes related to a single
+object."
+ (plantuml-test-indent-block
+ "
+note right of Alice: This is displayed right of Alice.
+
+note left of Alice #aqua
+This is displayed
+left of Alice.
+end note
+
+note left of Alice: This is displayed left of Alice.
+
+note right of Alice #aqua
+This is displayed
+right of Alice.
+end note
+
+note right of (Use)
+A note can also
+be on several lines
+end note
+
+note left of HTTP : Web Service only
+
+note right of [First Component]
+A note can also
+be on several lines
+end note
+"
+ "
+note right of Alice: This is displayed right of Alice.
+
+note left of Alice #aqua
+ This is displayed
+ left of Alice.
+end note
+
+note left of Alice: This is displayed left of Alice.
+
+note right of Alice #aqua
+ This is displayed
+ right of Alice.
+end note
+
+note right of (Use)
+ A note can also
+ be on several lines
+end note
+
+note left of HTTP : Web Service only
+
+note right of [First Component]
+ A note can also
+ be on several lines
+end note
+"
+ ))
+
+(ert-deftest plantuml-test-block-indentation/note-on-link ()
+ "Test correct indentation of a note xxx of block.
+plantuml.com:
+“You can also use note left on link, note right on link,
+note top on link, note bottom on link if you want to change
+the relative position of the note with the label.”"
+ (plantuml-test-indent-block
+ "
+class Dummy
+Dummy --> Foo : A link
+note on link #red: note that is red
+
+Dummy --> Foo2 : Another link
+note right on link #blue
+this is my note on right link
+and in blue
+end note
+
+note left on link #00FFFF
+this is my note on left link
+and in color as number
+end note
+"
+ "
+class Dummy
+Dummy --> Foo : A link
+note on link #red: note that is red
+
+Dummy --> Foo2 : Another link
+note right on link #blue
+ this is my note on right link
+ and in blue
+end note
+
+note left on link #00FFFF
+ this is my note on left link
+ and in color as number
+end note
+"
+ ))
+
+(ert-deftest plantuml-test-block-indentation/note-over ()
+ "Test correct indentation of a note-over block."
+ (plantuml-test-indent-block
+ "
+note over Alice: This is displayed over Alice.
+
+note over Alice, Bob #FFAAAA: This is displayed over Bob and Alice.
+
+note over Bob, Alice
+This is yet another
+example of
+a long note.
+end note
+"
+ "
+note over Alice: This is displayed over Alice.
+
+note over Alice, Bob #FFAAAA: This is displayed over Bob and Alice.
+
+note over Bob, Alice
+ This is yet another
+ example of
+ a long note.
+end note
+"
+ ))
+
+;; Here we have an inconsistency (again) in plantuml syntax
+;; single line ‘note as …’ does not contain a ?:
+;;
+;; (ert-deftest plantuml-test-block-indentation/note-as ()
+;; "Test correct indentation of a note-as block."
+;; (plantuml-test-indent-block
+;; "
+;; :Main Admin: as Admin
+;; (Use the application) as (Use)
+
+;; User -> (Start)
+;; User --> (Use)
+
+;; Admin ---> (Use)
+
+;; note right of Admin : This is an example.
+
+;; note right of (Use)
+;; A note can also
+;; be on several lines
+;; end note
+
+;; note \"This note is connected to several objects.\" as N2 #RED
+;; (Start) .. N2
+;; N2 .. (Use)
+
+;; note as N3 #blue
+;; This note is connected
+;; to several objects as well.
+;; end note
+;; (Start) .. N3
+;; N3 .. Admin
+;; "
+;; "
+;; :Main Admin: as Admin
+;; (Use the application) as (Use)
+
+;; User -> (Start)
+;; User --> (Use)
+
+;; Admin ---> (Use)
+
+;; note right of Admin : This is an example.
+
+;; note right of (Use)
+;; A note can also
+;; be on several lines
+;; end note
+
+;; note \"This note is connected to several objects.\" as N2 #RED
+;; (Start) .. N2
+;; N2 .. (Use)
+
+;; note as N3 #blue
+;; This note is connected
+;; to several objects as well.
+;; end note
+
+;; (Start) .. N3
+;; N3 .. Admin
+;; "
+;; ))
+
+(ert-deftest plantuml-test-block-indentation/note-floating ()
+ "Test correct indentation of a floating note block."
+ (plantuml-test-indent-block
+
+ "
+floating note left: This is a note
+:foo2;
+
+floating note right
+This note is on several
+//lines// and can
+contain HTML
+====
+* Calling the method \"\"foo()\"\" is prohibited
+end note
+"
+ "
+floating note left: This is a note
+:foo2;
+
+floating note right
+ This note is on several
+ //lines// and can
+ contain HTML
+ ====
+ * Calling the method \"\"foo()\"\" is prohibited
+end note
+"
+ ))
+
+(ert-deftest plantuml-test-block-indentation/note-h-r-note ()
+ "Test correct indentation of a [hr]note block."
+ (plantuml-test-indent-block
+ "
+caller -> server : conReq
+rnote over caller : idle
+hnote over caller : idle
+caller <- server : conConf
+
+rnote over server
+r as rectangle
+h as hexagon
+endrnote
+
+hnote over server
+r as rectangle
+h as hexagon
+endrnote
+"
+ "
+caller -> server : conReq
+rnote over caller : idle
+hnote over caller : idle
+caller <- server : conConf
+
+rnote over server
+ r as rectangle
+ h as hexagon
+endrnote
+
+hnote over server
+ r as rectangle
+ h as hexagon
+endrnote
+"
+ ))
+
+(ert-deftest plantuml-test-block-indentation/note-creole-html ()
+ "Test correct indentation of a note block with creole/html."
+ (plantuml-test-indent-block
+
+ "
+participant Alice
+participant \"The **Famous** Bob\" as Bob
+
+Alice -> Bob : hello --there--
+... Some ~~long delay~~ ...
+Bob -> Alice : ok
+note left
+This is **bold**
+This is //italics//
+This is \"\"monospaced\"\"
+This is --stroked--
+This is __underlined__
+This is ~~waved~~
+end note
+
+Alice -> Bob : A //well formatted// message
+note right of Alice
+This is displayed
+__left of__ Alice.
+end note
+note left of Bob
+This is displayed
+**left of Alice Bob**.
+end note
+note over Alice, Bob
+This is hosted by
+end note
+
+"
+ "
+participant Alice
+participant \"The **Famous** Bob\" as Bob
+
+Alice -> Bob : hello --there--
+... Some ~~long delay~~ ...
+Bob -> Alice : ok
+note left
+ This is **bold**
+ This is //italics//
+ This is \"\"monospaced\"\"
+ This is --stroked--
+ This is __underlined__
+ This is ~~waved~~
+end note
+
+Alice -> Bob : A //well formatted// message
+note right of Alice
+ This is displayed
+ __left of__ Alice.
+end note
+note left of Bob
+ This is displayed
+ **left of Alice Bob**.
+end note
+note over Alice, Bob
+ This is hosted by
+end note
+
+"
+ ))
+
+;;; plantuml-indentation-notes-test.el ends here