diff --git a/elpa/plantuml-mode-20161016.757/plantuml-mode-autoloads.el b/elpa/plantuml-mode-20161016.757/plantuml-mode-autoloads.el new file mode 100644 index 0000000..9796f75 --- /dev/null +++ b/elpa/plantuml-mode-20161016.757/plantuml-mode-autoloads.el @@ -0,0 +1,27 @@ +;;; plantuml-mode-autoloads.el --- automatically extracted autoloads +;; +;;; Code: +(add-to-list 'load-path (directory-file-name (or (file-name-directory #$) (car load-path)))) + +;;;### (autoloads nil "plantuml-mode" "plantuml-mode.el" (22532 57027 +;;;;;; 900440 338000)) +;;; Generated autoloads from plantuml-mode.el + +(add-to-list 'auto-mode-alist '("\\.(plantuml|pum|plantuml|plu)$" . plantuml-mode)) + +(autoload 'plantuml-mode "plantuml-mode" "\ +Major mode for plantuml. + +Shortcuts Command Name +\\[plantuml-complete-symbol] `plantuml-complete-symbol' + +\(fn)" t nil) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; End: +;;; plantuml-mode-autoloads.el ends here diff --git a/elpa/plantuml-mode-20161016.757/plantuml-mode-pkg.el b/elpa/plantuml-mode-20161016.757/plantuml-mode-pkg.el new file mode 100644 index 0000000..36dabbe --- /dev/null +++ b/elpa/plantuml-mode-20161016.757/plantuml-mode-pkg.el @@ -0,0 +1,2 @@ +;;; -*- no-byte-compile: t -*- +(define-package "plantuml-mode" "20161016.757" "Major mode for PlantUML" '((emacs "24")) :keywords '("uml" "plantuml" "ascii")) diff --git a/elpa/plantuml-mode-20161016.757/plantuml-mode.el b/elpa/plantuml-mode-20161016.757/plantuml-mode.el new file mode 100644 index 0000000..795e715 --- /dev/null +++ b/elpa/plantuml-mode-20161016.757/plantuml-mode.el @@ -0,0 +1,365 @@ +;;; plantuml-mode.el --- Major mode for PlantUML -*- lexical-binding: t; -*- + +;; Filename: plantuml-mode.el +;; Description: Major mode for PlantUML diagrams sources +;; Compatibility: Tested with Emacs 24.3 through 24.5 on OS X 10.10 +;; Author: Zhang Weize (zwz) +;; Maintainer: Carlo Sciolla (skuro) +;; Keywords: uml plantuml ascii +;; Package-Version: 20161016.757 +;; Version: 0.6.8 +;; Package-Requires: ((emacs "24")) + +;; You can redistribute this program and/or modify it under the terms +;; of the GNU General Public License as published by the Free Software +;; Foundation; either version 2 +;; NOTE: licensing fixed to GPLv2 as per original author comment + +;;; Commentary: +;; +;; A major mode for plantuml, see: http://plantuml.sourceforge.net/ +;; Plantuml is an open-source tool in java that allows to quickly write : +;; - sequence diagram, +;; - use case diagram, +;; - class diagram, +;; - activity diagram, +;; - component diagram, +;; - state diagram +;; - object diagram + +;;; Change log: +;; +;; version 0.6.8, 2016-10-16 Moved the mode to plantuml-mode, superseding zwz/plantuml-mode and skuro/puml-mode. Added preview for the currently selected region. +;; version 0.6.7, 2016-10-11 [from puml-mode] Added deprecation warning in favor of plantuml-mode +;; version 0.6.6, 2016-07-19 [from puml-mode] Added autoload, minor bug fixes +;; version 0.6.5, 2016-03-24 [from puml-mode] Added UTF8 support and open in new window / frame shortcuts +;; version 0.6.4, 2015-12-12 [from puml-mode] Added support for comments (single and multiline) -- thanks to https://github.com/nivekuil +;; version 0.6.3, 2015-11-07 [from puml-mode] Added per-buffer configurability of output type (thanks to https://github.com/davazp) +;; version 0.6.2, 2015-11-07 [from puml-mode] Added debugging capabilities to improve issue analysis +;; version 0.6.1, 2015-09-26 [from puml-mode] Bugfix: use eq to compare symbols instead of cl-equalp +;; version 0.6, 2015-09-26 [from puml-mode] Fixed PNG preview +;; version 0.5, 2015-09-21 [from puml-mode] Added preview capabilities +;; version 0.4, 2015-06-14 [from puml-mode] Use a puml- prefix to distinguish from the other plantuml-mode +;; version 0.3, 2015-06-13 [from puml-mode] Compatibility with Emacs 24.x +;; version 0.2, 2010-09-20 [from puml-mode] Initialize the keywords from the -language output of plantuml.jar instead of the hard-coded way. +;; version 0.1, 2010-08-25 [from puml-mode] First version + +;;; Code: +(require 'thingatpt) + +(defgroup plantuml-mode nil + "Major mode for editing plantuml file." + :group 'languages) + +(defcustom plantuml-jar-path + (expand-file-name "~/plantuml.jar") + "The location of the PlantUML executable JAR.") + +(defvar plantuml-mode-hook nil "Standard hook for plantuml-mode.") + +(defconst plantuml-mode-version "0.6.8" "The plantuml-mode version string.") + +(defvar plantuml-mode-debug-enabled nil) + +(defvar plantuml-font-lock-keywords nil) + +(defvar plantuml-mode-map + (let ((keymap (make-sparse-keymap))) + (define-key keymap (kbd "C-c C-c") 'plantuml-preview) + keymap) + "Keymap for plantuml-mode.") + +(defcustom plantuml-java-command "java" "The java command used to execute PlantUML.") + +(defcustom plantuml-suppress-deprecation-warning t "To silence the deprecation warning when `puml-mode' is found upon loading.") + +(defvar plantuml-run-command (concat plantuml-java-command " -jar %s")) + +(defun plantuml-render-command (&rest arguments) + "Create a command line to execute PlantUML with arguments (as ARGUMENTS)." + (let ((cmd (format plantuml-run-command (shell-quote-argument plantuml-jar-path))) + (argstring (mapconcat 'shell-quote-argument arguments " "))) + (concat cmd " " argstring))) + +;;; syntax table +(defvar plantuml-mode-syntax-table + (let ((synTable (make-syntax-table))) + (modify-syntax-entry ?\/ ". 41" synTable) + (modify-syntax-entry ?' "! 23b" synTable) + (modify-syntax-entry ?\n ">" synTable) + (modify-syntax-entry ?\r ">" synTable) + (modify-syntax-entry ?! "w" synTable) + (modify-syntax-entry ?@ "w" synTable) + (modify-syntax-entry ?# "'" synTable) + synTable) + "Syntax table for `plantuml-mode'.") + +(defvar plantuml-types nil) +(defvar plantuml-keywords nil) +(defvar plantuml-preprocessors nil) +(defvar plantuml-builtins nil) + +;; keyword completion +(defvar plantuml-kwdList nil "The plantuml keywords.") + +(defun plantuml-enable-debug () + "Enables debug messages into the *PLANTUML Messages* buffer." + (interactive) + (setq plantuml-mode-debug-enabled t)) + +(defun plantuml-disable-debug () + "Stops any debug messages to be added into the *PLANTUML Messages* buffer." + (interactive) + (setq plantuml-mode-debug-enabled nil)) + +(defun plantuml-debug (msg) + "Writes msg (as MSG) into the *PLANTUML Messages* buffer without annoying the user." + (if plantuml-mode-debug-enabled + (let* ((log-buffer-name "*PLANTUML Messages*") + (log-buffer (get-buffer-create log-buffer-name))) + (save-excursion + (with-current-buffer log-buffer + (goto-char (point-max)) + (insert msg) + (insert "\n")))))) + +(defun plantuml-init () + "Initialize the keywords or builtins from the cmdline language output." + (unless (file-exists-p plantuml-jar-path) + (error "Could not find plantuml.jar at %s" plantuml-jar-path)) + (with-temp-buffer + (shell-command (plantuml-render-command "-charset UTF-8 -language") (current-buffer)) + (goto-char (point-min)) + (let ((found (search-forward ";" nil t)) + (word "") + (count 0) + (pos 0)) + (while found + (forward-char) + (setq word (current-word)) + (if (string= word "EOF") (setq found nil) + ;; else + (forward-line) + (setq count (string-to-number (current-word))) + (beginning-of-line 2) + (setq pos (point)) + (forward-line count) + (cond ((string= word "type") + (setq plantuml-types + (split-string + (buffer-substring-no-properties pos (point))))) + ((string= word "keyword") + (setq plantuml-keywords + (split-string + (buffer-substring-no-properties pos (point))))) + ((string= word "preprocessor") + (setq plantuml-preprocessors + (split-string + (buffer-substring-no-properties pos (point))))) + (t (setq plantuml-builtins + (append + plantuml-builtins + (split-string + (buffer-substring-no-properties pos (point))))))) + (setq found (search-forward ";" nil nil))))))) + +(defconst plantuml-preview-buffer "*PLANTUML Preview*") + +(defvar plantuml-output-type + (if (not (display-images-p)) + "utxt" + (cond ((image-type-available-p 'svg) "svg") + ((image-type-available-p 'png) "png") + (t "utxt"))) + "Specify the desired output type to use for generated diagrams.") + +(defun plantuml-read-output-type () + "Read from the minibuffer a output type." + (let* ((completion-ignore-case t) + (available-types + (append + (and (image-type-available-p 'svg) '("svg")) + (and (image-type-available-p 'png) '("png")) + '("utxt")))) + (completing-read (format "Output type [%s]: " plantuml-output-type) + available-types + nil + t + nil + nil + plantuml-output-type))) + +(defun plantuml-set-output-type (type) + "Set the desired output type (as TYPE) for the current buffer. +If the +major mode of the current buffer mode is not plantuml-mode, set the +default output type for new buffers." + (interactive (list (plantuml-read-output-type))) + (setq plantuml-output-type type)) + +(defun plantuml-is-image-output-p () + "Return true if the diagram output format is an image, false if it's text based." + (not (equal "utxt" plantuml-output-type))) + +(defun plantuml-output-type-opt () + "Create the flag to pass to PlantUML to produce the selected output format." + (concat "-t" plantuml-output-type)) + +(defun plantuml-preview-string (prefix string) + "Preview diagram from PlantUML sources (as STRING), using prefix (as PREFIX) +to choose where to display it: +- 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 ((b (get-buffer plantuml-preview-buffer))) + (when b + (kill-buffer b))) + + (let* ((imagep (and (display-images-p) + (plantuml-is-image-output-p))) + (process-connection-type nil) + (buf (get-buffer-create plantuml-preview-buffer)) + (coding-system-for-read (and imagep 'binary)) + (coding-system-for-write (and imagep 'binary))) + + (let ((ps (start-process "PLANTUML" buf + plantuml-java-command "-jar" (shell-quote-argument plantuml-jar-path) + (plantuml-output-type-opt) "-p"))) + (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)) + (cond + ((= prefix 16) + (switch-to-buffer-other-frame plantuml-preview-buffer)) + ((= prefix 4) + (switch-to-buffer-other-window plantuml-preview-buffer)) + (t (switch-to-buffer plantuml-preview-buffer))) + (when imagep + (image-mode) + (set-buffer-multibyte t))))))) + +(defun plantuml-preview-buffer (prefix) + "Preview diagram from the PlantUML sources in the current buffer. +Uses prefix (as PREFIX) to choose where to display it: +- 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" + (interactive "p") + (plantuml-preview-string prefix (buffer-string))) + +(defun plantuml-preview-region (prefix) + "Preview diagram from the PlantUML sources in the current region. +Uses prefix (as PREFIX) to choose where to display it: +- 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" + (interactive "p") + (plantuml-preview-string prefix (concat "@startuml\n" + (buffer-substring-no-properties + (region-beginning) (region-end)) + "\n@enduml"))) + +(defun plantuml-preview (prefix) + "Preview diagram from the PlantUML sources. +Uses the current region if one is active, or the entire buffer otherwise. +Uses prefix (as PREFIX) to choose where to display it: +- 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" + (interactive "p") + (if mark-active + (plantuml-preview-region prefix) + (plantuml-preview-buffer prefix))) + +(unless plantuml-kwdList + (plantuml-init) + (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\\)\\)\\>\\)")) + (defvar plantuml-keywords-regexp (concat "^\\s *" (regexp-opt plantuml-keywords 'words) "\\|\\(<\\|<|\\|\\*\\|o\\)\\(\\.+\\|-+\\)\\|\\(\\.+\\|-+\\)\\(>\\||>\\|\\*\\|o\\)\\|\\.\\{2,\\}\\|-\\{2,\\}")) + (defvar plantuml-builtins-regexp (regexp-opt plantuml-builtins 'words)) + (defvar plantuml-preprocessors-regexp (concat "^\\s *" (regexp-opt plantuml-preprocessors 'words))) + + (setq plantuml-font-lock-keywords + `( + (,plantuml-types-regexp . font-lock-type-face) + (,plantuml-keywords-regexp . font-lock-keyword-face) + (,plantuml-builtins-regexp . font-lock-builtin-face) + (,plantuml-preprocessors-regexp . font-lock-preprocessor-face) + ;; note: order matters + )) + + (setq plantuml-kwdList (make-hash-table :test 'equal)) + (mapc (lambda (x) (puthash x t plantuml-kwdList)) plantuml-types) + (mapc (lambda (x) (puthash x t plantuml-kwdList)) plantuml-keywords) + (mapc (lambda (x) (puthash x t plantuml-kwdList)) plantuml-builtins) + (mapc (lambda (x) (puthash x t plantuml-kwdList)) plantuml-preprocessors) + (put 'plantuml-kwdList 'risky-local-variable t) + + ;; clear memory + (setq plantuml-types nil) + (setq plantuml-keywords nil) + (setq plantuml-builtins nil) + (setq plantuml-preprocessors nil) + (setq plantuml-types-regexp nil) + (setq plantuml-keywords-regexp nil) + (setq plantuml-builtins-regexp nil) + (setq plantuml-preprocessors-regexp nil)) + +(defun plantuml-complete-symbol () + "Perform keyword completion on word before cursor." + (interactive) + (let ((posEnd (point)) + (meat (thing-at-point 'symbol)) + maxMatchResult) + + (when (not meat) (setq meat "")) + + (setq maxMatchResult (try-completion meat plantuml-kwdList)) + (cond ((eq maxMatchResult t)) + ((null maxMatchResult) + (message "Can't find completion for \"%s\"" meat) + (ding)) + ((not (string= meat maxMatchResult)) + (delete-region (- posEnd (length meat)) posEnd) + (insert maxMatchResult)) + (t (message "Making completion list...") + (with-output-to-temp-buffer "*Completions*" + (display-completion-list + (all-completions meat plantuml-kwdList))) + (message "Making completion list...%s" "done"))))) + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.(plantuml|pum|plantuml|plu)$" . plantuml-mode)) + +;;;###autoload +(define-derived-mode plantuml-mode prog-mode "plantuml" + "Major mode for plantuml. + +Shortcuts Command Name +\\[plantuml-complete-symbol] `plantuml-complete-symbol'" + (make-local-variable 'plantuml-output-type) + (set (make-local-variable 'comment-start-skip) "\\('+\\|/'+\\)\\s *") + (set (make-local-variable 'comment-start) "/'") + (set (make-local-variable 'comment-end) "'/") + (set (make-local-variable 'comment-multi-line) t) + (set (make-local-variable 'comment-style) 'extra-line) + (setq font-lock-defaults '((plantuml-font-lock-keywords) nil t)) + + ; Run hooks: + (run-mode-hooks 'plantuml-mode-hook)) + +(defun plantuml-deprecation-warning () + "Warns the user about the deprecation of the `puml-mode' project." + (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. \ +See more at https://github.com/skuro/puml-mode/issues/26"))) + +(add-hook 'plantuml-mode-hook 'plantuml-deprecation-warning) + +(provide 'plantuml-mode) +;;; plantuml-mode.el ends here diff --git a/init.el b/init.el index 924156d..7ccb619 100644 --- a/init.el +++ b/init.el @@ -105,6 +105,7 @@ org-bullets org-projectile origami + plantuml-mode projectile sass-mode smart-mode-line @@ -507,6 +508,8 @@ ediff-split-window-function 'split-window-vertically ediff-window-setup-function 'ediff-setup-windows-plain)) +(use-package plantuml-mode) + ;; Load my own functions (load "gnu-c-header.el") (load "toggle-window-split.el")