<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>zwz&#039;s Blog</title>
	<atom:link href="https://zhangweize.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://zhangweize.wordpress.com</link>
	<description>Just another WordPress.com site</description>
	<lastBuildDate>Fri, 25 Jan 2013 21:58:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='zhangweize.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://s2.wp.com/i/buttonw-com.png</url>
		<title>zwz&#039;s Blog</title>
		<link>https://zhangweize.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://zhangweize.wordpress.com/osd.xml" title="zwz&#039;s Blog" />
	<atom:link rel='hub' href='https://zhangweize.wordpress.com/?pushpress=hub'/>
		<item>
		<title>update plantuml-mode</title>
		<link>https://zhangweize.wordpress.com/2010/09/20/update-plantuml-mode/</link>
		<comments>https://zhangweize.wordpress.com/2010/09/20/update-plantuml-mode/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 14:22:00 +0000</pubDate>
		<dc:creator>zhangweize</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[@home]]></category>
		<category><![CDATA[@lab]]></category>
		<category><![CDATA[@zju]]></category>
		<category><![CDATA[exclude]]></category>
		<category><![CDATA[PhD]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[reading]]></category>
		<category><![CDATA[SELECT]]></category>
		<category><![CDATA[summary]]></category>
		<category><![CDATA[trifle]]></category>
		<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://zhangweize.wordpress.com/2010/09/20/update-plantuml-mode/</guid>
		<description><![CDATA[As plantuml.jar has added a new option &#8220;-language&#8221; which shows the keywords/builtins used in plantuml, the new plantuml-mode tries to take advantage of this feature. Here it is ;; plantuml-mode.el -- Major mode for plantuml ;; Author: Zhang Weize (zwz) &#8230; <a href="https://zhangweize.wordpress.com/2010/09/20/update-plantuml-mode/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=14&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>As plantuml.jar has added a new option &#8220;-language&#8221; which shows the keywords/builtins used in plantuml, the new plantuml-mode tries to take advantage of this feature. Here it is </p>
<pre class="src src-emacs-lisp"><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">plantuml-mode.el -- Major mode for plantuml
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Author: Zhang Weize (zwz)
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Keywords: uml ascii
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">You can redistribute this program and/or modify it under the terms
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">of the GNU General Public License as published by the Free Software
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Foundation; either version 2, or (at your option) any later
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">version.
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">DESCRIPTION
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">A major mode for plantuml, see: http://plantuml.sourceforge.net/
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Plantuml is an open-source tool in java that allows to quickly write :
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- sequence diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- use case diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- class diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- activity diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- component diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- state diagram
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- object diagram
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">using a simple and intuitive language.
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">HISTORY
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">version 0.2, 2010-09-20 Initialize the keywords from the -language output of plantuml.jar instead of the hard-coded way.
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">version 0.1, 2010-08-25 First version
</span>

(<span style="color:#ee3b3b;">require</span> '<span style="color:#9acd32;">thingatpt</span>)

(<span style="color:#ee3b3b;">defgroup</span> <span style="color:#ff00ff;font-style:italic;">plantuml-mode</span> nil
  <span style="color:#ffa07a;">"Major mode for editing plantuml file."</span>
  <span style="color:#ffd700;">:group</span> 'languages)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-jar-path</span> (expand-file-name <span style="color:#7cfc00;">"~/plantuml.jar"</span>))

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-hook</span> nil <span style="color:#ffa07a;">"Standard hook for plantuml-mode."</span>)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-version</span> nil <span style="color:#ffa07a;">"plantuml-mode version string."</span>)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-map</span> nil <span style="color:#ffa07a;">"Keymap for plantuml-mode"</span>)

<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">syntax table
</span>(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-syntax-table</span>
  (<span style="color:#ee3b3b;">let</span> ((synTable (make-syntax-table)))
    (modify-syntax-entry ?' <span style="color:#7cfc00;">"&lt; b"</span> synTable)
    (modify-syntax-entry ?\n <span style="color:#7cfc00;">"&gt; b"</span> synTable)
    (modify-syntax-entry ?! <span style="color:#7cfc00;">"w"</span> synTable)
    (modify-syntax-entry ?@ <span style="color:#7cfc00;">"w"</span> synTable)
    (modify-syntax-entry ?# <span style="color:#7cfc00;">"'"</span> synTable)
    synTable)
  <span style="color:#ffa07a;">"Syntax table for `</span><span style="color:#9acd32;">plantuml-mode</span><span style="color:#ffa07a;">'."</span>)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-types</span> nil)
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-keywords</span> nil)
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-preprocessors</span> nil)
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-builtins</span> nil)

<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">keyword completion
</span>(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-kwdList</span> nil <span style="color:#ffa07a;">"plantuml keywords."</span>)

<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">font-lock
</span>
(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">plantuml-init</span> ()
  <span style="color:#ffa07a;">"Initialize the keywords or builtins from the cmdline language output"</span>
  (<span style="color:#ee3b3b;">unless</span> (file-exists-p plantuml-jar-path)
    (<span style="color:#ff0000;">error</span> <span style="color:#7cfc00;">"Could not find plantuml.jar at %s"</span> plantuml-jar-path))
  (<span style="color:#ee3b3b;">with-temp-buffer</span>
    (shell-command (concat <span style="color:#7cfc00;">"java -jar "</span>
                           (shell-quote-argument plantuml-jar-path)
                           <span style="color:#7cfc00;">" -language"</span>) (current-buffer))
    (goto-char (point-min))
    (<span style="color:#ee3b3b;">let</span> ((found (search-forward <span style="color:#7cfc00;">";"</span> nil nil))
          (word <span style="color:#7cfc00;">""</span>)
          (count 0)
          (pos 0))
      (<span style="color:#ee3b3b;">while</span> found
        (forward-char)
        (setq word (current-word))
        (<span style="color:#ee3b3b;">if</span> (string= word <span style="color:#7cfc00;">"EOF"</span>) (setq found nil)
            <span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">else
</span>            (forward-line)
            (setq count (string-to-number (current-word)))
            (beginning-of-line 2)
            (setq pos (point))
            (forward-line count)
            (<span style="color:#ee3b3b;">cond</span> ((string= word <span style="color:#7cfc00;">"type"</span>)
                   (setq plantuml-types
                     (split-string
                      (buffer-substring-no-properties pos (point)))))
                  ((string= word <span style="color:#7cfc00;">"keyword"</span>)
                   (setq plantuml-keywords
                     (split-string
                      (buffer-substring-no-properties pos (point)))))
                  ((string= word <span style="color:#7cfc00;">"preprocessor"</span>)
                   (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)))))))
<span style="color:#00cdcd;font-style:italic;">;;                  </span><span style="color:#00cdcd;font-style:italic;">((string= word "skinparameter")
</span><span style="color:#00cdcd;font-style:italic;">;;                  </span><span style="color:#00cdcd;font-style:italic;">((string= word "color")))
</span>            (setq found (search-forward <span style="color:#7cfc00;">";"</span> nil nil)))))))

(<span style="color:#ee3b3b;">unless</span> plantuml-kwdList
  (plantuml-init)
  (<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-types-regexp</span> (concat <span style="color:#7cfc00;">"^\\s *</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">"</span> (regexp-opt plantuml-types 'words) <span style="color:#7cfc00;">"</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\&lt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">note\\s +over</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">note\\s +</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">left</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">right</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">bottom</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">top</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\s +</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">of</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">?</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\&lt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">left</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">center</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">right</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\s +</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">header</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">footer</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">"</span>))
  (<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-keywords-regexp</span> (concat <span style="color:#7cfc00;">"^\\s *"</span> (regexp-opt plantuml-keywords 'words)  <span style="color:#7cfc00;">"</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">&lt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">&lt;|</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\*</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">o</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">\\.+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">-+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">\\.+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">-+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">|&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\*</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">o</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\.\\{2,\\}</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">-\\{2,\\}"</span>))
  (<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-builtins-regexp</span> (regexp-opt plantuml-builtins 'words))
  (<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-preprocessors-regexp</span> (concat <span style="color:#7cfc00;">"^\\s *"</span> (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)
          <span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">note: order matters
</span>          ))



  (setq plantuml-kwdList (make-hash-table <span style="color:#ffd700;">:test</span> 'equal))
  (mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-types)
  (mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-keywords)
  (mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-builtins)
  (mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-preprocessors)
  (put 'plantuml-kwdList 'risky-local-variable t)

  <span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">clear memory
</span>  (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))

(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">plantuml-complete-symbol</span> ()
  <span style="color:#ffa07a;">"Perform keyword completion on word before cursor."</span>
  (interactive)
  (<span style="color:#ee3b3b;">let</span> ((posEnd (point))
        (meat (thing-at-point 'symbol))
        maxMatchResult)

    (<span style="color:#ee3b3b;">when</span> (not meat) (setq meat <span style="color:#7cfc00;">""</span>))

    (setq maxMatchResult (try-completion meat plantuml-kwdList))
    (<span style="color:#ee3b3b;">cond</span> ((eq maxMatchResult t))
          ((null maxMatchResult)
           (message <span style="color:#7cfc00;">"Can't find completion for \"%s\""</span> meat)
           (ding))
          ((not (string= meat maxMatchResult))
           (delete-region (- posEnd (length meat)) posEnd)
           (insert maxMatchResult))
          (t (message <span style="color:#7cfc00;">"Making completion list..."</span>)
             (<span style="color:#ee3b3b;">with-output-to-temp-buffer</span> <span style="color:#7cfc00;">"*Completions*"</span>
               (display-completion-list
                (all-completions meat plantuml-kwdList)
                meat))
             (message <span style="color:#7cfc00;">"Making completion list...%s"</span> <span style="color:#7cfc00;">"done"</span>)))))

(add-to-list 'auto-mode-alist '(<span style="color:#7cfc00;">"\\.plu$"</span> . plantuml-mode))

<span style="color:#00cdcd;font-style:italic;">;;;</span><span style="color:#00cdcd;font-style:italic;">###</span><span style="color:#ff0000;font-style:italic;">autoload</span><span style="color:#00cdcd;font-style:italic;">
</span>(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">plantuml-mode</span> ()
  <span style="color:#ffa07a;">"Major mode for plantuml.

Shortcuts             Command Name
\\[</span><span style="color:#9acd32;">plantuml-complete-symbol</span><span style="color:#ffa07a;">]      `</span><span style="color:#9acd32;">plantuml-complete-symbol</span><span style="color:#ffa07a;">'"</span>

  (interactive)
  (kill-all-local-variables)

<span style="color:#00cdcd;font-style:italic;">;;  </span><span style="color:#00cdcd;font-style:italic;">(python-mode) ; for indentation
</span>  (setq major-mode 'plantuml-mode
        mode-name <span style="color:#7cfc00;">"plantuml"</span>)
  (set-syntax-table plantuml-mode-syntax-table)
  (use-local-map plantuml-mode-map)

  (make-local-variable 'font-lock-defaults)
  (setq font-lock-defaults '((plantuml-font-lock-keywords) nil t))

  (run-mode-hooks 'plantuml-mode-hook))

(<span style="color:#ee3b3b;">provide</span> '<span style="color:#9acd32;">plantuml-mode</span>)

</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zhangweize.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zhangweize.wordpress.com/14/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=14&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://zhangweize.wordpress.com/2010/09/20/update-plantuml-mode/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/6a7fc3211b46f5b69014264e82152f35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zhangweize</media:title>
		</media:content>
	</item>
		<item>
		<title>A new version of ob-plantuml</title>
		<link>https://zhangweize.wordpress.com/2010/08/27/a-new-version-of-ob-plantuml/</link>
		<comments>https://zhangweize.wordpress.com/2010/08/27/a-new-version-of-ob-plantuml/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 15:38:00 +0000</pubDate>
		<dc:creator>zhangweize</dc:creator>
				<category><![CDATA[emacs]]></category>
		<category><![CDATA[org-babel]]></category>
		<category><![CDATA[plantuml]]></category>

		<guid isPermaLink="false">http://zhangweize.wordpress.com/2010/08/27/a-new-version-of-ob-plantuml/</guid>
		<description><![CDATA[Great news: ob-plantuml has been accepted as a part of org-babel in its git repository. Here is the new version of it: ;;; ob-plantuml.el --- org-babel functions for plantuml evaluation ;; Author: Zhang Weize ;;; Commentary: ;; Org-Babel support for &#8230; <a href="https://zhangweize.wordpress.com/2010/08/27/a-new-version-of-ob-plantuml/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=11&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Great news: ob-plantuml has been accepted as a part of org-babel in its git repository.</p>
<p>Here is the new version of it:</p>
<pre class="src src-emacs-lisp"><span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">ob-plantuml.el --- org-babel functions for plantuml evaluation
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Author: Zhang Weize
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">Commentary:
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Org-Babel support for evaluating plantuml script.
</span><span style="color:#00cdcd;font-style:italic;">;;</span><span style="color:#00cdcd;font-style:italic;">
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Inspired by Ian Yang's org-export-blocks-format-plantuml
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">http://www.emacswiki.org/emacs/org-export-blocks-format-plantuml.el
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">Code:
</span>(<span style="color:#ee3b3b;">require</span> '<span style="color:#9acd32;">ob</span>)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">org-babel-default-header-args:plantuml</span>
  '((<span style="color:#ffd700;">:results</span> . <span style="color:#7cfc00;">"file"</span>) (<span style="color:#ffd700;">:exports</span> . <span style="color:#7cfc00;">"results"</span>))
  <span style="color:#ffa07a;">"Default arguments for evaluating a plantuml source block."</span>)

(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">org-babel-expand-body:plantuml</span> (body params <span style="color:#ff00ff;font-style:italic;">&amp;optional</span> processed-params)
  <span style="color:#ffa07a;">"Expand BODY according to PARAMS, return the expanded body."</span> body)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">org-plantuml-jar-path</span>)
(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">org-babel-execute:plantuml</span> (body params)
  <span style="color:#ffa07a;">"Execute a block of plantuml code with org-babel.
This function is called by `</span><span style="color:#9acd32;">org-babel-execute-src-block</span><span style="color:#ffa07a;">'."</span>
  (<span style="color:#ee3b3b;">let</span> ((result-params (split-string (or (cdr (assoc <span style="color:#ffd700;">:results</span> params)) <span style="color:#7cfc00;">""</span>)))
        (out-file (cdr (assoc <span style="color:#ffd700;">:file</span> params)))
        (cmdline (cdr (assoc <span style="color:#ffd700;">:cmdline</span> params)))
        (in-file (make-temp-file <span style="color:#7cfc00;">"org-babel-plantuml"</span>)))
    (<span style="color:#ee3b3b;">unless</span> (file-exists-p org-plantuml-jar-path)
      (<span style="color:#ff0000;">error</span> <span style="color:#7cfc00;">"Could not find plantuml.jar at %s"</span> org-plantuml-jar-path))
    (<span style="color:#ee3b3b;">with-temp-file</span> in-file (insert (concat <span style="color:#7cfc00;">"@startuml\n"</span> body <span style="color:#7cfc00;">"\n@enduml"</span>)))
    (message (concat <span style="color:#7cfc00;">"java -jar "</span> org-plantuml-jar-path
                     <span style="color:#7cfc00;">" -p "</span> cmdline <span style="color:#7cfc00;">" &lt; "</span> in-file <span style="color:#7cfc00;">" &gt; "</span> out-file))
    (shell-command (concat <span style="color:#7cfc00;">"java -jar "</span> (shell-quote-argument org-plantuml-jar-path)
                           <span style="color:#7cfc00;">" -p "</span> cmdline <span style="color:#7cfc00;">" &lt; "</span> in-file <span style="color:#7cfc00;">" &gt; "</span> out-file))
    <span style="color:#00cdcd;font-style:italic;">; </span><span style="color:#00cdcd;font-style:italic;">The method below will produce error when exporting the buffer.
</span>    <span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">(with-temp-buffer
</span>    <span style="color:#00cdcd;font-style:italic;">;;   </span><span style="color:#00cdcd;font-style:italic;">(call-process-shell-command
</span>    <span style="color:#00cdcd;font-style:italic;">;;    </span><span style="color:#00cdcd;font-style:italic;">(concat "java -jar " org-plantuml-jar-path " -p " cmdline)
</span>    <span style="color:#00cdcd;font-style:italic;">;;    </span><span style="color:#00cdcd;font-style:italic;">in-file
</span>    <span style="color:#00cdcd;font-style:italic;">;;    </span><span style="color:#00cdcd;font-style:italic;">'(t nil))
</span>    <span style="color:#00cdcd;font-style:italic;">;;   </span><span style="color:#00cdcd;font-style:italic;">(write-region nil nil out-file))
</span>    out-file))

(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">org-babel-prep-session:plantuml</span> (session params)
  <span style="color:#ffa07a;">"Return an error because plantuml does not support sessions."</span>
  (<span style="color:#ff0000;">error</span> <span style="color:#7cfc00;">"Plantuml does not support sessions"</span>))

(<span style="color:#ee3b3b;">provide</span> '<span style="color:#9acd32;">ob-plantuml</span>)

<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">ob-plantuml.el ends here
</span></pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zhangweize.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zhangweize.wordpress.com/11/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=11&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://zhangweize.wordpress.com/2010/08/27/a-new-version-of-ob-plantuml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/6a7fc3211b46f5b69014264e82152f35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zhangweize</media:title>
		</media:content>
	</item>
		<item>
		<title>Creating uml images by using plantuml and org-babel in emacs</title>
		<link>https://zhangweize.wordpress.com/2010/08/25/creating-uml-images-by-using-plantuml-and-org-babel-in-emacs/</link>
		<comments>https://zhangweize.wordpress.com/2010/08/25/creating-uml-images-by-using-plantuml-and-org-babel-in-emacs/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 13:57:00 +0000</pubDate>
		<dc:creator>zhangweize</dc:creator>
				<category><![CDATA[emacs]]></category>
		<category><![CDATA[org-babel]]></category>
		<category><![CDATA[plantuml]]></category>

		<guid isPermaLink="false">http://zhangweize.wordpress.com/2010/08/25/creating-uml-images-by-using-plantuml-and-org-babel-in-emacs/</guid>
		<description><![CDATA[I came across Ian Yang&#8217;s org-export-blocks-format-plantuml a few days ago, which brought me in front of the great software Plantuml. It is an open-source tool in java that allows to quickly write: sequence diagram, use case diagram, class diagram, activity &#8230; <a href="https://zhangweize.wordpress.com/2010/08/25/creating-uml-images-by-using-plantuml-and-org-babel-in-emacs/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=5&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I came across Ian Yang&#8217;s <a href="http://www.emacswiki.org/emacs/org-export-blocks-format-plantuml.el">org-export-blocks-format-plantuml</a> a few days ago, which brought me in front of the great software <a href="http://plantuml.sourceforge.net/">Plantuml</a>. It is an open-source tool in java that allows to quickly write:</p>
<ul>
<li>sequence diagram,</li>
<li>use case diagram,</li>
<li>class diagram,</li>
<li>activity diagram,</li>
<li>component diagram,</li>
<li>state diagram</li>
<li>object diagram</li>
</ul>
<p>using a simple and intuitive language.</p>
<p>Although Ian Yang&#8217;s code has incorporated plantuml in org-mode by <code>#+BEGIN_UML</code> and <code>#+END_UML</code>, I think it should be a good idea to introduce the plantuml as a new language into org-babel.</p>
<p>Here is the &#8220;ob-plantuml.el&#8221;:</p>
<pre class="src src-emacs-lisp"><span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">ob-plantuml.el --- org-babel functions for plantuml evaluation
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Author: Zhang Weize
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Homepage: http://orgmode.org
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">Commentary:
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Org-Babel support for evaluating plantuml.
</span><span style="color:#00cdcd;font-style:italic;">;;</span><span style="color:#00cdcd;font-style:italic;">
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Some code in ob-plantuml was adopted from
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Ian Yang's org-export-blocks-format-plantuml
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">http://www.emacswiki.org/emacs/org-export-blocks-format-plantuml.el
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">Code:
</span>(<span style="color:#ee3b3b;">require</span> '<span style="color:#9acd32;">ob</span>)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">org-babel-default-header-args:plantuml</span>
  '((<span style="color:#ffd700;">:results</span> . <span style="color:#7cfc00;">"file"</span>) (<span style="color:#ffd700;">:exports</span> . <span style="color:#7cfc00;">"results"</span>))
  <span style="color:#ffa07a;">"Default arguments for evaluating a plantuml source block."</span>)

(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">org-babel-expand-body:plantuml</span> (body params <span style="color:#ff00ff;font-style:italic;">&amp;optional</span> processed-params)
  <span style="color:#ffa07a;">"Expand BODY according to PARAMS, return the expanded body."</span> body)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">org-plantuml-jar-path</span>)
(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">org-babel-execute:plantuml</span> (body params)
  <span style="color:#ffa07a;">"Execute a block of plantuml code with org-babel.
This function is called by `</span><span style="color:#9acd32;">org-babel-execute-src-block</span><span style="color:#ffa07a;">'."</span>
  (<span style="color:#ee3b3b;">let</span> ((result-params (split-string (or (cdr (assoc <span style="color:#ffd700;">:results</span> params)) <span style="color:#7cfc00;">""</span>)))
        (out-file (cdr (assoc <span style="color:#ffd700;">:file</span> params)))
        (cmdline (cdr (assoc <span style="color:#ffd700;">:cmdline</span> params)))
        (in-file (make-temp-file <span style="color:#7cfc00;">"org-babel-plantuml"</span>)))
    (<span style="color:#ee3b3b;">unless</span> (file-exists-p org-plantuml-jar-path)
      (<span style="color:#ff0000;">error</span> <span style="color:#7cfc00;">"Could not find plantuml.jar at %s"</span> org-plantuml-jar-path))
    (<span style="color:#ee3b3b;">with-temp-file</span> in-file (insert (concat <span style="color:#7cfc00;">"@startuml\n"</span> body <span style="color:#7cfc00;">"\n@enduml"</span>)))
    (message (concat <span style="color:#7cfc00;">"java -jar "</span> org-plantuml-jar-path <span style="color:#7cfc00;">" -p "</span> cmdline <span style="color:#7cfc00;">" "</span> in-file))
    (<span style="color:#ee3b3b;">with-temp-buffer</span>
      (call-process-shell-command
       (concat <span style="color:#7cfc00;">"java -jar "</span> org-plantuml-jar-path <span style="color:#7cfc00;">" -p "</span> cmdline)
       in-file
       '(t nil))
      (write-region nil nil out-file))
    out-file))

(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">org-babel-prep-session:plantuml</span> (session params)
  <span style="color:#ffa07a;">"Return an error because plantuml does not support sessions."</span>
  (<span style="color:#ff0000;">error</span> <span style="color:#7cfc00;">"Plantuml does not support sessions"</span>))

(<span style="color:#ee3b3b;">provide</span> '<span style="color:#9acd32;">ob-plantuml</span>)

<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">ob-plantuml.el ends here
</span></pre>
<p>And a new major mode &#8220;plantuml-mode.el&#8221;, which provides preliminary font-lock function for plantuml scripts:</p>
<pre class="src src-emacs-lisp"><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">plantuml-mode.el -- Major mode for plantuml
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Author: Zhang Weize (zwz)
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Keywords: uml ascii
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">You can redistribute this program and/or modify it under the terms
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">of the GNU General Public License as published by the Free Software
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Foundation; either version 2, or (at your option) any later
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">version.
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">DESCRIPTION
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">A major mode for plantuml, see: http://plantuml.sourceforge.net/
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">Plantuml is an open-source tool in java that allows to quickly write :
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- sequence diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- use case diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- class diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- activity diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- component diagram,
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- state diagram
</span><span style="color:#00cdcd;font-style:italic;">;;     </span><span style="color:#00cdcd;font-style:italic;">- object diagram
</span><span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">using a simple and intuitive language.
</span>
<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">HISTORY
</span>
<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">version 0.1, 2010-08-25 First version
</span>

(<span style="color:#ee3b3b;">require</span> '<span style="color:#9acd32;">thingatpt</span>)

(<span style="color:#ee3b3b;">defgroup</span> <span style="color:#ff00ff;font-style:italic;">plantuml-mode</span> nil
  <span style="color:#ffa07a;">"Major mode for editing plantuml file."</span>
  <span style="color:#ffd700;">:group</span> 'languages)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-hook</span> nil <span style="color:#ffa07a;">"Standard hook for plantuml-mode."</span>)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-version</span> nil <span style="color:#ffa07a;">"plantuml-mode version string."</span>)

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-map</span> nil <span style="color:#ffa07a;">"Keymap for plantuml-mode"</span>)

<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">syntax table
</span>(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-mode-syntax-table</span>
  (<span style="color:#ee3b3b;">let</span> ((synTable (make-syntax-table)))
    (modify-syntax-entry ?' <span style="color:#7cfc00;">"&lt; b"</span> synTable)
    (modify-syntax-entry ?\n <span style="color:#7cfc00;">"&gt; b"</span> synTable)
    (modify-syntax-entry ?! <span style="color:#7cfc00;">"w"</span> synTable)
    (modify-syntax-entry ?@ <span style="color:#7cfc00;">"w"</span> synTable)
    (modify-syntax-entry ?# <span style="color:#7cfc00;">"'"</span> synTable)
    synTable)
  <span style="color:#ffa07a;">"Syntax table for `</span><span style="color:#9acd32;">plantuml-mode</span><span style="color:#ffa07a;">'."</span>)

<span style="color:#00cdcd;font-style:italic;">;;; </span><span style="color:#00cdcd;font-style:italic;">font-lock
</span>(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-types</span> '(<span style="color:#7cfc00;">"participant"</span> <span style="color:#7cfc00;">"actor"</span> <span style="color:#7cfc00;">"usecase"</span> <span style="color:#7cfc00;">"abstract"</span> <span style="color:#7cfc00;">"abstract class"</span> <span style="color:#7cfc00;">"interface"</span> <span style="color:#7cfc00;">"enum"</span> <span style="color:#7cfc00;">"package"</span> <span style="color:#7cfc00;">"partition"</span> <span style="color:#7cfc00;">"component"</span> <span style="color:#7cfc00;">"state"</span> <span style="color:#7cfc00;">"object"</span> <span style="color:#7cfc00;">"title"</span> <span style="color:#7cfc00;">"note"</span> <span style="color:#7cfc00;">"end note"</span> <span style="color:#7cfc00;">"end title"</span> <span style="color:#7cfc00;">"end header"</span> <span style="color:#7cfc00;">"end footer"</span>
                         <span style="color:#00cdcd;font-style:italic;">;;</span><span style="color:#00cdcd;font-style:italic;">"note left" "note right" "note top" "note bottom" "note left of" "note right of" "note top of" "note bottom of" "note over" "left header" "center header" "right header" "left footer" "center footer" "right footer"
</span>))
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-keywords</span> '(<span style="color:#7cfc00;">"\@startuml"</span> <span style="color:#7cfc00;">"\@enduml"</span> <span style="color:#7cfc00;">"as"</span> <span style="color:#7cfc00;">"autonumber"</span> <span style="color:#7cfc00;">"newpage"</span> <span style="color:#7cfc00;">"alt"</span> <span style="color:#7cfc00;">"else"</span> <span style="color:#7cfc00;">"opt"</span> <span style="color:#7cfc00;">"loop"</span> <span style="color:#7cfc00;">"par"</span> <span style="color:#7cfc00;">"break"</span> <span style="color:#7cfc00;">"critical"</span> <span style="color:#7cfc00;">"end"</span> <span style="color:#7cfc00;">"create"</span> <span style="color:#7cfc00;">"footbox off"</span> <span style="color:#7cfc00;">"skin"</span> <span style="color:#7cfc00;">"skinparam"</span> <span style="color:#7cfc00;">"if"</span> <span style="color:#7cfc00;">"then"</span> <span style="color:#7cfc00;">"else"</span> <span style="color:#7cfc00;">"endif"</span> <span style="color:#7cfc00;">"rotate"</span> <span style="color:#7cfc00;">"activate"</span> <span style="color:#7cfc00;">"deactivate"</span> <span style="color:#7cfc00;">"destroy"</span>))

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-preprocessors</span> '(<span style="color:#7cfc00;">"!include"</span> <span style="color:#7cfc00;">"!define"</span> <span style="color:#7cfc00;">"!undef"</span> <span style="color:#7cfc00;">"!ifdef"</span> <span style="color:#7cfc00;">"!endif"</span> <span style="color:#7cfc00;">"!ifndef"</span>))

(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-builtins</span> '(<span style="color:#7cfc00;">"backgroundColor"</span>
                            <span style="color:#7cfc00;">"activityArrowColor"</span>
                            <span style="color:#7cfc00;">"activityBackgroundColor"</span>
                            <span style="color:#7cfc00;">"activityBorderColor"</span>
                            <span style="color:#7cfc00;">"activityStartColor"</span>
                            <span style="color:#7cfc00;">"activityEndColor"</span>
                            <span style="color:#7cfc00;">"activityBarColor"</span>
                            <span style="color:#7cfc00;">"usecaseArrowColor"</span>
                            <span style="color:#7cfc00;">"actorBackgroundColor"</span>
                            <span style="color:#7cfc00;">"actorBorderColor"</span>
                            <span style="color:#7cfc00;">"usecaseBackgroundColor"</span>
                            <span style="color:#7cfc00;">"usecaseBorderColor"</span>
                            <span style="color:#7cfc00;">"classArrowColor"</span>
                            <span style="color:#7cfc00;">"classBackgroundColor"</span>
                            <span style="color:#7cfc00;">"classBorderColor"</span>
                            <span style="color:#7cfc00;">"packageBackgroundColor"</span>
                            <span style="color:#7cfc00;">"packageBorderColor"</span>
                            <span style="color:#7cfc00;">"stereotypeCBackgroundColor"</span>
                            <span style="color:#7cfc00;">"stereotypeABackgroundColor"</span>
                            <span style="color:#7cfc00;">"stereotypeIBackgroundColor"</span>
                            <span style="color:#7cfc00;">"stereotypeEBackgroundColor"</span>
                            <span style="color:#7cfc00;">"componentArrowColor"</span>
                            <span style="color:#7cfc00;">"componentBackgroundColor"</span>
                            <span style="color:#7cfc00;">"componentBorderColor"</span>
                            <span style="color:#7cfc00;">"interfaceBackgroundColor"</span>
                            <span style="color:#7cfc00;">"interfaceBorderColor"</span>
                            <span style="color:#7cfc00;">"noteBackgroundColor"</span>
                            <span style="color:#7cfc00;">"noteBorderColor"</span>
                            <span style="color:#7cfc00;">"stateBackgroundColor"</span>
                            <span style="color:#7cfc00;">"stateBorderColor"</span>
                            <span style="color:#7cfc00;">"stateArrowColor"</span>
                            <span style="color:#7cfc00;">"sequenceArrowColor"</span>
                            <span style="color:#7cfc00;">"sequenceActorBackgroundColor"</span>
                            <span style="color:#7cfc00;">"sequenceActorBorderColor"</span>
                            <span style="color:#7cfc00;">"sequenceGroupBackgroundColor"</span>
                            <span style="color:#7cfc00;">"sequenceLifeLineBackgroundColor"</span>
                            <span style="color:#7cfc00;">"sequenceLifeLineBorderColor"</span>
                            <span style="color:#7cfc00;">"sequenceParticipantBackgroundColor"</span>
                            <span style="color:#7cfc00;">"sequenceParticipantBorderColor"</span>
                            <span style="color:#7cfc00;">"activityFontColor"</span>
                            <span style="color:#7cfc00;">"activityFontSize"</span>
                            <span style="color:#7cfc00;">"activityFontStyle"</span>
                            <span style="color:#7cfc00;">"activityFontName"</span>
                            <span style="color:#7cfc00;">"activityArrowFontColor"</span>
                            <span style="color:#7cfc00;">"activityArrowFontSize"</span>
                            <span style="color:#7cfc00;">"activityArrowFontStyle"</span>
                            <span style="color:#7cfc00;">"activityArrowFontName"</span>
                            <span style="color:#7cfc00;">"circledCharacterFontColor"</span>
                            <span style="color:#7cfc00;">"circledCharacterFontSize"</span>
                            <span style="color:#7cfc00;">"circledCharacterFontStyle"</span>
                            <span style="color:#7cfc00;">"circledCharacterFontName"</span>
                            <span style="color:#7cfc00;">"circledCharacterRadius"</span>
                            <span style="color:#7cfc00;">"classArrowFontColor"</span>
                            <span style="color:#7cfc00;">"classArrowFontSize"</span>
                            <span style="color:#7cfc00;">"classArrowFontStyle"</span>
                            <span style="color:#7cfc00;">"classArrowFontName"</span>
                            <span style="color:#7cfc00;">"classAttributeFontColor"</span>
                            <span style="color:#7cfc00;">"classAttributeFontSize"</span>
                            <span style="color:#7cfc00;">"classAttributeIconSize"</span>
                            <span style="color:#7cfc00;">"classAttributeFontStyle"</span>
                            <span style="color:#7cfc00;">"classAttributeFontName"</span>
                            <span style="color:#7cfc00;">"classFontColor"</span>
                            <span style="color:#7cfc00;">"classFontSize"</span>
                            <span style="color:#7cfc00;">"classFontStyle"</span>
                            <span style="color:#7cfc00;">"classFontName"</span>
                            <span style="color:#7cfc00;">"classStereotypeFontColor"</span>
                            <span style="color:#7cfc00;">"classStereotypeFontSize"</span>
                            <span style="color:#7cfc00;">"classStereotypeFontStyle"</span>
                            <span style="color:#7cfc00;">"classStereotypeFontName"</span>
                            <span style="color:#7cfc00;">"componentFontColor"</span>
                            <span style="color:#7cfc00;">"componentFontSize"</span>
                            <span style="color:#7cfc00;">"componentFontStyle"</span>
                            <span style="color:#7cfc00;">"componentFontName"</span>
                            <span style="color:#7cfc00;">"componentStereotypeFontColor"</span>
                            <span style="color:#7cfc00;">"componentStereotypeFontSize"</span>
                            <span style="color:#7cfc00;">"componentStereotypeFontStyle"</span>
                            <span style="color:#7cfc00;">"componentStereotypeFontName"</span>
                            <span style="color:#7cfc00;">"componentArrowFontColor"</span>
                            <span style="color:#7cfc00;">"componentArrowFontSize"</span>
                            <span style="color:#7cfc00;">"componentArrowFontStyle"</span>
                            <span style="color:#7cfc00;">"componentArrowFontName"</span>
                            <span style="color:#7cfc00;">"noteFontColor"</span>
                            <span style="color:#7cfc00;">"noteFontSize"</span>
                            <span style="color:#7cfc00;">"noteFontStyle"</span>
                            <span style="color:#7cfc00;">"noteFontName"</span>
                            <span style="color:#7cfc00;">"packageFontColor"</span>
                            <span style="color:#7cfc00;">"packageFontSize"</span>
                            <span style="color:#7cfc00;">"packageFontStyle"</span>
                            <span style="color:#7cfc00;">"packageFontName"</span>
                            <span style="color:#7cfc00;">"sequenceActorFontColor"</span>
                            <span style="color:#7cfc00;">"sequenceActorFontSize"</span>
                            <span style="color:#7cfc00;">"sequenceActorFontStyle"</span>
                            <span style="color:#7cfc00;">"sequenceActorFontName"</span>
                            <span style="color:#7cfc00;">"sequenceDividerFontColor"</span>
                            <span style="color:#7cfc00;">"sequenceDividerFontSize"</span>
                            <span style="color:#7cfc00;">"sequenceDividerFontStyle"</span>
                            <span style="color:#7cfc00;">"sequenceDividerFontName"</span>
                            <span style="color:#7cfc00;">"sequenceArrowFontColor"</span>
                            <span style="color:#7cfc00;">"sequenceArrowFontSize"</span>
                            <span style="color:#7cfc00;">"sequenceArrowFontStyle"</span>
                            <span style="color:#7cfc00;">"sequenceArrowFontName"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingFontColor"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingFontSize"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingFontStyle"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingFontName"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingHeaderFontColor"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingHeaderFontSize"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingHeaderFontStyle"</span>
                            <span style="color:#7cfc00;">"sequenceGroupingHeaderFontName"</span>
                            <span style="color:#7cfc00;">"sequenceParticipantFontColor"</span>
                            <span style="color:#7cfc00;">"sequenceParticipantFontSize"</span>
                            <span style="color:#7cfc00;">"sequenceParticipantFontStyle"</span>
                            <span style="color:#7cfc00;">"sequenceParticipantFontName"</span>
                            <span style="color:#7cfc00;">"sequenceTitleFontColor"</span>
                            <span style="color:#7cfc00;">"sequenceTitleFontSize"</span>
                            <span style="color:#7cfc00;">"sequenceTitleFontStyle"</span>
                            <span style="color:#7cfc00;">"sequenceTitleFontName"</span>
                            <span style="color:#7cfc00;">"titleFontColor"</span>
                            <span style="color:#7cfc00;">"titleFontSize"</span>
                            <span style="color:#7cfc00;">"titleFontStyle"</span>
                            <span style="color:#7cfc00;">"titleFontName"</span>
                            <span style="color:#7cfc00;">"stateFontColor"</span>
                            <span style="color:#7cfc00;">"stateFontSize"</span>
                            <span style="color:#7cfc00;">"stateFontStyle"</span>
                            <span style="color:#7cfc00;">"stateFontName"</span>
                            <span style="color:#7cfc00;">"stateArrowFontColor"</span>
                            <span style="color:#7cfc00;">"stateArrowFontSize"</span>
                            <span style="color:#7cfc00;">"stateArrowFontStyle"</span>
                            <span style="color:#7cfc00;">"stateArrowFontName"</span>
                            <span style="color:#7cfc00;">"usecaseFontColor"</span>
                            <span style="color:#7cfc00;">"usecaseFontSize"</span>
                            <span style="color:#7cfc00;">"usecaseFontStyle"</span>
                            <span style="color:#7cfc00;">"usecaseFontName"</span>
                            <span style="color:#7cfc00;">"usecaseStereotypeFontColor"</span>
                            <span style="color:#7cfc00;">"usecaseStereotypeFontSize"</span>
                            <span style="color:#7cfc00;">"usecaseStereotypeFontStyle"</span>
                            <span style="color:#7cfc00;">"usecaseStereotypeFontName"</span>
                            <span style="color:#7cfc00;">"usecaseActorFontColor"</span>
                            <span style="color:#7cfc00;">"usecaseActorFontSize"</span>
                            <span style="color:#7cfc00;">"usecaseActorFontStyle"</span>
                            <span style="color:#7cfc00;">"usecaseActorFontName"</span>
                            <span style="color:#7cfc00;">"usecaseActorStereotypeFontColor"</span>
                            <span style="color:#7cfc00;">"usecaseActorStereotypeFontSize"</span>
                            <span style="color:#7cfc00;">"usecaseActorStereotypeFontStyle"</span>
                            <span style="color:#7cfc00;">"usecaseActorStereotypeFontName"</span>
                            <span style="color:#7cfc00;">"usecaseArrowFontColor"</span>
                            <span style="color:#7cfc00;">"usecaseArrowFontSize"</span>
                            <span style="color:#7cfc00;">"usecaseArrowFontStyle"</span>
                            <span style="color:#7cfc00;">"usecaseArrowFontName"</span>
                            <span style="color:#7cfc00;">"footerFontColor"</span>
                            <span style="color:#7cfc00;">"footerFontSize"</span>
                            <span style="color:#7cfc00;">"footerFontStyle"</span>
                            <span style="color:#7cfc00;">"footerFontName"</span>
                            <span style="color:#7cfc00;">"headerFontColor"</span>
                            <span style="color:#7cfc00;">"headerFontSize"</span>
                            <span style="color:#7cfc00;">"headerFontStyle"</span>
                            <span style="color:#7cfc00;">"headerFontName"</span>
                            <span style="color:#7cfc00;">"AliceBlue"</span> <span style="color:#7cfc00;">"GhostWhite"</span> <span style="color:#7cfc00;">"NavajoWhite"</span>
                            <span style="color:#7cfc00;">"AntiqueWhite"</span> <span style="color:#7cfc00;">"GoldenRod"</span> <span style="color:#7cfc00;">"Navy"</span>
                            <span style="color:#7cfc00;">"Aquamarine"</span> <span style="color:#7cfc00;">"Gold"</span> <span style="color:#7cfc00;">"OldLace"</span>
                            <span style="color:#7cfc00;">"Aqua"</span> <span style="color:#7cfc00;">"Gray"</span> <span style="color:#7cfc00;">"OliveDrab"</span>
                            <span style="color:#7cfc00;">"Azure"</span> <span style="color:#7cfc00;">"GreenYellow"</span> <span style="color:#7cfc00;">"Olive"</span>
                            <span style="color:#7cfc00;">"Beige"</span> <span style="color:#7cfc00;">"Green"</span> <span style="color:#7cfc00;">"OrangeRed"</span>
                            <span style="color:#7cfc00;">"Bisque"</span> <span style="color:#7cfc00;">"HoneyDew"</span> <span style="color:#7cfc00;">"Orange"</span>
                            <span style="color:#7cfc00;">"Black"</span> <span style="color:#7cfc00;">"HotPink"</span> <span style="color:#7cfc00;">"Orchid"</span>
                            <span style="color:#7cfc00;">"BlanchedAlmond"</span> <span style="color:#7cfc00;">"IndianRed"</span> <span style="color:#7cfc00;">"PaleGoldenRod"</span>
                            <span style="color:#7cfc00;">"BlueViolet"</span> <span style="color:#7cfc00;">"Indigo"</span> <span style="color:#7cfc00;">"PaleGreen"</span>
                            <span style="color:#7cfc00;">"Blue"</span> <span style="color:#7cfc00;">"Ivory"</span> <span style="color:#7cfc00;">"PaleTurquoise"</span>
                            <span style="color:#7cfc00;">"Brown"</span> <span style="color:#7cfc00;">"Khaki"</span> <span style="color:#7cfc00;">"PaleVioletRed"</span>
                            <span style="color:#7cfc00;">"BurlyWood"</span> <span style="color:#7cfc00;">"LavenderBlush"</span> <span style="color:#7cfc00;">"PapayaWhip"</span>
                            <span style="color:#7cfc00;">"CadetBlue"</span> <span style="color:#7cfc00;">"Lavender"</span> <span style="color:#7cfc00;">"PeachPuff"</span>
                            <span style="color:#7cfc00;">"Chartreuse"</span> <span style="color:#7cfc00;">"LawnGreen"</span> <span style="color:#7cfc00;">"Peru"</span>
                            <span style="color:#7cfc00;">"Chocolate"</span> <span style="color:#7cfc00;">"LemonChiffon"</span> <span style="color:#7cfc00;">"Pink"</span>
                            <span style="color:#7cfc00;">"Coral"</span> <span style="color:#7cfc00;">"LightBlue"</span> <span style="color:#7cfc00;">"Plum"</span>
                            <span style="color:#7cfc00;">"CornflowerBlue"</span> <span style="color:#7cfc00;">"LightCoral"</span> <span style="color:#7cfc00;">"PowderBlue"</span>
                            <span style="color:#7cfc00;">"Cornsilk"</span> <span style="color:#7cfc00;">"LightCyan"</span> <span style="color:#7cfc00;">"Purple"</span>
                            <span style="color:#7cfc00;">"Crimson"</span> <span style="color:#7cfc00;">"LightGoldenRodYellow"</span> <span style="color:#7cfc00;">"Red"</span>
                            <span style="color:#7cfc00;">"Cyan"</span> <span style="color:#7cfc00;">"LightGreen"</span> <span style="color:#7cfc00;">"RosyBrown"</span>
                            <span style="color:#7cfc00;">"DarkBlue"</span> <span style="color:#7cfc00;">"LightGrey"</span> <span style="color:#7cfc00;">"RoyalBlue"</span>
                            <span style="color:#7cfc00;">"DarkCyan"</span> <span style="color:#7cfc00;">"LightPink"</span> <span style="color:#7cfc00;">"SaddleBrown"</span>
                            <span style="color:#7cfc00;">"DarkGoldenRod"</span> <span style="color:#7cfc00;">"LightSalmon"</span> <span style="color:#7cfc00;">"Salmon"</span>
                            <span style="color:#7cfc00;">"DarkGray"</span> <span style="color:#7cfc00;">"LightSeaGreen"</span> <span style="color:#7cfc00;">"SandyBrown"</span>
                            <span style="color:#7cfc00;">"DarkGreen"</span> <span style="color:#7cfc00;">"LightSkyBlue"</span> <span style="color:#7cfc00;">"SeaGreen"</span>
                            <span style="color:#7cfc00;">"DarkKhaki"</span> <span style="color:#7cfc00;">"LightSlateGray"</span> <span style="color:#7cfc00;">"SeaShell"</span>
                            <span style="color:#7cfc00;">"DarkMagenta"</span> <span style="color:#7cfc00;">"LightSteelBlue"</span> <span style="color:#7cfc00;">"Sienna"</span>
                            <span style="color:#7cfc00;">"DarkOliveGreen"</span> <span style="color:#7cfc00;">"LightYellow"</span> <span style="color:#7cfc00;">"Silver"</span>
                            <span style="color:#7cfc00;">"DarkOrchid"</span> <span style="color:#7cfc00;">"LimeGreen"</span> <span style="color:#7cfc00;">"SkyBlue"</span>
                            <span style="color:#7cfc00;">"DarkRed"</span> <span style="color:#7cfc00;">"Lime"</span> <span style="color:#7cfc00;">"SlateBlue"</span>
                            <span style="color:#7cfc00;">"DarkSalmon"</span> <span style="color:#7cfc00;">"Linen"</span> <span style="color:#7cfc00;">"SlateGray"</span>
                            <span style="color:#7cfc00;">"DarkSeaGreen"</span> <span style="color:#7cfc00;">"Magenta"</span> <span style="color:#7cfc00;">"Snow"</span>
                            <span style="color:#7cfc00;">"DarkSlateBlue"</span> <span style="color:#7cfc00;">"Maroon"</span> <span style="color:#7cfc00;">"SpringGreen"</span>
                            <span style="color:#7cfc00;">"DarkSlateGray"</span> <span style="color:#7cfc00;">"MediumAquaMarine"</span> <span style="color:#7cfc00;">"SteelBlue"</span>
                            <span style="color:#7cfc00;">"DarkTurquoise"</span> <span style="color:#7cfc00;">"MediumBlue"</span> <span style="color:#7cfc00;">"Tan"</span>
                            <span style="color:#7cfc00;">"DarkViolet"</span> <span style="color:#7cfc00;">"MediumOrchid"</span> <span style="color:#7cfc00;">"Teal"</span>
                            <span style="color:#7cfc00;">"Darkorange"</span> <span style="color:#7cfc00;">"MediumPurple"</span> <span style="color:#7cfc00;">"Thistle"</span>
                            <span style="color:#7cfc00;">"DeepPink"</span> <span style="color:#7cfc00;">"MediumSeaGreen"</span> <span style="color:#7cfc00;">"Tomato"</span>
                            <span style="color:#7cfc00;">"DeepSkyBlue"</span> <span style="color:#7cfc00;">"MediumSlateBlue"</span> <span style="color:#7cfc00;">"Turquoise"</span>
                            <span style="color:#7cfc00;">"DimGray"</span> <span style="color:#7cfc00;">"MediumSpringGreen"</span> <span style="color:#7cfc00;">"Violet"</span>
                            <span style="color:#7cfc00;">"DodgerBlue"</span> <span style="color:#7cfc00;">"MediumTurquoise"</span> <span style="color:#7cfc00;">"Wheat"</span>
                            <span style="color:#7cfc00;">"FireBrick"</span> <span style="color:#7cfc00;">"MediumVioletRed"</span> <span style="color:#7cfc00;">"WhiteSmoke"</span>
                            <span style="color:#7cfc00;">"FloralWhite"</span> <span style="color:#7cfc00;">"MidnightBlue"</span> <span style="color:#7cfc00;">"White"</span>
                            <span style="color:#7cfc00;">"ForestGreen"</span> <span style="color:#7cfc00;">"MintCream"</span> <span style="color:#7cfc00;">"YellowGreen"</span>
                            <span style="color:#7cfc00;">"Fuchsia"</span> <span style="color:#7cfc00;">"MistyRose"</span> <span style="color:#7cfc00;">"Yellow"</span>
                            <span style="color:#7cfc00;">"Gainsboro"</span> <span style="color:#7cfc00;">"Moccasin"</span>
))
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-types-regexp</span> (concat <span style="color:#7cfc00;">"^\\s *</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">"</span> (regexp-opt plantuml-types 'words) <span style="color:#7cfc00;">"</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\&lt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">note\\s +over</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">note\\s +</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">left</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">right</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">bottom</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">top</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\s +</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">of</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">?</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\&lt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">left</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">center</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">right</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\s +</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">header</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">footer</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">\\&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;">"</span>))
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-keywords-regexp</span> (concat <span style="color:#7cfc00;">"^\\s *"</span> (regexp-opt plantuml-keywords 'words)  <span style="color:#7cfc00;">"</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">&lt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">&lt;|</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\*</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">o</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">\\.+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">-+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">\\.+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">-+</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">(</span><span style="color:#7cfc00;">&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">|&gt;</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\*</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">o</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">)</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">\\.\\{2,\\}</span><span style="color:#7cfc00;font-weight:bold;">\\</span><span style="color:#7cfc00;font-weight:bold;">|</span><span style="color:#7cfc00;">-\\{2,\\}"</span>))
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-builtins-regexp</span> (regexp-opt plantuml-builtins 'words))
(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-preprocessors-regexp</span> (concat <span style="color:#7cfc00;">"^\\s *"</span> (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)
        <span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">note: order matters
</span>        ))

<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">keyword completion
</span>(<span style="color:#ee3b3b;">defvar</span> <span style="color:#ffa500;font-weight:bold;">plantuml-kwdList</span> nil <span style="color:#ffa07a;">"plantuml keywords."</span>)

(setq plantuml-kwdList (make-hash-table <span style="color:#ffd700;">:test</span> 'equal))
(mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-types)
(mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-keywords)
(mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-builtins)
(mapc (<span style="color:#ee3b3b;">lambda</span> (x) (puthash x t plantuml-kwdList)) plantuml-preprocessors)
(put 'plantuml-kwdList 'risky-local-variable t)

(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">plantuml-complete-symbol</span> ()
  <span style="color:#ffa07a;">"Perform keyword completion on word before cursor."</span>
  (interactive)
  (<span style="color:#ee3b3b;">let</span> ((posEnd (point))
        (meat (thing-at-point 'symbol))
        maxMatchResult)

    (<span style="color:#ee3b3b;">when</span> (not meat) (setq meat <span style="color:#7cfc00;">""</span>))

    (setq maxMatchResult (try-completion meat plantuml-kwdList))
    (<span style="color:#ee3b3b;">cond</span> ((eq maxMatchResult t))
          ((null maxMatchResult)
           (message <span style="color:#7cfc00;">"Can't find completion for \"%s\""</span> meat)
           (ding))
          ((not (string= meat maxMatchResult))
           (delete-region (- posEnd (length meat)) posEnd)
           (insert maxMatchResult))
          (t (message <span style="color:#7cfc00;">"Making completion list..."</span>)
             (<span style="color:#ee3b3b;">with-output-to-temp-buffer</span> <span style="color:#7cfc00;">"*Completions*"</span>
               (display-completion-list
                (all-completions meat plantuml-kwdList)
                meat))
             (message <span style="color:#7cfc00;">"Making completion list...%s"</span> <span style="color:#7cfc00;">"done"</span>)))))

<span style="color:#00cdcd;font-style:italic;">;; </span><span style="color:#00cdcd;font-style:italic;">clear memory
</span>(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)

(add-to-list 'auto-mode-alist '(<span style="color:#7cfc00;">"\\.plu$"</span> . plantuml-mode))

<span style="color:#00cdcd;font-style:italic;">;;;</span><span style="color:#00cdcd;font-style:italic;">###</span><span style="color:#ff0000;font-style:italic;">autoload</span><span style="color:#00cdcd;font-style:italic;">
</span>(<span style="color:#ee3b3b;">defun</span> <span style="color:#ffffff;font-weight:bold;">plantuml-mode</span> ()
  <span style="color:#ffa07a;">"Major mode for plantuml.

Shortcuts             Command Name
\\[</span><span style="color:#9acd32;">plantuml-complete-symbol</span><span style="color:#ffa07a;">]      `</span><span style="color:#9acd32;">plantuml-complete-symbol</span><span style="color:#ffa07a;">'"</span>

  (interactive)
  (kill-all-local-variables)

<span style="color:#00cdcd;font-style:italic;">;;  </span><span style="color:#00cdcd;font-style:italic;">(python-mode) ; for indentation
</span>  (setq major-mode 'plantuml-mode
        mode-name <span style="color:#7cfc00;">"plantuml"</span>)
  (set-syntax-table plantuml-mode-syntax-table)
  (use-local-map plantuml-mode-map)

  (make-local-variable 'font-lock-defaults)
  (setq font-lock-defaults '((plantuml-font-lock-keywords) nil t))

  (run-mode-hooks 'plantuml-mode-hook))

(<span style="color:#ee3b3b;">provide</span> '<span style="color:#9acd32;">plantuml-mode</span>)</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zhangweize.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zhangweize.wordpress.com/5/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=5&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://zhangweize.wordpress.com/2010/08/25/creating-uml-images-by-using-plantuml-and-org-babel-in-emacs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/6a7fc3211b46f5b69014264e82152f35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zhangweize</media:title>
		</media:content>
	</item>
		<item>
		<title>Hello world!</title>
		<link>https://zhangweize.wordpress.com/2010/07/29/hello-world/</link>
		<comments>https://zhangweize.wordpress.com/2010/07/29/hello-world/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 14:18:12 +0000</pubDate>
		<dc:creator>zhangweize</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://zhangweize.wordpress.com/?p=1</guid>
		<description><![CDATA[Welcome to WordPress.com. This is your first post. Edit or delete it and start blogging!<img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=1&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Welcome to <a href="http://wordpress.com/">WordPress.com</a>. This is your first post. Edit or delete it and start blogging!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/zhangweize.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/zhangweize.wordpress.com/1/" /></a> <img alt="" border="0" src="https://stats.wordpress.com/b.gif?host=zhangweize.wordpress.com&#038;blog=14935848&#038;post=1&#038;subd=zhangweize&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://zhangweize.wordpress.com/2010/07/29/hello-world/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="https://0.gravatar.com/avatar/6a7fc3211b46f5b69014264e82152f35?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">zhangweize</media:title>
		</media:content>
	</item>
	</channel>
</rss>
