From c32493229d7e1bba11384724a36350a6a73412df Mon Sep 17 00:00:00 2001 From: Michael Steiner Date: Mon, 12 Aug 2019 10:17:50 -0700 Subject: [PATCH 01/20] more robust matching of notes Signed-off-by: Michael Steiner --- plantuml-mode.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index 333510a..dc9d384 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -486,14 +486,14 @@ Uses prefix (as PREFIX) to choose where to display it: 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-ref-start "^\s*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\\)$") From 80b554e871e39f0e5a127c672615d11d2f3e1382 Mon Sep 17 00:00:00 2001 From: Michael Steiner Date: Mon, 12 Aug 2019 11:13:41 -0700 Subject: [PATCH 02/20] - 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 --- plantuml-mode.el | 53 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index dc9d384..1fd68ab 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -481,6 +481,19 @@ 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 (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. @@ -494,11 +507,11 @@ 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 "^\s*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-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-start (list plantuml-indent-regexp-block-start plantuml-indent-regexp-group-start @@ -513,7 +526,31 @@ or it is followed by line end.") 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\\)$") + (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-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)) (setq plantuml-font-lock-keywords `( (,plantuml-types-regexp . font-lock-type-face) @@ -573,13 +610,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)))) From cbd7fa4c6b3b224ac93aca6e6a91fe7826c4caa9 Mon Sep 17 00:00:00 2001 From: Michael Steiner Date: Mon, 12 Aug 2019 11:27:37 -0700 Subject: [PATCH 03/20] - give user some control to override in comments level of indentation Signed-off-by: Michael Steiner --- plantuml-mode.el | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index 1fd68ab..0b12b38 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -494,6 +494,12 @@ Uses prefix (as PREFIX) to choose where to display it: ;; 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. @@ -513,6 +519,7 @@ or it is followed by line end.") (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 @@ -525,7 +532,8 @@ 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)) + 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*\\('.*\\)?$") @@ -538,6 +546,7 @@ or it is followed by line end.") (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 @@ -550,7 +559,8 @@ or it is followed by line end.") plantuml-indent-regexp-header-end plantuml-indent-regexp-footer-end plantuml-indent-regexp-macro-end - plantuml-indent-regexp-oldif-end)) + plantuml-indent-regexp-oldif-end + plantuml-indent-regexp-user-control-end)) (setq plantuml-font-lock-keywords `( (,plantuml-types-regexp . font-lock-type-face) From 7eb6167eb8b8cb3df00405a8c18384da88aab613 Mon Sep 17 00:00:00 2001 From: Felix Weilbach Date: Mon, 19 Aug 2019 14:10:35 +0200 Subject: [PATCH 04/20] Added run mode EXECUTABLE (#102) --- README.md | 1 + plantuml-mode.el | 66 ++++++++++++++++++++++++++++++------ test/plantuml-config-test.el | 2 ++ 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 65ec16f..89b461b 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,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. diff --git a/plantuml-mode.el b/plantuml-mode.el index 0b12b38..fc75b45 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -84,6 +84,12 @@ :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.") @@ -118,12 +124,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." @@ -165,15 +176,15 @@ (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 - t - nil - nil - plantuml-exec-mode)))) - (if (member mode '("jar" "server")) + supported-modes + nil + t + nil + nil + plantuml-exec-mode)))) + (if (member mode '("jar" "server" "executable")) (setq plantuml-exec-mode (intern mode)) (error (concat "Unsupported mode:" mode)))) @@ -244,11 +255,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)))) @@ -345,6 +364,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: @@ -398,6 +425,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: @@ -406,7 +449,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)))) diff --git a/test/plantuml-config-test.el b/test/plantuml-config-test.el index 0f0024c..d30be43 100644 --- a/test/plantuml-config-test.el +++ b/test/plantuml-config-test.el @@ -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))) From 60e4d3ec6e9ccc239326a750a2f4dc41df987fed Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 10:52:15 +0200 Subject: [PATCH 05/20] Better version management --- README.md | 9 +++++++++ bin/set-version.sh | 33 +++++++++++++++++++++++++++++++++ plantuml-mode.el | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100755 bin/set-version.sh diff --git a/README.md b/README.md index 89b461b..ced20a5 100644 --- a/README.md +++ b/README.md @@ -139,11 +139,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 diff --git a/bin/set-version.sh b/bin/set-version.sh new file mode 100755 index 0000000..c278854 --- /dev/null +++ b/bin/set-version.sh @@ -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 \"[1-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="$(date '+%Y%m%d.%H%M')" # MELPA style + update_version "${VERSION}" + git add plantuml-mode.el + ;; + + *) + ## do nothing + ;; +esac diff --git a/plantuml-mode.el b/plantuml-mode.el index fc75b45..322bde3 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -92,7 +92,7 @@ (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 "20190821.1053" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) From 914e0526d94c697df4140846a456a43e55aa1162 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 11:19:37 +0200 Subject: [PATCH 06/20] Avoid zero-padding of hours to mimic MELPA --- bin/set-version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/set-version.sh b/bin/set-version.sh index c278854..19c7425 100755 --- a/bin/set-version.sh +++ b/bin/set-version.sh @@ -22,7 +22,7 @@ case "$(git rev-parse --abbrev-ref HEAD)" in ;; 'develop') - VERSION="$(date '+%Y%m%d.%H%M')" # MELPA style + VERSION="$(date '+%Y%m%d.%-H%M')" # MELPA style update_version "${VERSION}" git add plantuml-mode.el ;; From 2bd72f7ae68e3aebe8d509c569895a0111fc8d06 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 11:29:20 +0200 Subject: [PATCH 07/20] Use `car` instead of `first` --- plantuml-mode.el | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index 322bde3..ec6bd9c 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -178,12 +178,12 @@ (interactive (let* ((completion-ignore-case t) (supported-modes '("jar" "server" "executable"))) (list (completing-read (format "Exec mode [%s]: " plantuml-exec-mode) - supported-modes - nil - t - nil - nil - plantuml-exec-mode)))) + supported-modes + nil + t + nil + nil + plantuml-exec-mode)))) (if (member mode '("jar" "server" "executable")) (setq plantuml-exec-mode (intern mode)) (error (concat "Unsupported mode:" mode)))) @@ -230,9 +230,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))) From f04480dcba451ebbbc69807826331832b8502538 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 12:06:38 +0200 Subject: [PATCH 08/20] Use UTC timezone when setting dates, to align with MELPA --- bin/set-version.sh | 4 ++-- plantuml-mode.el | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/set-version.sh b/bin/set-version.sh index 19c7425..dca53fc 100755 --- a/bin/set-version.sh +++ b/bin/set-version.sh @@ -11,7 +11,7 @@ function grab_version(){ # Updates the version in-place function update_version(){ NEW_VERSION="${1}" - sed -i -E "s/plantuml-mode-version \"[1-9\.]+\"/plantuml-mode-version \"${1}\"/" plantuml-mode.el + sed -i -E "s/plantuml-mode-version \"[0-9\.]+\"/plantuml-mode-version \"${1}\"/" plantuml-mode.el } case "$(git rev-parse --abbrev-ref HEAD)" in @@ -22,7 +22,7 @@ case "$(git rev-parse --abbrev-ref HEAD)" in ;; 'develop') - VERSION="$(date '+%Y%m%d.%-H%M')" # MELPA style + VERSION="$(TZ='UTC' date '+%Y%m%d.%-H%M')" # MELPA style update_version "${VERSION}" git add plantuml-mode.el ;; diff --git a/plantuml-mode.el b/plantuml-mode.el index ec6bd9c..0555792 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -92,7 +92,7 @@ (defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") -(defconst plantuml-mode-version "20190821.1053" "The plantuml-mode version string.") +(defconst plantuml-mode-version "20190821.1011" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) From 76b14086e8ff4bbbaa24f9ebd3f09fe746665011 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 14:18:20 +0200 Subject: [PATCH 09/20] Ignore java warnings --- plantuml-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index 0555792..b0419dd 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -109,7 +109,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) From b0be4182fbfbf4de2f38a419a9cb8a8041dbb1b3 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 14:27:26 +0200 Subject: [PATCH 10/20] Fix tests --- plantuml-mode.el | 2 +- test/plantuml-mode-custom-jar-location-test.el | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index b0419dd..bea7c09 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -92,7 +92,7 @@ (defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") -(defconst plantuml-mode-version "20190821.1011" "The plantuml-mode version string.") +(defconst plantuml-mode-version "20190821.1227" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) diff --git a/test/plantuml-mode-custom-jar-location-test.el b/test/plantuml-mode-custom-jar-location-test.el index 77df757..0da9fc4 100644 --- a/test/plantuml-mode-custom-jar-location-test.el +++ b/test/plantuml-mode-custom-jar-location-test.el @@ -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) From 271f468eddb17615400c33823ecffe16f8af91a9 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 14:34:02 +0200 Subject: [PATCH 11/20] Bump version --- plantuml-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index bea7c09..de8f728 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -92,7 +92,7 @@ (defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") -(defconst plantuml-mode-version "20190821.1227" "The plantuml-mode version string.") +(defconst plantuml-mode-version "20190821.1234" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) From df0d71898134376ed2ea5dec2ec80c98e353cae7 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 16:42:54 +0200 Subject: [PATCH 12/20] Prepping for the new release --- plantuml-mode.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index de8f728..99a07db 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -37,6 +37,7 @@ ;;; Change log: ;; +;; 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' @@ -92,7 +93,7 @@ (defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") -(defconst plantuml-mode-version "20190821.1234" "The plantuml-mode version string.") +(defconst plantuml-mode-version "1.4.0" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) From 1a11576f4a1cd595ce12473edb0e45250cb0434a Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 16:47:52 +0200 Subject: [PATCH 13/20] Bump version after release --- plantuml-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index 99a07db..1f49cff 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -93,7 +93,7 @@ (defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") -(defconst plantuml-mode-version "1.4.0" "The plantuml-mode version string.") +(defconst plantuml-mode-version "20190821.1447" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) From a6545435cd6238ee3f410bc35b6f8408c95f8ff3 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Wed, 21 Aug 2019 17:20:22 +0200 Subject: [PATCH 14/20] Bumping java version for CI --- .circleci/config.yml | 2 +- plantuml-mode.el | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 51d2661..f9d2e95 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,7 +14,7 @@ default: &default-steps command: apt-get update - run: name: Install prerequisites - command: apt-get install -y openjdk-8-jre make python git + command: apt-get install -y openjdk-11-jre make python git - run: name: Install cask command: curl -fsSL https://raw.githubusercontent.com/cask/cask/master/go | python diff --git a/plantuml-mode.el b/plantuml-mode.el index 1f49cff..a44d129 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -93,7 +93,7 @@ (defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") -(defconst plantuml-mode-version "20190821.1447" "The plantuml-mode version string.") +(defconst plantuml-mode-version "20190821.1520" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) From 2954c153226273027a96bce4b10c35dbf71b0712 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Thu, 22 Aug 2019 11:31:36 +0200 Subject: [PATCH 15/20] Fix emacs 26 build --- .circleci/config.yml | 14 +++++++------- plantuml-mode.el | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f9d2e95..82fc6ba 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,18 +3,18 @@ version: 2.0 # Default actions to perform on each Emacs version default: &default-steps steps: - - 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-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: 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 diff --git a/plantuml-mode.el b/plantuml-mode.el index a44d129..8d1aacf 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -93,7 +93,7 @@ (defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") -(defconst plantuml-mode-version "20190821.1520" "The plantuml-mode version string.") +(defconst plantuml-mode-version "20190822.931" "The plantuml-mode version string.") (defvar plantuml-mode-debug-enabled nil) From 4349011ed7b83043f56b074d23a1b0e9adb42311 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Thu, 22 Aug 2019 16:03:53 +0200 Subject: [PATCH 16/20] Aesthitics, just aesthetics --- README.md | 1 - plantuml-mode.el | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index ced20a5..1586899 100644 --- a/README.md +++ b/README.md @@ -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 Date: Sun, 25 Aug 2019 10:37:51 +0200 Subject: [PATCH 17/20] Trying to re-enable builds against Emacs master --- .circleci/config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 82fc6ba..d987612 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,5 +52,4 @@ workflows: jobs: - test-emacs-25 - test-emacs-26 - # Testing against master currently hangs on CircleCI - #- test-emacs-master + - test-emacs-master From 252e2c3ce8ec3d17543c4e372f0686903fd2d77e Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Sun, 25 Aug 2019 11:03:29 +0200 Subject: [PATCH 18/20] Disabling master again --- .circleci/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d987612..eca1b0c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,4 +52,5 @@ workflows: jobs: - test-emacs-25 - test-emacs-26 - - test-emacs-master + # Testing against master currently hangs on CircleCI + # - test-emacs-master From 4f899a4495cb789ace0aed1fafb7133d86b9668b Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Fri, 30 Aug 2019 22:54:26 +0200 Subject: [PATCH 19/20] 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 --- plantuml-mode.el | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plantuml-mode.el b/plantuml-mode.el index c4211fb..78cf878 100644 --- a/plantuml-mode.el +++ b/plantuml-mode.el @@ -406,13 +406,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 t)))) + (let* ((url-request-location (plantuml-server-encode-url string))) (save-current-buffer (save-match-data (url-retrieve url-request-location From bea66129a9c75d122708d308793d9a4891ef60c8 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Tue, 3 Sep 2019 23:12:48 +0200 Subject: [PATCH 20/20] Fix note syntax in tests --- test/plantuml-indentation-notes-test.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/plantuml-indentation-notes-test.el b/test/plantuml-indentation-notes-test.el index b58f2b4..337d18b 100644 --- a/test/plantuml-indentation-notes-test.el +++ b/test/plantuml-indentation-notes-test.el @@ -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 "