Compare commits

...

44 Commits

Author SHA1 Message Date
Carlo Sciolla 5889166b6c
Prepping for v1.4.1 2019-09-03 23:24:56 +02:00
Carlo Sciolla 7a1d7ab1ca
Merge branch 'fix-105' into develop 2019-09-03 23:13:06 +02:00
Carlo Sciolla bea66129a9
Fix note syntax in tests 2019-09-03 23:12:48 +02:00
Carlo Sciolla 4f899a4495
Ensure base64 encoding happens after coding the string with UTF8 (#111)
* Fixes #110

Ensure base64 encoding happens after coding the string with UTF8

* Avoid line breaks in base64 encoding
2019-09-03 23:06:47 +02:00
Carlo Sciolla 252e2c3ce8
Disabling master again 2019-09-03 23:06:47 +02:00
Carlo Sciolla 11b78ff62e
Trying to re-enable builds against Emacs master 2019-09-03 23:06:47 +02:00
Carlo Sciolla 4349011ed7
Aesthitics, just aesthetics 2019-09-03 23:06:46 +02:00
Carlo Sciolla 2954c15322
Fix emacs 26 build 2019-09-03 23:06:46 +02:00
Carlo Sciolla a6545435cd
Bumping java version for CI 2019-09-03 23:06:46 +02:00
Carlo Sciolla 1a11576f4a
Bump version after release 2019-09-03 23:06:45 +02:00
Carlo Sciolla df0d718981
Prepping for the new release 2019-09-03 23:06:45 +02:00
Carlo Sciolla 271f468edd
Bump version 2019-09-03 23:06:45 +02:00
Carlo Sciolla b0be4182fb
Fix tests 2019-09-03 23:06:44 +02:00
Carlo Sciolla 76b14086e8
Ignore java warnings 2019-09-03 23:06:44 +02:00
Carlo Sciolla f04480dcba
Use UTC timezone when setting dates, to align with MELPA 2019-09-03 23:06:44 +02:00
Carlo Sciolla 2bd72f7ae6
Use `car` instead of `first` 2019-09-03 23:06:43 +02:00
Carlo Sciolla 914e0526d9
Avoid zero-padding of hours to mimic MELPA 2019-09-03 23:06:43 +02:00
Carlo Sciolla 60e4d3ec6e
Better version management 2019-09-03 23:06:43 +02:00
Felix Weilbach 7eb6167eb8
Added run mode EXECUTABLE (#102) 2019-09-03 23:06:42 +02:00
Carlo Sciolla 19e268c0cb
Ensure base64 encoding happens after coding the string with UTF8 (#111)
* Fixes #110

Ensure base64 encoding happens after coding the string with UTF8

* Avoid line breaks in base64 encoding
2019-08-30 22:54:26 +02:00
Carlo Sciolla 2f8170b30b
Disabling master again 2019-08-25 11:03:29 +02:00
Carlo Sciolla 14daefbb2f
Trying to re-enable builds against Emacs master 2019-08-25 10:37:51 +02:00
Carlo Sciolla 47156fac58
Aesthitics, just aesthetics 2019-08-22 16:03:53 +02:00
Carlo Sciolla 95428d2e2e
Fix emacs 26 build 2019-08-22 11:31:36 +02:00
Carlo Sciolla b43249e1aa
Bumping java version for CI 2019-08-21 17:20:22 +02:00
Carlo Sciolla 39a109ffe6
Bump version after release 2019-08-21 16:47:52 +02:00
Carlo Sciolla b39c310e9c
Prepping for the new release 2019-08-21 16:42:54 +02:00
Carlo Sciolla f7e3af35e8
Merge branch 'develop' 2019-08-21 16:41:38 +02:00
Carlo Sciolla ae8593d662
Bump version 2019-08-21 14:34:02 +02:00
Carlo Sciolla 36e0abac58
Merge branch 'issue106' into develop 2019-08-21 14:31:52 +02:00
Carlo Sciolla beb4dfc726
Fix tests 2019-08-21 14:27:26 +02:00
Carlo Sciolla 7c1d6d3891
Merge branch 'issue107' into develop 2019-08-21 14:19:54 +02:00
Carlo Sciolla 08b783aee6
Ignore java warnings 2019-08-21 14:18:20 +02:00
Carlo Sciolla 04110d0110
Use UTC timezone when setting dates, to align with MELPA 2019-08-21 12:11:36 +02:00
Carlo Sciolla 5a6ed6c5a2
Use `car` instead of `first` 2019-08-21 11:29:20 +02:00
Carlo Sciolla 4a908c2279
Avoid zero-padding of hours to mimic MELPA 2019-08-21 11:19:37 +02:00
Carlo Sciolla a822c551b8
Better version management 2019-08-21 10:55:50 +02:00
Felix Weilbach 9cba6835fd Added run mode EXECUTABLE (#102) 2019-08-19 14:10:35 +02:00
Michael Steiner cbd7fa4c6b - give user some control to override in comments level of indentation
Signed-off-by: Michael Steiner <michael.steiner@intel.com>
2019-08-12 12:01:26 -07:00
Michael Steiner 80b554e871 - allow for white-space and comments after all begin/end indent regexps
- make end indent regexp symmetrical to being regexp allowing for selective
  change (e.g., disactivation via non-matching regexp) what is leads to
  indentation

Signed-off-by: Michael Steiner <michael.steiner@intel.com>
2019-08-12 12:01:12 -07:00
Michael Steiner c32493229d more robust matching of notes
Signed-off-by: Michael Steiner <michael.steiner@intel.com>
2019-08-12 10:17:50 -07:00
Carlo Sciolla 1e5f8beedd
Fix switching between modes (#104)
Giving a default value to `plantuml-exec-mode` local var at startup time
is wrong. This change keeps the local var to `nil` and resorts to the
customizable `plantuml-default-exec-mode`. The local var can be set by users
at will on a buffer local level, but without such an explicit opt-in then the
default value is always used
2019-08-12 17:40:00 +02:00
Carlo Sciolla d11bd57f31
Removed broken link 2019-08-12 17:14:45 +02:00
Carlo Sciolla 0ae3aed095
Avoid breaking long lines on base64 encoding
Spotted by @alexvs11 as a solution to #101
2019-08-03 16:03:25 +02:00
7 changed files with 192 additions and 43 deletions

View File

@ -3,18 +3,18 @@ version: 2.0
# Default actions to perform on each Emacs version
default: &default-steps
steps:
- run:
name: Update APT packages
command: apt-get update
- run:
name: Install prerequisites
command: apt-get install -y openjdk-11-jre make python git
- checkout
- run:
# Note: this makes it hard to reproduce builds but easier to spot incompatibilities with
# newer PlantUML releases. Current trade off seems acceptable.
name: Download the latest PlantUML release
command: sh ./bin/download-plantuml.sh
- run:
name: Update APT packages
command: apt-get update
- run:
name: Install prerequisites
command: apt-get install -y openjdk-8-jre make python git
- run:
name: Install cask
command: curl -fsSL https://raw.githubusercontent.com/cask/cask/master/go | python
@ -35,7 +35,7 @@ jobs:
test-emacs-26:
docker:
- image: silex/emacs:26.0
- image: silex/emacs:26
entrypoint: bash
<<: *default-steps
@ -53,4 +53,4 @@ workflows:
- test-emacs-25
- test-emacs-26
# Testing against master currently hangs on CircleCI
#- test-emacs-master
# - test-emacs-master

View File

@ -1,6 +1,5 @@
[![MELPA](http://melpa.org/packages/plantuml-mode-badge.svg)](http://melpa.org/#/plantuml-mode) [![MELPA Stable](http://stable.melpa.org/packages/plantuml-mode-badge.svg)](http://stable.melpa.org/#/plantuml-mode) [![CircleCI](https://circleci.com/gh/skuro/plantuml-mode.svg?style=svg)](https://circleci.com/gh/skuro/plantuml-mode) [![Coverage Status](https://coveralls.io/repos/github/skuro/plantuml-mode/badge.svg?branch=HEAD)](https://coveralls.io/github/skuro/plantuml-mode?branch=HEAD)
# PlantUML mode for Emacs
<img src="https://raw.githubusercontent.com/skuro/plantuml-mode/master/banner.png"
@ -97,6 +96,7 @@ As of `v1.3.0` support is added for switching execution mode. The following two
- `jar` (default) to run PlantUML as a local JAR file. This is the traditional system used by `plantuml-mode`
- `server` (experimental) to let an instance of [`plantuml-server`](https://github.com/plantuml/plantuml-server) render the preview
- `executable` to run PlantUML as a local executable file. This is useful if your package manager provides a executable for PlantUML.
You can customize `plantuml-default-exec-mode` or run `plantuml-set-exec-mode` from a `plantuml-mode` buffer to switch modes.
@ -138,11 +138,20 @@ the textual mode and see if the output is valid SVG.
## Development
Development happens mostly on the `develop` branch, which is released on MELPA at every commit. The `master` branch is used to generate tags which are then released to [MELPA
stable](https://stable.melpa.org).
In order to contribute to `plantuml-mode` make sure to:
- agree with the [GPLv3+ licencing terms](#License) as they are mandated by Emacs
- install [`cask`](https://github.com/cask/cask)
- always test your code and run the full test suite with `cask exec ert-runner` (or just by `make`)
- ensure you always target `develop` in your pull requests
For collaborators who have merge access to the repo:
- make sure [`set-version.sh`](./blob/develop/bin/set-version.sh) is run as part of your [`pre-commit` git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
- always merge PRs on the command line
- when releasing a new stable version, add the proper entry in the changelog within `plantuml-mode.el` to ensure the right version is set for `plantuml-mode-version`
# Credits

33
bin/set-version.sh Executable file
View File

@ -0,0 +1,33 @@
#!/bin/bash
# Retrieves the version from the changelog in plantuml-mode.el
function grab_version(){
grep ';; version' plantuml-mode.el | \
head -n1 | \
cut -f3 -d' ' | \
tr -d ','
}
# Updates the version in-place
function update_version(){
NEW_VERSION="${1}"
sed -i -E "s/plantuml-mode-version \"[0-9\.]+\"/plantuml-mode-version \"${1}\"/" plantuml-mode.el
}
case "$(git rev-parse --abbrev-ref HEAD)" in
'master')
VERSION="$(grab_version)"
update_version "${VERSION}"
git add plantuml-mode.el
;;
'develop')
VERSION="$(TZ='UTC' date '+%Y%m%d.%-H%M')" # MELPA style
update_version "${VERSION}"
git add plantuml-mode.el
;;
*)
## do nothing
;;
esac

View File

@ -37,6 +37,8 @@
;;; Change log:
;;
;; version 1.4.1, 2019-09-03 Better indentation; more bugfixing; actually adding `executable' mode
;; version 1.4.0, 2019-08-21 Added `executable' exec mode to use locally installed `plantuml' binaries, various bugfixes
;; version 1.3.1, 2019-08-02 Fixed interactive behavior of `plantuml-set-exec-mode'
;; version 1.3.0, 2019-05-31 Added experimental support for multiple rendering modes and, specifically, preview using a PlantUML server
;; version 1.2.11, 2019-04-09 Added `plantuml-download-jar'
@ -84,9 +86,15 @@
:type 'string
:group 'plantuml)
(defcustom plantuml-executable-path
"plantuml"
"The location of the PlantUML executable."
:type 'string
:group 'plantuml)
(defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.")
(defconst plantuml-mode-version "1.3.1" "The plantuml-mode version string.")
(defconst plantuml-mode-version "1.4.1" "The plantuml-mode version string.")
(defvar plantuml-mode-debug-enabled nil)
@ -103,7 +111,7 @@
:type 'string
:group 'plantuml)
(defcustom plantuml-java-args (list "-Djava.awt.headless=true" "-jar")
(defcustom plantuml-java-args (list "-Djava.awt.headless=true" "-jar" "--illegal-access=deny")
"The parameters passed to `plantuml-java-command' when executing PlantUML."
:type '(repeat string)
:group 'plantuml)
@ -118,12 +126,17 @@
:type 'string
:group 'plantuml)
(defcustom plantuml-executable-args (list "-headless")
"The parameters passed to plantuml executable when executing PlantUML."
:type '(repeat string)
:group 'plantuml)
(defcustom plantuml-default-exec-mode 'server
"Default execution mode for PlantUML. Valid values are:
- `jar': run PlantUML as a JAR file (requires a local install of the PlantUML JAR file, see `plantuml-jar-path'"
:type 'symbol
:group 'plantuml
:options '(jar server))
:options '(jar server executable))
(defcustom plantuml-suppress-deprecation-warning t
"To silence the deprecation warning when `puml-mode' is found upon loading."
@ -159,13 +172,13 @@
(defvar plantuml-kwdList nil "The plantuml keywords.")
;; PlantUML execution mode
(defvar-local plantuml-exec-mode plantuml-default-exec-mode
"The Plantuml execution mode. See `plantuml-default-exec-mode' for acceptable values.")
(defvar-local plantuml-exec-mode nil
"The Plantuml execution mode override. See `plantuml-default-exec-mode' for acceptable values.")
(defun plantuml-set-exec-mode (mode)
"Set the execution mode MODE for PlantUML."
(interactive (let* ((completion-ignore-case t)
(supported-modes '("jar" "server")))
(supported-modes '("jar" "server" "executable")))
(list (completing-read (format "Exec mode [%s]: " plantuml-exec-mode)
supported-modes
nil
@ -173,10 +186,15 @@
nil
nil
plantuml-exec-mode))))
(if (member mode '("jar" "server"))
(if (member mode '("jar" "server" "executable"))
(setq plantuml-exec-mode (intern mode))
(error (concat "Unsupported mode:" mode))))
(defun plantuml-get-exec-mode ()
"Retrieves the currently active PlantUML exec mode."
(or plantuml-exec-mode
plantuml-default-exec-mode))
(defun plantuml-enable-debug ()
"Enables debug messages into the *PLANTUML Messages* buffer."
(interactive)
@ -214,9 +232,9 @@
(strs (xml-get-children doc 'str))
(version (->> strs
(--filter (string-equal "v" (xml-get-attribute it 'name)))
(first)
(car)
(xml-node-children)
(first))))
(car))))
(message (concat "Downloading PlantUML v" version " into " plantuml-jar-path))
(url-copy-file (format "https://search.maven.org/remotecontent?filepath=net/sourceforge/plantuml/plantuml/%s/plantuml-%s.jar" version version) plantuml-jar-path t)
(kill-buffer)))
@ -239,11 +257,19 @@
(with-current-buffer buf
(url-insert-file-contents lang-url))))
(defun plantuml-executable-get-language (buf)
"Retrieve the language specification from the PlantUML executable and paste it into BUF."
(with-current-buffer buf
(let ((cmd-args (append (list plantuml-executable-path nil t nil) (list "-language"))))
(apply 'call-process cmd-args)
(goto-char (point-min)))))
(defun plantuml-get-language (mode buf)
"Retrieve the language spec using the preferred PlantUML execution mode MODE. Paste the result into BUF."
(let ((get-fn (pcase mode
('jar #'plantuml-jar-get-language)
('server #'plantuml-server-get-language))))
('server #'plantuml-server-get-language)
('executable #'plantuml-executable-get-language))))
(if get-fn
(funcall get-fn buf)
(error "Unsupported execution mode %s" mode))))
@ -340,6 +366,14 @@ Note that output type `txt' is promoted to `utxt' for better rendering."
,@plantuml-jar-args
"-p")))
(defun plantuml-executable-start-process (buf)
"Run PlantUML as an Emacs process and puts the output into the given buffer (as BUF)."
(apply #'start-process
"PLANTUML" buf plantuml-executable-path
`(,@plantuml-executable-args
,(plantuml-jar-output-type-opt plantuml-output-type)
"-p")))
(defun plantuml-update-preview-buffer (prefix buf)
"Show the preview in the preview buffer BUF.
Window is selected according to PREFIX:
@ -373,13 +407,20 @@ Put the result into buffer BUF. Window is selected according to PREFIX:
(error "PLANTUML Preview failed: %s" event))
(plantuml-update-preview-buffer prefix buf)))))
(defun plantuml-server-encode-url (string)
"Encode the string STRING into a URL suitable for PlantUML server interactions."
(let* ((coding-system (or buffer-file-coding-system
"utf8"))
(encoded-string (base64-encode-string (encode-coding-string string coding-system) t)))
(concat plantuml-server-url "/" plantuml-output-type "/-base64-" encoded-string)))
(defun plantuml-server-preview-string (prefix string buf)
"Preview the diagram from STRING as rendered by the PlantUML server.
Put the result into buffer BUF and place it according to PREFIX:
- 4 (when prefixing the command with C-u) -> new window
- 16 (when prefixing the command with C-u C-u) -> new frame.
- else -> new buffer"
(let* ((url-request-location (concat plantuml-server-url "/" plantuml-output-type "/-base64-" (base64-encode-string string))))
(let* ((url-request-location (plantuml-server-encode-url string)))
(save-current-buffer
(save-match-data
(url-retrieve url-request-location
@ -393,6 +434,22 @@ Put the result into buffer BUF and place it according to PREFIX:
(copy-to-buffer buf (point-min) (point-max))
(plantuml-update-preview-buffer prefix buf)))))))
(defun plantuml-executable-preview-string (prefix string buf)
"Preview the diagram from STRING by running the PlantUML JAR.
Put the result into buffer BUF. Window is selected according to PREFIX:
- 4 (when prefixing the command with C-u) -> new window
- 16 (when prefixing the command with C-u C-u) -> new frame.
- else -> new buffer"
(let* ((process-connection-type nil)
(ps (plantuml-executable-start-process buf)))
(process-send-string ps string)
(process-send-eof ps)
(set-process-sentinel ps
(lambda (_ps event)
(unless (equal event "finished\n")
(error "PLANTUML Preview failed: %s" event))
(plantuml-update-preview-buffer prefix buf)))))
(defun plantuml-exec-mode-preview-string (prefix mode string buf)
"Preview the diagram from STRING using the execution mode MODE.
Put the result into buffer BUF, selecting the window according to PREFIX:
@ -401,7 +458,8 @@ Put the result into buffer BUF, selecting the window according to PREFIX:
- else -> new buffer"
(let ((preview-fn (pcase mode
('jar #'plantuml-jar-preview-string)
('server #'plantuml-server-preview-string))))
('server #'plantuml-server-preview-string)
('executable #'plantuml-executable-preview-string))))
(if preview-fn
(funcall preview-fn prefix string buf)
(error "Unsupported execution mode %s" mode))))
@ -418,7 +476,7 @@ to choose where to display it."
(buf (get-buffer-create plantuml-preview-buffer))
(coding-system-for-read (and imagep 'binary))
(coding-system-for-write (and imagep 'binary)))
(plantuml-exec-mode-preview-string prefix plantuml-exec-mode string buf)))
(plantuml-exec-mode-preview-string prefix (plantuml-get-exec-mode) string buf)))
(defun plantuml-preview-buffer (prefix)
"Preview diagram from the PlantUML sources in the current buffer.
@ -467,8 +525,8 @@ Uses prefix (as PREFIX) to choose where to display it:
(plantuml-preview-buffer prefix)))
(defun plantuml-init-once (&optional mode)
"Ensure initialization only happens once. Use exec mode MODE to load the language details, which defaults to `plantuml-exec-mode'."
(let ((mode (or mode plantuml-exec-mode)))
"Ensure initialization only happens once. Use exec mode MODE to load the language details or by first querying `plantuml-get-exec-mode'."
(let ((mode (or mode (plantuml-get-exec-mode))))
(unless plantuml-kwdList
(plantuml-init mode)
(defvar plantuml-types-regexp (concat "^\\s *\\(" (regexp-opt plantuml-types 'words) "\\|\\<\\(note\\s +over\\|note\\s +\\(left\\|right\\|bottom\\|top\\)\\s +\\(of\\)?\\)\\>\\|\\<\\(\\(left\\|center\\|right\\)\\s +\\(header\\|footer\\)\\)\\>\\)"))
@ -476,25 +534,45 @@ Uses prefix (as PREFIX) to choose where to display it:
(defvar plantuml-builtins-regexp (regexp-opt plantuml-builtins 'words))
(defvar plantuml-preprocessors-regexp (concat "^\\s *" (regexp-opt plantuml-preprocessors 'words)))
;; Below are the regexp's for indentation.
;; Notes:
;; - there is some control on what it is indented by overriding some of below
;; X-start and X-end regexp before plantuml-mode is loaded. E.g., to disable
;; indentation on activate, you might define in your .emacs something like
;; (setq plantuml-indent-regexp-activate-start
;; "NEVER MATCH THIS EXPRESSION"); define _before_ load plantuml-mode!
;; (setq plantuml-indent-regexp-activate-end
;; "NEVER MATCH THIS EXPRESSION"); define _before_ load plantuml-mode!
;; - due to the nature of using (context-insensitive) regexp, indentation have
;; following limitations
;; - commands commented out by /' ... '/ will _not_ be ignored
;; and potentially lead to miss-indentation
;; - you can though somewhat correct mis-indentation by adding in '-comment lines
;; PLANTUML_MODE_INDENT_INCREASE and/or PLANTUML_MODE_INDENT_DECREASE
;; to increase and/or decrease the level of indentation
;; (Note: the line with the comment should not contain any text matching other indent
;; regexp or this user-control instruction will be ignored; also at most will count
;; per line ...)
(defvar plantuml-indent-regexp-block-start "^.*{\s*$"
"Indentation regex for all plantuml elements that might define a {} block.
Plantuml elements like skinparam, rectangle, sprite, package, etc.
The opening { has to be the last visible character in the line (whitespace
might follow).")
(defvar plantuml-indent-regexp-note-start "^\s*\\(floating\s+\\)?[hr]?note[^:]*?$" "simplyfied regex; note syntax is especially inconsistent across diagrams")
(defvar plantuml-indent-regexp-note-start "^\s*\\(floating\s+\\)?[hr]?note\s+\\(right\\|left\\|top\\|bottom\\|over\\)[^:]*?$" "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\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$" "used in current activity diagram, sometimes already mentioned as deprecated")
(defvar plantuml-indent-regexp-ref-start "^\s*ref\s+over\s+[^:]+?$")
(defvar plantuml-indent-regexp-title-start "^\s*title\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-header-start "^\s*\\(?:\\(?:center\\|left\\|right\\)\s+header\\|header\\)\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-footer-start "^\s*\\(?:\\(?:center\\|left\\|right\\)\s+footer\\|footer\\)\s*\\('.*\\)?$")
(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\\)\\)\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-oldif-start "^.*if\s+\".*\"\s+then\s*\\('.*\\)?$" "used in current activity diagram, sometimes already mentioned as deprecated")
(defvar plantuml-indent-regexp-macro-start "^\s*!definelong.*$")
(defvar plantuml-indent-regexp-user-control-start "^.*'.*\s*PLANTUML_MODE_INDENT_INCREASE\s*.*$")
(defvar plantuml-indent-regexp-start (list plantuml-indent-regexp-block-start
plantuml-indent-regexp-group-start
plantuml-indent-regexp-activate-start
@ -507,8 +585,35 @@ or it is followed by line end.")
plantuml-indent-regexp-header-start
plantuml-indent-regexp-footer-start
plantuml-indent-regexp-macro-start
plantuml-indent-regexp-oldif-start))
(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\\|!enddefinelong\\)$")
plantuml-indent-regexp-oldif-start
plantuml-indent-regexp-user-control-start))
(defvar plantuml-indent-regexp-block-end "^\s*\\(?:}\\|endif\\|else\s*.*\\|end\\)\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-note-end "^\s*\\(end\s+note\\|end[rh]note\\)\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-group-end "^\s*end\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-activate-end "^\s*deactivate\s+.+$")
(defvar plantuml-indent-regexp-box-end "^\s*end\s+box\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-ref-end "^\s*end\s+ref\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-title-end "^\s*end\s+title\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-header-end "^\s*endheader\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-footer-end "^\s*endfooter\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-legend-end "^\s*endlegend\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-oldif-end "^\s*\\(endif\\|else\\)\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-macro-end "^\s*!enddefinelong\s*\\('.*\\)?$")
(defvar plantuml-indent-regexp-user-control-end "^.*'.*\s*PLANTUML_MODE_INDENT_DECREASE\s*.*$")
(defvar plantuml-indent-regexp-end (list plantuml-indent-regexp-block-end
plantuml-indent-regexp-group-end
plantuml-indent-regexp-activate-end
plantuml-indent-regexp-box-end
plantuml-indent-regexp-ref-end
plantuml-indent-regexp-legend-end
plantuml-indent-regexp-note-end
plantuml-indent-regexp-oldif-end
plantuml-indent-regexp-title-end
plantuml-indent-regexp-header-end
plantuml-indent-regexp-footer-end
plantuml-indent-regexp-macro-end
plantuml-indent-regexp-oldif-end
plantuml-indent-regexp-user-control-end))
(setq plantuml-font-lock-keywords
`(
(,plantuml-types-regexp . font-lock-type-face)
@ -568,13 +673,13 @@ or it is followed by line end.")
(let ((relative-depth 0))
;; current line
(beginning-of-line)
(if (looking-at plantuml-indent-regexp-end)
(if (-any? 'looking-at plantuml-indent-regexp-end)
(setq relative-depth (1- relative-depth)))
;; from current line backwards to beginning of buffer
(while (not (bobp))
(forward-line -1)
(if (looking-at plantuml-indent-regexp-end)
(if (-any? 'looking-at plantuml-indent-regexp-end)
(setq relative-depth (1- relative-depth)))
(if (-any? 'looking-at plantuml-indent-regexp-start)
(setq relative-depth (1+ relative-depth))))
@ -621,8 +726,8 @@ Shortcuts Command Name
(if (and plantuml-suppress-deprecation-warning
(featurep 'puml-mode))
(display-warning :warning
"`puml-mode' is now deprecated and no longer updated, but it's still present in your system.\
You should move your configuration to use `plantuml-mode'. See https://github.com/sytac/plantuml-mode. \
"`puml-mode' is now deprecated and no longer updated, but it's still present in your system. \
You should move your configuration to use `plantuml-mode'. \
See more at https://github.com/skuro/puml-mode/issues/26")))
(add-hook 'plantuml-mode-hook 'plantuml-deprecation-warning)

View File

@ -20,6 +20,8 @@
(should (equal 'server plantuml-exec-mode))
(plantuml-set-exec-mode "jar")
(should (equal 'jar plantuml-exec-mode))
(plantuml-set-exec-mode "executable")
(should (equal 'executable plantuml-exec-mode))
(setq plantuml-exec-mode orig-mode)))

View File

@ -16,16 +16,16 @@
"Test correct indentation of a simple note block."
(plantuml-test-indent-block
"
note: single line note
note right: single line note
note
note right
multi line note
end note
"
"
note: single line note
note right: single line note
note
note right
multi line note
end note
"

View File

@ -10,13 +10,13 @@
(ert-deftest custom-jar-location ()
(setq-local plantuml-jar-path "~/.plantuml/plantuml.jar")
(should (equal `("-Djava.awt.headless=true" "-jar"
(should (equal `("-Djava.awt.headless=true" "-jar" "--illegal-access=deny"
,(expand-file-name "~/.plantuml/plantuml.jar")
"-charset" "UTF-8")
(plantuml-jar-render-command)))
(setq-local plantuml-jar-path "/path/with spaces/plantuml.jar")
(should (equal `("-Djava.awt.headless=true" "-jar" "/path/with spaces/plantuml.jar" "-charset" "UTF-8")
(should (equal `("-Djava.awt.headless=true" "-jar" "--illegal-access=deny" "/path/with spaces/plantuml.jar" "-charset" "UTF-8")
(plantuml-jar-render-command))))
(provide 'plantuml-mode-custom-jar-location-test)